09 — Non-Circular Candidate (built + proven)
09 — Non-Circular Candidate (built and proven)
Built three additive, reversible, birth-free objects mirroring the proven crash-safe pattern:
- v_rp_decorated_generated_candidate_noncircular — backbone from v_rp_universal_node_ui_contract_generated_v2, decoration from v_rp_universal_node_ui_contract_current_v2 DIRECTLY (not the _current alias), so a repoint of _current to it cannot recurse.
- fn_rp_decorated_generated_parity_v2() — a plpgsql function isolating each parity metric as a separate single- or two-stack statement (no smoke probe), aggregated into scalars.
- v_rp_decorated_generated_full_column_parity_v2 — a thin function-backed view over the function.
Apply note: the first apply used a 64-character view name that Postgres truncated to 63 characters (dropping the trailing 2). It worked functionally but was a confusing artifact, so the objects were dropped and recreated with the clean name v_rp_decorated_generated_candidate_noncircular (46 characters). Both applies were birth-free (birth_registry 1,205,419 equal before and after each).
Proof: v_rp_decorated_generated_full_column_parity_v2 = DECORATED_GENERATED_FULL_COLUMN_PARITY_PASS_NONCIRCULAR — generated 87, current 87, matched 87, gen_only 0, cur_only 0, count_value_diffs 0, decoration_missing 0, route 87, action 87, reliability 87, substrate 81 (by-design), row_parity, count_parity, decoration_complete all true, noncircular true.
OOM after build: v_rp_guard_safety_status still OOM_SAFE with 0 live_crash_landmines (function_backed_guards now 7). The detector classifies the new candidate SAFE and the new parity view SAFE_FUNCTION_BACKED. The full session log window is free of any signal-9.