Skip to content

gunbc Director - #903

Merged
briansrls merged 170 commits into
mainfrom
session/zesty-bear-812
Apr 26, 2026
Merged

briansrls merged 170 commits into
mainfrom
session/zesty-bear-812

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Opened from session-dashboard for session zesty-bear-812.

⚠️ Auto-merge of origin/main failed during this auto-push.
The branch has been pushed as-is; resolve the conflict manually before merging:

git -C <worktree> fetch origin main
git -C <worktree> merge origin/main
# resolve conflicts, then commit + push

Conflicted file(s):

  • docs/briefs/b4-2-structural-fold-shape-carrier-worker.md
  • docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md
  • docs/briefs/r2-modeling-int-lit-magnitude-worker.md
  • docs/briefs/r2-modeling-tokenizer-charclass-phase2-worker.md
  • docs/briefs/r2-substrate-nominal-opaque-for-secret-subset.md

briansrls and others added 30 commits April 24, 2026 00:42
…edger row (post-#693 escalation)

Director-authored amendment following the 2026-04-24 escalation from PR
#693 (sub-child sharp-bear-829 under Surface Manager).

Two edits:

1. New "Class 5 Gap 3 — port-carried field values in data bodies"
   row in the 2026-04-21 post-merge-debt section. The substrate gap was
   documented in src/v3/DOWNSTREAM_REQUIREMENTS.md:239 but had no ROADMAP
   ledger row for cross-lane visibility. PR #693's execution surfaced it
   as the blocker on sub_charclass_in_std_unicode phase-2.

2. Retract the "ready-to-dispatch (no substrate capability gap)" claim
   on the Character-level row, annotate phase-1 landed via PR #693
   (CharClass vocabulary + Rust-mirror structural scanner path), and
   point phase-2 at the new Class 5 Gap 3 row.

Codifies the audit pattern: "this consumption gap has no substrate
capability gap" claims must be verified by attempting the retype before
the claim lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-1 status edits + char_in_class interpreter-parity sibling row from main
…-5.4 review)

Row title still said 'consumption gap, not substrate gap' while the
body block retracted that claim and cited Class 5 Gap 3 as a substrate
dependency for phase-2. Title now matches body: mixed classification,
consumption for steps 1+3, substrate for step 2.
…lass phase-2 blocker classification (per gpt-5.4 audit)

gpt-5.4's review on 706 @ 71f46af caught that the row's "remaining
gap" description was wrong: field-level shapes (nested records, list
literals, declaration refs, Var refs, sum-variant literals) are
supported today via FieldValue variants + lower_structural_field_value
(dag.rs:328-353, lower.rs:2616+). The actual remaining gap is the
top-level ValueBody boundary (non-scalar, non-record top-level bodies).

The authority I cited — DOWNSTREAM_REQUIREMENTS.md:239 — is itself
stale: it describes the pre-PR-B-unwind shape where FieldValue was
LiteralBits-only. PR-B's unwind extended FieldValue to carry
Reference / Record / List / Variant, moving the gap to ValueBody.

Two fixes:

1. Rewrite the Class 5 Gap 3 row to describe the actual ValueBody
   boundary, point at code paths (dag.rs, lower.rs) as live authority,
   flag DOWNSTREAM entry as itself stale, and soften phase-2 CharClass
   blocker classification to "provisional pending reproduction."

2. Update the Character-level row's phase-2 block to name that the
   specific shape of the CharClass failure needs concrete reproduction
   from the escalating sub-child before the blocker is finalized.

Recursive audit-pattern instance: the row I wrote to codify "verify
live state before claiming substrate gap" itself failed to verify live
state. Both incidents (2026-04-23 original row + 2026-04-24 my
retraction row) are now cited in the audit-pattern sub-note as
examples of the same discipline.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls and others added 3 commits April 26, 2026 01:55
…correct §0.4 dissolution shape)

royal-badger-32 (PR #834 fresh worker) caught a substantive
misdiagnosis in the original B4.2 brief: the proposed
fold_step_formal carrier on Instantiation memoized a fact already
structural at lens_apply.rs:114 (find_fold_step_bind_via_instantiation
walks fold_template_callable_formals against arguments) — borderline
parallel-rep per feedback_parallel_representation_debt.

Meanwhile, the actual line-38 bridge skips on accumulator/element
TYPE ELIGIBILITY for R1's bounded interpreter (algebra.dag folds use
List<SymbolicCost> while bounded interpreter only certifies Int +
Behavior elements) — NOT step-formal binding. The two carriers
address different questions; landing the original carrier would
NOT close §0.4.

PR #834 closed as misframed. This brief re-authored:
- Frame: actual §0.4 dissolution is structural eligibility predicate
  on accumulator/element types (per helper's own dissolution-trigger
  doc: 'R1-certified step shape').
- Pre-author audit MANDATORY: read is_fold_instantiation,
  find_fold_step_bind_via_instantiation, eval_std_fold's supported
  type set, line-38 fallback semantics. Audit may show NO new
  substrate needed.
- Slice conditional: pure-query path (preferred — likely zero new
  substrate) OR minimal carrier path (only if audit justifies).
- Acceptance explicit: NO new substrate carrier unless audit
  produces structural hole + PR body documents.
- STOP-AND-ESCALATE: substrate-undissolvable case routes to
  Substrate Manager; do not silently change fold-path semantics.

Pre-flight audit credit: royal-badger-32's discipline (audit carrier
shape against helper's own doc + actual call sites BEFORE 1382-site
propagation) is the right feedback_design_before_implement shape.

This is the eighth substantive reframe in #836's review cycle, and
the first caught at WORKER pre-flight rather than reviewer post-flight.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-pro SHIP_WITH_DEBT carry-debt ask)

Captures the discipline lesson from #836's review cycle (8 substantive
reframes, all from the same feedback_audit_adjacent_authority_first /
feedback_verify_thesis_claims failure mode) as a mandatory pre-author
checklist for substrate-producer / consumer-migration / design-doc-
consuming briefs.

Five-question audit:
1. Does the substrate this brief assumes exist already? (grep
   src/v3/std/ + src/v3/spec/ + dag.rs/infer.rs)
2. Does an existing brief already cover this scope? (grep docs/briefs/)
3. Does the design-doc §Director-actionable recommendation match
   the brief's premise? (read in full before slicing)
4. Are the file:line citations live at HEAD? (grep verified)
5. Does the carrier shape actually dissolve the cited bridge? (read
   call-site + helper doc-comment)

PR body audit receipt format mandated.

Closes openai-pro SHIP_WITH_DEBT recommendation: 'add a brief-authoring
authority-audit ratchet [...] before authoring any producer/substrate
brief, grep existing docs/briefs/, docs/design-*, src/v3/std/,
src/v3/spec/, and Rust mirrors.'

Provenance section enumerates the 8 #836 reframes (7 reviewer-caught,
1 worker-pre-flight-caught by royal-badger-32) as the empirical basis.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…cked-bridge triple (openai-pro #836)

openai-pro REQUEST_CHANGES on #836: two findings, both fixed.

(1) BLOCKING — nominal-opaque-for-Secret brief authorized substrate
landing without same-PR consumer proof. Per INVARIANTS P2 boundary
discipline, landed boundaries need real consumers. Reframed Slice §6
+ added Acceptance bullet to require Same-PR Consumer Proof in one
of two shapes:
  - Shape A (preferred): bundle with T-Modeling Secret<T> consumer
    same-PR (carrier + Secret<T> + gated accessors + opacity
    diagnostic together).
  - Shape B (fallback): bundle minimal structural-walk consumer that
    reads the carrier + fails closed when opaque type is walked
    outside gated accessors. T-Modeling consumer follows up.
Worker picks; surfaces choice in PR body.

(2) NON-BLOCKING — tokenizer-charclass-phase-2 Acceptance allowed
'Phase-1 host-string scaffolds dropped (or named explicitly as
residual with ROADMAP debt row)'. ROADMAP row alone is insufficient
per INVARIANTS P5: tracked-bridge needs documented + bounded + named
dissolution trigger TRIPLE. Tightened to require all three (with B4.4
shape (b) cited as precedent for the triple). Residuals without all
three are now STOP-AND-ESCALATE.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls
briansrls marked this pull request as ready for review April 26, 2026 19:41

@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: 81fcb5d2b5

ℹ️ 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".

- **[`src/v3/std/tokenize.dag`](../../src/v3/std/tokenize.dag)** — tokenizer authority; phase-1 lands the structural shape, phase-2 retypes consumers to `Char` / `List<Char>` / `CharClass`.
- **[#662](https://github.com/gunb-ai/gunbc/pull/662)** — "tokenize: reframe character-level scaffold as consumption gap" (merged); confirm phase-1 baseline.
- **[`docs/thesis/the-substrate-two-coordinated-shapes.md`](../thesis/the-substrate-two-coordinated-shapes.md)** — connective vocabulary; `Cardinality` / `Disj` semantics for charclass sum-types.
- **[`src/v3/std/unicode.dag`](../../src/v3/std/unicode.dag)** (if exists) — unicode authority; charclass dependency.

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 unicode authority path in read-first prerequisites

The brief points readers to src/v3/std/unicode.dag, but this repository’s unicode authority is in dsl/std/unicode.dag. Because this section is used as the prerequisite source audit, the wrong path can make workers conclude unicode declarations are missing and escalate or scope follow-up work incorrectly. Point this reference at the live file so dispatch decisions are based on the real authority.

Useful? React with 👍 / 👎.

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.

Fixed in 5f1dc89: src/v3/std/unicode.dag → dsl/std/unicode.dag (live authority); dropped the "(if exists)" qualifier since the file is canonical.

- **NonZero-typed-input shape chosen** (`a / nz` operator-syntax rather than `divide_nz(a, nz)` function syntax) — STOP. Per-operand type variance in algebra-operator carrier is a separate substrate brief.
- **Audit reveals additional partial forms not enumerated in design doc** — surface; queue as sibling sub-lanes; do not subsume in this PR.
- **Realization migration breaks emission for an existing target idiom** — surface; this is a target-realization design call, not a worker call.
- **`Result<T, DivideByZero>` requires authoring `DivideByZero` declaration** — verify it doesn't exist via audit; if not, surface placement decision (`std.errors.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 Remove single-error division shape from STOP guidance

This STOP clause still references Result<T, DivideByZero>, but the same brief’s Slice/Acceptance explicitly requires a typed-split DivError that distinguishes DivideByZero from Overflow. Keeping the old single-error shape here leaves contradictory implementation guidance and can allow an out-of-scope error model to be treated as acceptable during review. The STOP text should be consistent with the required two-variant error carrier.

Useful? React with 👍 / 👎.

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.

Fixed across upstream merge (659d02c + 5f1dc89): STOP clause now reads Result<T, DivError> with explicit reject of single-variant re-drift; Frame and Slice §2/§3/§4/§6 + Acceptance are aligned on the typed-split DivError = DivideByZero | Overflow carrier (placement queued for dsl/std/errors.dag).

briansrls and others added 3 commits April 26, 2026 15:45
…yped-split alignment

- r2-modeling-tokenizer-charclass-phase2: `src/v3/std/unicode.dag` →
  `dsl/std/unicode.dag` (live authority); drop "(if exists)" qualifier.
- r2-impossible-bugs-unhandled-diagnostic-paths: STOP clause now refs
  `Result<T, DivError>` typed-split (matches Slice §2 + Acceptance);
  add explicit reject of single-variant `Result<T, DivideByZero>`
  re-drift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md
#	docs/briefs/r2-modeling-tokenizer-charclass-phase2-worker.md

@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: 81fcb5d2 · Trigger: schedule
  • Thinking: 564s wall

BLOCKING (4)

Root Cause

  • docs/briefs/r2-impossible-bugs-unenumerated-effects-worker.md Path (i)/(ii) is modeled as both acceptance and escalation → split audit, retirement, and lens work or name the follow-up trigger explicitly.
  • docs/briefs/brief-authoring-checklist.md The new authority-audit checklist was not applied to the briefs in this same diff → run the five-question audit over every new worker brief before merge.
  • THESIS.md R2 Secret scope is promoted by R2 structure docs without a matching thesis claim → align THESIS.md or stop presenting it as thesis-authorized.

⚠️ The brief set is directionally useful, but these authority mismatches should be corrected before it becomes dispatch guidance.

@briansrls

Copy link
Copy Markdown
Contributor Author

Violations (could not place on specific lines):

  • docs/briefs/r2-impossible-bugs-unenumerated-effects-worker.md:68 BLOCKING: The default OperationEffect retirement path is also a STOP, so the worker has no clear autonomous deliverable for the expected outcome.
  • docs/briefs/r2-impossible-bugs-nested-optional-flatten-worker.md:21 BLOCKING: The Optional and concretize call-site references are stale and point at unrelated code, violating the live-authority audit discipline.
  • docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:23 BLOCKING: The target-realization citations for int division point at subtraction rows, so the worker brief would migrate the wrong realizations.
  • docs/briefs/r2-substrate-nominal-opaque-for-secret-subset.md:15 BLOCKING: This claims Secret is in THESIS.md enumerable impossible-bug classes, but THESIS.md has no Secret entry; cite the locked R2 Goal 2 authority or add the thesis claim.

…re deliverable + Secret<T> authority

Four BLOCKING findings on PR #903 (codex API review @ commit 81fcb5d):

1. **nested-optional-flatten:** `lower.rs:1949-1968, :2044-2047` →
   `:2129, :2226` (current `SurfaceType::Optional` arms);
   `infer.rs:2902-2916` → `:3129` definition + live call-site list.
2. **unhandled-diagnostic-paths:** `rust.dag:816` / `go.dag:742` /
   `python.dag:486` were all subtraction rows — corrected to `:832`
   (rust_int_div) / `:758` (go_int_div) / `:500` (python_int_div),
   in both Read-first and Slice §4. Python helper path expanded to
   `src/v3/compiler/src/emit/python_target.rs:680`.
3. **nominal-opaque-for-Secret:** THESIS.md does not list `Secret<T>`
   in §Enumerable impossible-bug classes; replaced with
   `docs/r2-structure.md` Goal 2 + `ROADMAP.md:424` post-merge-debt
   row + `docs/thesis/compositional-modeling.md` Part 4 (original
   thesis-doc surface). THESIS-add option remains open as a
   subsequent doc edit; brief no longer claims authority that
   doesn't exist.
4. **unenumerated-effects STOP §68:** retain-vs-retire verdict is the
   lane's deliverable (Slice §2 + Acceptance §2), not a STOP.
   Reworded so STOP fires only on unscoped substrate-shape gaps
   beyond the design doc Q5.5 binary.

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

Copy link
Copy Markdown
Contributor Author

Response to codex BLOCKING (4) on commit 81fcb5d2

All four findings verified valid; addressed in commit 766795059.

1. r2-impossible-bugs-nested-optional-flatten-worker.md:21-22 — stale Optional / concretize citations

Verified at HEAD:

  • lower.rs:1949-1968, :2044-2047 (claimed) → actual SurfaceType::Optional arms at :2129 (lowering) + :2226 (TypeConnective construction).
  • infer.rs:2902-2916 (claimed) → actual concretize_decl_with_subst definition at :3129; call sites span :2643, :2645, :3104, :3152, :3162, :3190.

Fixed with corrected line numbers + a "verify by grep at HEAD" anchor so future drift is caught structurally rather than re-cited.

2. r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:23-25 (and :50-52) — div citations point at sub rows

Verified at HEAD — all three were subtraction rows:

  • rust.dag:816 is rust_int_sub; rust_int_div is at :832
  • go.dag:742 is go_int_sub; go_int_div is at :758
  • python.dag:486 is inside python_int_sub; python_int_div is at :500

Fixed both Read-first and Slice §4 (the per-target migration steps). Python helper path expanded to full src/v3/compiler/src/emit/python_target.rs:680.

This was the discipline failure most likely to misroute work — a worker would have migrated subtraction realizations to the typed-split shape. Good catch.

3. r2-substrate-nominal-opaque-for-secret-subset.md:15 — Secret<T> cited as THESIS.md claim that doesn't exist

Verified: THESIS.md §"Enumerable impossible-bug classes" (lines 354-396) lists [R2+] nested-optional / unenumerated-effects / unhandled-diagnostic-paths only. Secret<T> is not in that list.

Replaced with the actual authority chain:

  • docs/r2-structure.md §Goal 2 (lines 36, 42) + §Lane structure
  • ROADMAP.md:424 post-merge-debt row (Secret<T> nominal-wrapper graduation; dsl/std/types.dag:237 alias)
  • docs/thesis/compositional-modeling.md Part 4 (original thesis-doc surface)

Brief now explicitly notes THESIS.md does not currently list Secret<T> and the claim authority lives in r2-structure.md + ROADMAP. THESIS.md addition remains a separate, optional doc edit; not blocking dispatch.

4. r2-impossible-bugs-unenumerated-effects-worker.md:68 — path (i) AND (ii) both lead to STOP, no autonomous deliverable

Verified — the original wording escalated whether the audit confirmed path (i) OR path (ii); the worker had no autonomous path through.

Reframed:

  • The audit verdict (path i: all signatures derive cleanly / path ii: existence-proof for at least one primitive that can't) IS the lane's deliverable — Slice §2 + Acceptance §2 already own producing it with structural justification + per-primitive receipt in PR body.
  • The follow-up — actual OperationEffect enum retirement (path ii) or normalized-view authoring (path i) — dispatches as a sibling sub-lane to Impossible-Bugs Manager based on the verdict.
  • STOP fires only on unscoped substrate gaps (a primitive that can't be made to derive cleanly even after resource-threading migration per Slice §3) — beyond the design doc Q5.5 retain-vs-retire binary.

⚠ Re: brief-authoring-checklist.md not retro-applied

Acknowledged — the checklist (which captures exactly the failure modes codex caught here: stale file:line, claim authority that doesn't exist, design-doc recommendation drift) was authored in this same diff but not retroactively applied to the briefs landing alongside it. The four findings above are the retro-application result. Going forward, the checklist's audit-receipt format becomes mandatory in PR bodies for new briefs (per the doc's "Audit receipt format" section). Will land that as a follow-up enforcement (per-PR gate for new worker briefs in src/v3/-adjacent territory) rather than a content fix on this PR.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

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

1. Story of the diff

This PR is a documentation/brief-correction pass, not an implementation change. It updates R2 worker briefs so the next dispatched workers are pointed at current live authorities and line numbers: nested optional flatten now points at the current SurfaceType::Optional and concretize_decl_with_subst locations, unhandled diagnostic paths now points at the actual *_int_div realization rows, and tokenizer CharClass now points at dsl/std/unicode.dag. The substantive guidance changes are in two places: unenumerated effects reframes the OperationEffect retain-vs-retire decision as the lane’s audit deliverable rather than a Director STOP (docs/briefs/r2-impossible-bugs-unenumerated-effects-worker.md:68), and unhandled diagnostic paths tightens the integer-division fix to a typed DivError split rather than a collapsed single-error result (docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:50, :79). The Secret brief also corrects its authority chain, moving the claim from THESIS.md to the R2 structure/ROADMAP authority that actually owns the graduation (docs/briefs/r2-substrate-nominal-opaque-for-secret-subset.md:15-17).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

N/A — the diff edits worker-brief prose only; it references substrate concepts such as Secret<T> nominal opacity and TypeConnective, but does not change dag.rs, .dag substrate definitions, compiler passes, or any substrate carrier.

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

Compliant — fail-closed / typed-carrier discipline is strengthened: docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:50 rejects checked_div-style collapse because it loses the DivideByZero vs Overflow distinction, and :79 explicitly rejects reverting to Result<T, DivideByZero>; this matches P3/DB-1 typed diagnostic carriers rather than fabricated or collapsed outcomes. chatgpt-review-2e0b6105-7403-47…

  1. CODING.md.

N/A — no Rust implementation, helper placement, method/free-function shape, naming surface, or Result/Option API was changed; this is a docs-only brief alignment.

  1. TESTING.md.

N/A — no executable behavior changed, so no tests are expected in this PR. The test-relevant guidance remains in the worker brief itself, including the regression obligations for Int / Int typed Result behavior and both DivideByZero / Overflow reachability immediately after the changed realization guidance (docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:50-52, :79). chatgpt-review-19c31fde-aa78-4f…

  1. LOCKED DESIGN DECISIONS.

Compliant — the Secret brief now explicitly names the locked R2 authority instead of over-claiming THESIS.md authority: docs/briefs/r2-substrate-nominal-opaque-for-secret-subset.md:15 points to docs/r2-structure.md, :16 points to the ROADMAP row, and :17 explains that THESIS.md does not currently carry the Secret impossible-bug claim. That is an explicit authority correction, not a silent divergence.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the only new follow-up shape is bounded and routed: docs/briefs/r2-impossible-bugs-unenumerated-effects-worker.md:68 says the audit verdict is the lane deliverable and dispatches the actual OperationEffect retirement or normalized-derived-view work as a sibling sub-lane; docs/briefs/r2-impossible-bugs-unhandled-diagnostic-paths-worker.md:79 names the DivError carrier authoring/placement decision and STOP condition if the work drifts back to a single-variant carrier. No unbounded TODO or anonymous scaffold is introduced.

3. Verdict

APPROVE

The diff is documentation-only and mostly corrects stale authority/line references while tightening downstream worker guidance. The substantive changes improve fail-closed typed-result discipline and keep follow-up work routed as named lanes rather than undocumented scaffolding.

@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: 5d8d333c · Trigger: schedule
  • Thinking: 413s wall

BLOCKING (2)

Root Cause

  • docs/briefs/r1-surface-manager.md Gate status conflates implementation receipts with R1 acceptance gates → split receipt progress from .dag TestClaim status and leave gates unchecked until the claim exists and evaluates, or amend ROADMAP to retire the gate.

ROADMAP — Verified

  • Class 5 Gap 3: The row matches live code: FieldValue carries nested record/list/reference/variant field values, while top-level non-scalar/non-record data bodies still fall to ValueBody::Unparsed and std.unicode is outside the bootstrap fixture set.

⚠️ The roadmap repair is sound, but the Surface Manager brief needs to stop marking release gates closed on non-gate receipts.

@briansrls

Copy link
Copy Markdown
Contributor Author

Violations (could not place on specific lines):

  • docs/briefs/r1-surface-manager.md:138 Making the formal .dag gate conditional ("if release wants") contradicts ROADMAP's R1 meta-acceptance that every lane gate is a structural TestClaim, so this risks closing T-Sub on a parse/lower receipt instead of the declared gate (INVARIANTS P2).
  • docs/briefs/r1-surface-manager.md:151 This checks off Rust harden on an ignored test sweep rather than an evaluating R1 gate, so the brief can report emit_rust_fixtures_rustc_green closed while ROADMAP still requires an ExecuteCommand-backed gate (THESIS tests-as-data / INVARIANTS P2).

…close in r1-surface-manager.md

Per codex API review on commit 5d8d333 (BLOCKING #1 of 2):
"Gate status conflates implementation receipts with R1 acceptance gates →
split receipt progress from .dag TestClaim status and leave gates unchecked
until the claim exists and evaluates."

Fix:
- SUPERSEDED banner at top declaring R1 Closure Manager owns gate-close
  authority post-PR-#847; brief stays as historical receipt.
- Working state table reshaped into Impl / Gate / Owner columns:
  * T-P0: 3× impl [x], 3× gate [ ] (owned R1C-B)
  * T-Sub: match closed (impl + gate); type-alias impl [x] gate [ ]
    (R1C-C); charclass-2 phase-2 reclassified to R2 substrate
  * T-Emit: all 3 impl partial, all 3 gate [ ] (R1C-E wraps host
    harness via ExecuteCommand)

The strict-reading R1 closure criterion (per ROADMAP single authority +
THESIS "the release gate IS a .dag program") makes implementation-receipt
[x] insufficient for gate close. R1 Closure Manager dispatch lanes are
the actual gate-close path.

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

Copy link
Copy Markdown
Contributor Author

Response to codex BLOCKING #1 (sha 5d8d333c)

docs/briefs/r1-surface-manager.md Gate status conflates implementation receipts with R1 acceptance gates → split receipt progress from .dag TestClaim status and leave gates unchecked until the claim exists and evaluates.

Verified valid. Fixed in commit a57126b72:

  1. SUPERSEDED banner at top — declares R1 Closure Manager (r1-closure-manager.md, PR docs: PM bundle — R1 Closure Manager + escalation-paths union map #847) owns gate-close authority under strict-interpretation reading. Brief stays in-tree as historical receipt of lane sequencing; new R1 dispatch happens under R1 Closure Manager.

  2. Working-state table reshaped into Impl | Gate | Owner columns so implementation-receipt landed and .dag TestClaim gate-evaluation are tracked separately:

    • T-P0: 3× impl [x] (the underlying features work), 3× gate [ ] (no .dag TestClaim wrappers yet) — gates owned by R1 Closure Manager R1C-B.
    • T-Sub: sub_match_over_user_sum is the only T-Sub gate that's actually closed (impl + .dag TestClaim in r1_gates.dag evaluates Compiles); sub_type_alias_where_lowers impl [x] (PR feat(v3): DB-11 type alias RHS where (parse + lower) #703) but gate [ ] (R1C-C R1C-C T-Sub fixture #879 in flight); charclass-phase-2 reclassified to R2 substrate per 2026-04-24 amendment.
    • T-Emit: all 3 host-harness implementations partial; all 3 .dag gates [ ] — R1C-E wraps via ExecuteCommand. The [x] on emit_rust_fixtures_rustc_green was the cleanest example of the conflation: PR feat(emit-rust): emit_rust_fixtures_rustc_green gate test #694's host-harness sweep is the input to the gate, not the gate itself.

The conflation came from the brief being authored before the strict-reading R1 closure criterion was locked + before R1 Closure Manager existed. Going forward: any [x] in the Gate column means the corresponding row in ROADMAP.md §"Lane acceptance — .dag gates" evaluates true, not "feature work landed."

Re ROADMAP Class 5 Gap 3 row: noted the codex "Verified" — the row's claim that FieldValue carries the nested cases while top-level non-scalar bodies fall to ValueBody::Unparsed matches live code; no edit needed there per the verdict.

Awaiting +1 still queued.

@briansrls

Copy link
Copy Markdown
Contributor Author

Response to codex BLOCKING #2 (sha 5d8d333c queued findings, lines :138 and :151)

Both findings are valid and already addressed in commit a57126b72 (the fix for BLOCKING #1) — codex was looking at the pre-fix tree.

r1-surface-manager.md:138 — "if release wants" conditional language on sub_type_alias_where_lowers

Old (sha 5d8d333c):

[x] sub_type_alias_where_lowers parse + lower receipt landed
(DB-11 parse + lower substrate landed in PR #703 ... formal .dag
gate remains tied to the [ext] predicate path if release wants
a first-class TestClaim for this surface)

New (sha a57126b72): Now a row in the impl/gate/owner table — impl [x] PR #703, gate [ ] [ext] predicate path TestClaim not yet authored → owner R1C-C (#879 in flight). No conditional. ROADMAP's strict R1 meta-acceptance is honored: gate closes only when the .dag TestClaim evaluates.

r1-surface-manager.md:151 — Rust harden [x] on ignored test sweep

Old:

[x] Rust harden — emit_rust_fixtures_rustc_green gate test landed (PR #694 ... #[ignore]d named gate sweeps)

New: Same row split — impl [x] PR #694 (host-harness gate test), gate [ ] emit_rust_fixtures_rustc_green [ext: ExecuteCommand] with explicit annotation "host harness is not the .dag gate; R1C-E wraps it". Owner R1C-E. The conflation between host-harness landed and .dag gate evaluating is gone.

Both findings reflect the same conflation pattern as BLOCKING #1; the column-split + SUPERSEDED banner in a57126b72 resolves them all uniformly. Verify at HEAD: grep "if release wants" docs/briefs/r1-surface-manager.md returns nothing.

@briansrls
briansrls merged commit 6dc6a00 into main Apr 26, 2026
4 checks passed
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