Skip to content

fix(v3): split canonical lens bridge ledger row - #1396

Merged
briansrls merged 3 commits into
mainfrom
bridge-ledger-canonical-lens-split
May 1, 2026
Merged

briansrls merged 3 commits into
mainfrom
bridge-ledger-canonical-lens-split

Conversation

@briansrls

@briansrls briansrls commented May 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • split the canonical-lens bridge ledger row into the narrow retired PR docs(pb): pin canonical lens bridge blocker #1183 slice and the broader open patching residual
  • keep the live residual structurally visible for test_runner.rs exact-string/name-keyed paths until PB-Runtime interpreter-as-data or a typed lens-registry carrier retires it
  • refresh generated bootstrap snapshots, parse manifest, and the bridge-ledger runner ratchet wording for the added row

Verification

  • cargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap
  • cargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap -- --verify
  • cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignored
  • cargo test -p v3-compiler --test integration bridge_ledger_carrier_test:: -- --nocapture
  • cargo test -p v3-compiler --test integration m1_5_verification_test::r3_bridge_retirement_ledger_zero_fixture_reports_open_rows_at_head -- --nocapture
  • cargo fmt --all --check
  • git diff --check

@briansrls

Copy link
Copy Markdown
Contributor Author

Director — tracked. Bridge-row sub-class split per Option 2 ratification at #1276 c#4358798673. Touches bridge_ledger.dag (1 row → 2 rows: pr1183_slice_retired Retired + patching_residual Open) + carrier test ratchet update. +26/-14 reasonable scope. Mgr will retitle from session-dashboard placeholder when marked ready. — sent from zesty-bear-812

@briansrls briansrls changed the title R3 Substrate fix(v3): split canonical lens bridge ledger row May 1, 2026
@briansrls
briansrls marked this pull request as ready for review May 1, 2026 10:07
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 42675330 · Trigger: schedule
  • Comparison: origin/main @ 7addae94 ... review/pr-1396-42675330 @ 42675330
  • Thinking: 16s wall

Verdict: APPROVE — Diff is narrowly scoped: one ledger row split into a retired PR #1183 slice and a named open residual, with regenerated bootstrap fixture, manifest hash bump, and test-comment refresh. Both rows carry name/owner/status/authority per the BridgeLedgerRow shape, the new Open row points at a concrete disposition doc, and the runner test (which fails while any Open row exists) is correctly relaxed from "three Open rows" to a count-agnostic comment. No invariant or modeling-discipline issues observed in the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 42675330 · Trigger: manual
  • Comparison: main @ 89382fc9 ... bridge-ledger-canonical-lens-split @ cc9ada2c
  • Conversation: View conversation

1. Story of the diff

This PR narrows an over-broad bridge-ledger claim. The previous single bridge_canonical_lens_name_dispatch_retired row is split into a precise retired PR #1183 slice, bridge_canonical_lens_name_dispatch_pr1183_slice_retired, and a still-open residual, bridge_canonical_lens_name_patching_residual, so the ledger no longer implies that all canonical-lens-name string patching is gone when only the typed-dispatch slice was retired (src/v3/std/bridge_ledger.dag:43-51, src/v3/std/bridge_ledger.dag:137, src/v3/std/bridge_ledger.dag:143-146). The bootstrap snapshots are regenerated to carry the same source-level ledger data (src/v3/compiler/src/bootstrap_generated.rs:801, src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs:801), and the parse corpus manifest hash is updated for the changed .dag file (src/v3/compiler/tests/integration/parse_corpus_manifest.txt:30). The existing bridge-ledger-zero test comment is also generalized so it describes the invariant, not a stale count of open rows (src/v3/compiler/tests/integration/bridge_ledger_carrier_test.rs:262-267).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this touches substrate-authored .dag data, but it does not introduce a new substrate carrier or variant; it refines the authoritative bridge_ledger rows in source and mirrors them in both generated bootstrap fixtures (src/v3/std/bridge_ledger.dag:143-146, src/v3/compiler/src/bootstrap_generated.rs:801, src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs:801).

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

Compliant — Boundary Discipline / single-authority is improved: the comment now says split rows enumerate sub-classes when one prose bridge has both a retired slice and remaining residual, avoiding one row carrying two incompatible statuses (src/v3/std/bridge_ledger.dag:115-118). Fail-closed is also preserved in the test contract: ledger-zero must still Fail and name every open row rather than pretending the ledger is already clean (src/v3/compiler/tests/integration/bridge_ledger_carrier_test.rs:262-267).

  1. CODING.md.

Compliant — the change is data-first and keeps behavior out of hidden Rust logic: the source ledger rows carry the new facts directly (src/v3/std/bridge_ledger.dag:137, src/v3/std/bridge_ledger.dag:143-146), while the generated Rust only materializes those rows as bootstrap data (src/v3/compiler/src/bootstrap_generated.rs:801). No new methods, object surfaces, hidden state, or primitive sentinel logic are introduced.

  1. TESTING.md.

Compliant — no new test was necessary for a row split because the existing behavior-driven bridge-ledger-zero test remains aimed at the runner contract: fail while open rows exist, and name every open row (src/v3/compiler/tests/integration/bridge_ledger_carrier_test.rs:262-267). The parse corpus manifest was updated hermetically for the changed ledger file (src/v3/compiler/tests/integration/parse_corpus_manifest.txt:30).

  1. LOCKED DESIGN DECISIONS.

N/A — the diff references design/brief authority strings, but it does not alter a locked design document or diverge from a locked thesis claim in the changed lines.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the new residual bridge is tracked: the comment bounds the live class to exact-string canonical-lens-name remnants in test_runner.rs, including include_str!, name arms, and generic name-keyed lookups (src/v3/std/bridge_ledger.dag:47-50); it names the dissolution path as PB-Runtime interpreter-as-data or a typed lens-registry carrier (src/v3/std/bridge_ledger.dag:50-51); and the row records owner/status/authority (src/v3/std/bridge_ledger.dag:143-146).

3. Verdict

APPROVE

The PR makes the ledger more truthful by separating a retired typed-dispatch slice from a still-open string-patching residual, and the source, generated bootstrap data, manifest, and test commentary stay aligned. I did not find a blocking or non-blocking issue tied to the changed lines.

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

Non-blocking — Strengths

  • src/v3/std/bridge_ledger.dag The split keeps the retired PR #1183 slice separate from the still-open name-patching residual and documents the residual scope plus dissolution trigger.

✅ No blocking concerns.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: cc9ada2c · Trigger: schedule
  • Comparison: origin/main @ 89382fc9 ... review/pr-1396-cc9ada2c @ cc9ada2c
  • Thinking: 24s wall

Findings

None. The diff only adjusts the canonical bridge_ledger substrate (split one retired row into a retired PR #1183 slice row plus an Open residual row with authority pointing at docs/briefs/r2-pb-canonical-lens-bridge-disposition.md and prose naming PB-Runtime / typed-registry as the dissolution path), syncs generated bootstrap fixtures and the parse corpus manifest, and softens an integration-test comment so it does not hard-code row counts. That matches P2 (single authority for the ledger) and tracked bridge expectations from INVARIANTS.md / docs/modeling-discipline.md rather than contradicting them. Nothing here conflicts with CODING.md or TESTING.md for new code style or test discipline.

Verdict

APPROVE — Change is narrow, ledger semantics are clearer, and residual work is explicitly owned and pointed at a named authority; no rubric violations visible in the diff.

@briansrls
briansrls merged commit 8cd5359 into main May 1, 2026
4 checks passed
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

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

1. Story of the diff

This PR makes the bridge ledger more precise instead of treating the whole canonical-lens-name bridge as already retired. The old single retired row is narrowed to bridge_canonical_lens_name_dispatch_pr1183_slice_retired, while a new explicit bridge_canonical_lens_name_patching_residual row remains Open with PB-Runtime ownership and a disposition authority (src/v3/std/bridge_ledger.dag:137, src/v3/std/bridge_ledger.dag:143-146). The surrounding prose now explains the split: the PR #1183 dispatch slice is retired via typed DeclarationRef identity, but the broader exact-string canonical-lens-name residual still lives in test_runner.rs through include_str!, name arms, and generic name-keyed lookups until PB-Runtime interpreter-as-data or a typed lens-registry carrier lands (src/v3/std/bridge_ledger.dag:43-51). Generated bootstrap fixtures and the parse corpus manifest are updated to reflect the .dag source change (src/v3/compiler/src/bootstrap_generated.rs:801, src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs:801, src/v3/compiler/tests/integration/parse_corpus_manifest.txt:30).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this touches a Dag-resident .dag data authority, and the change keeps the canonical fact in bridge_ledger rather than adding an implementation-side parallel ledger; the generated Rust mirrors the same row split (src/v3/std/bridge_ledger.dag:142-147, src/v3/compiler/src/bootstrap_generated.rs:801).

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

Compliant — Boundary Discipline / single-authority is improved by splitting an overbroad retired row into a retired slice plus an open residual, with the comment explicitly saying split rows enumerate sub-classes when one prose bridge has both states (src/v3/std/bridge_ledger.dag:115-117). Fail-closed/progress discipline is also preserved because the residual is not masked as retired; it is authored as status: Open (src/v3/std/bridge_ledger.dag:143-145).

  1. CODING.md.

N/A — no new hand-written Rust behavior, methods, helpers, or error/result APIs are introduced; the Rust edits are regenerated fixture data plus a test comment update (src/v3/compiler/src/bootstrap_generated.rs:801, src/v3/compiler/tests/integration/bridge_ledger_carrier_test.rs:262-267).

  1. TESTING.md.

Compliant — the existing bridge-ledger-zero test commentary was adjusted away from hard-coded row counts and toward the behavior contract: fail while any rows are open, name every open row, and re-arm as pass once all rows retire (src/v3/compiler/tests/integration/bridge_ledger_carrier_test.rs:262-267). The parse corpus manifest was also updated for the changed .dag source (src/v3/compiler/tests/integration/parse_corpus_manifest.txt:30).

  1. LOCKED DESIGN DECISIONS.

N/A — the diff references authority docs and future retirement mechanisms, but it does not modify a locked design doc or introduce a divergence from a locked decision in the reviewed diff (src/v3/std/bridge_ledger.dag:50-51, src/v3/std/bridge_ledger.dag:146).

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the new open residual is tracked rather than free-floating: documentation names the residual, bounds it to the exact-string canonical-lens-name class and current test_runner.rs surfaces, and gives dissolution triggers via PB-Runtime interpreter-as-data or a typed lens-registry carrier (src/v3/std/bridge_ledger.dag:47-51). The data row also names owner, open status, and authority (src/v3/std/bridge_ledger.dag:143-146).

3. Verdict

APPROVE

No findings. The PR makes the bridge ledger more faithful by refusing to overclaim retirement, keeps the canonical authority in the .dag ledger, and updates generated/bootstrap and corpus artifacts consistently.

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