Map Provenance Survival
Measure a real pipeline instead of assuming that metadata survives it.
All paths below are relative to this skill's directory. If you are running from
elsewhere, use an absolute path to scripts/map_survival.py.
Workflow
Keep an untouched original and record every transformation.
Obtain each derivative through the actual user-visible workflow.
Run:
python3 scripts/map_survival.py \ --original original.png \ --derivative resized=resized.png \ --derivative cms-download=downloaded.pngFor a directory of derivatives and a shareable report:
python3 scripts/map_survival.py \ --original original.png \ --derivatives-dir transformed-copies/ \ --report survival-report.htmlAdd
--c2patool /path/to/c2patoolfor cryptographic validation. Remote-manifest fetching is disabled unless--allow-networkis explicitly supplied.Treat
LOST_OR_UNAVAILABLEas an observed pipeline outcome, not proof of deliberate stripping.Read
summaryfor the counts, then quote individual rows for detail.Re-run after pipeline, CDN, export, or platform changes.
Shareable reports
--reportaccepts a new.html,.htm,.md, or.markdownpath and refuses to overwrite it.- HTML reports are self-contained and script-free. Markdown reports have the same evidence and caveats.
- Absolute paths and the reproducibility command are redacted by default.
--include-pathsis an explicit opt-in. - JSON always remains on stdout, even when a report is written.
- A report evaluates C2PA provenance survival only. It must not imply that proprietary pixel, audio, video, or keyed text watermark detectors ran.
- Directory batches skip hidden entries and symlinks, recursively sort files, and use relative labels. With multiple directories, labels are prefixed by the directory name.
Evaluating a transformation tool
This skill also measures what a metadata-removal or optimisation tool actually removes. Run the tool over a signed original, pass its output as a derivative, and report the observed matrix. Report only what was observed: this skill does not certify that any downstream detector will or will not fire.
Experimental discipline
- Change one transformation per derivative where possible.
- Hash every artifact.
- Keep content comparison separate from provenance comparison.
- Record the app, command, platform, and date outside the generated matrix.
- A different hash alone does not mean provenance failed; a derivative is expected to differ.
- Use a conforming verifier before describing evidence as
PRESENT,VALID, orINVALID. - Evaluate signer trust separately with
verify-content-credentials; this survival workflow does not select a trust policy.
Read references/survival-testing.md for the state model and test design.