07 · Birth / Governance / RP Synchronization Matrix
07 · Birth / Governance / RP Synchronization Matrix
Area 7 verdict: PARTIAL. The governance posture is honest (no fakes), but several objects are RP-visible-but-not-governed and the per-node contract does not yet carry governance sync state. One dangerous-mismatch risk is identified and must be labeled.
1. Sync states (legend)
- DESIGNED — specified in this/earlier design, not built.
- IMPLEMENTED — live in PG.
- CANDIDATE_ONLY — exists but
status=CANDIDATE, not ratified. - GOVERNANCE_MISSING — no owner / no axis_registry row / no vote.
- BIRTH_MISSING — object exists without a birth_registry record.
- RP_VISIBLE_NOT_GOVERNED — surfaced in the contract but no governance home.
- DANGEROUS_MISMATCH — RP shows a number/state that could be read as official/authoritative but is not.
2. Synchronization matrix
| Object / concept | birth_registry | axis_registry | axis_assignment | ownership | approval / vote | pivot_definitions | event_type_registry | UI contract | Sync state |
|---|---|---|---|---|---|---|---|---|---|
| AX-TOPIC | n/a (lens) | CANDIDATE row | 25 (all AX-TOPIC) | 0 | none | v_axis_topic_pivots |
— | emitted (7) | CANDIDATE_ONLY |
| AX-PROCESS | n/a | CANDIDATE row | 0 | 0 | PROC-OWN-01..05 pending | v_axis_process_pivots |
process.* 0/7 | emitted (22) | CANDIDATE_ONLY + GOVERNANCE_MISSING (owner) |
| AX-BASE | base objs born | absent | n/a (lens) | n/a | n/a | PIV-*/dot_tools | event_type_registry | emitted (39) | RP_VISIBLE_NOT_GOVERNED → fix: DERIVED_STRUCTURAL (doc 06) |
| AX-PXT | n/a (derived) | absent | n/a | n/a | n/a | — | — | emitted (12) | RP_VISIBLE_NOT_GOVERNED → fix: DERIVED_CROSS (terminal) |
| AX-TRIGGER | triggers exist | absent | 0 | 0 | none | — | 52 evt | emitted (7) | RP_VISIBLE_NOT_GOVERNED + GOVERNANCE_MISSING (owner) |
| Official RP (any axis) | — | — | 0/453 | 0 | 0 votes | — | — | shown as 0 | IMPLEMENTED-honest (0, not faked) |
| job:cut (first official process) | born | via AX-PROCESS | pending | 0 | PROC-OWN-03 pending | — | — | READY_FOR_PRESIDENT | CANDIDATE_ONLY (ready) |
| wf_process_candidate (19) | born | AX-PROCESS lens | n/a | 0 | n/a | — | — | drill children | IMPLEMENTED + GOVERNANCE_MISSING (owner) |
Canonical _current contract |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | not built | DESIGNED (doc 02) |
| Registry-driven base | n/a | needs cols | n/a | n/a | n/a | n/a | n/a | not built | DESIGNED (doc 03) |
| Full-population invariant | n/a | n/a | n/a | n/a | n/a | n/a | n/a | not built | DESIGNED (doc 04) |
| Reliability fields (full) | n/a | reads governance_class | n/a | n/a | n/a | n/a | n/a | proxies only | PARTIAL (doc 05) |
| PXT ledger static literals | n/a | n/a | n/a | n/a | n/a | residual 8≠2; job_queue 8≠13 | — | shown as counts | DANGEROUS_MISMATCH (stale number readable as live) |
| process. events* | — | — | — | — | PROC-OWN-05 + 1st official | — | 0/7 active, emit=false | IMPLEMENTED-honest (fail-closed) |
3. The dangerous-mismatch (must label until fixed)
PXT ledger static literals (v_rp_static_literal_detector: residual_reconcile 8 vs live 2; job_queue 8 vs live 13). These are hardcoded counts rendered alongside live counts. A viewer cannot tell which numbers are live and which are stale literals. Until refactored to live subqueries (doc 05 / data-debt), the per-node reliability_label for these nodes must be STALE and the UI must badge them. This is the only place where RP could mislead — and it is already detected (just not yet propagated to the node).
Not dangerous (verified honest): official RP shows 0 (not faked); ownership/votes/REAL_RUN all 0; events fail-closed. The system does not invent authority.
4. Synchronization design requirement
Add a per-node governance sync column to _current (or a sibling v_rp_node_governance_sync):
gov_sync_state TEXT -- OFFICIAL | CANDIDATE | DERIVED | RP_VISIBLE_NOT_GOVERNED | STALE_NUMBER | BIRTH_MISSING
computed from: axis_registry presence + governance_class + axis_assignment + ownership + the static-literal detector. This makes the matrix above live and per-node, so the UI never shows a node without its governance sync state.
5. Five-layer sync note (law §5 constitutional)
RP is currently a PG-only reflection; the five-layer chain is PG → Directus → Nuxt → AgentData/KB → Qdrant. RP contract lives in PG; the UI (Nuxt) consumes via API pass-through (assembly-first, no direct-PG-from-Nuxt — confirmed by the UI package design). Directus/KB/Qdrant are not part of the contract surface (RP is a read-model), which is acceptable — but doc 09 must confirm the Nuxt layer binds _current only.
6. Classification
| Issue | Class | Severity |
|---|---|---|
| AX-BASE/AX-PXT/AX-TRIGGER RP-visible-not-governed | GOVERNANCE_BLOCKED + DESIGN_DRIFT | P1 |
| PXT ledger stale literals readable as live (dangerous-mismatch) | DATA_DEBT | P1 (label now), P2 (refactor) |
No per-node gov_sync_state |
ARCHITECTURE_GAP | P2 |
| AX-PROCESS/job:cut owner missing | GOVERNANCE_BLOCKED | P3 (authority) |
7. Required technical spec for T1 (Area 7)
- Propagate
STALE_LITERALfromv_rp_static_literal_detectoronto the nodereliability_label/warning_flags(closes the dangerous-mismatch labeling). - Build
gov_sync_state(per-node) from registry+ownership+assignment+detectors. - Register the 3 synthetic axes (doc 06) → flips their state out of RP_VISIBLE_NOT_GOVERNED.
- Acceptance: no node has
gov_sync_state=RP_VISIBLE_NOT_GOVERNED; every stale-literal node showsSTALE; official RP still shows 0 (honest).