{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://thinkloom.app/schemas/provenance/1.0/purge-manifest.schema.json", "title": "Emergency purge manifest", "description": "Explicit disclosure of a destructive provenance and Git reconstitution.", "type": "object", "properties": { "schema_version": { "const": "1.0" }, "purge_id": { "type": "string", "pattern": "^purge_[0-9A-HJKMNP-TV-Z]{26}$" }, "project_id": { "type": "string", "pattern": "^project_[0-9A-HJKMNP-TV-Z]{26}$" }, "requested_at": { "type": "string", "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$" }, "completed_at": { "type": "string", "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$" }, "reason": { "type": "string", "minLength": 1 }, "superseded_chain_head": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }, "new_chain_root": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }, "affected_record_ids": { "type": "array", "items": { "type": "string", "pattern": "^record_[0-9A-HJKMNP-TV-Z]{26}$" }, "minItems": 1, "uniqueItems": true }, "affected_paths": { "type": "array", "items": { "type": "string", "minLength": 1, "pattern": "^(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*(?:^|/)\\.\\.?(?:/|$))[^\\u0000-\\u001f]+$" }, "uniqueItems": true }, "git_history_rewritten": { "const": true }, "prior_copies_revocable": { "const": false }, "confirmation_phrase_sha256": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" } }, "required": [ "schema_version", "purge_id", "project_id", "requested_at", "completed_at", "reason", "superseded_chain_head", "new_chain_root", "affected_record_ids", "affected_paths", "git_history_rewritten", "prior_copies_revocable", "confirmation_phrase_sha256" ], "additionalProperties": false, "examples": [ { "schema_version": "1.0", "purge_id": "purge_01J0000000000000000000000R", "project_id": "project_01J00000000000000000000001", "requested_at": "2026-07-17T18:42:10.123Z", "completed_at": "2026-07-17T18:43:11.456Z", "reason": "Remove accidentally retained credential", "superseded_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444", "new_chain_root": "sha256:5555555555555555555555555555555555555555555555555555555555555555", "affected_record_ids": [ "record_01J00000000000000000000005" ], "affected_paths": [ "records/invocations/request.json" ], "git_history_rewritten": true, "prior_copies_revocable": false, "confirmation_phrase_sha256": "sha256:6666666666666666666666666666666666666666666666666666666666666666" } ] }