10 — Production Acceptance Suite (Branch I)
title: 10 — Production Acceptance Suite (Branch I) date: 2026-05-31 status: suite defined; read-only portions RUN this macro
10 — Production Acceptance Suite (Branch I)
13 acceptance tests. Read-only portions executed live this run; mutation-dependent tests specified with their gate. RUN-NOW results below are from live reads / BEGIN..ROLLBACK.
| # | test | method | gate | result this run |
|---|---|---|---|---|
| 1 | pivot-only count | every leaf count traces to a pivot or PIVOT_MISSING; no JS sum |
now (read) | PASS-by-design: 21/160 pivot-backed, 139 explicitly PIVOT_MISSING (none silently 0). PIV-500 returns a genuine SUM (engine-proven 2,007,261). |
| 2 | no-hardcode scan | grep Nuxt source for reduce(+gap/record), Math.abs(gap), hardcoded CAT-*, localStorage pins |
now (read) | legacy FAILS as expected (7 violations, doc 09/12); NEW surface must be 0. Gate is the cutover precondition. |
| 3 | drilldown | parent_code graph flat→hierarchical, no dangling, count>1 drills, leaf→substrate | now (rehearsal) | PASS: 37 nodes → 24 roots / 6 parents / 13 children / 0 dangling / depth 3 / cycle-free; leaf PIV-007→dot_tools→CAT-006→File:dot/bin/. |
| 4 | orphan/phantom | orphan leaf=0; phantom is source_model-aware candidate, never asserted | now (read) | PASS: orphan(leaf)=0, orphan(meta)=161, phantom_candidate=1 (CAT-006), classification source_model-aware. |
| 5 | label grouping | ceiling PG-resolved; over-ceiling lists flagged; PIV-311 groups | now (rehearsal) | PASS: 28/160 over resolved ceiling; PIV-311 = 23 groups Σ726,864. |
| 6 | pin | PG-backed, scoped, pivot-countable, soft-retire | now (rehearsal) | PASS: registry_pin 2 rows, scope CHECK valid, active flag; PIV-321 ready. |
| 7 | Directus/API | read endpoints, no count math, GOOD pattern | partial now | PARTIAL: GOOD pattern pivot-query.get.ts live (200); 8 new endpoints specified (doc 06); registration gated RG7. |
| 8 | UI render-shell | 100% counts pivot-traced, 0 client math, honest status (Đ28 Test-4) | gated RG8 | SPEC (doc 08); preview v2 demonstrates the contract. |
| 9 | legacy retirement | parity gate + redirect + rollback before cutover | gated RG9 | PLAN (doc 09); not executed. |
| 10 | rollback | every rehearsal leaves PRE==POST, idle_in_tx=0 | now | PASS: display_policy/registry_pin PRE 0 / POST 0, idle 0; six-object/parent_code/pivot bundle rollback-clean (Macro 1, re-confirmed 0 present). |
| 11 | performance/load smoke | routes respond | now (read) | PASS w/ note: /knowledge/pivot fast; /knowledge/registries heavy (legacy, ~4.3s/603KB historically) — convergence onto pivot shell is the fix. |
| 12 | security/permission | reads via read-only role / service token; no client PG creds; read-only API | now (read) | PASS: live reads as context_pack_readonly; apply-channel workflow_admin rehearsal-only; Directus reads server-side via service token (§0-AV). |
| 13 | notification contract | count_integrity/phantom/pin/label events defined; idempotent | now (read) | PASS-by-design: event_type_registry has 0 such types (NEW needed); event_outbox + system_issues.coalesce_key give idempotent emit (doc 05). No event emitted. |
Pivot-only acceptance assertion (the headline, Đ28 Test-4)
After RG1–RG8: a test must assert that for the rendered /knowledge/registries-pivot, every
displayed number equals either a pivot_results value or is labelled PIVOT_MISSING, and
that grep finds zero count math in the shell. Today the contract is proven (PIV-500 SUM,
v_count_integrity, v_count_drift, PIV-311) and the legacy surface fails — which is exactly
why convergence is needed.
Invariant-closure acceptance (do not assert an absolute)
count_integrity tests must assert closure (Σ drift gaps == leaf net_gap), NOT an
absolute net_gap — net_gap fluctuates with the CAT-023 birth race (it moved within this
session). Asserting an absolute would be flaky by design.
Verdict
Acceptance suite COMPLETE. All 13 tests defined; 8 ran read-only/rehearsal and PASS; the rest are correctly gated. No unsafe action taken.