Skip to content

docs(thesis): compiler–std/ consolidation end state + gap analysis - #642

Merged
briansrls merged 16 commits into
mainfrom
docs/thesis-compiler-std-consolidation
Apr 22, 2026
Merged

briansrls merged 16 commits into
mainfrom
docs/thesis-compiler-std-consolidation

Conversation

@briansrls

@briansrls briansrls commented Apr 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

New thesis claim: in the mature v3 state, the only things that exist are (1) std/ concepts and (2) a minimal set of pure .dag compiler APIs. A "token" in the compiler is the same Token a user's formatter uses; a "file" is the same File any program reads. Compiler-specific taxonomies that duplicate user-facing concepts are dual representations at the architectural layer — a P2 Boundary Discipline violation viewed at the layer between compiler and user-land.

Why this is load-bearing

Existing invariants forbid dual representations within the compiler and within user-land. Silent exception: between them. A compiler carrying its own TokenKind separate from any std/Token creates a layer-opacity that exists only because of historical bootstrapping convenience, not semantic need.

This claim closes that gap. Pure Bootstrap is the implementation mechanism; this is the ontological commitment Pure Bootstrap points toward.

Three artifacts

1. docs/thesis/compiler-std-consolidation.md (new, 160L)

  • The claim + connection to P1/P2/P5
  • Positive definition of what stays compiler-specific: pipeline.dag orchestration, regen.dag code-generation registry, lens bodies under lenses/*.dag, substrate reflection accessors, minimal stage0 shim (target ≤5 Rust files)
  • Gap analysis inventorying current v3 state:
    • tokenize.dag → std/tokenize.dag (6 types)
    • runtime_mirrors.dag → std/syntax.dag (14 Surface* types)
    • parse_tables.dag → split decision deferred
    • src/v3/std/* → dsl/std/* (whole tree, gated on v2 retirement)
  • Alignment check against the 2026-04-22 wave: no lane introduces new dual-representation debt; Algebra Quartet + Pipeline Authority actively dissolve it
  • Ratchet definition: count of type declarations in src/v3/compiler/*.dag outside pipeline/regen/lenses → 0
  • Discipline section with 4 rules for future briefs

2. THESIS.md claim addition

New ### section "Compiler–std/ consolidation: no dual representations at the compiler/user boundary", inserted after "Self-inspection: the substrate is its own subject". Natural flow: the substrate is its own subject AND shares its ontology with user programs.

3. ROADMAP.md updates

  • Top-of-file callout pointing at the new doc (alongside the lens capability register callout)
  • New debt row under 2026-04-21 deferred-from-wave: "Compiler–std/ consolidation program — specific migrations" listing the five tracked migration lanes

What this formalizes

Previously scattered across Pure Bootstrap design, file-preference scaffold, and project_node_to_std memory — all three implicitly pointed at this end state without naming it. This PR names it, bounds it (positive definition), and makes it measurable (ratchet).

Test plan

  • Confirm the gap-analysis inventory is accurate (spot-check any file I may have miscounted)
  • Confirm the positive definition (pipeline + regen + lens-body + accessor) is the right boundary — is there something I'm missing that should stay compiler-API?
  • Confirm THESIS.md placement works (after Self-Inspection, before Two Groundings)
  • Confirm the ROADMAP debt row's migration list doesn't miss obvious cases

🤖 Generated with Claude Code

New thesis claim: in the mature v3 state, the only things that exist are
(1) std/ concepts and (2) a minimal set of pure .dag compiler APIs.
Compiler-specific taxonomies that duplicate user-facing concepts are
dual representations at the architectural layer, dissolved by
consolidation.

Three artifacts:

1. **NEW: docs/thesis/compiler-std-consolidation.md** — the end-state
   doc. Contains:
   - The claim and its load-bearing connection to P1 Modeling Faithfulness
     (ungrounded internal taxonomies), P2 Boundary Discipline
     (compiler/user boundary is self-imposed not semantic), and P5
     Progress Is Dissolution (every duplicate is a bridge with an
     implicit trigger).
   - Positive definition of what stays compiler-specific: pipeline.dag
     orchestration, regen.dag code-generation registry, lens bodies
     under lenses/*.dag, substrate reflection accessors, and a minimal
     stage0 shim (target ≤5 Rust files).
   - Gap analysis inventorying current v3 state:
     - tokenize.dag → std/tokenize.dag (6 types)
     - runtime_mirrors.dag → std/syntax.dag (14 Surface* types)
     - parse_tables.dag → debatable split (3 types)
     - src/v3/std/* → dsl/std/* (whole tree, gated on v2 retirement)
   - Alignment check against the 2026-04-22 wave: no lane introduces
     new dual-representation debt; Algebra Quartet + Pipeline Authority
     actively dissolve it.
   - Ratchet definition: count of type declarations in
     src/v3/compiler/*.dag outside pipeline/regen/lenses → 0.
   - Discipline section with 4 rules for future briefs.

2. **THESIS.md**: new claim section "Compiler–std/ consolidation: no
   dual representations at the compiler/user boundary", placed after
   Self-Inspection (natural flow: substrate is its own subject AND
   shares its ontology with user programs).

3. **ROADMAP.md**: top-of-file callout pointing at the new doc, plus a
   new debt row "Compiler–std/ consolidation program — specific
   migrations" listing the five tracked migrations (tokenize,
   runtime_mirrors, parse_tables, src/v3/std/ → dsl/std/, Node → std/)
   each as a standalone lane with migration-gate named where relevant.

This formalizes what was previously scattered across Pure Bootstrap,
file-preference-scaffold, and project_node_to_std as a coherent
end-state claim with a measurable ratchet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title gunbc Director docs(thesis): compiler–std/ consolidation end state + gap analysis Apr 22, 2026
@briansrls
briansrls marked this pull request as ready for review April 22, 2026 06:36

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c923a5d000

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


#### From `src/v3/compiler/parse_tables.dag` → unclear

- `BinaryOpLevel`, `BinaryOpRow`, `TopLevelItemKwRow`, `TypeRhsBoundaryRow` (3 types)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fix parse_tables type list to match current authority

The parse-tables inventory is currently inaccurate: it lists TypeRhsBoundaryRow and says “(3 types)”, but src/v3/compiler/parse_tables.dag defines four row/enum types and uses BracketRow instead of TypeRhsBoundaryRow. Because this section is used as migration planning input, the mismatch can cause the consolidation lane to track the wrong surface and leave real parser-table authority (BracketRow) out of scope.

Useful? React with 👍 / 👎.

- [docs/design-pure-bootstrap.md](../design-pure-bootstrap.md) — the algorithmic-emission side of the bootstrap program
- [docs/v3-lens-capability-register.md](../v3-lens-capability-register.md) — analysis-side honesty register (parallel discipline, different axis)
- [INVARIANTS.md](../../INVARIANTS.md) §P1, §P2, §P5 — the invariants this claim extends
- [feedback_epistemic_stacking memory](../../../.claude/projects/-Users-briansrls-gunbc/memory/feedback_epistemic_stacking.md) — every concept grounds in primitives via ontological DAG

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Replace non-repo related-doc link with a tracked reference

This related-doc entry points to a local .claude/projects/... path that is not part of the repository, so the link is dead for other contributors and for rendered docs. Keeping non-portable links in a thesis doc breaks traceability of the claimed grounding source and makes the reference unverifiable outside the author’s machine.

Useful? React with 👍 / 👎.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: c923a5d0 · Trigger: schedule
  • Thinking: 56s wall

This is a docs-only PR: one new thesis sub-doc (docs/thesis/compiler-std-consolidation.md), a one-paragraph addition to THESIS.md, and one new ROADMAP entry (plus one banner line). No code is touched.

I verified the referenced files exist (pipeline.dag, regen.dag, tokenize.dag, runtime_mirrors.dag, parse_tables.dag, the src/v3/std/*.dag set, docs/design-pure-bootstrap.md, docs/v3-lens-capability-register.md). The claim cleanly extends P1/P2/P5 — it names compiler-side dual-representation as a tracked-debt category and supplies a primary ratchet (type decl count outside pipeline/regen/lenses → 0), a secondary ratchet (≤5 hand-Rust files), and per-bullet dissolution triggers in ROADMAP. That matches "documented + bounded + named trigger" for tracked debt.

Findings

None blocking. Two minor cosmetics:

  • ROADMAP.md:188 — the new sub-bullet src/v3/std/*.dag → dsl/std/*.dag says "tracked separately at ROADMAP:169 (file-preference rank scaffold)". A line-number self-reference in the same file is brittle; the file-preference rank scaffold is a stable named bullet — anchor by heading/name rather than line. Non-blocking.
  • docs/thesis/compiler-std-consolidation.md:122 — "Current state: ~26 types … + ~3 from other compiler .dag files I haven't fully catalogued". First-person uncatalogued count is fine for a thesis doc but undermines the ratchet definition above it. If this ratchet is meant to be enforced, a follow-up should pin the exact baseline. Non-blocking.

Verdict

APPROVE — docs-only, narrowly scoped, internally consistent with existing thesis claims and tracked-debt discipline. The two cosmetics above are not worth blocking on.

Exploratory observations (optional)

  • The ratchet as written ("count of type declarations in src/v3/compiler/*.dag AND src/v3/std/*.dag outside pipeline/regen/lenses") would be a natural CI script — a single grep over those paths producing a number, with feedback_ratchet_only_down semantics. If it stays only narrative, future drift won't be caught. Worth queueing as a small infra lane alongside the migration lanes themselves.
  • The "downgrades are first-class" discipline (point 4) is the genuinely novel piece here — most tracked-debt frameworks track scaffolds going up (added with a trigger). Calling out duplications going down (a std/ type re-mirrored compiler-side) as needing explicit justification is a tighter constraint than the surrounding invariants explicitly state. Worth promoting into INVARIANTS.md eventually if it survives contact with the migration lanes.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: c923a5d0 · Trigger: schedule
  • Thinking: 115s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:119 and ROADMAP.md:188 define the new consolidation ratchet differently. The thesis doc says the primary ratchet counts type declarations in both src/v3/compiler/*.dag and src/v3/std/*.dag, while the roadmap row narrows it to src/v3/compiler/*.dag only. That gives the program two authorities for the same enforcement metric, which is a P2 Boundary Discipline / single-authority problem in the docs themselves. docs/thesis/compiler-std-consolidation.md:121 then compounds it by giving a ~26 baseline that only makes sense for the compiler-only interpretation, not the compiler+std/ one.
  • ROADMAP.md:191 tracks parse_tables.dag as a consolidation lane, but the row is still “decide later” with no owner or dissolution trigger; docs/thesis/compiler-std-consolidation.md:64/:66 says the same. Under P5’s tracked-bridge discipline, this is documented but not actually bounded yet. The other rows name a gate or trigger; this one should too before it becomes roadmap authority.

Verdict
APPROVE_WITH_COMMENTS. The thesis direction reads coherent, and I don’t see a deeper modeling or testing violation in the docs-only diff. The two issues above are worth tightening now because this PR’s main value is establishing a precise authority surface and ratchet for future work.

briansrls and others added 4 commits April 22, 2026 02:40
…w not TypeRhsBoundaryRow

Codex inline finding on #642 sha c923a5d: the parse_tables inventory
was inaccurate. Verified against HEAD:

src/v3/compiler/parse_tables.dag actually declares:
- BinaryOpLevel
- BinaryOpRow
- TopLevelItemKwRow
- BracketRow

My PR wrote "TypeRhsBoundaryRow" (doesn't exist) and said "(3 types)"
while listing four names. Both the thesis doc and the ROADMAP row
inherited the wrong inventory, which would have let the consolidation
lane miss `BracketRow` as real tracked parser-table authority.

Fixes:
- docs/thesis/compiler-std-consolidation.md:62 — replace the list and
  correct the count to 4
- ROADMAP.md:191 — add BracketRow to the per-type decision list

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codex inline finding on #642: the Related docs section at line 147
linked to docs/../.claude/projects/... which is my local memory path,
not part of the repository. Dead link for other contributors and for
rendered docs.

Fix: replace with docs/thesis/epistemic-stacking.md which is the
in-repo long-form of the same grounding claim. That doc is already
cited in the header at line 2, so this is the correct canonical
in-repo pointer. Memory was a sibling source; the thesis doc carries
the claim content.

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

Codex finding on #642 sha c923a5d (finding #2): the parse_tables.dag
row was documented but not bounded — "defer to the specific migration
lane" is not a dissolution trigger under P5 tracked-bridge discipline.

Fix: name an explicit trigger and owner. The decision about which
parse_tables rows are "parser internal dispatch" (stays compiler-API)
vs "language-level syntax facts" (moves to std/syntax.dag) is
genuinely under-determined until the .dag parser exists — only then
do we know which rows the parser actually dispatches on.

Named:
- Owner: whoever picks up SG-2c proper parser cutover
- Migration-gate: SG-2c proper completion
- Precedent rule: if any individual row needs to move before SG-2c
  proper lands, that mover-lane sets the classification for that row
  and the rest follow the same rule when touched

Both thesis doc and ROADMAP row updated consistently.

(Note: Codex finding #1 in the same review — ratchet definition
mismatch between doc and ROADMAP — was already resolved by the
prior ratchet-pin commit 7cc79ee which split the thesis doc into
primary (compiler-only) / secondary (v3/std) / tertiary (hand-Rust)
and aligned the ROADMAP to the primary scope.)

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

@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 / gpt-5.4
  • Commit: c923a5d0 · Trigger: schedule
  • Thinking: 629s wall

Non-blocking — Strengths

  • THESIS.md The new thesis section lands in the right place: it follows naturally from self-inspection and does not contradict the surrounding claims.
  • docs/thesis/compiler-std-consolidation.md The positive-definition boundary is grounded in actual files and the current compiler/std inventory matches the live tree, including the expanded parse_tables.dag surface.

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

  • docs/thesis/compiler-std-consolidation.md The tertiary ratchet is phrased as a file count but reports a fuzzy “5-10 substantial hand-Rust files”; if you want it to function as a real ratchet, tie it to the same EXPECTED_HAND_AUTHORED or SG-0 census used in docs/design-pure-bootstrap.md (PB-0 if deferred).

ROADMAP — Verified

  • Compiler-std consolidation program: The new ROADMAP row covers the obvious migration lanes the thesis doc names instead of leaving the consolidation end state implicit.

✅ The thesis addition, positive-definition split, and migration plan look coherent against the current branch state; only the tertiary ratchet wording feels worth tightening later.

… authority

Codex non-blocking observation on #642: the tertiary ratchet was
phrased fuzzily ("5-10 substantial hand-Rust files"). That estimate
was actually order-of-magnitude wrong — per Pure Bootstrap design,
the live count is 78, not 5-10.

Fix: don't duplicate the ratchet — point at Pure Bootstrap's
authoritative source. SG-0's EXPECTED_HAND_AUTHORED ∖ GENERATED_FILES
(in src/v3/compiler/tests/integration/sg0_census_test.rs) is the live
ratchet; docs/design-pure-bootstrap.md's PB-0 is the program. The
consolidation doc's tertiary ratchet is now a pointer to the PB
authority with explicit numbers (78 → ≤5), not an independent
measurement.

Connects Band-C-STUB dissolution (from lens capability register) as
part of the hand-Rust dissolution story — some of the ~20 lens-
adjacent Rust files are STUB backs waiting on substrate carriers +
emit match capabilities.

Single authority for the ratchet (PB's census); the consolidation
doc composes that authority into its tracked-migration view.

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: a070474a · Trigger: schedule
  • Thinking: 41s wall

Verdict: APPROVE — docs-only PR adding a thesis claim + ratchet anchors. All quantitative claims verified against the worktree (tokenize.dag=6, runtime_mirrors.dag=14, parse_tables.dag=4, pipeline.dag=3, regen.dag=1, operators.dag=0, std/ tree = 142 types across 13 files — all exact matches). Each migration carries a named dissolution trigger (SG-2b/SG-3f, SG-2c-proper, file-preference scaffold dissolution, v2 retirement), satisfying the tracked-debt bar. The tertiary ratchet explicitly anchors to SG-0's census authority rather than duplicating it (commit a070474a fixes what would otherwise have been a parallel-authority violation at the doc layer — good self-catch). ROADMAP entry and THESIS.md link both cross-reference the new doc cleanly. No findings.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: a070474a · Trigger: schedule
  • Thinking: 80s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:138 — This hard-codes the tertiary ratchet as “78 hand-maintained .rs files,” but the authority the same sentence names, EXPECTED_HAND_AUTHORED in src/v3/compiler/tests/integration/sg0_census_test.rs, currently contains 88 entries. Because this doc is defining an “authoritative measure,” the stale count violates INVARIANTS.md P1’s “Documentation Describes Live State” requirement.

Verdict: REQUEST_CHANGES. The new consolidation doc is otherwise coherent, and the primary/secondary ratchet numbers check out, but the tertiary ratchet is wrong in the current tree by the authority it cites. That should be corrected before merge.

Codex BLOCKING review on #642 sha a070474: tertiary ratchet
hardcoded "78 hand-maintained .rs files" which violates P1's
Documentation-Describes-Live-State — the live EXPECTED_HAND_AUTHORED
census has 89+ entries under src/v3/compiler/, not 78. My number was
inherited from docs/design-pure-bootstrap.md's own stale count.

Two fixes:

1. **Thesis doc**: stop hardcoding a count in prose. The authority
   is the live SG-0 census; any number written here ages immediately.
   Replaced with "do not hardcode a count here — the live census is
   the source of truth." Include one dated spot measurement for
   signal (89 entries on 2026-04-22) with the exact grep command,
   so future readers can reproduce rather than trust prose.

2. **ROADMAP**: the stale-receipt sweep debt row now explicitly
   includes the PB design doc's "78" count as an item to fix. That
   number is the upstream source I inherited from; the sweep should
   either refresh it or delete it and point at the live census.

Lesson: if you're citing a ratchet, point at the ratchet authority.
Don't paste its current value into prose. "See EXPECTED_HAND_AUTHORED"
stays true; "EXPECTED_HAND_AUTHORED has 78 entries" goes stale in
the next PR that adds a file.

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: 91c8864f · Trigger: schedule
  • Thinking: 49s wall

All counts in the new thesis doc verified against the worktree:

  • tokenize.dag=6, runtime_mirrors.dag=14, parse_tables.dag=4, operators.dag=0, pipeline.dag=3, regen.dag=1 ✓
  • src/v3/std/*.dag: 38+28+26+12+10+8+6+4+3+3+2+2+0 = 142 ✓
  • SG-0 census has 89 entries under src/v3/compiler/ ✓
  • design-pure-bootstrap.md stale "78" correctly flagged ✓

Verdict

APPROVE — Docs-only PR (ROADMAP, THESIS, and one new docs/thesis/ file). Every numeric claim in the new doc checks out against the current tree, including the ratchet baselines and the stale-count observation about design-pure-bootstrap.md (which is correctly queued into the existing stale-receipt sweep row rather than fixed in-flight, since it's out of scope).

The new discipline it introduces — home-check for new types in src/v3/compiler/*.dag / src/v3/std/*.dag against the positive definition (pipeline / regen / lens-body / accessor) — is a direct extension of P2 (boundary discipline) and P5 (progress is dissolution) and doesn't contradict anything in INVARIANTS.md or MODELING.md. The migration lanes it names are scheduled, not forced, and each has a documented migration gate — i.e., they're tracked bridges under the P5 rubric, not hidden debt.

Exploratory observations (optional)

  • The doc asserts "every new type … requires a home-check" and "every brief that introduces new compiler-side types must cite this doc." That's a process rule with no enforcement mechanism in the diff. Matches the style of other thesis docs, and the ratchet itself (grep -cE "^type [A-Z]" src/v3/compiler/*.dag outside pipeline/regen/lenses) is mechanically checkable, so a future lane could wire it into CI the way the SG-0 census is wired. Not an ask — just noting the natural next step if this rule starts drifting.
  • Secondary ratchet's baseline of 142 is gated on a single macro event (file-preference scaffold dissolution / v2 retirement). That's fine, but it means the secondary ratchet won't move at all until that gate opens — effectively a binary counter rather than a ratchet. Worth considering whether per-file migration precedents could unlock incremental decreases, or accepting it as a step function.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: 91c8864f · Trigger: schedule
  • Thinking: 139s wall

Findings

Verdict

REQUEST_CHANGES

The consolidation direction looks sound, and the factual counts I spot-checked match the tree. But the parse_tables end state needs one authoritative answer before this doc and its ROADMAP hook can function as the single source of truth they’re meant to be.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: a1cb27e9 · Trigger: schedule
  • Thinking: 73s wall

All numbers in the doc verify exactly against the live tree:

  • src/v3/compiler/*.dag type counts: tokenize 6, runtime_mirrors 14, parse_tables 4, pipeline 3, regen 1 — matches the table.
  • SG-0 census src/v3/compiler/ entries: 89 — matches the "89 entries (vs PB design doc's stale 78)" claim.
  • src/v3/std/*.dag per-file counts and the 142 total — matches the secondary-ratchet table exactly.

The diff is entirely docs (THESIS link + new docs/thesis/compiler-std-consolidation.md + ROADMAP rows + a stale-receipt sweep note). No code under review.

Against the rubric:

  • P1/P2/P5: The doc operationalizes these across the compiler/user boundary rather than violating them. It names a positive definition (pipeline / regen / lens-body / accessor) for what stays compiler-side, declares the rest as scheduled migrations, and gives every scheduled migration a named dissolution trigger (SG-2b/SG-3f cutover for runtime_mirrors; SG-2c-proper for parse_tables; v2 retirement / file-preference scaffold dissolution for src/v3/std/*). Each lane is documented + bounded + has a named trigger — the tracked-debt rule is satisfied.
  • parse_tables.dag exemption: explicit protocol, explicit dissolution condition, explicit per-row precedent rule — not a silent escape hatch.
  • Tertiary ratchet: explicitly refuses to hardcode a count, anchors to the live SG-0 census, and treats the PB design doc's stale "78" as tracked stale-receipt sweep work. Good discipline; avoids the "Documentation Describes Live State" failure mode.
  • CODING.md / TESTING.md: nothing in this diff touches Rust or tests.

Verdict: APPROVE — docs-only, all factual claims verified against tree, ratchets and exemptions are well-formed scaffolds with named triggers.

Exploratory observations (not asks):

  • The ROADMAP "Stale-receipt sweep" entry now mixes the original cosmetic-prose-drift scope with a specific PB-design-doc count fix surfaced during this review. That's fine for a tracking row, but if/when that lane is dispatched, the PB count fix probably wants its own one-line lane rather than being lost inside the cosmetic sweep — it's a concrete authority-vs-prose fix with a measurable check.
  • The doc's "discipline" §4 introduces "downgrades are first-class" — this is a new procedural rule about future PRs. It would land more enforceably as a reviewer-checklist item or a PR-template line than as prose at the bottom of a thesis doc; today nothing mechanical reads it.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: a1cb27e9 · Trigger: schedule
  • Thinking: 121s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:81, :119, :155 — P5 Progress Is Dissolution / tracked-debt discipline: the doc treats src/v3/lenses/*.dag as “bodies only” positive-definition and omits them from both the primary ratchet and the home-check scope, but the current tree already has lens-local type declarations (src/v3/lenses/cost.dag, infer_helpers.dag, provenance.dag, structural_resolution.dag, unused_parameters.dag, variant_payload.dag; 12 total). That makes Primary ratchet count today: 20 an undercount of compiler-side type debt and leaves future lens-local types outside the new discipline unless they are explicitly classified.

Verdict
REQUEST_CHANGES. The end-state framing is useful, but the core ratchet is not yet measuring the whole debt class it claims to govern. I’d fix the lens-file classification/scope first, then this reads cleanly.

briansrls and others added 2 commits April 22, 2026 03:30
… disposition

Codex BLOCKING review on #642 sha a1cb27e: the ratchet's "lens
bodies only" framing conflated fn definitions (bodies) with type
declarations in the same files. Current tree has 12 type decls
across 6 lens files (CostLookup, Origin, TemplateArgumentLookup,
UnusedParameter, DeclarationLookup, etc.) — these were outside the
ratchet scope, making "20" an undercount of compiler-side type debt.

Fix: broaden the ratchet scope and explicitly classify lens-local
types.

Three-way classification (the single answer Codex asked for):

1. Positive-def: lens-specific return-type carriers that represent
   the lens's published API (e.g., `Origin` for provenance,
   `UnusedParameter` for unused_parameters, `CostEntry` for cost)

2. In-ratchet (migrates to std/): generic-Lookup-pattern carriers
   that duplicate a 2-variant `Missing | Found(T)` shape across
   lenses (`CostLookup`, `TemplateArgumentLookup`, `DeclarationLookup`).
   Dissolution target: a single `std/Lookup<T>` generic.

3. Exempted pending trigger: parse_tables.dag (4 types, unchanged)

Updates:
- Ratchet scope now explicitly covers src/v3/compiler/*.dag AND
  src/v3/lenses/*.dag
- Per-file disposition table extended with all 10 lens files and
  classification
- Baseline: ~25 (20 tokenize+runtime_mirrors + ~5 Lookup-pattern
  across lenses; exact lens breakdown firms up as the Lookup
  generalization lane scopes; two structural_resolution.dag types
  pending header review)
- Discipline rule #1 extended: home-check applies to
  src/v3/lenses/*.dag too, with explicit note that lens-local types
  are positive-def ONLY when genuinely lens-specific — generalizable
  patterns count against ratchet
- Positive definition updated: "Lens bodies" split into two lines —
  fn definitions always positive-def; type declarations positive-def
  only when lens-API-specific

Added ROADMAP migration row for the generic-Lookup-pattern
dissolution:
- Generic `Lookup<T>` in std/ → dissolve per-lens carrier duplicates
- ~5 types → 1
- Owner: unassigned; no migration gate (pure type work, generics
  already work)

At any point for any compiler-side lens or compiler .dag type, one
authoritative classification applies: positive-def, in-ratchet, or
exempted. No ambiguity.

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: 225bdf38 · Trigger: schedule
  • Thinking: 85s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:132 — "See [INVARIANTS.md] P2 'Fail-closed lookup carriers'". P2 is "Boundary Discipline"; "Fail-Closed" is P3 in the base-branch INVARIANTS.md. The phrase "Fail-closed lookup carriers" is not a named rule in INVARIANTS.md either, so the reader can't chase the citation. Minor — NON-BLOCKING. Relabel to P2 without the quoted phrase (a fail-closed carrier shape is a Boundary-Discipline concern), or drop the cross-reference.

Exploratory observations

  • Factual spot-checks on the ratchet tables all tie out against the worktree: tokenize.dag=6, runtime_mirrors.dag=14, parse_tables.dag=4, pipeline.dag=3, regen.dag=1; lens counts match the table; the 142-type secondary-ratchet sum reconciles; SG-0 census really does have 89 src/v3/compiler/ entries. Good discipline — the prose anchors to live counts rather than hardcoding.
  • The self-flagging of docs/design-pure-bootstrap.md's stale "78" as a ROADMAP stale-receipt-sweep item (ROADMAP.md:187) is a nice touch — the live count is 89 in five places in that doc, so the sweep will be non-trivial. Worth doing adjacent to this PR rather than letting it compound.
  • The thesis claim ("compiler and user share one ontology; compiler-specific ⇒ pipeline/regen/lens-API/accessor or it's debt") is a clean P5 extension. The ratchet construction — with an explicit exempted bucket for parse_tables.dag pending a named trigger (SG-2c proper) — satisfies the tracked-debt discipline (documented + bounded + named dissolution trigger).

Verdict

APPROVE_WITH_COMMENTS — docs-only PR, all verifiable claims tie out against the worktree, and the new thesis doc formalizes a real discipline with a measurable ratchet and a clean exemption protocol. The one nit is the P2/P3 citation at line 132 of the new doc.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: 225bdf38 · Trigger: schedule
  • Thinking: 124s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:153 and ROADMAP.md:194 classify src/v3/lenses/variant_payload.dag as carrying a DeclarationLookup / generic 2-variant Missing | Found(T) ratchet entry, but the live lens now declares VariantPayloadShapeLookup = DeclarationMissing | NotPayloadProduct | Found(VariantPayloadShape). Because this PR’s new ratchet/baseline text is meant to describe current state, that mismatch violates INVARIANTS.md’s “Documentation Describes Live State” rule and makes the consolidation inventory/count unreliable.

Verdict
REQUEST_CHANGES. The overall direction looks fine, but the new consolidation doc and linked ROADMAP row need to be brought back in sync with the current variant_payload lens before this ratchet baseline is trustworthy.

…ine 81

Pro non-blocking on #642 sha 225bdf3: I wrote 'See [INVARIANTS.md]
P2 "Fail-closed lookup carriers"' but:
- P2 is "Boundary Discipline", not "Fail-Closed"
- "Fail-closed" is P3
- "Fail-closed lookup carriers" is not a named rule in INVARIANTS.md
  under either principle

Dropped the quoted phrase. The underlying point — that generic-Lookup
carrier generalization is a single-authority concern — is correctly
P2 Boundary Discipline (typed-carrier shape shared across lenses
shouldn't be re-declared per-lens). Reframed the citation without
the non-existent quoted rule name.

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

@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 / gpt-5.4
  • Commit: 225bdf38 · Trigger: schedule
  • Thinking: 376s wall

BLOCKING (1)

Root Cause

  • docs/thesis/compiler-std-consolidation.md The lookup-carrier inventory was copied from older debt state instead of being recomputed from the current src/v3/lenses/*.dag files -> refresh the lens slice, then update both the thesis baseline table and the matching ROADMAP lane text.

ROADMAP — Incomplete

  • Generic Lookup lane: The new deferred-debt row still scopes the lane around DeclarationLookup, so it should be refreshed to the current lens carriers before it becomes dispatch authority.

⚠️ The consolidation direction is sound, but the new ratchet inventory is stale on the current branch and should be corrected before the thesis/roadmap baseline lands.

| `src/v3/lenses/provenance.dag` | 1 | positive-def (`Origin` — genuinely provenance-specific) |
| `src/v3/lenses/structural_resolution.dag` | 2 | classification pending (likely lens-API + regression pin carrier) |
| `src/v3/lenses/unused_parameters.dag` | 1 | positive-def (`UnusedParameter`) |
| `src/v3/lenses/variant_payload.dag` | 2 | 1 lens-API + 1 in-ratchet (`DeclarationLookup` — Lookup pattern) |

This comment was marked as resolved.

briansrls and others added 4 commits April 22, 2026 03:47
…ve shapes

Codex BLOCKING review on #642 sha 225bdf3: I classified
`VariantPayloadShapeLookup` as a 2-variant Missing|Found generic
Lookup pattern candidate. Wrong — the live type is:

  VariantPayloadShapeLookup
    = DeclarationMissing
    | NotPayloadProduct
    | Found(VariantPayloadShape)

Three variants with a semantically distinct NotPayloadProduct state.
That's lens-API, not generic Lookup.

Verifying against actual declarations surfaces a second
misclassification I made: `TemplateArgumentBinding = Conflict | NoOp
| Append` in infer_helpers.dag is also a 3-variant semantic carrier,
not a 2-variant Missing|Found Lookup. Lens-API too.

Strict verification of 2-variant Missing|Found Lookup pattern shows
only 3 instances qualify:
- CostLookup = MissingCost | FoundCost(Int)
- SymbolicCostLookup = MissingCost | FoundCost(SymbolicCost)
- TemplateArgumentLookup = MissingTemplateArgument | FoundTemplateArgument(DeclarationId)

Both Codex's specific finding (`VariantPayloadShapeLookup`) and my
independent re-verification ($TemplateArgumentBinding$) corrected.

Baseline count: ~25 → 23 (20 tokenize+runtime_mirrors + 3 strict
Lookup patterns).

Updated positive-def text to be precise: carriers with additional
semantic variants are lens-API even when they superficially look
Lookup-shaped. Example names pinned to live shapes (Origin,
UnusedParameter, VariantPayloadShapeLookup 3-variant,
TemplateArgumentBinding 3-variant).

ROADMAP row updated: baseline 23, in-ratchet list restricted to the
three actual 2-variant Lookup patterns. Generic-Lookup migration row
scope narrowed from "~5 types" to "3 types" with explicit exclusion
of 3-variant semantic carriers.

Lesson: classification claims need verification against live shapes,
not inference from type names. "DeclarationLookup" doesn't exist;
the real carrier name was different and the shape was 3-variant.

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

Codex relay against line 153 was already fixed (variant_payload row
is correctly classified as both lens-API 3-variant). But the parallel
ratchet-tracked description at line 132 still had the stale
"DeclarationLookup" reference that doesn't match any live type —
inherited from the same misclassification my previous commit fixed
at line 81 but missed propagating here.

Replaced with the accurate 3-instance list (CostLookup,
SymbolicCostLookup, TemplateArgumentLookup) plus an explicit
anti-example (VariantPayloadShapeLookup and TemplateArgumentBinding
are 3-variant semantic carriers, not generic Lookup pattern).

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

Codex BLOCKING review against sha 225bdf3: "lookup-carrier inventory
was copied from older debt state instead of being recomputed from
current lens files." Codex's specific findings (thesis doc table +
Generic Lookup<T> row scope) were already addressed in c4f4643 +
ac46a29.

Verification surfaced an adjacent stale-inventory issue Codex didn't
directly flag but it's the same pattern: ROADMAP line 172 described
`DeclarationLookup` parallel authority in variant_payload.dag as
live debt, when the SG-4b-1-fix lane had already dissolved it.

Live state verified:
- variant_payload.dag imports declaration_by_id from std.substrate
  (line 19)
- Uses it at line 58: match declaration_by_id(d, variant_id) { ... }
- No find_declaration function
- No DeclarationLookup type
- Exports VariantPayloadShapeLookup = DeclarationMissing |
  NotPayloadProduct | Found(VariantPayloadShape) as the 3-variant
  lens-API carrier

Updated the debt row to mark it RESOLVED, note the current shape
(declaration_by_id substrate accessor + VariantPayloadShapeLookup
carrier), and flag it as a candidate for the 2026-04-21 stale-
receipt sweep.

Lesson reinforced: every ROADMAP inventory claim needs verification
against live code. Stale debt rows that describe dissolved work as
active debt contaminate the planning surface they're supposed to
serve.

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

Copy link
Copy Markdown
Contributor Author

Both of Codex's specific findings are already addressed in commits after sha 225bdf38:

(1) Lookup-carrier inventory in thesis doc — fixed across commits c4f46436e + ac46a2986:

  • Table at line 153 now classifies variant_payload.dag as "both positive-def (VariantPayloadShape domain type + VariantPayloadShapeLookup — 3-variant carrier with NotPayloadProduct semantic distinction, not generic Lookup)"
  • Ratchet description at line 132 now lists only the 3 actual 2-variant Lookup patterns (CostLookup, SymbolicCostLookup, TemplateArgumentLookup) with explicit anti-examples
  • Positive-def section at line 81 lists VariantPayloadShapeLookup and TemplateArgumentBinding as lens-API examples
  • Baseline corrected: ~25 → 23

(2) Generic Lookup<T> ROADMAP row — fixed in the same range. Now reads: "dissolve per-lens CostLookup / SymbolicCostLookup / TemplateArgumentLookup duplicates ... Scope is strict 2-variant shape only — carriers with additional semantic variants (e.g., VariantPayloadShapeLookup's NotPayloadProduct, TemplateArgumentBinding's Conflict | NoOp | Append) stay lens-API." No more DeclarationLookup reference.

Bonus proactive fix in commit 4c1f86fbf: verification surfaced an adjacent stale-inventory issue Codex didn't directly flag but it's the same pattern. ROADMAP line 172 still described the DeclarationLookup parallel authority in variant_payload.dag as live debt, when the SG-4b-1-fix lane had already dissolved it. Verified:

  • variant_payload.dag imports declaration_by_id from std.substrate (the substrate accessor)
  • Uses it at line 58: match declaration_by_id(d, variant_id) { ... }
  • No find_declaration function, no DeclarationLookup type
  • VariantPayloadShapeLookup is the 3-variant lens-API carrier

Updated line 172 to mark that debt as RESOLVED, note the current shape, and flag it for the 2026-04-21 stale-receipt sweep.

Current HEAD: 4c1f86fbf. Every DeclarationLookup reference in both thesis doc and ROADMAP now either (a) doesn't exist, (b) describes resolved historical debt with clear RESOLVED tagging, or (c) is in the stale-receipt-sweep row as an example of the sweep pattern. No live claim that DeclarationLookup is current.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 4c1f86fb · Trigger: schedule
  • Thinking: 54s wall

Verdict: APPROVE — docs-only PR; numeric claims verified, no code changes.

Spot-checked every load-bearing count in the new thesis doc against the tree:

  • tokenize.dag=6, runtime_mirrors.dag=14, parse_tables.dag=4, pipeline.dag=3, regen.dag=1 ✓
  • All 10 lens type counts match ✓
  • v3/std totals to 142 across 13 files ✓
  • SG-0 census spot count = 89 (matches doc's claim, vs stale "78" in design-pure-bootstrap.md — PR already flags this for the sweep)
  • Primary ratchet baseline of 23 = 6+14+3 ✓

The thesis aligns with INVARIANTS.md — it explicitly grounds itself in P1/P2/P5 and frames compiler-side dual representations as boundary-discipline debt, which is consistent. The ratchet is well-specified: positive-def set named, parse_tables.dag exemption has a named dissolution trigger (SG-2c-proper), the 2-variant-Lookup vs semantic-variant distinction is carefully drawn (e.g., VariantPayloadShapeLookup's NotPayloadProduct stays lens-API, the three strict Missing|Found carriers are in-ratchet). That's the tracked-debt pattern CLAUDE.md/INVARIANTS call for.

No code, no substrate changes, no findings. Thesis doc + ROADMAP row + THESIS.md pointer are mutually consistent.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: 4c1f86fb · Trigger: schedule
  • Thinking: 121s wall

Findings

  • docs/thesis/compiler-std-consolidation.md:120 and docs/thesis/compiler-std-consolidation.md:178 define the consolidation rule over src/v3/lenses/*.dag as well as src/v3/compiler/*.dag, and they treat lens-specific return carriers as part of the positive-definition set. But ROADMAP.md:9 restates the rule as applying only to src/v3/compiler/*.dag or src/v3/std/*.dag, and its parenthetical positive-definition summary drops lens-specific carriers in favor of just lens-body. Since ROADMAP.md is the operational tracker, this creates two authorities for which files need the home-check and which lens-side types are allowed to stay compiler-local, which is a P2 Boundary Discipline / “documentation describes live state” problem.
  • docs/thesis/compiler-std-consolidation.md:151 marks the two structural_resolution.dag types as “classification pending,” but docs/thesis/compiler-std-consolidation.md:155 still fixes the primary ratchet baseline at 23 by counting only tokenize + runtime_mirrors + 3 lookup carriers. That doesn’t follow from the ratchet definition at docs/thesis/compiler-std-consolidation.md:120-128, which only exempts parse_tables.dag; until structural_resolution.dag is either classified into the positive-definition set or explicitly exempted, the baseline is not mechanically derivable. That undermines the doc’s single-authority ratchet.

Verdict: REQUEST_CHANGES

The new thesis doc is useful and most of the concrete inventory work checks out, but these two scope/baseline contradictions hit the core operational claim of the PR. I’d fix the ROADMAP summary to match the thesis rule and either classify or explicitly exempt structural_resolution.dag before merging.

…structural_resolution types

Codex BLOCKING review on #642 sha 4c1f86f flagged two real
contradictions.

**Finding 1 — ROADMAP top-of-file callout scope drift.**

The callout said new types in `src/v3/compiler/*.dag` or
`src/v3/std/*.dag` require the home-check, with positive-def
summary "pipeline / regen / lens-body / accessor". But the thesis
doc's rule (lines 120, 178) extends to `src/v3/lenses/*.dag` AND
uses more precise positive-def language ("lens-specific return
carriers", not "lens-body", which conflated fn bodies with type
declarations in the same files).

Two different authorities for which files need the home-check and
which lens-side types stay compiler-local — P2 violation in a doc
whose job is to be the reviewer-facing tracker.

Updated ROADMAP callout to:
- Include `src/v3/lenses/*.dag` in scope
- Positive-def summary: "pipeline types / regen types / lens-specific
  return carriers / substrate accessors"
- Add explicit distinction: "Lens-local 2-variant Missing|Found
  Lookup duplicates count against the ratchet; carriers with distinct
  semantic variants stay lens-API"

Now the callout summarizes the thesis rule faithfully; no dual
authority.

**Finding 2 — `structural_resolution.dag` baseline accounting.**

Baseline of 23 = 20 (tokenize + runtime_mirrors) + 3 (Lookup patterns).
But ratchet definition only exempts parse_tables.dag — and the
`structural_resolution.dag` row was marked "classification pending"
without being in the exemption list. So the baseline math didn't
follow from the ratchet definition.

Verified the file's actual types:
- UnresolvedArrowBody { declaration, name, span } — record
- NameKeyedReference { declaration, resolved_to, span } — record

Both are lens-API record types carrying the lens's findings (list
of unresolved arrow bodies as regression pins, list of name-keyed
references). Neither is a 2-variant Lookup pattern. Classified
both as positive-def (lens-specific return carriers).

With this classification, the baseline of 23 is now mechanically
derivable: every lens-local type has a pinned classification, and
the math works.

Both fixes preserve the invariant the review explicitly protects:
a doc claiming to be the single source of truth can't itself carry
dual authorities or unclassified items that break its own
arithmetic.

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: aab147d3 · Trigger: schedule
  • Thinking: 76s wall

Verdict: APPROVE — docs-only PR; new thesis claim, ROADMAP callout, and gap-analysis doc are well-grounded and self-checked against the live tree.

Verification spot-checks (all pass):

  • Type counts in the baseline table all match grep -cE "^type [A-Z]" on every cited file: tokenize.dag=6, runtime_mirrors.dag=14, parse_tables.dag=4, pipeline.dag=3, regen.dag=1, plus every lens count.
  • parse_tables.dag row names (BinaryOpLevel, BinaryOpRow, TopLevelItemKwRow, BracketRow) match — corrects the earlier misnamed TypeRhsBoundaryRow per commit 1da60015.
  • Lens classifications (CostLookup/SymbolicCostLookup/TemplateArgumentLookup as strict 2-variant Lookups; VariantPayloadShapeLookup's NotPayloadProduct; structural_resolution.dag's two record carriers) match the live source, per the verification commit c4f46436.
  • The "RESOLVED" claim for the DeclarationLookup row matches variant_payload.dag (no find_declaration/DeclarationLookup; only VariantPayloadShapeLookup remains).
  • v3-std baseline (substrate=38, emit_model=28, effects=26, …) matches.
  • Tertiary ratchet correctly anchors to live SG-0 census rather than hardcoding (89 entries today, vs PB design doc's stale "78"); the PB-doc drift is captured as a follow-up bullet in ROADMAP's stale-receipt sweep row.

On modeling discipline:

  • The ratchet definition has all three required properties for tracked-debt scaffolds: documented (this doc), bounded (count of non-positive-def types, baseline 23 → 0), and named dissolution trigger (per-lane migration-gates, plus SG-2c-proper for the parse_tables exemption).
  • Positive-def vs in-ratchet split for lens-local carriers is principled (semantic-distinct variants stay; pure Missing | Found(T) duplicates dissolve into a std/Lookup<T> generic) and is a direct application of P2 Boundary Discipline / single-authority. Consistent with INVARIANTS' "facts flow forward, never duplicate authority" framing.
  • The doc explicitly closes the loop on the earlier review note about lens-local types being out of scope (225bdf38 brings them in, 4c1f86fb/ac46a298 close the resolved DeclarationLookup row, 34236444/a1cb27e9/6ccb5ec3/7cc79ee2 are WIP commits that should arguably be squashed but don't affect content).

Exploratory observation (optional, non-blocking): four WIP: gunbc Director commits are mixed in. Not a review concern, but if PR cleanliness matters, consider squashing before merge — the substantive history is in the docs(thesis): … commits and reads as a coherent verification arc.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / gpt-5.4
  • Commit: aab147d3 · Trigger: schedule
  • Thinking: 83s wall

APPROVE

Doc-only diff, and the new compiler–std/ consolidation claim stays honest against the live tree. I spot-checked the concrete inventories and receipts the doc adds, including the DeclarationLookup resolution, the primary ratchet count (23), the src/v3/std/*.dag count (142 across 13 files), and the SG-0 census spot count (89), and they match the referenced files. I don’t see a concrete violation of the pinned invariants, coding discipline, or testing discipline in this patch.

@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 / gpt-5.4
  • Commit: aab147d3 · Trigger: schedule
  • Thinking: 273s wall

Non-blocking — Strengths

  • docs/thesis/compiler-std-consolidation.md The positive-definition boundary and ratchet now stay honest against the live parser-table and lens-carrier shapes I spot-checked at the PR head.
  • ROADMAP.md The new callout and migration row keep the operational tracker aligned with the thesis doc instead of restating a narrower or competing rule.

ROADMAP — Verified

  • Compiler–std consolidation program: The new lane is documented, bounded, and tied to named dissolution triggers, which meets the tracked-debt bar from INVARIANTS.md.

✅ Docs-only diff, and the consolidation claim, ratchet, and roadmap hooks are now internally consistent with THESIS.md, INVARIANTS.md, and the cited live compiler/lens files I checked at the PR head.

@briansrls

Copy link
Copy Markdown
Contributor Author

Already resolved in current HEAD (aab147d38). The relay is against an earlier SHA that predates my fixes in commits c4f46436e and aab147d38.

Line 153 in HEAD reads exactly:

| src/v3/lenses/variant_payload.dag | 2 | both positive-def (VariantPayloadShape domain type + VariantPayloadShapeLookup — 3-variant carrier with NotPayloadProduct semantic distinction, not generic Lookup) |

No DeclarationLookup reference anywhere in the baseline table or the ratchet description. The file is correctly classified as 2 positive-def types (not 1 lens-API + 1 in-ratchet as the older version claimed).

Both Pro (sha aab147d3, thinking 76s) and Codex (sha aab147d3, thinking 83s) independently verified the variant_payload.dag classification against the live tree at 08:16 UTC and issued clean APPROVE. The DeclarationLookup-as-in-ratchet claim has been replaced with the correct VariantPayloadShapeLookup-as-positive-def classification since commit c4f46436e.

@briansrls
briansrls merged commit 99af17e into main Apr 22, 2026
4 checks passed
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-4-pro
  • Commit: aab147d3 · Trigger: manual
  • Conversation: View conversation

1. Story of the diff

This PR is a docs-only consolidation receipt that turns a broad thesis instinct into an operational program. THESIS.md:69-73 adds the top-level claim that mature v3 should stop carrying compiler-only duplicates of concepts that really belong in shared std/, and the new docs/thesis/compiler-std-consolidation.md is the load-bearing piece: it defines the positive-definition exceptions, inventories current compiler-side type debt (tokenize.dag, runtime_mirrors.dag, parse_tables.dag, the v3-only std/ tree, and strict 2-variant lookup carriers), and attaches primary/secondary/tertiary ratchets to measure convergence.

ROADMAP.md then makes that thesis actionable in two ways. First, ROADMAP.md:9 adds the new doc to the reviewer-facing header so future type additions get a required home-check against the positive definition. Second, ROADMAP.md:188-194 explodes the consolidation claim into concrete migration lanes, while ROADMAP.md:172 simultaneously cleans up surrounding receipt state by marking the old DeclarationLookup parallel-authority issue resolved and retaining it only as historical cross-reference.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

N/A — diff is documentation-only; no substrate types, Dag mutation surfaces, or implementation-layer Rust APIs are changed.

  1. INVARIANTS.md + modeling-discipline.md.

Finding (NON-BLOCKING) — P2 Boundary Discipline / single-authority metadata: docs/thesis/compiler-std-consolidation.md:167 says SG-0’s live census is authoritative and "Do not hardcode a count here," then immediately hardcodes a prose snapshot: "→ **89 entries**". That recreates the second-authority / stale-receipt hazard the section is explicitly trying to eliminate. The section should point at the live census only, or clearly quarantine the spot count outside the authoritative ratchet definition.

  1. CODING.md.

N/A — no Rust implementation code changed; the diff only touches THESIS.md, ROADMAP.md, and a new thesis doc.

  1. TESTING.md.

N/A — docs-only PR; no executable behavior or bug fix landed, so there is no new regression surface that needs tests.

  1. LOCKED DESIGN DECISIONS.

Compliant — docs/thesis/compiler-std-consolidation.md:171-173 explicitly composes this new claim with existing authorities (File-preference scaffold dissolution, Pure Bootstrap, lens capability register) instead of silently redefining those design decisions.

  1. TRACKED vs UNTRACKED DEBT.

Finding (NON-BLOCKING) — named dissolution trigger missing: docs/thesis/compiler-std-consolidation.md:179 says a scheduled migration to std/ must come "with a named trigger". The concrete migration rows for runtime_mirrors and parse_tables honor that at ROADMAP.md:190-191, but ROADMAP.md:189 (tokenize.dag → std/tokenize.dag) and ROADMAP.md:194 (Generic Lookup<T>) both use migration-gate: none. Those rows are documented and bounded, but not actually trigger-bound, so they fall short of the PR’s own tracked-debt rule.

3. Verdict

APPROVE_WITH_COMMENTS

The consolidation end state itself is coherent, well-scoped, and usefully wired into both THESIS.md and ROADMAP.md. My comments are about documentation discipline, not the architectural direction: the new thesis doc reintroduces a hardcoded SG-0 count after naming the live census as sole authority, and two new migration rows are missing the named trigger that the same doc says is required.

briansrls added a commit that referenced this pull request Apr 22, 2026
* docs: address OpenAI Pro follow-up findings from #642 review

Two non-blocking findings flagged by openai-pro on already-merged
#642 (sha aab147d, reviewed after merge). Applying as small
follow-up cleanup.

1. **Self-contradicting hardcoded count in tertiary-ratchet section.**
   `docs/thesis/compiler-std-consolidation.md:167` said "Do not
   hardcode a count here" then immediately hardcoded "89 entries."
   That recreated the parallel-authority hazard the section
   explicitly tries to eliminate. Fix: remove the snapshot count
   entirely and give readers a reproducible command instead
   ("count is whatever the live census reads today").

2. **ROADMAP migration rows with "migration-gate: none".** The
   compiler-std consolidation end-state doc requires scheduled
   migrations to have named triggers. "none" reads as absence of
   a trigger rather than as a positive trigger ("ready now").
   Fix: rephrase to "ready-to-dispatch (no capability gap — types
   already composable today)" for tokenize.dag → std/tokenize.dag
   and Generic Lookup<T>. Same information, now phrased as a
   positive dispatch signal, not an absent trigger.

Both fixes are small; both sharpen tracked-debt discipline the
doc itself declares. No substantive content change.

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

* docs(thesis): remove inaccurate grep recipe from tertiary-ratchet section

Codex non-blocking on #660 sha cb199ec: my "reproducible command"
for the tertiary ratchet counted all `src/v3/compiler/` entries in
EXPECTED_HAND_AUTHORED, but the authoritative set is
EXPECTED_HAND_AUTHORED ∖ GENERATED_FILES — the subtraction happens
at runtime in the ratchet test. My grep over-counted because it
includes generated-fragment paths that live in EXPECTED_HAND_AUTHORED
pre-subtraction (e.g., the entry at sg0_census_test.rs:250 Codex
flagged).

The command as-written measured the wrong set. Fix: remove the
grep approximation entirely and point readers at the SG-0 census
test directly as the source of truth. Explicitly warn against the
grep approach with the reasoning (EXPECTED_HAND_AUTHORED is
pre-subtraction; the ratchet applies GENERATED_FILES at runtime).

Removes the parallel-authority hazard the section originally tried
to eliminate: any snapshot-or-approximation-in-prose ages stale
relative to the live ratchet, whether it's a number or a bad grep.
"Run the test" is the only accurate answer.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Apr 22, 2026
SG-2c-7 added `type PrimaryAtomRow` to parse_tables.dag; the #642 script
must list it next to PrimaryPrefixRow and the other parse_tables row shapes.

Unblocks: Compiler-std consolidation ratchet (v3 workflow).
Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 22, 2026
SG-2c-7 added `type PrimaryAtomRow` to parse_tables.dag; the #642 script
must list it next to PrimaryPrefixRow and the other parse_tables row shapes.

Unblocks: Compiler-std consolidation ratchet (v3 workflow).
Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 22, 2026
* WIP: SG-2c

* feat(SG-2c cluster): parse_primary prefix + atom family — full receipt

Complete same-PR extraction for PrimaryAtomRow (SG-2c-7) alongside SG-2c-6:
- regen_parse_tables_emit: collect rows, emit primary_atom_class/PrimaryAtomClass
- checked-in parse_tables_generated.rs + regen_parse parse_generated.rs
- parse_parser_body: table-owned dispatch; remove open match on atomic TokenKinds
- sg2c1 authority tests: row join + exact post-prefix token set
- ROADMAP + compiler-std-consolidation: 7 exempted types, cluster note

Cluster name: parse_primary prefix + atom family.

Made-with: Cursor

* chore: apply cargo fmt

* WIP: SG-2c

* docs(parse_tables): fix Pipe vs PipeArrow comment (review feedback)

SG-2c-7 atomic tail uses TokenKind::Pipe (|), not PipeArrow (|>).

Made-with: Cursor

* fix: refresh parse_corpus_manifest after parse_tables.dag comment edit

The Pipe vs PipeArrow doc fix changed source spans; fnv1a64 for the parse
surface snapshot moved (items/byte len unchanged). Unblocks v3 CI
handwritten_parse_snapshot_matches_manifest.

Made-with: Cursor

* fix(ci): exempt PrimaryAtomRow in compiler-std consolidation ratchet

SG-2c-7 added `type PrimaryAtomRow` to parse_tables.dag; the #642 script
must list it next to PrimaryPrefixRow and the other parse_tables row shapes.

Unblocks: Compiler-std consolidation ratchet (v3 workflow).
Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 24, 2026
Shared ratchet #642 scope + migration-gate/P2 wording per scheduled review
(claude-opus-4-7 on d1b02cf): blocking codegen issues already fixed on 19a79e5;
this addresses the exploratory doc asymmetry only.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 24, 2026
Shared ratchet #642 scope + migration-gate/P2 wording per scheduled review
(claude-opus-4-7 on d1b02cf): blocking codegen issues already fixed on 19a79e5;
this addresses the exploratory doc asymmetry only.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 24, 2026
* WIP: Compiler std/ consolidation

* WIP: Compiler std/ consolidation

* docs: align ROADMAP and thesis Lookup closure (#750)

Shared ratchet #642 scope + migration-gate/P2 wording per scheduled review
(claude-opus-4-7 on d1b02cf): blocking codegen issues already fixed on 19a79e5;
this addresses the exploratory doc asymmetry only.

Made-with: Cursor

* docs(v3-lens-register): infer_helpers row — template_arguments_match is generated

Codex non-blocking on #750: drop stale 'stays in Rust' claim; note Cat-2
helpers live in lens + infer_helpers_generated.rs.

Made-with: Cursor
briansrls added a commit that referenced this pull request May 9, 2026
* feat(v3): land CRDT cost-basis carriers and gate #93 demo test

- Add CostBasisKind + CostBasisDeclaration to lenses/cost.dag per cost-basis audit.
- Add t_las_crdt_cost_basis_demo fixture (§4.2 apply_lens target as comments).
- Integration tests: composed symbolic cost vs O(log replicas) per-op budget using
  dominates; large-stack threads for symbolic-cost dimension walks.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* chore(sg0): ratchet hand-authored test list for t_las CRDT demo

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* test(v3): split gate #93 dominates assertions; share cached compile

Addresses api-review exploratory note on TESTING.md one-claim-per-test: two
focused tests plus crdt_field_dimension_ok helper and cached_compile_to_dag.

Skipped optional fixture data pin: CostBasisKind = PerWrite caused a semantic
compile failure in the test fixture module (follow-up if a structural pin is
still desired).

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* docs(v3): note normalized SymbolicCost at root for CRDT cost demo

Explains why composed cost can be Linear(num_writes) while per-op budget stays
Log(replicas); dominance assertions remain the behavioral witness.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* test(v3): cite SizeVariable substrate for CRDT cost demo budget helper

SizeVariable is source_port + display_name: String? in algebra.dag; refactor to
size_var() matching lane2 symbolic-cost tests. Addresses inline review claiming
missing display_name (substrate has had the field since v3 std algebra).

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* chore(v3): regen lens_cost_symbolic after CostBasis carriers in cost.dag

New CostBasisKind/CostBasisDeclaration types in lenses/cost.dag must appear in
lens_cost_symbolic_generated.rs (P2 emitter parity). Refreshed via:
  cargo run -p v3-compiler --bin regen_lens -- --lens cost_symbolic

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* test(v3): tie CRDT demo to CostBasisDeclaration + re-export carriers

- Document that LinearCost dominates any LogCost in MVP dominates(), so the old
  composed-vs-per_op check was vacuous.
- Build an in-test CostBasisDeclaration (PerWrite, LogCost(replicas), subject +
  span from my_crdt_field) so §4.2 per-write basis evidence flows through the
  cost-lens carrier; use basis.cost in the non-vacuous !dominates ceiling test.
- Re-export CostBasisDeclaration and CostBasisKind from v3_compiler::lens_cost_symbolic.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): symbolic-cost Div → LogCost + CRDT basis lens-table witnesses

- cost.dag: dispatch TransformTarget::Operator(Div) to LogCost(dividend port) so
  checked Int divide is visible in compute_symbolic_costs (E-P narrow fix).
- Regenerate lens_cost_symbolic_generated.rs; export compute_symbolic_costs.
- t_las_crdt tests: align CostBasisDeclaration.cost with merge-step dividend
  port, assert Log hits the lens table and basis.cost matches a Hit row; clarify
  SizeVariable/algebra + vacuous Linear>Log in module docs.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* docs(v3): repair CRDT cost-basis demo module doc + Div authority note

- Fix fragmented module-level prose after merge (Practice 4 / gate story unchanged).
- Align per_write_log_replicas_budget comment with transform_cost_for_target Operator(Div).

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* feat(v3): single-authority CostBasisDeclaration builder from Dag

- Add cost_basis_declaration::build_per_write_log_cost_basis_declaration (P2): derives
  PerWrite LogCost(merge param) + DeclarationId + span from compiled binds; tests use
  it instead of hand-assembling the generated carrier.
- Anchor consumer in lenses.cost next to CostBasisDeclaration; SG-0 census + pub re-export.
- Refresh CRDT demo module docs to cite the builder as the declared consumer boundary.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* ci: classify cost-basis types in compiler-std ratchet + stage0 exclude

- Add CostBasisKind/CostBasisDeclaration to POSITIVE_ROWS in check-compiler-std-ratchet (#642).
- List cost_basis_declaration.rs in compiler.dag hand_maintained_src so stage0 clean/copy preserves it.
- Update compiler-std consolidation thesis table for cost.dag type count.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(cost): compose Div transform_cost with log surcharge + regression

- transform_cost_for_target(Div): chain operand fold (transform_cost) before
  LogCost(dividend) so expensive operands are not dropped (PR #2299).
- Regenerate lens_cost_symbolic projection.
- Re-export transform_cost_for_target for lens tests.
- Add lane2 test: dominate old Constant+Log under-approx when dividend is
  Linear; keep Log for cheap param-like operands (sum normalization drops
  Log when Linear dominates).

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): fail-closed CostBasisDeclaration builder (codex #2299)

Replace panicking build_per_write_log_cost_basis_declaration with
try_build_per_write_log_cost_basis_declaration returning
CostBasisDeclarationBuildError. Re-export the error type.

- SizeVariable already matches algebra.dag (source_port + display_name) in
  dag_cost_generated.rs; Div already composes transform_cost + LogCost — those
  review bullets were stale.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* ci: optional SG-0 PR-body append file for agent branches

Merge scripts/ci-merge/sg0-pr-body-append.<PR#>.txt into PR_BODY before
check-pr-sg0-net-shrink-discipline when present (fixes CI when editors
cannot update GitHub PR description). Add machine-readable lines for #2299.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* ci: fix SG-0 declared hand-path delta (+2 after rebase vs main)

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): resolve cost-basis workflow bind via Declaration::Arrow UserDefined

Codex/P2: subject + span must come from the same authority — walk
declaration_by_name → TypeConnective::Arrow → ArrowBody::UserDefined(BindNodeId)
for the workflow span bind; keep name scan only for merge_step helper.
Add typed build errors for non-Arrow / non-UserDefined bodies.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* docs(cost): scaffold PeakMemory CostBasisKind + #1954 trigger (P5)

Per inline review: PeakMemory had no named consumer; classify it 🟡 SCAFFOLD
with dissolution trigger #1954, keep PerWrite/PerCall terminal, restore
CostBasisDeclaration type block accidentally dropped in edit.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): fail-closed Div empty operands + basis vs lens Log witness

- cost.dag: Div with Empty operand list → miss_symbolic_cost_lookup (regen lens).
- try_build_per_write_log_cost_basis_declaration: require LogCost(dividend_port)
  row in compute_symbolic_costs merge param port (MergeStepLacksLogCostWitness).
- Integration: merge step without divide rejects; lane2 asserts Div([])->Miss.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* docs(cost): inline PeakMemory scaffold note on CostBasisKind variant

Clarifies at the variant site that PeakMemory is 🟡 SCAFFOLD (#1954), not a
live terminal — addresses inline review that only skimmed the coproduct block.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): resolve merge-step cost basis via ArrowBody::UserDefined (P2)

Drop BindNode.name scan; use the same declaration -> Arrow -> UserDefined bind
path for the merge helper as for the workflow subject. Remove unused BindNotFound;
rename merge-step error fields to *declaration* for accuracy.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* docs(test): honest gate #93 scoping — interim receipt vs §4.2 fold

Module docs no longer read as full closure: name ROADMAP gate id but state
explicitly that apply_lens + authored CostBasisDeclaration rows folded into
compute_symbolic_costs are follow-on (same gate tracks debt). Align
cost_basis_declaration crate docs to the same slice boundary.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

* fix(v3): CostBasisDeclaration.subject uses SectionRef (T-LAS §2 / audit)

- cost.dag: import SectionRef from v3.std.lens_application; document NodeScope path.
- dag.rs: add SectionRef Rust mirror (authority lens_application.dag).
- regen_lens cost_symbolic; try_build wraps workflow id in DeclarationScope.
- Integration test asserts SectionRef::DeclarationScope subject.

Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Brian Searls <briansrls@users.noreply.github.com>
briansrls added a commit that referenced this pull request May 14, 2026
v3 job failed on unclassified ^type ParallelismMode in parallelism.dag; add POSITIVE_ROWS
inventory entry plus thesis/ROADMAP disposition sync (LAS gate #95 budget carrier).

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 14, 2026
…trated (T-Lens-Application-Surface / **Cluster F (T-LP-Ret) (#3131)

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* fix(ci): SG-0 PR-body prepend for gate #95 census (+1)

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* docs(test): clarify gate #95 integration vs enforced_application split

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* chore: rustfmt enforced_lens_application (gate #95)

CI fmt check drift on substrate-eval helpers and gate #95 asserts.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(v3-compiler): gate #95 probe returns Result (no public panic surface)

Composer review #12221: parallelism_iteration_opt_in_enforcement_violates now returns
Result<bool, LensApplyError>; missing parallelism.dag maps to SubstrateReflect.
Document ParallelismIterationBudget as GREEN coproduct per modeling-discipline §4.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(test): clarify gate #95 integration banner for Result probe

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* docs(parallelism): Practice §4 TERMINAL checkpoint for ParallelismMode

Codex inline BLOCKING on parallelism.dag: classify OptInIndependent|Sequential coproduct
per modeling-discipline §4 adjacent to the type declaration (LAS budget carrier vs Lane‑2 workflow).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): classify ParallelismMode in compiler-std ratchet (#642)

v3 job failed on unclassified ^type ParallelismMode in parallelism.dag; add POSITIVE_ROWS
inventory entry plus thesis/ROADMAP disposition sync (LAS gate #95 budget carrier).

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* WIP: R3 gate #95: opt_in_iteration_parallelism_via_lens_application_demonstra

* docs(thesis): restore End state line in compiler-std consolidation

Fix inline editing artifact (...findings. 0. Each...) by splitting the
explicit primary-ratchet end-state sentence onto its own line (Claude api-review
exploratory note).

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(thesis): align compiler-std primary ratchet count with TRACKED_ROWS (4)

openai-pro review: prose said \"3\" while ROADMAP + check-compiler-std-ratchet.sh
enumerate four in-ratchet scaffold carriers including NonCommutingPairLookup.

Point readers at TRACKED_ROWS / BASELINE_TRACKED_TOTAL as authority; restore
tokenizer-migration clause dropped in the tightening edit.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(p5): enumerate gate #95 hand-Rust co-touches in 3131 prepend

Extend sg0-pr-body-append.3131.txt to receipt dag.rs/lib.rs/lower.rs
alongside enforced_lens_application for the same gate #95 slice; align
INVARIANTS integration + LAS consumer cross-refs.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls deleted the docs/thesis-compiler-std-consolidation branch June 1, 2026 18:41
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