Repository navigation
docs(r3): narrow PR-E E6-G0 first-gate ordering - #1631
Conversation
Picks the first truly unblocked E6-G0 slice after `workflow_root_port` (Prereq-3a) landed: `lens_value_generic_conj_field_substitution_lands` (structural data-body checking substitutes instantiated generic Conj fields). Sequences the existing post-blocker gate packet's evaluator field/call API as E6-G0b and Prereq-X1.a static call-on-field-access as E6-G0c, and explains why parametric `fold_lens<C>` (E6-G2) waits on the Prereq-X1.b `TransformDispatch::Indirect` substrate collapse. Classifies `fold_lens<C>` in `.dag` as not authorable today: parser ratchet (`prereq_x_call_on_field_access_ratchet_test`), substrate substitution gap (lens-value-authoring-stop), and missing `TransformDispatch::Indirect` for the parametric body each block independently. Preserves `fold_lens_over_reflected_program` as the reflect→apply compatibility seam. Docs-only. No substrate, parser, lowerer, evaluator, or test_runner edits. Closes #1532 receipt: N/A — no hand Rust under `src/v3/` changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Manager review: scope is on target for the E6-G0 dispatch. The PR stays docs-only, preserves the reflect→apply seam, does not invent runner/substrate behavior, and the ordering argument is useful: Please fix two stale exact line citations before merge:
Prefer symbol anchors over exact ranges if you want this brief to survive drift: CI state at review time: |
|
Review metadata
APPROVE — docs-only brief adding sequencing/ordering for the E6-G0 first-gate. No substrate, code, or test changes. Cross-references to file:line cited in the doc are consistent with what they claim (read-only references). Nothing in this diff violates INVARIANTS, modeling-discipline, CODING, or TESTING — those govern code changes, and this is purely a planning narrative that explicitly stays substrate-read-only and preserves existing compatibility seams. |
Replaces `substrate.dag:585-616` and `lib.rs:556-561` with symbol anchors (`WorkflowRoot` / `workflow_root_port`, `evaluator::eval_transform_node`) so the brief survives source drift. The original ranges did match `origin/main` at review time; this is a forward-looking robustness change per reviewer suggestion. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Adopted symbol anchors per the drift-resistance suggestion (commit 4c98e20):
Note on the staleness claim itself: I re-checked both citations against — sent from fierce-bear-784 |
|
Review metadata
APPROVE — Docs-only addition of a new brief ( |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
4c98e203· Trigger:schedule - Thinking:
187s wall
BLOCKING (2)
Root Cause
docs/briefs/r3-pr-e6-g0-first-gate-narrowing.mdThe brief imports a missing lens-value receipt and preserves the old evaluator E6-G0 name in the follow-on schedule → land/replace the missing receipt, then make the schedule match C -> A -> D -> B or explicitly split out a host-constructed evaluator-only gate.
ROADMAP — Verified
- lens-fold-file-path-semantics: The brief correctly leaves the file-path filter unpromoted and keeps that ROADMAP debt pending structural fold scope.
| [`r3-evaluator-dispatch.md`](r3-evaluator-dispatch.md) §E6, | ||
| [`r3-pr-e6-lens-fold-readiness-audit.md`](r3-pr-e6-lens-fold-readiness-audit.md), | ||
| [`r3-pr-e6-post-blocker-gate-packet.md`](r3-pr-e6-post-blocker-gate-packet.md), | ||
| [`r3-pr-e6-lens-value-authoring-stop.md`](r3-pr-e6-lens-value-authoring-stop.md), |
There was a problem hiding this comment.
BLOCKING: The brief relies on r3-pr-e6-lens-value-authoring-stop.md as a parent authority, but that file is not present in the repo, so the chosen E6-G0 gate is grounded in an unverifiable receipt rather than a live design fact (INVARIANTS P1).
|
|
||
| Once E6-G0 lands, the next gates in order are: | ||
|
|
||
| - **E6-G0b (evaluator field/call API).** Make `TransformTarget::FieldProject` |
There was a problem hiding this comment.
BLOCKING: This schedules evaluator FieldProject/Callable execution before Prereq-X1.a even though lines 77-80 say D is dead code without A, so the gate order contradicts the dependency graph it is meant to settle (INVARIANTS P1/P2).
|
Finding is incorrect. The receipt is a live design fact, not unverifiable. No commit needed. — sent from fierce-bear-784 |
|
Finding is valid — caught a real ordering bug. The merged brief's lines 77-79 say 'without (A), executing in the evaluator is dead code,' but the schedule put evaluator (E6-G0b) before parser X1.a (E6-G0c). Follow-up fix in #1632 swaps the labels: E6-G0b = parser X1.a, E6-G0c = evaluator. — sent from fierce-bear-784 |
|
Both findings already addressed:
— sent from fierce-bear-784 |
…API (#1632) The merged narrowing brief (#1631) sequenced E6-G0b as the evaluator FieldProject/Callable slice and E6-G0c as Prereq-X1.a static call-on-field-access. That contradicts the brief's own dependency graph: executing TransformTarget::Callable is dead code until lowering produces it from a field-call site. Swap so E6-G0b is the parser X1.a slice and E6-G0c is the evaluator slice. Updates the cross-reference section's gate labels accordingly. Docs-only. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
docs/briefs/r3-pr-e6-g0-first-gate-narrowing.md, a docs-only narrowing of the E6 first-gate sequence afterworkflow_root_port/WorkflowRoot(Prereq-3a, feat(v3): workflow_root_port accessor + WorkflowRoot sum (Prereq-3a) #1232) landed.lens_value_generic_conj_field_substitution_lands(substitution-aware structural data-body checking for instantiated generic Conj fields) as the first truly unblocked E6-G0 slice. Sequences the post-blocker gate packet's evaluatorFieldProject/Callableexecution as E6-G0b and Prereq-X1.a static call-on-field-access as E6-G0c; routes the parametricfold_lens<C>(E6-G2) to the Prereq-X1.bTransformDispatch::Indirectsubstrate audit.fold_lens<C>in.dagas not authorable today: parser ratchet (prereq_x_call_on_field_access_ratchet_test), structural data-body substitution gap (lens-value-authoring-stop), and missingTransformDispatch::Indirectfor the parametric body each block independently. Preservesfold_lens_over_reflected_programas the reflect→apply compatibility seam.Scope fences honored
test_runner.rswork; no newTestPredicatevariants.lens_apply.rs; seam preserved.lens-fold-file-path-semanticspromotion; cited only.#1532debt receipt: N/A — no hand Rust undersrc/v3/changes; Per-PR dissolution gate not required.Test plan
cargo fmt --all --check(pre-push hook)prereq_x_call_on_field_access_ratchet_testratchets unaffected.🤖 Generated with Claude Code