Skip to content

docs(roadmap): 8 novel debt rows from 2026-05-08 paired analyses - #2195

Merged
briansrls merged 2 commits into
mainfrom
docs/roadmap-novel-findings-2026-05-08
May 8, 2026
Merged

briansrls merged 2 commits into
mainfrom
docs/roadmap-novel-findings-2026-05-08

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

Adds Post-merge debt section (2026-05-08) to ROADMAP with 8 novel-finding rows surfaced by the paired Exploratory + Reflective gpt-5-5-pro analyses at main@e25e43c + main@b09e0c88. Already-tracked findings confirmed against earlier waves and not duplicated.

8 novel rows

# Finding Source pin
F1 DiagnosticDetailExpectation::Contains(String) substring matching as claim authority verification.dag:67-75 + test_runner.rs:3908-3916
F8 SymbolicCost lacks first-class Semiring<SymbolicCost> witness algebra.dag:168-181 (deferred-witness comment)
F10 ValueBody::Structural field-label-as-identity through lower→emit lower.rs:3514-3604 + emit.rs:2575-2610
u128 drift .dag adds u128 but grounding_pilot/lib.rs still says deferred grounding_pilot/src/lib.rs:6-8, 256-265
FieldProject illegal field_label/field_child disagreement dag.rs:1890-1892 admits illegal state
Forgeable witnesses ParamRef/TransformRef/ElementRef/BoolPortRef validity in Rust constructors only substrate.dag:337-374
combine_effects StructuralEffectShape bespoke lattice merge (missed BoundedLattice<T> instance) effect_enumeration.dag:195-207
Peano cap 256 literal repeated in 3 authorities despite "single authority" comment termination.dag:243 + src/v3/std/termination.dag:140 + dag.rs:1027

10 process course corrections (flagged but not row-shaped)

Constructor ambient prefix scan, PathCall source-order fragility, predicate registry Rust-side authority, domain refinements regressed pending Q-Regex-Primitive, SymbolicCostExprEquals shape-not-proof, EmitModelVariants generation/ratchet need, L6 projection errors swallowed, cross_target_coverage doc/code drift, hand-Rust ratchet rate vs .dag TestClaim migration, Go map stub fail-closed compatibility.

Sources cited

All 4 analyst conversation URLs in the section header:

  • exploratory main@e25e43c: chatgpt review 69fb2dcd
  • reflective main@e25e43c: chatgpt review 69fb3b6c
  • exploratory main@b09e0c88: chatgpt review 69fc7f52
  • reflective main@b09e0c88: chatgpt review 69fc8cfa

Authority chain

PM clipboard-relay from Brian routing to PM scope per user_session_role_pm_under_director "(e) audit-receipt + docs/audit authorship". Not Director-tier ratification (those are separate PRs); this is the audit-receipt-authoring layer.

Debt receipt

Net debt INTRODUCED: 8 new tracked debt rows + 10 process course corrections (visibility); ~155 LOC of new ROADMAP text.
Net debt RETIRED: 0 (this is audit-row authoring, not retirement).
Class B audit-receipt addition per §7.6.2 shape-2.

Test plan

  • cargo fmt --all --check (pre-push hook)
  • Doc-only PR — no code changes
  • CI: fmt + ci + v3 should be SUCCESS

🤖 Generated with Claude Code

… 2026-05-08 paired analyses

Adds Post-merge debt section (2026-05-08) with novel-finding rows from paired Exploratory + Reflective gpt-5-5-pro analyses at main@e25e43c and main@b09e0c88 (all 4 conversation links cited). Already-tracked findings confirmed against earlier waves and not duplicated.

8 novel rows:
- F1: DiagnosticDetailExpectation::Contains(String) substring matching as claim authority — P2/P3 violation in test verification surface
- F8: SymbolicCost lacks first-class Semiring witness (deferred until function-valued data fields lower)
- F10: ValueBody::Structural field-label-as-identity through lower→emit (sharpens existing substrate-capability row)
- u128 grounding_pilot mirror drift — already-stale, not hypothetical
- FieldProject illegal field_label/field_child disagreement
- Reflected witness carriers forgeable from .dag (ParamRef/TransformRef/ElementRef/BoolPortRef)
- StructuralEffectShape.combine_effects bespoke lattice merge (missed BoundedLattice<T> instance)
- Peano materialization cap (256) repeated in 3 authorities despite "single authority" comment

10 process course corrections from reflective passes flagged for dissolution-discipline cadence (not row-shaped): constructor ambient prefix scan, PathCall source-order fragility, predicate registry as Rust-side authority, domain refinements regressed pending Q-Regex-Primitive, SymbolicCostExprEquals shape-not-proof, EmitModelVariants generation/ratchet need, L6 projection errors swallowed, cross_target_coverage doc/code drift, hand-Rust ratchet rate vs .dag TestClaim migration, Go map stub fail-closed compatibility.

Routed by Brian via PM clipboard relay; PM scope per user_session_role_pm_under_director "(e) audit-receipt + docs/audit authorship".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: bfabaa1b · Trigger: schedule
  • Comparison: origin/main @ bf5ce62c ... review/pr-2195-bfabaa1b @ bfabaa1b
  • Thinking: 35s wall

Verdict: APPROVE

Diff is a documentation-only ROADMAP.md update, and it stays within the repo’s stated discipline: the new entries are explicitly tracked debt with named dissolution paths, owners, and cross-references rather than pretending the scaffolds are closed. I did not find a concrete violation of INVARIANTS.md, docs/modeling-discipline.md, CODING.md, or TESTING.md in the added lines.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: bfabaa1b · Trigger: schedule
  • Thinking: 117s wall

BLOCKING (1)

Root Cause

  • ROADMAP.md Narrative process notes are being used as tracking authority → make each correction a row/table entry with bounded scope, owner-or-next-step, and named dissolution/acceptance condition, or attach each to an existing row.

ROADMAP — Verified

  • Eight novel debt rows: Rows F1/F8/F10/b09#1/#2/#5/#7/#9 are documented, bounded, and name dissolution paths plus owners.

ROADMAP — Incomplete

  • Process course corrections: The ten corrections are documented but not yet trackable enough to satisfy the roadmap's owner-or-next-step and dissolution-trigger discipline.

⚠️ The debt rows look clean, but the process-correction bundle needs row-shaped tracking before landing.

Comment thread ROADMAP.md Outdated
- **`StructuralEffectShape.combine_effects` bespoke local lattice merge** (b09:#7): `src/v3/lenses/effect_enumeration.dag:50-54` defines `StructuralEffectShape = NoEffect | ReadShaped | WriteShaped | UnknownEffect { reason: String }`; `:175-178` `branch_effect` folds via custom merge; `:195-207` `combine_effects` is a hand-rolled bounded-lattice-like join over an ordered set. `dsl/std/algebra.dag:303-315` already declares `Lattice<T>` and `BoundedLattice<T>`. The `combine_effects` is a missed algebraic structure — bespoke merge instead of declared lattice instance. `UnknownEffect.reason` carries provenance, so the algebra needs care: either declare a total order (`NoEffect < ReadShaped < WriteShaped < Unknown`) plus a reason-combination law, or split "effect strength" from "coverage diagnostic reason" so the algebra is over a reason-free carrier and failures remain outside the algebra. Dissolution: declare the `BoundedLattice<StructuralEffectShape>` instance + lift fold through generic lattice merge. Owner: Substrate / lens-framework lane (cross-references hand-rolled-lattice tracked row at line 384 — this is a NEW instance for that class).
- **Peano materialization cap repeated as `256` literal in 3 authorities** (b09:#9): `dsl/std/termination.dag:238-243` says **single numeric authority** for literal-sized Peano witness depth, `peano_literal_materialization_cap() -> Int { 256 }`; `src/v3/std/termination.dag:138-140` mirrors with same value (M9/P2 mirror); `src/v3/compiler/src/dag.rs:1022-1027` mirrors as `pub const MAX_PEANO_MATERIALIZATION: i64 = 256` with comment "Must stay numerically aligned with `dsl/std/termination.dag`". Comment claims "single authority"; reality is three-way manual sync. Dissolution: generate the Rust cap from the `.dag` authority OR add a test that parses both `.dag` mirrors + asserts numeric equality until the v3 mirror and Rust mirror dissolve. Owner: Peano carrier program (cross-references existing Peano refinement-cap dissolution row).

**Process course corrections** (from reflective passes — not row-shaped, but flagged for dissolution-discipline cadence): (1) constructor ambient prefix scan in `src/v3/compiler/src/lower.rs` (bridge becoming steady state — thread expected outer type via `TransformTarget::Callable` metadata; delete the scan); (2) PathCall source-order fragility (data binding must precede recursive functions — make `ValueBody` population order-independent OR document order as part of language model); (3) predicate registry `KNOWN_PREDICATES` in `src/v3/compiler/src/lower.rs` is now central Rust-side semantic authority — needs `.dag` predicate-declaration dissolution path; (4) domain refinements regressed pending `Q-Regex-Primitive` (CommitSha/Email/Url/SemVer/Timestamp lost `pattern`/`format`/`content` fields in `dsl/std/types.dag`) — don't let regex-primitive drift; (5) `SymbolicCostExprEquals` is typed shape but `NotYetImplemented` in runner — typed-carrier-landed ≠ verification-landed; don't credit R3 closure on shape-only; (6) `EmitModelVariants` centralized mirror needs generation OR exhaustiveness ratchet against `src/v3/std/emit_model.dag`; (7) L6 projection errors swallowed via `unwrap_or_default()` in `src/v3/grounding_cross_target_meta/src/coverage.rs` public API — surface typed `ProjectionCoverageError` to L6 gate; (8) doc/code drift in `src/v3/std/cross_target_coverage.dag` ("empty data state" comment vs 41 rows populated) — "Documentation describes live state" cleanup pass; (9) hand-Rust test ratchet rate exceeds `.dag` `TestClaim` migration rate — each new ratchet should retire one existing hand-Rust test as `.dag` `TestClaim`; (10) Go `map` template stub `/* map({recv}, {body}) */` not fail-closed compatible if it can reach emission — make Go map real OR fail closed at lowering.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCKING: The process-correction bundle records ten follow-ups without row-level owner/lane and checkable dissolution triggers, violating ROADMAP's debt-row shape and INVARIANTS P5 scaffold-dissolution discipline.

Per codex BLOCKING at gunbc#2195: process-correction bundle records 10 follow-ups without row-level owner/lane and checkable dissolution triggers, violating ROADMAP debt-row shape and INVARIANTS P5 scaffold-dissolution discipline.

Original framing labeled the bundle "not row-shaped, but flagged for dissolution-discipline cadence" — internally contradictory: putting them in ROADMAP without per-row owner+dissolution violates ROADMAP shape regardless of meta-framing.

Resolution: each of the 10 follow-ups now lives as its own debt row matching the section's existing format (bold finding name + source pin + description + dissolution direction + owner). 10 new rows, no removals.

Per-row owner attribution:
- Constructor ambient prefix scan → substrate-capability lane
- PathCall source-order fragility → PathCall lane
- KNOWN_PREDICATES Rust-side authority → substrate-reflection lane
- Domain refinements regressed → substrate-capability lane (regex/content typing)
- SymbolicCostExprEquals shape-not-proof → R3 Verification Mgr (gate #40)
- EmitModelVariants generation/ratchet → emit-model substrate consolidation
- L6 projection errors swallowed → T-Ground-CrossTarget-Meta lane (R2)
- cross_target_coverage doc/code drift → small-scope cleanup
- Hand-Rust ratchet rate vs .dag TestClaim → PB Manager / SG-0 dissolution-cadence
- Go map template stub → T-Ground-Go lane

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

BLOCKING addressed in 095b8728b

Codex BLOCKING valid: my original framing said "not row-shaped, but flagged for dissolution-discipline cadence" — internally contradictory. Putting them in ROADMAP without per-row owner+dissolution violates ROADMAP debt-row shape regardless of meta-framing.

Resolution: each of the 10 follow-ups now lives as its own debt row matching the section's existing format (bold finding name + source pin + description + dissolution direction + owner). 10 new rows, no removals.

Per-row owner attribution:

  • Constructor ambient prefix scan → substrate-capability lane
  • PathCall source-order fragility → PathCall lane
  • KNOWN_PREDICATES Rust-side authority → substrate-reflection lane
  • Domain refinements regressed → substrate-capability lane (regex/content typing)
  • SymbolicCostExprEquals shape-not-proof → R3 Verification Mgr (gate Add external tool dependency management with gcloud support #40)
  • EmitModelVariants generation/ratchet → emit-model substrate consolidation lane
  • L6 projection errors swallowed → T-Ground-CrossTarget-Meta lane (R2)
  • cross_target_coverage doc/code drift → small-scope cleanup
  • Hand-Rust ratchet rate vs .dag TestClaim → PB Manager / SG-0 dissolution-cadence
  • Go map template stub → T-Ground-Go lane

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Same BLOCKING — already addressed in 095b8728b (verified)

Same finding as the inline BLOCKING at ROADMAP.md:641 just resolved. Fix commit 095b8728b already promoted all 10 process corrections to proper debt rows with per-row owner + dissolution. Verified just now via git show HEAD:ROADMAP.md — paragraph removed, 10 individual rows present matching the section's existing format.

PR HEAD now at 095b8728 (+24 -0 across 1 file vs prior bfabaa1b). CI re-running on the new commit; should land green for merge.

Per-row owners summarized at #issuecomment-4402702363.

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 095b8728 · Trigger: manual
  • Comparison: main @ bf5ce62c ... docs/roadmap-novel-findings-2026-05-08 @ 095b8728
  • Conversation: View conversation

1. Story of the diff

This PR adds a new ROADMAP.md post-merge debt section for the 2026-05-07/2026-05-08 paired exploratory + reflective review cycle. The first paragraph anchors the batch to two main@... snapshots, separates already-tracked findings from genuinely new rows, and avoids duplicating earlier ledger entries (ROADMAP.md:628-630). The body then records eight novel technical debt findings with concrete affected surfaces, why each violates a modeling/boundary/fail-closed principle, and a named dissolution path plus owner (ROADMAP.md:632-639). It follows with ten promoted process/course-correction rows, now shaped as debt entries with an explicit dissolution direction and owner rather than loose retrospective notes (ROADMAP.md:641-650).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

N/A — the diff is ROADMAP documentation only; it discusses substrate and implementation debt but does not change Dag storage, substrate declarations, Rust constructors, or lowering/emission behavior (ROADMAP.md:628-650).

  1. INVARIANTS.md + modeling-discipline.md.

Compliant — the rows name the relevant principle pressure instead of laundering debt as neutral work: e.g. F1 explicitly identifies diagnostic substring matching as a P2/P3 string-authority failure and gives the typed-carrier dissolution (ROADMAP.md:632), while FieldProject records an illegal-state-admitted shape with a resolved/unresolved lifecycle dissolution (ROADMAP.md:636).

  1. CODING.md.

N/A — no Rust implementation code is added or refactored. The docs do point future work toward coding-compliant shapes, such as replacing Rust-side mirrors/constants with generated or substrate-consumed authorities (ROADMAP.md:635, ROADMAP.md:646), but this PR itself has no functions, APIs, helpers, or error shapes to review.

  1. TESTING.md.

Compliant — no behavior changed, so no immediate regression test is required; where a debt row depends on a ratchet rather than an immediate implementation, the row names the intended test/ratchet shape, such as comparing .dag primitive sets against Rust mirror constants (ROADMAP.md:635), adding an emit-model exhaustiveness ratchet (ROADMAP.md:646), and maintaining SG-0 net-shrink discipline for hand-Rust tests (ROADMAP.md:649).

  1. LOCKED DESIGN DECISIONS.

N/A — this patch does not edit or override a locked design document. It references existing gates/lane ownership, such as R3 closure gate #40 for SymbolicCostExprEquals, but only to prevent premature credit for shape-only work (ROADMAP.md:645).

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the new entries are shaped as tracked debt rather than open-ended TODOs: each row documents the problem, bounds it to a concrete surface or lane, names a dissolution direction, and assigns an owner. Clear examples include the Peano cap mirror row with generate-or-ratchet dissolution and Peano owner (ROADMAP.md:639), the L6 unwrap_or_default() row with a public-boundary error-surfacing dissolution and lane owner (ROADMAP.md:647), and the Go map stub row with implement-or-fail-closed dissolution and target owner (ROADMAP.md:650).

3. Verdict

APPROVE. This is a docs-only debt-ledger update, and the added rows are bounded, owned, and dissolution-oriented rather than new untracked scaffolding. I do not see a blocking invariant issue in the diff.

@briansrls
briansrls merged commit 72e42e2 into main May 8, 2026
4 checks passed
@briansrls
briansrls deleted the docs/roadmap-novel-findings-2026-05-08 branch May 8, 2026 02:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant