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
| Key | Type | Required | Description |
|---|---|---|---|
bundle_format_version | integer | yes | Format version of the bundle layout itself. |
name | string | yes | The frozen pipeline's name. |
source_run_id | string | yes | The run whose stored config snapshot this bundle was reconstructed from. |
created_at | string | yes | RFC3339 timestamp of the freeze. |
gtm_version | string | no | Version of the gtme binary that produced the bundle (informational). |
contents | map of string matching ^[0-9a-f]{64}$ | yes | Every 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
- A campaign is a folder: The bundle layout and every manifest key