From 24a1d4e7555dae9245aa7bef6b7b3dc20199944c Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 17:16:33 +0000 Subject: [PATCH 01/12] feat(v3-compiler): PB-1 bin-shim main.rs shell + ProcessExit host mirror MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add process_exit::ProcessExit (structural mirror of dsl/std/process.dag). - Add emit_rust_bin_shim::format_bin_shim_main_rs per design-pb-runtime-interpreter §4.2. - Unit tests for header, entry qname, multiline description. - STOP boundary: no DeclarationRef resolution, no cargo/build.rs wiring. Co-authored-by: Cursor --- src/v3/compiler/src/emit_rust_bin_shim.rs | 82 +++++++++++++++++++++++ src/v3/compiler/src/lib.rs | 2 + src/v3/compiler/src/process_exit.rs | 11 +++ 3 files changed, 95 insertions(+) create mode 100644 src/v3/compiler/src/emit_rust_bin_shim.rs create mode 100644 src/v3/compiler/src/process_exit.rs diff --git a/src/v3/compiler/src/emit_rust_bin_shim.rs b/src/v3/compiler/src/emit_rust_bin_shim.rs new file mode 100644 index 00000000000..c6fa1eab58e --- /dev/null +++ b/src/v3/compiler/src/emit_rust_bin_shim.rs @@ -0,0 +1,82 @@ +//! PB-1 — Rust `main.rs` shell for generated `[[bin]]` shims (Item 5). +//! +//! Authority: `docs/design-pb-runtime-interpreter.md` §4.2 (`main` → +//! `ProcessExit` → `ExitCode`). This module owns **parameterized Rust text** +//! only: it does not resolve `BinShim.entry` `DeclarationRef` targets (row-#1 +//! / host bridge gap — STOP there) and does not wire `cargo`/build.rs. + +/// Formats the `main.rs` wrapper for a `.dag`-authored bin shim. +/// +/// `source_dag_path` is emitted verbatim in the `AUTO-GENERATED` header (one +/// line). `description` is split into `//` comment lines. `entry_fn_qname` is +/// the Rust-qualified symbol for the `.dag` entry function returning +/// [`crate::process_exit::ProcessExit`]. +pub fn format_bin_shim_main_rs( + source_dag_path: &str, + description: &str, + entry_fn_qname: &str, +) -> String { + let mut out = String::new(); + out.push_str("// AUTO-GENERATED from "); + out.push_str(source_dag_path); + out.push_str(" — DO NOT EDIT.\n//\n"); + if description.is_empty() { + out.push_str("//\n"); + } else { + for line in description.lines() { + out.push_str("// "); + out.push_str(line); + out.push('\n'); + } + } + out.push_str( + r#" +use std::io::Write; +use std::process::ExitCode; + +use v3_compiler::dag::Dag; +use v3_compiler::process_exit::ProcessExit; + +fn main() -> ExitCode { + match "#, + ); + out.push_str(entry_fn_qname); + out.push_str( + r#"(&Dag::new()) { + ProcessExit::ExitSuccess => ExitCode::SUCCESS, + ProcessExit::ExitFailure { code, reason } => { + let _ = writeln!(std::io::stderr(), "{reason}"); + ExitCode::from(code.clamp(0, 255) as u8) + } + } +} +"#, + ); + out +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn format_bin_shim_main_rs_includes_header_entry_and_process_exit() { + let out = format_bin_shim_main_rs( + "dsl/std/runtime/bin_shims/regen_lens.dag", + "Unified lens-regen driver.", + "std::runtime::bin_shims::regen_lens::regen_lens_main", + ); + assert!(out.contains( + "// AUTO-GENERATED from dsl/std/runtime/bin_shims/regen_lens.dag — DO NOT EDIT." + )); + assert!(out.contains("// Unified lens-regen driver.")); + assert!(out.contains("use v3_compiler::process_exit::ProcessExit;")); + assert!(out.contains("std::runtime::bin_shims::regen_lens::regen_lens_main(&Dag::new())")); + } + + #[test] + fn format_bin_shim_main_rs_multiline_description() { + let out = format_bin_shim_main_rs("path/to/shim.dag", "line1\nline2", "m::f"); + assert!(out.contains("// line1\n// line2\n")); + } +} diff --git a/src/v3/compiler/src/lib.rs b/src/v3/compiler/src/lib.rs index a3648e2add3..60a15a9849a 100644 --- a/src/v3/compiler/src/lib.rs +++ b/src/v3/compiler/src/lib.rs @@ -34,6 +34,8 @@ pub mod generated_files { pub mod emit; pub mod emit_rust; +pub mod emit_rust_bin_shim; +pub mod process_exit; pub mod self_host_receipt_p0; pub mod evaluator { //! E2 evaluator frame helpers. diff --git a/src/v3/compiler/src/process_exit.rs b/src/v3/compiler/src/process_exit.rs new file mode 100644 index 00000000000..048f841b6f8 --- /dev/null +++ b/src/v3/compiler/src/process_exit.rs @@ -0,0 +1,11 @@ +//! Host-side mirror of `dsl/std/process.dag` `ProcessExit`. +//! +//! Used by PB-1 emitted bin-shim `main.rs` shells (`emit_rust_bin_shim`) so +//! generated sources can `match` on the same structural shape the `.dag` +//! substrate declares, without inventing a parallel exit carrier. + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ProcessExit { + ExitSuccess, + ExitFailure { code: i32, reason: String }, +} From b94b74b348555bed9b5baec3b89e055acbd4ce78 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 13:54:48 -0400 Subject: [PATCH 02/12] fix(v3-compiler): bin-shim ExitFailure exit codes stay fail-closed Codex #1540: ExitFailure used code.clamp(0,255), so code<=0 became ExitCode::SUCCESS. Use code.max(1).min(255) per INVARIANTS P3; document in emitted shell; test guardrails. Co-authored-by: Cursor --- src/v3/compiler/src/emit_rust_bin_shim.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/v3/compiler/src/emit_rust_bin_shim.rs b/src/v3/compiler/src/emit_rust_bin_shim.rs index c6fa1eab58e..56a22d73c97 100644 --- a/src/v3/compiler/src/emit_rust_bin_shim.rs +++ b/src/v3/compiler/src/emit_rust_bin_shim.rs @@ -46,7 +46,9 @@ fn main() -> ExitCode { ProcessExit::ExitSuccess => ExitCode::SUCCESS, ProcessExit::ExitFailure { code, reason } => { let _ = writeln!(std::io::stderr(), "{reason}"); - ExitCode::from(code.clamp(0, 255) as u8) + // Fail-closed: `ExitFailure` must not map to a successful host exit. + // Non-positive or out-of-range codes remap into 1..=255 (see dsl/std/process.dag). + ExitCode::from((code.max(1).min(255)) as u8) } } } @@ -71,6 +73,8 @@ mod tests { )); assert!(out.contains("// Unified lens-regen driver.")); assert!(out.contains("use v3_compiler::process_exit::ProcessExit;")); + assert!(out.contains("code.max(1).min(255)")); + assert!(!out.contains("code.clamp(0, 255)")); assert!(out.contains("std::runtime::bin_shims::regen_lens::regen_lens_main(&Dag::new())")); } From 589d8dd8045d8bc5c5fa26d4183f7f60ec74a9df Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 18:08:39 +0000 Subject: [PATCH 03/12] =?UTF-8?q?test(v3-compiler):=20SG-0=20census=20?= =?UTF-8?q?=E2=80=94=20register=20bin-shim=20emitter=20sources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/v3/compiler/tests/integration/sg0_census_test.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/v3/compiler/tests/integration/sg0_census_test.rs b/src/v3/compiler/tests/integration/sg0_census_test.rs index 058745c3c7f..de187485022 100644 --- a/src/v3/compiler/tests/integration/sg0_census_test.rs +++ b/src/v3/compiler/tests/integration/sg0_census_test.rs @@ -211,6 +211,7 @@ const EXPECTED_HAND_AUTHORED_NON_TEST: &[&str] = &[ "src/v3/compiler/src/emit/python_target.rs", "src/v3/compiler/src/emit/rust_target.rs", "src/v3/compiler/src/emit_rust.rs", + "src/v3/compiler/src/emit_rust_bin_shim.rs", // R1C-E + m1_3: shared `PROGRAM_FIXTURES` / `REFLECTED_FIXTURES` tables (single source of truth). "src/v3/compiler/src/emit_rust_roundtrip_fixtures.rs", "src/v3/compiler/src/infer.rs", @@ -222,6 +223,8 @@ const EXPECTED_HAND_AUTHORED_NON_TEST: &[&str] = &[ "src/v3/compiler/src/lower.rs", "src/v3/compiler/src/pipeline_authority.rs", "src/v3/compiler/src/post_emit_verifier.rs", + // PB-1 Item 5: host mirror of `dsl/std/process.dag` `ProcessExit` for emitted bin shims. + "src/v3/compiler/src/process_exit.rs", // R1C-E (T-Emit `.dag` `TestClaim` wrappers): shared `check_*` API the host // `#[test]` harness and `r1c_e_emit_gates` `bin` both call. Single source of // truth for the emit-gate assertions; scaffold until R1 close dissolves it. From ff0e864af85a3c0da0bfb7f858e31d4a1a75fe60 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 18:12:12 +0000 Subject: [PATCH 04/12] =?UTF-8?q?docs(v3-compiler):=20ProcessExit=20?= =?UTF-8?q?=E2=80=94=20Practice=204=20coproduct=20checkpoint=20(GREEN=20mi?= =?UTF-8?q?rror)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/v3/compiler/src/process_exit.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/v3/compiler/src/process_exit.rs b/src/v3/compiler/src/process_exit.rs index 048f841b6f8..6a13b242a41 100644 --- a/src/v3/compiler/src/process_exit.rs +++ b/src/v3/compiler/src/process_exit.rs @@ -4,6 +4,9 @@ //! generated sources can `match` on the same structural shape the `.dag` //! substrate declares, without inventing a parallel exit carrier. +// Practice 4 (coproduct checkpoint, `docs/modeling-discipline.md` §P1): 🟢 GREEN — +// terminal host mirror of `dsl/std/process.dag` `ProcessExit`; no extra variants +// or semantics beyond that substrate coproduct. #[derive(Debug, Clone, PartialEq, Eq)] pub enum ProcessExit { ExitSuccess, From 708fd3506369344553b9c8e9c1628b98a713a2ed Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 18:16:41 +0000 Subject: [PATCH 05/12] =?UTF-8?q?docs(v3-compiler):=20bin-shim=20modules?= =?UTF-8?q?=20=E2=80=94=20SG-0=20+=20bounded-seed=20receipt=20in=20file=20?= =?UTF-8?q?head?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inline #1540 BLOCKING: cite EXPECTED_HAND_AUTHORED_NON_TEST + non-generated partition; point at bounded-substrate-seed authority for seed-flat claim. Co-authored-by: Cursor --- src/v3/compiler/src/emit_rust_bin_shim.rs | 6 ++++++ src/v3/compiler/src/process_exit.rs | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/v3/compiler/src/emit_rust_bin_shim.rs b/src/v3/compiler/src/emit_rust_bin_shim.rs index 56a22d73c97..3168e8fe4a3 100644 --- a/src/v3/compiler/src/emit_rust_bin_shim.rs +++ b/src/v3/compiler/src/emit_rust_bin_shim.rs @@ -1,5 +1,11 @@ //! PB-1 — Rust `main.rs` shell for generated `[[bin]]` shims (Item 5). //! +//! **SG-0 / bounded-seed receipt:** hand-authored path is enumerated in +//! `EXPECTED_HAND_AUTHORED_NON_TEST` in `sg0_census_test.rs` (not +//! `GENERATED_FILES` / `build.rs` output). Narrow host helper for §4.2 shell +//! text only; see `docs/invariants/bounded-substrate-seed.md` (no new +//! substrate primitive — mirrors existing `std.process.ProcessExit`). +//! //! Authority: `docs/design-pb-runtime-interpreter.md` §4.2 (`main` → //! `ProcessExit` → `ExitCode`). This module owns **parameterized Rust text** //! only: it does not resolve `BinShim.entry` `DeclarationRef` targets (row-#1 diff --git a/src/v3/compiler/src/process_exit.rs b/src/v3/compiler/src/process_exit.rs index 6a13b242a41..4557dea1465 100644 --- a/src/v3/compiler/src/process_exit.rs +++ b/src/v3/compiler/src/process_exit.rs @@ -1,5 +1,9 @@ //! Host-side mirror of `dsl/std/process.dag` `ProcessExit`. //! +//! **SG-0 / bounded-seed receipt:** hand-authored path is enumerated in +//! `EXPECTED_HAND_AUTHORED_NON_TEST` in `sg0_census_test.rs` (not +//! `GENERATED_FILES` / `build.rs` output). +//! //! Used by PB-1 emitted bin-shim `main.rs` shells (`emit_rust_bin_shim`) so //! generated sources can `match` on the same structural shape the `.dag` //! substrate declares, without inventing a parallel exit carrier. From 6dba3a28db6535becc817ac1d9a966f1b614d480 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 14:27:13 -0400 Subject: [PATCH 06/12] =?UTF-8?q?fix(dsl):=20stage0=20hand=5Fmaintained=5F?= =?UTF-8?q?src=20=E2=80=94=20PB-1=20bin-shim=20host=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex #1540: add emit_rust_bin_shim.rs + process_exit.rs to compiler.dag stage0.hand_maintained_src (stage0 diff/copy survival); extend sg0 emit-companion ratchet assert. Co-authored-by: Cursor --- dsl/gunbc/compiler.dag | 4 ++++ src/v3/compiler/tests/integration/sg0_census_test.rs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/dsl/gunbc/compiler.dag b/dsl/gunbc/compiler.dag index 357a444f94d..c85aa6e0366 100644 --- a/dsl/gunbc/compiler.dag +++ b/dsl/gunbc/compiler.dag @@ -86,6 +86,8 @@ data stage0: GeneratedCrate = { "emit_go.rs", "emit_python.rs", "emit_rust.rs", + // PB-1 Item 5: hand-authored `main.rs` shell formatter (not emitted into src/). + "emit_rust_bin_shim.rs", "python_target.rs", "rust_target.rs", "infer.rs", @@ -94,6 +96,8 @@ data stage0: GeneratedCrate = { "lower.rs", "pipeline_authority.rs", "post_emit_verifier.rs", + // PB-1 Item 5: host mirror of `dsl/std/process.dag` `ProcessExit` for emitted shells. + "process_exit.rs", "regen_parse_emit.rs", "workflow_idempotency.rs", "workflow_parallelism.rs" diff --git a/src/v3/compiler/tests/integration/sg0_census_test.rs b/src/v3/compiler/tests/integration/sg0_census_test.rs index de187485022..b4c96415b62 100644 --- a/src/v3/compiler/tests/integration/sg0_census_test.rs +++ b/src/v3/compiler/tests/integration/sg0_census_test.rs @@ -1002,4 +1002,8 @@ fn sg0_stage0_hand_maintained_src_covers_emit_subtree_companions() { list.contains("\"rust_target.rs\""), "hand_maintained_src should exclude emit/rust_target.rs from recursive freshness drift" ); + assert!( + list.contains("\"emit_rust_bin_shim.rs\""), + "hand_maintained_src should exclude emit_rust_bin_shim.rs (PB-1 shell helper) from recursive freshness drift" + ); } From 89ab9ece02d7956f291a9f8904794dfcb20c439f Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 18:32:10 +0000 Subject: [PATCH 07/12] fix(v3-compiler): ProcessExit.ExitFailure.code uses i64 (substrate Int width) Codex #1540: align host mirror with LiteralBits::Int / v3 Int carrier; drop i32 narrowing. Co-authored-by: Cursor --- src/v3/compiler/src/process_exit.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/v3/compiler/src/process_exit.rs b/src/v3/compiler/src/process_exit.rs index 4557dea1465..d4b83262d3e 100644 --- a/src/v3/compiler/src/process_exit.rs +++ b/src/v3/compiler/src/process_exit.rs @@ -10,9 +10,10 @@ // Practice 4 (coproduct checkpoint, `docs/modeling-discipline.md` §P1): 🟢 GREEN — // terminal host mirror of `dsl/std/process.dag` `ProcessExit`; no extra variants -// or semantics beyond that substrate coproduct. +// or semantics beyond that substrate coproduct. `ExitFailure.code` uses `i64` +// — the same host width as `LiteralBits::Int` / substrate `Int` in `dag.rs`. #[derive(Debug, Clone, PartialEq, Eq)] pub enum ProcessExit { ExitSuccess, - ExitFailure { code: i32, reason: String }, + ExitFailure { code: i64, reason: String }, } From c9fe768c9585dea730e6372c9dcf89813d5ea506 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 20:04:53 -0400 Subject: [PATCH 08/12] WIP: quick-heron-61 --- .../ci-ratchet-exemption-audit-2026-05-02.md | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 docs/debt/ci-ratchet-exemption-audit-2026-05-02.md diff --git a/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md new file mode 100644 index 00000000000..7cc1597936c --- /dev/null +++ b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md @@ -0,0 +1,126 @@ +# CI Ratchet Exemption Audit — 2026-05-02 + +**Source:** `scripts/slow-test-exemptions.txt` and `scripts/check-test-timeout.sh` on branch `quick-heron-61` (workspace snapshot 2026-05-02). + +**Authority:** `TESTING.md` § test layers (`feedback_test_timeout_2s`, 2000 ms per `#[test]` wall-clock); `docs/briefs/ci-ratchet-architecture-audit.md` Phase 1 shape; prior pass [ci-ratchet-exemption-audit-2026-04-24.md](ci-ratchet-exemption-audit-2026-04-24.md). + +**R3 dispatch parent:** [r3-debt-paydown-ledger-2026-05-02.md](r3-debt-paydown-ledger-2026-05-02.md) highest-leverage target **#10** (CI slow-test exemption fresh audit). + +## Summary + +| Metric | Value | +|--------|------:| +| Active exemptions (non-comment lines) | **39** | +| `TEST_TIMEOUT_MAX_EXEMPTIONS` default in `scripts/check-test-timeout.sh` | **39** (must match; same PR rule for floor changes) | +| Stale exemptions removed in **this** PR | **0** — no row deleted without a fresh `cargo test … -- -Z unstable-options --report-time` observation proving **≤ 2000 ms** for that test under the ratchet’s parsing rules | +| Per-exempt duration budgets enforced in CI | **Not landed** — still deferred to Phase 2 in the architecture brief (would require parser/script extension; do not invent budgets) | + +## Measurement status (honest scope) + +- **This pass did not re-time every exempt test.** A cold `cargo test -p v3-compiler` single-filter invocation was started for spot-checking; it did not complete within the agent window (integration binary link dominates before libtest prints timings). **All rows below are therefore categorized from the in-file ROADMAP / lane annotations, not from fresh 2026-05-02 wall-clock rows.** +- **Follow-up (mechanical):** Re-use the CI job’s tee’d libtest log (same shape `scripts/check-test-timeout.sh` parses) or run `RUSTC_BOOTSTRAP=1 cargo test -p v3-compiler -- -Z unstable-options --report-time` once on a warmed target, extract per-name `elapsed_ms`, mark each exemption **measured / under budget / still over budget**, then delete only lines with `elapsed_ms ≤ 2000` and lower `TEST_TIMEOUT_MAX_EXEMPTIONS` in the same commit. Optionally add comment-only budget columns after that pass (still requires brief/script agreement before CI enforcement). + +## Delta vs 2026-04-24 audit + +The April audit recorded **43** active exemptions and a floor of **43**. The tree under audit now has **39** exemptions and default floor **39** — net **−4** exemptions since April, already reflected in `check-test-timeout.sh` on `main` before this document. + +**Rows present in 2026-04-24 audit but absent now** (dissolved elsewhere; this audit does not re-claim credit): + +| Exemption token (removed since April audit) | +|---| +| `pb1_bootstrap_full_snapshot_test::generated_full_bootstrap_snapshot_matches_runtime_full_bootstrap` | +| `pb1_bootstrap_full_snapshot_test::generated_full_bootstrap_without_parse_surface_matches_runtime_variant` | +| `pb1_bootstrap_std_snapshot_test::generated_std_bootstrap_snapshot_matches_runtime_std_bootstrap` | +| `sg2_parse_authority_test::parse_generated_module_matches_checked_in_snapshot` | +| `sg3_lower_authority_test::lower_generated_module_matches_regen_snapshot` | + +**New since April audit** + +| Exemption | Note | +|-----------|------| +| `r1c_e_emit_gates_dag_test::r1c_e_emit_gates_suite_passes_through_runner` | Runner/harness edge; comment cites ~2166 ms on PR #1233; paydown: R1C-E shared setup / runner lane. | + +## Category rubric + +| Code | Meaning | +|------|---------| +| **P** | Paydown backlog — slow for known test-shape reasons; shrink via shared setup, cache warming, harness decomposition, or lane work named in the exemption comment. | +| **S** | Structural for now — intentional multi-emit / matrix / corpus work tied to DB-8 determinism lane until a cheaper equivalent exists. | +| **U** | Unknown / unmeasured this pass — owner path is documented in-file; wall-clock **not** re-verified 2026-05-02. | + +## STOP+PING check (`ci-ratchet-architecture-audit.md`) + +- **“Most exemptions structurally necessary”:** **No.** A minority block (~9 lines) is the DB-8 determinism matrix + four-fixture disk suite; the majority are **P** (compile/snapshot/rustc-harness/M0/M1/M2/PB/SG/KF-1 paydown classes). This does **not** indicate the 2s budget is wrong for the whole architecture; it indicates concentrated compile-oracle debt plus one very hot P0 oracle row (`p0_std_render…`, comment still cites ~29.7 s historical observation). +- **Parser / script invasiveness:** **No change** to exemption line format or `check-test-timeout.sh` parsing in this PR. + +## Exemption table (all 39 rows) + +| # | Exemption | Cat | Paydown / routing (from file + brief) | +|---|-----------|-----|--------------------------------------| +| 1 | `bootstrap::tests::malformed_pipeline_stage_attaches_diagnostic` | P | Bootstrap fixture / test-infra caching; not TM-0. | +| 2 | `db8_rust_emit_avoids_time_paths_and_float_hooks_on_program_matrix` | S | DB-8 Lane 3 Stage 3c / determinism matrix; 5× re-emit by design. | +| 3–9 | `emit_matrix_*_{go,python,rust}_is_deterministic` (module + program) | S | Same DB-8 matrix class. | +| 10 | `four_fixture_disk_sources_emit_deterministically` | S | Four-fixture disk corpus determinism. | +| 11 | `four_fixture_regression_test::four_fixture_suite_shares_one_reachability_shape` | P | Shared `compile_to_dag` warming / pressure-corpus paydown. | +| 12 | `common::cached_compile::tests::cached_compile_any_returns_clean_dag_when_key_warmed_by_strict` | P | TESTING.md “Mocks over compile”; real compile remains. | +| 13 | `lane2_stage_2d_symbolic_cost_test::branch_reports_constant_when_both_arms_constant` | P | Shared bootstrap / cache key; parallelism neighbor effect. | +| 14 | `lane2_stage_2d_symbolic_cost_test::cost_dag_compiles_cleanly` | P | Lane 2 Stage 2d authority compile smoke. | +| 15 | `lane2_stage_2d_symbolic_cost_test::cost_generated_module_matches_checked_in_snapshot` | P | Emit + rustfmt snapshot; inner wall-clock may use `budgeted_test!`. | +| 16 | `m0_acceptance::compile_boundary_is_fail_closed` | P | M0 fail-closed path; shared-setup paydown. | +| 17 | `m0_acceptance::post_sweep_port_state_matches_diagnostic_table` | P | Full compile path; test-layer migration. | +| 18 | `m1_substrate_test::referenced_port_walk_real_helper_stack_compiles` | P | SG-3f helper-stack compile; parse/lower cutover. | +| 19–24 | `m1_3_emit_rust_test::rustc_roundtrip_*` (6 tests) | P | SG-7 rustc harness + emitter lane. | +| 25 | `m2_lens_cost_migration_test::complexity_dag_compiles_cleanly` | P | Lens migration; comment cites ~1949 ms edge. | +| 26 | `m2_lens_cost_migration_test::complexity_dag_runs_end_to_end_via_rustc_harness` | P | Lens rustc oracle harness. | +| 27 | `m2_lens_cost_migration_test::complexity_generated_module_matches_checked_in_snapshot` | P | Snapshot + rustfmt paydown. | +| 28 | `m2_lens_idempotency_migration_test::idempotency_emitted_analyze_matches_oracle` | P | Lane 2 Stage 2b oracle. | +| 29 | `m2_lens_provenance_migration_test::lens_provenance_dag_runs_end_to_end_via_rustc_harness` | P | Lens harness paydown. | +| 30 | `m2_lens_unused_parameters_migration_test::unused_parameters_dag_runs_end_to_end_via_rustc_harness` | P | Lens harness paydown. | +| 31 | `m2_lens_unused_parameters_migration_test::unused_parameters_dag_self_analysis_reports_zero_findings` | P | Lens self-analysis paydown. | +| 32 | `pb1_bootstrap_full_snapshot_test::full_bootstrap_extends_std_snapshot` | P | PB-1 snapshot compare; shared compile warming / optional streaming compare. | +| 33 | `r1c_e_emit_gates_dag_test::r1c_e_emit_gates_suite_passes_through_runner` | P | R1C-E runner binary harness; shared-setup work. | +| 34 | `bootstrap::tests::kernel_bool_path_a_attaches_diagnostic_when_boolean_algebra_unresolvable` | P | Bool kernel Path A; bridge dissolution + shared `Dag::new` warming. | +| 35 | `p0_std_render_repeat_string_test::std_render_repeat_string_and_indent_text_match_interpreter` | P | P0 / v2 oracle cold path; **shared v2-oracle bootstrap cache** trigger (`OnceLock` or TM-0 lane). | +| 36 | `sg1_tokenize_authority_test::tokenize_generated_module_matches_checked_in_snapshot` | P | SG-1 tokenize snapshot lane. | +| 37 | `sg2_parse_authority_test::parse_surface_dag_compiles_cleanly_for_regen_parse` | P | SG-2 parse surface compile; note comment still references sibling `parse_generated_module_matches_checked_in_snapshot` (removed from exemptions — keep comment accurate in a future tiny edit if confusing). | +| 38 | `sg2c1_parse_tables_authority_test::parse_tables_generated_module_matches_checked_in_snapshot` | P | SG-2c-1 parse-tables snapshot. | +| 39 | `sg6_hand_authored_census_test::sg6_regen_lens_cli_smoke_regenerates_named_entry_without_drift` | P | SG-6 CLI subprocess smoke. | +| 40 | `thesis_validation_test::kf_1_structural_list_operation_ordering_holds` | P | KF-1 thesis validation decomposition (TESTING.md). | + +**Table row count check:** entries 1–40 above are **39** distinct tests — the numbered list uses one row for the six `m1_3_emit_rust_test::*` lines (rows 19–24 inclusive = 6 tests). Adjusted: rows 1–18 = 18, 19–24 = 6, 25–40 = 16 → 18+6+16 = **40** — error. + +Let me fix: 1-18 = 18 tests. 19-24 is six m1_3 = 6. 25-31 = 7 m2. 32 pb1. 33 r1c. 34 kernel. 35 p0. 36-39 sg1/sg2/sg2c1/sg6 = 4. 40 thesis = 1. + +18+6+7+1+1+1+1+4+1 = 40 — still 40. Actual is 39. + +Recount exemptions: +- bootstrap malformed: 1 +- db8 + 7 emit + four_disk + four_regression = 1+7+1+1 = 10 → total 11 +- cached: 1 → 12 +- lane2 3: → 15 +- m0 2: → 17 +- m1_substrate 1: → 18 +- m1_3: 6 lines → 24 +- m2 cost 3, idem 1, prov 1, unused 2 = 7 → 31 +- pb1 1 → 32 +- r1c 1 → 33 +- kernel_bool 1 → 34 +- p0 1 → 35 +- sg1 1 → 36 +- sg2: only parse_surface in list = 1 → 37 +- sg2c1 1 → 38 +- sg6 1 → 39 +- thesis 1 → 40 + +That's 40 again. wc said 39. + +m1_3 count from grep: lines 53,54,55,56,57,58 = 6 only! + +So 18+6=24, +7 m2 = 31, +1 pb +1 r1c +1 kernel +1 p0 = 35, +1 sg1 +1 sg2 +1 sg2c1 +1 sg6 = 39, +1 thesis = 40. + +Thesis is 40th - but wc is 39. So one of these is wrong. + +List all 39 from sed: + + +Shell \ No newline at end of file From 3bb1a66bf6dd0aedb3f885e451a08e6303c89f21 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sun, 3 May 2026 00:07:16 +0000 Subject: [PATCH 09/12] docs(r3): make CI exemption audit review-ready MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clarify bounded routing/scope vs Phase 1 timing, explicit 5−1 net delta, remove redundant count arithmetic, align ROADMAP with 39-exemption floor. Co-authored-by: Cursor --- ROADMAP.md | 2 +- .../ci-ratchet-exemption-audit-2026-05-02.md | 119 +++++++----------- 2 files changed, 48 insertions(+), 73 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 643d492423e..d9f4bfc504a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -411,7 +411,7 @@ Tracked debt not dispatched with the 2026-04-21 lane wave (Lane 1e P3.0, SG-2c-4 - **Lane E-I — port `SubValueRelation` + inductive fields + cost algebra (M)**: port Tier 1 (structural) + Tier 2 (lattice) + Tier 3 (`CostBound` + master theorem). Requires E-T, E-C. Pre-flight: verify v3 lowers `CostBound`'s self-referential-through-`List` shape. Acceptance: carrier types ported with round-trip tests; no lens row moves on E-I alone because consumer-visible facts still wait for E-P producer/consumer wiring. - **Lane E-P — per-call descent-evidence provenance (M)**: first P-c side-table producer slice has landed as `v3_compiler::dag::per_call_descent_evidence` (recursive self-call / arithmetic descent; unproven edges fail closed; `TransformNode` stays unwidened). v2 stores this class of fact on `ExprCall.descent_evidence` (`src/v2/00_core.dag:199`); v3 derives it off-substrate for now. Requires E-T, E-C, E-I. Remaining acceptance: cost/complexity lenses consume the side table, plus a v2-oracle-vs-v3 cementing test against `expr_call_descent_evidence`; carrier parity for `cost.dag` / `complexity.dag` on the non-method-dispatch slice closes there. - **Lane E-M — `MethodSemantics` port-or-subsume (S–M)**: **closed via M-b structural subsumption.** Transitive facts (`CollectionSizeEffect` / `CostShape` / `AlgebraFieldTemplate`) remain algebra-declaration facts; v3 method-like calls dispatch through `TransformTarget::{Callable, FieldProject, Operator}` and typed declaration/effect metadata. No `src/v3/std/method_semantics.dag`, no Rust mirror, and no `ExprMethodCall` attachment point. -- **CI ratchet architecture — PARTIAL (T-Receipts W1 second bundle)**: surfaced during the 2026-04-21 reflective analysis (`53b3110..ae8825a` range). Commits `37cd6128`, `4898983e`, `f84ed355` hardened the ratchet against CI-log instability, but `2d8396df` widened the exemption list. `scripts/slow-test-exemptions.txt` currently has 43 active non-comment exemptions (83 total file lines in the original brief included comments). **Landed partial:** `scripts/check-test-timeout.sh` now has a meta-ratchet floor of 43 active exemptions, and [docs/debt/ci-ratchet-exemption-audit-2026-04-24.md](docs/debt/ci-ratchet-exemption-audit-2026-04-24.md) classifies every current exemption from the existing annotated reasons. **Still open:** fresh CI-shaped timing audit, stale exemption deletion if any entries measure under 2s, and per-exempt duration budgets once fresh timings exist. Dispatch brief: `docs/briefs/ci-ratchet-architecture-audit.md`. +- **CI ratchet architecture — PARTIAL (T-Receipts W1 second bundle)**: surfaced during the 2026-04-21 reflective analysis (`53b3110..ae8825a` range). Commits `37cd6128`, `4898983e`, `f84ed355` hardened the ratchet against CI-log instability, but `2d8396df` widened the exemption list. `scripts/slow-test-exemptions.txt` currently has **39** active non-comment exemptions; `scripts/check-test-timeout.sh` meta-ratchet default `TEST_TIMEOUT_MAX_EXEMPTIONS` matches that count. **Landed partial:** classification audit [docs/debt/ci-ratchet-exemption-audit-2026-04-24.md](docs/debt/ci-ratchet-exemption-audit-2026-04-24.md) (2026-04-24 baseline) plus follow-up routing audit [docs/debt/ci-ratchet-exemption-audit-2026-05-02.md](docs/debt/ci-ratchet-exemption-audit-2026-05-02.md) (bounded scope — not a completed Phase 1 per-test timing pass). **Still open:** fresh CI-shaped per-test timing audit, stale exemption deletion if any entries measure under 2s, and per-exempt duration budgets once fresh timings exist. Dispatch brief: `docs/briefs/ci-ratchet-architecture-audit.md`. - **`IntegrationRsScan` / `integration_rs_active_line_contains` in `src/v3/compiler/tests/integration/common/mod.rs` is a latent source of byte-constant workarounds in downstream tests** (T-Receipts, surfaced by T-Demo #686). The scanner is "deliberately narrow" and does not model Rust character literals, so any test author touching a file in its scan path cannot write `b'\\'` / `b'"'` directly and must substitute numeric byte constants (e.g., `92` / `34`) instead. Historical evidence: #686's text-slicing helper introduced `DAG_ESCAPE_BYTE` / `DAG_QUOTE_BYTE` constants for exactly this reason; #705 deleted the helper when `TestRunner::run_suite` obsoleted it, and the constants went with it — so there is **no surviving in-tree instance of the workaround today**. The scanner constraint itself remains, which means the next test author landing in the scan path will recreate the pattern. Dissolution: either widen the scanner to model Rust char literals, or replace its scan with a structural reader that doesn't need to exclude char-literal syntax. Small scope; cosmetic for now, but the constraint is a workaround attractor. Owner: unassigned; P2 Boundary Discipline / T-Receipts bundle. - **Stale-receipt sweep in `docs/briefs/` — PARTIAL (T-Receipts W1).** The cited `DeclarationLookup` cleanup brief now carries a historical-receipt banner stating the lane is closed by SG-4b-1-fix and that `DeclarationLookup` / `find_declaration` are gone from `src/v3/lenses/variant_payload.dag`; its stale INVARIANTS refs were also updated to stable anchors. Remaining broad `docs/briefs/` sweep stays open for later post-wave stale claims. **Include:** `docs/design-pure-bootstrap.md`'s hand-maintained count ("78 hand-maintained .rs files") was stale vs. the SG-0 census — **CLOSED in this R1 PR**: all five occurrences (lines 7, 49, 82, 105, 242 of the design doc) now point at the live census, reframed as deltas against the illustrative 78-file baseline, or scoped to the non-test + TESTING residual framing. No frozen absolute count remains. - **Compiler–`std/` consolidation program — specific migrations**: end-state defined in [docs/thesis/compiler-std-consolidation.md](docs/thesis/compiler-std-consolidation.md). Each of the migrations below is a standalone lane; together they collapse the compiler-specific type surface toward the positive definition (pipeline + regen + lens-specific return-type carriers + accessor). **Ratchet:** count of `type` declarations in `src/v3/compiler/*.dag` AND `src/v3/lenses/*.dag` that are NOT in the positive-def set AND NOT exempted → 0. Positive-def: pipeline/regen types + lens-API return carriers (`Origin`, `UnusedParameter`, `VariantPayloadShapeLookup` 3-variant, `TemplateArgumentBinding` semantic carrier, etc.). Exempted: `parse_tables.dag` (7 types, pending SG-2c-proper per-row classification). In-ratchet: **workaround-shaped infer-helper coproducts with named dissolution triggers (`TemplateArgumentsMatch`, `TemplateArgumentCursor`, `NormalizedInstantiationArgs`)** — Lookup-pattern carriers on lens surfaces import `v3.std.lookup::Lookup` (`complexity`, `cost`, `infer_helpers`). Primary count: 3. See thesis doc table for per-file disposition. diff --git a/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md index 7cc1597936c..152c66cc0f6 100644 --- a/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md +++ b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md @@ -1,6 +1,6 @@ # CI Ratchet Exemption Audit — 2026-05-02 -**Source:** `scripts/slow-test-exemptions.txt` and `scripts/check-test-timeout.sh` on branch `quick-heron-61` (workspace snapshot 2026-05-02). +**Source:** `scripts/slow-test-exemptions.txt` and `scripts/check-test-timeout.sh` on branch `work/binshim-emitter-slice` (workspace snapshot 2026-05-02). **Authority:** `TESTING.md` § test layers (`feedback_test_timeout_2s`, 2000 ms per `#[test]` wall-clock); `docs/briefs/ci-ratchet-architecture-audit.md` Phase 1 shape; prior pass [ci-ratchet-exemption-audit-2026-04-24.md](ci-ratchet-exemption-audit-2026-04-24.md). @@ -15,6 +15,8 @@ | Stale exemptions removed in **this** PR | **0** — no row deleted without a fresh `cargo test … -- -Z unstable-options --report-time` observation proving **≤ 2000 ms** for that test under the ratchet’s parsing rules | | Per-exempt duration budgets enforced in CI | **Not landed** — still deferred to Phase 2 in the architecture brief (would require parser/script extension; do not invent budgets) | +**Scope (read this first):** This PR is a **bounded routing / scope audit** over the current exemption list and `check-test-timeout.sh` floor — categories, owners, STOP+PING, and explicit follow-ups. It is **not** a completed **Phase 1** pass from `docs/briefs/ci-ratchet-architecture-audit.md` (that phase expects per-test wall-clock re-measurement and stale-row deletion where proven `≤ 2000 ms`). No stale exemptions were removed here because no row was re-proven under the 2s authority in this pass. + ## Measurement status (honest scope) - **This pass did not re-time every exempt test.** A cold `cargo test -p v3-compiler` single-filter invocation was started for spot-checking; it did not complete within the agent window (integration binary link dominates before libtest prints timings). **All rows below are therefore categorized from the in-file ROADMAP / lane annotations, not from fresh 2026-05-02 wall-clock rows.** @@ -22,9 +24,9 @@ ## Delta vs 2026-04-24 audit -The April audit recorded **43** active exemptions and a floor of **43**. The tree under audit now has **39** exemptions and default floor **39** — net **−4** exemptions since April, already reflected in `check-test-timeout.sh` on `main` before this document. +The April audit recorded **43** active exemptions and a floor of **43**. The tree under audit now has **39** exemptions and default floor **39**. **Arithmetic is intentional:** five tokens listed below were **removed** from the exemption list on `main` between 2026-04-24 and this snapshot, and **one** new token was **added** (`r1c_e_emit_gates_dag_test::…`). Net change: **5 − 1 = −4** rows (43 → 39); that net is already reflected in `check-test-timeout.sh` before this document landed. -**Rows present in 2026-04-24 audit but absent now** (dissolved elsewhere; this audit does not re-claim credit): +**Rows present in 2026-04-24 audit but absent now** (retired from the exemption list elsewhere; this audit does not re-claim credit): | Exemption token (removed since April audit) | |---| @@ -48,79 +50,52 @@ The April audit recorded **43** active exemptions and a floor of **43**. The tre | **S** | Structural for now — intentional multi-emit / matrix / corpus work tied to DB-8 determinism lane until a cheaper equivalent exists. | | **U** | Unknown / unmeasured this pass — owner path is documented in-file; wall-clock **not** re-verified 2026-05-02. | +## Category totals (from annotations; all **U** for wall-clock) + +| Category | Count | Notes | +|----------|------:|-------| +| **P** | 31 | Includes M0/M1/M2/PB/R1C-E/P0/SG/KF-1/bootstrap paydown classes. | +| **S** | 8 | `db8_rust_emit_avoids_time_paths_and_float_hooks_on_program_matrix` + six `emit_matrix_*_is_deterministic` + `four_fixture_disk_sources_emit_deterministically`. | + ## STOP+PING check (`ci-ratchet-architecture-audit.md`) -- **“Most exemptions structurally necessary”:** **No.** A minority block (~9 lines) is the DB-8 determinism matrix + four-fixture disk suite; the majority are **P** (compile/snapshot/rustc-harness/M0/M1/M2/PB/SG/KF-1 paydown classes). This does **not** indicate the 2s budget is wrong for the whole architecture; it indicates concentrated compile-oracle debt plus one very hot P0 oracle row (`p0_std_render…`, comment still cites ~29.7 s historical observation). +- **“Most exemptions structurally necessary”:** **No.** Eight lines are the DB-8 determinism matrix + four-fixture **disk** determinism row; the remainder are **P** (compile/snapshot/rustc-harness/M0/M1/M2/PB/SG/KF-1 paydown classes). This does **not** indicate the 2s budget is wrong for the whole architecture; it indicates concentrated compile-oracle debt plus one very hot P0 oracle row (`p0_std_render…`, comment still cites ~29.7 s historical observation). - **Parser / script invasiveness:** **No change** to exemption line format or `check-test-timeout.sh` parsing in this PR. -## Exemption table (all 39 rows) +## Exemption table (39 tests; compact ranges) -| # | Exemption | Cat | Paydown / routing (from file + brief) | -|---|-----------|-----|--------------------------------------| +| # | Exemption(s) | Cat | Paydown / routing | +|---|----------------|-----|-------------------| | 1 | `bootstrap::tests::malformed_pipeline_stage_attaches_diagnostic` | P | Bootstrap fixture / test-infra caching; not TM-0. | | 2 | `db8_rust_emit_avoids_time_paths_and_float_hooks_on_program_matrix` | S | DB-8 Lane 3 Stage 3c / determinism matrix; 5× re-emit by design. | -| 3–9 | `emit_matrix_*_{go,python,rust}_is_deterministic` (module + program) | S | Same DB-8 matrix class. | -| 10 | `four_fixture_disk_sources_emit_deterministically` | S | Four-fixture disk corpus determinism. | -| 11 | `four_fixture_regression_test::four_fixture_suite_shares_one_reachability_shape` | P | Shared `compile_to_dag` warming / pressure-corpus paydown. | -| 12 | `common::cached_compile::tests::cached_compile_any_returns_clean_dag_when_key_warmed_by_strict` | P | TESTING.md “Mocks over compile”; real compile remains. | -| 13 | `lane2_stage_2d_symbolic_cost_test::branch_reports_constant_when_both_arms_constant` | P | Shared bootstrap / cache key; parallelism neighbor effect. | -| 14 | `lane2_stage_2d_symbolic_cost_test::cost_dag_compiles_cleanly` | P | Lane 2 Stage 2d authority compile smoke. | -| 15 | `lane2_stage_2d_symbolic_cost_test::cost_generated_module_matches_checked_in_snapshot` | P | Emit + rustfmt snapshot; inner wall-clock may use `budgeted_test!`. | -| 16 | `m0_acceptance::compile_boundary_is_fail_closed` | P | M0 fail-closed path; shared-setup paydown. | -| 17 | `m0_acceptance::post_sweep_port_state_matches_diagnostic_table` | P | Full compile path; test-layer migration. | -| 18 | `m1_substrate_test::referenced_port_walk_real_helper_stack_compiles` | P | SG-3f helper-stack compile; parse/lower cutover. | -| 19–24 | `m1_3_emit_rust_test::rustc_roundtrip_*` (6 tests) | P | SG-7 rustc harness + emitter lane. | -| 25 | `m2_lens_cost_migration_test::complexity_dag_compiles_cleanly` | P | Lens migration; comment cites ~1949 ms edge. | -| 26 | `m2_lens_cost_migration_test::complexity_dag_runs_end_to_end_via_rustc_harness` | P | Lens rustc oracle harness. | -| 27 | `m2_lens_cost_migration_test::complexity_generated_module_matches_checked_in_snapshot` | P | Snapshot + rustfmt paydown. | -| 28 | `m2_lens_idempotency_migration_test::idempotency_emitted_analyze_matches_oracle` | P | Lane 2 Stage 2b oracle. | -| 29 | `m2_lens_provenance_migration_test::lens_provenance_dag_runs_end_to_end_via_rustc_harness` | P | Lens harness paydown. | -| 30 | `m2_lens_unused_parameters_migration_test::unused_parameters_dag_runs_end_to_end_via_rustc_harness` | P | Lens harness paydown. | -| 31 | `m2_lens_unused_parameters_migration_test::unused_parameters_dag_self_analysis_reports_zero_findings` | P | Lens self-analysis paydown. | -| 32 | `pb1_bootstrap_full_snapshot_test::full_bootstrap_extends_std_snapshot` | P | PB-1 snapshot compare; shared compile warming / optional streaming compare. | -| 33 | `r1c_e_emit_gates_dag_test::r1c_e_emit_gates_suite_passes_through_runner` | P | R1C-E runner binary harness; shared-setup work. | -| 34 | `bootstrap::tests::kernel_bool_path_a_attaches_diagnostic_when_boolean_algebra_unresolvable` | P | Bool kernel Path A; bridge dissolution + shared `Dag::new` warming. | -| 35 | `p0_std_render_repeat_string_test::std_render_repeat_string_and_indent_text_match_interpreter` | P | P0 / v2 oracle cold path; **shared v2-oracle bootstrap cache** trigger (`OnceLock` or TM-0 lane). | -| 36 | `sg1_tokenize_authority_test::tokenize_generated_module_matches_checked_in_snapshot` | P | SG-1 tokenize snapshot lane. | -| 37 | `sg2_parse_authority_test::parse_surface_dag_compiles_cleanly_for_regen_parse` | P | SG-2 parse surface compile; note comment still references sibling `parse_generated_module_matches_checked_in_snapshot` (removed from exemptions — keep comment accurate in a future tiny edit if confusing). | -| 38 | `sg2c1_parse_tables_authority_test::parse_tables_generated_module_matches_checked_in_snapshot` | P | SG-2c-1 parse-tables snapshot. | -| 39 | `sg6_hand_authored_census_test::sg6_regen_lens_cli_smoke_regenerates_named_entry_without_drift` | P | SG-6 CLI subprocess smoke. | -| 40 | `thesis_validation_test::kf_1_structural_list_operation_ordering_holds` | P | KF-1 thesis validation decomposition (TESTING.md). | - -**Table row count check:** entries 1–40 above are **39** distinct tests — the numbered list uses one row for the six `m1_3_emit_rust_test::*` lines (rows 19–24 inclusive = 6 tests). Adjusted: rows 1–18 = 18, 19–24 = 6, 25–40 = 16 → 18+6+16 = **40** — error. - -Let me fix: 1-18 = 18 tests. 19-24 is six m1_3 = 6. 25-31 = 7 m2. 32 pb1. 33 r1c. 34 kernel. 35 p0. 36-39 sg1/sg2/sg2c1/sg6 = 4. 40 thesis = 1. - -18+6+7+1+1+1+1+4+1 = 40 — still 40. Actual is 39. - -Recount exemptions: -- bootstrap malformed: 1 -- db8 + 7 emit + four_disk + four_regression = 1+7+1+1 = 10 → total 11 -- cached: 1 → 12 -- lane2 3: → 15 -- m0 2: → 17 -- m1_substrate 1: → 18 -- m1_3: 6 lines → 24 -- m2 cost 3, idem 1, prov 1, unused 2 = 7 → 31 -- pb1 1 → 32 -- r1c 1 → 33 -- kernel_bool 1 → 34 -- p0 1 → 35 -- sg1 1 → 36 -- sg2: only parse_surface in list = 1 → 37 -- sg2c1 1 → 38 -- sg6 1 → 39 -- thesis 1 → 40 - -That's 40 again. wc said 39. - -m1_3 count from grep: lines 53,54,55,56,57,58 = 6 only! - -So 18+6=24, +7 m2 = 31, +1 pb +1 r1c +1 kernel +1 p0 = 35, +1 sg1 +1 sg2 +1 sg2c1 +1 sg6 = 39, +1 thesis = 40. - -Thesis is 40th - but wc is 39. So one of these is wrong. - -List all 39 from sed: - - -Shell \ No newline at end of file +| 3–8 | Six `emit_matrix_{module,program}_{go,python,rust}_is_deterministic` | S | DB-8 module/program re-emit matrix. | +| 9 | `four_fixture_disk_sources_emit_deterministically` | S | Four-fixture disk corpus determinism. | +| 10 | `four_fixture_regression_test::four_fixture_suite_shares_one_reachability_shape` | P | Shared `compile_to_dag` warming / pressure-corpus paydown. | +| 11 | `common::cached_compile::tests::cached_compile_any_returns_clean_dag_when_key_warmed_by_strict` | P | TESTING.md “Mocks over compile”; real compile remains. | +| 12–14 | `lane2_stage_2d_symbolic_cost_test::{branch_reports_constant_when_both_arms_constant,cost_dag_compiles_cleanly,cost_generated_module_matches_checked_in_snapshot}` | P | Lane 2 Stage 2d; shared bootstrap / snapshot + rustfmt paydown. | +| 15–16 | `m0_acceptance::{compile_boundary_is_fail_closed,post_sweep_port_state_matches_diagnostic_table}` | P | M0 acceptance compile-boundary shared setup. | +| 17 | `m1_substrate_test::referenced_port_walk_real_helper_stack_compiles` | P | SG-3f helper-stack compile; parse/lower cutover. | +| 18–23 | Six `m1_3_emit_rust_test::rustc_roundtrip_*` / `rustc_roundtrip_generic_list_fold_prints_one` | P | SG-7 rustc harness + emitter lane. | +| 24–26 | `m2_lens_cost_migration_test::{complexity_dag_compiles_cleanly,complexity_dag_runs_end_to_end_via_rustc_harness,complexity_generated_module_matches_checked_in_snapshot}` | P | Lens migration harness paydown. | +| 27 | `m2_lens_idempotency_migration_test::idempotency_emitted_analyze_matches_oracle` | P | Lane 2 Stage 2b oracle. | +| 28 | `m2_lens_provenance_migration_test::lens_provenance_dag_runs_end_to_end_via_rustc_harness` | P | Lens harness paydown. | +| 29–30 | `m2_lens_unused_parameters_migration_test::{unused_parameters_dag_runs_end_to_end_via_rustc_harness,unused_parameters_dag_self_analysis_reports_zero_findings}` | P | Lens harness paydown. | +| 31 | `pb1_bootstrap_full_snapshot_test::full_bootstrap_extends_std_snapshot` | P | PB-1 snapshot compare; shared compile warming. | +| 32 | `r1c_e_emit_gates_dag_test::r1c_e_emit_gates_suite_passes_through_runner` | P | R1C-E runner harness; shared-setup work. | +| 33 | `bootstrap::tests::kernel_bool_path_a_attaches_diagnostic_when_boolean_algebra_unresolvable` | P | Bool kernel Path A; bridge dissolution + shared `Dag::new` warming. | +| 34 | `p0_std_render_repeat_string_test::std_render_repeat_string_and_indent_text_match_interpreter` | P | P0 / v2 oracle; shared v2-oracle bootstrap cache (`OnceLock` or TM-0 lane). | +| 35 | `sg1_tokenize_authority_test::tokenize_generated_module_matches_checked_in_snapshot` | P | SG-1 tokenize snapshot lane. | +| 36 | `sg2_parse_authority_test::parse_surface_dag_compiles_cleanly_for_regen_parse` | P | SG-2 parse surface compile; exemption comment still names removed sibling test — tidy comment in a follow-up if confusing. | +| 37 | `sg2c1_parse_tables_authority_test::parse_tables_generated_module_matches_checked_in_snapshot` | P | SG-2c-1 parse-tables snapshot. | +| 38 | `sg6_hand_authored_census_test::sg6_regen_lens_cli_smoke_regenerates_named_entry_without_drift` | P | SG-6 CLI subprocess smoke. | +| 39 | `thesis_validation_test::kf_1_structural_list_operation_ordering_holds` | P | KF-1 thesis validation decomposition (TESTING.md). | + +The compact table’s ranges expand to **39** test tokens — the same count as non-comment lines in `scripts/slow-test-exemptions.txt` and the `TEST_TIMEOUT_MAX_EXEMPTIONS` default. + +## R3 per-PR debt receipt (this PR) + +- **Disposition:** **Debt found + routed** (bounded **scope / routing** audit — not a completed Phase 1 per-test timing audit). +- **Debt addressed (partial):** ROADMAP bullet *CI ratchet architecture — PARTIAL* — fresh audit artifact documents the current **39**-exemption floor and routes remaining work (measured timing pass, optional per-exempt budgets). +- **Debt found (routed):** No exemptions proven stale under the 2s authority in this pass; mechanical re-timing from CI or warmed local `cargo test` logs remains the next executable slice. +- **Dissolved debt rows:** None — no line removed from `scripts/slow-test-exemptions.txt` without a ≤2000 ms proof. +- **Documentation:** Stale ROADMAP counts **43**/**43** → **39**/**39** aligned with `check-test-timeout.sh` (same PR as this audit). From 3cafbf1091bc8537a3843e57f799ea2bd6e019a2 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sat, 2 May 2026 20:25:53 -0400 Subject: [PATCH 10/12] fix(ci): refresh parse_corpus_manifest for induction.dag SG-2 parse corpus ratchet: `handwritten_parse_snapshot_matches_manifest` failed because `src/v3/std/induction.dag` pretty-Debug surface hash drifted; regenerate via `refresh_handwritten_parse_snapshot_manifest`. Co-authored-by: Cursor --- src/v3/compiler/tests/integration/parse_corpus_manifest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v3/compiler/tests/integration/parse_corpus_manifest.txt b/src/v3/compiler/tests/integration/parse_corpus_manifest.txt index c3b876bc165..34a3a52bb88 100644 --- a/src/v3/compiler/tests/integration/parse_corpus_manifest.txt +++ b/src/v3/compiler/tests/integration/parse_corpus_manifest.txt @@ -40,7 +40,7 @@ src/v3/std/effects.dag 53 97984 1acdbeaa68acfd2e src/v3/std/emit_model.dag 43 77647 4b063e9a5ddc50a1 src/v3/std/extdeps_bootstrap_fixtures.dag 4 14463 909ca7a1c1705e89 src/v3/std/go_method_template_contracts.dag 5 110898 7eb5c9f1296f4a45 -src/v3/std/induction.dag 56 88794 546f74c63c189c50 +src/v3/std/induction.dag 56 88794 e405e1549cf2fe08 src/v3/std/integer_diagnostic_order.dag 6 8124 5d7b31594a5b3d5c src/v3/std/lens.dag 6 9852 28d5539a5b28716e src/v3/std/list.dag 19 40269 8c648d4a4fd05c21 From b07a61796cc9ce4fd43071a473b57f69e4a8f4de Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Sun, 3 May 2026 00:49:17 +0000 Subject: [PATCH 11/12] test: refresh bootstrap snapshots --- src/v3/compiler/src/bootstrap_generated.rs | 312 +++++++++--------- ...otstrap_generated_without_parse_surface.rs | 312 +++++++++--------- 2 files changed, 312 insertions(+), 312 deletions(-) diff --git a/src/v3/compiler/src/bootstrap_generated.rs b/src/v3/compiler/src/bootstrap_generated.rs index e647ea9b2a1..1a9fb343b6e 100644 --- a/src/v3/compiler/src/bootstrap_generated.rs +++ b/src/v3/compiler/src/bootstrap_generated.rs @@ -24900,8 +24900,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(99), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 12177, - 12677, + 12138, + 12638, )), }, type_params: vec![], @@ -24912,7 +24912,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 12115, 12677), + span: SourceSpan::new("src/v3/std/induction.dag", 12076, 12638), }); declarations.push(Declaration { id: DeclarationId(944), @@ -24922,8 +24922,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(941), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 13200, - 14612, + 13229, + 14641, )), }, type_params: vec![], @@ -24934,7 +24934,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 13120, 14612), + span: SourceSpan::new("src/v3/std/induction.dag", 13149, 14641), }); declarations.push(Declaration { id: DeclarationId(945), @@ -24944,8 +24944,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(941), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 14944, - 16247, + 14973, + 16276, )), }, type_params: vec![], @@ -24956,7 +24956,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 14864, 16247), + span: SourceSpan::new("src/v3/std/induction.dag", 14893, 16276), }); declarations.push(Declaration { id: DeclarationId(946), @@ -24966,8 +24966,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(941), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 17356, - 17478, + 17419, + 17541, )), }, type_params: vec![], @@ -24978,7 +24978,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 17268, 17478), + span: SourceSpan::new("src/v3/std/induction.dag", 17331, 17541), }); declarations.push(Declaration { id: DeclarationId(947), @@ -24988,8 +24988,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(941), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 18334, - 19680, + 18397, + 19743, )), }, type_params: vec![], @@ -25000,7 +25000,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 18226, 19680), + span: SourceSpan::new("src/v3/std/induction.dag", 18289, 19743), }); declarations.push(Declaration { id: DeclarationId(948), @@ -25010,8 +25010,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 20455, - 21251, + 20518, + 21314, )), }, type_params: vec![], @@ -25022,7 +25022,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 20382, 21251), + span: SourceSpan::new("src/v3/std/induction.dag", 20445, 21314), }); declarations.push(Declaration { id: DeclarationId(949), @@ -25032,8 +25032,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1954), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 21843, - 22748, + 21906, + 22811, )), }, type_params: vec![], @@ -25044,7 +25044,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 21764, 22748), + span: SourceSpan::new("src/v3/std/induction.dag", 21827, 22811), }); declarations.push(Declaration { id: DeclarationId(950), @@ -25077,7 +25077,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 23991, 24246), + span: SourceSpan::new("src/v3/std/induction.dag", 24054, 24309), }); declarations.push(Declaration { id: DeclarationId(951), @@ -25087,8 +25087,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(950), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 24295, - 24334, + 24358, + 24397, )), }, type_params: vec![], @@ -25099,7 +25099,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24248, 24334), + span: SourceSpan::new("src/v3/std/induction.dag", 24311, 24397), }); declarations.push(Declaration { id: DeclarationId(952), @@ -25124,7 +25124,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24846, 24963), + span: SourceSpan::new("src/v3/std/induction.dag", 24909, 25026), }); declarations.push(Declaration { id: DeclarationId(953), @@ -25169,7 +25169,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26593, 27353), + span: SourceSpan::new("src/v3/std/induction.dag", 26656, 27416), }); declarations.push(Declaration { id: DeclarationId(954), @@ -25179,8 +25179,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 27764, - 27870, + 27827, + 27933, )), }, type_params: vec![], @@ -25191,7 +25191,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27714, 27870), + span: SourceSpan::new("src/v3/std/induction.dag", 27777, 27933), }); declarations.push(Declaration { id: DeclarationId(955), @@ -25201,8 +25201,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(99), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 28194, - 28447, + 28257, + 28510, )), }, type_params: vec![], @@ -25213,7 +25213,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 28145, 28447), + span: SourceSpan::new("src/v3/std/induction.dag", 28208, 28510), }); declarations.push(Declaration { id: DeclarationId(956), @@ -25223,8 +25223,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 28481, - 28498, + 28544, + 28561, )), }, type_params: vec![], @@ -25235,7 +25235,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 28449, 28498), + span: SourceSpan::new("src/v3/std/induction.dag", 28512, 28561), }); declarations.push(Declaration { id: DeclarationId(957), @@ -25245,8 +25245,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 28542, - 28626, + 28605, + 28689, )), }, type_params: vec![], @@ -25257,7 +25257,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 28499, 28626), + span: SourceSpan::new("src/v3/std/induction.dag", 28562, 28689), }); declarations.push(Declaration { id: DeclarationId(958), @@ -25267,8 +25267,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 28681, - 29080, + 28744, + 29143, )), }, type_params: vec![], @@ -25279,7 +25279,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 28627, 29080), + span: SourceSpan::new("src/v3/std/induction.dag", 28690, 29143), }); declarations.push(Declaration { id: DeclarationId(959), @@ -25289,8 +25289,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29130, - 29404, + 29193, + 29467, )), }, type_params: vec![], @@ -25301,7 +25301,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29081, 29404), + span: SourceSpan::new("src/v3/std/induction.dag", 29144, 29467), }); declarations.push(Declaration { id: DeclarationId(960), @@ -25311,8 +25311,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29446, - 29479, + 29509, + 29542, )), }, type_params: vec![], @@ -25323,7 +25323,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29405, 29479), + span: SourceSpan::new("src/v3/std/induction.dag", 29468, 29542), }); declarations.push(Declaration { id: DeclarationId(961), @@ -25333,8 +25333,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29521, - 29554, + 29584, + 29617, )), }, type_params: vec![], @@ -25345,7 +25345,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29480, 29554), + span: SourceSpan::new("src/v3/std/induction.dag", 29543, 29617), }); declarations.push(Declaration { id: DeclarationId(962), @@ -25355,8 +25355,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29595, - 29645, + 29658, + 29708, )), }, type_params: vec![], @@ -25367,7 +25367,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29555, 29645), + span: SourceSpan::new("src/v3/std/induction.dag", 29618, 29708), }); declarations.push(Declaration { id: DeclarationId(963), @@ -25377,8 +25377,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29689, - 29807, + 29752, + 29870, )), }, type_params: vec![], @@ -25389,7 +25389,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29647, 29807), + span: SourceSpan::new("src/v3/std/induction.dag", 29710, 29870), }); declarations.push(Declaration { id: DeclarationId(964), @@ -25399,8 +25399,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 29877, - 30053, + 29940, + 30116, )), }, type_params: vec![], @@ -25411,7 +25411,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 29809, 30053), + span: SourceSpan::new("src/v3/std/induction.dag", 29872, 30116), }); declarations.push(Declaration { id: DeclarationId(965), @@ -25444,7 +25444,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 31210, 31301), + span: SourceSpan::new("src/v3/std/induction.dag", 31273, 31364), }); declarations.push(Declaration { id: DeclarationId(966), @@ -25454,8 +25454,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1956), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 31892, - 32143, + 31955, + 32206, )), }, type_params: vec![], @@ -25466,7 +25466,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 31849, 32143), + span: SourceSpan::new("src/v3/std/induction.dag", 31912, 32206), }); declarations.push(Declaration { id: DeclarationId(967), @@ -25476,8 +25476,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1957), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 32188, - 32977, + 32251, + 33040, )), }, type_params: vec![], @@ -25488,7 +25488,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 32145, 32977), + span: SourceSpan::new("src/v3/std/induction.dag", 32208, 33040), }); declarations.push(Declaration { id: DeclarationId(968), @@ -25498,8 +25498,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1958), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 33437, - 33560, + 33500, + 33623, )), }, type_params: vec![], @@ -25510,7 +25510,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 33393, 33560), + span: SourceSpan::new("src/v3/std/induction.dag", 33456, 33623), }); declarations.push(Declaration { id: DeclarationId(969), @@ -25520,8 +25520,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1959), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 33912, - 34957, + 33975, + 35020, )), }, type_params: vec![], @@ -25532,7 +25532,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 33864, 34957), + span: SourceSpan::new("src/v3/std/induction.dag", 33927, 35020), }); declarations.push(Declaration { id: DeclarationId(970), @@ -25542,8 +25542,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1960), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 35175, - 35290, + 35238, + 35353, )), }, type_params: vec![], @@ -25554,7 +25554,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 35129, 35290), + span: SourceSpan::new("src/v3/std/induction.dag", 35192, 35353), }); declarations.push(Declaration { id: DeclarationId(971), @@ -25569,8 +25569,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(1961), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 35447, - 35809, + 35510, + 35872, )), }, type_params: vec![], @@ -25581,7 +25581,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 35376, 35809), + span: SourceSpan::new("src/v3/std/induction.dag", 35439, 35872), }); declarations.push(Declaration { id: DeclarationId(972), @@ -25591,8 +25591,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 35864, - 37901, + 35927, + 37964, )), }, type_params: vec![], @@ -25603,7 +25603,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 35811, 37901), + span: SourceSpan::new("src/v3/std/induction.dag", 35874, 37964), }); declarations.push(Declaration { id: DeclarationId(973), @@ -25613,8 +25613,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 38254, - 38412, + 38317, + 38475, )), }, type_params: vec![], @@ -25625,7 +25625,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 38184, 38412), + span: SourceSpan::new("src/v3/std/induction.dag", 38247, 38475), }); declarations.push(Declaration { id: DeclarationId(974), @@ -25640,8 +25640,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 38911, - 39935, + 38974, + 39998, )), }, type_params: vec![], @@ -25652,7 +25652,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 38810, 39935), + span: SourceSpan::new("src/v3/std/induction.dag", 38873, 39998), }); declarations.push(Declaration { id: DeclarationId(975), @@ -25662,8 +25662,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 40268, - 40325, + 40331, + 40388, )), }, type_params: vec![], @@ -25674,7 +25674,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 40229, 40325), + span: SourceSpan::new("src/v3/std/induction.dag", 40292, 40388), }); declarations.push(Declaration { id: DeclarationId(976), @@ -25684,8 +25684,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 40368, - 40426, + 40431, + 40489, )), }, type_params: vec![], @@ -25696,7 +25696,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 40327, 40426), + span: SourceSpan::new("src/v3/std/induction.dag", 40390, 40489), }); declarations.push(Declaration { id: DeclarationId(977), @@ -25706,8 +25706,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 40526, - 40581, + 40589, + 40644, )), }, type_params: vec![], @@ -25718,7 +25718,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 40490, 40581), + span: SourceSpan::new("src/v3/std/induction.dag", 40553, 40644), }); declarations.push(Declaration { id: DeclarationId(978), @@ -25728,8 +25728,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 40778, - 40893, + 40841, + 40956, )), }, type_params: vec![], @@ -25740,7 +25740,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 40740, 40893), + span: SourceSpan::new("src/v3/std/induction.dag", 40803, 40956), }); declarations.push(Declaration { id: DeclarationId(979), @@ -25750,8 +25750,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 40973, - 41088, + 41036, + 41151, )), }, type_params: vec![], @@ -25762,7 +25762,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 40939, 41088), + span: SourceSpan::new("src/v3/std/induction.dag", 41002, 41151), }); declarations.push(Declaration { id: DeclarationId(980), @@ -25772,8 +25772,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 41255, - 41374, + 41318, + 41437, )), }, type_params: vec![], @@ -25784,7 +25784,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 41221, 41374), + span: SourceSpan::new("src/v3/std/induction.dag", 41284, 41437), }); declarations.push(Declaration { id: DeclarationId(981), @@ -25794,8 +25794,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 41539, - 41653, + 41602, + 41716, )), }, type_params: vec![], @@ -25806,7 +25806,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 41506, 41653), + span: SourceSpan::new("src/v3/std/induction.dag", 41569, 41716), }); declarations.push(Declaration { id: DeclarationId(982), @@ -25816,8 +25816,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 41770, - 41795, + 41833, + 41858, )), }, type_params: vec![], @@ -25828,7 +25828,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 41731, 41795), + span: SourceSpan::new("src/v3/std/induction.dag", 41794, 41858), }); declarations.push(Declaration { id: DeclarationId(983), @@ -25838,8 +25838,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 41830, - 41855, + 41893, + 41918, )), }, type_params: vec![], @@ -25850,7 +25850,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 41796, 41855), + span: SourceSpan::new("src/v3/std/induction.dag", 41859, 41918), }); declarations.push(Declaration { id: DeclarationId(984), @@ -25860,8 +25860,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 41937, - 41968, + 42000, + 42031, )), }, type_params: vec![], @@ -25872,7 +25872,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 41898, 41968), + span: SourceSpan::new("src/v3/std/induction.dag", 41961, 42031), }); declarations.push(Declaration { id: DeclarationId(985), @@ -25882,8 +25882,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 42204, - 42255, + 42267, + 42318, )), }, type_params: vec![], @@ -25894,7 +25894,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 42172, 42255), + span: SourceSpan::new("src/v3/std/induction.dag", 42235, 42318), }); declarations.push(Declaration { id: DeclarationId(986), @@ -25904,8 +25904,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 42346, - 42628, + 42409, + 42691, )), }, type_params: vec![], @@ -25916,7 +25916,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 42313, 42628), + span: SourceSpan::new("src/v3/std/induction.dag", 42376, 42691), }); declarations.push(Declaration { id: DeclarationId(987), @@ -25926,8 +25926,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 42731, - 42891, + 42794, + 42954, )), }, type_params: vec![], @@ -25938,7 +25938,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 42694, 42891), + span: SourceSpan::new("src/v3/std/induction.dag", 42757, 42954), }); declarations.push(Declaration { id: DeclarationId(988), @@ -25948,8 +25948,8 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { output: DeclarationId(953), body: ArrowBody::Unparsed(SourceSpan::new( "src/v3/std/induction.dag", - 42998, - 43036, + 43061, + 43099, )), }, type_params: vec![], @@ -25960,7 +25960,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 42959, 43036), + span: SourceSpan::new("src/v3/std/induction.dag", 43022, 43099), }); declarations.push(Declaration { id: DeclarationId(989), @@ -57546,7 +57546,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 20442, 20454), + span: SourceSpan::new("src/v3/std/induction.dag", 20505, 20517), }); declarations.push(Declaration { id: DeclarationId(1954), @@ -57563,7 +57563,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 21827, 21842), + span: SourceSpan::new("src/v3/std/induction.dag", 21890, 21905), }); declarations.push(Declaration { id: DeclarationId(1955), @@ -57583,7 +57583,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27734, 27749), + span: SourceSpan::new("src/v3/std/induction.dag", 27797, 27812), }); declarations.push(Declaration { id: DeclarationId(1956), @@ -57600,7 +57600,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 31887, 31891), + span: SourceSpan::new("src/v3/std/induction.dag", 31950, 31954), }); declarations.push(Declaration { id: DeclarationId(1957), @@ -57617,7 +57617,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 32183, 32187), + span: SourceSpan::new("src/v3/std/induction.dag", 32246, 32250), }); declarations.push(Declaration { id: DeclarationId(1958), @@ -57634,7 +57634,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 33432, 33436), + span: SourceSpan::new("src/v3/std/induction.dag", 33495, 33499), }); declarations.push(Declaration { id: DeclarationId(1959), @@ -57651,7 +57651,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 33907, 33911), + span: SourceSpan::new("src/v3/std/induction.dag", 33970, 33974), }); declarations.push(Declaration { id: DeclarationId(1960), @@ -57668,7 +57668,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 35170, 35174), + span: SourceSpan::new("src/v3/std/induction.dag", 35233, 35237), }); declarations.push(Declaration { id: DeclarationId(1961), @@ -57685,7 +57685,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 35442, 35446), + span: SourceSpan::new("src/v3/std/induction.dag", 35505, 35509), }); declarations.push(Declaration { id: DeclarationId(1962), @@ -57866,7 +57866,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24019, 24033), + span: SourceSpan::new("src/v3/std/induction.dag", 24082, 24096), }); declarations.push(Declaration { id: DeclarationId(1973), @@ -57885,7 +57885,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24038, 24085), + span: SourceSpan::new("src/v3/std/induction.dag", 24101, 24148), }); declarations.push(Declaration { id: DeclarationId(1974), @@ -57910,7 +57910,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24090, 24167), + span: SourceSpan::new("src/v3/std/induction.dag", 24153, 24230), }); declarations.push(Declaration { id: DeclarationId(1975), @@ -57935,7 +57935,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24172, 24246), + span: SourceSpan::new("src/v3/std/induction.dag", 24235, 24309), }); declarations.push(Declaration { id: DeclarationId(1976), @@ -57960,7 +57960,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24866, 24922), + span: SourceSpan::new("src/v3/std/induction.dag", 24929, 24985), }); declarations.push(Declaration { id: DeclarationId(1977), @@ -57979,7 +57979,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 24938, 24963), + span: SourceSpan::new("src/v3/std/induction.dag", 25001, 25026), }); declarations.push(Declaration { id: DeclarationId(1978), @@ -57993,7 +57993,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26612, 26625), + span: SourceSpan::new("src/v3/std/induction.dag", 26675, 26688), }); declarations.push(Declaration { id: DeclarationId(1979), @@ -58012,7 +58012,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26669, 26701), + span: SourceSpan::new("src/v3/std/induction.dag", 26732, 26764), }); declarations.push(Declaration { id: DeclarationId(1980), @@ -58032,7 +58032,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26764, 26780), + span: SourceSpan::new("src/v3/std/induction.dag", 26827, 26843), }); declarations.push(Declaration { id: DeclarationId(1981), @@ -58051,7 +58051,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26740, 26782), + span: SourceSpan::new("src/v3/std/induction.dag", 26803, 26845), }); declarations.push(Declaration { id: DeclarationId(1982), @@ -58071,7 +58071,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26844, 26860), + span: SourceSpan::new("src/v3/std/induction.dag", 26907, 26923), }); declarations.push(Declaration { id: DeclarationId(1983), @@ -58091,7 +58091,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26839, 26861), + span: SourceSpan::new("src/v3/std/induction.dag", 26902, 26924), }); declarations.push(Declaration { id: DeclarationId(1984), @@ -58110,7 +58110,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 26811, 26863), + span: SourceSpan::new("src/v3/std/induction.dag", 26874, 26926), }); declarations.push(Declaration { id: DeclarationId(1985), @@ -58130,7 +58130,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27161, 27176), + span: SourceSpan::new("src/v3/std/induction.dag", 27224, 27239), }); declarations.push(Declaration { id: DeclarationId(1986), @@ -58149,7 +58149,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27143, 27178), + span: SourceSpan::new("src/v3/std/induction.dag", 27206, 27241), }); declarations.push(Declaration { id: DeclarationId(1987), @@ -58163,7 +58163,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27261, 27273), + span: SourceSpan::new("src/v3/std/induction.dag", 27324, 27336), }); declarations.push(Declaration { id: DeclarationId(1988), @@ -58177,7 +58177,7 @@ fn bootstrapped_fixture_dag_declarations() -> Vec { value_body: None, refinement: None, nominal_opacity: None, - span: SourceSpan::new("src/v3/std/induction.dag", 27343, 27353), + span: SourceSpan::new("src/v3/std/induction.dag", 27406, 27416), }); declarations.push(Declaration { id: DeclarationId(1989), diff --git a/src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs b/src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs index b3c4c1764c7..daaa788b392 100644 --- a/src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs +++ b/src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs @@ -24900,8 +24900,8 @@ fn bootstrapped_fixture_without_parse_surface_dag_declarations() -> Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Vec Date: Sat, 2 May 2026 22:11:45 -0400 Subject: [PATCH 12/12] docs(debt): age CI exemption audit source past branch-only labels Optional review: point provenance at `git log` on this file instead of naming the PR branch, which does not survive merge to `main`. Co-authored-by: Cursor --- docs/debt/ci-ratchet-exemption-audit-2026-05-02.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md index 152c66cc0f6..baeb53980f2 100644 --- a/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md +++ b/docs/debt/ci-ratchet-exemption-audit-2026-05-02.md @@ -1,6 +1,6 @@ # CI Ratchet Exemption Audit — 2026-05-02 -**Source:** `scripts/slow-test-exemptions.txt` and `scripts/check-test-timeout.sh` on branch `work/binshim-emitter-slice` (workspace snapshot 2026-05-02). +**Source:** `scripts/slow-test-exemptions.txt` and `scripts/check-test-timeout.sh` (workspace snapshot **2026-05-02**). For provenance after merge to `main`, use the commit that last touched this file (`git log -1 --format=%H -- docs/debt/ci-ratchet-exemption-audit-2026-05-02.md`); PR branch names are dispatch metadata only. **Authority:** `TESTING.md` § test layers (`feedback_test_timeout_2s`, 2000 ms per `#[test]` wall-clock); `docs/briefs/ci-ratchet-architecture-audit.md` Phase 1 shape; prior pass [ci-ratchet-exemption-audit-2026-04-24.md](ci-ratchet-exemption-audit-2026-04-24.md).