| D1 · Provenance & lineage |
| PRV-1 | Four-tag evidence classificationCANON.md § The four tags | An invented claim aging into accepted fact. Untagged is defined as a bug. | HUMAN | Live. No script validates tag presence. |
| PRV-2 | Six-status quotation register1-ACADEMIC/QUOTE_REGISTER.md | A quotation reaching a page unadjudicated. | HYBRID | ~166 ids, 22 passes. ~22 rows unparseable. |
| PRV-3 | Never rewritten backwardQUOTE_REGISTER.md §0 | Silent revision of an audit trail. Reversals stay visible with the correction attached. | HUMAN | Convention, not constraint. |
| PRV-4 | Corpus bias disclosureACQUISITIONS.md §0 · provenance.py | A single-perspective corpus read as a neutral one. Every [DOC] currently means one man's papers. | HYBRID | Disclosed. The imbalance itself is unfixed. |
| PRV-5 | Parse-failure honesty_index/segment.py | A parser's failure read as an archive's silence. Counts print with their failures beside them. | AUTOMATED | 15,909 records; 441 undated, all reported. |
| PRV-6 | Coverage report on every query_index/retrieve.py | “Searched and found nothing” confused with “could not search.” | AUTOMATED | Live. Headnotes detectable in 6 of 11 vols. |
| PRV-7 | Asset provenance sidecarsanimation/frames/*_panel.json | An unattributable generated image. Model, params, full prompt, prompt hash, image hash, source URL. | AUTOMATED | 46/46. Records that no seed exists. |
| D2 · Output gating & refusal |
| GAT-1 | Four-level verdict gate_index/verdict.py | OCR text mistaken for a quotation. Never upgrades; only narrows. | AUTOMATED | 5/5 self-tests; 160 rows parsed. |
| GAT-2 | Fail closed on unreadable rulebookverdict.py · load_register() | A missing control file read as permission. “A missing rulebook is not permission.” | AUTOMATED | Live, self-tested both directions. |
| GAT-3 | Consultation name fenceverdict.py · MUSCOGEE_FENCE | A gated name leaving the system pre-consultation. Checked before the register is read. | AUTOMATED | Over-broad, no override. Cannot catch an unwritten name. |
| GAT-4 | Whole-scene blockingbuild_cast_cards.py · D-08 gate | Partial compliance. “A scene is not partially generable.” | AUTOMATED | Live. Draft flag narrows it; omitting restores. |
| GAT-5 | Unreachable withholding classbuild_cast_cards.py · held_atrocity | A model rendering mass killing in its default register. No flag touches it. | AUTOMATED | 12 beats, 3 units, no override path. |
| GAT-6 | Hidden-state suppressionSTAGING_SYSTEM.md §2a | A concealed motive being illustrated and thereby revealed. Only the observable consequence ships. | AUTOMATED | Blanket exclusion; the routing field is populated on ~18 of 155. |
| GAT-7 | Prompt sanitisation, fail-closedbuild_cast_cards.py · strip_tags / WORKTALK | Internal metadata reaching a model as a thing to draw. A sentence about the work is dropped whole. | AUTOMATED | Live; 76 tags were leaking before it. |
| GAT-8 | Pre-spend refusal_bin/plan_generation.py | Paid generation against stale or self-contradictory inputs. | AUTOMATED | Live. Spends nothing itself. |
| GAT-9 | Refuse rather than inferretrieve.py · persona.py | A parse failure masquerading as a fact. “Refusing to guess.” | AUTOMATED | Live in both modules. |
| D3 · Authority & human-in-the-loop |
| AUT-1 | Five-tier authority orderCANON.md § Authority order | Source conflicts resolved by whichever was read last. | HUMAN | Live. Tier 1 is read-only by rule. |
| AUT-2 | Build hierarchy L0–L4CAST_CARD_PROGRAM.md §1 | Hand-edits to generated files diverging from source. Edit the bible and rebuild. | HYBRID | Backed by drift detection. L0 (the page) outranks L1. |
| AUT-3 | Automation-boundary testVISION.md §6 | Automating a decision whose errors are undetectable. Expensive and silent → a human catches it. | HUMAN | Four categories named, incl. one never automated. |
| AUT-4 | Explicit sign-off queueOPEN_DECISIONS.md · QUEUE block | A decision needing the principal lost in a chronological log. | HYBRID | Live — with 2 duplicated ids and 4 stale closed rows. |
| AUT-5 | Tier discipline / load pathCANON.md § Tier discipline | Work built on material never established upstream. | HUMAN | Stated; breached — pipeline stages 1–3 bypassed. |
| AUT-6 | Consumer interface restriction4-PRODUCTION/cast/AGENT_PROTOCOL.md | Two agents reading one authority and reaching two answers. Exactly two files per unit. | HUMAN | Protocol-enforced, not sandboxed. Weakest class here. |
| D4 · Change control, integrity & recovery |
| CHG-1 | Rejected-write stop rulePROJECT_INSTRUCTIONS.md §7 | Concurrent-edit loss. Never pass force; read the newer version and merge. | HUMAN | Written after two same-day incidents. |
| CHG-2 | Mandatory pre-write snapshots0-PROJECT/_verify/ | Irreversible edits in a project with no commit history. | HUMAN | 46 snapshot sets. Not a substitute for VCS. |
| CHG-3 | Byte-collapse detectorcheck_knowledge_precedence.py | A silent authority-file overwrite. Fails above 40% loss; refuses to re-baseline while failing. | AUTOMATED | Missed a 41% loss at the threshold. |
| CHG-4 | Cast-card drift detection_bin/check_cast_drift.py | A generated artifact silently diverging from its authorities. | AUTOMATED | Live. Structurally blind to the governance tier. |
| CHG-5 | Identifier resolution_bin/check_ids.py | A citation to nothing. Every id must resolve to its owning register. | AUTOMATED | Live. States it cannot detect a collision. |
| CHG-6 | Stale-instruction sweepcheck_closed_decisions.py | Documents still arguing a settled decision. | AUTOMATED | Found 11 stale files; reported clean on wreckage once. |
| CHG-7 | Computed ages, never typedCAST_INDEX.md R1 · check_age_spine.py | One person aging inconsistently across scenes. | AUTOMATED | 0 mismatches; visual sheets still breach the rule. |
| CHG-8 | Immutable release freezeDRAFT-01_FROZEN_2026-09-02/ | A shipped version quietly improved. SHA-256 on all 94 files. | AUTOMATED | Sealed. “A frozen draft that gets tidied is not a record.” |
| CHG-9 | Redistribution boundary.gitignore | Licensed primary sources redistributed by a repository. | AUTOMATED | Live. Also excludes 5 guard scripts from VCS. |
| D5 · Third-party & delegated model risk |
| DEL-1 | Access verified on a held factDELEGATION_LOG.md · D-29 | A delegate fabricating results for a source it never received. | HUMAN | Live, elevated into canon. Most transferable control here. |
| DEL-2 | Scope fence on delegable workDELEGATION_LOG.md | Judgment leaving the system. Every quotation verdict stays in-house. | HUMAN | Live. Delegate reaches no local file, ever. |
| DEL-3 | Staged disposition of returnsdelegation/returned/ RAW + DISPOSITION | A delegated finding applied before it is assessed. | HUMAN | Live, after fabricated findings stood ~1hr in 4 files. |
| DEL-4 | Falsifiable negativesknowledge/DELEGATION.md | An unfalsifiable “no hits.” Enumerated verdicts with expected counts. | HUMAN | Live. Four return-failure modes tracked. |
| DEL-5 | Export sanitisation gate_bin/build_exchange.py | Leaking internal reasoning to an external reviewer. | AUTOMATED | Live. Refuses to write on any leak. |
| D6 · Ethical & consultation constraints |
| ETH-1 | Pre-production consultationD-08 · CANON.md · INDEX.md | Cultural material depicted without the community's involvement. | HYBRID | Open and disclosed as open. Not a gate — a precondition. |
| ETH-2 | Placeholder-name disciplineCAST_INDEX.md R2 | A provisional name hardening into a fact. Ids are opaque; a name must never be the key. | HYBRID | Live. Never invent a name for a real person. |
| ETH-3 | Persona capability refusedASSESSMENT_AJ-CHATBOT §4 | A generative persona speaking for a people in their conquerors' words. Tier 3: do not build. | HUMAN | Ruled before the capability existed, not after. |
| ETH-4 | Third-party content classificationsource-ip/SOURCE_INDEX.md §2 | Secondary media treated as evidence. Ten videos classed not sources. | HUMAN | Classified; licenses still unrecorded. |
| D7 · Evaluation & independent review |
| EVL-1 | 75-point rubric with overrides6-QUALITY-ASSURANCE/RUBRIC.md | A good average concealing a disqualifying defect. 13 conditions checked first. | HUMAN | Round 1: 66/75. Versions never overwritten. |
| EVL-2 | Dated, immutable rounds6-QUALITY-ASSURANCE/rounds/ | Scores drifting without a record of why. Philosophy changes logged separately from progress. | HUMAN | 3 rounds. Two were re-runs of invalidated negatives. |
| EVL-3 | Cross-artifact consistency auditCROSS_ARTIFACT_AUDIT_2026-08-26.md | Layers agreeing with themselves while disagreeing with each other. | HUMAN | 3 gaps fixed in-pass, 9 findings left open. |
| EVL-4 | Human page-check ledger_index/PAGE_CHECKED.md | OCR error entering the record as a quotation. One row = one person opened the volume. | HUMAN | Empty. Verified 3 Sep 2026. |
| D8 · Measurement integrity |
| MSR-1 | Empty-gate invalidationINDEX.md §4 | A vacuous pass. A gate that passes because it produced nothing to check is not a gate. | HUMAN | Stated and self-applied. |
| MSR-2 | Denominator disciplineINDEX.md §5 | Coverage measured against a directory listing rather than the ledger's rows. | HUMAN | Live. Most software coverage metrics fail this. |
| MSR-3 | No burndown reportingSTAGING_PROGRAM.md §5b | A velocity metric distorting quality work. Beats-closed does not measure success. | HUMAN | Live. A rule about how governance may be reported. |
| Gaps · named controls not built or not wired |
| CHG-10 | Version control.git · commit 1f66deb, 3 Sep 2026 | The entire class of overwrite incident that produced CHG-1 to CHG-3. Was GAP-1 — the highest-leverage unbuilt control here. | AUTOMATED | Closed 3 Sep 2026. 901 files, 17.3 MiB packed. |
| GAP-2 | Page-check recordingnothing sets page_checked | Would make the top gate level reachable. The gate reads the ledger; nothing writes to it. | NOT BUILT | Named as a small build. First row identified. |
| GAP-3 | Intra-document contradiction checkno implementation | Prose contradicting a machine-read field in the same block. Nothing compares a file to itself. | NOT BUILT | One instance found by a person. |
| GAP-4 | Tag-presence validationno implementation | An untagged claim — defined by canon as a bug — going undetected. | NOT BUILT | Two undefined tag forms now in wide use. |
| GAP-5 | Subject-classification fieldstaging/_PROPOSED_IDENTITY_FIELD.md | The consultation gate keying on wardrobe data, so a covered person can be missed. | PROPOSED | Blocked on principle. Four fences compensate. |
| GAP-6 | Decision-count floorrecommended, not implemented | A checker reporting clean because its input was destroyed. | NOT BUILT | Recommended 28 Aug. Unbuilt. |
| GAP-7 | Rights & permissions assessmentno document exists | An unassessed copyright, privacy or publicity exposure at release. | NOT BUILT | Scored 3/5 for its absence. No owner assigned. |