{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ITWorx MCP Hub Release Record", "description": "Unambiguous, machine-readable release provenance: distinguishes repository HEAD, application source commit, image build revision, deployed revision, release-evidence commit, and annotated release tag. See docs/09-release/RELEASE_PROVENANCE.md.", "type": "object", "additionalProperties": false, "$id": "https://hub.example.com/schemas/release-record.schema.json", "required": [ "schemaVersion", "generatedAt", "repositoryHead", "releaseSourceCommit", "imageBuildRevision", "deployedRevision", "releaseEvidenceCommit", "releaseTag", "images" ], "properties": { "schemaVersion": { "const": "1.0" }, "generatedAt": { "type": "string", "format": "date-time" }, "repositoryHead": { "description": "The exact commit this record was rendered against. Always populated: `git rev-parse HEAD` at render time.", "type": "string", "pattern": "^[0-9a-f]{40}$" }, "releaseSourceCommit": { "description": "The one exact commit every owned runtime image for this release is built from. Preferred-model invariant: this equals imageBuildRevision for every image in `images` once a release is cut.", "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" }, "imageBuildRevision": { "description": "The commit baked into every owned image's org.opencontainers.image.revision label at build time (see infrastructure/images/*/Dockerfile GIT_REVISION build arg). Must equal releaseSourceCommit for a valid release; a mismatch here is a release-blocking defect, not a warning.", "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" }, "deployedRevision": { "description": "The commit each named deployment target actually runs, keyed by target name (e.g. \"tower\"). Populated only from live-verified evidence (e.g. evidence/WP-190, WP-210); never inferred or assumed.", "type": "object", "additionalProperties": { "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" } }, "releaseEvidenceCommit": { "description": "The commit that recorded this release's post-acceptance evidence (e.g. a docs/evidence-only commit made after live acceptance testing). Deliberately distinct from releaseSourceCommit: evidence is committed after the fact and must never be presented as though it were the source revision that was built and tested.", "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" }, "releaseTag": { "description": "The annotated Git tag (e.g. v1.0.0) pointing at releaseSourceCommit, once created. Null before tagging.", "type": ["string", "null"] }, "images": { "description": "Per-service image provenance: tag, immutable digest, and the commit baked into its OCI revision label.", "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "required": ["revision"], "properties": { "tag": { "type": "string" }, "digest": { "type": ["string", "null"], "pattern": "^sha256:[0-9a-f]{64}$" }, "revision": { "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" } } } }, "notes": { "type": "string" } } }