Skip to content

feat(std): T-Numeric-Construction S9 Phase-1 — UInt = Nat - #1818

Merged
briansrls merged 26 commits into
mainfrom
session/proud-lynx-311
May 6, 2026
Merged

briansrls merged 26 commits into
mainfrom
session/proud-lynx-311

Conversation

@briansrls

@briansrls briansrls commented May 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Migrates the default UInt alias in dsl/std/integer.dag from the legacy fixed-width form type UInt = UInt64 to the abstract algebra carrier type UInt = Nat.

This is the S9 Phase-1 Step 2 companion to the already-landed Slice 3 alias-pivot type Int = AbelianGroup<GroupCompletion<Nat>> (PR #1466). Both default aliases now sit on the construction-chain layer-3 algebra carriers; the fixed-width storage rows (Int8..Int128, UInt8..UInt128) remain on OrderedRing<Word*> / Semiring<Word*> per the existing legacy-rows policy.

Modeling

Per the design-doc authority UInt IS Nat, the faithful pivot is the direct alias. Nat is already CommutativeSemiring<Magnitude> (additive monoid + multiplicative monoid + distribution + commutativity on both); that is the unsigned-integer algebra surface. No new operations or carrier introductions are needed.

Why not CommutativeMonoid<Nat> (or Monoid<Nat>). A prior pivot of this PR shipped type UInt = CommutativeMonoid<Nat>. Codex review (acf05e91) and Substrate Mgr inline review at dsl/std/integer.dag:102 flagged it as a P2 facts-flow-forward violation: wrapping a CommutativeSemiring carrier in CommutativeMonoid<…> projects out the multiplicative monoid + identity 1, dropping substrate facts already established at the Nat layer. The substrate cannot structurally name "the additive monoid projection of Nat" without losing Nat's other monoid. Reviewer's prescription: keep UInt = Nat for this slice, or introduce a named additive-monoid projection with an explicit trigger/consumer for restoring the full unsigned semiring surface — the former is structurally cheaper and aligns with the existing UInt IS Nat design-doc note. This PR takes that path.

Asymmetry with Int is structural. Int requires additive inverses Nat lacks, so GroupCompletion<Nat> is necessary to introduce them honestly (per Brian-directive paydown at b900e6e4f rejecting the unfaithful AbelianGroup<Nat> shorthand). UInt requires no new operations beyond what Nat already carries, so no new carrier is needed — the alias is the algebra.

S9 brief receipt

Per parent dispatch at gunbc#1739 (issuecomment-4385457307 / reframed brief at commit 617858b36):

  • (a) Option B already landed. Int = AbelianGroup<GroupCompletion<Nat>> shipped at feat(std): T-Numeric-Construction Slice 3 — Int = AbelianGroup<GroupCompletion<Nat>> #1466; the Slice 3 audit at docs/audit/t-numeric-construction-group-completion-6q.md Q6 single-authority resolution rejected the compact form type Int = GroupCompletion<Nat>. This PR does not touch Int.

  • (b) UInt migration consistent with that decision. type UInt = Nat direct alias preserves the full CommutativeSemiring<Magnitude> surface already established at the Nat layer (P2 facts-flow-forward). The brief's Monoid<Nat> / CommutativeMonoid<Nat> shorthand was a structurally lossy projection; this PR ships the faithful direct-alias form per Codex / Substrate Mgr review.

  • (c) Concrete emission entries deferred pending S3 Compose<Algebra, MachineConstraint> parametric carrier landing (valiant-ant-72 / gunbc#1765). Per S9 brief STOP-AND-ESCALATE bullet 1 + Q-MachineConstraint-Carrier sub-decision 2 (RATIFIED at gunbc#828 issuecomment-4385530115), emission entries are documented as parametric Compose<...> instantiations rather than AlgebraMachineProduct table rows. Forward-looking shape, post-S3 landing:

    Int<32>  ≡ Compose<AbelianGroup, MachineWidth<32>>      // → Rust i32
    Int<64>  ≡ Compose<AbelianGroup, MachineWidth<64>>      // → Rust i64
    Int<128> ≡ Compose<AbelianGroup, MachineWidth<128>>     // → Rust i128
    UInt<32> ≡ Compose<CommutativeSemiring, MachineWidth<32>> // → Rust u32
    UInt<64> ≡ Compose<CommutativeSemiring, MachineWidth<64>> // → Rust u64
    

    The landed Int = AbelianGroup<GroupCompletion<Nat>> shape (PR feat(std): T-Numeric-Construction Slice 3 — Int = AbelianGroup<GroupCompletion<Nat>> #1466) satisfies sub-decision 3: Int<64> reads identically as Compose<AbelianGroup, MachineWidth<64>> under either algebra-side option. Same applies for the UInt migration in this PR.

  • (d) Phase-2 Float migration deferred pending S8 ApproximateField<F> + Real carrier landing (quiet-boar-160 / gunbc#1762). This PR is Phase-1 only.

Practice 4 classification

🟢 PRIMITIVE per docs/modeling-discipline.md#4-coproduct-dissolution. The "What to check" rule from that section: "a primitive carrier sits at the foot of a construction chain or is a structural composition of already-landed primitives; it does not introduce a new sum-type variant or a hand-modeled mirror of a compiler-internal type." The migration is a direct alias to the already-landed Nat carrier (dsl/std/nat.dag); no new sum-type variants, no compiler-internal mirror, no projection that drops substrate facts.

5-question authority audit (per brief-authoring-checklist.md)

  1. Substrate exists? Yes. Nat lives at dsl/std/nat.dag as type Nat = CommutativeSemiring<Magnitude>, which already carries the full unsigned-integer algebra surface (additive monoid + multiplicative monoid + distribution + commutativity on both). No new substrate is introduced here — the pivot is a direct alias.
  2. Existing brief? Yes — S9 worker brief (docs/briefs/r3-substrate-s9-t-numeric-construction-worker.md at quick-crab-830 commit 617858b36, reframed Phase-1 step 2). Companion to S3 (MachineConstraint<C> — gunbc#1765) and S8 (ApproximateField<F> — gunbc#1762); this PR neither pre-empts nor blocks them.
  3. Design-doc match? Yes. docs/design-numeric-construction.md §3 construction-chain layer 3 names Magnitude → Nat → Int → Rational → Real; the authority chain at dsl/std/integer.dag:5-15 cites this design doc + the Group-Completion audit. The existing comment header already names UInt IS Nat per the design doc; this PR makes that algebraically faithful (additive monoid structure over Nat, not a width-aliased UInt64).
  4. Citations live? All citations in this PR body and the updated dsl/std/integer.dag doc-comment use section anchors (dsl/std/algebra.dag:118 is the type definition, not a bare :NNN reference outside its file) or rule-text quotes (brief-authoring-checklist.md Practice 4 quote above). No bare cross-doc :NNN shorthand.
  5. Carrier dissolves the bridge? Yes — pre-PR, UInt = UInt64 carrier-modeled the abstract unsigned-integer algebra as a width-specific storage row, conflating the algebra-witness layer with the storage layer. Post-PR, the abstract algebra (Nat (direct alias)) and the storage rows (UInt8..UInt128 = Semiring<Word*>) are cleanly separated; the cascade slice §6 will migrate downstream consumers off Semiring<Word*> for the abstract UInt algebra path, mirroring the Int cascade.

Files

  • dsl/std/integer.dag — rewrites the UInt default-alias doc comment; pivots type UInt = UInt64 → type UInt = Nat (direct alias; no new std.algebra imports needed).
  • src/v3/compiler/src/bootstrap_generated.rs, bootstrap_generated_without_parse_surface.rs, bootstrap_std_generated.rs — auto-regenerated via cargo run -p v3-compiler --bin regen_bootstrap --features bootstrap-regen-fresh.

Ratchets

  • cargo test --workspace --exclude v2-compiler-tests — 3 pre-existing failures in v2-compiler --lib (gist_compile_all_modules, gist_resolve_all_modules, self_resolve_all_modules) reproduce on clean main; verified unrelated to this change (failures cite std.credentials / generated.method_template_projection import-resolution issues, not numeric carriers). 18 of 21 v2-compiler lib tests pass; remainder of workspace green.
  • cargo test -p v2-compiler-tests v2_strict_compile_diagnostic_count -- --ignored — green; strict-compile diagnostic ratchet at 0.
  • cargo clippy --all-targets -- -D warnings — clean.
  • cargo fmt --all --check — clean.

Out of scope (per dispatch)

  • Phase-1 Step 3 — concrete emission entries (parametric Compose<Algebra, MachineConstraint> instantiations per Q-MachineConstraint-Carrier sub-decision 2; e.g., UInt<32> ≡ Compose<CommutativeSemiring, MachineWidth<32>> → Rust u32) blocked on S3.
  • Phase-2 — Float migration (S8-owned).
  • Phase-3 — Int-inherited refinements; 6 of 10 are Refined<Base, predicate>-shaped (blocked on Refinement substrate availability), 4 of 10 are dimensional/unit-of-measure (blocked on Unit/Quantity carrier — valiant-ibex-312 / gunbc#1761).
  • Phase-4 — Slice 2 Nat-alignment migration (sequenced last with PB Mgr T-V2-Retirement coordination).

Test plan

  • cargo fmt --all --check
  • cargo clippy --all-targets -- -D warnings
  • cargo test --workspace --exclude v2-compiler-tests (3 pre-existing unrelated failures)
  • cargo test -p v2-compiler-tests v2_strict_compile_diagnostic_count -- --ignored
  • Bootstrap snapshots regenerated and committed

🤖 Generated with Claude Code

briansrls and others added 20 commits May 5, 2026 03:25
The :425 Slice A anchor swap (\§P1` → `#p1-modeling-faithfulness`) on
src/v3/std/substrate.dag:83 shifted SourceSpan byte offsets for every
node parsed below that line, drifting bootstrap_generated.rs.

Regenerated via `cargo run -p v3-compiler --features bootstrap-regen-fresh
--bin regen_bootstrap`. No semantic change — pure span-offset refresh.

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

Cursor review on a402dca flagged residual `\`§P5\` (dispatch-discipline)`
shorthand inside the same sentence as a P2 anchor. Slice A's mechanical
sweep matched only `INVARIANTS.md §P5` prefixed forms; the bare
shorthand survived. Swap to `INVARIANTS.md#p5-progress-is-dissolution`
matches adjacent P2 form.

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

The :425 Slice A anchor swap shifted byte offsets in src/v3/std/substrate.dag,
drifting SG-2 parse snapshot hashes (same root cause as the bootstrap_generated
regen in a402dca). Regenerated via:

  cargo test -p v3-compiler --test integration -- --ignored \
    refresh_handwritten_parse_snapshot_manifest

Verified: handwritten_parse_snapshot_matches_manifest passes locally.
Pure offset/hash refresh — no semantic change.

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

Codex review on 9e67e1f noted the Markdown label was swapped to the
#p5-progress-is-dissolution anchor but the URL still pointed at the
INVARIANTS.md root. Aligned URL to match label.

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

Migrates the default `UInt` alias from the legacy fixed-width
`UInt = UInt64` to the abstract algebra carrier
`UInt = CommutativeMonoid<Nat>`, consistent with the landed
Slice 3 form `Int = AbelianGroup<GroupCompletion<Nat>>` (PR #1466,
docs/audit/t-numeric-construction-group-completion-6q.md Q6
single-authority resolution).

Per S9 worker brief (R3 design schedule §1 S9, ratified 2026-05-06):
Nat plays as the commutative-monoid carrier under addition (closure /
associativity / identity 0 / commutativity; no inverses, since Nat
lacks additive inverses by construction). UInt as `CommutativeMonoid<Nat>`
is the additive structure on that carrier — the honest unsigned-integer
algebra without inverses.

Fixed-width rows `UInt8..UInt128` remain on `Semiring<Word*>` per
existing legacy-rows policy in `dsl/std/integer.dag` (only the default
alias migrates; storage rows stay shape-conflated until v3 supports
trait/witness syntax separation).

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: acf05e91 · Trigger: schedule
  • Comparison: origin/main @ ff9e6b59 ... review/pr-1818-acf05e91 @ acf05e91
  • Thinking: 23s wall

Verdict: APPROVE — clean, narrowly scoped Phase-1 alias pivot.

The substantive change is one line in dsl/std/integer.dag:101: UInt = UInt64 → UInt = CommutativeMonoid<Nat>, with surrounding doc-comment updated to explain the algebraic shape (additive monoid over Nat; no inverses) and to call out that fixed-width UInt8..UInt128 rows stay on Semiring<Word*> and that concrete emission gates on S3 MachineConstraint<C>. This is the symmetric companion to the already-landed Int = AbelianGroup<GroupCompletion<Nat>>, so it aligns with the construction-chain thesis (one carrier Nat, abstract algebras layered on top) rather than perpetuating the legacy UInt64 aliasing that hard-codes a width into the abstract type.

The three bootstrap_*_generated.rs files are mechanical regenerations: span byte offsets shift consistently with the docstring growth, and UInt's TypeConnective::Instantiation is rewritten from template: DeclarationId(79) /* UInt64 */, arguments: vec![] to template: DeclarationId(21) /* CommutativeMonoid */, arguments: vec![{parameter: 22, value: 70 /* Nat */}] — exactly what re-bootstrapping the new source should produce. No drift between the three fixtures.

No invariant violations observed. Substrate change is at the DSL layer and the generated rust faithfully mirrors it. Single-authority preserved (source = integer.dag; bootstrap files are generated mirrors).

@briansrls

Copy link
Copy Markdown
Contributor Author

Substrate Mgr review: clean execution.

The 1-line type swap + the surrounding doc comment are the load-bearing edit. The doc comment is unusually well-modeled — explicitly names that Nat lacks additive inverses (so a Group-shaped alias would be unfaithful), names that CommutativeMonoid preserves the additive-commutativity axiom over Nat, and ties the choice to the landed Int = AbelianGroup<GroupCompletion<Nat>> Option-B form. That's exactly the P1 substrate-fact-introduction receipt the brief asks for; the in-source comment is the load-bearing artifact (per docs/modeling-discipline.md#4-coproduct-dissolution "What to check").

Practice 4 🟢 PRIMITIVE inline + S3/S8 deferral receipts in PR body match dispatch shape. UInt8..UInt128 correctly stay on Semiring<Word*> per the §6-cascade policy; only the default alias migrates.

3 pre-existing v2-compiler --lib failures verified unrelated (import-resolution issues for std.credentials / generated.method_template_projection, not numeric carriers). Bootstrap snapshot regen is mechanical span updates downstream of the integer.dag edit.

No structural concerns. APPROVE from Substrate Mgr; awaits Director merge cadence.

— sent from quick-crab-830

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

BLOCKING (1)

Root Cause

  • dsl/std/integer.dag UInt is selecting an additive projection that the substrate cannot name structurally from Nat's two monoids → keep UInt = Nat for this slice or introduce a named additive-monoid projection with an explicit trigger/consumer for restoring the full unsigned semiring surface.

⚠️ The alias pivot needs to preserve the construction-chain facts or make the additive-only bridge structurally explicit before landing.

Comment thread dsl/std/integer.dag Outdated
// S3 `MachineConstraint<C>` landing per S9 brief STOP-AND-ESCALATE.
type Int = AbelianGroup<GroupCompletion<Nat>>
type UInt = UInt64
type UInt = CommutativeMonoid<Nat>

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: UInt = CommutativeMonoid<Nat> projects Nat down to an unnamed single-operation monoid, so it loses the CommutativeSemiring multiplication/one facts that make Nat the active unsigned-integer authority, violating P2 facts-flow-forward and M9 algebraic grounding.

@briansrls briansrls mentioned this pull request May 6, 2026
Codex review at PR #1818 / Substrate Mgr inline review at
dsl/std/integer.dag:102 surface a P2 facts-flow-forward violation
in the prior `type UInt = CommutativeMonoid<Nat>` pivot: wrapping
Nat (already `CommutativeSemiring<Magnitude>`) in `CommutativeMonoid<Nat>`
projects out the multiplicative monoid + identity 1, dropping
substrate facts already established at the Nat layer. The substrate
cannot structurally name "the additive monoid projection of Nat"
without losing Nat's other monoid.

Pivot to the design-doc-named direct alias: `type UInt = Nat`. Per
the existing comment header in this file, the design doc states
`UInt IS Nat`; Nat already carries the full unsigned-integer algebra
surface (additive monoid + multiplicative monoid + distribution +
commutativity on both). No new operations are needed — the alias IS
the algebra.

Asymmetry with `Int`: `Int` requires additive inverses Nat lacks, so
`GroupCompletion<Nat>` is the honest carrier introduction. `UInt`
requires no new operations, so no carrier introduction is needed.

Updates the PR's deferred Phase-1 Step 3 receipt to the
`Compose<CommutativeSemiring, MachineWidth<N>>` parametric form
(post-S3 landing).

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

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 842bf658 · Trigger: schedule
  • Comparison: origin/main @ 1515108a ... review/pr-1818-842bf658 @ 842bf658
  • Thinking: 18s wall

Findings: None. The substrate change type UInt = Nat in dsl/std/integer.dag matches the stated design authority (“UInt IS Nat”), avoids a weaker wrapper that would drop multiplicative facts (consistent with P2 / facts flow forward in INVARIANTS.md and practice 3 in docs/modeling-discipline.md), and keeps fixed-width UInt8…UInt128 on Semiring<Word*> as documented. Bootstrap snapshots correctly retarget UInt’s instantiation to DeclarationId(70) (Nat), as in 6088:6092:src/v3/compiler/src/bootstrap_generated.rs.

Verdict: APPROVE — Small, coherent substrate pivot plus aligned bootstrap regen; no concrete rubric violations visible in the diff.

Mechanical refresh after PR #1818 fix commit. integer.dag debug-bytes
shifted 12659→12662, fnv1a64 1eef7086b17908de→104a413082264303 with
the type swap from `UInt = CommutativeMonoid<Nat>` to `UInt = Nat`
plus surrounding doc-comment rewrite. Generated by:

  cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignored

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: 98e7442b · Trigger: schedule
  • Comparison: origin/main @ da77396b ... review/pr-1818-98e7442b @ 98e7442b
  • Thinking: 120s wall

Verdict: APPROVE

Diff is narrowly scoped and clean. dsl/std/integer.dag:111 moves UInt to Nat in a way that is consistent with the modeling rubric’s single-authority / facts-flow-forward guidance, and the companion bootstrap snapshots and parse manifest were refreshed accordingly. I did not find a concrete violation in the diff against INVARIANTS.md, docs/modeling-discipline.md, CODING.md, or TESTING.md.

@briansrls
briansrls merged commit 9ae6308 into main May 6, 2026
4 checks passed
briansrls added a commit that referenced this pull request May 6, 2026
…s unification (post-#1817) (#1821)

* docs(r3): Q-MachineConstraint-Carrier RATIFIED — universal substrate + 5 PM defaults (Brian directive)

Brian directive 2026-05-06: "universal substrate, ratify defaults".

Resolves Q-MachineConstraint-Carrier (was OPEN per r3-program-plan.md §10.3)
with 6 sub-decisions ratified:

1. Axes in R3 scope: MachineWidth<bits> only. RegisterClass<R> / EndianMode<E>
   / alignment / signedness-as-axis deferred post-R3.
2. Interaction substrate shape: parametric Compose<Algebra, MachineConstraint>
   type-level construction. Closed-enumeration lookup-maps rejected (bridges).
3. Type-level spelling: Int<64> = Compose<AbelianGroup, MachineWidth<64>>
   parametrically. Equivalent under both algebra-side options per PR #1815.
4. Approximate-algebra layering: algebra approx + machine approx are
   independent composing axes. Real<64> = Compose<ApproximateField<Rational>,
   MachineWidth<64>> carries both layers per S8 discipline.
5. Class 1 demonstration breadth: ≥3 algebra×constraint pairs is minimum,
   not target. Broader coverage follows automatically once parser handles
   generic interaction syntax.
6. Target-specificity: MachineConstraint<C> is UNIVERSAL substrate (Brian
   directive). Every target carries machine-constraint facts as substrate;
   targets lacking native machine-width semantics (Python int/float) handle
   omission at Grounding-level discharge — target-conditioned lowering,
   NOT target-conditioned substrate.

Substrate Mgr S3 dispatch unblocked on machine-constraint side; independent
of T-Numeric-Construction algebra-side Option A vs B selection per PR #1815
(interaction semantics carries through under either).

Updates:
- docs/r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row: OPEN →
  RATIFIED 2026-05-06 with all 6 sub-decisions named.
- docs/r3-design-schedule-2026-05-06.md §S3: drops "open scope" framing;
  explicit ratified-scope block citing the 6 decisions; S3 dispatch noted
  as unblocked on machine-constraint side.

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

* docs(r3): Q-MachineConstraint sub-decisions 1/2/5/6 elaborated per Brian clarifying inline

Brian clarifying directive 2026-05-06 on the 6 sub-decisions:

1. AXES — accept MachineWidth<bits> only; add separation-of-facts/concerns
   discipline note: algebra/machine-constraint/target-lowering are distinct
   axes. Integer modeling is the canonical exercise.

2. INTERACTION SHAPE (revised from "parametric Compose<...>" framing):
   "these models interact a la rest apis interacting — scalable / no dual
   representations (.dag generated)". The interaction substrate is
   .dag-DECLARED + .dag-GENERATED, never hand-coded. Hard constraint: no
   dual representations — any Rust counterpart must be generated, never
   hand-maintained (feedback_isomorphism_or_generation_for_mirrors +
   feedback_no_generated_code_on_disk).

3. SPELLING — Compose<AbelianGroup, MachineWidth<64>> ratified ("ok fine").
   Note added: the interaction substrate elaborating Compose<...> is
   .dag-generated per sub-decision 2.

4. LAYERING — independent composing axes ratified ("ok fine"). Real<64> =
   Compose<ApproximateField<Rational>, MachineWidth<64>> stays.

5. DEMONSTRATION BREADTH — strengthened: "3 is not a target, we shouldn't
   be 'targeting' modeling, we are just doing our best job to faithfully
   represent the concepts". Closure criterion is "concept is faithfully
   modeled", not "≥3 pairs land". 3-pair demonstration is minimum
   existence proof, not closure target.

6. TARGET-SPECIFICITY — universal substrate stays. Python lowering uses
   faithful target-available primitives (numpy.uint8 / ctypes.c_uint8 /
   explicit literal-bits), NOT omission. "if python lacks — we would have
   to actually represent the struct using something that python faithfully
   provides — i.e. either literal bits or otherwise". Faithful
   representation > target-conditioned omission.

Updates docs/r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row +
docs/r3-design-schedule-2026-05-06.md §S3 ratified-scope block to reflect
clarifying inline.

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

* docs(r3): closure predicate aligned to faithful-modeling criterion (openai-pro BLOCKING fix)

openai-pro REQUEST_CHANGES at sha 8f5483b on PR #1817 caught a real
internal inconsistency: ratification text said "Faithful representation of
the concept is the closure criterion; pair-counting is not" but the actual
closure predicates across r3-structure.md / r3-program-plan.md /
r3-design-schedule-2026-05-06.md still phrased Pass as "≥3 pairs emit to
target primitives". This violated single-authority + facts-flow-forward.

Fix: align all 5 Pass-condition / closure-predicate locations to the
faithful-modeling criterion ratified in Q-MachineConstraint sub-decision 5:

- docs/r3-program-plan.md:74 (gate #60 Pass condition in §1.4 ledger):
  "Gate Pass = concept faithfully modeled (per Brian directive 2026-05-06)
  — once substrate carries algebra + machine-constraint as independent
  composing axes with .dag-generated interaction substrate, all valid pairs
  work by construction. Minimum existence-proof evidence: 3 pairs lower
  without v2-fallback (evidence, not target)."
- docs/r3-program-plan.md:257 (§1.8 canonical ledger row): "concept
  faithfully modeled... min existence-proof = Int<64>/Real<64>/Nat<8>
  lower without v2-fallback (evidence, not target)"
- docs/r3-program-plan.md:430 (§1.4 Class 1 representative gap-test):
  "Representative gap-test (minimum existence-proof, NOT target) — substrate
  faithfully modeling algebra + machine-constraint separation IS the
  closure criterion; the 3 pairs below are the minimum existence-proof"
- docs/r3-structure.md:173 (canonical gate description): "Pass condition:
  concept faithfully modeled... Minimum existence-proof evidence (not
  closure target): 3 pairs lower without v2-fallback"
- docs/r3-design-schedule-2026-05-06.md:60 (S3 closure predicate cite):
  "Pass = concept faithfully modeled... 3-pair set is minimum
  existence-proof evidence, NOT the closure target"

Sub-decision 5 explanatory text retains "≥3 pairs land" as anti-reference
to the prior phrasing for traceability of the change.

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

* docs(r3): apply 2 claude APPROVE-with-observations precisions on Q-MachineConstraint

Claude review at sha e1ea7cf (post-BLOCKING-fix) APPROVE with two
exploratory observations. Both worth applying:

1. Sub-decision 3: clarify Compose<...> elaboration vs interaction substrate.
   Sub-decision 2 says the *interaction substrate* (composition/projection/
   coercion machinery) is .dag-generated, not the Compose<...> type itself.
   Avoid an S3 worker reading "the Compose type is generated."

2. Closure predicate: explicit note that §1.4 conjunctive-closure rule still
   binds. Sub-decision 5 narrows what counts as Pass (concept faithfully
   modeled, not pair-counting), but does NOT relax the conjunctive form
   (representative gap-test executes AND class-bridge enumeration = 0).

Both are tightening clarifications; no disposition change.

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

* docs(r3): codex BLOCKING fix — Compose<concept, MachineWidth<...>> not Compose<witness, ...>

Codex BLOCKING at sha 8099ace on PR #1817 caught a real type-level error:
Compose<AbelianGroup, MachineWidth<64>> composes the *algebra witness shape*
rather than the integer carrier. Per dsl/std/algebra.dag:148-150:

  "T = GroupCompletion<M> is the carrier; AbelianGroup<T> carries
   op/identity/inverse over that carrier"

AbelianGroup<T> is a witness shape generic over carrier T, not a carrier
constructor. The bare AbelianGroup (without args) is just the kind/
constructor — putting it in Compose<...> slot-1 doesn't yield an integer
carrier.

Correct form: first slot of Compose<...> holds the **algebraic concept**
(the fully-applied carrier+witness composite that IS the Int / UInt /
Real / Nat type), second slot holds the machine-constraint:

- Int<64>  = Compose<Int, MachineWidth<64>>      (Int = AbelianGroup<GroupCompletion<Nat>> per #1466)
- UInt<64> = Compose<UInt, MachineWidth<64>>     (UInt = CommutativeMonoid<Nat> per #1818)
- Real<64> = Compose<Real, MachineWidth<64>>     (Real = ApproximateField<Rational>)
- Nat<8>   = Compose<Nat, MachineWidth<8>>

Updates sub-decision 3 (type-level spelling) + sub-decision 4 (approximate-
algebra layering) in both r3-design-schedule-2026-05-06.md §S3 and
r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row. Wrong-form
references retained as anti-references only ("prior phrasing was wrong";
critical correction note + dsl/std/algebra.dag citation).

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

* docs(r3): flag Python width-lowering divergence with design-numeric-construction.md (codex non-blocking)

Codex non-blocking improvement at sha 83be121: sub-decision 6's Python
faithful-lowering directive (numpy.uint8 / ctypes.c_uint8 / literal-bits)
competes with the existing default at docs/design-numeric-construction.md:
194-198 which lowers Nat<N> for any N to plain Python int with size-hint
metadata (width-omission default).

Brian's directive ("represent the struct using something that python
faithfully provides") shifts the standing default to faithful concrete
representation, but the existing design doc isn't updated yet.

Fix: explicit "Tracked divergence" callout in sub-decision 6 (both r3-design-
schedule.md §S3 and r3-program-plan.md §10.3 row). Routes reconciliation
to T-Numeric-Construction / Grounding lane paydown — update
design-numeric-construction.md Python row when the Grounding-side per-target
lowering authority lands. Not bundled in this PR per scope; the divergence
is tracked-not-silent.

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

* docs(r3): sub-decision 6 unified with cost lens — universal faithful representation, cost as discriminator (Brian directive)

Brian directive 2026-05-06 elaborated 2x:
"basically this would be represented by cost right - in all cases we
should be able to represent the structure with literal bits/objects or
whatever - the cost would be enormous - in those cases, we would look for
alternatives like better modeling/libraries/int & 0xFF"

This unifies sub-decision 6 with T-CostLens-Composition: faithful
representation is universal (every target CAN represent every concept,
literal-bits is the always-available floor); the cost lens is the
discriminator that orders the alternatives.

Reframing:

- Universality of faithful representation: every target carries every
  concept faithfully (literal-bits as the floor)
- Cost lens (T-CostLens-Composition gates cost_lens_reads_target_realization
  + coercion_cost_equals_complexity_by_construction) reads per-primitive
  realization cost from target language spec
- Grounding selects the lowest-cost faithful representation by reading
  cost-lens output
- For Python u8: cost-tier 1 = numpy.uint8 (low cost), cost-tier 2 =
  ctypes.c_uint8 (medium), cost-tier 3 = int & 0xFF discipline (universal
  floor, high cost). All three faithful; cost lens orders.

Implication: existing docs/design-numeric-construction.md:194-198 Python
row (Nat<N> → int with size-hint metadata) is NON-FAITHFUL — drops width
structure to opaque metadata, cost lens cannot read what isn't there.
Reframe routes to T-Numeric-Construction / Grounding lane paydown:
replace with cost-tiered faithful-representation table.

This is the structurally-elegant unification: faithful-representation
universality + cost-lens-as-discriminator. Sub-decision 6 IS an instance
of "coercion cost = complexity by construction" thesis (T-CostLens-Composition
load-bearing claim).

Updates both r3-design-schedule-2026-05-06.md §S3 and r3-program-plan.md
§10.3 Q-MachineConstraint-Carrier row sub-decision 6.

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 May 6, 2026
…-06 (#1824)

* docs(r3): Q-MachineConstraint-Carrier RATIFIED — universal substrate + 5 PM defaults (Brian directive)

Brian directive 2026-05-06: "universal substrate, ratify defaults".

Resolves Q-MachineConstraint-Carrier (was OPEN per r3-program-plan.md §10.3)
with 6 sub-decisions ratified:

1. Axes in R3 scope: MachineWidth<bits> only. RegisterClass<R> / EndianMode<E>
   / alignment / signedness-as-axis deferred post-R3.
2. Interaction substrate shape: parametric Compose<Algebra, MachineConstraint>
   type-level construction. Closed-enumeration lookup-maps rejected (bridges).
3. Type-level spelling: Int<64> = Compose<AbelianGroup, MachineWidth<64>>
   parametrically. Equivalent under both algebra-side options per PR #1815.
4. Approximate-algebra layering: algebra approx + machine approx are
   independent composing axes. Real<64> = Compose<ApproximateField<Rational>,
   MachineWidth<64>> carries both layers per S8 discipline.
5. Class 1 demonstration breadth: ≥3 algebra×constraint pairs is minimum,
   not target. Broader coverage follows automatically once parser handles
   generic interaction syntax.
6. Target-specificity: MachineConstraint<C> is UNIVERSAL substrate (Brian
   directive). Every target carries machine-constraint facts as substrate;
   targets lacking native machine-width semantics (Python int/float) handle
   omission at Grounding-level discharge — target-conditioned lowering,
   NOT target-conditioned substrate.

Substrate Mgr S3 dispatch unblocked on machine-constraint side; independent
of T-Numeric-Construction algebra-side Option A vs B selection per PR #1815
(interaction semantics carries through under either).

Updates:
- docs/r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row: OPEN →
  RATIFIED 2026-05-06 with all 6 sub-decisions named.
- docs/r3-design-schedule-2026-05-06.md §S3: drops "open scope" framing;
  explicit ratified-scope block citing the 6 decisions; S3 dispatch noted
  as unblocked on machine-constraint side.

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

* docs(r3): Q-MachineConstraint sub-decisions 1/2/5/6 elaborated per Brian clarifying inline

Brian clarifying directive 2026-05-06 on the 6 sub-decisions:

1. AXES — accept MachineWidth<bits> only; add separation-of-facts/concerns
   discipline note: algebra/machine-constraint/target-lowering are distinct
   axes. Integer modeling is the canonical exercise.

2. INTERACTION SHAPE (revised from "parametric Compose<...>" framing):
   "these models interact a la rest apis interacting — scalable / no dual
   representations (.dag generated)". The interaction substrate is
   .dag-DECLARED + .dag-GENERATED, never hand-coded. Hard constraint: no
   dual representations — any Rust counterpart must be generated, never
   hand-maintained (feedback_isomorphism_or_generation_for_mirrors +
   feedback_no_generated_code_on_disk).

3. SPELLING — Compose<AbelianGroup, MachineWidth<64>> ratified ("ok fine").
   Note added: the interaction substrate elaborating Compose<...> is
   .dag-generated per sub-decision 2.

4. LAYERING — independent composing axes ratified ("ok fine"). Real<64> =
   Compose<ApproximateField<Rational>, MachineWidth<64>> stays.

5. DEMONSTRATION BREADTH — strengthened: "3 is not a target, we shouldn't
   be 'targeting' modeling, we are just doing our best job to faithfully
   represent the concepts". Closure criterion is "concept is faithfully
   modeled", not "≥3 pairs land". 3-pair demonstration is minimum
   existence proof, not closure target.

6. TARGET-SPECIFICITY — universal substrate stays. Python lowering uses
   faithful target-available primitives (numpy.uint8 / ctypes.c_uint8 /
   explicit literal-bits), NOT omission. "if python lacks — we would have
   to actually represent the struct using something that python faithfully
   provides — i.e. either literal bits or otherwise". Faithful
   representation > target-conditioned omission.

Updates docs/r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row +
docs/r3-design-schedule-2026-05-06.md §S3 ratified-scope block to reflect
clarifying inline.

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

* docs(r3): closure predicate aligned to faithful-modeling criterion (openai-pro BLOCKING fix)

openai-pro REQUEST_CHANGES at sha 8f5483b on PR #1817 caught a real
internal inconsistency: ratification text said "Faithful representation of
the concept is the closure criterion; pair-counting is not" but the actual
closure predicates across r3-structure.md / r3-program-plan.md /
r3-design-schedule-2026-05-06.md still phrased Pass as "≥3 pairs emit to
target primitives". This violated single-authority + facts-flow-forward.

Fix: align all 5 Pass-condition / closure-predicate locations to the
faithful-modeling criterion ratified in Q-MachineConstraint sub-decision 5:

- docs/r3-program-plan.md:74 (gate #60 Pass condition in §1.4 ledger):
  "Gate Pass = concept faithfully modeled (per Brian directive 2026-05-06)
  — once substrate carries algebra + machine-constraint as independent
  composing axes with .dag-generated interaction substrate, all valid pairs
  work by construction. Minimum existence-proof evidence: 3 pairs lower
  without v2-fallback (evidence, not target)."
- docs/r3-program-plan.md:257 (§1.8 canonical ledger row): "concept
  faithfully modeled... min existence-proof = Int<64>/Real<64>/Nat<8>
  lower without v2-fallback (evidence, not target)"
- docs/r3-program-plan.md:430 (§1.4 Class 1 representative gap-test):
  "Representative gap-test (minimum existence-proof, NOT target) — substrate
  faithfully modeling algebra + machine-constraint separation IS the
  closure criterion; the 3 pairs below are the minimum existence-proof"
- docs/r3-structure.md:173 (canonical gate description): "Pass condition:
  concept faithfully modeled... Minimum existence-proof evidence (not
  closure target): 3 pairs lower without v2-fallback"
- docs/r3-design-schedule-2026-05-06.md:60 (S3 closure predicate cite):
  "Pass = concept faithfully modeled... 3-pair set is minimum
  existence-proof evidence, NOT the closure target"

Sub-decision 5 explanatory text retains "≥3 pairs land" as anti-reference
to the prior phrasing for traceability of the change.

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

* docs(r3): apply 2 claude APPROVE-with-observations precisions on Q-MachineConstraint

Claude review at sha e1ea7cf (post-BLOCKING-fix) APPROVE with two
exploratory observations. Both worth applying:

1. Sub-decision 3: clarify Compose<...> elaboration vs interaction substrate.
   Sub-decision 2 says the *interaction substrate* (composition/projection/
   coercion machinery) is .dag-generated, not the Compose<...> type itself.
   Avoid an S3 worker reading "the Compose type is generated."

2. Closure predicate: explicit note that §1.4 conjunctive-closure rule still
   binds. Sub-decision 5 narrows what counts as Pass (concept faithfully
   modeled, not pair-counting), but does NOT relax the conjunctive form
   (representative gap-test executes AND class-bridge enumeration = 0).

Both are tightening clarifications; no disposition change.

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

* docs(r3): codex BLOCKING fix — Compose<concept, MachineWidth<...>> not Compose<witness, ...>

Codex BLOCKING at sha 8099ace on PR #1817 caught a real type-level error:
Compose<AbelianGroup, MachineWidth<64>> composes the *algebra witness shape*
rather than the integer carrier. Per dsl/std/algebra.dag:148-150:

  "T = GroupCompletion<M> is the carrier; AbelianGroup<T> carries
   op/identity/inverse over that carrier"

AbelianGroup<T> is a witness shape generic over carrier T, not a carrier
constructor. The bare AbelianGroup (without args) is just the kind/
constructor — putting it in Compose<...> slot-1 doesn't yield an integer
carrier.

Correct form: first slot of Compose<...> holds the **algebraic concept**
(the fully-applied carrier+witness composite that IS the Int / UInt /
Real / Nat type), second slot holds the machine-constraint:

- Int<64>  = Compose<Int, MachineWidth<64>>      (Int = AbelianGroup<GroupCompletion<Nat>> per #1466)
- UInt<64> = Compose<UInt, MachineWidth<64>>     (UInt = CommutativeMonoid<Nat> per #1818)
- Real<64> = Compose<Real, MachineWidth<64>>     (Real = ApproximateField<Rational>)
- Nat<8>   = Compose<Nat, MachineWidth<8>>

Updates sub-decision 3 (type-level spelling) + sub-decision 4 (approximate-
algebra layering) in both r3-design-schedule-2026-05-06.md §S3 and
r3-program-plan.md §10.3 Q-MachineConstraint-Carrier row. Wrong-form
references retained as anti-references only ("prior phrasing was wrong";
critical correction note + dsl/std/algebra.dag citation).

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

* docs(r3): flag Python width-lowering divergence with design-numeric-construction.md (codex non-blocking)

Codex non-blocking improvement at sha 83be121: sub-decision 6's Python
faithful-lowering directive (numpy.uint8 / ctypes.c_uint8 / literal-bits)
competes with the existing default at docs/design-numeric-construction.md:
194-198 which lowers Nat<N> for any N to plain Python int with size-hint
metadata (width-omission default).

Brian's directive ("represent the struct using something that python
faithfully provides") shifts the standing default to faithful concrete
representation, but the existing design doc isn't updated yet.

Fix: explicit "Tracked divergence" callout in sub-decision 6 (both r3-design-
schedule.md §S3 and r3-program-plan.md §10.3 row). Routes reconciliation
to T-Numeric-Construction / Grounding lane paydown — update
design-numeric-construction.md Python row when the Grounding-side per-target
lowering authority lands. Not bundled in this PR per scope; the divergence
is tracked-not-silent.

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

* docs(r3): sub-decision 6 unified with cost lens — universal faithful representation, cost as discriminator (Brian directive)

Brian directive 2026-05-06 elaborated 2x:
"basically this would be represented by cost right - in all cases we
should be able to represent the structure with literal bits/objects or
whatever - the cost would be enormous - in those cases, we would look for
alternatives like better modeling/libraries/int & 0xFF"

This unifies sub-decision 6 with T-CostLens-Composition: faithful
representation is universal (every target CAN represent every concept,
literal-bits is the always-available floor); the cost lens is the
discriminator that orders the alternatives.

Reframing:

- Universality of faithful representation: every target carries every
  concept faithfully (literal-bits as the floor)
- Cost lens (T-CostLens-Composition gates cost_lens_reads_target_realization
  + coercion_cost_equals_complexity_by_construction) reads per-primitive
  realization cost from target language spec
- Grounding selects the lowest-cost faithful representation by reading
  cost-lens output
- For Python u8: cost-tier 1 = numpy.uint8 (low cost), cost-tier 2 =
  ctypes.c_uint8 (medium), cost-tier 3 = int & 0xFF discipline (universal
  floor, high cost). All three faithful; cost lens orders.

Implication: existing docs/design-numeric-construction.md:194-198 Python
row (Nat<N> → int with size-hint metadata) is NON-FAITHFUL — drops width
structure to opaque metadata, cost lens cannot read what isn't there.
Reframe routes to T-Numeric-Construction / Grounding lane paydown:
replace with cost-tiered faithful-representation table.

This is the structurally-elegant unification: faithful-representation
universality + cost-lens-as-discriminator. Sub-decision 6 IS an instance
of "coercion cost = complexity by construction" thesis (T-CostLens-Composition
load-bearing claim).

Updates both r3-design-schedule-2026-05-06.md §S3 and r3-program-plan.md
§10.3 Q-MachineConstraint-Carrier row sub-decision 6.

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

* docs(r3): Q-PAFS Path A ACCEPTED — Brian Director countersignature 2026-05-06

Per Brian directive 2026-05-06: "approved path A countersign".

Resolves three bundled §10.3 questions to ACCEPTED:

- Q-PAFS: TC1 first slice = static representative via E6-G1.a (Path A);
  Path B (TC1 generic G1.b/X1.b) deferred; Path C (RustDagIsomorphism before
  TC1) deferred under Q-PAFS default.
- Q-Pattern-A-First-Slice-Subscope: G1.a static representative ratified;
  TC1-generic via X1.b S1/S3 + G1.b deferred-not-blocked.
- Q-EVAL-Lens-Fold-First-Slice: G1.a first-slice shape locked for Evaluator
  E3 sequencing.

Implementation dispatch unblocked simultaneously across two lanes (same
release step):

- Verification V1 — Pattern-A executable cluster, TC1 first slice
- Evaluator E3 — E6-G1.a static lens fold

Both Mgrs (cool-owl-579 #1740, merry-gull-128 #1743) author worker briefs
and dispatch in same release step. Substrate/evaluator carrier-shape
changes remain STOP+PING until routed implementation PRs land —
ACCEPTED closes the policy-layer scope fork (which slice first), not the
substrate routing.

Updates:
- docs/r3-program-plan.md §10.3: Q-PAFS / Q-Pattern-A-First-Slice-Subscope /
  Q-EVAL-Lens-Fold-First-Slice rows from PENDING DIRECTOR COUNTERSIGNATURE
  to ACCEPTED 2026-05-06 (Path A / G1.a).
- docs/r3-design-schedule-2026-05-06.md §V1 + §E3: dispatch trigger updated
  from "pending Director countersignature" to "DISPATCH UNBLOCKED 2026-05-06"
  with cross-references to the bundled gate.

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 May 6, 2026
…ed to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.
briansrls added a commit that referenced this pull request May 6, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cd): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cd):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b98):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b98): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a07; the review citation was against
the pre-fix sha 2072b98.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d924594: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f3.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd481 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd0 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f00

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a prior to
review; reviewer was on sha a462f00 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce041 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a5:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 6, 2026
…nt = Nat (#1840)

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* chore(v3): regen bootstrap snapshot for substrate.dag :83 anchor swap

The :425 Slice A anchor swap (\§P1` → `#p1-modeling-faithfulness`) on
src/v3/std/substrate.dag:83 shifted SourceSpan byte offsets for every
node parsed below that line, drifting bootstrap_generated.rs.

Regenerated via `cargo run -p v3-compiler --features bootstrap-regen-fresh
--bin regen_bootstrap`. No semantic change — pure span-offset refresh.

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

* fix(:425): retire trailing `§P5` shorthand on r2-manager-brief-authority-matrix.md:205

Cursor review on a402dca flagged residual `\`§P5\` (dispatch-discipline)`
shorthand inside the same sentence as a P2 anchor. Slice A's mechanical
sweep matched only `INVARIANTS.md §P5` prefixed forms; the bare
shorthand survived. Swap to `INVARIANTS.md#p5-progress-is-dissolution`
matches adjacent P2 form.

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

* test(v3): refresh parse_corpus_manifest after substrate.dag :83 anchor swap

The :425 Slice A anchor swap shifted byte offsets in src/v3/std/substrate.dag,
drifting SG-2 parse snapshot hashes (same root cause as the bootstrap_generated
regen in a402dca). Regenerated via:

  cargo test -p v3-compiler --test integration -- --ignored \
    refresh_handwritten_parse_snapshot_manifest

Verified: handwritten_parse_snapshot_matches_manifest passes locally.
Pure offset/hash refresh — no semantic change.

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

* ci: re-trigger v3 after t_demo_fixture transient flake

* fix(:425): align link URL with anchor label on r2-manager-brief-authority-matrix.md:222

Codex review on 9e67e1f noted the Markdown label was swapped to the
#p5-progress-is-dissolution anchor but the URL still pointed at the
INVARIANTS.md root. Aligned URL to match label.

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

* WIP: proud-lynx-311

* feat(std): T-Numeric-Construction S9 Phase-1 — UInt = CommutativeMonoid<Nat>

Migrates the default `UInt` alias from the legacy fixed-width
`UInt = UInt64` to the abstract algebra carrier
`UInt = CommutativeMonoid<Nat>`, consistent with the landed
Slice 3 form `Int = AbelianGroup<GroupCompletion<Nat>>` (PR #1466,
docs/audit/t-numeric-construction-group-completion-6q.md Q6
single-authority resolution).

Per S9 worker brief (R3 design schedule §1 S9, ratified 2026-05-06):
Nat plays as the commutative-monoid carrier under addition (closure /
associativity / identity 0 / commutativity; no inverses, since Nat
lacks additive inverses by construction). UInt as `CommutativeMonoid<Nat>`
is the additive structure on that carrier — the honest unsigned-integer
algebra without inverses.

Fixed-width rows `UInt8..UInt128` remain on `Semiring<Word*>` per
existing legacy-rows policy in `dsl/std/integer.dag` (only the default
alias migrates; storage rows stay shape-conflated until v3 supports
trait/witness syntax separation).

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

* fix(std): UInt = Nat (preserve CommutativeSemiring surface)

Codex review at PR #1818 / Substrate Mgr inline review at
dsl/std/integer.dag:102 surface a P2 facts-flow-forward violation
in the prior `type UInt = CommutativeMonoid<Nat>` pivot: wrapping
Nat (already `CommutativeSemiring<Magnitude>`) in `CommutativeMonoid<Nat>`
projects out the multiplicative monoid + identity 1, dropping
substrate facts already established at the Nat layer. The substrate
cannot structurally name "the additive monoid projection of Nat"
without losing Nat's other monoid.

Pivot to the design-doc-named direct alias: `type UInt = Nat`. Per
the existing comment header in this file, the design doc states
`UInt IS Nat`; Nat already carries the full unsigned-integer algebra
surface (additive monoid + multiplicative monoid + distribution +
commutativity on both). No new operations are needed — the alias IS
the algebra.

Asymmetry with `Int`: `Int` requires additive inverses Nat lacks, so
`GroupCompletion<Nat>` is the honest carrier introduction. `UInt`
requires no new operations, so no carrier introduction is needed.

Updates the PR's deferred Phase-1 Step 3 receipt to the
`Compose<CommutativeSemiring, MachineWidth<N>>` parametric form
(post-S3 landing).

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

* test(v3): refresh parse-snapshot manifest for integer.dag UInt change

Mechanical refresh after PR #1818 fix commit. integer.dag debug-bytes
shifted 12659→12662, fnv1a64 1eef7086b17908de→104a413082264303 with
the type swap from `UInt = CommutativeMonoid<Nat>` to `UInt = Nat`
plus surrounding doc-comment rewrite. Generated by:

  cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignored

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

* WIP: proud-lynx-311

* test(v3): refresh parse-snapshot manifest for Slice 2 types.dag edit

Mechanical refresh after the Slice 2 Nat-alignment migration
(`NonNegativeInt` / `PositiveInt` carrier swap to `Nat`).

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

* WIP: proud-lynx-311

* fix(std): partial Slice 2 — NonNegativeInt only; PositiveInt stays Int

CI failure on PR #1840 surfaced two real substrate gaps in the
attempted full Slice 2 migration:

1. Adding `import std.nat { Nat }` to `dsl/std/types.dag` triggers
   a circular-dependency false-positive in the resolver during
   transitive load of test fixtures via `std.render` chains
   (verified via p0_std_render_repeat_string_test).
2. Shipping `type PositiveInt = Nat where range(min: 1)` triggers
   `Diagnostic::ResolveError` for the `range` predicate — the
   resolver does not currently entail `where range(min: …)` over
   `Nat` (only over `Int` and Int-row carriers). This matches
   dispatch STOP-AND-ESCALATE bullet 2 (predicate-entailment
   failure).

Partial migration shipped:
- `NonNegativeInt = Nat` declaration moved to `dsl/std/integer.dag`
  (which already imports `std.nat { Nat }`); structural alias, no
  predicate, resolves cleanly.
- `PositiveInt = Int where range(min: 1)` stays in `dsl/std/types.dag`
  unchanged. PositiveInt's Nat-alignment migration sequences after
  the predicate-entailment substrate supports `range` over Nat.

`src/v3/std/approximate_field.dag` keeps `import std.types { PositiveInt }`
(unchanged consumer surface for PositiveInt). Bootstrap snapshots
re-regenerated; parse-corpus manifest refreshed.

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 May 6, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cd): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cd):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b98):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b98): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a07; the review citation was against
the pre-fix sha 2072b98.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d924594: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f3.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd481 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd0 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f00

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a prior to
review; reviewer was on sha a462f00 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce041 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a5:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

* docs(briefs): S9 Slice 2.5 — predicate-registry + PB-1 shim retirement (Path 3 RATIFIED)

Director ratified Path 3 at gunbc#828 #issuecomment-4390333451
post proud-lynx-311's pre-flight DFS at gunbc#1746 #issuecomment-4390253616.

Brief reframes Slice 2.5 from S-sized (primitive + 1 consumer) to
L-sized (predicate registry + PB-1 shim retirement). 5 deliverables:
1. gt_zero primitive predicate
2. Predicate registry infrastructure (resolver-side substrate-fact-introduction)
3. PB-1 shim retirement (span.file=='dsl/std/types.dag' special case dissolves)
4. Migration of existing types.dag predicates (range, pattern, etc.)
5. PositiveInt = Refined<Nat, gt_zero> consumer update

Per Director hard scope bars: no parallel predicate-resolution path;
no per-call-site special-casing; PB-1 shim retirement non-negotiable
in same slice. Single PR per Path 3 RATIFIED.

Discipline anchors: feedback_construction_over_ratchets (PB-1 shim
is bridge); feedback_dissolve_bridges (registry is structural fix);
feedback_no_textual_enforcement_bridges (file-path special-case is
anti-pattern shape); P1 substrate-fact-introduction procedure.

Worker pin proud-lynx-311 — Director pre-cleared on pre-flight DFS
context. PR #1840 (partial Slice 2 — NonNegativeInt = Nat) MERGED
at 16:54Z; Slice 2.5 dispatchable immediately on this brief landing.

* docs(briefs): Slice 2.5 audit receipt — Mgr independent grep parallel-verifies worker DFS

Codex BLOCKING review on PR #1845 sha 2d23094 flagged: external PR
receipt absorbed as live substrate state without re-grepping local
std declarations at brief authoring time. Authority receipt §1
cited proud-lynx-311's pre-flight DFS as authority but didn't
record Mgr-side independent verification.

Updated audit receipt §1 + §4 to record Mgr's independent grep at
HEAD as parallel verification:
- gt_zero zero matches in dsl/std/ + src/v3/ (verified)
- NonNegativeInt = Nat at dsl/std/integer.dag:133 (#1840 land)
- PositiveInt = Int where range(min: 1) at dsl/std/types.dag:255
- PB-1 shim doc-block confirms bridge-text framing
- Predicate registry confirmed not present

Worker DFS remains the dispatch-time discipline (substrate-state
grep at dispatch); Mgr's independent grep is parallel verification,
not substitute. Per Director's pattern note at gunbc#828
#issuecomment-4390199218 + #issuecomment-4390333451: dispatch-packet
authoring discipline includes Mgr-side substrate-state-grep, not
just relay of worker findings.

* docs(briefs): Slice 2.5 brief — Int extensibility scope-bound; lower.rs cites anchored

openai-pro REQUEST_CHANGES on PR #1845 sha 2d23094 flagged 2 issues:

BLOCKING — P1 modeling faithfulness / substrate scope leak:
`gt_zero` Int-side extensibility was left to 'worker judgment if
generalization cheap'. Per feedback_construction_over_ratchets:
don't speculatively extend predicate-carrier compatibility ahead
of named consumer demand. Reframed to **EXPLICITLY OUT-OF-SCOPE**
for Slice 2.5; Nat-only registration. Future Int-side consumer
surfaces as separate substrate-fact-introduction (P1 procedure)
brief with own consumer-demand receipt.

NON-BLOCKING — citation discipline self-violation:
3 instances of bare `lower.rs:821-835` line-range citations
contradict the brief's own 'no bare :NNN' requirement at line 211.
Converted to function-name anchored form:
`src/v3/compiler/src/lower.rs` (`lower_type_alias_refinements_phase` doc-block).

Both findings absorbed; no parallel scope ambiguity remains;
brief now self-consistent on citation discipline.

* WIP: R3 Substrate

* docs(briefs): Slice 2.5 brief — audit-receipt cites converted to declaration-name anchors

cursor APPROVE_WITH_COMMENTS on PR #1845 sha ebf6ac1 noted citation
self-inconsistency: audit-receipt section §1 + §4 used bare
`dsl/std/integer.dag:133` and `dsl/std/types.dag:255` line-number
pins despite the brief's own no-bare-:NNN rule.

Converted to declaration-name-anchored form:
- 'declaration named NonNegativeInt' (with reproducible grep command)
- 'declaration named PositiveInt' (with reproducible grep command)
- 'lower_type_alias_refinements_phase doc-block' for PB-1 location

Brief now fully self-consistent on its own citation discipline.
Verified zero remaining .dag:NNN / .rs:NNN / .md:NNN bare cites.

* docs(briefs): Slice 2.5 brief — Path (a) RATIFIED carrier+argument contract verification

Director Path (a) RATIFIED at gunbc#828 #issuecomment-4390760353
(triage) + #issuecomment-4390794121 (convergence ack):
predicate-body lowering with carrier+argument contract
verification at lower-time IN SAME SLICE. Placeholder semantics
REMOVED from registry path.

Codex REQUEST_CHANGES surfaced that registered-predicate-without-
contract = silent acceptance per feedback_fail_closed_discipline.
Brief reframe absorbs Path (a):

Hard scope bar #5 added:
- Same-slice carrier+argument-contract verification
- Mismatched carrier OR malformed argument → Diagnostic::ResolveError
- No 'named but not checked' path remains

Scope expansion section added (L → XL):
- Predicate-body lowering for all 7 registered predicates
- Per-predicate arg-shape validation
- Multi-session work acknowledged
- Carrier-check at 788d6ac retained; predicate-body builds on top

Acceptance bullets updated: gt_zero with arg-shape validation +
all 7 predicates with carrier+argument contract verification.

Director-pinned brief-authoring discipline: dissolution trigger
named in a brief authored as substrate-fact-introduction must
specify same-slice acceptance, not deferred follow-up. Otherwise
the brief encodes 'land bridge + defer dissolution' anti-pattern,
the same shape feedback_construction_over_ratchets warns against
at implementation layer applied at brief authoring layer.

This is the 11th miss this session — but the pattern surfacing it
(direct sweep + Codex REQUEST_CHANGES + Director ratification)
produces structural fixes that prevent the next miss class. Brief
revision is the structural recovery.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 6, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cd): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cd):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b98):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b98): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a07; the review citation was against
the pre-fix sha 2072b98.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d924594: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f3.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd481 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd0 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f00

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a prior to
review; reviewer was on sha a462f00 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce041 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a5:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

* docs(briefs): S9 Slice 2.5 — predicate-registry + PB-1 shim retirement (Path 3 RATIFIED)

Director ratified Path 3 at gunbc#828 #issuecomment-4390333451
post proud-lynx-311's pre-flight DFS at gunbc#1746 #issuecomment-4390253616.

Brief reframes Slice 2.5 from S-sized (primitive + 1 consumer) to
L-sized (predicate registry + PB-1 shim retirement). 5 deliverables:
1. gt_zero primitive predicate
2. Predicate registry infrastructure (resolver-side substrate-fact-introduction)
3. PB-1 shim retirement (span.file=='dsl/std/types.dag' special case dissolves)
4. Migration of existing types.dag predicates (range, pattern, etc.)
5. PositiveInt = Refined<Nat, gt_zero> consumer update

Per Director hard scope bars: no parallel predicate-resolution path;
no per-call-site special-casing; PB-1 shim retirement non-negotiable
in same slice. Single PR per Path 3 RATIFIED.

Discipline anchors: feedback_construction_over_ratchets (PB-1 shim
is bridge); feedback_dissolve_bridges (registry is structural fix);
feedback_no_textual_enforcement_bridges (file-path special-case is
anti-pattern shape); P1 substrate-fact-introduction procedure.

Worker pin proud-lynx-311 — Director pre-cleared on pre-flight DFS
context. PR #1840 (partial Slice 2 — NonNegativeInt = Nat) MERGED
at 16:54Z; Slice 2.5 dispatchable immediately on this brief landing.

* docs(briefs): Slice 2.5 audit receipt — Mgr independent grep parallel-verifies worker DFS

Codex BLOCKING review on PR #1845 sha 2d23094 flagged: external PR
receipt absorbed as live substrate state without re-grepping local
std declarations at brief authoring time. Authority receipt §1
cited proud-lynx-311's pre-flight DFS as authority but didn't
record Mgr-side independent verification.

Updated audit receipt §1 + §4 to record Mgr's independent grep at
HEAD as parallel verification:
- gt_zero zero matches in dsl/std/ + src/v3/ (verified)
- NonNegativeInt = Nat at dsl/std/integer.dag:133 (#1840 land)
- PositiveInt = Int where range(min: 1) at dsl/std/types.dag:255
- PB-1 shim doc-block confirms bridge-text framing
- Predicate registry confirmed not present

Worker DFS remains the dispatch-time discipline (substrate-state
grep at dispatch); Mgr's independent grep is parallel verification,
not substitute. Per Director's pattern note at gunbc#828
#issuecomment-4390199218 + #issuecomment-4390333451: dispatch-packet
authoring discipline includes Mgr-side substrate-state-grep, not
just relay of worker findings.

* docs(briefs): Slice 2.5 brief — Int extensibility scope-bound; lower.rs cites anchored

openai-pro REQUEST_CHANGES on PR #1845 sha 2d23094 flagged 2 issues:

BLOCKING — P1 modeling faithfulness / substrate scope leak:
`gt_zero` Int-side extensibility was left to 'worker judgment if
generalization cheap'. Per feedback_construction_over_ratchets:
don't speculatively extend predicate-carrier compatibility ahead
of named consumer demand. Reframed to **EXPLICITLY OUT-OF-SCOPE**
for Slice 2.5; Nat-only registration. Future Int-side consumer
surfaces as separate substrate-fact-introduction (P1 procedure)
brief with own consumer-demand receipt.

NON-BLOCKING — citation discipline self-violation:
3 instances of bare `lower.rs:821-835` line-range citations
contradict the brief's own 'no bare :NNN' requirement at line 211.
Converted to function-name anchored form:
`src/v3/compiler/src/lower.rs` (`lower_type_alias_refinements_phase` doc-block).

Both findings absorbed; no parallel scope ambiguity remains;
brief now self-consistent on citation discipline.

* WIP: R3 Substrate

* docs(briefs): Slice 2.5 brief — audit-receipt cites converted to declaration-name anchors

cursor APPROVE_WITH_COMMENTS on PR #1845 sha ebf6ac1 noted citation
self-inconsistency: audit-receipt section §1 + §4 used bare
`dsl/std/integer.dag:133` and `dsl/std/types.dag:255` line-number
pins despite the brief's own no-bare-:NNN rule.

Converted to declaration-name-anchored form:
- 'declaration named NonNegativeInt' (with reproducible grep command)
- 'declaration named PositiveInt' (with reproducible grep command)
- 'lower_type_alias_refinements_phase doc-block' for PB-1 location

Brief now fully self-consistent on its own citation discipline.
Verified zero remaining .dag:NNN / .rs:NNN / .md:NNN bare cites.

* docs(briefs): Slice 2.5 brief — Path (a) RATIFIED carrier+argument contract verification

Director Path (a) RATIFIED at gunbc#828 #issuecomment-4390760353
(triage) + #issuecomment-4390794121 (convergence ack):
predicate-body lowering with carrier+argument contract
verification at lower-time IN SAME SLICE. Placeholder semantics
REMOVED from registry path.

Codex REQUEST_CHANGES surfaced that registered-predicate-without-
contract = silent acceptance per feedback_fail_closed_discipline.
Brief reframe absorbs Path (a):

Hard scope bar #5 added:
- Same-slice carrier+argument-contract verification
- Mismatched carrier OR malformed argument → Diagnostic::ResolveError
- No 'named but not checked' path remains

Scope expansion section added (L → XL):
- Predicate-body lowering for all 7 registered predicates
- Per-predicate arg-shape validation
- Multi-session work acknowledged
- Carrier-check at 788d6ac retained; predicate-body builds on top

Acceptance bullets updated: gt_zero with arg-shape validation +
all 7 predicates with carrier+argument contract verification.

Director-pinned brief-authoring discipline: dissolution trigger
named in a brief authored as substrate-fact-introduction must
specify same-slice acceptance, not deferred follow-up. Otherwise
the brief encodes 'land bridge + defer dissolution' anti-pattern,
the same shape feedback_construction_over_ratchets warns against
at implementation layer applied at brief authoring layer.

This is the 11th miss this session — but the pattern surfacing it
(direct sweep + Codex REQUEST_CHANGES + Director ratification)
produces structural fixes that prevent the next miss class. Brief
revision is the structural recovery.

* docs(briefs): Slice 2.5 brief — Path 2 RATIFIED (Gap 1 discharge + Q-Regex carve-out)

Director Path 2 RATIFIED at gunbc#828 #issuecomment-4391985613
post Rung 3 STOP at gunbc#1746 #issuecomment-4391946213.

Path 2 narrowing of Path (a):
- gt_zero + range body synthesis already landed (5f3c40c)
- Gap 1 discharge mechanism: extends scalar-literal predicate
  evaluation at lower-time. L-class; lands SAME SLICE per
  same-slice-dissolution discipline
- non_empty + brand body synthesis: lands via Gap 1 discharge
- pattern / format / content: fail-closed-with-named-dep at
  user-code authoring layer (Diagnostic::ResolveError naming
  Q-Regex-Primitive). NOT placeholder; structural rejection
- PB-1 shim FULLY RETIRED per hard scope bar #3
- Q-Regex-Primitive carved as follow-on substrate-fact-introduction
  (XL substrate; not pre-authored per feedback_construction_over_ratchets)

Acceptance updated:
- 4 of 7 body-synthesized in same slice
- 3 of 7 fail-closed-with-named-dep (no placeholder semantics)
- Gap 1 discharge mechanism landed (no partial implementation)

Worker disposition: proud-lynx-311 continues Rung 3 with Gap 1
implementation + non_empty/brand body synthesis + pattern/format/
content fail-closed-with-named-dep diagnostic.

* docs(briefs): S9 Phase-1 Step 3 emission entries — Tier-1 brief authoring (1/5)

First Tier-1 brief landing post Director auto-nudge on assignment
#1858. Authored against Q-MachineConstraint sub-decisions ratified
shape now landed at #1856:

- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>> → Rust i32/i64/i128
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>> → Rust u32/u64/u128
- 6 concrete instantiations (≥3 minimum per sub-decision 5)
- Cross-program handoff to Grounding Mgr (#1745) for G2 emission consumption
- numeric_construction_demonstration Acceptance bullet (Int<32> round-trip);
  Real<64> half deferred to S9 Phase 2 / S8 Float cascade

Brief authored with substrate-state-grep discipline + same-slice-
dissolution discipline (no deferred trigger; demonstration in same
slice or explicitly carved). 5-question authority audit completed
in brief body.

Worker pin proud-lynx-311 (S9 holds); brief queues post-Slice-2.5
completion as natural follow-on.

Tier-1 brief queue progress:
- 1/5 authored (this brief)
- 4 remaining: S9 Phase-2 Float coordination; T-LBP complexity
  cementing; T-LBP cost cementing; S3 Phase-2 parser-grammar

* docs(briefs): S3 Phase-2 parser-grammar surface — Tier-1 brief 2/5

Authored per Director freed-pool pressure at gunbc#828
#issuecomment-4392095857 + Tier-1 brief-queue commitment.

Brief covers parser-grammar surface for Compose<Algebra, MachineConstraint>
interaction syntax post-#1856 (Phase-1 carrier slice landed):

- Phase 2.1: Parser surface per ratified Q-MachineConstraint-Grammar-Shape
- Phase 2.2: Bootstrap demonstrator with >=3 algebra*machine-axis pairs
- Phase 2.3: Class 1 5-criteria Pass receipt (criteria 1-4; criterion 5
  v2-oracle parity may carve)
- Phase 2.4: numeric_construction_demonstration co-receipt with S9 Phase-1
  Step 3 emission entries brief

Director ratification HOLDS on grammar bikeshed:
- Candidate A: Int @ Width<32> (annotation form)
- Candidate B: Int with MachineWidth<32> (with-form)
- Candidate C: Int<32> (positional generic — fits existing convention)
- Candidate D: Compose<AbelianGroup, MachineWidth<32>> (no parser change;
  type aliases provide convenience names)

Worker pin valiant-ant-72 holds (S3 Phase-1 precedent owner); freed-pool
until Director ratifies grammar shape.

Tier-1 brief queue progress: 2/5 authored (this brief + S9 Phase-1 Step 3).
Remaining: S9 Phase-2 Float coordination; T-LBP complexity cementing;
T-LBP cost cementing.

* docs(briefs): S3 Phase-2 brief — fix internal contradiction on Class 1 closure scope

Codex BLOCKING review on PR #1889 sha ec609b4 flagged real
contradiction:

- Provenance section claimed '5-criteria Pass closed' (line 229)
- Phase 2.3 said 'criterion 5 may queue separately' (line 154)
- STOP-AND-ESCALATE bullet 1 ratified 4-of-5 carve-out (line 181)

Updated Provenance to consistently state criteria 1-4 close in this
slice; criterion 5 (v2-oracle parity) cementing test may carve to
separate slice. Single 4-of-5 framing throughout. INVARIANTS.md
'Documentation Describes Live State' satisfied.

Per feedback_construction_over_ratchets: don't claim closure that
isn't structurally complete. 4-of-5 + named carve is the honest
shape; 5/5 only on cementing-test land.

* briefs: cite Q-MachineConstraint sub-decision 6 supersession of T-V2-Retirement gate

Address Codex BLOCKING #1 on PR #1889: S3 Phase-2 + S9 Phase-1 Step 3
worker briefs consumed Q-MachineConstraint ratification without
reconciling the historical T-V2-Retirement-landing-first cascade
gate. Add an explicit precondition-framing section to each brief
citing Director ratification at gunbc#828 #issuecomment-4385530115
(Q-MachineConstraint sub-decision 6 UNIVERSAL substrate posture)
as the implicit supersession; PR #1856 landing without T-V2-Retirement
first confirms supersession in practice. STOP-AND-ESCALATE if
supersession contested at dispatch.

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

* slice-2.5 brief: mark pattern/format/content Path 2 acceptance pending Director ratification

Address Codex BLOCKING #2 on PR #1889: Path 2 deliverable + acceptance
language asserted fail-closed-with-named-dep semantics for
pattern/format/content, but Director rejected that shape (Option 4)
at gunbc#828 #issuecomment-4392.... Options A (consumer migration),
B (Q-Regex bundled into slice), C (typed fail-closed exception with
named trigger) await ratification per migration-cost catalog at
#issuecomment-4392116215. Brief now flags those three predicates +
PB-1 shim retirement coupling as PENDING DIRECTOR RATIFICATION; worker
STOP-AND-ESCALATE if dispatched pre-ratification.

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

* slice-2.5 brief: reconcile PB-1 retirement shape with Options A/B/C gating

Address Codex BLOCKING #4 on PR #1889: prior text claimed "PB-1
FULLY RETIRED" while preceding bullet said retirement gates on
chosen path — internal contradiction. Reframe to gate the
pattern/format/content half of shim retirement on Options A/B/C
ratification while preserving Director hard scope bar #3 binding
on the gt_zero/range/non_empty/brand half (cleanly retired via
Gap 1). No path leaves PB-1 alive as parallel-authority shim on
slice landing.

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

* briefs: tier-1 3/5 — S9 Phase-2 Float emission coordination worker brief

Tier-1 brief queue progress (3/5): S9 Phase-2 Float<N> emission
entries (Float<32>/Float<64> via Compose<ApproximateField<Real>,
MachineWidth<N>>) + Real<64> round-trip demonstration completing
§1.8 #67 Acceptance bullet. Coordination/synthesis brief — gates on
both S8 (ApproximateField<F> + Real base carrier) and S9 Phase-1
Step 3 (Int<N>/UInt<N> emission-entry pattern) landing before
dispatch. Inherits T-V2-Retirement supersession framing from
Phase-1 Step 3. STOP-AND-ESCALATE on missing preconditions or
unratified Q-ApproximateField-Axiom-Set.

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

* briefs: ledger advancement honesty (PRODUCER_LANDED not CONSUMER_LANDED) + restore exact issuecomment IDs

Address openai-pro BLOCKING + NON-BLOCKING findings on PR #1889:

BLOCKING (boundary discipline / same-PR consumer): S9 Phase-1 Step 3
+ Phase-2 Float briefs claimed DECLARED → CONSUMER_LANDED upon merge
while only requiring cross-program handoff receipt to Grounding G2.
For target-primitive substrate entries, handoff is not landed-consumer
proof. Reframed both briefs to advance rows DECLARED → PRODUCER_LANDED;
Grounding G2 follow-on PR (per-pair lowering rules + emitted-Rust-
primitive verification) advances to CONSUMER_LANDED. Default
split-PR producer-then-consumer per bundled-scope discipline ratified
at gunbc#1739 #issuecomment-4392225548 (parallel infrastructure
DISALLOWED in same PR).

NON-BLOCKING (citation hygiene): replaced ellipsized
"#issuecomment-4392..." stubs in slice-2.5 brief with the exact
Director Option-4-rejection comment ID #issuecomment-4392081719 so
the ratification claim is mechanically checkable.

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

* slice-2.5 brief: absorb Director Option A revised RATIFICATION (final shape)

Director ratified Option A revised at gunbc#1739 #issuecomment-4392329709
(2026-05-06). Final brief shape:
- 4 predicates body-synthesize via Gap 1 (gt_zero / range / non_empty
  / brand)
- pattern / format / content STRUCTURALLY ABSENT from registry (not
  pending-with-placeholder); user-code where-clause produces
  Diagnostic::ResolveError naming Q-Regex-Primitive as separate
  substrate-fact-introduction follow-on
- ~12 types.dag refined-type declarations migrate to drop
  pattern/format/content where-clauses with inline-comment receipts
  pointing to Q-Regex restoration path; 1 extdep (sts_endpoint)
  adapts as needed
- PB-1 shim FULLY RETIRED — no exception, no preserved branch
- Q-Regex-Primitive as separate brief / worker pin / Director
  ratification cycle when concretely needed (Option B XXL bundling
  REJECTED)

Phase ordering rewritten to absorb migration as explicit phase
between predicate enrollment and shim retirement. proud-lynx-311
re-dispatches against revised brief; PR #1846 absorbs additional
scope per Director directive.

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

* s3-phase-2 brief: absorb Q-MC sub-decision 3 ratification (grammar shape was already answered)

Director observation at gunbc#1739 #issuecomment-4392382517: Q-MC
sub-decision 3 (Brian directive 2026-05-06 at gunbc#828
#issuecomment-4385530115) already ratified the grammar shape —
`Int<N>` user surface desugars to `Compose<Int, MachineWidth<N>>`
substrate parametrically. Earlier brief HOLD framing was redundant.

Brief revised:
- Replace bikeshed section with Q-MC sub-decision 3 quotation +
  surface/substrate framing (Candidate C user-facing; Candidate D
  substrate elaboration; A/B rejected per Director assessment)
- Phase 2.1 parser surface scoped to numeric-literal-position
  recognition + parametric desugar
- Front-matter status: dispatchable per ratification (not HOLD)
- Provenance: ratification-state-grep discipline pin folded into
  standing dispatch-checklist

valiant-ant-72 dispatch fires immediately per Director directive.

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

* briefs: remove truncated issuecomment-4392... stub from S9 Phase-1 Step 3 provenance

Address cursor NON-BLOCKING finding on PR #1889 sha 94292e4: line 144
truncated issuecomment ID. The originally-intended Director auto-nudge
comment doesn't map cleanly to a single ID, so replace with the
standing assignment reference (gunbc#1858) which is unambiguous.

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

* briefs: tier-1 4/5 + 5/5 — T-LBP complexity + cost lens cementing-test worker briefs

Tier-1 brief queue completes (4/5 + 5/5):

4/5 — T-LBP complexity-lens cementing test (§1.8 rows #79 + #87
first entry). Consumer-side cementing test against frozen v2-oracle
snapshot; producer-side Lens<Complexity> instance is upstream
precondition. Per Q-Lens-Behavioral-Parity-R3-Closeability option
(b) RATIFIED at gunbc#828 #issuecomment-4385329180 — T-LBP narrowed
to complexity + cost lenses only.

5/5 — T-LBP cost-lens cementing test + cost_lens_demonstration
(§1.8 rows #80 + #70 + #87 second entry). Absorbs row #70 demo
naturally — same source corpus + lens run; demonstration adds
observable-cost-bound assertions on top of parity check. ≥2
algebra-instances composed + ≥1 recursive call required per row #70.

Both briefs gate on:
- T-LBP per-lens substrate-producer brief landing (Lens<C> instance)
- Frozen v2-oracle snapshot capture (separate brief, pre-v2-retirement)
- DO NOT capture-against-live-oracle (violates
  v2_oracle_no_remaining_test_consumers)
- DO NOT bundle producer/snapshot/algebra-instance authoring per
  Director bundled-scope ratification at gunbc#1739
  #issuecomment-4392225548

Tier-1 5/5 complete. Worker pins assigned at dispatch time once
preconditions land.

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

* canvas: emission-provenance substrate shape disposition (supersedes PR #1902 PROPOSAL)

Substrate Mgr canvas authored post-codex BLOCKING + PM disposition
handoff at gunbc#846 #issuecomment-4392510255.

Two real substrate-shape questions stacked:

Q1 (category mismatch): Lens<C>.read is per-Behavior; emission
provenance is per-emitted-line. 4 options surfaced — (a) per-Behavior
Lens-compatible / (b) per-line instrumentation NOT a lens / (c)
withdraw + re-canvas / (d) Mgr-surface both substrates distinct.
Mgr recommends (d) if visualization is load-bearing; (a) suffices
if per-Behavior aggregate works for the slide. Brian-channel
sub-question surfaced.

Q2 (fold-rule enumerability): T-Rule-Enumeration substrate-fact-
introduction is prerequisite for every Q1 path (rust_target.rs uses
inline &str template names; rules not enumerable). Mgr recommends
parallel-dispatch with Q1 deliberation — satisfies Brian's ASAP
framing while shape ratifies.

Q3 (§1.8 ledger retarget): #89 already taken by T-LAS; new cluster
location follows Q1 disposition.

Director ratification ask + Brian-channel sub-question surfaced.
PR #1902 close-superseded post-ratification.

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

* briefs: reconcile Compose<...> slot-1 spellings to algebraic-concept names per Q-MC sub-decision 3

Address cursor NON-BLOCKING on PR #1889 sha 2b49b30: S3 Phase-2
brief mixed Compose<AbelianGroup, ...> with Compose<Int, ...>; S9
Phase-1 Step 3 used Compose<AbelianGroup, ...> + Compose<CommutativeSemiring,
...>; S9 Phase-2 used Compose<ApproximateField<Real>, ...>. All wrong
per Q-MC sub-decision 3 critical correction at gunbc#828
#issuecomment-4385530115:

  "prior phrasing Compose<AbelianGroup, MachineWidth<64>> was wrong
  — AbelianGroup<T> is a witness shape over carrier T, not a carrier
  constructor; bare AbelianGroup in slot-1 composes witness rather
  than concept."

Slot-1 is the fully-applied algebraic-concept name:
- Int<N>  = Compose<Int,  MachineWidth<N>>   (Int = AbelianGroup<GroupCompletion<Nat>>)
- UInt<N> = Compose<UInt, MachineWidth<N>>   (UInt = CommutativeSemiring<Nat>)
- Real<N> = Compose<Real, MachineWidth<N>>   (Real = ApproximateField<Rational>)

Phase-2 Float brief also retargets user-facing surface from Float<N>
to Real<N> (Float is target-language name for the Rust primitive;
Real is the algebraic-concept name per Q-MC sub-decision 3 example).

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

* s9-p1-s3 brief: scope Deliverable 4 to producer-side verification (defer demonstration to Grounding G2)

Address Codex BLOCKING (line 82 inline + bundled review): brief
claimed end-to-end Int<32> → Rust i32 round-trip in Acceptance
while Deliverable 3 said lowering rules belong to Grounding G2
follow-on. Internal contradiction.

Reframe per Director bundled-scope discipline (gunbc#1739
#issuecomment-4392225548 — parallel infrastructure DISALLOWED
same-PR):

- Deliverable 4: producer-side substrate-axis verification only
  (type-check + carrier acceptance + bootstrap snapshot/manifest
  hold). NO end-to-end Rust emission in this PR.
- §1.8 #67 numeric_construction_demonstration receipts split:
  producer half here (entries exist), consumer half on Grounding
  G2 PR (full Int<32> → Rust i32 round-trip).
- Same-PR cross-program co-author available if Substrate Mgr
  coordinates with Grounding Mgr at dispatch; default is split.

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 May 7, 2026
…PB-1 shim retirement (#1846)

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* WIP: proud-lynx-311

* chore(v3): regen bootstrap snapshot for substrate.dag :83 anchor swap

The :425 Slice A anchor swap (\§P1` → `#p1-modeling-faithfulness`) on
src/v3/std/substrate.dag:83 shifted SourceSpan byte offsets for every
node parsed below that line, drifting bootstrap_generated.rs.

Regenerated via `cargo run -p v3-compiler --features bootstrap-regen-fresh
--bin regen_bootstrap`. No semantic change — pure span-offset refresh.

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

* fix(:425): retire trailing `§P5` shorthand on r2-manager-brief-authority-matrix.md:205

Cursor review on a402dca flagged residual `\`§P5\` (dispatch-discipline)`
shorthand inside the same sentence as a P2 anchor. Slice A's mechanical
sweep matched only `INVARIANTS.md §P5` prefixed forms; the bare
shorthand survived. Swap to `INVARIANTS.md#p5-progress-is-dissolution`
matches adjacent P2 form.

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

* test(v3): refresh parse_corpus_manifest after substrate.dag :83 anchor swap

The :425 Slice A anchor swap shifted byte offsets in src/v3/std/substrate.dag,
drifting SG-2 parse snapshot hashes (same root cause as the bootstrap_generated
regen in a402dca). Regenerated via:

  cargo test -p v3-compiler --test integration -- --ignored \
    refresh_handwritten_parse_snapshot_manifest

Verified: handwritten_parse_snapshot_matches_manifest passes locally.
Pure offset/hash refresh — no semantic change.

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

* ci: re-trigger v3 after t_demo_fixture transient flake

* fix(:425): align link URL with anchor label on r2-manager-brief-authority-matrix.md:222

Codex review on 9e67e1f noted the Markdown label was swapped to the
#p5-progress-is-dissolution anchor but the URL still pointed at the
INVARIANTS.md root. Aligned URL to match label.

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

* WIP: proud-lynx-311

* feat(std): T-Numeric-Construction S9 Phase-1 — UInt = CommutativeMonoid<Nat>

Migrates the default `UInt` alias from the legacy fixed-width
`UInt = UInt64` to the abstract algebra carrier
`UInt = CommutativeMonoid<Nat>`, consistent with the landed
Slice 3 form `Int = AbelianGroup<GroupCompletion<Nat>>` (PR #1466,
docs/audit/t-numeric-construction-group-completion-6q.md Q6
single-authority resolution).

Per S9 worker brief (R3 design schedule §1 S9, ratified 2026-05-06):
Nat plays as the commutative-monoid carrier under addition (closure /
associativity / identity 0 / commutativity; no inverses, since Nat
lacks additive inverses by construction). UInt as `CommutativeMonoid<Nat>`
is the additive structure on that carrier — the honest unsigned-integer
algebra without inverses.

Fixed-width rows `UInt8..UInt128` remain on `Semiring<Word*>` per
existing legacy-rows policy in `dsl/std/integer.dag` (only the default
alias migrates; storage rows stay shape-conflated until v3 supports
trait/witness syntax separation).

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

* fix(std): UInt = Nat (preserve CommutativeSemiring surface)

Codex review at PR #1818 / Substrate Mgr inline review at
dsl/std/integer.dag:102 surface a P2 facts-flow-forward violation
in the prior `type UInt = CommutativeMonoid<Nat>` pivot: wrapping
Nat (already `CommutativeSemiring<Magnitude>`) in `CommutativeMonoid<Nat>`
projects out the multiplicative monoid + identity 1, dropping
substrate facts already established at the Nat layer. The substrate
cannot structurally name "the additive monoid projection of Nat"
without losing Nat's other monoid.

Pivot to the design-doc-named direct alias: `type UInt = Nat`. Per
the existing comment header in this file, the design doc states
`UInt IS Nat`; Nat already carries the full unsigned-integer algebra
surface (additive monoid + multiplicative monoid + distribution +
commutativity on both). No new operations are needed — the alias IS
the algebra.

Asymmetry with `Int`: `Int` requires additive inverses Nat lacks, so
`GroupCompletion<Nat>` is the honest carrier introduction. `UInt`
requires no new operations, so no carrier introduction is needed.

Updates the PR's deferred Phase-1 Step 3 receipt to the
`Compose<CommutativeSemiring, MachineWidth<N>>` parametric form
(post-S3 landing).

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

* test(v3): refresh parse-snapshot manifest for integer.dag UInt change

Mechanical refresh after PR #1818 fix commit. integer.dag debug-bytes
shifted 12659→12662, fnv1a64 1eef7086b17908de→104a413082264303 with
the type swap from `UInt = CommutativeMonoid<Nat>` to `UInt = Nat`
plus surrounding doc-comment rewrite. Generated by:

  cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignored

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

* WIP: proud-lynx-311

* test(v3): refresh parse-snapshot manifest for Slice 2 types.dag edit

Mechanical refresh after the Slice 2 Nat-alignment migration
(`NonNegativeInt` / `PositiveInt` carrier swap to `Nat`).

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

* WIP: proud-lynx-311

* fix(std): partial Slice 2 — NonNegativeInt only; PositiveInt stays Int

CI failure on PR #1840 surfaced two real substrate gaps in the
attempted full Slice 2 migration:

1. Adding `import std.nat { Nat }` to `dsl/std/types.dag` triggers
   a circular-dependency false-positive in the resolver during
   transitive load of test fixtures via `std.render` chains
   (verified via p0_std_render_repeat_string_test).
2. Shipping `type PositiveInt = Nat where range(min: 1)` triggers
   `Diagnostic::ResolveError` for the `range` predicate — the
   resolver does not currently entail `where range(min: …)` over
   `Nat` (only over `Int` and Int-row carriers). This matches
   dispatch STOP-AND-ESCALATE bullet 2 (predicate-entailment
   failure).

Partial migration shipped:
- `NonNegativeInt = Nat` declaration moved to `dsl/std/integer.dag`
  (which already imports `std.nat { Nat }`); structural alias, no
  predicate, resolves cleanly.
- `PositiveInt = Int where range(min: 1)` stays in `dsl/std/types.dag`
  unchanged. PositiveInt's Nat-alignment migration sequences after
  the predicate-entailment substrate supports `range` over Nat.

`src/v3/std/approximate_field.dag` keeps `import std.types { PositiveInt }`
(unchanged consumer surface for PositiveInt). Bootstrap snapshots
re-regenerated; parse-corpus manifest refreshed.

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

* WIP: proud-lynx-311

* feat(v3): T-Numeric-Construction S9 Slice 2.5 — predicate registry + PB-1 shim retirement

Path 3 RATIFIED at gunbc#828 issuecomment-4390333451 (Director, post
proud-lynx-311 pre-flight DFS at gunbc#1746 issuecomment-4390253616).

Five deliverables, single PR per Director ratification:

1. `gt_zero` primitive predicate enrolled in registry (Nat-defined per
   Director Option 2 ratification at gunbc#828 issuecomment-4390199218).
2. `KNOWN_PREDICATE_REGISTRY` substrate-fact-introduction in
   src/v3/compiler/src/lower.rs — authoritative set of predicate
   identifiers recognized by `where`-sugar refinements
   (range, pattern, non_empty, brand, format, content, gt_zero).
3. PB-1 shim retired: prior file-path special case
   (`span.file == "dsl/std/types.dag"`) in
   `lower_type_alias_refinements_phase` replaced with
   registry-name dispatch via `all_predicate_names_registered`. Per
   feedback_no_textual_enforcement_bridges, gating structural
   behavior on textual file identifier was the anti-pattern;
   registry-name dispatch is the substrate-faithful authority.
4. Existing types.dag predicates (range, pattern, non_empty, brand,
   format, content) all migrate cleanly through the registry; bootstrap
   snapshot + parse-corpus manifest hold (no semantic drift).
5. PositiveInt = Nat where gt_zero migrated to dsl/std/integer.dag
   (companion to NonNegativeInt = Nat from #1840). approximate_field.dag
   consumer updated to import from std.integer.

`alloc_deferred_types_dag_refinement_placeholder` renamed to
`alloc_registered_refinement_placeholder` (file-name semantic dropped
from placeholder name string; `is_deferred_refinement_placeholder`
matcher updated to track the new placeholder-name prefix
"<registered predicate, body not lowered: ...>").

Bootstrap snapshots regenerated; parse-corpus manifest refreshed.

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

* WIP: proud-lynx-311

* fix(v3): apply cargo fmt to placeholder format! macro

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

* fix(v3): Slice 2.5 — predicate registry carries allowed-carrier check

Codex BLOCKING review at PR #1846 (sha 92758dd): the registry as
shipped accepted any registered predicate name as a placeholder
regardless of base-type carrier. That made the registry a broad
diagnostic escape hatch — e.g. `String where gt_zero` would
silently get a placeholder despite gt_zero being undefined over
String.

Extends the registry from `&[&str]` to `&[PredicateSpec]` where
each spec pairs the predicate name with its **allowed carriers**
list. The registered-placeholder branch now requires both:
1. predicate name in registry, AND
2. base-type alias chain intersects the predicate's allowed carriers.

`carrier_chain_names()` walks `Atom::ResolvedByStructure` /
`Atom::ResolvedByName` / `Instantiation` chains to collect every
named declaration in the chain — so e.g. `brand` over `NonEmptyStr`
matches because `NonEmptyStr` itself is in `brand`'s allowed list
(without forcing the chain to bottom out at `String`).

Allowed-carrier lists derived from existing dsl/std/types.dag
surface usage:
- range: Int, Nat
- pattern: String, NonEmptyStr
- non_empty: String, Secret, List
- brand: NonEmptyStr, String, FilePath, Unit, Int, Nat, Secret
- format: String
- content: FilePath
- gt_zero: Nat, Int

Bootstrap snapshot regenerates cleanly; 0 ResolveErrors emitted.
Failing test (test_types_dag_alias_refinement_is_deferred_placeholder_not_dropped)
still passes (the test fixture uses `range(min: 1)` over Int — a
registered+allowed pair). p0_std_render_repeat_string_test still
passes.

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

* WIP: proud-lynx-311

* feat(v3): Slice 2.5 Path (a) — predicate registry arg-shape contract + tests

Director Path (a) RATIFIED at gunbc#828 issuecomment-4390760353
(post Codex/openai-pro REQUEST_CHANGES on PR #1846): registered
predicates must validate carrier AND argument shape; mismatches
fail-closed via Diagnostic::ResolveError rather than silently
take a placeholder.

Ladder rungs 1+2+6 land here:

Rung 1 — `PredicateSpec` arg-shape contract:
  - New `PredicateArgShape` enum: Bare / SingleStringLiteral /
    SingleIdentOrStringLiteral / SingleVariantIdent{allowed} /
    NumericRecord{accepted_fields, require_at_least_one}.
  - `PredicateSpec` extended with `arg_shape` field.
  - Per-predicate arg shape filled from `dsl/std/types.dag`
    surface usage:
    - gt_zero / non_empty: Bare
    - pattern / brand: SingleStringLiteral
    - format: SingleIdentOrStringLiteral
    - content: SingleVariantIdent{Text|Binary}
    - range: NumericRecord{min, max; require ≥1}

Rung 2 — Arg-shape validation at lower-time:
  - `validate_predicate_clause` returns
    `PredicateValidation::{Registered, RegisteredButMalformed{reason,
    span}, NotRegistered}`.
  - `validate_where_clause` recurses into `Operator{And, …}` chains;
    any malformed leaf collapses the whole clause to malformed.
  - `arg_shape_mismatch` validates per-shape: bare predicates must
    parse as Var or zero-arg Call; single-arg predicates check
    literal kind + variant membership; record-shape predicates
    validate field names + integer-literal field values.
  - Replaces `all_predicate_names_registered` (carrier-only) with
    the new validator at the call site in
    `lower_type_alias_refinements_phase`. Malformed registered
    predicates emit `Diagnostic::ResolveError` directly via
    `report_declaration_error` and skip refinement allocation;
    valid registered predicates still take a placeholder (rung 3
    body lowering is the named follow-on).

Rung 6 — Test coverage (per openai-pro testing finding):
  - `test_registered_predicate_placeholder_works_outside_types_dag`
    cements the PB-1 file-path retirement (registered predicate in
    `dsl/std/integer.dag` still takes a placeholder).
  - `test_registered_predicate_on_disallowed_carrier_fails_closed`
    cements the carrier check (`String where gt_zero` surfaces
    diagnostic, no placeholder).
  - `test_registered_predicate_with_malformed_args_fails_closed`
    cements the arg-shape check (`Int where range(bogus: 1)`
    surfaces diagnostic, no placeholder).

Naming-drift cleanup (per openai-pro non-blocking observation):
doc-comment reference to `KNOWN_PREDICATE_REGISTRY` updated to the
actual constant name `KNOWN_PREDICATES`.

Bootstrap snapshots regenerated; parse-corpus manifest refreshed
(declaration counts unchanged; placeholder shape preserved for valid
registered predicates).

Rung 3 (predicate-body lowering) NOT in this commit — registry
placeholder still allocated for valid registered predicates pending
synthesis of per-predicate Bool-returning body expressions
(gt_zero → x > 0; range(min: m) → x >= m; etc.). That's the next
ladder rung; this commit lands the fail-closed enforcement that
addresses Codex/openai-pro REQUEST_CHANGES on the malformed-call
path.

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

* fix(v3): Slice 2.5 — sweep KNOWN_PREDICATE_REGISTRY naming drift; fix doc placement

Cursor APPROVE_WITH_COMMENTS at PR #1846 (sha 75e3572):
- `lower.rs:1191` rustdoc cite `[KNOWN_PREDICATE_REGISTRY]` should be
  `[KNOWN_PREDICATES]` — done (now reads as the registry's actual name).
- `integer.dag:134` text reference fixed.
- The long "predicate registry / substrate-fact-introduction" doc-block
  was attached to `PredicateArgShape`; moved to immediately above
  `KNOWN_PREDICATES` where it belongs. `PredicateArgShape` keeps a
  short doc that points readers at the registry doc.
- `RegisteredButMalformed` doc fix: was "falls through to live
  resolution; diagnostic is the caller's responsibility"; behavior is
  actually "caller emits Diagnostic::ResolveError directly via
  report_declaration_error and skips refinement allocation
  (fail-closed; no placeholder, no live-resolution fallback)".

Bootstrap snapshots regenerated.

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

* feat(v3): Slice 2.5 Path (a) Rung 3 — gt_zero body synthesis lowers real predicate

Director Path (a) requirement: "actual refinement body lowering required"
for valid registered predicates (no placeholder semantics).

This commit lands rung 3 for `gt_zero` (the new primitive) — the simplest
tractable case. Body synthesis pattern:

- `gt_zero` over Nat or Int → `subject > 0` (Comparison(Gt) operator
  applied to Var{bind_name} and Literal{Int(0)}). Equivalent for both
  carriers — Nat's structural lower bound is 0; gt_zero is "above
  structural bound."

Implementation:
- `synthesize_predicate_body(spec, predicate, bind_name) -> Option<SurfaceExpr>`
  — per-predicate body synthesizer; returns None if substrate not yet
  capable (e.g. pattern needs regex primitives that haven't landed).
- `registered_predicate_synthesized_body` walks Operator{And,...} chains;
  returns Some(combined) only if every leaf is synthesizable.
- Call site in `lower_type_alias_refinements_phase` Registered branch:
  if synthesizable, call `build_refinement_predicate_declaration` with
  the synthesized expr (real Arrow refinement body); else fall through
  to placeholder (current behavior for non-synthesized predicates).

Pending substrate (still placeholder for now):
- `range`: numeric comparison over min/max args — tractable next; body
  is `subject >= min && subject <= max`. Synthesis pending.
- `non_empty`: requires substrate-uniform `length`/`size` over String /
  Secret / List carriers; tractable but multi-carrier shape work.
- `brand`: structural-only (true for any subject); body is `Bool::True`
  — synthesizable trivially but semantically a no-op refinement.
- `format`: format-specific (uuid → matches uuid regex, etc.) — needs
  regex primitives.
- `content`: content-specific — needs content-typing primitives.
- `pattern`: needs regex-matching primitive — STOP-AND-ESCALATE candidate
  per S9 Slice 2.5 brief STOP bullet 1.

Rung 3 sequencing: `gt_zero` first (this commit), then `range` next
(numeric primitives in scope), then surface STOP for the regex-needing
predicates.

Test coverage:
- `test_gt_zero_lowers_to_real_refinement_body_not_placeholder` —
  `type Pos = Nat where gt_zero` produces a real `Declaration::refinement`
  (no `<registered predicate not lowered: …>` label).

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

* fix(v3): Slice 2.5 — reject duplicate record-shape fields in registered predicates

Codex BLOCKING inline at PR #1846 src/v3/compiler/src/lower.rs:894:
NumericRecord arg-shape validation accepted duplicate named fields, so
`range(min: 1, min: 2)` would still take a placeholder rather than
fail-closed. Tracks seen field names during validation and emits
`Diagnostic::ResolveError` for duplicates.

Cementing test added: `test_registered_predicate_with_duplicate_record_field_fails_closed`.

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

* WIP: proud-lynx-311

* feat(v3): Slice 2.5 Path (a) Rung 3 — range body synthesis lowers real predicate

Director continuation at gunbc#828 #issuecomment-4391621707: bundled
PR per Path 3 RATIFIED; continue Rung 3 ladder; STOP for regex-needing
predicates when concretely needed.

Adds `range` body synthesis. Lowering rules:
- range(min: m)         → subject >= m
- range(max: M)         → subject <= M
- range(min: m, max: M) → subject >= m && subject <= M

Implementation: extracts integer-literal field values from the
arg-shape-validated SurfaceExpr::Record arg, builds Comparison(Ge)
and/or Comparison(Le) clauses, combines via Logical(And) when both
bounds present.

Test coverage:
- `test_range_lowers_to_real_refinement_body_not_placeholder` —
  exercises all 3 forms (`min:`, `max:`, both); each must produce a
  real `Declaration::refinement` with no placeholder name marker.
- Updated `test_types_dag_alias_refinement_is_deferred_placeholder_not_dropped`
  and `test_registered_predicate_placeholder_works_outside_types_dag`
  to use `non_empty` (still pending body synthesis) so the placeholder
  branch is exercised independently of Rung 3 progress; otherwise
  these would regress as more predicates pick up real bodies.

Remaining Rung 3 ladder:
- non_empty / brand: small substrate work next.
- pattern / format / content: STOP-AND-ESCALATE candidates per S9
  Slice 2.5 brief; require regex-primitive substrate-fact-introduction
  (Q-Regex-Primitive) that has not landed. Will surface concrete STOP
  when reached.

Bootstrap snapshots regenerated; parse-corpus manifest refreshed.

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

* fix(v3): Slice 2.5 — Bare predicate rejects zero-arg-call form

Codex BLOCKING inline at PR #1846 src/v3/compiler/src/lower.rs:895:
Bare predicate validation conflated "no arguments" with "no argument
list" — `gt_zero()` (zero-arg Call) was accepted as Bare alongside
the canonical bare-ident `gt_zero` (Var) form.

Tighten Bare arg-shape contract to accept ONLY `SurfaceExpr::Var`.
Explicit empty call list `gt_zero()` now produces fail-closed
`Diagnostic::ResolveError` with message naming the canonical form.

Cementing test added:
`test_bare_predicate_with_empty_call_args_fails_closed`.

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

* WIP: proud-lynx-311

* chore(v3): Slice 2.5 — defer non_empty/brand body synthesis (discharge cascade)

Attempted non_empty + brand body synthesis exposed a discharge cascade
in scalar_literal_requires_refinement_discharge: any non-placeholder
refinement is treated as needing static discharge, but the existing
infrastructure cannot evaluate `subject != ""` (non_empty) or `true`
(brand) against scalar data literals.

Result: bootstrap regen emits 18+ spurious "scalar literal does not
satisfy `where` refinement" diagnostics for data declarations whose
fields are typed as branded/non-empty carriers (e.g.
`LensRegistryEntry.name: NonEmptyStr` matches `name: "lower_helpers"`
literal, which DOES satisfy the predicate but the lowerer can't
evaluate that statically yet).

Reverts the non_empty + brand body synthesis from this commit; both
predicates fall through to placeholder until the discharge mechanism
gets the ability to evaluate trivial-true and string-non-empty
predicates against scalar literals at lower-time.

Threads `_carrier_chain` parameter through `synthesize_predicate_body`
for forward compatibility — the parameter is unused now but will be
needed when non_empty / brand discharge lands.

Doc-comment updated to surface the cascade as STOP-AND-ESCALATE
candidate alongside the regex-primitive gap. Will compose a unified
STOP packet to Substrate Mgr / Director surfacing both blockers
together as the boundary for further Rung 3 progress.

Tests: all 8 cementing tests pass. Bootstrap snapshots regenerated
(0 ResolveErrors emitted).

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

* WIP: proud-lynx-311

* fix(v3): Slice 2.5 — disable range body synthesis (int-routing cascade)

CI v3 failure on `5f3c40c3a` exposed: `range` body synthesis breaks
`int_literal_cardinality_test::let_annotated_uint8_*` tests. With
synthesis enabled, `let x: UInt8 = 5` resolves to `Int` instead of
`UInt8` — the synthesized refinement bodies for the existing
types.dag Int-where-range declarations (RetryCount, HttpStatus,
Port, EpochMs, Duration, Milliseconds, Seconds) cascade through
the `integer_routing_witness_walk` path used by int-literal
narrowing.

Bisected: `gt_zero` synthesis alone passes all tests; adding `range`
synthesis breaks UInt8 narrowing.

Disables `range` body synthesis (literal `if false` guard) pending
investigation of the cascade path. `gt_zero` body synthesis stands.
The cementing test for range body lowering is replaced with a
placeholder-cementing test (range still validates carrier + arg
shape; body synthesis is just deferred).

Surfacing as STOP-AND-ESCALATE substrate-extension question per
S9 Slice 2.5 brief. Integer-routing needs to be insensitive to
refinement-body declarations on Int-derived aliases before `range`
body synthesis can re-enable.

All 11 cementing + UInt8-narrowing tests pass.

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

* feat(v3): Slice 2.5 Option A revised — pattern/format/content removed from registry

Director Option A revised RATIFIED at gunbc#828 issuecomment-4392245968
(post Substrate Mgr 4-sub-reading framing at gunbc#1739
issuecomment-4392050708 + concrete sts_endpoint regression case).

Pattern / format / content predicates are STRUCTURALLY ABSENT from
the predicate registry — not pending-with-placeholder, not
named-but-not-checked, not deferred-completion-bridge. User-code
`where pattern(...)` / `where format(...)` / `where content(...)`
falls through to live resolution and surfaces
`Diagnostic::ResolveError` naming Q-Regex-Primitive as the unblock
substrate-fact-introduction follow-on.

Per `feedback_construction_over_ratchets`: Q-Regex-Primitive needs
its own substrate-fact-introduction brief + worker pin + Director
ratification cycle, not bolted onto Slice 2.5.

Per `feedback_modeling_inversion_and_paydown_flow`: types.dag's
existing pattern/format/content refinements were placeholder-only
(PB-1 shim absorbed them; no actual content check fired).
Removing the where-clauses is the honest disposition — admitting
the type ratchet wasn't structurally enforcing anything anyway.

### Changes

`src/v3/compiler/src/lower.rs`:
- `KNOWN_PREDICATES` registry trimmed: pattern/format/content removed.
  Remaining: range / non_empty / brand / gt_zero (4 predicates).
- `PredicateArgShape` enum: `SingleIdentOrStringLiteral` and
  `SingleVariantIdent` variants removed (only used by format/content).

`dsl/std/types.dag` — 11 declarations migrated:
- `CommitSha`, `Sha256`, `Email`, `Url`, `SemVer`, `Timestamp`,
  `ServiceAccountEmail`, `MimeType`: dropped `where pattern(...)`.
- `GistId`: dropped `where format(uuid)`.
- `TextFilePath`, `BinaryFilePath`: dropped `where content(...)`.
- `GcpProjectId`: dropped pattern half of combined predicate; kept
  non_empty (registry-tracked, fail-closed for malformed args).

Each migrated declaration carries an inline comment receipt with
the original where-clause text for restoration when Q-Regex-Primitive
lands.

`sts_endpoint: Url = "https://..."` (extdeps/cloud/gcp/sts.dag:53):
no separate migration needed — Url's where-clause drop means String
is the underlying carrier; scalar literal compiles.

PB-1 shim FULLY RETIRED (Director hard scope bar #3 holds). No
file-path-special-case branch.

Bootstrap snapshots regenerated (0 ResolveErrors). Parse-corpus
manifest refreshed. fmt clean; clippy clean. 13 cementing tests
pass (incl. the previously-broken UInt8 narrowing tests).

Remaining work (separate from this commit, still in slice scope):
- Gap 1 discharge mechanism for non_empty / brand body synthesis
- Gap 3 int-routing cascade fix for range body synthesis
- non_empty / brand / range bodies synthesize once gaps land

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

* test(v3): Slice 2.5 — cement pattern/format/content registry-absence fail-closed

Per Substrate Mgr Phase 9 (gunbc#1739 issuecomment-4392408663):
add a behavior test that locks the user-code fail-closed semantics
for pattern/format/content where-clauses. After Option A revised
(Director RATIFIED at gunbc#828 issuecomment-4392245968), these
predicates are STRUCTURALLY ABSENT from KNOWN_PREDICATES; any
where-clause using them must surface a Diagnostic when authored.

Test exercises 3 user-code scenarios:
- `type P = Int where pattern("^x")` — registered name absent
- `type F = Int where format(uuid)` — registered name absent
- `type C = Int where content(Text)` — registered name absent

Each must produce at least one diagnostic (cached_compile_any
for diagnostic readback).

Note on test fixture choice: the v3 parser accepts `where` after
some bare-RHS-aliasable carriers (`Int`) but rejects it after
others (`String`, `FilePath`) at parse time, independent of
predicate-registry semantics. Test uses `Int` as the base so the
parse path doesn't pre-empt the resolve-time registry check that
this test is locking.

12 tests pass.

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

* docs(v3): Slice 2.5 — fix stale lower_type_alias_refinements_phase rustdoc

Cursor APPROVE_WITH_COMMENTS at PR #1846 (`a7a2e3ca`): the rustdoc
on `lower_type_alias_refinements_phase` still listed `pattern` and
`format` as registered names that lower to placeholders, and
over-generalized "placeholder" for ALL registered names (even
`gt_zero` which now synthesizes a real body).

Rewrites the doc to match landed behavior post Option A revised:
- Three-way dispatch (Registered+synthesizable / Registered+placeholder
  / Registered-but-malformed / Unregistered)
- Pattern/format/content explicitly STRUCTURALLY ABSENT, not registered
- gt_zero gets real body via synthesis; range/non_empty/brand still
  placeholder pending Gap 1 / Gap 3
- Dissolution scope updated to name Gap 1 (discharge) + Gap 3 (routing)

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

* fix(v3): Slice 2.5 — update pre-Option-A test to current registry surface

CI v3 failure on `3cd5eb47e`: existing test
`test_db11_type_alias_where_accepts_types_dag_constraint_spellings`
exercised `type S = String where non_empty, pattern("x")` — the
combined `non_empty, pattern(...)` spelling no longer compiles
cleanly because `pattern` is structurally absent from the registry
post Option A revised.

Reduces the test corpus to the alias-friendly `Int where range(min: 1)`
shape (the parse-coverage shape this test was originally locking;
String-base where-clauses hit a parser quirk independent of registry
semantics, and the predicate-specific cement tests below cover the
full surface). Comment explains the migration receipt.

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

* Merge remote-tracking branch 'origin/main' into session/proud-lynx-311

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

* feat(v3): Slice 2.5 Path (a) Rung 3 — brand body synthesis lowers real predicate

Director Path 2 ratification at gunbc#828 issuecomment-4391985613 lists
`brand` body synthesis among the 4 predicates that must body-synthesize
in this slice. Lowering rule:
  brand("X") → subject == subject (reflexive Comparison(Eq))

Reflexive equality is semantically `true` for every carrier value (the
brand predicate imposes no value-level constraint — branded types are
nominal-only). The body REFERENCES the bind subject so the
`unused_parameters` lens self-analysis test doesn't flag the synthesized
refinement param as unused. Plain `Literal(Bool(true))` would discharge
correctly but would surface as 14 unused-param findings (one per branded
type in dsl/std/types.dag).

Substrate-state grep confirmed no scalar `data` declarations use branded
carriers (PathSegment / IntentId / IssueId / etc. are field types in
record types, never scalar literal bases) — Gap 1 discharge cascade
does not fire for branded types in the existing corpus.

Test coverage:
- `test_brand_lowers_to_real_refinement_body_not_placeholder` —
  `type B = NonEmptyStr where brand("B")` produces a real
  `Declaration::refinement` (no `<registered predicate not lowered: …>`
  label).

Result: 2 of 4 in-scope predicates body-synthesized (gt_zero + brand).
non_empty / range still pending (Gap 1 discharge mechanism + Gap 3
int-routing cascade).

All 835 v3 integration tests pass.

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

* WIP: proud-lynx-311

* fix(v3): brand cement test uses Int carrier (parser quirk on String where)

The parser rejects `where` after String/NonEmptyStr/FilePath bare-RHS
aliases independent of registry semantics. Test uses `Int where brand("B")`
instead — Int is in brand's allowed-carriers list and parses cleanly.

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

* feat(v3): Slice 2.5 — mixed-clause fail-closed; revert brand body synthesis

openai-pro REQUEST_CHANGES at PR #1846 (`79c4da09`): a `where`-clause
that combines a body-synthesized predicate (e.g. `gt_zero`) with a
placeholder-only predicate (e.g. `range`) routed both into a single
generic placeholder, silently weakening the synthesized fact. P3
fail-closed / facts-flow-forward violation.

Restructures `registered_predicate_synthesized_body` to return a
`BodySynthOutcome` (AllSynthesized / AllPlaceholder / Mixed) per
clause. The call site in `lower_type_alias_refinements_phase` matches
on the outcome:
- AllSynthesized: live predicate declaration via
  build_refinement_predicate_declaration.
- AllPlaceholder: alloc_registered_refinement_placeholder (status quo).
- Mixed: emit Diagnostic::ResolveError naming the predicates so the
  user knows which combination needs separation; the synthesized fact
  is NOT silently merged into a placeholder.

Cementing test:
`test_mixed_synthesizable_and_placeholder_predicates_fails_closed` —
`type M = Nat where gt_zero, range(max: 10)` surfaces a diagnostic.

### Brand body synthesis reverted

Brand body synthesis (landed at `c999493cb` as
`subject == subject`) is reverted to placeholder for this slice
because it caused the existing types.dag declarations:
  Milliseconds = Int where range(min: 0), brand("Milliseconds")
  Seconds      = Int where range(min: 0), brand("Seconds")
to mix synthesizable brand with placeholder-only range, tripping
the new Mixed-fail-closed path. Brand re-enables when (a) per-leaf
refinement representation lands so mixed clauses preserve each
fact, OR (b) range body synthesis lands and the And combination is
uniformly synthesizable.

Updated test:
`test_brand_takes_placeholder_pending_mixed_clause_fix` (replaces
`test_brand_lowers_to_real_refinement_body_not_placeholder`).

Bootstrap snapshots regenerated. 17 cementing tests pass.

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

* fix(v3): Slice 2.5 — Practice 4 enum classification + gt_zero body-shape assertion

openai-pro REQUEST_CHANGES at PR #1846 (`e1ec3d1a`):

1. Adds 🟢 TERMINAL classification per `docs/modeling-discipline.md` Practice
   4 to the three new lowerer-internal coproducts:
   - `PredicateArgShape` (parsed-arg shape contract per registered predicate)
   - `PredicateValidation` (registered-validation outcome)
   - `BodySynthOutcome` (per-clause body-synthesis outcome)

   Each is anchored as an implementation-layer terminal (not a scaffold to
   dissolve). Variant set grows when a new predicate enrolls or when the
   registry's structural shape extends, but no variant exists in
   "scaffold-pending-dissolution" status.

2. Strengthens `test_gt_zero_lowers_to_real_refinement_body_not_placeholder`
   to assert the actual published body shape, not just "non-placeholder":
   - Refinement is `Arrow`-shaped with `ArrowBody::UserDefined(bind_id)`.
   - Bind's value port is produced by a `Transform` with target
     `Operator(Comparison(Gt))`.
   - One of the Gt operator's input ports is fed by a `Value` node with
     `LiteralBits::Int(0)`.

   A regression that lowered `gt_zero` to `subject == subject`, `Bool(true)`,
   or any other real-but-wrong body would have satisfied the prior test;
   this one fails-closed on body-shape divergence — `PositiveInt`'s
   substrate contract requires exactly `> 0`.

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

* feat(v3): Slice 2.5 — range body synthesis re-enabled (Gap 3 resolved)

Gap 3 root cause was test fixture brittleness, not a substrate issue.
`int_literal_cardinality_test::let_annotated_uint8_*` used
`find_map(Value(LiteralBits::Int(N)))` to find user literals — once
range body synthesis lit up, types.dag declarations like
`RetryCount = Int where range(min: 1, max: 5)` produced additional
`Value(Int(5))` nodes that the test matched first. Resolution: filter
the literal lookup by `span.file` to find the user's literal.

Also migrates `Milliseconds` / `Seconds` in `dsl/std/types.dag` to drop
the `brand("…")` half of their combined `range(min: 0), brand(…)`
clause. Brand body synthesis is held at placeholder pending per-leaf
refinement representation (separate substrate work); leaving the
combined clause active triggers the openai-pro mixed-fail-closed
diagnostic. Inline restoration receipt names the per-leaf-refinement
follow-on as the trigger to restore brand half.

Mixed-clause cementing test
(`test_mixed_synthesizable_and_placeholder_predicates_fails_closed`)
updated to use `gt_zero, brand(...)` — both registered, both allowed
over Nat, brand still placeholder — so the Mixed path is exercised
with a still-realistic combination.

range cementing test renamed
`test_range_takes_placeholder_pending_routing_fix` →
`test_range_lowers_to_real_refinement_body_not_placeholder`. Test
shape unchanged, asserts non-placeholder for all 3 range arities
(min-only, max-only, both).

`assert_int_value_port_resolves_to_uint8_in_file` helper added with
optional `span_file` filter; existing call sites preserve prior
behavior; the in-range narrowing test passes the filter.

Result: 3 of 4 in-scope predicates body-synthesize (gt_zero / range +
new) — brand stays at placeholder until per-leaf rep lands. 837 v3
integration tests pass; clippy clean.

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

* fix(v3): Slice 2.5 — nested-And aggregation collects per-leaf names recursively

openai-pro REQUEST_CHANGES at PR #1846 (`4a42cb1f`):
`registered_predicate_synthesized_body` aggregated per-clause leaf names
via `leaf_predicate_name(arg)` directly — but that returns `None` for an
`Operator(And)` arg (the subtree is not itself a leaf). Net effect: a
clause like `gt_zero, gt_zero, brand("X")` parsing as
`(gt_zero, gt_zero), brand("X")` would aggregate only `brand` as an
unsynthesized leaf name; `synthesized_names` stayed empty even though
the inner subtree returned `AllSynthesized`. Outer aggregation then
classified the whole clause as `AllPlaceholder` instead of `Mixed`,
silently collapsing the nested gt_zero-derived facts into a single
placeholder. P3 fail-closed / facts-flow-forward violation.

Fix: `collect_leaf_predicate_names(expr)` recurses through `And`
subtrees so every leaf name reaches the outer aggregator. Replaces
the call to `leaf_predicate_name(arg)` at the AllSynthesized /
AllPlaceholder branches.

Cementing test:
`test_nested_and_with_placeholder_leaf_fails_closed` —
`type N = Nat where gt_zero, gt_zero, brand("X")` surfaces a Mixed
diagnostic and does not collapse into a placeholder.

10 cementing tests pass.

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 May 7, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cde): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cde):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b986):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b986): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a0704; the review citation was against
the pre-fix sha 2072b986.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d92459423: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217e) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d40):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f34f.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd4818 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd06 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f007

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a66 prior to
review; reviewer was on sha a462f007 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99f2

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f4):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f4 was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce0418 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a56:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

* docs(briefs): S9 Slice 2.5 — predicate-registry + PB-1 shim retirement (Path 3 RATIFIED)

Director ratified Path 3 at gunbc#828 #issuecomment-4390333451
post proud-lynx-311's pre-flight DFS at gunbc#1746 #issuecomment-4390253616.

Brief reframes Slice 2.5 from S-sized (primitive + 1 consumer) to
L-sized (predicate registry + PB-1 shim retirement). 5 deliverables:
1. gt_zero primitive predicate
2. Predicate registry infrastructure (resolver-side substrate-fact-introduction)
3. PB-1 shim retirement (span.file=='dsl/std/types.dag' special case dissolves)
4. Migration of existing types.dag predicates (range, pattern, etc.)
5. PositiveInt = Refined<Nat, gt_zero> consumer update

Per Director hard scope bars: no parallel predicate-resolution path;
no per-call-site special-casing; PB-1 shim retirement non-negotiable
in same slice. Single PR per Path 3 RATIFIED.

Discipline anchors: feedback_construction_over_ratchets (PB-1 shim
is bridge); feedback_dissolve_bridges (registry is structural fix);
feedback_no_textual_enforcement_bridges (file-path special-case is
anti-pattern shape); P1 substrate-fact-introduction procedure.

Worker pin proud-lynx-311 — Director pre-cleared on pre-flight DFS
context. PR #1840 (partial Slice 2 — NonNegativeInt = Nat) MERGED
at 16:54Z; Slice 2.5 dispatchable immediately on this brief landing.

* docs(briefs): Slice 2.5 audit receipt — Mgr independent grep parallel-verifies worker DFS

Codex BLOCKING review on PR #1845 sha 2d230949 flagged: external PR
receipt absorbed as live substrate state without re-grepping local
std declarations at brief authoring time. Authority receipt §1
cited proud-lynx-311's pre-flight DFS as authority but didn't
record Mgr-side independent verification.

Updated audit receipt §1 + §4 to record Mgr's independent grep at
HEAD as parallel verification:
- gt_zero zero matches in dsl/std/ + src/v3/ (verified)
- NonNegativeInt = Nat at dsl/std/integer.dag:133 (#1840 land)
- PositiveInt = Int where range(min: 1) at dsl/std/types.dag:255
- PB-1 shim doc-block confirms bridge-text framing
- Predicate registry confirmed not present

Worker DFS remains the dispatch-time discipline (substrate-state
grep at dispatch); Mgr's independent grep is parallel verification,
not substitute. Per Director's pattern note at gunbc#828
#issuecomment-4390199218 + #issuecomment-4390333451: dispatch-packet
authoring discipline includes Mgr-side substrate-state-grep, not
just relay of worker findings.

* docs(briefs): Slice 2.5 brief — Int extensibility scope-bound; lower.rs cites anchored

openai-pro REQUEST_CHANGES on PR #1845 sha 2d230949 flagged 2 issues:

BLOCKING — P1 modeling faithfulness / substrate scope leak:
`gt_zero` Int-side extensibility was left to 'worker judgment if
generalization cheap'. Per feedback_construction_over_ratchets:
don't speculatively extend predicate-carrier compatibility ahead
of named consumer demand. Reframed to **EXPLICITLY OUT-OF-SCOPE**
for Slice 2.5; Nat-only registration. Future Int-side consumer
surfaces as separate substrate-fact-introduction (P1 procedure)
brief with own consumer-demand receipt.

NON-BLOCKING — citation discipline self-violation:
3 instances of bare `lower.rs:821-835` line-range citations
contradict the brief's own 'no bare :NNN' requirement at line 211.
Converted to function-name anchored form:
`src/v3/compiler/src/lower.rs` (`lower_type_alias_refinements_phase` doc-block).

Both findings absorbed; no parallel scope ambiguity remains;
brief now self-consistent on citation discipline.

* WIP: R3 Substrate

* docs(briefs): Slice 2.5 brief — audit-receipt cites converted to declaration-name anchors

cursor APPROVE_WITH_COMMENTS on PR #1845 sha ebf6ac12 noted citation
self-inconsistency: audit-receipt section §1 + §4 used bare
`dsl/std/integer.dag:133` and `dsl/std/types.dag:255` line-number
pins despite the brief's own no-bare-:NNN rule.

Converted to declaration-name-anchored form:
- 'declaration named NonNegativeInt' (with reproducible grep command)
- 'declaration named PositiveInt' (with reproducible grep command)
- 'lower_type_alias_refinements_phase doc-block' for PB-1 location

Brief now fully self-consistent on its own citation discipline.
Verified zero remaining .dag:NNN / .rs:NNN / .md:NNN bare cites.

* docs(briefs): Slice 2.5 brief — Path (a) RATIFIED carrier+argument contract verification

Director Path (a) RATIFIED at gunbc#828 #issuecomment-4390760353
(triage) + #issuecomment-4390794121 (convergence ack):
predicate-body lowering with carrier+argument contract
verification at lower-time IN SAME SLICE. Placeholder semantics
REMOVED from registry path.

Codex REQUEST_CHANGES surfaced that registered-predicate-without-
contract = silent acceptance per feedback_fail_closed_discipline.
Brief reframe absorbs Path (a):

Hard scope bar #5 added:
- Same-slice carrier+argument-contract verification
- Mismatched carrier OR malformed argument → Diagnostic::ResolveError
- No 'named but not checked' path remains

Scope expansion section added (L → XL):
- Predicate-body lowering for all 7 registered predicates
- Per-predicate arg-shape validation
- Multi-session work acknowledged
- Carrier-check at 788d6acb4 retained; predicate-body builds on top

Acceptance bullets updated: gt_zero with arg-shape validation +
all 7 predicates with carrier+argument contract verification.

Director-pinned brief-authoring discipline: dissolution trigger
named in a brief authored as substrate-fact-introduction must
specify same-slice acceptance, not deferred follow-up. Otherwise
the brief encodes 'land bridge + defer dissolution' anti-pattern,
the same shape feedback_construction_over_ratchets warns against
at implementation layer applied at brief authoring layer.

This is the 11th miss this session — but the pattern surfacing it
(direct sweep + Codex REQUEST_CHANGES + Director ratification)
produces structural fixes that prevent the next miss class. Brief
revision is the structural recovery.

* docs(briefs): Slice 2.5 brief — Path 2 RATIFIED (Gap 1 discharge + Q-Regex carve-out)

Director Path 2 RATIFIED at gunbc#828 #issuecomment-4391985613
post Rung 3 STOP at gunbc#1746 #issuecomment-4391946213.

Path 2 narrowing of Path (a):
- gt_zero + range body synthesis already landed (5f3c40c3a)
- Gap 1 discharge mechanism: extends scalar-literal predicate
  evaluation at lower-time. L-class; lands SAME SLICE per
  same-slice-dissolution discipline
- non_empty + brand body synthesis: lands via Gap 1 discharge
- pattern / format / content: fail-closed-with-named-dep at
  user-code authoring layer (Diagnostic::ResolveError naming
  Q-Regex-Primitive). NOT placeholder; structural rejection
- PB-1 shim FULLY RETIRED per hard scope bar #3
- Q-Regex-Primitive carved as follow-on substrate-fact-introduction
  (XL substrate; not pre-authored per feedback_construction_over_ratchets)

Acceptance updated:
- 4 of 7 body-synthesized in same slice
- 3 of 7 fail-closed-with-named-dep (no placeholder semantics)
- Gap 1 discharge mechanism landed (no partial implementation)

Worker disposition: proud-lynx-311 continues Rung 3 with Gap 1
implementation + non_empty/brand body synthesis + pattern/format/
content fail-closed-with-named-dep diagnostic.

* docs(briefs): S9 Phase-1 Step 3 emission entries — Tier-1 brief authoring (1/5)

First Tier-1 brief landing post Director auto-nudge on assignment
#1858. Authored against Q-MachineConstraint sub-decisions ratified
shape now landed at #1856:

- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>> → Rust i32/i64/i128
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>> → Rust u32/u64/u128
- 6 concrete instantiations (≥3 minimum per sub-decision 5)
- Cross-program handoff to Grounding Mgr (#1745) for G2 emission consumption
- numeric_construction_demonstration Acceptance bullet (Int<32> round-trip);
  Real<64> half deferred to S9 Phase 2 / S8 Float cascade

Brief authored with substrate-state-grep discipline + same-slice-
dissolution discipline (no deferred trigger; demonstration in same
slice or explicitly carved). 5-question authority audit completed
in brief body.

Worker pin proud-lynx-311 (S9 holds); brief queues post-Slice-2.5
completion as natural follow-on.

Tier-1 brief queue progress:
- 1/5 authored (this brief)
- 4 remaining: S9 Phase-2 Float coordination; T-LBP complexity
  cementing; T-LBP cost cementing; S3 Phase-2 parser-grammar

* docs(briefs): S3 Phase-2 parser-grammar surface — Tier-1 brief 2/5

Authored per Director freed-pool pressure at gunbc#828
#issuecomment-4392095857 + Tier-1 brief-queue commitment.

Brief covers parser-grammar surface for Compose<Algebra, MachineConstraint>
interaction syntax post-#1856 (Phase-1 carrier slice landed):

- Phase 2.1: Parser surface per ratified Q-MachineConstraint-Grammar-Shape
- Phase 2.2: Bootstrap demonstrator with >=3 algebra*machine-axis pairs
- Phase 2.3: Class 1 5-criteria Pass receipt (criteria 1-4; criterion 5
  v2-oracle parity may carve)
- Phase 2.4: numeric_construction_demonstration co-receipt with S9 Phase-1
  Step 3 emission entries brief

Director ratification HOLDS on grammar bikeshed:
- Candidate A: Int @ Width<32> (annotation form)
- Candidate B: Int with MachineWidth<32> (with-form)
- Candidate C: Int<32> (positional generic — fits existing convention)
- Candidate D: Compose<AbelianGroup, MachineWidth<32>> (no parser change;
  type aliases provide convenience names)

Worker pin valiant-ant-72 holds (S3 Phase-1 precedent owner); freed-pool
until Director ratifies grammar shape.

Tier-1 brief queue progress: 2/5 authored (this brief + S9 Phase-1 Step 3).
Remaining: S9 Phase-2 Float coordination; T-LBP complexity cementing;
T-LBP cost cementing.

* docs(briefs): S3 Phase-2 brief — fix internal contradiction on Class 1 closure scope

Codex BLOCKING review on PR #1889 sha ec609b4a flagged real
contradiction:

- Provenance section claimed '5-criteria Pass closed' (line 229)
- Phase 2.3 said 'criterion 5 may queue separately' (line 154)
- STOP-AND-ESCALATE bullet 1 ratified 4-of-5 carve-out (line 181)

Updated Provenance to consistently state criteria 1-4 close in this
slice; criterion 5 (v2-oracle parity) cementing test may carve to
separate slice. Single 4-of-5 framing throughout. INVARIANTS.md
'Documentation Describes Live State' satisfied.

Per feedback_construction_over_ratchets: don't claim closure that
isn't structurally complete. 4-of-5 + named carve is the honest
shape; 5/5 only on cementing-test land.

* briefs: cite Q-MachineConstraint sub-decision 6 supersession of T-V2-Retirement gate

Address Codex BLOCKING #1 on PR #1889: S3 Phase-2 + S9 Phase-1 Step 3
worker briefs consumed Q-MachineConstraint ratification without
reconciling the historical T-V2-Retirement-landing-first cascade
gate. Add an explicit precondition-framing section to each brief
citing Director ratification at gunbc#828 #issuecomment-4385530115
(Q-MachineConstraint sub-decision 6 UNIVERSAL substrate posture)
as the implicit supersession; PR #1856 landing without T-V2-Retirement
first confirms supersession in practice. STOP-AND-ESCALATE if
supersession contested at dispatch.

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

* slice-2.5 brief: mark pattern/format/content Path 2 acceptance pending Director ratification

Address Codex BLOCKING #2 on PR #1889: Path 2 deliverable + acceptance
language asserted fail-closed-with-named-dep semantics for
pattern/format/content, but Director rejected that shape (Option 4)
at gunbc#828 #issuecomment-4392.... Options A (consumer migration),
B (Q-Regex bundled into slice), C (typed fail-closed exception with
named trigger) await ratification per migration-cost catalog at
#issuecomment-4392116215. Brief now flags those three predicates +
PB-1 shim retirement coupling as PENDING DIRECTOR RATIFICATION; worker
STOP-AND-ESCALATE if dispatched pre-ratification.

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

* slice-2.5 brief: reconcile PB-1 retirement shape with Options A/B/C gating

Address Codex BLOCKING #4 on PR #1889: prior text claimed "PB-1
FULLY RETIRED" while preceding bullet said retirement gates on
chosen path — internal contradiction. Reframe to gate the
pattern/format/content half of shim retirement on Options A/B/C
ratification while preserving Director hard scope bar #3 binding
on the gt_zero/range/non_empty/brand half (cleanly retired via
Gap 1). No path leaves PB-1 alive as parallel-authority shim on
slice landing.

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

* briefs: tier-1 3/5 — S9 Phase-2 Float emission coordination worker brief

Tier-1 brief queue progress (3/5): S9 Phase-2 Float<N> emission
entries (Float<32>/Float<64> via Compose<ApproximateField<Real>,
MachineWidth<N>>) + Real<64> round-trip demonstration completing
§1.8 #67 Acceptance bullet. Coordination/synthesis brief — gates on
both S8 (ApproximateField<F> + Real base carrier) and S9 Phase-1
Step 3 (Int<N>/UInt<N> emission-entry pattern) landing before
dispatch. Inherits T-V2-Retirement supersession framing from
Phase-1 Step 3. STOP-AND-ESCALATE on missing preconditions or
unratified Q-ApproximateField-Axiom-Set.

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

* briefs: ledger advancement honesty (PRODUCER_LANDED not CONSUMER_LANDED) + restore exact issuecomment IDs

Address openai-pro BLOCKING + NON-BLOCKING findings on PR #1889:

BLOCKING (boundary discipline / same-PR consumer): S9 Phase-1 Step 3
+ Phase-2 Float briefs claimed DECLARED → CONSUMER_LANDED upon merge
while only requiring cross-program handoff receipt to Grounding G2.
For target-primitive substrate entries, handoff is not landed-consumer
proof. Reframed both briefs to advance rows DECLARED → PRODUCER_LANDED;
Grounding G2 follow-on PR (per-pair lowering rules + emitted-Rust-
primitive verification) advances to CONSUMER_LANDED. Default
split-PR producer-then-consumer per bundled-scope discipline ratified
at gunbc#1739 #issuecomment-4392225548 (parallel infrastructure
DISALLOWED in same PR).

NON-BLOCKING (citation hygiene): replaced ellipsized
"#issuecomment-4392..." stubs in slice-2.5 brief with the exact
Director Option-4-rejection comment ID #issuecomment-4392081719 so
the ratification claim is mechanically checkable.

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

* slice-2.5 brief: absorb Director Option A revised RATIFICATION (final shape)

Director ratified Option A revised at gunbc#1739 #issuecomment-4392329709
(2026-05-06). Final brief shape:
- 4 predicates body-synthesize via Gap 1 (gt_zero / range / non_empty
  / brand)
- pattern / format / content STRUCTURALLY ABSENT from registry (not
  pending-with-placeholder); user-code where-clause produces
  Diagnostic::ResolveError naming Q-Regex-Primitive as separate
  substrate-fact-introduction follow-on
- ~12 types.dag refined-type declarations migrate to drop
  pattern/format/content where-clauses with inline-comment receipts
  pointing to Q-Regex restoration path; 1 extdep (sts_endpoint)
  adapts as needed
- PB-1 shim FULLY RETIRED — no exception, no preserved branch
- Q-Regex-Primitive as separate brief / worker pin / Director
  ratification cycle when concretely needed (Option B XXL bundling
  REJECTED)

Phase ordering rewritten to absorb migration as explicit phase
between predicate enrollment and shim retirement. proud-lynx-311
re-dispatches against revised brief; PR #1846 absorbs additional
scope per Director directive.

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

* s3-phase-2 brief: absorb Q-MC sub-decision 3 ratification (grammar shape was already answered)

Director observation at gunbc#1739 #issuecomment-4392382517: Q-MC
sub-decision 3 (Brian directive 2026-05-06 at gunbc#828
#issuecomment-4385530115) already ratified the grammar shape —
`Int<N>` user surface desugars to `Compose<Int, MachineWidth<N>>`
substrate parametrically. Earlier brief HOLD framing was redundant.

Brief revised:
- Replace bikeshed section with Q-MC sub-decision 3 quotation +
  surface/substrate framing (Candidate C user-facing; Candidate D
  substrate elaboration; A/B rejected per Director assessment)
- Phase 2.1 parser surface scoped to numeric-literal-position
  recognition + parametric desugar
- Front-matter status: dispatchable per ratification (not HOLD)
- Provenance: ratification-state-grep discipline pin folded into
  standing dispatch-checklist

valiant-ant-72 dispatch fires immediately per Director directive.

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

* briefs: remove truncated issuecomment-4392... stub from S9 Phase-1 Step 3 provenance

Address cursor NON-BLOCKING finding on PR #1889 sha 94292e48: line 144
truncated issuecomment ID. The originally-intended Director auto-nudge
comment doesn't map cleanly to a single ID, so replace with the
standing assignment reference (gunbc#1858) which is unambiguous.

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

* briefs: tier-1 4/5 + 5/5 — T-LBP complexity + cost lens cementing-test worker briefs

Tier-1 brief queue completes (4/5 + 5/5):

4/5 — T-LBP complexity-lens cementing test (§1.8 rows #79 + #87
first entry). Consumer-side cementing test against frozen v2-oracle
snapshot; producer-side Lens<Complexity> instance is upstream
precondition. Per Q-Lens-Behavioral-Parity-R3-Closeability option
(b) RATIFIED at gunbc#828 #issuecomment-4385329180 — T-LBP narrowed
to complexity + cost lenses only.

5/5 — T-LBP cost-lens cementing test + cost_lens_demonstration
(§1.8 rows #80 + #70 + #87 second entry). Absorbs row #70 demo
naturally — same source corpus + lens run; demonstration adds
observable-cost-bound assertions on top of parity check. ≥2
algebra-instances composed + ≥1 recursive call required per row #70.

Both briefs gate on:
- T-LBP per-lens substrate-producer brief landing (Lens<C> instance)
- Frozen v2-oracle snapshot capture (separate brief, pre-v2-retirement)
- DO NOT capture-against-live-oracle (violates
  v2_oracle_no_remaining_test_consumers)
- DO NOT bundle producer/snapshot/algebra-instance authoring per
  Director bundled-scope ratification at gunbc#1739
  #issuecomment-4392225548

Tier-1 5/5 complete. Worker pins assigned at dispatch time once
preconditions land.

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

* canvas: emission-provenance substrate shape disposition (supersedes PR #1902 PROPOSAL)

Substrate Mgr canvas authored post-codex BLOCKING + PM disposition
handoff at gunbc#846 #issuecomment-4392510255.

Two real substrate-shape questions stacked:

Q1 (category mismatch): Lens<C>.read is per-Behavior; emission
provenance is per-emitted-line. 4 options surfaced — (a) per-Behavior
Lens-compatible / (b) per-line instrumentation NOT a lens / (c)
withdraw + re-canvas / (d) Mgr-surface both substrates distinct.
Mgr recommends (d) if visualization is load-bearing; (a) suffices
if per-Behavior aggregate works for the slide. Brian-channel
sub-question surfaced.

Q2 (fold-rule enumerability): T-Rule-Enumeration substrate-fact-
introduction is prerequisite for every Q1 path (rust_target.rs uses
inline &str template names; rules not enumerable). Mgr recommends
parallel-dispatch with Q1 deliberation — satisfies Brian's ASAP
framing while shape ratifies.

Q3 (§1.8 ledger retarget): #89 already taken by T-LAS; new cluster
location follows Q1 disposition.

Director ratification ask + Brian-channel sub-question surfaced.
PR #1902 close-superseded post-ratification.

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

* briefs: reconcile Compose<...> slot-1 spellings to algebraic-concept names per Q-MC sub-decision 3

Address cursor NON-BLOCKING on PR #1889 sha 2b49b30f: S3 Phase-2
brief mixed Compose<AbelianGroup, ...> with Compose<Int, ...>; S9
Phase-1 Step 3 used Compose<AbelianGroup, ...> + Compose<CommutativeSemiring,
...>; S9 Phase-2 used Compose<ApproximateField<Real>, ...>. All wrong
per Q-MC sub-decision 3 critical correction at gunbc#828
#issuecomment-4385530115:

  "prior phrasing Compose<AbelianGroup, MachineWidth<64>> was wrong
  — AbelianGroup<T> is a witness shape over carrier T, not a carrier
  constructor; bare AbelianGroup in slot-1 composes witness rather
  than concept."

Slot-1 is the fully-applied algebraic-concept name:
- Int<N>  = Compose<Int,  MachineWidth<N>>   (Int = AbelianGroup<GroupCompletion<Nat>>)
- UInt<N> = Compose<UInt, MachineWidth<N>>   (UInt = CommutativeSemiring<Nat>)
- Real<N> = Compose<Real, MachineWidth<N>>   (Real = ApproximateField<Rational>)

Phase-2 Float brief also retargets user-facing surface from Float<N>
to Real<N> (Float is target-language name for the Rust primitive;
Real is the algebraic-concept name per Q-MC sub-decision 3 example).

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

* s9-p1-s3 brief: scope Deliverable 4 to producer-side verification (defer demonstration to Grounding G2)

Address Codex BLOCKING (line 82 inline + bundled review): brief
claimed end-to-end Int<32> → Rust i32 round-trip in Acceptance
while Deliverable 3 said lowering rules belong to Grounding G2
follow-on. Internal contradiction.

Reframe per Director bundled-scope discipline (gunbc#1739
#issuecomment-4392225548 — parallel infrastructure DISALLOWED
same-PR):

- Deliverable 4: producer-side substrate-axis verification only
  (type-check + carrier acceptance + bootstrap snapshot/manifest
  hold). NO end-to-end Rust emission in this PR.
- §1.8 #67 numeric_construction_demonstration receipts split:
  producer half here (entries exist), consumer half on Grounding
  G2 PR (full Int<32> → Rust i32 round-trip).
- Same-PR cross-program co-author available if Substrate Mgr
  coordinates with Grounding Mgr at dispatch; default is split.

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

* briefs: pre-author T-Rule-Enumeration substrate-fact-introduction worker brief

Pre-authored per pre-authored-brief-queue discipline; dispatch fires
on Director Q2 ratification of emission-provenance canvas at
gunbc#828 #issuecomment-4392519713.

Brief covers LangSpec emission-rule names as enumerable substrate
(rust_target.rs uses inline &str template names today; 0 hits on
RuleName/FoldRule/EmitRule across src/v3/). Two carrier shape options
(α sum-type / β named-string list) with worker DFS at dispatch
deciding shape; Practice 4 checkpoint discipline + ledger-row receipt.

Prerequisite to every Q1 path (a/b/d) — Lens<EmissionProvenance>,
per-line instrumentation, and the both-substrates option all consume
the rule-name set. Path (c) leaves substrate-unblocked-but-unconsumed.

Mgr authoring authority per PM concur at gunbc#846
#issuecomment-4392510255 / #issuecomment-4392543633 (substrate-fact-
introduction is Mgr-tier, not PM tactical authoring).

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

* t-rule-enumeration: align gate name + status to Director ratification at #4392562911

* emission-provenance lens brief: revise per Director Q1 (a) RATIFICATION

Director Q1 (a) per-Behavior Lens<C>-compatible RATIFIED at gunbc#1739
#issuecomment-4392562911 (2026-05-06); (b) instrumentation REJECTED;
(d) parallel-substrates REJECTED.

Brief revised:
- Carrier shape: Lens<List<EmissionProvenance>> per (a)
- EmissionOrigin = SubstrateDeclMirror(SourceSpan) | FoldRuleAutoEmit(EmissionRule)
  typed sum (closed; no third silent class; structural fail-closed)
- All 6 Lens<C> field bindings concrete (read/sequential/branch/iterate/validate)
- T-Rule-Enumeration named as PRECONDITION (must land first)
- §1.8 retarget under T-CostLens-Composition cluster per Director Q3
- Brian's slide visualization served by (a) projection (per-Behavior
  list flattens to per-line view at visualization layer; no parallel
  substrate needed)

Supersedes PM-authored proposal at PR #1902 (merged at 54419badf).

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

* briefs: bundled Rust-primitive-full-coverage substrate-prerequisite worker brief (Director Path A)

Author bundled substrate-prerequisite brief per Director Path A
RATIFICATION at gunbc#1739 #issuecomment-4392731264 (2026-05-06).

Three structurally-coupled gaps surfaced via Grounding loyal-stag-699
STOP at gunbc#1907 #issuecomment-4392585090 land as one bundled slice
per "necessary structural fix" exception (bundled-scope discipline):

1. IntervalInt::ExactInterval host-repr widening (α BigInt-based
   recommended; β typed-variants if α infeasible)
2. RustPrimitive structural BoundDeclaration field (replaces static
   range_min/max strings; consumes existing BoundDeclaration carrier
   StaticBound + PlatformDependent variants)
3. spec/rust.dag PlatformDependent row population for isize/usize +
   u128 row addition consuming widened ExactInterval

Closure gate: rust_primitive_full_coverage (Director-ratified name).
Worker pin: valiant-ibex-312 (freed-pool; substrate-authoring fresh;
numeric-domain-adjacent post-#1842).

Unblocks Grounding G2 Phase 2 full-coverage dispatch. G2 Phase 1
narrowed dispatch (i8-i64 + u8-u64) runs in parallel on existing
substrate; cleared at gunbc#1745 #issuecomment-4392795954.

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

* briefs: align Practice 4 classifications to GREEN/YELLOW rubric + add GREEN ledger receipts

Address codex BLOCKING on PR #1910 sha f36e1205: briefs used
PRIMITIVE/SCAFFOLD terminology that doesn't match docs/modeling-
discipline.md rubric. Per modeling-discipline.md lines 97/103/108:
the three classifications are 🟢 GREEN (terminal) / 🟡 YELLOW
(scaffold) / 🔴 RED (dissolvable-now); line 132 requires a ledger
entry if GREEN.

Replaced PRIMITIVE → GREEN, SCAFFOLD → YELLOW across all three
emission-provenance / Rust-primitive-full-coverage briefs. Added
explicit §1.8 ledger entry receipt for the GREEN classification on
EmissionOrigin (sibling row emission_origin_classification_green to
parent emission_provenance_lens_landed gate).

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

* briefs: Practice 4 terminal receipt for EmissionOrigin + bound for β scaffold

Address openai-pro BLOCKING (sha f36e1205, ran post-rubric-rename):

1. EmissionOrigin GREEN terminal classification needs documented
   attempted-dissolutions per modeling-discipline.md "no richer
   source exists" framing. Added 3 attempted dissolutions:
   - collapse to optional-pair (rejected by codex Finding 1 prior)
   - factor common richer source (orthogonal payload types prevent)
   - third arm for unattributable lines (rejected per Slice 2.5
     Option 4 placeholder anti-pattern)

2. T-Rule-Enumeration β (YELLOW) scaffold needs bound per three-part
   bridge rule. Added: allowed call sites scoped to emission code only;
   max lifetime gated on rule_name_typo_fail_closed_landed graduation;
   new emission-introspection consumers MUST author against closed-sum
   α form, not β.

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

* WIP: R3 Substrate

* briefs: address codex BLOCKING bundle (sha 2ed1046e) — record-form provenance + emit_model carrier alignment + T-Rule-Enumeration retirement flag

Three findings addressed:

1. Lens brief (Finding #1 — provenance shape conflates source vs rule
   attribution): replaced typed-sum EmissionOrigin with record
   EmissionProvenance { rule: EmissionRule [mandatory], source_span:
   Option<SourceSpan> [optional] }. Co-inhabitance is real (e.g.,
   #[derive(Debug)] line has both rule=derive_for_disj AND span
   attribution to Foo decl). Rule-mandatory enforces fail-closed
   structurally; Practice 4 N/A (record, not coproduct).

2. T-Rule-Enumeration brief (Finding #2 — rule authority lives in
   spec/rust.dag + v3.std.emit_model, not call-site strings): brief
   status flipped to FLAGGED FOR RETIREMENT. Same finding as
   smart-ram-167 STOP at gunbc#1759 #issuecomment-4392696623; Reading
   C surfaced to Director at gunbc#828 #issuecomment-4392780871.

3. Rust-primitive-full-coverage brief (Finding #3 — BoundDeclaration
   not wired into TargetIntegerInhabitanceBound row surface):
   reframed Deliverable 2 to target the actual carrier
   `v3.std.emit_model::TargetIntegerInhabitanceBound` (used by
   `TargetIntegerTypeInhabitance` rows in src/v3/spec/rust.dag lines
   169-207). Two paths surfaced: Option (i) wire BoundDeclaration into
   TargetIntegerInhabitanceBound; Option (ii) populate via existing
   variants if PlatformDependent already exists on the live carrier.
   Worker DFS at dispatch picks. Deliverable 3 retargeted to
   TargetIntegerTypeInhabitance rows (the actual surface).

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

* rust-primitive-full-coverage: codex inline confirms TargetIntegerInhabitanceBound has no PlatformDependent variant — Option (ii) infeasible; carrier refactor REQUIRED

Codex BLOCKING inline at PR #1910 line 65 (sha 98507c432) verified at
HEAD: TargetIntegerInhabitanceBound = BoundUnspecified | StaticBoundFact(IntInterval).
No PlatformDependent variant. Earlier brief framing of Option (ii)
(populate via existing variants) was infeasible.

Brief reframed: carrier refactor is required (not optional). Two
structural shapes for the refactor — (i.a) embed BoundDeclaration
(Mgr recommendation; single-authority discipline) vs (i.b) extend
variant set with PlatformDependent. Existing 5 rows migrate either
way; bootstrap snapshot semantic-equivalence non-negotiable.

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

* emission-provenance lane: T-Rule-Enumeration RETIRED + Lens brief revised per Director Reading C

Director Reading C RATIFIED at gunbc#1739 #issuecomment-4392797954
(2026-05-07):
- Q1: T-Rule-Enumeration retires (substrate gap was phantom; ~37
  *SyntaxBinding/*OpsBinding field paths already provide enumeration
  per smart-ram-167 substrate-state-grep at gunbc#1759 #issuecomment-4392696623)
- Q2: Lens<EmissionProvenance> dispatches now (no precondition gate)
- Q3: EmissionRule = String of field-path (per feedback_reason_not_label)

Actions:
- Delete docs/briefs/r3-substrate-t-rule-enumeration-worker.md
- Lens brief: replace T-Rule-Enumeration precondition gate with
  Reading C absorption section; EmissionRule = field-path String;
  cementing test verifies field-path round-trip; STOP triggers
  retargeted to *SyntaxBinding field-set divergence

Worker pin: smart-ram-167 (Mgr discretion per Director ratification;
fresh context on field-path enumeration). valiant-ibex-312 stays on
Rust-primitive-full-coverage / T-Interval-Representation.

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 May 7, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cde): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cde):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b986):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b986): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a0704; the review citation was against
the pre-fix sha 2072b986.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d92459423: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217e) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d40):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f34f.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd4818 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd06 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f007

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a66 prior to
review; reviewer was on sha a462f007 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99f2

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f4):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f4 was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce0418 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a56:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

* docs(briefs): S9 Slice 2.5 — predicate-registry + PB-1 shim retirement (Path 3 RATIFIED)

Director ratified Path 3 at gunbc#828 #issuecomment-4390333451
post proud-lynx-311's pre-flight DFS at gunbc#1746 #issuecomment-4390253616.

Brief reframes Slice 2.5 from S-sized (primitive + 1 consumer) to
L-sized (predicate registry + PB-1 shim retirement). 5 deliverables:
1. gt_zero primitive predicate
2. Predicate registry infrastructure (resolver-side substrate-fact-introduction)
3. PB-1 shim retirement (span.file=='dsl/std/types.dag' special case dissolves)
4. Migration of existing types.dag predicates (range, pattern, etc.)
5. PositiveInt = Refined<Nat, gt_zero> consumer update

Per Director hard scope bars: no parallel predicate-resolution path;
no per-call-site special-casing; PB-1 shim retirement non-negotiable
in same slice. Single PR per Path 3 RATIFIED.

Discipline anchors: feedback_construction_over_ratchets (PB-1 shim
is bridge); feedback_dissolve_bridges (registry is structural fix);
feedback_no_textual_enforcement_bridges (file-path special-case is
anti-pattern shape); P1 substrate-fact-introduction procedure.

Worker pin proud-lynx-311 — Director pre-cleared on pre-flight DFS
context. PR #1840 (partial Slice 2 — NonNegativeInt = Nat) MERGED
at 16:54Z; Slice 2.5 dispatchable immediately on this brief landing.

* docs(briefs): Slice 2.5 audit receipt — Mgr independent grep parallel-verifies worker DFS

Codex BLOCKING review on PR #1845 sha 2d230949 flagged: external PR
receipt absorbed as live substrate state without re-grepping local
std declarations at brief authoring time. Authority receipt §1
cited proud-lynx-311's pre-flight DFS as authority but didn't
record Mgr-side independent verification.

Updated audit receipt §1 + §4 to record Mgr's independent grep at
HEAD as parallel verification:
- gt_zero zero matches in dsl/std/ + src/v3/ (verified)
- NonNegativeInt = Nat at dsl/std/integer.dag:133 (#1840 land)
- PositiveInt = Int where range(min: 1) at dsl/std/types.dag:255
- PB-1 shim doc-block confirms bridge-text framing
- Predicate registry confirmed not present

Worker DFS remains the dispatch-time discipline (substrate-state
grep at dispatch); Mgr's independent grep is parallel verification,
not substitute. Per Director's pattern note at gunbc#828
#issuecomment-4390199218 + #issuecomment-4390333451: dispatch-packet
authoring discipline includes Mgr-side substrate-state-grep, not
just relay of worker findings.

* docs(briefs): Slice 2.5 brief — Int extensibility scope-bound; lower.rs cites anchored

openai-pro REQUEST_CHANGES on PR #1845 sha 2d230949 flagged 2 issues:

BLOCKING — P1 modeling faithfulness / substrate scope leak:
`gt_zero` Int-side extensibility was left to 'worker judgment if
generalization cheap'. Per feedback_construction_over_ratchets:
don't speculatively extend predicate-carrier compatibility ahead
of named consumer demand. Reframed to **EXPLICITLY OUT-OF-SCOPE**
for Slice 2.5; Nat-only registration. Future Int-side consumer
surfaces as separate substrate-fact-introduction (P1 procedure)
brief with own consumer-demand receipt.

NON-BLOCKING — citation discipline self-violation:
3 instances of bare `lower.rs:821-835` line-range citations
contradict the brief's own 'no bare :NNN' requirement at line 211.
Converted to function-name anchored form:
`src/v3/compiler/src/lower.rs` (`lower_type_alias_refinements_phase` doc-block).

Both findings absorbed; no parallel scope ambiguity remains;
brief now self-consistent on citation discipline.

* WIP: R3 Substrate

* docs(briefs): Slice 2.5 brief — audit-receipt cites converted to declaration-name anchors

cursor APPROVE_WITH_COMMENTS on PR #1845 sha ebf6ac12 noted citation
self-inconsistency: audit-receipt section §1 + §4 used bare
`dsl/std/integer.dag:133` and `dsl/std/types.dag:255` line-number
pins despite the brief's own no-bare-:NNN rule.

Converted to declaration-name-anchored form:
- 'declaration named NonNegativeInt' (with reproducible grep command)
- 'declaration named PositiveInt' (with reproducible grep command)
- 'lower_type_alias_refinements_phase doc-block' for PB-1 location

Brief now fully self-consistent on its own citation discipline.
Verified zero remaining .dag:NNN / .rs:NNN / .md:NNN bare cites.

* docs(briefs): Slice 2.5 brief — Path (a) RATIFIED carrier+argument contract verification

Director Path (a) RATIFIED at gunbc#828 #issuecomment-4390760353
(triage) + #issuecomment-4390794121 (convergence ack):
predicate-body lowering with carrier+argument contract
verification at lower-time IN SAME SLICE. Placeholder semantics
REMOVED from registry path.

Codex REQUEST_CHANGES surfaced that registered-predicate-without-
contract = silent acceptance per feedback_fail_closed_discipline.
Brief reframe absorbs Path (a):

Hard scope bar #5 added:
- Same-slice carrier+argument-contract verification
- Mismatched carrier OR malformed argument → Diagnostic::ResolveError
- No 'named but not checked' path remains

Scope expansion section added (L → XL):
- Predicate-body lowering for all 7 registered predicates
- Per-predicate arg-shape validation
- Multi-session work acknowledged
- Carrier-check at 788d6acb4 retained; predicate-body builds on top

Acceptance bullets updated: gt_zero with arg-shape validation +
all 7 predicates with carrier+argument contract verification.

Director-pinned brief-authoring discipline: dissolution trigger
named in a brief authored as substrate-fact-introduction must
specify same-slice acceptance, not deferred follow-up. Otherwise
the brief encodes 'land bridge + defer dissolution' anti-pattern,
the same shape feedback_construction_over_ratchets warns against
at implementation layer applied at brief authoring layer.

This is the 11th miss this session — but the pattern surfacing it
(direct sweep + Codex REQUEST_CHANGES + Director ratification)
produces structural fixes that prevent the next miss class. Brief
revision is the structural recovery.

* docs(briefs): Slice 2.5 brief — Path 2 RATIFIED (Gap 1 discharge + Q-Regex carve-out)

Director Path 2 RATIFIED at gunbc#828 #issuecomment-4391985613
post Rung 3 STOP at gunbc#1746 #issuecomment-4391946213.

Path 2 narrowing of Path (a):
- gt_zero + range body synthesis already landed (5f3c40c3a)
- Gap 1 discharge mechanism: extends scalar-literal predicate
  evaluation at lower-time. L-class; lands SAME SLICE per
  same-slice-dissolution discipline
- non_empty + brand body synthesis: lands via Gap 1 discharge
- pattern / format / content: fail-closed-with-named-dep at
  user-code authoring layer (Diagnostic::ResolveError naming
  Q-Regex-Primitive). NOT placeholder; structural rejection
- PB-1 shim FULLY RETIRED per hard scope bar #3
- Q-Regex-Primitive carved as follow-on substrate-fact-introduction
  (XL substrate; not pre-authored per feedback_construction_over_ratchets)

Acceptance updated:
- 4 of 7 body-synthesized in same slice
- 3 of 7 fail-closed-with-named-dep (no placeholder semantics)
- Gap 1 discharge mechanism landed (no partial implementation)

Worker disposition: proud-lynx-311 continues Rung 3 with Gap 1
implementation + non_empty/brand body synthesis + pattern/format/
content fail-closed-with-named-dep diagnostic.

* docs(briefs): S9 Phase-1 Step 3 emission entries — Tier-1 brief authoring (1/5)

First Tier-1 brief landing post Director auto-nudge on assignment
#1858. Authored against Q-MachineConstraint sub-decisions ratified
shape now landed at #1856:

- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>> → Rust i32/i64/i128
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>> → Rust u32/u64/u128
- 6 concrete instantiations (≥3 minimum per sub-decision 5)
- Cross-program handoff to Grounding Mgr (#1745) for G2 emission consumption
- numeric_construction_demonstration Acceptance bullet (Int<32> round-trip);
  Real<64> half deferred to S9 Phase 2 / S8 Float cascade

Brief authored with substrate-state-grep discipline + same-slice-
dissolution discipline (no deferred trigger; demonstration in same
slice or explicitly carved). 5-question authority audit completed
in brief body.

Worker pin proud-lynx-311 (S9 holds); brief queues post-Slice-2.5
completion as natural follow-on.

Tier-1 brief queue progress:
- 1/5 authored (this brief)
- 4 remaining: S9 Phase-2 Float coordination; T-LBP complexity
  cementing; T-LBP cost cementing; S3 Phase-2 parser-grammar

* docs(briefs): S3 Phase-2 parser-grammar surface — Tier-1 brief 2/5

Authored per Director freed-pool pressure at gunbc#828
#issuecomment-4392095857 + Tier-1 brief-queue commitment.

Brief covers parser-grammar surface for Compose<Algebra, MachineConstraint>
interaction syntax post-#1856 (Phase-1 carrier slice landed):

- Phase 2.1: Parser surface per ratified Q-MachineConstraint-Grammar-Shape
- Phase 2.2: Bootstrap demonstrator with >=3 algebra*machine-axis pairs
- Phase 2.3: Class 1 5-criteria Pass receipt (criteria 1-4; criterion 5
  v2-oracle parity may carve)
- Phase 2.4: numeric_construction_demonstration co-receipt with S9 Phase-1
  Step 3 emission entries brief

Director ratification HOLDS on grammar bikeshed:
- Candidate A: Int @ Width<32> (annotation form)
- Candidate B: Int with MachineWidth<32> (with-form)
- Candidate C: Int<32> (positional generic — fits existing convention)
- Candidate D: Compose<AbelianGroup, MachineWidth<32>> (no parser change;
  type aliases provide convenience names)

Worker pin valiant-ant-72 holds (S3 Phase-1 precedent owner); freed-pool
until Director ratifies grammar shape.

Tier-1 brief queue progress: 2/5 authored (this brief + S9 Phase-1 Step 3).
Remaining: S9 Phase-2 Float coordination; T-LBP complexity cementing;
T-LBP cost cementing.

* docs(briefs): S3 Phase-2 brief — fix internal contradiction on Class 1 closure scope

Codex BLOCKING review on PR #1889 sha ec609b4a flagged real
contradiction:

- Provenance section claimed '5-criteria Pass closed' (line 229)
- Phase 2.3 said 'criterion 5 may queue separately' (line 154)
- STOP-AND-ESCALATE bullet 1 ratified 4-of-5 carve-out (line 181)

Updated Provenance to consistently state criteria 1-4 close in this
slice; criterion 5 (v2-oracle parity) cementing test may carve to
separate slice. Single 4-of-5 framing throughout. INVARIANTS.md
'Documentation Describes Live State' satisfied.

Per feedback_construction_over_ratchets: don't claim closure that
isn't structurally complete. 4-of-5 + named carve is the honest
shape; 5/5 only on cementing-test land.

* briefs: cite Q-MachineConstraint sub-decision 6 supersession of T-V2-Retirement gate

Address Codex BLOCKING #1 on PR #1889: S3 Phase-2 + S9 Phase-1 Step 3
worker briefs consumed Q-MachineConstraint ratification without
reconciling the historical T-V2-Retirement-landing-first cascade
gate. Add an explicit precondition-framing section to each brief
citing Director ratification at gunbc#828 #issuecomment-4385530115
(Q-MachineConstraint sub-decision 6 UNIVERSAL substrate posture)
as the implicit supersession; PR #1856 landing without T-V2-Retirement
first confirms supersession in practice. STOP-AND-ESCALATE if
supersession contested at dispatch.

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

* slice-2.5 brief: mark pattern/format/content Path 2 acceptance pending Director ratification

Address Codex BLOCKING #2 on PR #1889: Path 2 deliverable + acceptance
language asserted fail-closed-with-named-dep semantics for
pattern/format/content, but Director rejected that shape (Option 4)
at gunbc#828 #issuecomment-4392.... Options A (consumer migration),
B (Q-Regex bundled into slice), C (typed fail-closed exception with
named trigger) await ratification per migration-cost catalog at
#issuecomment-4392116215. Brief now flags those three predicates +
PB-1 shim retirement coupling as PENDING DIRECTOR RATIFICATION; worker
STOP-AND-ESCALATE if dispatched pre-ratification.

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

* slice-2.5 brief: reconcile PB-1 retirement shape with Options A/B/C gating

Address Codex BLOCKING #4 on PR #1889: prior text claimed "PB-1
FULLY RETIRED" while preceding bullet said retirement gates on
chosen path — internal contradiction. Reframe to gate the
pattern/format/content half of shim retirement on Options A/B/C
ratification while preserving Director hard scope bar #3 binding
on the gt_zero/range/non_empty/brand half (cleanly retired via
Gap 1). No path leaves PB-1 alive as parallel-authority shim on
slice landing.

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

* briefs: tier-1 3/5 — S9 Phase-2 Float emission coordination worker brief

Tier-1 brief queue progress (3/5): S9 Phase-2 Float<N> emission
entries (Float<32>/Float<64> via Compose<ApproximateField<Real>,
MachineWidth<N>>) + Real<64> round-trip demonstration completing
§1.8 #67 Acceptance bullet. Coordination/synthesis brief — gates on
both S8 (ApproximateField<F> + Real base carrier) and S9 Phase-1
Step 3 (Int<N>/UInt<N> emission-entry pattern) landing before
dispatch. Inherits T-V2-Retirement supersession framing from
Phase-1 Step 3. STOP-AND-ESCALATE on missing preconditions or
unratified Q-ApproximateField-Axiom-Set.

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

* briefs: ledger advancement honesty (PRODUCER_LANDED not CONSUMER_LANDED) + restore exact issuecomment IDs

Address openai-pro BLOCKING + NON-BLOCKING findings on PR #1889:

BLOCKING (boundary discipline / same-PR consumer): S9 Phase-1 Step 3
+ Phase-2 Float briefs claimed DECLARED → CONSUMER_LANDED upon merge
while only requiring cross-program handoff receipt to Grounding G2.
For target-primitive substrate entries, handoff is not landed-consumer
proof. Reframed both briefs to advance rows DECLARED → PRODUCER_LANDED;
Grounding G2 follow-on PR (per-pair lowering rules + emitted-Rust-
primitive verification) advances to CONSUMER_LANDED. Default
split-PR producer-then-consumer per bundled-scope discipline ratified
at gunbc#1739 #issuecomment-4392225548 (parallel infrastructure
DISALLOWED in same PR).

NON-BLOCKING (citation hygiene): replaced ellipsized
"#issuecomment-4392..." stubs in slice-2.5 brief with the exact
Director Option-4-rejection comment ID #issuecomment-4392081719 so
the ratification claim is mechanically checkable.

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

* slice-2.5 brief: absorb Director Option A revised RATIFICATION (final shape)

Director ratified Option A revised at gunbc#1739 #issuecomment-4392329709
(2026-05-06). Final brief shape:
- 4 predicates body-synthesize via Gap 1 (gt_zero / range / non_empty
  / brand)
- pattern / format / content STRUCTURALLY ABSENT from registry (not
  pending-with-placeholder); user-code where-clause produces
  Diagnostic::ResolveError naming Q-Regex-Primitive as separate
  substrate-fact-introduction follow-on
- ~12 types.dag refined-type declarations migrate to drop
  pattern/format/content where-clauses with inline-comment receipts
  pointing to Q-Regex restoration path; 1 extdep (sts_endpoint)
  adapts as needed
- PB-1 shim FULLY RETIRED — no exception, no preserved branch
- Q-Regex-Primitive as separate brief / worker pin / Director
  ratification cycle when concretely needed (Option B XXL bundling
  REJECTED)

Phase ordering rewritten to absorb migration as explicit phase
between predicate enrollment and shim retirement. proud-lynx-311
re-dispatches against revised brief; PR #1846 absorbs additional
scope per Director directive.

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

* s3-phase-2 brief: absorb Q-MC sub-decision 3 ratification (grammar shape was already answered)

Director observation at gunbc#1739 #issuecomment-4392382517: Q-MC
sub-decision 3 (Brian directive 2026-05-06 at gunbc#828
#issuecomment-4385530115) already ratified the grammar shape —
`Int<N>` user surface desugars to `Compose<Int, MachineWidth<N>>`
substrate parametrically. Earlier brief HOLD framing was redundant.

Brief revised:
- Replace bikeshed section with Q-MC sub-decision 3 quotation +
  surface/substrate framing (Candidate C user-facing; Candidate D
  substrate elaboration; A/B rejected per Director assessment)
- Phase 2.1 parser surface scoped to numeric-literal-position
  recognition + parametric desugar
- Front-matter status: dispatchable per ratification (not HOLD)
- Provenance: ratification-state-grep discipline pin folded into
  standing dispatch-checklist

valiant-ant-72 dispatch fires immediately per Director directive.

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

* briefs: remove truncated issuecomment-4392... stub from S9 Phase-1 Step 3 provenance

Address cursor NON-BLOCKING finding on PR #1889 sha 94292e48: line 144
truncated issuecomment ID. The originally-intended Director auto-nudge
comment doesn't map cleanly to a single ID, so replace with the
standing assignment reference (gunbc#1858) which is unambiguous.

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

* briefs: tier-1 4/5 + 5/5 — T-LBP complexity + cost lens cementing-test worker briefs

Tier-1 brief queue completes (4/5 + 5/5):

4/5 — T-LBP complexity-lens cementing test (§1.8 rows #79 + #87
first entry). Consumer-side cementing test against frozen v2-oracle
snapshot; producer-side Lens<Complexity> instance is upstream
precondition. Per Q-Lens-Behavioral-Parity-R3-Closeability option
(b) RATIFIED at gunbc#828 #issuecomment-4385329180 — T-LBP narrowed
to complexity + cost lenses only.

5/5 — T-LBP cost-lens cementing test + cost_lens_demonstration
(§1.8 rows #80 + #70 + #87 second entry). Absorbs row #70 demo
naturally — same source corpus + lens run; demonstration adds
observable-cost-bound assertions on top of parity check. ≥2
algebra-instances composed + ≥1 recursive call required per row #70.

Both briefs gate on:
- T-LBP per-lens substrate-producer brief landing (Lens<C> instance)
- Frozen v2-oracle snapshot capture (separate brief, pre-v2-retirement)
- DO NOT capture-against-live-oracle (violates
  v2_oracle_no_remaining_test_consumers)
- DO NOT bundle producer/snapshot/algebra-instance authoring per
  Director bundled-scope ratification at gunbc#1739
  #issuecomment-4392225548

Tier-1 5/5 complete. Worker pins assigned at dispatch time once
preconditions land.

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

* canvas: emission-provenance substrate shape disposition (supersedes PR #1902 PROPOSAL)

Substrate Mgr canvas authored post-codex BLOCKING + PM disposition
handoff at gunbc#846 #issuecomment-4392510255.

Two real substrate-shape questions stacked:

Q1 (category mismatch): Lens<C>.read is per-Behavior; emission
provenance is per-emitted-line. 4 options surfaced — (a) per-Behavior
Lens-compatible / (b) per-line instrumentation NOT a lens / (c)
withdraw + re-canvas / (d) Mgr-surface both substrates distinct.
Mgr recommends (d) if visualization is load-bearing; (a) suffices
if per-Behavior aggregate works for the slide. Brian-channel
sub-question surfaced.

Q2 (fold-rule enumerability): T-Rule-Enumeration substrate-fact-
introduction is prerequisite for every Q1 path (rust_target.rs uses
inline &str template names; rules not enumerable). Mgr recommends
parallel-dispatch with Q1 deliberation — satisfies Brian's ASAP
framing while shape ratifies.

Q3 (§1.8 ledger retarget): #89 already taken by T-LAS; new cluster
location follows Q1 disposition.

Director ratification ask + Brian-channel sub-question surfaced.
PR #1902 close-superseded post-ratification.

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

* briefs: reconcile Compose<...> slot-1 spellings to algebraic-concept names per Q-MC sub-decision 3

Address cursor NON-BLOCKING on PR #1889 sha 2b49b30f: S3 Phase-2
brief mixed Compose<AbelianGroup, ...> with Compose<Int, ...>; S9
Phase-1 Step 3 used Compose<AbelianGroup, ...> + Compose<CommutativeSemiring,
...>; S9 Phase-2 used Compose<ApproximateField<Real>, ...>. All wrong
per Q-MC sub-decision 3 critical correction at gunbc#828
#issuecomment-4385530115:

  "prior phrasing Compose<AbelianGroup, MachineWidth<64>> was wrong
  — AbelianGroup<T> is a witness shape over carrier T, not a carrier
  constructor; bare AbelianGroup in slot-1 composes witness rather
  than concept."

Slot-1 is the fully-applied algebraic-concept name:
- Int<N>  = Compose<Int,  MachineWidth<N>>   (Int = AbelianGroup<GroupCompletion<Nat>>)
- UInt<N> = Compose<UInt, MachineWidth<N>>   (UInt = CommutativeSemiring<Nat>)
- Real<N> = Compose<Real, MachineWidth<N>>   (Real = ApproximateField<Rational>)

Phase-2 Float brief also retargets user-facing surface from Float<N>
to Real<N> (Float is target-language name for the Rust primitive;
Real is the algebraic-concept name per Q-MC sub-decision 3 example).

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

* s9-p1-s3 brief: scope Deliverable 4 to producer-side verification (defer demonstration to Grounding G2)

Address Codex BLOCKING (line 82 inline + bundled review): brief
claimed end-to-end Int<32> → Rust i32 round-trip in Acceptance
while Deliverable 3 said lowering rules belong to Grounding G2
follow-on. Internal contradiction.

Reframe per Director bundled-scope discipline (gunbc#1739
#issuecomment-4392225548 — parallel infrastructure DISALLOWED
same-PR):

- Deliverable 4: producer-side substrate-axis verification only
  (type-check + carrier acceptance + bootstrap snapshot/manifest
  hold). NO end-to-end Rust emission in this PR.
- §1.8 #67 numeric_construction_demonstration receipts split:
  producer half here (entries exist), consumer half on Grounding
  G2 PR (full Int<32> → Rust i32 round-trip).
- Same-PR cross-program co-author available if Substrate Mgr
  coordinates with Grounding Mgr at dispatch; default is split.

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

* briefs: pre-author T-Rule-Enumeration substrate-fact-introduction worker brief

Pre-authored per pre-authored-brief-queue discipline; dispatch fires
on Director Q2 ratification of emission-provenance canvas at
gunbc#828 #issuecomment-4392519713.

Brief covers LangSpec emission-rule names as enumerable substrate
(rust_target.rs uses inline &str template names today; 0 hits on
RuleName/FoldRule/EmitRule across src/v3/). Two carrier shape options
(α sum-type / β named-string list) with worker DFS at dispatch
deciding shape; Practice 4 checkpoint discipline + ledger-row receipt.

Prerequisite to every Q1 path (a/b/d) — Lens<EmissionProvenance>,
per-line instrumentation, and the both-substrates option all consume
the rule-name set. Path (c) leaves substrate-unblocked-but-unconsumed.

Mgr authoring authority per PM concur at gunbc#846
#issuecomment-4392510255 / #issuecomment-4392543633 (substrate-fact-
introduction is Mgr-tier, not PM tactical authoring).

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

* t-rule-enumeration: align gate name + status to Director ratification at #4392562911

* emission-provenance lens brief: revise per Director Q1 (a) RATIFICATION

Director Q1 (a) per-Behavior Lens<C>-compatible RATIFIED at gunbc#1739
#issuecomment-4392562911 (2026-05-06); (b) instrumentation REJECTED;
(d) parallel-substrates REJECTED.

Brief revised:
- Carrier shape: Lens<List<EmissionProvenance>> per (a)
- EmissionOrigin = SubstrateDeclMirror(SourceSpan) | FoldRuleAutoEmit(EmissionRule)
  typed sum (closed; no third silent class; structural fail-closed)
- All 6 Lens<C> field bindings concrete (read/sequential/branch/iterate/validate)
- T-Rule-Enumeration named as PRECONDITION (must land first)
- §1.8 retarget under T-CostLens-Composition cluster per Director Q3
- Brian's slide visualization served by (a) projection (per-Behavior
  list flattens to per-line view at visualization layer; no parallel
  substrate needed)

Supersedes PM-authored proposal at PR #1902 (merged at 54419badf).

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

* briefs: bundled Rust-primitive-full-coverage substrate-prerequisite worker brief (Director Path A)

Author bundled substrate-prerequisite brief per Director Path A
RATIFICATION at gunbc#1739 #issuecomment-4392731264 (2026-05-06).

Three structurally-coupled gaps surfaced via Grounding loyal-stag-699
STOP at gunbc#1907 #issuecomment-4392585090 land as one bundled slice
per "necessary structural fix" exception (bundled-scope discipline):

1. IntervalInt::ExactInterval host-repr widening (α BigInt-based
   recommended; β typed-variants if α infeasible)
2. RustPrimitive structural BoundDeclaration field (replaces static
   range_min/max strings; consumes existing BoundDeclaration carrier
   StaticBound + PlatformDependent variants)
3. spec/rust.dag PlatformDependent row population for isize/usize +
   u128 row addition consuming widened ExactInterval

Closure gate: rust_primitive_full_coverage (Director-ratified name).
Worker pin: valiant-ibex-312 (freed-pool; substrate-authoring fresh;
numeric-domain-adjacent post-#1842).

Unblocks Grounding G2 Phase 2 full-coverage dispatch. G2 Phase 1
narrowed dispatch (i8-i64 + u8-u64) runs in parallel on existing
substrate; cleared at gunbc#1745 #issuecomment-4392795954.

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

* briefs: align Practice 4 classifications to GREEN/YELLOW rubric + add GREEN ledger receipts

Address codex BLOCKING on PR #1910 sha f36e1205: briefs used
PRIMITIVE/SCAFFOLD terminology that doesn't match docs/modeling-
discipline.md rubric. Per modeling-discipline.md lines 97/103/108:
the three classifications are 🟢 GREEN (terminal) / 🟡 YELLOW
(scaffold) / 🔴 RED (dissolvable-now); line 132 requires a ledger
entry if GREEN.

Replaced PRIMITIVE → GREEN, SCAFFOLD → YELLOW across all three
emission-provenance / Rust-primitive-full-coverage briefs. Added
explicit §1.8 ledger entry receipt for the GREEN classification on
EmissionOrigin (sibling row emission_origin_classification_green to
parent emission_provenance_lens_landed gate).

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

* briefs: Practice 4 terminal receipt for EmissionOrigin + bound for β scaffold

Address openai-pro BLOCKING (sha f36e1205, ran post-rubric-rename):

1. EmissionOrigin GREEN terminal classification needs documented
   attempted-dissolutions per modeling-discipline.md "no richer
   source exists" framing. Added 3 attempted dissolutions:
   - collapse to optional-pair (rejected by codex Finding 1 prior)
   - factor common richer source (orthogonal payload types prevent)
   - third arm for unattributable lines (rejected per Slice 2.5
     Option 4 placeholder anti-pattern)

2. T-Rule-Enumeration β (YELLOW) scaffold needs bound per three-part
   bridge rule. Added: allowed call sites scoped to emission code only;
   max lifetime gated on rule_name_typo_fail_closed_landed graduation;
   new emission-introspection consumers MUST author against closed-sum
   α form, not β.

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

* WIP: R3 Substrate

* briefs: address codex BLOCKING bundle (sha 2ed1046e) — record-form provenance + emit_model carrier alignment + T-Rule-Enumeration retirement flag

Three findings addressed:

1. Lens brief (Finding #1 — provenance shape conflates source vs rule
   attribution): replaced typed-sum EmissionOrigin with record
   EmissionProvenance { rule: EmissionRule [mandatory], source_span:
   Option<SourceSpan> [optional] }. Co-inhabitance is real (e.g.,
   #[derive(Debug)] line has both rule=derive_for_disj AND span
   attribution to Foo decl). Rule-mandatory enforces fail-closed
   structurally; Practice 4 N/A (record, not coproduct).

2. T-Rule-Enumeration brief (Finding #2 — rule authority lives in
   spec/rust.dag + v3.std.emit_model, not call-site strings): brief
   status flipped to FLAGGED FOR RETIREMENT. Same finding as
   smart-ram-167 STOP at gunbc#1759 #issuecomment-4392696623; Reading
   C surfaced to Director at gunbc#828 #issuecomment-4392780871.

3. Rust-primitive-full-coverage brief (Finding #3 — BoundDeclaration
   not wired into TargetIntegerInhabitanceBound row surface):
   reframed Deliverable 2 to target the actual carrier
   `v3.std.emit_model::TargetIntegerInhabitanceBound` (used by
   `TargetIntegerTypeInhabitance` rows in src/v3/spec/rust.dag lines
   169-207). Two paths surfaced: Option (i) wire BoundDeclaration into
   TargetIntegerInhabitanceBound; Option (ii) populate via existing
   variants if PlatformDependent already exists on the live carrier.
   Worker DFS at dispatch picks. Deliverable 3 retargeted to
   TargetIntegerTypeInhabitance rows (the actual surface).

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

* rust-primitive-full-coverage: codex inline confirms TargetIntegerInhabitanceBound has no PlatformDependent variant — Option (ii) infeasible; carrier refactor REQUIRED

Codex BLOCKING inline at PR #1910 line 65 (sha 98507c432) verified at
HEAD: TargetIntegerInhabitanceBound = BoundUnspecified | StaticBoundFact(IntInterval).
No PlatformDependent variant. Earlier brief framing of Option (ii)
(populate via existing variants) was infeasible.

Brief reframed: carrier refactor is required (not optional). Two
structural shapes for the refactor — (i.a) embed BoundDeclaration
(Mgr recommendation; single-authority discipline) vs (i.b) extend
variant set with PlatformDependent. Existing 5 rows migrate either
way; bootstrap snapshot semantic-equivalence non-negotiable.

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

* emission-provenance lane: T-Rule-Enumeration RETIRED + Lens brief revised per Director Reading C

Director Reading C RATIFIED at gunbc#1739 #issuecomment-4392797954
(2026-05-07):
- Q1: T-Rule-Enumeration retires (substrate gap was phantom; ~37
  *SyntaxBinding/*OpsBinding field paths already provide enumeration
  per smart-ram-167 substrate-state-grep at gunbc#1759 #issuecomment-4392696623)
- Q2: Lens<EmissionProvenance> dispatches now (no precondition gate)
- Q3: EmissionRule = String of field-path (per feedback_reason_not_label)

Actions:
- Delete docs/briefs/r3-substrate-t-rule-enumeration-worker.md
- Lens brief: replace T-Rule-Enumeration precondition gate with
  Reading C absorption section; EmissionRule = field-path String;
  cementing test verifies field-path round-trip; STOP triggers
  retargeted to *SyntaxBinding field-set divergence

Worker pin: smart-ram-167 (Mgr discretion per Director ratification;
fresh context on field-path enumeration). valiant-ibex-312 stays on
Rust-primitive-full-coverage / T-Interval-Representation.

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

* emission-provenance lens brief: absorb codex BLOCKING bundle (sha 4229cd09 post-merge findings)

Two findings from codex bundled review on now-merged PR #1910 sha
4229cd09 land as brief revisions for the in-flight smart-ram-167
authoring cycle (PR #1928):

1. Field-path identity threading: render_named_template call sites
   receive template values extracted from binding structs; field-path
   may not be carried alongside the value at emission time. New STOP
   trigger flags this as substrate-cascade if threading isn't
   structurally possible (typed template-with-rule-path or
   DeclarationRef carrier needed).

2. Read domain coverage gap: Lens<C>.read is per-Behavior; emitted
   output also includes declarations + program scaffold. Acceptance
   scope explicitly narrowed to Behavior-attributable lines only;
   declarations + scaffold provenance out-of-scope (separate substrate
   cascade if surfaced). Acceptance bullet retargeted to
   "Behavior-attributable span-Some + Behavior-attributable span-None"
   rather than full-emission coverage.

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

* rust-primitive-full-coverage: revert to Option (ii) — Mgr ratification-state-grep miss caught by valiant-ibex-312

valiant-ibex-312 ratification-state-grep at gunbc#1761
#issuecomment-4393074602 surfaced that origin/main HEAD has
TargetIntegerInhabitanceBound with 3 variants including
PlatformDependentFact (mirrors BoundDeclaration::PlatformDependent).
Earlier brief framing at 4229cd09d was against pre-PlatformDependentFact
state per codex BLOCKING reading; main moved since.

Option (ii) IS feasible: isize/usize rows populate via existing
PlatformDependentFact variant directly; u128 row populates StaticBoundFact
with BigInt-widened ExactInterval (Deliverable 1 unchanged). No
carrier refactor needed; 5 existing rows untouched.

Second Mgr-tier ratification-state-grep miss today (first was symbol-only
grep on T-Rule-Enumeration; now stale-codex-vs-current-HEAD on
TargetIntegerInhabitanceBound). Worker-tier discipline caught it before
sinking time into invasive Option (i.a) refactor.

Single-authority concern (parallel-named variants on
TargetIntegerInhabitanceBound vs BoundDeclaration) noted as future
substrate-fact-introduction; not blocking this slice — explicit-mirror
is the existing convention.

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

* rust-primitive-full-coverage: align Acceptance + Phase ordering + STOP triggers to Option (ii) (resolve codex internal-contradiction finding)

codex BLOCKING on PR #1929 sha 14f68b63 caught real internal contradiction: Context section flipped to Option (ii) feasible at 57ae4349b but Acceptance + Phase ordering still referenced BoundDeclaration migration / RustPrimitive bound field refactor from earlier Option (i.a) framing.

All sections now consistent with Option (ii):
- Phase 4 = no-op (TargetIntegerInhabitanceBound carrier untouched)
- Phase 5 = spec/rust.dag rows for isize/usize via existing PlatformDependentFact variant
- Phase 6 = u128 row via StaticBoundFact(IntInterval) + ratchet update
- Acceptance retargeted to row-population shape (no carrier refactor; existing 5 TargetIntegerTypeInhabitance rows untouched)
- STOP triggers retargeted to TargetIntegerInhabitanceBound variant-set sufficiency at HEAD
- Why-bundled rationale rewritten to Option (ii) shape (Phase A widening unblocks u128 StaticBoundFact; isize/usize use existing PlatformDependentFact)

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

* lens brief: narrow Deliverable 3 verification step 4 to Behavior-attributable lines (resolve codex #2 consistency)

codex BLOCKING #2 on PR #1929 sha 812602b4 caught: Acceptance + STOP triggers narrowed to Behavior-attributable lines but Deliverable 3 cementing-test step 4 still said 'every emitted line'. Now consistent — step 4 explicitly scopes to Behavior-attributable subset; declarations + program scaffold OUT-OF-SCOPE per same Finding #2 framing.

(codex BLOCKING #1 — claim that PlatformDependentFact NOT on main — is wrong; verified at origin/main HEAD: TargetIntegerInhabitanceBound has 3 variants including PlatformDependentFact. Rebut on PR.)

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

* briefs: pre-author IntPlatform/UIntPlatform substrate-fact-introduction follow-on (Director ratification at #4393248961)

Per Director Q1+Q2+Q3+Q4 RATIFICATION at gunbc#1739 #issuecomment-4393248961 (2026-05-07): pre-author follow-on brief for the substrate cascade surfaced by valiant-ibex-312 STOP at gunbc#1761 #issuecomment-4393222862.

Scope:
- Q1 naming: IntPlatform / UIntPlatform per feedback_reason_not_label
- Q2 algebra: Compose<Int, MachineWidth<Platform>> + Compose<UInt, MachineWidth<Platform>>; Platform is substrate token
- Q3 substrate-concept layer (target-agnostic per feedback_target_agnostic_ir)
- Q4 worker pin: valiant-ibex-312 post-PR-#1914 close (freshest substrate context)

Brief covers Platform substrate token + IntPlatform/UIntPlatform declarations + spec/rust.dag isize/usize row population + co-receipt advancing PR #1914's rust_primitive_full_coverage gate PARTIAL → CONSUMER_LANDED.

Closure gate: int_platform_uint_platform_substrate_landed.

Dispatchable post-PR-#1914 close per pre-authored-brief-queue discipline.

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 May 7, 2026
* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* WIP: R3 Substrate

* fix(briefs): retire INVARIANTS.md line-number cites in r3-426 brief

Per codex review on PR #1782 (sha c2512cde): the new briefs
introduced fresh `INVARIANTS.md:<line>` citations — the same
stale-line-anchor shape the :425 sweep brief itself names as needing
dissolution. Replaces four line-number references in
r3-426-sfp-subdoc-rename-and-author-worker.md (lines 16, 28, 58, 85)
with prose-anchored locators citing the section anchor + bullet text.

The other PB-lane briefs codex flagged (r3-pb-runtime-equivalence-
corpus-seed-audit.md, r3-pb-t-fixedpoint-worker.md) belong to
neat-bear-351's lane and are not in this PR's scope; will route
separately.

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

* fix(briefs): correct L6 type count + r3-435 dual-path retirement receipt

Per openai-pro review on PR #1782 (sha c2512cde):

1. L6 brief said acceptance ratchet asserts "five types" exist but
   declares six (ShapeATarget, FormAxis, BehaviorAxis,
   MethodTemplateContractKey, EmissionCell, EmissionPathProjection).
   Updated both occurrences to enumerate all six explicitly.

2. r3-435 brief authorized both Path A (typed-AST reader, deletes
   IntegrationRsScan) and Path B (scanner widening with Char state),
   but retirement receipt language only covered Path B. Updated
   ROADMAP/ledger retirement and authority-audit step 5 to cover
   both authorized dissolution paths.

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

* fix(briefs): L6 second 'five types' site + T-E-P lookup-gate authority

Per cursor review on PR #1782 (sha 2072b986):

1. L6 brief acceptance bullet at :131 still said "five types" while
   the parenthetical and the Slice step at :117 said six. The prior
   fix only caught one of two sites; corrected the second.

2. T-E-P brief `e_p_call_pattern_lookup_authoritative` acceptance
   named only `lower_call_pattern` as "the only route from call
   site to LoweringTarget" — but Phase 2 explicitly requires
   lenses route through `per_call_pattern_at` (the L-7 single-
   authority lookup), NOT `lower_call_pattern` (compiler-internal).
   Acceptance text rewritten to name `per_call_pattern_at` as the
   consumer-facing gate and clarify `lower_call_pattern`'s
   internal-only scope.

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

* fix(briefs): strengthen L6 ratchet from count-parity to per-row bijection

Per openai-pro REQUEST_CHANGES on PR #1782 (sha 2072b986): the L6
acceptance ratchet asserted only row-count parity between
emission_path_projections and the union of MethodTemplateContract
rows. Count parity permits duplicate projection keys and missing
source rows — the bridge from list-non-empty proxy to per-row
projection would not be mechanically proven. The whole point of
introducing MethodTemplateContractKey { target, dag_method } is to
provide 1:1 row identity.

Rewrites the ratchet to assert per-row bijection: every
MethodTemplateContract source row has exactly one matching
EmissionPathProjection row by key; every projection key resolves
to exactly one source row; duplicate projection keys fail closed.

(The other openai-pro BLOCKING finding — T-E-P
e_p_call_pattern_lookup_authoritative naming the wrong authority
— was already fixed at 6282a0704; the review citation was against
the pre-fix sha 2072b986.)

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

* fix(briefs): split L6 ratchet into slice-active vs deferred-activation gates

Per BLOCKING inline review on PR #1782 at d92459423: the prior
bijection ratchet was unsatisfiable as authored. The
*_method_template_contracts lists at HEAD (rust/python/go) are
non-empty; shipping emission_path_projections: [] alongside a
strict bijection requirement means the bijection cannot pass when
the slice lands — source rows would be uncovered. Prior text
incorrectly said "vacuously true on the empty source set" — the
SOURCE set isn't empty, only the projection set is.

Splits the ratchet into two gate categories:
- Slice-active gates: types/data shape exist + empty-state
  predicate (emission_path_projections == []).
- Deferred-activation gate: per-row key bijection, authored as a
  test scaffold by this slice but #[ignore]'d (or feature-gated
  on len > 0) until Grounding's follow-up populates rows. On
  activation, asserts the bijection over the populated set.

This honors P1 doc faithfulness: the slice's acceptance contract
is satisfiable as authored, and the bijection becomes the
load-bearing gate the row-population PR satisfies.

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

* fix(briefs): require L6 bootstrap enrollment to honor P2 facts-flow-forward

Per BLOCKING inline review on PR #1782 at L6:34: the slice authored
src/v3/std/cross_target_coverage.dag but never required enrolling
it in the bootstrap/load authority. Without enrollment the file
is dead-letter on disk and EmissionPathProjection can be absent
from the downstream Dag — silent P2 facts-flow-forward violation.

Adds a new Slice step 2 requiring a cross_target_coverage field
on BootstrapFixtures in src/v3/std/extdeps_bootstrap_fixtures.dag
mirroring the *_method_template_contracts enrollment pattern, plus
a loader-visibility ratchet. Renumbers subsequent Slice steps.
Adds matching Acceptance bullet.

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

* WIP: R3 Substrate

* WIP: R3 Substrate

* docs(briefs): normalize Practice 4 citation in S3 brief per codex review

Codex review on PR #1782 (sha 2614217e) flagged stale citation
"Practice 4 (Step 4 of the type-introduction checklist)" in
S3 brief — no such checklist step exists in the pinned rubric.

Live rule per docs/modeling-discipline.md:131-134 is the "What to
check" checkpoint-comment requirement under Practice 4 (coproduct
dissolution). Updated the S3 reference to cite that line directly
and drop the stale "Step 4 of type-introduction checklist" wording.

S2/S8/S9 already use bare "Practice 4" without the stale steps wording.
S1 (committed earlier today) does not contain the stale phrase.
S6 (pre-existing brief flagged by reviewer as carrying the same
pattern) is out of this branch's scope; flag for separate paydown.

* docs(briefs): sweep stale Practice 4 citations corpus-wide

Codex review on PR #1782 flagged the stale "Step 4 of the
type-introduction checklist" wording — no such checklist exists in
docs/modeling-discipline.md. The live rule is the "What to check"
checkpoint-comment requirement under Practice 4 (coproduct
dissolution) at docs/modeling-discipline.md:131.

Sweep across docs/ found 2 additional briefs carrying the stale
phrasing (S3 fixed previously at 9db003d40):

- docs/briefs/r3-l6-emission-path-projection-substrate-worker.md
- docs/briefs/r3-x1b-s1-transform-dispatch-substrate-worker.md

Both updated to cite the live rule directly. Verified zero
remaining "type-introduction checklist" or "Step 4 of the"
references in docs/ tree.

* docs(briefs): add Practice 4 citation discipline note to authoring checklist

Per parent inbox status flag at gunbc#828 #issuecomment-4385346221:
add a Citation discipline section to brief-authoring-checklist.md
naming the correct shape — Practice 4 (coproduct dissolution) +
"What to check" rule at docs/modeling-discipline.md:131 — and
calling out the stale "Step 4 of the type-introduction checklist"
phrasing as a failure mode. References the corpus sweep at
2dc92f34f.

Prevents future briefs that copy old templates from re-introducing
the stale citation pattern.

* docs(r3): cascade work post-Director ratification — S1 worker, R4 routing, Unit/Quantity canvas

Per Director ratification at gunbc#828 inbox response 2026-05-06
(zesty-bear-812):

1. S1 Q1+Q2 RATIFIED → author S1 gap-test representative worker brief
   (`r3-substrate-s1-gap-test-representative-worker.md`). Dispatchable
   on T-E-P Phase 1 + E6-G0d landing; closes ledger row #61.

2. S2 Q2 RATIFIED (option-(b) T-LBP narrowing) + S3 + S8 deferrals →
   R4 carve-out routing ledger (`docs/r4-carve-out-routing.md`).
   Captures C1 (parallelism lens), C2 (effect_enum lens), C3
   (register narrowing), C4 (deferred MachineConstraint axes),
   C5 (rounding-mode product extension), C6 (Unit/Quantity).
   Cascade messages to Verification / Grounding / Debt-Paydown Mgrs.

3. S9 Phase-3 dimensional refinement boundary → Unit/Quantity carrier
   canvas (`r3-substrate-s9-unit-quantity-carrier-canvas.md`).
   Surfaces Q-Unit-1..5 for Director ratification: carrier name,
   2-axis vs 3-axis Phase-1, Duration/Seconds collapse, Refined
   composition order, Practice 4 classification.

Updates §1.8 ledger receipts for carved items; R3 closure receipts
treat carved items as explicitly-deferred (not drift).

* docs(briefs): citation-discipline fix-forward — anchors/quotes, not line numbers

Director redirect at gunbc#828 #issuecomment-... noted the citation
paydown's replacement form (`docs/modeling-discipline.md:131`) is the
same drift class as the original fabricated-step error. Bare line
numbers shift silently on any doc edit above the cited line.

Generalized fix:
- brief-authoring-checklist.md "Citation discipline" section
  rewritten to prohibit bare line-numbers across ALL cross-doc
  references (modeling-discipline.md, r3-program-plan.md,
  r3-structure.md, INVARIANTS.md, MODELING.md, etc.). Use section
  anchors (#section-name) or rule-text quotes.
- 3 briefs that swapped in :131 (S3, S6, X1B) re-converted:
  - docs/modeling-discipline.md#4-coproduct-dissolution anchor
  - "What to check" rule quoted inline (self-contained)

Brief-authoring-checklist failure-mode section names both vectors
(fabricated step + bare line numbers) and references both sweep
commits in audit trail.

Broader cross-doc citation sweep across briefs I authored on this
branch (frontmatter authority-docs lists, body prose) is recommended
per Director note — flagging as separate paydown task; this commit
closes the immediate recurrence vector.

* docs(briefs): fix unfaithful Int=AbelianGroup<Nat> + sweep stale 'Step 4' refs

Per openai-pro review on PR #1782 sha 0ecd4818 (gunbc#1782 #...):

BLOCKING fix (P1 modeling faithfulness):
- S9 + S3 directed workers to model `Int = AbelianGroup<Nat>`,
  but Nat is not an Abelian-group carrier (additive inverses
  not representable). Reframed:
  - `Int` is the additive Abelian group on integers (carrier Z);
    `Nat` is a commutative monoid under addition.
  - Algebraic relationship is **explicit group-completion**:
    `Int ≡ GroupCompletion<CommutativeMonoid<Nat>>` — NOT
    `AbelianGroup<Nat>` parameterization.
  - Worker either models `Int` directly as `AbelianGroup`
    (terminal Abelian-group instance) OR introduces explicit
    `GroupCompletion<M>` substrate carrier; decision lands in
    Phase-1 PR per P1 procedure.
- S3 cross-reference + Phase-4 algebra-axis preservation note
  reframed accordingly.

NON-BLOCKING in-PR cleanup (Practice 4 citation discipline):
- 6 briefs still carrying stale 'Practice 4 Step 4' wording
  (r3-coproduct-1/2/3, r3-l6, r3-t-e-p, r3-x1b) updated to use
  the section anchor (`docs/modeling-discipline.md#4-coproduct-dissolution`)
  + inline rule-text quote ("What to check") form per the
  citation discipline established in `b4cae5299`.

Closes both findings from openai-pro review.

* docs(briefs): Q-Unit-1..5 RATIFIED — apply Scale.Unit→One rename + ratification banner

Director ratified Q-Unit-1..5 at gunbc#828 #issuecomment-... 2026-05-06
(zesty-bear-812). All 5 questions ratified; one rename required:

- Scale enum's `Unit` value collides with outer `Unit<Q, S>` carrier
  name (`Unit<Time, Unit>` is shadowing-confusing). Rename to `One`.
- Duration ≡ Unit<Time, One> (collapses with Seconds per Q-Unit-3).
- Milliseconds ≡ Unit<Time, Milli>.

Canvas updated:
- Top-level RATIFICATION banner records all 5 ratifications + rename
- Scale enum: `Unit` → `One` (with inline rename receipt)
- Sketch product expansions use `Unit<Time, One>` / `Unit<Time, Milli>`
- Phase-3 reframe table products updated
- Q-Unit-3 prose collapse reference updated

Subsequent worker brief authoring (Unit/Quantity carrier landing
post-prerequisite) inherits the renamed shape.

* docs(briefs): Unit/Quantity carrier worker brief — Q-Unit-1..5 RATIFIED

Worker brief consumes the ratified Unit/Quantity canvas
(`5f22fd06e` ratification banner). Phase-1 lands `Unit<Q, S>` +
`Quantity` + `Scale` declarations at the ratified shape (Scale's
`One` value per Q-Unit-1 rename). Phase-2 reframes S9 Phase-3
dimensional refinements (Duration / Seconds / Milliseconds) to
outer-Refined / inner-Unit composition per Q-Unit-4 RATIFIED.
EpochMs deferred to R4 C6 (Aspect-axis follow-up).

Practice 4 marks pre-determined per Q-Unit-5: `Unit<Q, S>` 🟢
PRIMITIVE; `Quantity` + `Scale` 🟡 SCAFFOLD with "consumed by ≥1
emission rule" dissolution trigger.

Cross-program handoff to Grounding Mgr (#1745) for dimensional
emission consumption documented.

Worker pin TBD — dispatchable when idle pool refreshes.

* docs(briefs): S9 Phase-1 reframed — Int landed at #1466; UInt-only migration

Per proud-lynx-311 dispatch ack at gunbc#1739 #issuecomment-...
2026-05-06: re-grep at HEAD revealed substrate state diverges
materially from S9 brief's "Option A vs B decide" framing.

Reality check at HEAD:
- `dsl/std/integer.dag:55` already carries
  `type Int = AbelianGroup<GroupCompletion<Nat>>` per Slice 3 PR
  #1466 / commit `4ba0a6d04`. Single-authority Q6 audit doc at
  `docs/audit/t-numeric-construction-group-completion-6q.md`
  ratified this shape and explicitly rejected the compact form.
- `dsl/std/integer.dag:56` still on legacy `type UInt = UInt64`
  alias; UInt migration is the actual Phase-1 worker scope.

Brief Phase-1 step 1 reframed: Int landing acknowledged; worker
confirms HEAD match. Phase-1 step 2 reframed: UInt migration
target named (`type UInt = CommutativeMonoid<Nat>`); fixed-width
rows preserved per existing legacy-rows policy.

Historical Option A vs B framing kept as note (superseded).

Confirmed S9 dispatch ack from worker; UInt-only Phase-1 PR is
in-scope. Emission entries deferred per S3 (valiant-ant-72
pre-landing); Phase-2 deferred per S8 (quiet-boar-160 pre-landing).

* docs(briefs): fix two BLOCKING citation drift items per codex review

Codex review on PR #1782 sha 5f22fd06 flagged two authority-receipt
gaps:

1. brief-authoring-checklist.md:118 — `<this-commit>` placeholder in
   the failure-mode section was unverifiable post-merge. Replaced
   with `b4cae5299` (the actual anchor/quote conversion commit).

2. r3-378-http-path-helper-fail-open-worker.md:84 — `INVARIANTS.md
   C-8 fail-closed` cited without anchor or rule-text quote, in
   violation of the citation discipline added in this PR.
   Converted to `INVARIANTS.md#p3-fail-closed` (P3 heading anchor)
   + inline rule-text quote naming P3 + C-8.

PR's own discipline now consistently applied across the diff.

* docs(briefs): sweep bare .md:NNN citations in Substrate-Mgr-authored briefs

Per Director recommendation in citation-discipline thread (gunbc#828
follow-on): bare line-number references drift silently. Swept 19
remaining instances across 5 briefs I authored on this branch:

- docs/briefs/r3-substrate-s1-q-class-2-chain-break-gap-test-canvas.md
- docs/briefs/r3-substrate-s1-gap-test-representative-worker.md
- docs/briefs/r3-substrate-s2-t-lbp-scope-calibration-canvas.md
- docs/briefs/r3-substrate-s3-machine-constraint-carrier-worker.md

Conversion: bare `file.md:NNN` → `file.md §"Section name"` form.
Stable; survives doc edits; human-readable. Section names per
HEAD heading audit.

Verification: `grep -nE '.md:[0-9]+' docs/briefs/r3-substrate-*.md
docs/r4-carve-out-routing.md` returns zero results in
Substrate-Mgr-authored scope.

Broader corpus scope (~232 references across non-Substrate briefs)
remains as separate paydown task.

* docs(briefs): fix BLOCKING + NON-BLOCKING items per openai-pro review on a462f007

Three findings addressed; 2 BLOCKING + 1 NON-BLOCKING:

BLOCKING — R3/R4 dual authority for Unit/Quantity carrier:
R4 carve-out C6 narrowed from "Unit/Quantity carrier landing"
(deferred all of it) to **"Aspect-axis (PointKind) follow-on
for EpochMs and instant/rate-shaped refinements only"**. The
2-axis Measure<Q,S> carrier landing IS in R3 per Q-Unit-1..5
RATIFIED; only the Aspect axis (PointKind = Magnitude | Instant
| Rate) carves to R4. Cascade-message C6 reference + R4 program-
plan input list updated to match. Cross-Mgr message clarifies
Grounding consumes 2-axis dimensional refinements in R3.

BLOCKING — Locked design partially applied (Scale.Unit→One
rename in canvas alternate-sketch sections):
- Canvas line 105-108 alternate sketch ("Open question: Instant
  vs Duration axis") still used pre-rename `Unit` Scale value;
  added pre-ratification disclaimer marking the section as
  deferred to R4 C6 + noting `Unit` is pre-rename
- Canvas line 163 Q-Unit-3 collapse note: `Scale = Unit` → `Scale = One`

(BLOCKING — bare line-numbers in S1 canvas frontmatter): NOT
APPLICABLE — already fixed at sweep commit 127287a66 prior to
review; reviewer was on sha a462f007 pre-sweep.

NON-BLOCKING — placeholder receipts:
- brief-authoring-checklist.md `#issuecomment-...` → concrete ID
  4385393971 (Director's anchor-discipline reply)
- r3-substrate-unit-quantity-carrier-worker.md (3 occurrences)
  + canvas RATIFICATION banner: `#issuecomment-...` → concrete ID
  4385412256 (Q-Unit ratification reply)
- `<this-commit>` placeholder in checklist already fixed at 5be1c99f2

Verification: zero `#issuecomment-...` or `<this-commit>` placeholders
in docs/briefs/ + docs/r4-carve-out-routing.md.

* docs(briefs): codex BLOCKING review fixes — Practice 4 source-level + policy scope

Three BLOCKING findings on PR #1782 (codex sha b913e2f4):

1. **Citation-discipline policy scope**: addressed by scoping
   the rule prospectively to briefs landing after the policy
   commit (`b4cae5299`). Pre-existing corpus references are
   flagged as paydown but NOT individually blocking; coordinated
   single-PR sweep is the right paydown shape. Substrate-Mgr scope
   already swept at `127287a66`.

2. **R4 C6 reconciliation**: already fixed at `6e5a5481a` (R4 C6
   narrowed to Aspect-axis follow-on for EpochMs only; 2-axis
   carrier landing IS in R3). Codex sha b913e2f4 was pre-fix.

3. **Practice 4 source-level vs PR-body conflation**: corrected.
   Acceptance bullet for Unit/Quantity worker brief now requires
   inline checkpoint comments on the LIVE declarations in
   `dsl/std/units.dag` (load-bearing artifact per
   `docs/modeling-discipline.md#4-coproduct-dissolution` "What to
   check"). PR-body summary is supplementary, not substitute.

Closes the review's reconciliation gates.

* docs(briefs): absorb Q-MachineConstraint + Q-Unit-1-Recanvas ratifications

Two major Director ratifications absorbed:

1. Q-MachineConstraint-Carrier RATIFIED at gunbc#828
   #issuecomment-4385530115 (Brian directive 2026-05-06: "universal
   substrate, ratify defaults"; PR #1817 queued). 6 sub-decisions:
   - MachineWidth<bits> only for R3; defer RegisterClass / EndianMode
     / Alignment / signedness post-R3
   - Parametric Compose<Algebra, MachineConstraint> type-level
     interaction shape (lookup-maps REJECTED — AlgebraMachineProduct
     record-keyed table form retracted)
   - Int<64> ≡ Compose<AbelianGroup, MachineWidth<64>> (algebra-side
     options A and B preserve interaction semantics)
   - Real<64> ≡ Compose<ApproximateField<Rational>, MachineWidth<64>>
     (algebra approx + machine approx as independent composing axes)
   - ≥3 pairs is minimum, not target
   - UNIVERSAL substrate: every target carries machine-constraint
     facts; targets without native machine-width semantics handle
     omission at Grounding-level discharge (target-conditioned
     lowering NOT target-conditioned substrate)

   Reframed: S3 brief Phase-1, S3 Phase-3/4 emission entries,
   S8 Phase-1/2/3 (ApproximateField<Real> → ApproximateField<Rational>;
   AlgebraMachineProduct → Compose<...>), S9 emission entries.

2. Q-Unit-1-Recanvas RATIFIED Measure<Q, S> at gunbc#828
   #issuecomment-4385539791. valiant-ibex-312's substrate-state
   grep caught Unit<Q, S> collision with kernel Unit at
   dsl/std/types.dag:176; Director ratified Measure<Q, S> as
   outer carrier name (conventional in scientific computing;
   no dsl/std/ collision).

   Reframed: Unit/Quantity worker brief throughout (Unit<Q,S> →
   Measure<Q,S>; dsl/std/units.dag → dsl/std/measure.dag); canvas
   spec sections + sketch products (Refined<Measure<Time, ...>...>);
   R4 carve-out C6 with informal/formal name disambiguation note.

Both rename + reshape are now consistent across S3 / S8 / S9 /
Unit-Q briefs + canvas + R4 routing. Workers (valiant-ant-72 on S3,
quiet-boar-160 on S8, proud-lynx-311 on S9, valiant-ibex-312 on
Unit-Q) all dispatch against the ratified shape.

* docs(briefs): S11 Slice C worker brief — ROADMAP :425 retirement post-#1801

Cascade-clearance trigger fired post-#1801 (Slice B) merge
2026-05-06. S11 brief authored per B1 RATIFIED prose+regen
bundling discipline.

Phase 1: per-file edits across the post-A+B residual list (~10
files per smart-ram-167's Slice B post-rebase enumeration);
anchor + rule-text-quote pattern per current citation discipline;
bootstrap regen in same PR (no split).

Phase 2: ROADMAP :425 row PARTIAL → Retired with 3-slice receipt;
Q-Slice-C-Retirement-Receipt resolution.

Worker pin smart-ram-167 (#1759) — Slice B precedent owner.
Dispatch packet sent separately to #1759.

* docs(briefs): Q-Refined-Phantom-Composition (c) RATIFIED — defer literal Refined form

Director ratified option (c) at gunbc#828 #issuecomment-... 2026-05-06:
drop `non_negative` predicate at Measure (phantom) layer; rely on
`Quantity = Time` tagging for non-negative-magnitude semantics.

Q-Unit-4 outer-Refined / inner-Measure composition is preserved as
**conceptual model**; the literal `Refined<Measure<...>, predicate>`
form is **deferred to value-typed-integration follow-up** when
substrate gains Refined<> as first-class type expression and
dimensional refinements get value-typed integration.

Updates:
- Canvas RATIFICATION banner Q-Unit-4 row reframed to "conceptual
  model; literal form deferred"
- Canvas Phase-3 reframe table: Duration / Milliseconds drop the
  Refined<...> wrapper; rely on Quantity tag
- Worker brief Phase-2 prose + reframe table + Acceptance bullet
  all reflect deferred-literal-form posture

valiant-ibex-312 unblocked to proceed with Phase-2 (Grounding
handoff doc) per the (c)-shaped Acceptance.

* docs(briefs): S12 F2 + F8 doc-sharpening worker brief — post-#1820 cascade

#1820 (Slice C) merged 2026-05-06; ROADMAP :425 row Retired closes
the prose-reference paydown program. S12 cascade-clearance trigger
fires per B6 RATIFIED single bundled Mgr-tier doc-sharpening PR.

Scope: F2 (.v3 filename-suffix grammar dispatch) + F8 (bootstrap
load-order/exclusion authority) — single bundled PR per B6.
Cross-program coordination with PB Mgr (#1742) per design schedule
§3 P5 (comment-only OR co-author; no duplicate PR).

Worker pin smart-ram-167 (#1759) — Slice C precedent owner;
pattern-familiar with prose+regen bundling discipline. Dispatch
packet sent separately to #1759.

* docs(briefs): S9 brief — UInt landed via #1818; algebra label corrected to CommutativeSemiring

Per proud-lynx-311 merge report at gunbc#1746 #issuecomment-...
2026-05-06: PR #1818 landed `type UInt = Nat` after codex BLOCKING
review on initial `CommutativeMonoid<Nat>` form (P2 facts-flow-forward
violation — wrap projects out Nat's multiplicative monoid + identity 1).

Final landed form preserves full `CommutativeSemiring<Magnitude>`
surface — Nat IS a commutative semiring (addition + multiplication
+ 0 + 1). Algebra-side label for UInt is CommutativeSemiring, NOT
CommutativeMonoid (corrects my earlier dispatch labeling).

S9 Phase-1 step 2 marked LANDED with merge ref. Phase-1 step 3
emission entries reframed:
- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>>
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>>

Worker discipline + reviewer caught a substrate-state error in my
brief framing; brief now matches landed reality.

* docs(briefs): fix contradictory (c) guidance in Unit/Quantity worker brief

Codex BLOCKING review on PR #1825 sha 1bce0418 caught a real
contradiction: brief Phase-2 prose at lines 115-118 stated
"predicates do NOT attach at the Measure (phantom) layer" per
Q-Refined-Phantom-Composition (c) RATIFIED, but immediately
following paragraph at lines 130-132 still said "Refined predicate
non_negative applies at the Measure-typed level" — left over from
the original Q-Unit-4 framing.

Updated lines 130-137 to consistently apply (c) shape: predicates
deferred to value-typed-integration follow-up; dimensional semantics
ride on Quantity tag at Measure layer; worker authors 3 in-scope
refinements WITHOUT predicate at this layer.

P2 boundary discipline restored: brief now gives single-authority
guidance for Phase-2 substrate landing.

* docs(briefs): name predicate authority + concretize ratification ID — codex BLOCKING

Codex BLOCKING review on PR #1825 sha 32541a56:

1. (BLOCKING) Q-Refined-Phantom-Composition (c) ratification deferred
   phantom-carrier predicates without naming the value-level predicate
   authority. Updated canvas Q-Unit-4 RATIFICATION row to explicitly
   name: 'predicates re-attach at value-typed Int/UInt level via
   where-sugar (e.g., range(min: 0) per current dsl/std/types.dag
   precedent)' when value-typed integration lands.

2. (BLOCKING) Worker brief option-c reframe didn't sweep the audit
   receipt §5 (Carrier dissolves the bridge). Updated to consistently
   apply (c) shape — dimensional semantics ride on Quantity tag at
   Measure layer; value-level predicate authority deferred; until
   then, range/gt_zero constraints attach at value-typed Int/UInt
   via where-sugar per dsl/std/types.dag convention.

3. (NON-BLOCKING) Canvas had #issuecomment-... placeholder for the
   (c) ratification message ID. Replaced with concrete
   #issuecomment-4385687075 per dashboard relay header.

Brief now names a single value-level authority (Int/UInt where-sugar)
for value-range facts; phantom-layer Quantity tag carries only
dimensional semantics. P2 boundary discipline maintained.

* docs(briefs): S12 RETIRED per Director option (2) ratification

Director ratified option (2) at gunbc#828 #issuecomment-4385873...
2026-05-06 post smart-ram-167's substrate-state STOP-AND-ESCALATE:

- F2 absorbed by 2026-05-04 routing + #1662 closure
  (`Result/DivError span.file-keyed` retired)
- F8 topical concerns distributed across live rows
  (Class 5 Gap 3 `bootstrap.rs::std_fixtures()`; Character-level
  load-set / bootstrap; Filename-sentinel-bridges) with own owners
- Doc-discipline goals absorbed by per-Mgr citation paydown
  routing at gunbc#828 #issuecomment-4385583247

Frontmatter updated to RETIRED with absorption receipt. Worker
(smart-ram-167) pin freed.

Director-side acknowledgment of Substrate Mgr's option (2) recommendation:
"Substrate Mgr's option (2) recommendation is the right move
structurally. Most Mgrs default to 'synthesize work to fill the brief'
when canvas-vs-HEAD mismatch surfaces. Recommending retirement when
the work is genuinely absorbed is harder discipline."

* docs(briefs): S7 PR-F (BoundDeclaration consumer + ReferenceModel<T>) worker brief

Per cascade-clearance trigger fired post-#1782 merge 2026-05-06.
loyal-wolf-828 (#1764) acknowledged S7 dispatch with substrate-state
pre-flight grep (gunbc#1764 #issuecomment-4385872...) and surfaced
await-brief posture. This brief satisfies that prerequisite.

Worker pre-flight inventory absorbed:
- BoundDeclaration substrate landed (substrate.dag StaticBound +
  PlatformDependent); partial BoundDeclarationView consumer in
  fold.rs (ScratchIntExamples scope; doc-explicit partial)
- ReferenceModel<T> NOT yet in dsl/std/ (substrate-fact-introduction
  required; design-emission-model.md §Q2 framing)

Phase-1: BoundDeclaration consumer broadening to full
design-emission-model.md surface (u128 / isize / usize / walker
arms / pilot mirror).

Phase-2: ReferenceModel<T> P1 substrate-fact-introduction with
DFS-of-concept-DAG + Practice 4 in-source checkpoint comment +
named consumer demand (Grounding G1).

Phase-3: cross-program handoff to Grounding Mgr (#1745) for
G1 (T-Ground-Rust Phase 1).

Closure predicate: unblocks Grounding T-Ground-Rust Phase 1.
Worker pin loyal-wolf-828 holds; dispatch fires immediately
on this brief landing.

* docs(briefs): S9 Slice 2.5 — predicate-registry + PB-1 shim retirement (Path 3 RATIFIED)

Director ratified Path 3 at gunbc#828 #issuecomment-4390333451
post proud-lynx-311's pre-flight DFS at gunbc#1746 #issuecomment-4390253616.

Brief reframes Slice 2.5 from S-sized (primitive + 1 consumer) to
L-sized (predicate registry + PB-1 shim retirement). 5 deliverables:
1. gt_zero primitive predicate
2. Predicate registry infrastructure (resolver-side substrate-fact-introduction)
3. PB-1 shim retirement (span.file=='dsl/std/types.dag' special case dissolves)
4. Migration of existing types.dag predicates (range, pattern, etc.)
5. PositiveInt = Refined<Nat, gt_zero> consumer update

Per Director hard scope bars: no parallel predicate-resolution path;
no per-call-site special-casing; PB-1 shim retirement non-negotiable
in same slice. Single PR per Path 3 RATIFIED.

Discipline anchors: feedback_construction_over_ratchets (PB-1 shim
is bridge); feedback_dissolve_bridges (registry is structural fix);
feedback_no_textual_enforcement_bridges (file-path special-case is
anti-pattern shape); P1 substrate-fact-introduction procedure.

Worker pin proud-lynx-311 — Director pre-cleared on pre-flight DFS
context. PR #1840 (partial Slice 2 — NonNegativeInt = Nat) MERGED
at 16:54Z; Slice 2.5 dispatchable immediately on this brief landing.

* docs(briefs): Slice 2.5 audit receipt — Mgr independent grep parallel-verifies worker DFS

Codex BLOCKING review on PR #1845 sha 2d230949 flagged: external PR
receipt absorbed as live substrate state without re-grepping local
std declarations at brief authoring time. Authority receipt §1
cited proud-lynx-311's pre-flight DFS as authority but didn't
record Mgr-side independent verification.

Updated audit receipt §1 + §4 to record Mgr's independent grep at
HEAD as parallel verification:
- gt_zero zero matches in dsl/std/ + src/v3/ (verified)
- NonNegativeInt = Nat at dsl/std/integer.dag:133 (#1840 land)
- PositiveInt = Int where range(min: 1) at dsl/std/types.dag:255
- PB-1 shim doc-block confirms bridge-text framing
- Predicate registry confirmed not present

Worker DFS remains the dispatch-time discipline (substrate-state
grep at dispatch); Mgr's independent grep is parallel verification,
not substitute. Per Director's pattern note at gunbc#828
#issuecomment-4390199218 + #issuecomment-4390333451: dispatch-packet
authoring discipline includes Mgr-side substrate-state-grep, not
just relay of worker findings.

* docs(briefs): Slice 2.5 brief — Int extensibility scope-bound; lower.rs cites anchored

openai-pro REQUEST_CHANGES on PR #1845 sha 2d230949 flagged 2 issues:

BLOCKING — P1 modeling faithfulness / substrate scope leak:
`gt_zero` Int-side extensibility was left to 'worker judgment if
generalization cheap'. Per feedback_construction_over_ratchets:
don't speculatively extend predicate-carrier compatibility ahead
of named consumer demand. Reframed to **EXPLICITLY OUT-OF-SCOPE**
for Slice 2.5; Nat-only registration. Future Int-side consumer
surfaces as separate substrate-fact-introduction (P1 procedure)
brief with own consumer-demand receipt.

NON-BLOCKING — citation discipline self-violation:
3 instances of bare `lower.rs:821-835` line-range citations
contradict the brief's own 'no bare :NNN' requirement at line 211.
Converted to function-name anchored form:
`src/v3/compiler/src/lower.rs` (`lower_type_alias_refinements_phase` doc-block).

Both findings absorbed; no parallel scope ambiguity remains;
brief now self-consistent on citation discipline.

* WIP: R3 Substrate

* docs(briefs): Slice 2.5 brief — audit-receipt cites converted to declaration-name anchors

cursor APPROVE_WITH_COMMENTS on PR #1845 sha ebf6ac12 noted citation
self-inconsistency: audit-receipt section §1 + §4 used bare
`dsl/std/integer.dag:133` and `dsl/std/types.dag:255` line-number
pins despite the brief's own no-bare-:NNN rule.

Converted to declaration-name-anchored form:
- 'declaration named NonNegativeInt' (with reproducible grep command)
- 'declaration named PositiveInt' (with reproducible grep command)
- 'lower_type_alias_refinements_phase doc-block' for PB-1 location

Brief now fully self-consistent on its own citation discipline.
Verified zero remaining .dag:NNN / .rs:NNN / .md:NNN bare cites.

* docs(briefs): Slice 2.5 brief — Path (a) RATIFIED carrier+argument contract verification

Director Path (a) RATIFIED at gunbc#828 #issuecomment-4390760353
(triage) + #issuecomment-4390794121 (convergence ack):
predicate-body lowering with carrier+argument contract
verification at lower-time IN SAME SLICE. Placeholder semantics
REMOVED from registry path.

Codex REQUEST_CHANGES surfaced that registered-predicate-without-
contract = silent acceptance per feedback_fail_closed_discipline.
Brief reframe absorbs Path (a):

Hard scope bar #5 added:
- Same-slice carrier+argument-contract verification
- Mismatched carrier OR malformed argument → Diagnostic::ResolveError
- No 'named but not checked' path remains

Scope expansion section added (L → XL):
- Predicate-body lowering for all 7 registered predicates
- Per-predicate arg-shape validation
- Multi-session work acknowledged
- Carrier-check at 788d6acb4 retained; predicate-body builds on top

Acceptance bullets updated: gt_zero with arg-shape validation +
all 7 predicates with carrier+argument contract verification.

Director-pinned brief-authoring discipline: dissolution trigger
named in a brief authored as substrate-fact-introduction must
specify same-slice acceptance, not deferred follow-up. Otherwise
the brief encodes 'land bridge + defer dissolution' anti-pattern,
the same shape feedback_construction_over_ratchets warns against
at implementation layer applied at brief authoring layer.

This is the 11th miss this session — but the pattern surfacing it
(direct sweep + Codex REQUEST_CHANGES + Director ratification)
produces structural fixes that prevent the next miss class. Brief
revision is the structural recovery.

* docs(briefs): Slice 2.5 brief — Path 2 RATIFIED (Gap 1 discharge + Q-Regex carve-out)

Director Path 2 RATIFIED at gunbc#828 #issuecomment-4391985613
post Rung 3 STOP at gunbc#1746 #issuecomment-4391946213.

Path 2 narrowing of Path (a):
- gt_zero + range body synthesis already landed (5f3c40c3a)
- Gap 1 discharge mechanism: extends scalar-literal predicate
  evaluation at lower-time. L-class; lands SAME SLICE per
  same-slice-dissolution discipline
- non_empty + brand body synthesis: lands via Gap 1 discharge
- pattern / format / content: fail-closed-with-named-dep at
  user-code authoring layer (Diagnostic::ResolveError naming
  Q-Regex-Primitive). NOT placeholder; structural rejection
- PB-1 shim FULLY RETIRED per hard scope bar #3
- Q-Regex-Primitive carved as follow-on substrate-fact-introduction
  (XL substrate; not pre-authored per feedback_construction_over_ratchets)

Acceptance updated:
- 4 of 7 body-synthesized in same slice
- 3 of 7 fail-closed-with-named-dep (no placeholder semantics)
- Gap 1 discharge mechanism landed (no partial implementation)

Worker disposition: proud-lynx-311 continues Rung 3 with Gap 1
implementation + non_empty/brand body synthesis + pattern/format/
content fail-closed-with-named-dep diagnostic.

* docs(briefs): S9 Phase-1 Step 3 emission entries — Tier-1 brief authoring (1/5)

First Tier-1 brief landing post Director auto-nudge on assignment
#1858. Authored against Q-MachineConstraint sub-decisions ratified
shape now landed at #1856:

- Int<N> ≡ Compose<AbelianGroup, MachineWidth<N>> → Rust i32/i64/i128
- UInt<N> ≡ Compose<CommutativeSemiring, MachineWidth<N>> → Rust u32/u64/u128
- 6 concrete instantiations (≥3 minimum per sub-decision 5)
- Cross-program handoff to Grounding Mgr (#1745) for G2 emission consumption
- numeric_construction_demonstration Acceptance bullet (Int<32> round-trip);
  Real<64> half deferred to S9 Phase 2 / S8 Float cascade

Brief authored with substrate-state-grep discipline + same-slice-
dissolution discipline (no deferred trigger; demonstration in same
slice or explicitly carved). 5-question authority audit completed
in brief body.

Worker pin proud-lynx-311 (S9 holds); brief queues post-Slice-2.5
completion as natural follow-on.

Tier-1 brief queue progress:
- 1/5 authored (this brief)
- 4 remaining: S9 Phase-2 Float coordination; T-LBP complexity
  cementing; T-LBP cost cementing; S3 Phase-2 parser-grammar

* docs(briefs): S3 Phase-2 parser-grammar surface — Tier-1 brief 2/5

Authored per Director freed-pool pressure at gunbc#828
#issuecomment-4392095857 + Tier-1 brief-queue commitment.

Brief covers parser-grammar surface for Compose<Algebra, MachineConstraint>
interaction syntax post-#1856 (Phase-1 carrier slice landed):

- Phase 2.1: Parser surface per ratified Q-MachineConstraint-Grammar-Shape
- Phase 2.2: Bootstrap demonstrator with >=3 algebra*machine-axis pairs
- Phase 2.3: Class 1 5-criteria Pass receipt (criteria 1-4; criterion 5
  v2-oracle parity may carve)
- Phase 2.4: numeric_construction_demonstration co-receipt with S9 Phase-1
  Step 3 emission entries brief

Director ratification HOLDS on grammar bikeshed:
- Candidate A: Int @ Width<32> (annotation form)
- Candidate B: Int with MachineWidth<32> (with-form)
- Candidate C: Int<32> (positional generic — fits existing convention)
- Candidate D: Compose<AbelianGroup, MachineWidth<32>> (no parser change;
  type aliases provide convenience names)

Worker pin valiant-ant-72 holds (S3 Phase-1 precedent owner); freed-pool
until Director ratifies grammar shape.

Tier-1 brief queue progress: 2/5 authored (this brief + S9 Phase-1 Step 3).
Remaining: S9 Phase-2 Float coordination; T-LBP complexity cementing;
T-LBP cost cementing.

* docs(briefs): S3 Phase-2 brief — fix internal contradiction on Class 1 closure scope

Codex BLOCKING review on PR #1889 sha ec609b4a flagged real
contradiction:

- Provenance section claimed '5-criteria Pass closed' (line 229)
- Phase 2.3 said 'criterion 5 may queue separately' (line 154)
- STOP-AND-ESCALATE bullet 1 ratified 4-of-5 carve-out (line 181)

Updated Provenance to consistently state criteria 1-4 close in this
slice; criterion 5 (v2-oracle parity) cementing test may carve to
separate slice. Single 4-of-5 framing throughout. INVARIANTS.md
'Documentation Describes Live State' satisfied.

Per feedback_construction_over_ratchets: don't claim closure that
isn't structurally complete. 4-of-5 + named carve is the honest
shape; 5/5 only on cementing-test land.

* briefs: cite Q-MachineConstraint sub-decision 6 supersession of T-V2-Retirement gate

Address Codex BLOCKING #1 on PR #1889: S3 Phase-2 + S9 Phase-1 Step 3
worker briefs consumed Q-MachineConstraint ratification without
reconciling the historical T-V2-Retirement-landing-first cascade
gate. Add an explicit precondition-framing section to each brief
citing Director ratification at gunbc#828 #issuecomment-4385530115
(Q-MachineConstraint sub-decision 6 UNIVERSAL substrate posture)
as the implicit supersession; PR #1856 landing without T-V2-Retirement
first confirms supersession in practice. STOP-AND-ESCALATE if
supersession contested at dispatch.

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

* slice-2.5 brief: mark pattern/format/content Path 2 acceptance pending Director ratification

Address Codex BLOCKING #2 on PR #1889: Path 2 deliverable + acceptance
language asserted fail-closed-with-named-dep semantics for
pattern/format/content, but Director rejected that shape (Option 4)
at gunbc#828 #issuecomment-4392.... Options A (consumer migration),
B (Q-Regex bundled into slice), C (typed fail-closed exception with
named trigger) await ratification per migration-cost catalog at
#issuecomment-4392116215. Brief now flags those three predicates +
PB-1 shim retirement coupling as PENDING DIRECTOR RATIFICATION; worker
STOP-AND-ESCALATE if dispatched pre-ratification.

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

* slice-2.5 brief: reconcile PB-1 retirement shape with Options A/B/C gating

Address Codex BLOCKING #4 on PR #1889: prior text claimed "PB-1
FULLY RETIRED" while preceding bullet said retirement gates on
chosen path — internal contradiction. Reframe to gate the
pattern/format/content half of shim retirement on Options A/B/C
ratification while preserving Director hard scope bar #3 binding
on the gt_zero/range/non_empty/brand half (cleanly retired via
Gap 1). No path leaves PB-1 alive as parallel-authority shim on
slice landing.

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

* briefs: tier-1 3/5 — S9 Phase-2 Float emission coordination worker brief

Tier-1 brief queue progress (3/5): S9 Phase-2 Float<N> emission
entries (Float<32>/Float<64> via Compose<ApproximateField<Real>,
MachineWidth<N>>) + Real<64> round-trip demonstration completing
§1.8 #67 Acceptance bullet. Coordination/synthesis brief — gates on
both S8 (ApproximateField<F> + Real base carrier) and S9 Phase-1
Step 3 (Int<N>/UInt<N> emission-entry pattern) landing before
dispatch. Inherits T-V2-Retirement supersession framing from
Phase-1 Step 3. STOP-AND-ESCALATE on missing preconditions or
unratified Q-ApproximateField-Axiom-Set.

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

* briefs: ledger advancement honesty (PRODUCER_LANDED not CONSUMER_LANDED) + restore exact issuecomment IDs

Address openai-pro BLOCKING + NON-BLOCKING findings on PR #1889:

BLOCKING (boundary discipline / same-PR consumer): S9 Phase-1 Step 3
+ Phase-2 Float briefs claimed DECLARED → CONSUMER_LANDED upon merge
while only requiring cross-program handoff receipt to Grounding G2.
For target-primitive substrate entries, handoff is not landed-consumer
proof. Reframed both briefs to advance rows DECLARED → PRODUCER_LANDED;
Grounding G2 follow-on PR (per-pair lowering rules + emitted-Rust-
primitive verification) advances to CONSUMER_LANDED. Default
split-PR producer-then-consumer per bundled-scope discipline ratified
at gunbc#1739 #issuecomment-4392225548 (parallel infrastructure
DISALLOWED in same PR).

NON-BLOCKING (citation hygiene): replaced ellipsized
"#issuecomment-4392..." stubs in slice-2.5 brief with the exact
Director Option-4-rejection comment ID #issuecomment-4392081719 so
the ratification claim is mechanically checkable.

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

* slice-2.5 brief: absorb Director Option A revised RATIFICATION (final shape)

Director ratified Option A revised at gunbc#1739 #issuecomment-4392329709
(2026-05-06). Final brief shape:
- 4 predicates body-synthesize via Gap 1 (gt_zero / range / non_empty
  / brand)
- pattern / format / content STRUCTURALLY ABSENT from registry (not
  pending-with-placeholder); user-code where-clause produces
  Diagnostic::ResolveError naming Q-Regex-Primitive as separate
  substrate-fact-introduction follow-on
- ~12 types.dag refined-type declarations migrate to drop
  pattern/format/content where-clauses with inline-comment receipts
  pointing to Q-Regex restoration path; 1 extdep (sts_endpoint)
  adapts as needed
- PB-1 shim FULLY RETIRED — no exception, no preserved branch
- Q-Regex-Primitive as separate brief / worker pin / Director
  ratification cycle when concretely needed (Option B XXL bundling
  REJECTED)

Phase ordering rewritten to absorb migration as explicit phase
between predicate enrollment and shim retirement. proud-lynx-311
re-dispatches against revised brief; PR #1846 absorbs additional
scope per Director directive.

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

* s3-phase-2 brief: absorb Q-MC sub-decision 3 ratification (grammar shape was already answered)

Director observation at gunbc#1739 #issuecomment-4392382517: Q-MC
sub-decision 3 (Brian directive 2026-05-06 at gunbc#828
#issuecomment-4385530115) already ratified the grammar shape —
`Int<N>` user surface desugars to `Compose<Int, MachineWidth<N>>`
substrate parametrically. Earlier brief HOLD framing was redundant.

Brief revised:
- Replace bikeshed section with Q-MC sub-decision 3 quotation +
  surface/substrate framing (Candidate C user-facing; Candidate D
  substrate elaboration; A/B rejected per Director assessment)
- Phase 2.1 parser surface scoped to numeric-literal-position
  recognition + parametric desugar
- Front-matter status: dispatchable per ratification (not HOLD)
- Provenance: ratification-state-grep discipline pin folded into
  standing dispatch-checklist

valiant-ant-72 dispatch fires immediately per Director directive.

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

* briefs: remove truncated issuecomment-4392... stub from S9 Phase-1 Step 3 provenance

Address cursor NON-BLOCKING finding on PR #1889 sha 94292e48: line 144
truncated issuecomment ID. The originally-intended Director auto-nudge
comment doesn't map cleanly to a single ID, so replace with the
standing assignment reference (gunbc#1858) which is unambiguous.

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

* briefs: tier-1 4/5 + 5/5 — T-LBP complexity + cost lens cementing-test worker briefs

Tier-1 brief queue completes (4/5 + 5/5):

4/5 — T-LBP complexity-lens cementing test (§1.8 rows #79 + #87
first entry). Consumer-side cementing test against frozen v2-oracle
snapshot; producer-side Lens<Complexity> instance is upstream
precondition. Per Q-Lens-Behavioral-Parity-R3-Closeability option
(b) RATIFIED at gunbc#828 #issuecomment-4385329180 — T-LBP narrowed
to complexity + cost lenses only.

5/5 — T-LBP cost-lens cementing test + cost_lens_demonstration
(§1.8 rows #80 + #70 + #87 second entry). Absorbs row #70 demo
naturally — same source corpus + lens run; demonstration adds
observable-cost-bound assertions on top of parity check. ≥2
algebra-instances composed + ≥1 recursive call required per row #70.

Both briefs gate on:
- T-LBP per-lens substrate-producer brief landing (Lens<C> instance)
- Frozen v2-oracle snapshot capture (separate brief, pre-v2-retirement)
- DO NOT capture-against-live-oracle (violates
  v2_oracle_no_remaining_test_consumers)
- DO NOT bundle producer/snapshot/algebra-instance authoring per
  Director bundled-scope ratification at gunbc#1739
  #issuecomment-4392225548

Tier-1 5/5 complete. Worker pins assigned at dispatch time once
preconditions land.

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

* canvas: emission-provenance substrate shape disposition (supersedes PR #1902 PROPOSAL)

Substrate Mgr canvas authored post-codex BLOCKING + PM disposition
handoff at gunbc#846 #issuecomment-4392510255.

Two real substrate-shape questions stacked:

Q1 (category mismatch): Lens<C>.read is per-Behavior; emission
provenance is per-emitted-line. 4 options surfaced — (a) per-Behavior
Lens-compatible / (b) per-line instrumentation NOT a lens / (c)
withdraw + re-canvas / (d) Mgr-surface both substrates distinct.
Mgr recommends (d) if visualization is load-bearing; (a) suffices
if per-Behavior aggregate works for the slide. Brian-channel
sub-question surfaced.

Q2 (fold-rule enumerability): T-Rule-Enumeration substrate-fact-
introduction is prerequisite for every Q1 path (rust_target.rs uses
inline &str template names; rules not enumerable). Mgr recommends
parallel-dispatch with Q1 deliberation — satisfies Brian's ASAP
framing while shape ratifies.

Q3 (§1.8 ledger retarget): #89 already taken by T-LAS; new cluster
location follows Q1 disposition.

Director ratification ask + Brian-channel sub-question surfaced.
PR #1902 close-superseded post-ratification.

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

* briefs: reconcile Compose<...> slot-1 spellings to algebraic-concept names per Q-MC sub-decision 3

Address cursor NON-BLOCKING on PR #1889 sha 2b49b30f: S3 Phase-2
brief mixed Compose<AbelianGroup, ...> with Compose<Int, ...>; S9
Phase-1 Step 3 used Compose<AbelianGroup, ...> + Compose<CommutativeSemiring,
...>; S9 Phase-2 used Compose<ApproximateField<Real>, ...>. All wrong
per Q-MC sub-decision 3 critical correction at gunbc#828
#issuecomment-4385530115:

  "prior phrasing Compose<AbelianGroup, MachineWidth<64>> was wrong
  — AbelianGroup<T> is a witness shape over carrier T, not a carrier
  constructor; bare AbelianGroup in slot-1 composes witness rather
  than concept."

Slot-1 is the fully-applied algebraic-concept name:
- Int<N>  = Compose<Int,  MachineWidth<N>>   (Int = AbelianGroup<GroupCompletion<Nat>>)
- UInt<N> = Compose<UInt, MachineWidth<N>>   (UInt = CommutativeSemiring<Nat>)
- Real<N> = Compose<Real, MachineWidth<N>>   (Real = ApproximateField<Rational>)

Phase-2 Float brief also retargets user-facing surface from Float<N>
to Real<N> (Float is target-language name for the Rust primitive;
Real is the algebraic-concept name per Q-MC sub-decision 3 example).

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

* s9-p1-s3 brief: scope Deliverable 4 to producer-side verification (defer demonstration to Grounding G2)

Address Codex BLOCKING (line 82 inline + bundled review): brief
claimed end-to-end Int<32> → Rust i32 round-trip in Acceptance
while Deliverable 3 said lowering rules belong to Grounding G2
follow-on. Internal contradiction.

Reframe per Director bundled-scope discipline (gunbc#1739
#issuecomment-4392225548 — parallel infrastructure DISALLOWED
same-PR):

- Deliverable 4: producer-side substrate-axis verification only
  (type-check + carrier acceptance + bootstrap snapshot/manifest
  hold). NO end-to-end Rust emission in this PR.
- §1.8 #67 numeric_construction_demonstration receipts split:
  producer half here (entries exist), consumer half on Grounding
  G2 PR (full Int<32> → Rust i32 round-trip).
- Same-PR cross-program co-author available if Substrate Mgr
  coordinates with Grounding Mgr at dispatch; default is split.

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

* briefs: pre-author T-Rule-Enumeration substrate-fact-introduction worker brief

Pre-authored per pre-authored-brief-queue discipline; dispatch fires
on Director Q2 ratification of emission-provenance canvas at
gunbc#828 #issuecomment-4392519713.

Brief covers LangSpec emission-rule names as enumerable substrate
(rust_target.rs uses inline &str template names today; 0 hits on
RuleName/FoldRule/EmitRule across src/v3/). Two carrier shape options
(α sum-type / β named-string list) with worker DFS at dispatch
deciding shape; Practice 4 checkpoint discipline + ledger-row receipt.

Prerequisite to every Q1 path (a/b/d) — Lens<EmissionProvenance>,
per-line instrumentation, and the both-substrates option all consume
the rule-name set. Path (c) leaves substrate-unblocked-but-unconsumed.

Mgr authoring authority per PM concur at gunbc#846
#issuecomment-4392510255 / #issuecomment-4392543633 (substrate-fact-
introduction is Mgr-tier, not PM tactical authoring).

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

* t-rule-enumeration: align gate name + status to Director ratification at #4392562911

* emission-provenance lens brief: revise per Director Q1 (a) RATIFICATION

Director Q1 (a) per-Behavior Lens<C>-compatible RATIFIED at gunbc#1739
#issuecomment-4392562911 (2026-05-06); (b) instrumentation REJECTED;
(d) parallel-substrates REJECTED.

Brief revised:
- Carrier shape: Lens<List<EmissionProvenance>> per (a)
- EmissionOrigin = SubstrateDeclMirror(SourceSpan) | FoldRuleAutoEmit(EmissionRule)
  typed sum (closed; no third silent class; structural fail-closed)
- All 6 Lens<C> field bindings concrete (read/sequential/branch/iterate/validate)
- T-Rule-Enumeration named as PRECONDITION (must land first)
- §1.8 retarget under T-CostLens-Composition cluster per Director Q3
- Brian's slide visualization served by (a) projection (per-Behavior
  list flattens to per-line view at visualization layer; no parallel
  substrate needed)

Supersedes PM-authored proposal at PR #1902 (merged at 54419badf).

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

* briefs: bundled Rust-primitive-full-coverage substrate-prerequisite worker brief (Director Path A)

Author bundled substrate-prerequisite brief per Director Path A
RATIFICATION at gunbc#1739 #issuecomment-4392731264 (2026-05-06).

Three structurally-coupled gaps surfaced via Grounding loyal-stag-699
STOP at gunbc#1907 #issuecomment-4392585090 land as one bundled slice
per "necessary structural fix" exception (bundled-scope discipline):

1. IntervalInt::ExactInterval host-repr widening (α BigInt-based
   recommended; β typed-variants if α infeasible)
2. RustPrimitive structural BoundDeclaration field (replaces static
   range_min/max strings; consumes existing BoundDeclaration carrier
   StaticBound + PlatformDependent variants)
3. spec/rust.dag PlatformDependent row population for isize/usize +
   u128 row addition consuming widened ExactInterval

Closure gate: rust_primitive_full_coverage (Director-ratified name).
Worker pin: valiant-ibex-312 (freed-pool; substrate-authoring fresh;
numeric-domain-adjacent post-#1842).

Unblocks Grounding G2 Phase 2 full-coverage dispatch. G2 Phase 1
narrowed dispatch (i8-i64 + u8-u64) runs in parallel on existing
substrate; cleared at gunbc#1745 #issuecomment-4392795954.

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

* briefs: align Practice 4 classifications to GREEN/YELLOW rubric + add GREEN ledger receipts

Address codex BLOCKING on PR #1910 sha f36e1205: briefs used
PRIMITIVE/SCAFFOLD terminology that doesn't match docs/modeling-
discipline.md rubric. Per modeling-discipline.md lines 97/103/108:
the three classifications are 🟢 GREEN (terminal) / 🟡 YELLOW
(scaffold) / 🔴 RED (dissolvable-now); line 132 requires a ledger
entry if GREEN.

Replaced PRIMITIVE → GREEN, SCAFFOLD → YELLOW across all three
emission-provenance / Rust-primitive-full-coverage briefs. Added
explicit §1.8 ledger entry receipt for the GREEN classification on
EmissionOrigin (sibling row emission_origin_classification_green to
parent emission_provenance_lens_landed gate).

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

* briefs: Practice 4 terminal receipt for EmissionOrigin + bound for β scaffold

Address openai-pro BLOCKING (sha f36e1205, ran post-rubric-rename):

1. EmissionOrigin GREEN terminal classification needs documented
   attempted-dissolutions per modeling-discipline.md "no richer
   source exists" framing. Added 3 attempted dissolutions:
   - collapse to optional-pair (rejected by codex Finding 1 prior)
   - factor common richer source (orthogonal payload types prevent)
   - third arm for unattributable lines (rejected per Slice 2.5
     Option 4 placeholder anti-pattern)

2. T-Rule-Enumeration β (YELLOW) scaffold needs bound per three-part
   bridge rule. Added: allowed call sites scoped to emission code only;
   max lifetime gated on rule_name_typo_fail_closed_landed graduation;
   new emission-introspection consumers MUST author against closed-sum
   α form, not β.

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

* WIP: R3 Substrate

* briefs: address codex BLOCKING bundle (sha 2ed1046e) — record-form provenance + emit_model carrier alignment + T-Rule-Enumeration retirement flag

Three findings addressed:

1. Lens brief (Finding #1 — provenance shape conflates source vs rule
   attribution): replaced typed-sum EmissionOrigin with record
   EmissionProvenance { rule: EmissionRule [mandatory], source_span:
   Option<SourceSpan> [optional] }. Co-inhabitance is real (e.g.,
   #[derive(Debug)] line has both rule=derive_for_disj AND span
   attribution to Foo decl). Rule-mandatory enforces fail-closed
   structurally; Practice 4 N/A (record, not coproduct).

2. T-Rule-Enumeration brief (Finding #2 — rule authority lives in
   spec/rust.dag + v3.std.emit_model, not call-site strings): brief
   status flipped to FLAGGED FOR RETIREMENT. Same finding as
   smart-ram-167 STOP at gunbc#1759 #issuecomment-4392696623; Reading
   C surfaced to Director at gunbc#828 #issuecomment-4392780871.

3. Rust-primitive-full-coverage brief (Finding #3 — BoundDeclaration
   not wired into TargetIntegerInhabitanceBound row surface):
   reframed Deliverable 2 to target the actual carrier
   `v3.std.emit_model::TargetIntegerInhabitanceBound` (used by
   `TargetIntegerTypeInhabitance` rows in src/v3/spec/rust.dag lines
   169-207). Two paths surfaced: Option (i) wire BoundDeclaration into
   TargetIntegerInhabitanceBound; Option (ii) populate via existing
   variants if PlatformDependent already exists on the live carrier.
   Worker DFS at dispatch picks. Deliverable 3 retargeted to
   TargetIntegerTypeInhabitance rows (the actual surface).

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

* rust-primitive-full-coverage: codex inline confirms TargetIntegerInhabitanceBound has no PlatformDependent variant — Option (ii) infeasible; carrier refactor REQUIRED

Codex BLOCKING inline at PR #1910 line 65 (sha 98507c432) verified at
HEAD: TargetIntegerInhabitanceBound = BoundUnspecified | StaticBoundFact(IntInterval).
No PlatformDependent variant. Earlier brief framing of Option (ii)
(populate via existing variants) was infeasible.

Brief reframed: carrier refactor is required (not optional). Two
structural shapes for the refactor — (i.a) embed BoundDeclaration
(Mgr recommendation; single-authority discipline) vs (i.b) extend
variant set with PlatformDependent. Existing 5 rows migrate either
way; bootstrap snapshot semantic-equivalence non-negotiable.

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

* emission-provenance lane: T-Rule-Enumeration RETIRED + Lens brief revised per Director Reading C

Director Reading C RATIFIED at gunbc#1739 #issuecomment-4392797954
(2026-05-07):
- Q1: T-Rule-Enumeration retires (substrate gap was phantom; ~37
  *SyntaxBinding/*OpsBinding field paths already provide enumeration
  per smart-ram-167 substrate-state-grep at gunbc#1759 #issuecomment-4392696623)
- Q2: Lens<EmissionProvenance> dispatches now (no precondition gate)
- Q3: EmissionRule = String of field-path (per feedback_reason_not_label)

Actions:
- Delete docs/briefs/r3-substrate-t-rule-enumeration-worker.md
- Lens brief: replace T-Rule-Enumeration precondition gate with
  Reading C absorption section; EmissionRule = field-path String;
  cementing test verifies field-path round-trip; STOP triggers
  retargeted to *SyntaxBinding field-set divergence

Worker pin: smart-ram-167 (Mgr discretion per Director ratification;
fresh context on field-path enumeration). valiant-ibex-312 stays on
Rust-primitive-full-coverage / T-Interval-Representation.

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

* emission-provenance lens brief: absorb codex BLOCKING bundle (sha 4229cd09 post-merge findings)

Two findings from codex bundled review on now-merged PR #1910 sha
4229cd09 land as brief revisions for the in-flight smart-ram-167
authoring cycle (PR #1928):

1. Field-path identity threading: render_named_template call sites
   receive template values extracted from binding structs; field-path
   may not be carried alongside the value at emission time. New STOP
   trigger flags this as substrate-cascade if threading isn't
   structurally possible (typed template-with-rule-path or
   DeclarationRef carrier needed).

2. Read domain coverage gap: Lens<C>.read is per-Behavior; emitted
   output also includes declarations + program scaffold. Acceptance
   scope explicitly narrowed to Behavior-attributable lines only;
   declarations + scaffold provenance out-of-scope (separate substrate
   cascade if surfaced). Acceptance bullet retargeted to
   "Behavior-attributable span-Some + Behavior-attributable span-None"
   rather than full-emission coverage.

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

* rust-primitive-full-coverage: revert to Option (ii) — Mgr ratification-state-grep miss caught by valiant-ibex-312

valiant-ibex-312 ratification-state-grep at gunbc#1761
#issuecomment-4393074602 surfaced that origin/main HEAD has
TargetIntegerInhabitanceBound with 3 variants including
PlatformDependentFact (mirrors BoundDeclaration::PlatformDependent).
Earlier brief framing at 4229cd09d was against pre-PlatformDependentFact
state per codex BLOCKING reading; main moved since.

Option (ii) IS feasible: isize/usize rows populate via existing
PlatformDependentFact variant directly; u128 row populates StaticBoundFact
with BigInt-widened ExactInterval (Deliverable 1 unchanged). No
carrier refactor needed; 5 existing rows untouched.

Second Mgr-tier ratification-state-grep miss today (first was symbol-only
grep on T-Rule-Enumeration; now stale-codex-vs-current-HEAD on
TargetIntegerInhabitanceBound). Worker-tier discipline caught it before
sinking time into invasive Option (i.a) refactor.

Single-authority concern (parallel-named variants on
TargetIntegerInhabitanceBound vs BoundDeclaration) noted as future
substrate-fact-introduction; not blocking this slice — explicit-mirror
is the existing convention.

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

* rust-primitive-full-coverage: align Acceptance + Phase ordering + STOP triggers to Option (ii) (resolve codex internal-contradiction finding)

codex BLOCKING on PR #1929 sha 14f68b63 caught real internal contradiction: Context section flipped to Option (ii) feasible at 57ae4349b but Acceptance + Phase ordering still referenced BoundDeclaration migration / RustPrimitive bound field refactor from earlier Option (i.a) framing.

All sections now consistent with Option (ii):
- Phase 4 = no-op (TargetIntegerInhabitanceBound carrier untouched)
- Phase 5 = spec/rust.dag rows for isize/usize via existing PlatformDependentFact variant
- Phase 6 = u128 row via StaticBoundFact(IntInterval) + ratchet update
- Acceptance retargeted to row-population shape (no carrier refactor; existing 5 TargetIntegerTypeInhabitance rows untouched)
- STOP triggers retargeted to TargetIntegerInhabitanceBound variant-set sufficiency at HEAD
- Why-bundled rationale rewritten to Option (ii) shape (Phase A widening unblocks u128 StaticBoundFact; isize/usize use existing PlatformDependentFact)

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

* lens brief: narrow Deliverable 3 verification step 4 to Behavior-attributable lines (resolve codex #2 consistency)

codex BLOCKING #2 on PR #1929 sha 812602b4 caught: Acceptance + STOP triggers narrowed to Behavior-attributable lines but Deliverable 3 cementing-test step 4 still said 'every emitted line'. Now consistent — step 4 explicitly scopes to Behavior-attributable subset; declarations + program scaffold OUT-OF-SCOPE per same Finding #2 framing.

(codex BLOCKING #1 — claim that PlatformDependentFact NOT on main — is wrong; verified at origin/main HEAD: TargetIntegerInhabitanceBound has 3 variants including PlatformDependentFact. Rebut on PR.)

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

* briefs: pre-author IntPlatform/UIntPlatform substrate-fact-introduction follow-on (Director ratification at #4393248961)

Per Director Q1+Q2+Q3+Q4 RATIFICATION at gunbc#1739 #issuecomment-4393248961 (2026-05-07): pre-author follow-on brief for the substrate cascade surfaced by valiant-ibex-312 STOP at gunbc#1761 #issuecomment-4393222862.

Scope:
- Q1 naming: IntPlatform / UIntPlatform per feedback_reason_not_label
- Q2 algebra: Compose<Int, MachineWidth<Platform>> + Compose<UInt, MachineWidth<Platform>>; Platform is substrate token
- Q3 substrate-concept layer (target-agnostic per feedback_target_agnostic_ir)
- Q4 worker pin: valiant-ibex-312 post-PR-#1914 close (freshest substrate context)

Brief covers Platform substrate token + IntPlatform/UIntPlatform declarations + spec/rust.dag isize/usize row population + co-receipt advancing PR #1914's rust_primitive_full_coverage gate PARTIAL → CONSUMER_LANDED.

Closure gate: int_platform_uint_platform_substrate_landed.

Dispatchable post-PR-#1914 close per pre-authored-brief-queue discipline.

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

* intplatform brief: rename inner token Platform → PointerWidth per Director ack at…
briansrls added a commit that referenced this pull request May 9, 2026
…-authority HEAD state (#2429)

* docs(r3): gate #24 partial-CONSUMER_LANDED — Int+UInt arms via single-authority HEAD state

Mgr-ratified scope-narrow disposition at gunbc#2068 c#4413651570 (same
shape as gate #18 quiet-ibex-647 precedent, Director (c) structural-
coverage at gunbc#828 c#4413633535): gate #24 numeric_reframe_no_parallel_authority
closes for Int + UInt arms by HEAD construction; Float arm tracked
separately on S8 ApproximateField<F> cascade.

Status moves DECLARED -> PARTIAL CONSUMER_LANDED 2026-05-09:
- Int arm: type Int = AbelianGroup<GroupCompletion<Nat>> at
  dsl/std/integer.dag:147 (Slice 3 PR #1466 Q6 single-authority form);
  no type Int = Int64 residue.
- UInt arm: type UInt = Nat at dsl/std/integer.dag:148 (PR #1818
  canonical-instance form); no type UInt = UInt64 residue.
- Float arm: HELD on S8 cascade per S9 brief Phase-2 STOP-AND-ESCALATE
  (docs/briefs/r3-substrate-s9-t-numeric-construction-worker.md:95-100).
  dsl/std/float.dag:18 type Float = Float64 persists pending S8
  ApproximateField<F> import; hand-rewrite ahead of S8 precluded by
  feedback_import_not_redeclare_carriers. Advances to full
  CONSUMER_LANDED upon S8 land.

Audit receipt: fierce-fox-86 grep at gunbc#2068 c#4413645211.
Doc/ledger-closure scope only — no code edits to dsl/std/float.dag
or substrate carriers.

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

* docs(r3): gate #24 — keep Status DECLARED, move per-arm evidence to Notes (§1.7 schema fix)

Codex BLOCKING review on PR #2429: §1.7 status taxonomy defines only
DECLARED / CONSUMER_LANDED / PASSING. The prior "PARTIAL CONSUMER_LANDED"
label introduced a non-canonical status not in the schema.

Per reviewer's option (1): keep Status=DECLARED; per-arm HEAD evidence
(Int/UInt arms structurally clear at HEAD; Float arm HELD on S8) lives
in Notes column as non-closure receipt. Status → CONSUMER_LANDED when
an executable HEAD-grep consumer lands covering all three arms.

Mirrors the §1.7 corpus rule: slice receipts are evidence in Notes,
not closure-status promotions.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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