Skip to content

docs(roadmap): 3 novel debt rows + pipeline_authority amendment post-#637 - #652

Merged
briansrls merged 6 commits into
mainfrom
docs/roadmap-debt-updates-from-reflective
Apr 22, 2026
Merged

briansrls merged 6 commits into
mainfrom
docs/roadmap-debt-updates-from-reflective

Conversation

@briansrls

@briansrls briansrls commented Apr 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Three novel debt rows surfaced by the 2026-04-22 exploratory analysis (gpt-5-4-pro against main@c9758c8), each verified against HEAD before adding. Plus amendment of the pipeline_authority row to reflect #637's partial close.

Novel (3 new rows)

  1. __EMIT_BUG_{0}__ fabrication sentinels across 3 target emit specs — dag/emit.dag:54, go/emit.dag:107, python/emit.dag:115 use sentinel-string fabrication; rust correctly uses compile_error!(). Target behavior already diverges between fail-closed and fabricated output. P3 / C-6 violation. S scope.

  2. algebra.dag declaration-vs-template parallel authority — OrderedRing<T> declaration (16 fields) vs ordered_ring_templates() (9+clamp) already drifted. Same pattern for PartialFunction. Distinct from already-tracked signature/comment-mismatch debt — that's prose vs declaration; this is code vs declaration. P2. M scope.

  3. browser.dag typed-carrier service-boundary collapse — typed BrowserConfig / BrowserContext / Page / Element / Url declared; service ops use raw String (headless, url, selector, ...). Same class as tracked LLM + GitHub rows. P1 / M8. M per service family.

Amendment (1 existing row)

pipeline_authority.rs — #637 closed the stage-bindings portion (structural PipelineStageBinding consumption landed). Residual: pipeline_compile_order_names() at :225-275 still text-slices the compile-fn body for stage order. Blocked on substrate capability for ordered-body reflection (related to SG-2c-proper emit-capability program). Named the trigger explicitly.

Not a new row

ResourceHandle forgeability (also cited by the analysis) verified as already tracked at ROADMAP.md:138. No action.

Test plan

🤖 Generated with Claude Code

briansrls and others added 2 commits April 22, 2026 13:28
…ost-#637

2026-04-22 exploratory analysis (gpt-5-4-pro against main@c9758c8)
surfaced 3 genuinely novel debt items not in ROADMAP. Verified each
against HEAD before adding:

1. **__EMIT_BUG_{0}__ fabrication sentinels** — 3 target emit specs
   (dag, go, python) use sentinel-string fabrication for error-ref
   emission; rust correctly uses compile_error!(). Target behavior
   diverges between fail-closed and fabricated modes. P3 / C-6
   violation. Distinct from generic "TODO" debt — this is specific
   same-PR target-behavior inconsistency.

2. **algebra.dag declaration-vs-template parallel authority** —
   OrderedRing<T> declaration (16 fields) vs ordered_ring_templates()
   (9+clamp) are two authorities for the same surface, already
   drifted. Same pattern for PartialFunction. DISTINCT from the
   already-tracked signature/comment mismatch row — that's prose vs
   declaration (doc drift); this is code vs declaration (parallel
   authority). P2 Boundary Discipline.

3. **browser.dag typed-carrier service-boundary collapse** — same
   class as already-tracked LLM flattening + GitHub auth bypass:
   typed carriers declared in-file, raw String used at operational
   boundary. P1 Modeling Faithfulness / M8 violation.

Plus amended the pipeline_authority row: #637 closed the stage-
bindings portion (structural PipelineStageBinding consumption
added), but pipeline_compile_order_names() at :225-275 still
text-slices the compile-fn body for stage ORDER. That residual is
blocked on substrate capability for ordered-body reflection — named
the trigger explicitly rather than leaving it as generic "unassigned"
follow-up.

ResourceHandle forgeability (cited by the analysis) verified as
already tracked at ROADMAP:138 — no new row needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title gunbc Director docs(roadmap): 3 novel debt rows + pipeline_authority amendment post-#637 Apr 22, 2026
@briansrls
briansrls marked this pull request as ready for review April 22, 2026 17:30
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: 457da80c · Trigger: schedule
  • Thinking: 134s wall

Findings

  • ROADMAP.md:180 violates INVARIANTS.md's P1 "Documentation Describes Live State" and P2 single-authority discipline. The new text says the remaining stage-order fact "lives in the compile fn's procedural body" and is blocked on ordered-body reflection, but the landed code in src/v3/compiler/src/pipeline_authority.rs already treats PipelineStageBinding declaration order as the runtime authority and uses the compile body only as a fail-closed drift check. Reframing this as a substrate-capability blocker misstates where the authority actually lives.

Verdict
REQUEST_CHANGES. The three new debt rows read cleanly, but the post-#637 pipeline_authority amendment does not match the implementation's current authority model, so the roadmap entry should be corrected before merge.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 457da80c · Trigger: schedule
  • Thinking: 137s wall

Findings

Non-blocking — amended pipeline_authority row has wrong line refs / misframes the residual (ROADMAP.md:180):

The amendment says "pipeline_compile_order_names() at :225-275 still include_str!s pipeline.dag, slices the compile-fn body span, and iterates body.lines() for stage order."

Against the actual post-#637 pipeline_authority.rs (311 lines, verified in-worktree):

  • pipeline_compile_order_names() is at :185, and is a thin ordered_pipeline_stages(dag).map(.stage_name) wrapper — it does no text slicing.
  • The residual text-slicing lives in compile_body_stage_names_from_source() at :130-180, called only from reconcile_with_compile_body() at :110-128.
  • Crucially, reconcile_with_compile_body is a fail-closed cross-check that errors when the fn compile body drifts from the PipelineStageBinding declaration order. The bindings are already the runtime authority post-Pipeline Authority — structural-read cleanup #637; the slicing is a defensive drift detector, not a "still reading stage order from source text" residual.

So both the line range and the framing are off. A future reader grepping :225-275 won't find the residual, and "reads stage order from source text" understates what #637 actually landed. Suggested rewrite: point at compile_body_stage_names_from_source() at :130-180 and describe the residual as "fail-closed compile-body cross-check still text-slices; converting to structural ordered-body reflection needs substrate capability X."

Tracked-debt hygiene point, not a principle violation — the dissolution trigger is documented, bounded to "substrate gains ordered-body reflection," and named. Fix in a follow-up or a light amend.

Verdict

APPROVE_WITH_COMMENTS — docs-only diff, small and narrowly scoped. The 3 new debt rows (EMIT_BUG sentinel across dag/go/python emit specs, algebra.dag declaration-vs-*_templates() parallel authority, browser.dag typed-carrier collapse at the service boundary) all check out against the cited code. The pipeline_authority amendment is useful in intent — correctly noting that #637 closed the bindings portion — but the residual pointer is inaccurate enough that I'd fix it before the row loses traceability value.

briansrls and others added 2 commits April 22, 2026 13:35
…lved it

Codex BLOCKING review on #652 sha 457da80. My earlier amendment
claimed #637 left a stage-order text-slicing residual blocked on
substrate capability for ordered-body reflection. That was wrong.

Verified against src/v3/compiler/src/pipeline_authority.rs:

- ordered_pipeline_stages() IS the authority function (explicit in
  its doc comment: "the declaration order of the bindings in
  pipeline.dag is the ordering authority")
- It reads PipelineStageBinding declarations structurally from the
  Dag (no text-slicing)
- pipeline_compile_order_names() still exists but is called from
  reconcile_with_compile_body() as a DRIFT CHECK, not an authority
  path
- The drift check fails closed if the text-sliced compile-body stage
  order disagrees with the structural authority

So #637 FULLY closed the original P2 debt — authority moved to
PipelineStageBinding declaration order. What remains is a
defensive fail-closed drift check, which is a legitimate
belt-and-suspenders pattern per INVARIANTS P3, not a violation.

Fix: mark the row as RESOLVED. Earlier characterization of a
substrate-capability blocker was a misread — I conflated "text-
slicing exists in this file" with "text-slicing is the authority
path." The two are different shapes.

Lesson captured: authority location matters more than text-form
location. Verify which function IS the authority before claiming
a capability gap.

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

Pro's APPROVE_WITH_COMMENTS on #652 sha 457da80 caught a residual
inaccuracy in my correction commit c7b33ca. I got the framing right
(authority moved, drift check remains) but named the wrong function
as the text-slicing site.

Verified against pipeline_authority.rs post-#637:
- pipeline_compile_order_names() at :185 is a thin wrapper around
  ordered_pipeline_stages(dag).map(.stage_name) — NO text slicing
- compile_body_stage_names_from_source() at :130-180 is the actual
  text-slicing function
- Called only from reconcile_with_compile_body() at :110-128 as
  fail-closed drift check

Updated row to point at the correct function names and line ranges.
Traceability preserved for future readers who grep.

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

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-4-pro
  • Commit: 457da80c · Trigger: manual
  • Conversation: View conversation

1. Story of the diff

This is a docs-only ROADMAP.md update that does two things. First, it amends the existing pipeline_authority debt entry so it no longer overclaims what #637 solved: ROADMAP.md:180 now says the stage-binding portion was fixed structurally, while the remaining debt is specifically the compile-stage order still being reconstructed from raw pipeline.dag body text and therefore blocked on ordered-body reflection. Second, it adds three newly surfaced debt rows at ROADMAP.md:196, ROADMAP.md:198, and ROADMAP.md:200 for fail-open emit sentinels in target specs, declaration-vs-template duplicate authority in algebra.dag, and typed carriers collapsing back to strings at the browser service boundary. The through-line is good: make latent invariant violations visible in the roadmap, and sharpen an older debt row so it points at the actual missing substrate capability instead of a vaguer “cleanup residual.”

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation). N/A — the diff is pure roadmap prose; it does not change substrate types, Dag-resident facts, or implementation code.
  2. INVARIANTS.md + modeling-discipline.md. Compliant — ROADMAP.md:180 now names the real remaining authority problem and a concrete dissolution condition: “Dissolution trigger: when .dag authority gains ordered-body reflection ... replace text-slicing with typed read.” That matches the repo’s single-authority / typed-query discipline and its requirement that transitional shapes carry explicit dissolution paths (INVARIANTS.md:98-118, INVARIANTS.md:221-252).
  3. CODING.md. N/A — CODING.md is scoped to Rust implementation style in src/v3/compiler/src/, and this PR changes only roadmap tracking prose, not Rust code (CODING.md:8-27).
  4. TESTING.md. N/A — this PR does not change runtime behavior, claim behavioral parity, or promote any capability row; it only records debt in ROADMAP.md, so there is no same-PR test obligation under the current testing doc (TESTING.md:10-24).
  5. LOCKED DESIGN DECISIONS. N/A — the diff does not alter a locked thesis/design mechanism; it only updates how existing debt is described and queued.
  6. TRACKED vs UNTRACKED DEBT. Finding — ROADMAP.md:196 says “Dissolution: converge the three target emit specs on their language's native compile-time error form”; ROADMAP.md:198 says “Dissolution: *_templates() functions should be derived from the type declaration”; ROADMAP.md:200 says “Dissolution: route service ops through the declared carriers.” Those are good desired end states, but unlike ROADMAP.md:180 they do not name a specific, checkable dissolution trigger. The repo’s current debt discipline is explicit that transitional / temporary shapes need a named trigger, otherwise the debt is documented but still under-specified as a tracked receipt (INVARIANTS.md:233-252; modeling-discipline.md:95-106).

3. Verdict

APPROVE_WITH_COMMENTS

The pipeline_authority amendment is materially better than the pre-#637 wording, and the three new rows are useful debt surfacing. My only real comment is that the new entries at ROADMAP.md:196, :198, and :200 stop at problem statement + scope and do not yet meet the repo’s stronger “named dissolution trigger” standard, so they are helpful but not fully tracked in the same way as ROADMAP.md:180.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 7362672f · Trigger: schedule
  • Thinking: 37s wall

Verdict: APPROVE — documentation-only change to ROADMAP.md; all claims spot-check clean.

Spot-checked:

  • pipeline_authority.rs amendment is accurate: ordered_pipeline_stages() is structural, pipeline_compile_order_names() at line 184 is a thin wrapper, and compile_body_stage_names_from_source() is invoked only from reconcile_with_compile_body() as a fail-closed drift check (exactly as the row describes).
  • __EMIT_BUG_{0}__ sentinels present in dag/emit.dag:54, go/emit.dag:107, python/emit.dag:115; Rust uses compile_error!("{0}") at rust/emit.dag:141. Divergence claim holds.
  • All new rows include file:line anchors, bounded scope, and dissolution triggers — tracked-debt rather than untracked-debt shape.

The "RESOLVED" row self-corrects an earlier (incorrect) review characterization and is retained as a historical cross-reference with an explicit suggestion to sweep it in the stale-receipt pass — appropriate handling.

No findings against INVARIANTS / modeling-discipline / CODING / TESTING — the diff doesn't touch code, and the debt rows it adds align with P1/P2/P3 framing as used elsewhere in the file.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: 7362672f · Trigger: schedule
  • Thinking: 97s wall

APPROVE

Diff is docs-only and looks clean. I spot-checked the amended pipeline_authority row against src/v3/compiler/src/pipeline_authority.rs and the three new debt rows against the cited files; the roadmap text matches the live tree and keeps the debt tracked with concrete dissolution paths, so I don’t see a violation of the pinned invariants/modeling/coding/testing rubric in this PR.

briansrls and others added 2 commits April 22, 2026 13:54
…scalations

Pro's APPROVE_WITH_COMMENTS on #652 sha 457da80 flagged that the
three new debt rows had end-state dissolutions but no named
triggers, failing the tracked-debt discipline bar (per INVARIANTS
P5 and modeling-discipline §95-106).

Plus: the D/F/G lane escalations (merry-owl-732 stopped pre-PR,
smart-dove-561 PR #657 findings, sunny-bee-588 PR #654 findings)
revealed that two of my three rows were framed wrong — not just
missing triggers, but naming the wrong dissolution target entirely.

Updates:

**Row: __EMIT_BUG sentinels (F rescope).**
- Was: "converge three target specs on native compile-time error forms"
- Now: all four are already fail-closed in native sense (F finding).
  Real dissolution is upstream at src/v2/05_emit.dag:996, 1046 —
  refactor to produce Diagnostic + halt instead of emitting
  target-specific sentinels.
- Named trigger: when those two call sites are refactored to
  Diagnostic + halt, error_type_template becomes unreachable.
- Cross-ref: PR #657 investigation receipt.

**Row: algebra.dag declaration-vs-template (G reclassification).**
- Was: "derive *_templates() from the type declaration"
- Now: templates carry per-method metadata (size_effect,
  cost_shape, callback_element_position) declarations can't
  (G finding). Not redundant authorities — separate structural
  layers.
- Named trigger: when Lane E substrate-carrier-port design lands
  a chosen option for per-method metadata carriers, *_templates()
  converges to the chosen form.
- Cross-ref: PR #654 investigation receipt + Lane E coordination
  note.

**Row: browser.dag typed-carrier collapse.**
- Was: "route service ops through declared carriers"
- Now: same description, but named trigger added — "when transport
  layer can consume typed carriers end-to-end." Lane H PR #658
  pilots the pattern; success unblocks LLM + GitHub dissolutions
  that consume the same pattern.

All three rows now have checkable dissolution triggers per
INVARIANTS.md P5 tracked-debt discipline. Two rows additionally
have their dissolution paths correctly pointed upstream rather
than at surface symptoms.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls
briansrls merged commit 0cb34ee into main Apr 22, 2026
3 checks passed

@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 / gpt-5.4
  • Commit: 7362672f · Trigger: schedule
  • Thinking: 426s wall

Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)

  • ROADMAP.md The new EMIT_BUG{0}_ row contradicts Lane F's own receipt: PR #657 says Python is not fail-closed under deferred annotations, so the roadmap should not say all four targets already fail closed.

ROADMAP — Verified

  • PR classification: This is a design/docs-only PR because the GitHub diff changes only ROADMAP.md.
  • pipeline_authority structural read: ordered_pipeline_stages() and PR #637 do make PipelineStageBinding declaration order the authority, with compile-body text slicing retained only as a fail-closed drift check.
  • algebra declaration-vs-template asymmetry: dsl/std/algebra.dag really does split authority today: declarations carry operator-facing Arrow fields while *_templates() carry per-method metadata and kernel synonym surfaces.
  • browser typed-carrier boundary debt: dsl/extdeps/browser.dag declares BrowserConfig/BrowserContext/Page/Element and imports Url while several service inputs and outputs still use raw String, so the debt itself is grounded.

✅ The roadmap update is otherwise aligned with the checked code and thesis/invariant framing; I only see the one wording fix above.

briansrls added a commit that referenced this pull request Apr 22, 2026
…G row

Codex non-blocking on #652 sha 7362672: my rescoped EMIT_BUG row
flattened Lane F's finding into "all four sentinels are already
fail-closed" — but F's own investigation (PR #657) specifically
notes Python's sentinel degrades under deferred annotations:

> "Under `from __future__ import annotations` (default in many modern
>  Python codebases) annotations are stored as strings and never
>  evaluated at import, so both (a) and (b) defer failure to runtime
>  type-checkers or typed reflection — weaker than Rust's guarantee."

My flattening contradicted F's own receipt (PR #657). Fix: preserve
the nuance. Rust/Go/dag ARE fail-closed in native sense; Python is
weaker under deferred annotations.

The upstream-dissolution argument still holds — if the emit decision
moves to Diagnostic + halt at 05_emit.dag:996, 1046, the Python
deferred-annotations gap also evaporates since the sentinel never
reaches target compilation at all. Added that note explicitly.

Accurate summarization of F's finding restored.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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