Skip to content

Implement transport mock coverage and type compatibility validation - #36

Merged
briansrls merged 11 commits into
mainfrom
claude/unified-resource-model-2HyXd
Feb 5, 2026
Merged

briansrls merged 11 commits into
mainfrom
claude/unified-resource-model-2HyXd

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

Completes TODO 8.1 and 8.3 by adding automated validation of transport mock coverage and mock value type compatibility to testgen. This eliminates the need for manual boundary presence and type mismatch tests.

Key Changes

Transport Mock Coverage Validation (TODO 8.1)

  • Added find_missing_transport_mocks() helper that identifies transport executor output ports connected downstream but lacking mocks in MockSpec
  • Panics at test generation time with actionable error messages listing missing mocks and suggested MockSpec additions
  • Replaces ~25 manual "boundary presence" tests (Pattern A) across multiple files

Mock Value Type Compatibility Validation (TODO 8.3)

  • Added find_mock_type_mismatches() helper that validates each mock value's type against the port's declared TypeId
  • Implements contract-level checking ("mock is Bool-typed" not "mock == Bool(true)")
  • Supports type compatibility rules:
    • Exact type matches
    • Any type matches anything
    • Value::Skipped compatible with all types
    • Json flexible with any value type
    • Map values compatible with structured types (ToolHandle, AuthToken, etc.)
  • Catches type drift between MockSpec and DAG port definitions early

Test Updates

  • Updated existing test cases to use transport_mock() instead of boundary() for transport executor outputs
  • Added comprehensive test coverage:
    • test_transport_mock_coverage_required() - validates panic on incomplete mocks
    • test_transport_mock_coverage_passes_when_complete() - validates success path
    • test_mock_type_mismatch_detected() - validates type checking
    • test_mock_type_compatibility_accepts_skipped() - validates Skipped compatibility
    • test_mock_type_compatibility_accepts_json() - validates Json flexibility

Redundant Test Cleanup

  • Removed 12 Pattern A tests (boundary presence) from gist/graph_mock.rs
  • Removed 3 Pattern C tests (self-chain validation) from gist/graph_mock.rs
  • Removed 5 Pattern D tests (resource presence) from gist/graph_mock.rs
  • Retained only Pattern B tests (mock value properties) that verify mode-specific behavior

Documentation

  • Updated TODO tracking in testgen-improvements.md with implementation details
  • Added inline comments explaining validation logic and error messages

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW

This implements two key TODOs from the testgen-improvements.md document:

**TODO 8.1: Transport-mock coverage assertion** ✅
- Added validation in `generate_test_module()` that checks every transport
  executor output port connected downstream has a corresponding mock in MockSpec
- Panics early with helpful error if mocks are missing
- Replaces manual "boundary presence" tests (Pattern A)

**TODO 8.2: Mock-value type compatibility assertion** ✅
- Added validation that checks mock values have compatible types with DAG ports
- Detects when a String mock is provided for an Int port, etc.
- Handles special cases: Skipped compatible with all, Map-backed types
  (ToolHandle, AuthToken, Timestamp, etc.), Json flexibility
- Catches type drift between MockSpec and DAG definitions

**Pattern A, C, D test deletions (TODO 8.4 partial)**
- Deleted 5 redundant tests from gist/graph_mock.rs:
  - 2 Pattern A (boundary presence): test_snapshot/diff_mock_spec_has_boundaries
  - 2 Pattern C (self-chain): test_snapshot/diff_chain_validation_self
  - 1 Pattern D (resource presence): test_resource_lock_present
- Kept Pattern B tests (mode behavior, URL validity) as they test MockSpec logic

Also fixed existing tests that had type mismatches in their MockSpecs,
proving the new validation catches real issues.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
This implements the foundation for Phase 9 DagSpec: typed mock requirements
that make it structurally impossible to have incorrect or incomplete mocks.

## New module: mock_requirements

**MockRequirements**: Builder that knows exactly what mocks a DAG needs.
- Extracted from DAG via `extract_mock_requirements(&dag, "name")`
- Type-checks mock values at construction time, not at testgen
- Refuses to build MockSpec until all required slots are filled

**MockSlot**: Describes one required mock (node, port, type, cardinality).
- Categorized by kind: Boundary, Transport, or Resource
- Carries type information for validation

**Key functions**:
- `extract_mock_requirements()`: Analyze DAG structure to determine mock needs
- `.boundary()`, `.boundary_str()`, etc.: Type-checked mock setters
- `.build()`: Only succeeds if all required mocks provided

## Design principle

Instead of validating MockSpec against DAG at testgen time:
```rust
// Old: validate late, panic with error
TestGenerator::new(&dag).with_mock_spec(spec)  // might panic
```

Type errors are caught at mock construction:
```rust
// New: impossible to construct invalid spec
let spec = extract_mock_requirements(&dag, "name")
    .boundary_str("node", "port", "value")  // type-checked here
    .unwrap()
    .build()  // fails if incomplete
    .unwrap();
```

## Files

- `TODO/design-typed-mock-builder.md`: Design document
- `core/test/src/mock_requirements.rs`: Implementation
- `core/test/src/lib.rs`: Module exports

This is a foundation - existing MockSpecs still work. Migration to the new
pattern will make the testgen validation panics (TODO 8.1, 8.3) unreachable.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
- Rewrite gist_mock_spec() to extract requirements from actual DAG
- Add resource node output extraction to extract_mock_requirements()
- Add Int->Timestamp type compatibility for serialized timestamps
- Add get_transport_mock() getter to MockSpec
- Update tests to use new pattern (get_transport_mock instead of get_boundary_mock)

This demonstrates the "impossible by construction" approach:
- DAG is built first
- Requirements extracted from DAG structure
- Mocks are type-checked at construction time
- Missing mocks cause immediate panic, not testgen failure

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
- Rewrite deps_mock_spec() to extract requirements from actual DAG
- Fix extract_mock_requirements() to only require mocks for transport/resource nodes
  (pure terminal outputs are computed, not mocked)
- Add String->Platform type compatibility for string-backed enums
- Update design-typed-mock-builder.md to reflect implemented status
- Simplify deps MockSpec tests to Pattern B only (resource/value checks)

Key insight: Pure node terminal outputs (parse_manifest.*, etc.) should NOT
require mocks - they're computed during DryRun execution. Only transport
and resource outputs need mocks for DryRun interception.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
- Rewrite makegen_mock_spec() to extract requirements from actual DAG
- Provide mocks for all transport node outputs (response, written_path, content)
- Update no_change and fs_fails variants with complete transport mocks
- Fix test to query expected_outputs Vec instead of HashMap
- Update design doc migration status

Key insight: Transport nodes with multiple outputs require mocks for ALL
outputs, not just the response. This is because DryRun intercepts the
entire node execution and returns all mocked output values.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
- Rewrite bootstrap_mock_spec() to extract requirements from actual DAG
- Remove stale references to write_files node (doesn't exist)
- Provide mocks for all three transport nodes:
  - execute_scan_workspace (workspace scanning)
  - execute_makefile_transport (Makefile write)
  - execute_gitignore_transport (.gitignore write)
- Update all variant specs (makefile_only, makefile_fails, all_fail)
- Update design doc migration status

Bootstrap has three transport nodes with multiple outputs each,
making it a good test case for the typed mock builder pattern.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
This is a more complex migration involving:
- Multiple transport nodes (execute_deps_exists, execute_codegen_exists,
  execute_codegen, execute_build, execute_test)
- A resource node (runner_env providing tool:clippy)
- A CliTool node (clippy_lint) that doesn't fit the typed pattern

The CliTool node (clippy_lint) is handled with post-build .transport_mock()
calls since it doesn't consume TransportRequest and thus isn't detected
by extract_mock_requirements().

Also removes unused mock_ci_report_* helper functions since report outputs
are computed by the pure report node, not mocked.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
Migrates both inline_review_mock_spec() and diff_review_mock_spec() to use
extract_mock_requirements(). Both graphs have:
- auth_env resource node providing AuthToken
- execute_llm transport node for LLM API calls
- execute_diff transport node (diff graph only)

Pure terminal outputs (parse_response.output, parse_response.errors,
parse_diff.stats) are computed during execution, not mocked.

Also removes duplicate boundary/transport_mock calls that existed in the
old code - the typed builder pattern makes this clearer.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
The llm-ops mock specs (openai_mock_spec, anthropic_mock_spec, etc.) don't
have corresponding DAG builders - they define expected node patterns for
testing the LLM workflow interface. The typed mock builder pattern requires
a DAG to extract requirements from.

These mock specs are still useful for testing the LLM ops pattern but don't
fit the "DAG → extract → type-check → build" flow.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW

@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: f09103af25

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

Comment thread core/codegen/src/testgen/codegen.rs
Comment thread gunbc-dag/src/ci/graph_mock.rs Outdated
Two issues fixed:

P1: extract_mock_requirements now requires mocks for ALL transport node
outputs, not just connected ones. DryRun interception requires a mock for
every output port on intercepted nodes, so missing unconnected outputs would
cause runtime failures even if test generation passed.

P2: Failure mock specs (ci_mock_spec_test_fails, ci_mock_spec_build_fails,
ci_mock_spec_prep_fails, ci_mock_spec_lint_fails) now actually model failure
scenarios instead of silently using success-path mocks. Each spec explicitly
provides failure-specific transport responses.

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
Multiple improvements based on thorough code review:

1. **Unified type compatibility** between MockRequirements and codegen testgen:
   - Both now allow Int → Timestamp (Timestamp serializes as Int)
   - Both now allow String → Platform (Platform serializes as String)
   - Both now allow Map → Platform (for structured platform info)
   - Removed Timestamp from map_backed types (it's Int-backed)

2. **Added unknown mock slot validation** in testgen:
   - Panics if MockSpec contains mocks for non-existent nodes/ports
   - Catches typos and stale mocks early

3. **Documented CardinalityMismatch as not yet implemented**:
   - Added #[allow(dead_code)] and documentation
   - Cardinality validation planned for future

4. **Prevent duplicate mock entries**:
   - Setting the same slot twice now replaces instead of duplicating
   - Uses retain() to remove existing entry before push()

5. **Extended requirements extraction to cover CliTool nodes**:
   - Nodes with ToolHandle input (like clippy_lint) now detected
   - All their outputs require mocks for DryRun interception
   - CI graph_mock no longer needs manual post-build .transport_mock() calls

6. **Updated CI mock specs to use typed builder for all mocks**:
   - with_ci_typed_mocks now includes clippy_lint mocks
   - Failure specs explicitly provide clippy_lint mocks before build_unchecked()

https://claude.ai/code/session_01AH7FXhHKtqLPkpv3md8wfW
@briansrls
briansrls merged commit dcadb82 into main Feb 5, 2026
1 check passed
briansrls added a commit that referenced this pull request May 10, 2026
briansrls added a commit that referenced this pull request May 10, 2026
…G-2 manifest (#2496)

* WIP: R3 gate #36: bridge retirement ledger zero

* WIP: R3 gate #36: bridge retirement ledger zero

* fix(v3): refresh SG-2 parse corpus manifest for types.dag

`handwritten_parse_snapshot_matches_manifest` hashes the v3 parse
surface `Debug` output; comment edits on `dsl/std/types.dag` changed
the fingerprint without updating the manifest, breaking the v3 CI
suite.

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

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 10, 2026
Promotes 4 §1.8 rows with PR-evidence on main. PB Mgr post-merge
ledger-receipt sync per Director ratification at gunbc#828
(c#4415884211; same pattern as PR #2399).

Promotions:
- #6  lens_testgen_dot_rs_retired                     DECLARED -> CONSUMER_LANDED + PASSING
       (PR #2392 producer + PR #2594 regression-guard; lens_testgen.rs
        absent on disk; consumer-side ratchet test landed)
- #33 bridge_canonical_lens_name_dispatch_retired     DECLARED -> CONSUMER_LANDED
       (PR #2449)
- #34 bridge_include_str_side_channels_retired        DECLARED -> CONSUMER_LANDED (slice scope)
       (PR #2459 pipeline.dag slice; standalone closure brief #1976
        STOP-BLOCKED on Substrate T1)
- #66 lens_producer_retirement_executable_witness     Notes-update only
       (PR #2595 substrate-impl landed: TestRunner executes .dag PB
        census claim and reports residual; closure-receipt remains
        F3-DEFERRED per PB Mgr disposition)

Excluded (out of charter):
- #31 -> Substrate (#2068)
- #36 -> Verification (#2075)

Excluded (T-V2-Retirement HELD on PM-authored S-1 brief #1974):
- #41 / #42 / #60 / #71

Pre-authored brief at docs/briefs/r3-pb-status-drift-sweep-post-tlp.md
covers the post-T-LP cascade wave (G5/G7/G8).

Closes PB Mgr drift-sweep obligation for already-merged evidence;
G5/G7/G8 remain queued per pre-authored brief.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 10, 2026
…2631)

* docs(audit): land R-3 + R-7 ratifications (T-Tier3 perf budget)

§5.1 designation in canonical-bench-host-decision-matrix: Option A
ubicloud-standard-2 ratified 2026-05-08 per PB Manager (warm-dove-618);
Director ratification at gunbc#828 c#4403509523.

§2 capture procedure: multi-run discipline addendum — N=5 preferred,
median-of-medians for median_ns, max-p99-across-runs for p99_ns,
per-run intermediates committed alongside final tier3_baseline.json.

Both lines unblock #2204 slice dispatch (Substrate-side PerfWithinBaseline
variant + PerfBaselineMeasurement carrier); PB consumer slice queues
post-#2204 land.

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

* PB Item 5 brief — encode substrate disposition (#2068 P1 RATIFIED)

Substrate Mgr (warm-wolf-698) ratified §7.3 disposition at gunbc#2068
c#4411574142: shape (b) CensusSubsetCount filter with closed predicate
BinShimFilesSubsetPredicate, mirroring existing LensProducerFilesSubsetPredicate
precedent. Per feedback_strict_mirror_vs_novel_substrate_fact, strict-mirror
ratifies directly (no canvas needed).

Updates r3-pb-binshim-retirement-worker.md:
- New §"Substrate landings (locked shape)" with the 4 required artifacts
  (substrate marker type + value, runtime predicate body, dispatch branch).
- §7.3 acceptance now authorable; locked TestClaim shape recorded.
- Dispatch precondition (5): unauthorable → RESOLVED.
- STOP condition: §7.3 disposition not-yet-live → drift-detection.
- Status header: PROPOSAL → READY-FOR-DISPATCH posture (pending only the
  standard R2/R2-Evaluator close signal; both Item-4 sub-gates met via
  PR #2282 / #2227 close).

Bin-shim file inventory at main 5a13ed8: 9 files in src/v3/compiler/src/bin/;
closure when CensusSubsetCount predicate count == 0.

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

* WIP: R3 PB Mgr — lane through R3 close

* brief: clarify §7.3 TestClaim is zero-only (not schedule-bound)

Addresses non-blocking improvement on PR #2334 (codex review sha=68977425):
the prior wording called CensusSubsetCount a schedule-bound gate, but the
runtime predicate (test_runner.rs:3290-3296) is zero-only — Pass iff
count==0. Interim per-PR shrink receipts are PR-level milestones outside
this TestClaim, not TestClaim verdicts.

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

* brief: reconcile §"Substrate landings" with Non-goals (PB strict-mirror authoring authorized post-#2068)

Addresses non-blocking improvement on PR #2334 (codex review sha=363cf799):
the new §"Substrate landings (locked shape)" worker-owned list contradicted
the unchanged "out of scope" entries that still said PB lane does not author
§7.3 substrate shape.

Resolution: per #2068 c#4411574142 ratification + feedback_strict_mirror_vs_
novel_substrate_fact, strict-mirror declarations (mirroring the existing
LensProducerFilesSubsetPredicate precedent) are PB-lane-authorable. The
non-goal still applies to *novel* shape (extra fields, alternative
coproducts) which would re-escalate to Substrate Mgr.

Updates:
- "PB does not own and must not edit" entry (line 29): clarifies shape
  question is Substrate-territory but strict-mirror authoring is authorized.
- Non-goals (line 155): same reconciliation; novel shape still gates back
  to Substrate Mgr.

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

* PB Item 5 follow-on brief — batch retirement for 8 remaining bin-shims

Director re-task at gunbc#828 c#4413892216 Task A: author per-shim retirement
worker briefs for the 9 bin-shims; 1 covered by gate #7 (warm-crab-600 working
regen_lens.rs); 8 unscoped (emit_method_template_projection, r1c_e_emit_gates,
regen_bootstrap, regen_parse, regen_parse_tables, regen_tokenize, regen_v3,
self_host_fixed_point).

This brief governs the 8-shim batch follow-on against the canonical
r3-pb-binshim-retirement-worker.md template. Status PROPOSAL —
dispatch-gated on:
- smart-tern-649 Stage A landing (BinShimFilesSubsetPredicate carriers + runtime predicate)
- warm-crab-600 gate #7 first-cut precedent on main

Three staging shapes documented (mega-PR / serial-per-shim / batched-2-3);
PB Mgr leans batched-by-regen-family. Worker chooses at dispatch.

STOP-AND-PING conditions enumerated (substrate-carrier absent / carrier shape
pressure / emit-pattern divergence / substrate-grep mismatch).

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

* fix-forward (PR #2471 codex REQUEST_CHANGES)

Two findings addressed:

1. Carrier-shape mismatch (line 43): brief template said `name:` but the
   locked BinShim carrier per design-pb-runtime-interpreter.md:200-204 uses
   `entrypoint_name`, `description`, `entry`. P2 single-authority violation
   would have routed workers against wrong shape. Fixed: template now
   matches locked shape verbatim with explicit no-additional-fields clause.

2. Dispatch-gate dilution (lines 33, 98): brief reduced operative dispatch
   gate to "Stage A landing + gate #7 precedent" but parent brief enumerates
   5 preconditions (R2 close + R2-Evaluator landed + Item 4 sub-gate green
   + BinShim carrier live + §7.3 disposition). P5 fail-closed violation.
   Fixed: full readiness prerequisite inherited verbatim from parent brief;
   gate #7 precedent demoted to implementation-pattern reference (not gate).

Worker dispatch posture updated to require all 5 preconditions verified
on main at dispatch time per feedback_substrate_grep_before_authoring.

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

* WIP: R3 PB Mgr — lane through R3 close

* docs(r3): §1.8 ledger Status drift sweep — post-T-LP / T-Bridge wave

Promotes 4 §1.8 rows with PR-evidence on main. PB Mgr post-merge
ledger-receipt sync per Director ratification at gunbc#828
(c#4415884211; same pattern as PR #2399).

Promotions:
- #6  lens_testgen_dot_rs_retired                     DECLARED -> CONSUMER_LANDED + PASSING
       (PR #2392 producer + PR #2594 regression-guard; lens_testgen.rs
        absent on disk; consumer-side ratchet test landed)
- #33 bridge_canonical_lens_name_dispatch_retired     DECLARED -> CONSUMER_LANDED
       (PR #2449)
- #34 bridge_include_str_side_channels_retired        DECLARED -> CONSUMER_LANDED (slice scope)
       (PR #2459 pipeline.dag slice; standalone closure brief #1976
        STOP-BLOCKED on Substrate T1)
- #66 lens_producer_retirement_executable_witness     Notes-update only
       (PR #2595 substrate-impl landed: TestRunner executes .dag PB
        census claim and reports residual; closure-receipt remains
        F3-DEFERRED per PB Mgr disposition)

Excluded (out of charter):
- #31 -> Substrate (#2068)
- #36 -> Verification (#2075)

Excluded (T-V2-Retirement HELD on PM-authored S-1 brief #1974):
- #41 / #42 / #60 / #71

Pre-authored brief at docs/briefs/r3-pb-status-drift-sweep-post-tlp.md
covers the post-T-LP cascade wave (G5/G7/G8).

Closes PB Mgr drift-sweep obligation for already-merged evidence;
G5/G7/G8 remain queued per pre-authored brief.

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

* docs(briefs): fix gate #64 → #66 mislabel in drift-sweep brief

Per cursor/composer-2 review on PR #2631: brief table + dispatch-trigger
parenthetical labeled lens_producer_retirement_executable_witness as
gate #64. Authoritative §1.8 row is #66; #64 is
substrate_gap_reflection_closure_closed (separate predicate).

Aligns brief with r3-program-plan.md §1.8 row identity per
INVARIANTS.md P1 (single authoritative facts).

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

* docs(r3): row #66 DECLARED → CONSUMER_LANDED per §1.7 taxonomy

Per codex/codex-default review on PR #2631 (REQUEST_CHANGES, review
9150): leaving row #66 at DECLARED while the Notes cell describes an
executable consumer that runs through TestRunner contradicts the §1.7
status taxonomy and INVARIANTS P2 single-authority discipline.

Promoting #66 to CONSUMER_LANDED with explicit PASSING gate on
residual = 0 (cascades from T-LensProducer-Retirement gates
#5 + #6 + #7). The F3 deferral is on PASSING, not CONSUMER_LANDED;
the executable receipt
src/v3/compiler/tests/integration/r3_lens_producer_retirement_executable_witness_test.rs
already exists and runs the .dag PB census claim through TestRunner.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
…ion-owned) — codex BLOCKING review 10431 on PR #2782

(1) S2 brief deleted: per docs/r3-program-plan.md:311-312 — #85 carriers already landed via PR #2647, remaining work is consumer-side (Verification lane / V Mgr #87 cascade); #86 already CONSUMER_LANDED + PASSING. Substrate lane has no work on these gates.

(2) S4 brief deleted: per docs/r3-structure.md:214 + docs/r3-program-plan.md:391 (Director-locked 2026-04-28 distribute-work-centralize-ledger) — #36 bridge_retirement_ledger_zero is Verification-owned. The 5 distributed bridges are separate gates (2 Substrate, 3 PB); none is #36.

(3) Authored r3-wave1-substrate-lane-retractions.md as audit-trail receipt + updated queue (5 items down from 7).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 14, 2026
* WIP: R3 gate #36: bridge_retirement_ledger_zero (T-Bridge-Retirement)

* WIP: R3 gate #36: bridge_retirement_ledger_zero (T-Bridge-Retirement)

* chore: regen bootstrap snapshots after types.dag comment drift

CI `regen_bootstrap --verify` failed: committed std/bootstrap snapshots
embedded stale `SourceSpan` byte ranges for `dsl/std/types.dag` after the
kernel Bool inhabits comment update. Regenerate the three PB-1-e snapshot
artifacts so verify matches fresh fixture lowering.

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

* WIP: R3 gate #36: bridge_retirement_ledger_zero (T-Bridge-Retirement)

* chore: regen PB-1 snapshots after bridge_ledger comment edit

`bridge_ledger.dag` header drift shifts embedded `SourceSpan`s in
`bootstrap_generated*.rs`. Re-run `regen_bootstrap`; apply rustfmt on
`ensure_kernel_bool_lane1e2b_bootstrap_witness`.

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

* refactor: avoid expect in kernel Bool bootstrap witness

Per review: use `let Some(inh_id) = … else { return }` after optional
`wire_kernel_bool_boolean_algebra_inhabits` so the library path never
panics when inhabitance stays unset (diagnostics-only failure).

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

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls deleted the claude/unified-resource-model-2HyXd 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.

2 participants