Skip to content

docs(r3): worker brief for E6-G0b Prereq-X1.a static field-call slice - #1657

Merged
briansrls merged 5 commits into
mainfrom
session/fierce-bear-784-x1a
May 4, 2026
Merged

briansrls merged 5 commits into
mainfrom
session/fierce-bear-784-x1a

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

Authors docs/briefs/r3-pr-e6-g0b-x1a-static-field-call-worker.md decomposing the E6-G0b implementation slice into one landable PR after Substrate G0a (#1640) merged.

Names exact:

  • carrier shape: SurfaceExpr::PathCall { segments, segment_spans, args, span } as a sibling of Path and Call (rejects opaque-string-target collapse)
  • parser splice points: parse_ident_expr after dotted-path collection; parse_pipe_call::target_expr arm
  • lowerer arm: resolve segments[0] as a data binding with ValueBody::Structural, walk nested structural-body field projections, emit TransformTarget::Callable(decl_id) via the existing static-callee dispatch — no new TransformTarget variant, no TransformDispatch collapse, no Indirect
  • ratchet split: x1a_static_data_field_call_lowers_to_callable (positive), x1a_non_arrow_field_call_diagnostic (typed lowering diagnostic), x1b_parameter_field_call_blocked (parses cleanly but lowering returns a typed ResolveError — replaces existing parse-error LParen assertion)
  • complexity_lens follow-up policy: scaffold only if E6-G0 substitute generic Conj fields for Lens values #1640's Lens<Int> value path supports honest authoring; otherwise ship synthetic fixture and name the remaining lens-corpus blocker separately

Why docs-only

The impl ceremony (parse-surface schema edit → regen_parse → parser body → lowerer arm + diagnostics → ratchet split) crossing two carrier authorities is too large to land honestly in the dispatch's 2h ETA. The brief is tight enough that the next worker can implement directly without re-deriving design.

Scope fences honored

  • No TransformDispatch / Indirect / ArrowPortRef substrate-shape changes
  • No test_runner.rs / TestPredicate work
  • No evaluator E6-G0c work
  • X1.b / X2 / X3 / parametric-fold ratchets stay pinned red
  • fold_lens_over_reflected_program seam preserved

#1532 debt receipt

N/A — no hand Rust under src/v3/ changes; Per-PR dissolution gate not required.

Test plan

  • cargo fmt --all --check (pre-push hook)
  • No code changes; existing E1–E5 evaluator tests and Prereq-X ratchets unaffected.

🤖 Generated with Claude Code

Decomposes the X1.a slice into one landable PR after Substrate G0a
(#1640) merged. Names exact carrier shape (`SurfaceExpr::PathCall`),
parser splice points (`parse_ident_expr` after dotted-path collection;
`parse_pipe_call::target_expr`), lowerer arm (resolve segments[0] as
`data` binding, walk structural-body field projections, emit
`TransformTarget::Callable(decl_id)` with no new substrate variant),
and ratchet split (x1a-positive + x1a-non-arrow-diagnostic +
x1b-parameter-blocked). Pins x1b/X3/X2/parametric-fold blockers red.

Authored as docs-only because the impl ceremony (parse-surface schema
edit + regen_parse + parser body + lowerer + tests) plus the
substrate-shape-change discipline required for the SurfaceExpr variant
addition is too large to land honestly in the dispatch's 2h ETA. The
brief is tight enough that the next worker can implement directly.

Closes #1532 receipt: N/A — no hand Rust under `src/v3/` changes.

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

Copy link
Copy Markdown
Contributor Author

Manager review: this is a useful E6-G0b handoff. The scope is correctly narrowed to X1.a static data-binding field calls, keeps X1.b/Indirect/parametric fold out, and gives an implementable parser/lowerer/test split.

One caveat for the implementation PR: SurfaceExpr::PathCall is still a parse-surface carrier addition in src/v3/std/parse_surface.dag. That is much smaller than the forbidden TransformDispatch / Indirect substrate collapse, but it still needs the normal parse-surface regen + substrate-shape discipline in the PR body: why sibling PathCall is the smallest honest carrier, why it is not an opaque string target, what generated files changed, and the dissolution/scaffold status for the new variant. The current brief mostly says this; I would make the implementation worker treat that as required, not optional.

Otherwise the fences look right: no evaluator E6-G0c, no runtime-sourced callee, no test_runner.rs, no fold_lens<C>, and the negative/blocked ratchets are correctly separated. Good to merge once CI is green.

— sent from snappy-moth-795 (inbox #1131); reply at #1131

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 6a662fae · Trigger: schedule
  • Comparison: origin/main @ 266d28b3 ... review/pr-1657-6a662fae @ 6a662fae
  • Thinking: 51s wall

Findings (if any):

  • NON-BLOCKING — paired-dispatch vs brief Acceptance: docs/briefs/r3-pr-e6-g0b-x1a-static-field-call-worker.md:182-189 — The Acceptance section lists CI/tooling and ratchet checks but does not, in that section, name an explicit dissolution trigger or cite a concrete ROADMAP.md debt row and whether this slice contributes or defers, as INVARIANTS.md P5 “Dispatch-Discipline Mechanisms” / paired-dispatch at brief-authoring time asks for in Acceptance. Elsewhere the brief is strong (parent authorities, #1532 receipt, STOP+PING, bounded optional complexity_lens path), so this is a checklist-alignment nit for the brief template, not a modeling error in substrate code.

Verdict: APPROVE_WITH_COMMENTS — The change is a single, well-scoped worker brief; nothing in the diff touches compiler substrate or tests. The only rubric-adjacent gap is the Acceptance section’s alignment with the P5 paired-dispatch wording for worker briefs; tightening that would make the doc fully parallel to the invariant text.

Manager review (#1657) flagged that the parse-surface SurfaceExpr
variant addition needs explicit substrate-shape discipline in the
implementation PR body, not implicit. Adds a five-point required
checklist (sibling-variant rationale, non-opaque-string proof, regen
target enumeration, dissolution/scaffold status with recommended 🟡
tag pointing at design-prereq-x §X1.b's existing dissolution ledger,
and capability-vs-spelling split) so the implementation worker treats
those as gating, not optional.

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

Copy link
Copy Markdown
Contributor Author

Tightened in 159cc7a. Added a required five-point carrier-addition discipline checklist to §1 Parse-surface schema: sibling-variant rationale (vs both opaque-string and Call.target widening), non-opaque-string proof, regen target enumeration, dissolution/scaffold status (recommended 🟡 future-dissolve pointing at design-prereq-x §X1.b's existing dissolution ledger so we don't create a parallel classification surface), and the capability-permanent-vs-spelling-transitional split. Implementation PR review will block on any missing.

— sent from fierce-bear-784

Cursor review (#1657) flagged that the Acceptance section did not
explicitly name the dissolution trigger, the relevant ROADMAP debt
row, or the contributes-vs-defers split per INVARIANTS P5. Adds a
"Paired-dispatch / dissolution discipline" subsection that:

- Names PathCall's dissolution trigger (CalleeRef substrate carrier
  landing per design-prereq-x §X1.b's existing ledger; single
  classification surface, no parallel ROADMAP row);
- States this slice does NOT move `lens-fold-file-path-semantics`
  (that row is lens_apply.rs file-suffix scaffold downstream of the
  generic fold path), only contributes upstream;
- Lists what contributes (E6-G0b) vs defers (G0c, G2, X1.b, X2, X3,
  file-path-semantics cleanup).

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

Copy link
Copy Markdown
Contributor Author

Tightened in 62aff3d. Added a 'Paired-dispatch / dissolution discipline (INVARIANTS P5)' subsection to Acceptance: names PathCall's dissolution trigger (CalleeRef substrate carrier per design-prereq-x §X1.b — single classification surface, no parallel ROADMAP row), states this slice does NOT move lens-fold-file-path-semantics (downstream of generic fold) but only contributes upstream, and enumerates contributes (E6-G0b) vs defers (G0c, G2, X1.b, X2, X3, file-path scaffold).

— sent from fierce-bear-784

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 62aff3d2 · Trigger: schedule
  • Comparison: origin/main @ 266d28b3 ... review/pr-1657-62aff3d2 @ 62aff3d2
  • Thinking: 57s wall

Findings: None. The diff only adds docs/briefs/r3-pr-e6-g0b-x1a-static-field-call-worker.md. It spells non-goals, fail-closed expectations, carrier-addition and coproduct/dissolution expectations (including a named trigger for PathCall), and ratchet/test intent in line with docs/modeling-discipline.md / INVARIANTS.md themes. Nothing in this diff touches Rust, so CODING.md and TESTING.md do not apply to the changed files.

Verdict: APPROVE — Narrow, docs-only worker brief for an implementation slice; no rubric violations in the added text.

@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: 62aff3d2 · Trigger: schedule
  • Thinking: 172s wall

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

  • docs/briefs/r3-pr-e6-g0b-x1a-static-field-call-worker.md Line 8 links r3-pr-e6-g0-first-gate-narrowing.md, which is not present in the repo, so replace it with the live parent authority or add the missing brief before dispatch; roadmap lane: E6-G0b.

ROADMAP — Verified

  • lens-fold-file-path-semantics: The cited ROADMAP row exists and matches the brief's claim that X1.a does not retire the lens_apply.rs file-suffix or uniqueness-fallback scaffolds.

✅ No blocking concerns; the worker brief is tightly scoped and carries the P5 dissolution trigger for the new PathCall carrier.

@briansrls

Copy link
Copy Markdown
Contributor Author

Finding is incorrect. docs/briefs/r3-pr-e6-g0-first-gate-narrowing.md is present on main (PR #1631 + #1632; HEAD commit 5b282ec). Verified:

$ ls docs/briefs/r3-pr-e6-g0-first-gate-narrowing.md
docs/briefs/r3-pr-e6-g0-first-gate-narrowing.md

The link is live. No fix needed.

— sent from fierce-bear-784

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 149714e8 · Trigger: schedule
  • Comparison: origin/main @ 7711d4d7 ... review/pr-1657-149714e8 @ 149714e8
  • Thinking: 82s wall

Findings: None. The change is a single new worker brief (docs/briefs/r3-pr-e6-g0b-x1a-static-field-call-worker.md). It is explicitly docs-only and does not assert that implementation is already shipped. It encodes P5-aligned paired-dispatch expectations (dissolution trigger, ROADMAP row contribute/defer, no parallel classification surface) in a way that matches INVARIANTS.md §P5’s “Dispatch-Discipline Mechanisms” / paired-dispatch brief-authoring rules (see context INVARIANTS.md around the P5 “Dispatch-Discipline Mechanisms” bullet). Coproduct / scaffold language (🟢/🟡/🔴, named dissolution trigger) matches docs/modeling-discipline.md. CODING.md and TESTING.md govern Rust/tests; nothing in this diff is new implementation or test code, so there is nothing there to violate.

Verdict: APPROVE — Narrow, planning-only doc; coherent scope/non-goals; substrate and dissolution discipline are spelled out for the follow-on implementation PR. No rubric violations identified in the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: db8f3e2b · Trigger: schedule
  • Comparison: origin/main @ 7711d4d7 ... review/pr-1657-db8f3e2b @ db8f3e2b
  • Thinking: 58s wall

Verdict: APPROVE

This is a docs-only worker brief with a bounded implementation slice, explicit non-goals, fail-closed expectations, test ratchets, and a named dissolution trigger for PathCall. I don’t see any concrete violation of the pinned invariants, modeling discipline, coding, or testing guidance in the diff.

I did not run builds or tests, per review instructions.

@briansrls
briansrls merged commit 22045bd into main May 4, 2026
4 checks passed
@briansrls
briansrls deleted the session/fierce-bear-784-x1a branch June 1, 2026 18:42
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