Bundles

Every key of a campaign bundle's manifest.json, whether it's required, and a real one from a pattern bundle, generated from spec/bundle-manifest.json

What you'll learn

You're reading, checking, or sharing a frozen campaign bundle and need what its manifest.json records.

  • every key of a bundle manifest
  • which keys are required
  • a real manifest from a pattern bundle

Every key of a campaign bundle's manifest.json, from spec/bundle-manifest.json. A dotted key sits inside the key before the dot, and an upper-case part such as FIELD stands for a name you choose.

manifest.json at the root of a campaign bundle produced by gtme freeze --bundle (SPEC.md §8, ADR-029). A bundle is self-contained (run resolves nothing outside it except credentials), diffable (text files, stable ordering), and portable (contracts travel; membership and cache stay with the ledger). DRAFT: authored in the ADR-022..029 reconciliation pass ahead of the build; the freeze/run/simulate acceptance criteria will harden it.

Keys

KeyTypeRequiredDescription
bundle_format_versionintegeryesFormat version of the bundle layout itself.
namestringyesThe frozen pipeline's name.
source_run_idstringyesThe run whose stored config snapshot this bundle was reconstructed from.
created_atstringyesRFC3339 timestamp of the freeze.
gtm_versionstringnoVersion of the gtme binary that produced the bundle (informational).
contentsmap of string matching ^[0-9a-f]{64}$yesEvery file in the bundle except this manifest, keyed by bundle-relative path, valued by its sha256 hex digest. Stable (sorted-path) ordering when serialized.

Example

From bundles/email-waterfall/manifest.json, a pattern bundle frozen from a run:

{
  "bundle_format_version": 1,
  "name": "email-waterfall",
  "source_run_id": "01M3SPD0BGEXHM8S35PYE2MP2P",
  "created_at": "2026-09-30T17:39:36.986Z",
  "gtm_version": "v0.7.1+dirty",
  "contents": {
    "adapters/finder-a-email/binding.yaml": "38e53e4aa8ca2953a92ffff1e373102b252e0f20b5d81648d1c77b17b255cf88",
    "adapters/finder-a-email/fixtures/conformance.json": "5897674f288808489a66be7bed9dc9f74ffd88a79f4a56a27cb812d09119c92c",
    "adapters/finder-b-email/binding.yaml": "b32cf83fdcadff0fcb5e64de6f41ed3ff2d254ca4b9fa22dbdadb51135e983f6",
    "adapters/finder-b-email/fixtures/conformance.json": "c83411dfab546e1630743e1931eb34d77a592f88fefe8408c7800c4f8e322d76",
    "adapters/verifier-email-status/binding.yaml": "6a8e271f83f50209d54ed693661f5d3d8d5917b3bbb0a00c9b365dbcc1cf3154",
    "adapters/verifier-email-status/fixtures/conformance.json": "dfe6762a1784fb6c58b536ee7495e686dde0ad195675f241676a866fd4eecd9c",
    "pipeline.yaml": "5fc1102450cbfcdfdafbeb8d84c907f816b2e79e04addae84591a77033d45e98",
    "registry/company.json": "56a4a6434fbb77bd24e2fc7f013abb28129a23f2d88d367ae591b9f7230814b5",
    "registry/person.json": "2b4dcaf662c082e1a765c18c8d570a4e54439b36a13383b64a19518b57cb5c41",
    "registry/post.json": "53962867ce1614f937a16b50dddf736045271d7d6f44d4253d989ac571d63508"
  }
}

See also

Used in