Skip to content

gamut-cli: report a C2PA manifest store in gamut inspect, and state that it is not validated #448

Description

@justin13888

Part of #239 — one of its acceptance criteria, with no child issue until now. Blocked by #428 and
at least one container slice (#429 is enough).

Goal

gamut inspect reports a C2PA manifest store's presence, size and byte offsets, and states
plainly that it does not validate it.

Scope

gamut-cli is the sandbox that exercises implemented features, and Command::Inspect
(src/main.rs:66) already exists. This adds one section to its output, for every format whose
crate can locate a store — HEIC first (#429), then each container slice as it lands (#440,
#442, #444, #445, #446).

What to print

  • Whether a store is present.
  • Its size in bytes and its half-open byte range in the file.
  • For BMFF, the box_purpose of the carrying uuid box (manifest / original / update) — a
    file mid-update legitimately carries two stores, and hiding that behind "1 store found" is
    misleading.
  • An explicit disclaimer. Not a footnote: the line that reports the store says gamut does not
    check the signature, the hash binding, or the trust list, and names c2pa-rs as what does.

Why the disclaimer is a requirement and not politeness

A tool that prints "C2PA: present" beside EXIF and ICC reads as verified to anyone who has seen
a Content Credentials badge. gamut deliberately holds no crypto and reaches no verdict (#239's
scope), so the output must not let a reader infer one. Phrasing that implies validation is a
defect in this issue, not a wording preference.

What not to do

  • Do not print the store's contents, decoded or hex-dumped by default. It is opaque bytes to
    gamut, it is routinely tens or hundreds of kilobytes once a manifest embeds a thumbnail, and
    rendering it invites exactly the "gamut understands manifests" reading above. A byte range is
    enough to hand to c2pa-rs or to dd.
  • Do not report a remote-provenance URL as a store. That is gamut-xmp/gamut-metadata: report remote provenance from dcterms:provenance #449, the XMP
    dcterms:provenance criterion; none and remote are different answers and both differ from
    embedded.

Note on gates

gamut-cli is excluded from the coverage gate via --ignore-filename-regex, so the reporting
logic should live where it can be tested — in the format crate or a small helper — with the CLI
holding only the formatting.

Reference

C2PA Technical Specification 2.4 §15.12 (validation is a validator's job), §A.5.3 (box_purpose).
Staked by #427.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions