Skip to content

A - #524

Merged
briansrls merged 16 commits into
mainfrom
session/sleek-crab-150
Apr 18, 2026
Merged

A#524
briansrls merged 16 commits into
mainfrom
session/sleek-crab-150

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Opened from session-dashboard for session sleek-crab-150.

… test

Document case 1 vs case 2 for FnExternalBody/Unparsed (DB-16); add bootstrap
test that pipeline stages resolve to ExternalRealization. Reject `where` on
generic type parameters at lowering with a clear diagnostic. Update src/v3/
ROADMAP for 3a.3 shipped + DB-16 note. Add m2 parity test for refined T-param.

Made-with: Cursor
@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

This comment has been minimized.

Reject `where` only when the parameter type mentions the enclosing fn's
type parameters (bare T, List<T>, …), without recursing Instantiation
templates so Int/OrderedRing does not false-positive.

Add pipeline_compile_order_stage_names test hook; DB-16 test derives stage
list from pipeline.dag. New parity test for List<T> + ROADMAP wording.

Made-with: Cursor
@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@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.

codex · gpt-5.4 · eebea695

✅ Review (blocking: 0, non-blocking: 2+/1-)

Non-blocking — Strengths

  • src/v3/compiler/src/lower.rs The refined-generic guard stays in lowering-layer implementation code, fails closed through a diagnostic, and is locked by the two new 3a.3 regression tests.
  • src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs The DB-16 invariant test checks the bootstrapped DAG rather than a hand-maintained expected shape, so it exercises the real rewrite path.

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

  • src/v3/compiler/src/parse.rs The new binding-declaration-means-case-2 wording reads as exhaustive, but bootstrap.rs explicitly keeps the src/v3/std/substrate.dag host accessors as ArrowBody::Unparsed through bootstrap, so scope DB-16 to pipeline stages or name the DB-14 and Lane 1 Stage 1b exception explicitly.

ROADMAP — Verified

  • 3a.3 refined-generic-dependent parameter rejection: lower_parameter_refinements_phase now rejects where on T and List before discharge, which matches the roadmap's fail-closed closure of that hole.
  • DB-16 pipeline-stage rewrite invariant: The new invariant test verifies that every stage named in pipeline.dag compile order lands as ArrowBody::ExternalRealization, not Unparsed.

✅ The implementation and test coverage look solid; my only concern is a documentation-scoping issue around how broad the DB-16 host-bridge split is today.

@briansrls

This comment has been minimized.

…524)

Clarify FnExternalBody: only pipeline.dag stages get bootstrap
ExternalRealization; substrate accessors stay Unparsed per DB-14.

Made-with: Cursor
@briansrls

This comment has been minimized.

@briansrls

Copy link
Copy Markdown
Contributor Author

Meta-review in progress... (view conversation)

Loop-health check: is this review cycle making forward progress, or shifting debt? Posts in ~5-15 minutes.

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

This comment has been minimized.

@briansrls

Copy link
Copy Markdown
Contributor Author

Meta-Review (Loop Health)

Loop summary. Visible in the artifacts: 2 substantive review rounds, ~2 visible revision states / follow-up commits (exact GitHub commit count is not recoverable from the supplied files), 1 codex review, and 2 substantive browser reviews plus 2 browser status posts, over about 57 minutes from 2026-04-18 05:11:52Z to 06:09:08Z. The first substantive browser pass requested changes; codex and the final browser pass approved after the follow-up patch.chatgpt-review-6d4f7e9d-316a-4f…

chatgpt-review-6d4f7e9d-316a-4f…

Forward progress evidence. This loop accomplished real work. Round 1 found a genuine scope mismatch: 3a.3 was being marked shipped too early because the implementation only fail-closed bare T, while the shipped claim was broader, and the DB-16 test still duplicated the stage roster instead of reading the pipeline authority.chatgpt-review-6d4f7e9d-316a-4f…

The next visible revision fixed both at the right layer: codex records that lowering now rejects where on both T and List<T> before discharge, and the final browser review records that the DB-16 invariant test now derives stage names from pipeline_authority rather than a copied list.chatgpt-review-6d4f7e9d-316a-4f…

chatgpt-review-6d4f7e9d-316a-4f…

There is no visible new product consumer here — no new emit target, interpreter path, or runtime path — but there are new correctness consumers: the 3a.3 parity tests and the bootstrapped-DAG DB-16 invariant test. For this PR, that is the right kind of progress.

Debt accumulation evidence. I do not see net-new unbounded debt as the dominant pattern. The reviews explicitly say no new substrate enum/variant landed, and the diff improved the accounting on the existing FnExternalBody / ArrowBody::Unparsed scaffold instead of growing it.chatgpt-review-6d4f7e9d-316a-4f…

The debt that remains is explicit: DB-16 is still a behavioral ratchet rather than a richer type split, and refined generics are being handled by a reject-now boundary rather than full substitution-through-refinement support.chatgpt-review-6d4f7e9d-316a-4f…

That is debt, but it is named debt with scope, not quiet debt growth.

Cheating signal. The implementer is documenting compromises, not hiding them. This is the good kind of “cheating”: choose the smaller blast-radius fix, but make the boundary explicit and lock it with tests. That is exactly what happened here. Instead of pretending refined generics are supported, the loop converged on a fail-closed rejection boundary and updated the roadmap/docs to match the enforced fragment.chatgpt-review-6d4f7e9d-316a-4f…

chatgpt-review-6d4f7e9d-316a-4f…

Instead of keeping a duplicated DB-16 stage roster in a test, it moved the test onto the same authority bootstrap uses.chatgpt-review-6d4f7e9d-316a-4f…

That is structural tightening, not “good enough for now” drift. It also stays on the project’s declared authority path: externally realized callables are supposed to live on Arrow.body, not on side markers, and the review log says this PR keeps that fact on the right authority.chatgpt-review-6d4f7e9d-316a-4f…

Meta-verdict — ⚖️ SHIP_WITH_DEBT

This loop is making forward progress, not shifting debt. The bluff was called in round 1, the real blocker was fixed in round 2, the fix was ratcheted with tests, and the remaining gap is explicitly bounded. The unhealthy loop pattern in this codebase is when the same disease survives many rounds until someone stops and graduates it into an invariant; the project documents that failure mode from PR #445 as a case where the loop was accumulating debt faster than it dissolved it. This PR is not doing that. It already did the regrouping inside the loop. Merge it, carry the explicit monomorphic-only boundary as tracked debt, and make the next PR about the next structural step rather than squeezing one more low-yield review round out of this one.


View conversation

@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.

codex · gpt-5.4 · 91f46d89

✅ Review (blocking: 0, non-blocking: 2+/0-)

Non-blocking — Strengths

  • src/v3/compiler/src/lower.rs The refined-generic guard stays in lowering-layer implementation code, fails closed through a diagnostic, and is locked by focused regression tests for both T and List<T>.
  • src/v3/compiler/src/parse.rs The DB-16 documentation now distinguishes parse-lag, pipeline-stage, and substrate-accessor cases without introducing a new substrate shape or second authority.

ROADMAP — Verified

  • 3a.3 refined generic-dependent parameter rejection: lower_parameter_refinements_phase now rejects generic-dependent where refinements at lowering with explicit diagnostics, matching the roadmap closeout.
  • DB-16 pipeline-stage rewrite invariant: The new pipeline_stages_lower_to_external_realization_not_unparsed test verifies that every stage named by pipeline.dag compile order reaches ExternalRealization after bootstrap.

✅ The current diff cleanly resolves the prior doc-scoping concern and the new lowering guard plus invariant coverage look consistent with the thesis and active modeling discipline.

@briansrls

This comment has been minimized.

Drop obsolete lowering-time generic rejection narrative; refined generics
use infer-time substitution. PR #524 remains docs + pipeline invariant only.

Made-with: Cursor
@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

Copy link
Copy Markdown
Contributor Author

Meta-review in progress... (view conversation)

Loop-health check: is this review cycle making forward progress, or shifting debt? Posts in ~5-15 minutes.

@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.

codex · gpt-5.4 · e9bd4b11

⚠️ Review (blocking: 1, non-blocking: 1+/0-)

BLOCKING (1)

Root Cause

  • docs/design-fn-external-body-reconciliation.md DB-16 framed FnExternalBody as only parse-lag vs host-bridge, but pipeline_authority still reads compile's body_span as authority from pipeline.dag, so the fix is to add that compiler-authority case or relax the exclusivity claim in parse.rs and dag.rs.

Non-blocking — Strengths

  • src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs Deriving the asserted stage set from pipeline_compile_order_stage_names keeps the new invariant test on the same authority path bootstrap uses, so reorder-only edits will not drift the coverage.

ROADMAP — Verified

  • DB-16 pipeline-stage invariant: pipeline_stages_lower_to_external_realization_not_unparsed now locks the bootstrap rewrite for every stage named in compile order.

ROADMAP — Incomplete

  • DB-16 FnExternalBody reconciliation: The reconciliation still needs to account for pipeline.dag's compile-body authority case, which remains a live bootstrap-range Unparsed use after materialize_pipeline_realizations runs.

⚠️ The implementation and invariant test look clean, but the new FnExternalBody documentation still omits one live Unparsed case, so the clarified dissolution story is not yet accurate.

Comment thread src/v3/compiler/src/parse.rs Outdated
/// `ExternalRealization` at bootstrap like pipeline stages.
///
/// Downstream: pipeline stages are recognized via `PipelineStageBinding`;
/// accessors via DB-14 markers and per-target emission. Absence of both

This comment was marked as resolved.

@briansrls

This comment has been minimized.

@briansrls

This comment has been minimized.

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

Copy link
Copy Markdown
Contributor Author

⚠️ Meta-review abandoned — conversation unavailable after 52 minutes

The conversation page did not render any content. The bot will start a fresh conversation on the next push.

View conversation

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

This comment has been minimized.

@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.

codex · gpt-5.4 · 432346ef

⚠️ Review (blocking: 1, non-blocking: 1+/0-)

BLOCKING (1)

Root Cause

  • src/v3/ROADMAP.md DB-16 updated the narrative/deferral section without re-keying the scheduled-deletions ledger for ArrowBody::Unparsed -> split that ledger into the remaining case-1 scaffold and the separate compile/accessor stories so one artifact has one dissolution story.

Non-blocking — Strengths

  • docs/design-fn-external-body-reconciliation.md The new 2c receipt gives compile a concrete terminal-versus-future-structural story, so the previously omitted pipeline-ordering case is now explicitly modeled.

ROADMAP — Verified

  • DB-16 pipeline-stage invariant: pipeline_stages_lower_to_external_realization_not_unparsed now derives its stage set from pipeline_compile_order_stage_names, so the bootstrap rewrite is checked against the same ordering authority bootstrap consumes.
  • E-9 accessor debt tracking: The accessor Arrow.body mismatch is now recorded as an explicit deferral with scope and a named dissolution trigger instead of being normalized inside DB-16.

ROADMAP — Incomplete

  • ArrowBody::Unparsed lifecycle: The new DB-16 section is not yet reconciled with the existing scheduled-deletions row, so ROADMAP still exposes two different dissolution stories for the same variant.

⚠️ The DB-16 docs/test work is careful, but ROADMAP still contradicts itself about ArrowBody::Unparsed, and that file is supposed to be the single tracking authority.

Comment thread src/v3/ROADMAP.md
- **Arm-local narrowing.** `lower_expr`'s `If` arm runs `narrow_scope_for_predicate` on the cond. When the cond is a two-argument `Operator`/`Call` with **exactly one** scope-bound free variable (the candidate parameter), lowering rebuilds the then-arm's scope with that name pointing at a freshly-allocated narrowed port typed as the composite refinement described above. Multi-var predicates skip narrowing — single-parameter refinement is the 3a.3 scope.

Acceptance: `src/v3/compiler/tests/m2_feature_parity_test.rs::test_3a3_*` — 16 tests lock refined-parameter compile, literal-arg rejection, matching-refinement forwarding, distinct-refinement non-discharge, if-predicate narrowing (both unrefined and already-refined caller — the latter exercises composite-canonical conjunct matching), non-narrowing rejection, signatureless regression, `&&` / `||` parse + lower + Bool typing, non-Bool operand rejection, structural-callable-identity-across-sites, out-of-fragment predicate rejection at lowering, and substrate integrity (Behavior still 5 variants). Design: [design-m2-feature-parity.md §DB-11](../../docs/design-m2-feature-parity.md).
Acceptance: `src/v3/compiler/tests/m2_feature_parity_test.rs::test_3a3_*` — 16 tests lock refined-parameter compile, literal-arg rejection, matching-refinement forwarding, distinct-refinement non-discharge, if-predicate narrowing (both unrefined and already-refined caller — the latter exercises composite-canonical conjunct matching), non-narrowing rejection, signatureless regression, `&&` / `||` parse + lower + Bool typing, non-Bool operand rejection, structural-callable-identity-across-sites, out-of-fragment predicate rejection at lowering, substrate integrity (Behavior still 5 variants), and top-level `data` references inside predicates. Design: [design-m2-feature-parity.md §DB-11](../../docs/design-m2-feature-parity.md).

This comment was marked as resolved.

@briansrls

This comment has been minimized.

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT Review

Principle audit.

Fail-closed. The executable part of this round looks good. The new test fails loudly if any stage named by pipeline authority still lowers to ArrowBody::Unparsed, and the new test hook returns a Result rather than fabricating success (src/v3/compiler/src/lib.rs:214-220, src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs:1-37). I do not see a new silent-failure path in scope.

Illegal states unrepresentable. No new substrate shape lands here, which is good. The main improvement is that the PR stops treating substrate accessors as a second “legitimate” DB-16 meaning of Unparsed and moves that E-9 gap into an explicit roadmap deferral instead. The remaining pressure is that ArrowBody::Unparsed is now documented as carrying both parse-lag and compile-ordering semantics (src/v3/compiler/src/dag.rs:562-586, src/v3/compiler/src/parse.rs:120-151); I read that as an exposed design question, not a fresh regression introduced by this PR.

Facts flow forward. Strongest part of the diff. The new invariant test derives its stage set from the same pipeline authority path bootstrap uses, instead of hardcoding a copied list (src/v3/compiler/src/lib.rs:214-220, src/v3/compiler/src/pipeline_authority.rs:222, src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs:1-37). The docs also now make the separate compile-body authority explicit instead of leaving that fact implicit.

Coproduct dissolution. No new substrate enum or enum arm appears, so there is no new dissolution debt to classify. The good move is narrowing DB-16 back to the actual pipeline cases and removing the old accessor story from the canonical explanation. The only open structural question is whether case 2c is a true terminal use of Unparsed or still a scaffold waiting for a better carrier.

Single-authority metadata. This is in better shape now. The stage-order test hook is a second reader of the same authority, not a second source, and the roadmap now carries the accessor/E-9 gap as tracked debt instead of letting parse/dag docs quietly re-canonicalize it. That is real forward progress.

API-level enforcement. Mixed, but improved. Case 2a now has a behavioral enforcement point via the new invariant test. Non-blocking concern: case 2c is still only documented, not enforced — nothing in this diff would fail if a future change moved compile away from the intended persistent-Unparsed ordering role while leaving the per-stage rewrite intact.

Design question. Is case 2c supposed to be a legitimate long-lived use of ArrowBody::Unparsed, or is it still a scaffold whose real authority should eventually move onto a first-class pipeline-order substrate fact? The stake is that the PR now makes 2c explicit, which is good, but the end-state is still half-classified: src/v3/compiler/src/dag.rs:562-586 still frames Unparsed as part of a temporary 5-variant scaffold with a 3-variant terminal form, while the new DB-16 prose and parse.rs comments treat compile as an intentional persistent consumer of Unparsed. I do not think that blocks this doc+test PR, but it is the next structural decision to settle before more code grows around case 2c.

Verdict. APPROVE_WITH_COMMENTS. The prior documentation miss around the compile authority case looks fixed, the new invariant test is anchored to the right authority path, and the accessor/E-9 issue is now honestly tracked instead of being smuggled into DB-16. My only comment is the non-blocking 2c end-state question above.

LOOP HEALTH: converging — this round removes the misleading accessor story, adds a real consumer test for the 2a rewrite path, and leaves one clearly named structural question (2c’s long-term home) instead of spreading the debt further.


View conversation

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT review in progress... (view conversation)

Check back in ~30 minutes for the full review.

@briansrls

Copy link
Copy Markdown
Contributor Author

ChatGPT Review

Principle audit.

Fail-closed. Satisfied. The new invariant test fails loudly if any pipeline stage named by the pipeline-authority path still carries ArrowBody::Unparsed, and the new test hook returns Result instead of silently succeeding (src/v3/compiler/src/lib.rs:214-220, src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs:1-37). The protection is behavioral rather than type-level, but it is a real gate.

Illegal states unrepresentable. Better than the previous round, but not fully structural. The PR stops treating substrate accessors as a second “okay” DB-16 meaning of Unparsed and moves that into explicit tracked debt. The remaining pressure is that ArrowBody::Unparsed still has two live bootstrap-range meanings—case 1 parse lag and case 2c pipeline ordering—and the distinction is carried by convention (“compile in pipeline.dag is special”), not by the type itself (src/v3/compiler/src/parse.rs:65-151, src/v3/compiler/src/dag.rs:562-586).

Facts flow forward. Stronger. The stage-rewrite test now derives its stage set from the same authority bootstrap uses, so reorder-only edits do not drift a copied expected list (src/v3/compiler/src/lib.rs:214-220, src/v3/compiler/src/pipeline_authority.rs:222-225, src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs:1-37). My one concern is that the 2c prose now says ordering lives on the persisted ArrowBody::Unparsed(body_span), while the visible helper still begins from raw pipeline.dag text (include_str! + tokenize) (src/v3/compiler/src/pipeline_authority.rs:222-225). So the docs are a bit ahead of the implementation in how they describe the authority path.

Coproduct dissolution. No new substrate enum or enum arm lands, so no fresh dissolution debt there. The lingering issue is classification language: case 2c is described as “terminal” / “intended terminal carrier” while also being given a concrete future structural dissolution trigger (docs/design-fn-external-body-reconciliation.md:44-60, src/v3/compiler/src/parse.rs:122-151, src/v3/compiler/src/dag.rs:562-586). Under the active discipline, that reads more like a tracked scaffold than a true terminal form. Non-blocking, but worth tightening because this PR is specifically about classification clarity.

Single authority. Improved. The new test hook is one source, two readers, not a copied second list, and the ROADMAP now splits ArrowBody::Unparsed into separate case-1 / case-2c / DB-14 rows instead of forcing one deletion story to cover all three (src/v3/ROADMAP.md scheduled-deletions hunk). The only unresolved authority question is whether 2c’s canonical source is the Dag-carried Arrow.body fact or the raw pipeline.dag parser path in pipeline_authority.rs.

API-level enforcement. Mixed. Case 2a now has a real regression guard: if the bootstrap rewrite stops happening, the test fires (src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs:1-37). Case 2c is still convention-level: a reader has to know that compile in pipeline.dag is the special persisted-Unparsed case (src/v3/compiler/src/parse.rs:122-151). The type system does not stop a future consumer from flattening all Unparsed bodies into one category.

Design question. Is case 2c a genuine terminal substrate meaning of ArrowBody::Unparsed, or a tracked bootstrap-range scaffold whose richer source has already been named? What’s at stake is not today’s behavior—the PR makes that much clearer—but the lesson the codebase teaches next. If 2c is terminal, the docs should stop promising a replacement carrier. If it has a named future structural replacement, then calling it “terminal” normalizes a special-case carrier the project already knows how it wants to dissolve.

Path to convergence. I do not see an executable reason to stop merge. The smallest before-merge improvement would be to make the 2c classification language consistent everywhere: replace “terminal” / “intended terminal carrier” with wording that matches its named future structural replacement in docs/design-fn-external-body-reconciliation.md, src/v3/compiler/src/parse.rs, and src/v3/compiler/src/dag.rs. The follow-up debt can stay explicit: add a first-class structural pipeline-order carrier, migrate pipeline_authority to that source, then retire 2c’s Unparsed role; keep the E-9 accessor rewrite separate as the already-tracked follow-up.

Verdict. APPROVE_WITH_COMMENTS. This round makes real forward progress: the ROADMAP split is fixed, the accessor mismatch is tracked instead of being normalized inside DB-16, and the new invariant test locks the 2a bootstrap rewrite on the right authority path. My only comment is to tighten the 2c classification language so the docs do not call something “terminal” while also naming its future structural dissolution.

LOOP HEALTH: converging — this round removes the misleading accessor story, adds a real consumer-facing invariant test, and leaves one explicit 2c classification question instead of spreading the debt further.


View conversation

@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.

codex · gpt-5.4 · 6fa85a3c

✅ Review (blocking: 0, non-blocking: 2+/0-)

Non-blocking — Strengths

  • docs/design-fn-external-body-reconciliation.md The DB-16 writeup now separates parse lag, per-stage host rewrites, and compile ordering authority without folding the accessor E-9 debt into the same semantic bucket.
  • src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs The new invariant derives stage names from the same compile-order reader bootstrap uses, so the case-2a rewrite check is locked to the live ordering source rather than a hard-coded stage list.

ROADMAP — Verified

  • ArrowBody::Unparsed lifecycle split: src/v3/ROADMAP.md now tracks case 1, case 2c, and the accessor interim as three distinct dissolution stories with distinct triggers.
  • E-9 accessor debt tracking: The accessor Arrow.body mismatch is now an explicit bounded deferral with scope and a named dissolution trigger instead of being normalized inside DB-16.

✅ The prior DB-16 and ROADMAP concerns are fixed, and I did not find a new thesis or invariant violation in the changed lines.

@briansrls

Copy link
Copy Markdown
Contributor Author

codex · gpt-5.4 · 6fa85a3c

✅ Review (blocking: 0, non-blocking: 2+/0-)

Non-blocking — Strengths

  • docs/design-fn-external-body-reconciliation.md The DB-16 writeup now separates parse lag, per-stage host rewrites, and compile ordering authority without folding the accessor E-9 debt into the same semantic bucket.
  • src/v3/compiler/tests/m1_fn_external_body_reconciliation_test.rs The new invariant derives stage names from the same compile-order reader bootstrap uses, so the case-2a rewrite check is locked to the live ordering source rather than a hard-coded stage list.

ROADMAP — Verified

  • ArrowBody::Unparsed lifecycle split: src/v3/ROADMAP.md now tracks case 1, case 2c, and the accessor interim as three distinct dissolution stories with distinct triggers.
  • E-9 accessor debt tracking: The accessor Arrow.body mismatch is now an explicit bounded deferral with scope and a named dissolution trigger instead of being normalized inside DB-16.

✅ The prior DB-16 and ROADMAP concerns are fixed, and I did not find a new thesis or invariant violation in the changed lines.

@briansrls
briansrls merged commit 8e1a448 into main Apr 18, 2026
3 checks passed
@briansrls briansrls mentioned this pull request Apr 19, 2026
@briansrls
briansrls deleted the session/sleek-crab-150 branch June 1, 2026 18:43
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