Schema: operation-receipt
{
"$id": "https://australis.systems/schemas/htmx-ui-template-scaffold/operation-receipt.schema.json",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Target-side receipt emitted by reconcile, assets sync, and other operations. The receipt records the operation kind, dry-run flag, ordered per-path status outcomes, and an RFC3339 timestamp. Optional fields bind the receipt to the plan or asset approval that authorized it. NOTE: planner.py.sync_assets() does NOT emit plan_digest; only planner.py.reconcile() does. Producers MUST attach plan_digest only when the underlying operation was reconcile.",
"properties": {
"backup_path": {
"minLength": 1,
"type": "string"
},
"corpus_manifest_path": {
"description": "Optional target-state-relative path to the Shape-B corpus manifest emitted after successful non-dry reconcile.",
"minLength": 1,
"type": "string"
},
"dry_run": {
"description": "True if the operation computed the receipt without mutating. False if any filesystem mutation or state-root creation occurred.",
"type": "boolean"
},
"history_revision": {
"description": "Optional immutable history revision id assigned to this operation. Populated when not a dry run.",
"minLength": 1,
"type": "string"
},
"journal_path": {
"minLength": 1,
"type": "string"
},
"operation": {
"description": "Operation discriminator. Mapped reconcile is distinct from generic reconcile.",
"enum": [
"reconcile",
"mapped_reconcile",
"assets_sync"
],
"type": "string"
},
"operations": {
"description": "Per-path status entries, ordered as executed.",
"items": {
"additionalProperties": false,
"properties": {
"path": {
"description": "Target-relative path the operation refers to.",
"minLength": 1,
"type": "string"
},
"source_path": {
"minLength": 1,
"type": "string"
},
"status": {
"description": "Operation status emitted by reconcile or assets sync.",
"enum": [
"CREATE",
"CREATE_PARTIAL",
"IDENTICAL",
"MANAGED_DRIFT",
"PRESERVED_EXISTING",
"UPDATE",
"UPDATE_PARTIAL",
"UPGRADE",
"REPLACED"
],
"type": "string"
}
},
"required": [
"path",
"status"
],
"type": "object"
},
"type": "array"
},
"plan_digest": {
"description": "OPTIONAL SHA-256 hex digest of the plan that authorized this receipt. Reconcile emits this; assets sync MUST omit it because assets sync binds to an asset approval rather than a plan.",
"pattern": "^[a-f0-9]{64}$",
"type": "string"
},
"profile_validations": {
"items": {
"additionalProperties": false,
"properties": {
"profile": {
"enum": [
"PAGE_ONLY",
"PAGE_WITH_HTMX_PARTIALS"
],
"type": "string"
},
"route_id": {
"minLength": 1,
"type": "string"
},
"status": {
"const": "PASS"
}
},
"required": [
"route_id",
"profile",
"status"
],
"type": "object"
},
"type": "array"
},
"replacement_mode": {
"type": "boolean"
},
"schema_version": {
"description": "Major-version-locked envelope. Documents with any value other than 1.0.0 MUST fail validation, which enforces the major-version-1 contract.",
"enum": [
"1.0.0"
],
"type": "string"
},
"target_state_digest": {
"description": "SHA-256 digest of the expected post-reconcile target state (approved paths only); null when the approval omitted this field.",
"pattern": "^[a-f0-9]{64}$",
"type": [
"string",
"null"
]
},
"timestamp_utc": {
"description": "RFC3339 (ISO 8601 with UTC offset) timestamp the receipt was produced.",
"format": "date-time",
"type": "string"
}
},
"required": [
"schema_version",
"operation",
"dry_run",
"operations",
"timestamp_utc"
],
"title": "Operation Receipt",
"type": "object"
}