Repository navigation
A - #524
A#524
Conversation
… 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
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
This comment has been minimized.
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
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
briansrls
left a comment
There was a problem hiding this comment.
codex · gpt-5.4 · eebea695
✅ Review (blocking: 0, non-blocking: 2+/1-)
Non-blocking — Strengths
src/v3/compiler/src/lower.rsThe 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.rsThe 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.rsThe 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.
This comment has been minimized.
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
This comment has been minimized.
This comment has been minimized.
|
Meta-review in progress... (view conversation) Loop-health check: is this review cycle making forward progress, or shifting debt? Posts in ~5-15 minutes. |
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
This comment has been minimized.
This comment has been minimized.
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 The next visible revision fixed both at the right layer: codex records that lowering now rejects 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 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 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. |
briansrls
left a comment
There was a problem hiding this comment.
codex · gpt-5.4 · 91f46d89
✅ Review (blocking: 0, non-blocking: 2+/0-)
Non-blocking — Strengths
src/v3/compiler/src/lower.rsThe refined-generic guard stays in lowering-layer implementation code, fails closed through a diagnostic, and is locked by focused regression tests for bothTandList<T>.src/v3/compiler/src/parse.rsThe 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_phasenow rejects generic-dependentwhererefinements at lowering with explicit diagnostics, matching the roadmap closeout. - DB-16 pipeline-stage rewrite invariant: The new
pipeline_stages_lower_to_external_realization_not_unparsedtest verifies that every stage named bypipeline.dagcompile order reachesExternalRealizationafter 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.
This comment has been minimized.
This comment has been minimized.
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
|
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
left a comment
There was a problem hiding this comment.
codex · gpt-5.4 · e9bd4b11
BLOCKING (1)
Root Cause
docs/design-fn-external-body-reconciliation.mdDB-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.rsDeriving 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.
| /// `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.
This comment was marked as resolved.
Sorry, something went wrong.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
|
The conversation page did not render any content. The bot will start a fresh conversation on the next push. |
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
This comment has been minimized.
This comment has been minimized.
briansrls
left a comment
There was a problem hiding this comment.
codex · gpt-5.4 · 432346ef
BLOCKING (1)
Root Cause
src/v3/ROADMAP.mdDB-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.mdThe 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.
| - **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.
This comment was marked as resolved.
Sorry, something went wrong.
This comment has been minimized.
This comment has been minimized.
ChatGPT ReviewPrinciple 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 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 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 ( 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 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 Design question. Is case 2c supposed to be a legitimate long-lived use of Verdict. APPROVE_WITH_COMMENTS. The prior documentation miss around the 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. |
|
ChatGPT review in progress... (view conversation) Check back in ~30 minutes for the full review. |
ChatGPT ReviewPrinciple audit. Fail-closed. Satisfied. The new invariant test fails loudly if any pipeline stage named by the pipeline-authority path still carries 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 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 ( 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 ( Single authority. Improved. The new test hook is one source, two readers, not a copied second list, and the ROADMAP now splits API-level enforcement. Mixed. Case 2a now has a real regression guard: if the bootstrap rewrite stops happening, the test fires ( Design question. Is case 2c a genuine terminal substrate meaning of 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 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. |
briansrls
left a comment
There was a problem hiding this comment.
codex · gpt-5.4 · 6fa85a3c
✅ Review (blocking: 0, non-blocking: 2+/0-)
Non-blocking — Strengths
docs/design-fn-external-body-reconciliation.mdThe 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.rsThe 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.
|
✅ Review (blocking: 0, non-blocking: 2+/0-) Non-blocking — Strengths
ROADMAP — Verified
✅ The prior DB-16 and ROADMAP concerns are fixed, and I did not find a new thesis or invariant violation in the changed lines. |
Opened from session-dashboard for session
sleek-crab-150.