From 904a588efe6bcd69db8335f9a4518194916fa8e9 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 2 Jun 2026 04:19:58 +0000 Subject: [PATCH 1/3] WIP: CI Manager Waves 2-4 + four-compile collapse closeout --- ...es-2-4-four-compile-closeout-2026-06-02.md | 39 ++++++++++++++ .../v4_workflow_ci_runner_dag_smoke_test.rs | 51 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md diff --git a/docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md b/docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md new file mode 100644 index 00000000000..ca0e60c1117 --- /dev/null +++ b/docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md @@ -0,0 +1,39 @@ +# CI Manager Waves 2-4 + Four-Compile Collapse Closeout + +> **Status:** CLOSEOUT RECEIPT. +> **Work item:** `node://adhoc-f70d7842-933`. +> **Scope:** CI Manager Waves 2-4 plus #4091 §1.2 four-compile collapse. +> **Gate:** same-path P5(b) receipt in +> `src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs`. + +## Disposition + +The closeout keeps the existing `src/v4/workflow/ci.dag` authority intact and records the landed +receipt surface that ties the CI-manager waves to the shared-closure collapse: + +- **Wave 2:** `CiUpsertStep` rows cover the full in-scope `ci_pipeline_step_ids_shadow` + universe via `ci_upsert_steps`, `ci_upsert_steps_full_in_scope_step_ids`, and + `ci_upsert_steps_slice_bijection_ok`. +- **Wave 3:** `CiSelectionReceipt` carries the shadow TestClaim selection partition through + `CiTestClaimSelection`, `TestgenSlotSelection`, `ci_wave3_shadow_fixture_fail_closed_receipt`, + and `ci_wave3_shadow_fixture_receipt_ok`. The live GitHub Actions emit remains deferred until + the modeled whole-program diff/eval entry lands. +- **Wave 4:** active floor-skip wiring stays modeled, not live-wired, through + `Active { skip_evidence: CiActiveFloorSkipEvidence }` and `ci_floor_held`. No parallel + `floor_skip` field or GitHub Actions-only skip authority is introduced. +- **Four-compile collapse:** M1 rust emit, phase1 rung gate, lens-CI, and v4 T-15 self-host + consume `v2_compile_src_v4` through `UpstreamUpsert` edges; T-38 corpus eval consumes the M1 + rust emit receipt rather than owning a host-side compile. + +## Non-Goals + +- No new compiler stage, substrate type, or target semantics. +- No new GitHub Actions authority outside the existing workflow bridge. +- No promotion of Wave 3 shadow selection to live CI until the whole-program DAG diff input exists. + +## Receipt + +`v4_workflow_ci_manager_waves_2_4_and_four_compile_closeout_receipt` checks this document against +the live CI DAG and paired workflow smoke harness. The receipt is intentionally same-path: it adds +no new hand-Rust test surface beyond the existing T-PB-B bridge harness, and it dissolves with that +harness when generated workflow/TestClaim execution covers these facts directly. diff --git a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs index 04f20ce17e0..2bfc0067b56 100644 --- a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs +++ b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs @@ -56,6 +56,11 @@ const SHARED_CLOSURE_WORKSHEET: &str = include_str!( ); const SHARED_CLOSURE_WORKSHEET_PATH: &str = "docs/planning/v4-ci-rust-dag-shared-closure-worksheet-2026-06-01.md"; +const CI_MANAGER_CLOSEOUT: &str = include_str!( + "../../../../../docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md" +); +const CI_MANAGER_CLOSEOUT_PATH: &str = + "docs/planning/ci-manager-waves-2-4-four-compile-closeout-2026-06-02.md"; const M1_RUST_EMIT_PROBE_SCRIPT: &str = include_str!("../../../../../.github/ci-floor/v4-m1-rust-emit-probe.sh"); const M1_BINDING_TEST_FILTER: &str = @@ -1055,6 +1060,52 @@ fn v4_workflow_ci_four_compile_collapse_jobs_consume_v2_compile_src_v4_closure() ); } +#[test] +fn v4_workflow_ci_manager_waves_2_4_and_four_compile_closeout_receipt() { + assert!( + CI_MANAGER_CLOSEOUT.contains("node://adhoc-f70d7842-933") + && CI_MANAGER_CLOSEOUT.contains("CI Manager Waves 2-4") + && CI_MANAGER_CLOSEOUT.contains("#4091 §1.2 four-compile collapse"), + "{CI_MANAGER_CLOSEOUT_PATH}: closeout must bind the assigned dashboard node and collapse scope" + ); + assert!( + CI_DAG.contains("data ci_upsert_steps_slice_bijection_ok") + && CI_DAG.contains("ci_upsert_steps_full_in_scope_step_ids") + && CI_DAG.contains("ci_upsert_steps_slice_bijection_for_pipeline"), + "{CI_DAG_PATH}: Wave 2 closeout must keep CiUpsertStep rows bijected with the pipeline shadow universe" + ); + assert!( + CI_DAG.contains("type CiTestClaimSelection") + && CI_DAG.contains("type TestgenSlotSelection") + && CI_DAG.contains("data ci_wave3_shadow_fixture_receipt_ok"), + "{CI_DAG_PATH}: Wave 3 closeout must preserve the CiSelectionReceipt TestClaim/testgen partition" + ); + assert!( + CI_DAG.contains("Active { skip_evidence: CiActiveFloorSkipEvidence }") + && CI_DAG.contains("fn ci_floor_held") + && !CI_DAG.contains("floor_skip:"), + "{CI_DAG_PATH}: Wave 4 closeout must keep active floor skip modeled through CiSelectionMode evidence" + ); + for upstream_edge in [ + "data ci_upsert_v4_t15_self_host_fixed_point_execution_inputs: List = [\n ci_upsert_file_set_input(segment: \"src/v4/**\"),\n ci_upsert_upstream_job_input(job: v2_compile_src_v4)", + "data ci_upsert_m1_rust_emit_probe_execution_inputs: List", + "data ci_upsert_phase1_nat_semiring_rung_gate_execution_inputs: List", + "data ci_upsert_lens_ci_registry_execution_inputs: List = list_snoc_item", + "data ci_upsert_testclaim_corpus_eval_upstream_inputs: List = [\n ci_upsert_upstream_job_input(job: m1_rust_emit_probe_execution)", + ] { + assert!( + CI_DAG.contains(upstream_edge), + "{CI_DAG_PATH}: closeout must preserve upstream compile-consumption edge `{upstream_edge}`" + ); + } + assert!( + CI_MANAGER_CLOSEOUT.contains("No new compiler stage, substrate type, or target semantics") + && CI_MANAGER_CLOSEOUT.contains("same-path P5(b) receipt") + && CI_MANAGER_CLOSEOUT.contains("dissolves with that harness"), + "{CI_MANAGER_CLOSEOUT_PATH}: closeout must state non-goals and dissolution path" + ); +} + #[test] fn v4_workflow_ci_testclaim_corpus_eval_modeled_and_bound_to_ci_yml() { let _module = parse_module(CI_DAG, CI_DAG_PATH); From 9867c5e1f59878d9a1c0ece9733e8ae0f4ad44c9 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 2 Jun 2026 04:21:33 +0000 Subject: [PATCH 2/3] Fix CI closeout receipt assertion --- .../tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs index 2bfc0067b56..c463a01acd7 100644 --- a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs +++ b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs @@ -1101,7 +1101,8 @@ fn v4_workflow_ci_manager_waves_2_4_and_four_compile_closeout_receipt() { assert!( CI_MANAGER_CLOSEOUT.contains("No new compiler stage, substrate type, or target semantics") && CI_MANAGER_CLOSEOUT.contains("same-path P5(b) receipt") - && CI_MANAGER_CLOSEOUT.contains("dissolves with that harness"), + && CI_MANAGER_CLOSEOUT.contains("dissolves with") + && CI_MANAGER_CLOSEOUT.contains("harness when generated workflow/TestClaim execution covers these facts directly"), "{CI_MANAGER_CLOSEOUT_PATH}: closeout must state non-goals and dissolution path" ); } From 6877da9992448ee5a4d0bee85a1e5bba2403c863 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 2 Jun 2026 04:26:29 +0000 Subject: [PATCH 3/3] Format CI closeout receipt check --- .../tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs index c463a01acd7..c4892c57d79 100644 --- a/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs +++ b/src/v3/compiler/tests/integration/v4_workflow_ci_runner_dag_smoke_test.rs @@ -1102,7 +1102,9 @@ fn v4_workflow_ci_manager_waves_2_4_and_four_compile_closeout_receipt() { CI_MANAGER_CLOSEOUT.contains("No new compiler stage, substrate type, or target semantics") && CI_MANAGER_CLOSEOUT.contains("same-path P5(b) receipt") && CI_MANAGER_CLOSEOUT.contains("dissolves with") - && CI_MANAGER_CLOSEOUT.contains("harness when generated workflow/TestClaim execution covers these facts directly"), + && CI_MANAGER_CLOSEOUT.contains( + "harness when generated workflow/TestClaim execution covers these facts directly" + ), "{CI_MANAGER_CLOSEOUT_PATH}: closeout must state non-goals and dissolution path" ); }