Skip to content

feat(v3): T-Substrate-Lens-Primitive — Lens<C> carrier + Q6.5 widening - #1186

Merged
briansrls merged 28 commits into
mainfrom
session/tidy-wolf-507
Apr 29, 2026
Merged

briansrls merged 28 commits into
mainfrom
session/tidy-wolf-507

Conversation

@briansrls

@briansrls briansrls commented Apr 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

First substrate slice for the lens framework (docs/design-lens-framework.md, docs/briefs/r2-substrate-manager.md). Director-locked option (c) on parent inbox #1130 (2026-04-29) after a stop-and-ping flagging the LensInstanceKindWitness.payload dependent-typing grammar gap.

P1 / P2 receipt

  • P1 Step 1 — DAG ancestor: Lens<C> is a sibling concept to existing AnalysisDimension<Carrier> (dimensions.dag:72); both publish a generic compositional analysis surface. Lens<C> adds the 5-L1-behavior contract (read/sequential/branch/iterate/validate) the framework folds over; AnalysisDimension<Carrier> stays at the legacy three-field surface (witness_of/compose+identity/break_diagnostic) until consumers cut over. Reuses Witness<C> / OptionalDiagnostic / DimensionReport<C> from dimensions.dag and Monoid<C> from dsl/std/algebra.dag verbatim — no parallel reps introduced.
  • P1 Step 2 — single fact per row: Lens<C> carries the irreducible 6-field contract; sequential: Monoid<C> replaces the prior parallel compose + unit field pair via structural inhabitance (Director directive 2026-04-28 + gpt-5-5-pro Finding Consolidate binaries into gunbc-dag package #4) so the monoid law is structurally enforceable, not merely documented.
  • P2 — single authority: Q6.5 two-layer split. Layer-1 CompilerDiagnosticKind closed sum stays Substrate-Manager-owned and unchanged; Layer-2 lens-instance kinds enter via LensInstanceKind(LensInstanceKindWitness) exclusively. Diagnostic.kind widens to AnyDiagnosticKind so a single Diagnostic value can carry either layer without re-introducing a cross-manager handoff.

Substrate change

  • New: src/v3/std/lens.dag declares Lens<C> with the locked 6-field shape: name, read: fn(Dag, Behavior) -> Witness<C>, sequential: Monoid<C>, branch: fn(C, C) -> C, iterate: fn(C, LoopBound) -> C, validate: fn(Dag, C) -> OptionalDiagnostic.
  • Edit: src/v3/std/diagnostics.dag adds DiagnosticKindDecl, LensInstanceKindWitness (decl-only — see gap receipt), AnyDiagnosticKind = CompilerKind(CompilerDiagnosticKind) | LensInstanceKind(LensInstanceKindWitness). Widens Diagnostic.kind from CompilerDiagnosticKind to AnyDiagnosticKind. CompilerDiagnosticKind closed sum is unchanged.

Substrate gap receipt — LensInstanceKindWitness.payload intentionally absent

Per stop-and-ping at parent inbox #1130: today's .dag grammar cannot express the design-doc shape payload: <inhabits kind_decl.payload> (refinement-type-on-sibling-field). The flat alternative { kind_decl, payload_kind_shape } ratifies the very illegal state Q6.5 §State-space discipline rejects (three independent coordinates admitting (Lens<TenantFlow>, "WrongName", payload-of-different-shape)).

Director-approved option (c): LensInstanceKindWitness { kind_decl: DeclarationRef } — decl-only. Layer-2 kind identity and namespace authority land now via the decl-ref; the structured payload value is intentionally NOT carried through the substrate until dependent-field typing or substrate inhabitance witnesses lower without hand-Rust scaffolding. The dissolution trigger is named in the type's 🟡 SCAFFOLD comment, and the acceptance test lens_instance_kind_witness_payload_intentionally_absent fails loudly the moment a payload field is added — forcing the trigger comment to retire in lock-step.

Acceptance

src/v3/compiler/tests/integration/lens_substrate_carrier_test.rs — five structural claims over the regenerated bootstrap Dag:

  • lens_carrier_has_locked_six_field_shape
  • diagnostic_kind_widened_to_any_diagnostic_kind
  • compiler_diagnostic_kind_closed_sum_unchanged (anti-bridge enforcement: Layer-1 closed sum cannot drift)
  • any_diagnostic_kind_has_two_layer_constructors
  • lens_instance_kind_witness_payload_intentionally_absent (gap-closure fail-loud trigger)

SG-0 ratchet receipt added with Director acceptance citation. parse_corpus_manifest.txt refreshed via the standard helper.

Commands run

cargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap
cargo test -p v3-compiler --test integration refresh_handwritten_parse_snapshot_manifest -- --ignored
cargo test -p v3-compiler --test integration lens_substrate_carrier   # 5/5 pass
cargo test -p v3-compiler --test integration sg0_v3                   # 5/5 pass
cargo test -p v3-compiler --test integration handwritten_parse_snapshot_matches  # 1/1 pass
cargo test -p v3-compiler --test integration method_template_contract # 3/3 pass (regression check post-merge)

Notes for reviewers

iterate argument order: iterate: fn(C, LoopBound) -> C matches docs/design-lens-framework.md (the design-doc shape, also cited in the STOP+PING). docs/briefs/r2-substrate-manager.md writes iterate: (LoopBound, C) -> C; this PR follows the design doc per Director-locked option (c). Brief should be updated as a follow-up bookkeeping pass; carrier shape is intentional, not accidental.

Out of scope (subsequent lanes)

  • Migration of cost.dag / complexity.dag / idempotency.dag / parallelism.dag PROXY lenses to consume Lens<C> (R3-T-CostLens-Composition + R2-Evaluator PR-A..E).
  • fold_lens<C>: Lens<C> → Dag → DimensionReport<C> generic fold machinery (I2 in design doc).
  • User-authored lens TestClaim wiring (I7 in design doc).
  • Three worked-example fixture lens instances (I4 in design doc).
  • Cross-domain product fixture (I5).
  • Closing the dependent-payload grammar gap (LensInstanceKindWitness payload field).

Test plan

  • cargo test -p v3-compiler --test integration lens_substrate_carrier passes.
  • cargo test -p v3-compiler --test integration sg0_v3 passes (ratchet receipt valid).
  • cargo fmt --all --check clean.
  • CI rerun.
  • Manager review.

🤖 Generated with Claude Code

briansrls and others added 21 commits April 28, 2026 23:33
# Conflicts:
#	src/v3/compiler/src/bootstrap_generated.rs
#	src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
- Add method_template_contract_test.rs to EXPECTED_HAND_AUTHORED_TEST
  with Director-approved receipt (T-Ground-LanguageSpec dispatch
  explicitly accepted "focused Rust tests over the reflected substrate").
- Refresh parse_corpus_manifest.txt entry for src/v3/std/emit_model.dag
  to reflect MethodTemplateContract + PlaceholderConvention additions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	src/v3/compiler/src/bootstrap_generated.rs
#	src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
Re-regenerate v3 bootstrap so MethodTemplateContract +
PlaceholderConvention land on top of main after merging
origin/main (carrier shape unchanged).

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

Copy link
Copy Markdown
Contributor Author

Early manager feedback on draft #1186:

The implementation direction matches the option (c) shape call: Lens<C> in src/v3/std/lens.dag, Q6.5 widening through AnyDiagnosticKind, closed CompilerDiagnosticKind preserved, and decl-only LensInstanceKindWitness with the dependent-payload gap made explicit. That is the right first-slice surface.

Before moving this out of draft, please tighten the operational surface:

  1. Update the PR title/body. Current title/body are dashboard placeholders. The body should state the P1/P2 receipt, the option (c) payload deferral, exact regen/test commands, and that this PR does not migrate the four existing lenses.
  2. Run/trigger CI. Because the PR is draft, all checks are skipped right now. Either run the focused local checks and list them, then mark ready, or use a manual dashboard trigger if you need a pre-ready CI read.
  3. Resolve the iterate argument-order discrepancy explicitly. docs/design-lens-framework.md says iterate: (C, LoopBound) -> C; docs/briefs/r2-substrate-manager.md says iterate: (LoopBound, C) -> C. Your implementation uses (C, LoopBound), matching the design doc and your STOP+PING note. Keep that if intentional, but call out the brief mismatch in the PR body so reviewers do not treat it as accidental.
  4. Confirm parse/bootstrap inclusion. Since src/v3/std/lens.dag is a new std file, make sure the generated full bootstrap sees Lens and that any parse manifest / SG-0 ratchet updates required by the new file are committed.

No request to broaden scope. Keep this PR as the carrier slice only.

— sent from jolly-ram-908 (inbox #1130); reply at #1130

First substrate slice for the lens framework
(docs/design-lens-framework.md, docs/briefs/r2-substrate-manager.md).
Director-locked option (c) on parent inbox #1130.

Substrate changes:
- New src/v3/std/lens.dag declares Lens<C> with the locked 6-field
  shape: name, read: fn(Dag, Behavior) -> Witness<C>,
  sequential: Monoid<C>, branch: fn(C, C) -> C,
  iterate: fn(C, LoopBound) -> C,
  validate: fn(Dag, C) -> OptionalDiagnostic. Reuses Witness<C> /
  OptionalDiagnostic / DimensionReport<C> from dimensions.dag and
  Monoid<C> from dsl/std/algebra.dag — no parallel reps introduced.
- diagnostics.dag: Q6.5 two-layer authority. Adds DiagnosticKindDecl,
  LensInstanceKindWitness (decl-only, no payload field — see gap
  receipt below), and AnyDiagnosticKind = CompilerKind |
  LensInstanceKind. Widens Diagnostic.kind from CompilerDiagnosticKind
  to AnyDiagnosticKind. CompilerDiagnosticKind closed sum unchanged
  (anti-bridge invariant).

Substrate gap receipt (Director-approved option (c)):
- LensInstanceKindWitness intentionally lacks a payload value field.
  Today's .dag grammar cannot express
  `payload: <inhabits kind_decl.payload>` (refinement-type-on-sibling-
  field). The flat alternative ratifies the illegal-state Q6.5
  rejected (Lens / name / payload-shape three independent coords).
  Layer-2 kind identity + namespace authority land now; structured
  payload value waits for dependent-field typing.

Acceptance:
- src/v3/compiler/tests/integration/lens_substrate_carrier_test.rs:
  Lens<C> 6-field shape, Diagnostic.kind widening, closed-sum
  invariance, AnyDiagnosticKind two-constructor shape, Layer-2
  payload absence as fail-loud trigger when grammar gap closes.
- SG-0 ratchet receipt added with Director acceptance citation.
- parse_corpus_manifest.txt refreshed via
  refresh_handwritten_parse_snapshot_manifest -- --ignored.

Out of scope (deferred to subsequent lanes):
- Migration of cost.dag / complexity.dag / idempotency.dag /
  parallelism.dag PROXY lenses to consume Lens<C> (R3-T-CostLens-
  Composition + R2-Evaluator PR-A..E).
- fold_lens<C> generic fold machinery (I2 in design doc).
- User-authored lens TestClaim wiring (I7 in design doc).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title tidy-wolf-507 feat(v3): T-Substrate-Lens-Primitive — Lens<C> carrier + Q6.5 widening Apr 29, 2026
@briansrls
briansrls marked this pull request as ready for review April 29, 2026 08:06
@briansrls

Copy link
Copy Markdown
Contributor Author

Manager feedback addressed:

  1. Title/body: already refreshed via gh pr edit before manager pass — title is feat(v3): T-Substrate-Lens-Primitive — Lens<C> carrier + Q6.5 widening; body has full P1/P2 receipt, option (c) payload deferral, exact regen/test commands, explicit out-of-scope list (no PROXY-lens migration).
  2. CI: flipped to ready via gh pr ready 1186. Local check results before flip: lens_substrate_carrier 5/5 pass, sg0_v3 5/5 pass, handwritten_parse_snapshot_matches 1/1 pass, method_template_contract 3/3 pass (regression check post-feat(v3): add MethodTemplateContract substrate carrier #1175 merge). cargo fmt --all --check clean.
  3. iterate argument-order discrepancy: noted in PR body under "Notes for reviewers". Implementation follows docs/design-lens-framework.md (fn(C, LoopBound) -> C); the brief at docs/briefs/r2-substrate-manager.md writes (LoopBound, C) -> C — design doc is the locked authority per option (c). Brief bookkeeping update is a follow-up.
  4. Parse/bootstrap inclusion verified at head: bootstrap_generated.rs line 885 declares Lens with the 6-field shape and span pointing at src/v3/std/lens.dag; parse_corpus_manifest.txt contains src/v3/std/lens.dag\t6\t9852\t28d5539a5b28716e; SG-0 EXPECTED_HAND_AUTHORED_TEST updated with the new test path + Director-acceptance receipt.

Carrier-slice scope unchanged. — sent from tidy-wolf-507

@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: fa5bba2c · Trigger: schedule
  • Thinking: 223s wall

BLOCKING (1)

Root Cause

  • src/v3/spec/v3_l1.dag DeclarationRef is still an unrefined universal declaration pointer → add a typed declaration-reference/invariant path for DiagnosticKindDecl, or make this specific broad reference an explicitly bounded scaffold with its own dissolution trigger.

⚠️ The lens carrier slice is otherwise clean, but the new Layer-2 diagnostic-kind witness leaves its core authority unconstrained.

// dependent-field typing or substrate inhabitance witnesses lower
// without hand-Rust scaffolding.
type LensInstanceKindWitness {
kind_decl: DeclarationRef

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.

BLOCKING: kind_decl: DeclarationRef accepts any declaration, so LensInstanceKindWitness does not structurally guarantee the declared DiagnosticKindDecl authority it claims (illegal states unrepresentable / API-level enforcement).

// dependent-field typing or substrate inhabitance witnesses lower
// without hand-Rust scaffolding.
type LensInstanceKindWitness {
kind_decl: DeclarationRef

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.

Same residual class as the existing PatternRealization pattern at src/v3/std/emit_model.dag lines 140–152 and (recently merged) MethodTemplateContract.dag_method: DeclarationRef at emit_model.dag:371 — bare DeclarationRef admits any declaration; the structural constraint ("must be a DiagnosticKindDecl whose parent is the owning Lens<C> inhabitance") is enforced fail-closed at the boundary because the substrate grammar can't yet express DeclarationRef<DiagnosticKindDecl> (refinement-type-on-DeclarationRef).

Per parent-inbox #1130 dispatch (verbatim) on the option (c) lock: "For Q6.5, do not encode a fake dependent payload. Add DiagnosticKindDecl and AnyDiagnosticKind ... or equivalently a small LensInstanceKindWitness { kind_decl: DeclarationRef } without payload. The DeclarationRef must resolve to DiagnosticKindDecl; payload checking is explicitly deferred."

The dispatch explicitly accepted bare DeclarationRef for kind_decl and named the resolution check as deferred — same residual class the broader Q6.5 §State-space discipline acknowledges (option (a) was rejected for fabricating dependent state; option (c) is decl-only with the resolution check at the same boundary as PatternRealization's variant-of-target check). The 🟡 SCAFFOLD comment at diagnostics.dag lines ~75–95 names the dissolution trigger: "refinement/dependent field typing or substrate inhabitance witnesses lower without hand-Rust scaffolding." Tightening here without that trigger landing would either ratify option (a)'s rejected illegal state (free payload_kind_shape coordinate) or require hand-Rust dependent-typing scaffolding the dispatch explicitly forbade. — sent from tidy-wolf-507

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: fa5bba2c · Trigger: schedule
  • Comparison: origin/main @ fbc55ad6 ... review/pr-1186-fa5bba2c @ fa5bba2c
  • Thinking: 163s wall

Findings: None that rise to a documented invariant violation on the diff. Lens<C> uses Monoid<C> for sequential composition (aligned with INVARIANTS.md P1 substrate-fact procedure / DAG-ancestor example). Q6.5 is implemented as a two-layer kind model with an explicit anti-bridge rule on CompilerDiagnosticKind, owner-by-containment called out for DiagnosticKindDecl, and LensInstanceKindWitness documented as 🟡 SCAFFOLD with a concrete dissolution trigger (diagnostics.dag around the new types). New integration tests assert bootstrap shape (not full-pipeline “compile to test one lens”), and sg0_census_test.rs records the per-PR hand-Rust receipt and a forward dissolution note, which matches the spirit of the paired-dispatch / census discipline in the rubric you were given.

Verdict: APPROVE — The change set is narrowly scoped (new lens.dag, diagnostics.dag widening + regenerated bootstrap, focused tests and manifest/census wiring). I did not see a concrete breach of fail-closed, single-authority, or the documented scaffold rules on the touched lines; the intentional decl-only Layer-2 witness is called out as a substrate gap with a named trigger rather than smuggling a free TypeShape payload coordinate.

briansrls and others added 2 commits April 29, 2026 08:15
Strengthen LensInstanceKindWitness SCAFFOLD comment to call out that
bare `DeclarationRef` for `kind_decl` is part of the SAME dissolution
trigger as the deferred payload typing — substrate-level
refinement-typing-on-DeclarationRef closes both the payload-typing
gap and the kind-decl resolution gap in one move. Cites the analogous
PatternRealization and MethodTemplateContract.dag_method patterns.

Addresses non-blocking codex BLOCKING relay at sha fa5bba2 (Layer-2
diagnostic-kind witness leaving its core authority unconstrained) —
shape unchanged per Director-locked option (c) on parent inbox #1130;
just makes the bounded-scaffold receipt fully explicit on this row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	src/v3/compiler/src/bootstrap_generated.rs
#	src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: c515b7e6 · Trigger: schedule
  • Comparison: origin/main @ 46aa8a6c ... review/pr-1186-c515b7e6 @ c515b7e6
  • Thinking: 63s wall

Read the rubric from the pinned context paths and reviewed git diff origin/main...HEAD (hand-authored slice: lens.dag, diagnostics.dag, integration test wiring, sg0_census_test.rs, manifest; plus regenerated bootstrap_generated*.rs).

Findings: None. Nothing in the diff clearly contradicts INVARIANTS.md, docs/modeling-discipline.md, CODING.md, or TESTING.md: the Lens<C> carrier uses structural Monoid<C> for sequential composition (avoids parallel compose/unit vs monoid authority), Q6.5 widens Diagnostic.kind via AnyDiagnosticKind instead of extending CompilerDiagnosticKind, and the LensInstanceKindWitness gap is explicitly documented with a named dissolution trigger and a ratchet test (lens_substrate_carrier_test.rs). The new integration tests document the Director exception and include an SG-0 census note with a forward dissolution path, which matches the scaffold / paired-dispatch spirit in INVARIANTS.md P5.

Verdict: APPROVE — Narrow substrate slice, boundaries and transitional debt are spelled out in the diff; no rubric violations identified with diff-grounded evidence.

Re-regenerate v3 bootstrap so Lens<C> + Q6.5 widening land on top of
latest main after the merge conflict resolution. Refresh parse
manifest. Carrier shape unchanged.

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

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 5bb049cd · Trigger: schedule
  • Comparison: origin/main @ 46aa8a6c ... review/pr-1186-5bb049cd @ 5bb049cd
  • Thinking: 32s wall

Imports check out. The diff is well-scoped: a new Lens<C> substrate carrier, widening Diagnostic.kind to a two-layer sum, and acceptance tests pinning the locked shapes plus a documented gap receipt for LensInstanceKindWitness.payload.

The scaffolds are properly tracked: each TRANSITIONAL/SCAFFOLD note documents the bound and the dissolution trigger (refinement/dependent-field typing). The anti-bridge invariant on CompilerDiagnosticKind is structurally enforced via the pinned closed-sum test. Lens<C> reuses existing Monoid<C>, Witness<C>, OptionalDiagnostic rather than introducing parallel representations. The kind_decl: DeclarationRef residual is explicitly tied to the same dissolution trigger as the payload gap — consistent with the existing PatternRealization precedent the comment cites.

Verdict: APPROVE — substrate addition is small, locked-shape-pinned by tests, and every scaffold has a named dissolution trigger. The Q6.5 two-layer split is the right way to admit lens-instance kinds without bridging through the Layer-1 closed sum.

briansrls and others added 2 commits April 29, 2026 09:12
# Conflicts:
#	src/v3/compiler/src/bootstrap_generated.rs
#	src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
Re-regenerate v3 bootstrap so Lens<C> + Q6.5 widening land on top of
main after #1188 fixed the v2-extdeps regression. Refresh parse
manifest. Carrier shape unchanged.

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

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: d1d25997 · Trigger: schedule
  • Comparison: origin/main @ 192ea485 ... review/pr-1186-d1d25997 @ d1d25997
  • Thinking: 228s wall

Verdict: APPROVE

Diff is narrowly scoped and the new substrate carriers are documented with clear authority boundaries and dissolution triggers. I did not find concrete violations of the pinned invariants, coding, or testing discipline.

Verification run: cargo test -p v3-compiler lens_substrate_carrier_test --test integration passed, 5/5 tests.

@briansrls
briansrls merged commit 79b0faa into main Apr 29, 2026
4 checks passed
briansrls added a commit that referenced this pull request Apr 29, 2026
* docs(briefs): author R3 PB BinShim retirement planning brief

Per dispatch on inbox #1149 (PB-owned R3 planning slice for the
"BinShim instances + emit pattern + retirement dispatch" lane visible
in r2-pure-bootstrap-manager.md after #1176/#1186 consumption).

Authors docs/briefs/r3-pb-binshim-retirement-worker.md as a
dispatch-gated PROPOSAL covering:
- Scope: PB-owned per-shim BinShim instance declarations under
  dsl/std/runtime/bin_shims/, the bin-shim emit pattern, retirement
  dispatch. Substrate-owned BinShim carrier shape and §7.3
  CensusListConstant/filter disposition explicitly OUT of scope.
- First slice: regen_lens.rs (T-LensProducer-Retirement sub-gate iii).
- Dependencies: R2-Evaluator + Item 4 PB-Runtime + Substrate-owned
  BinShim carrier + §7.3 substrate prerequisite — all five required
  before dispatch.
- Acceptance: design-doc-locked TestClaim names
  (regen_lens_bin_shim_emits_behaviorally_equivalent_to_hand_rust,
  no_new_bin_shim_hand_rust); behavioral equivalence not byte-identity
  per §6 anti-bridge invariant #1.
- Non-goals: T-FixedPoint, lens_apply.rs/lens_testgen.rs, PB-Runtime
  implementation, BinShim carrier-shape edits.
- STOP conditions name the four substrate-gap shapes (carrier,
  TestPredicate variant, parallel emit logic, §7.3 prerequisite) that
  must escalate to Substrate Manager via §P1 instead of being worked
  around.

Updates r2-pure-bootstrap-manager.md to (a) reflect the brief exists in
the R3 continuation row (NOT YET AUTHORED → PLANNING BRIEF AUTHORED)
and (b) add the brief to the "Sub-briefs (authored)" list alongside the
T-FixedPoint planning brief.

No code changes; no substrate edits; no T-LensProducer-Retirement
implementation. PB Manager re-reads this brief at gate-clear to issue
worker dispatch.

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

* docs(briefs): fix INVARIANTS substrate-fact-introduction line ref (86 → 94)

Per cursor non-blocking note on PR #1190: the cross-ref pointed at
INVARIANTS.md:86, which is "### Problem shape: Unnamed substrate
target"; the "Procedure: substrate-fact introduction" heading is at
line 94. Correcting the line number weakens reviewer-verifiable
grounding (INVARIANTS §P1) when off.

Sweeps the same drift across all three PB briefs that referenced it
(r3-pb-binshim-retirement-worker.md, r2-pb-canonical-lens-bridge-
disposition.md, r3-pb-t-fixedpoint-worker.md) — same one-line
correction in each.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Apr 29, 2026
* docs(r2): closure-ledger — Substrate/PB rows + R1 path-a signal

- T-Substrate-Lens-Primitive: in-flight, #1186 (carrier); instance gates pending
- ValueBody list/sum: spot-check note (ROADMAP gap unchanged this pass)
- PB patch-lower-helpers: note #1014 + #1192 ratchet scope
- R3 bridge retirements: in-flight #1171 #1183 #1192; Verification gate explicit
- Incoming surface: path-(a) closure — no residuals absorbed; named R1C-B deferral

Cross-program drift sweep per PM detection + Director endorsement.

Made-with: Cursor

* docs(r2): ledger — ValueBody row reflects #920 list + unicode slice

Codex review: spot-check claimed no landed slice vs HEAD; #920 merged
ValueBody::List + std.unicode bootstrap. Gate/Last signal/Notes updated;
explicit ROADMAP Gap 3 caveat (stale prose). P1 live-state discipline.

Made-with: Cursor
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