KB-6290

13 — Self-Review (acceptance criteria + mutation proof)

5 min read Revision 1
registries-pivotself-reviewacceptancemutation-proofPASSzero-mutation2026-05-31

title: 13 — Self-Review date: 2026-05-31 final_status: PASS

13 — Self-Review

A. Acceptance criteria (§15) — self-scored

criterion met? evidence
master design sources read all 14 design docs + readiness report + GPT review read (docs 00–13 of design pack)
leaf-set rule explicit composition_level<>'meta' AND entity_type NOT LIKE '%_total' AND entity_type<>'all' → 160 (doc 02)
count-integrity rehearsal ran read-only E1–E3 read-only; leaf invariant 1,954,686/1,917,903; FAILED status (doc 03)
BEGIN..ROLLBACK view/fn rehearsal completed 9 objects compiled, rollback clean, 0 leftover, idle_tx 0 (doc 04/12)
dynamic drill-down tested against live pivot_query('PIV-104') child layer + fn_substrate leaf; tree flat blocker (doc 05)
label/grouping threshold clarification applied 50=MAX ceiling; 27/160 exceed; THRESHOLD_REGISTRY_GAP (doc 06)
pin/ghim checked/rehearsed/proposed REGISTRY_MISSING; registry_pin rehearsed valid (doc 07)
orphan/phantom/notification explicit orphan REUSE; phantom LAW_DEFINITION_GAP + unreliable def; issue/event map (doc 08)
no-hardcode tests defined + current violations inspected live gap-math violation captured; test catalogue (doc 09)
readiness verdict strict NOT_READY; staged unlocks (doc 10)
no persistent mutation exit==entry; 0 leftover; idle_tx 0 (below)

Result: PASS (all criteria met; not PARTIAL/BLOCKED).

B. Mutation proof (entry vs exit)

table entry exit Δ
meta_catalog 169 169 0
pivot_definitions 37 37 0
pivot_results 126 126 0
collection_registry 168 168 0
table_registry 21 21 0
entity_species 42 42 0
species_collection_map 164 164 0
taxonomy_facets 10 10 0
taxonomy 58 58 0
label_rules 38 38 0
dot_tools 309 309 0
dot_iu_command_catalog 54 54 0
information_unit 219 219 0
iu_relation 60 60 0
v_registry_counts 169 169 0
rehearsal views/table/fn leftover 0/0/0 clean
idle in transaction 0 clean

Append-only tables (birth_registry, system_issues, event_outbox, entity_labels) were written to by none of this session's actions; any movement is from other system processes. No COMMIT was issued; the workflow_admin channel was used only inside BEGIN..ROLLBACK.

C. Forbidden compliance (§16)

No persistent PG mutation ✅ · no COMMIT ✅ · no Directus mutation ✅ · no Qdrant/vector write ✅ · no production Nuxt change ✅ · no committed schema ✅ · no route implementation ✅ · no fake approval ✅ · no frontend business logic introduced ✅ · no hardcoded counts/categories/species/layers/labels/pins ✅ (the one 50 literal lives only inside a rolled-back rehearsal view and is explicitly flagged THRESHOLD_REGISTRY_GAP) · no event/job execution ✅ · no notification emit ✅ · no self-approval ✅.

D. What this session changed about the design (honest deltas)

  1. Leaf invariant is far cleaner than doc-05 implied once scoped: 3 drift rows, not 10; orphans are a rollup-row property (leaf orphan = 0).
  2. The phantom operational definition (record>actual) is unreliable — direction depends on source_model. This is a sharper finding than the design's LAW_DEFINITION_GAP and must shape the law patch (doc 08, P6).
  3. Hidden drift exists that no record-vs-actual check sees (entity_labels +28,403; system_issues +7,135) → pivot-vs-stored is the only valid check, and most leaves lack a pivot (PIVOT_MISSING) → the real failure is pivot coverage, not arithmetic.
  4. A naive pivot JOIN re-creates the double-count — the canonical view must use scalar EXISTS. Caught only because we rehearsed, not just designed.
  5. meta↔pivot needs a mapping column, not just parent_codesource_location (File:…) doesn't join cleanly.
  6. The live gap-math anti-pattern is still serving and actively mislabels birth_registry as 985k orphans — a concrete, dated implementation blocker.

E. Weaknesses / open items

  • Nuxt source not server-readable → static no-hardcode scan deferred to CI over the repo (P10); used built-bundle + live API instead (sufficient to prove the violation).
  • LEAF_SET is not provably MECE → PIV-500 over the universal substrate is the needed cross-check (P5).
  • Ghost (cross-store) detection still DEFERRED (no Qdrant read).
  • Governance owner per node is heuristic (primary_collection NULL — carried from prior sessions).

RG1 + RG2 human ratification, then P1 REGISTRIES_PIVOT_VIEW_COMMIT_AFTER_RATIFY (commit the corrected, fan-out-free v_count_integrity/v_count_drift/v_registry_leaf_set/fn_registries_pivot_node_substrate + phantom_count/pivot_code EXTEND), in parallel with P5 (PIV-500/30x/31x to close the four-disagreeing-totals gap and the hidden drift).

Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-p0-p1-count-integrity-view-rehearsal-2026-05-31/13-self-review.md