From c32020f8b322df8809dd307cb8f1b4f0e60d9a9f Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Wed, 15 Jul 2026 03:48:47 +0000 Subject: [PATCH 1/4] WIP: Sweep the 2026-07-12 machine-stamped SubstrateInputsOnly batch (#6479) f --- src/v1/stage0/src/cli_run.rs | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/v1/stage0/src/cli_run.rs b/src/v1/stage0/src/cli_run.rs index 3f5d3c7f12c..74c0cd237ac 100644 --- a/src/v1/stage0/src/cli_run.rs +++ b/src/v1/stage0/src/cli_run.rs @@ -9788,6 +9788,54 @@ new file mode 100644 ); } + #[test] + #[ignore = "manual census: G1 carrier-closure sweep for lying SubstrateInputsOnly stamps"] + fn lying_substrate_inputs_only_stamp_census() { + use std::collections::HashSet; + + let ws = workspace_root(); + std::env::set_current_dir(&ws).expect("chdir workspace"); + let roots = vec![ + ws.join("src/v2").to_string_lossy().into_owned(), + ws.join("dag").to_string_lossy().into_owned(), + ]; + let facts = super::build_module_graph_facts_live(&roots); + let mut lying: Vec<(String, String)> = Vec::new(); + for (rel, content) in super::corpus_dag_files() { + if !super::is_test_dag(&rel) { + continue; + } + let Ok(reads_live_tree) = super::parse_entry_live_tree_disposition(&rel, &content) + else { + continue; + }; + if reads_live_tree { + continue; + } + let mut closure_modules = HashSet::new(); + super::collect_import_closure_module_names_from_facts( + &rel, + &facts, + &mut closure_modules, + ); + for carrier in super::LIVE_READ_CARRIER_HOME_MODULES_V0 { + if closure_modules.contains(*carrier) { + lying.push((rel.clone(), (*carrier).to_string())); + break; + } + } + } + lying.sort(); + eprintln!("lying SubstrateInputsOnly stamps (G1 carrier closure): {}", lying.len()); + for (entry, carrier) in &lying { + eprintln!(" {entry} -> {carrier}"); + } + assert!( + lying.is_empty(), + "lying SubstrateInputsOnly stamps must be re-stamped ReadsLiveTree before merge" + ); + } + #[test] fn node_precise_same_file_referenced_vs_orphan_discriminates() { let ws = workspace_root(); From 59de31446efce2f96780feb276c2320de319ec81 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Wed, 15 Jul 2026 03:59:23 +0000 Subject: [PATCH 2/4] WIP: Sweep the 2026-07-12 machine-stamped SubstrateInputsOnly batch (#6479) f --- dag/test/claim/ci_compile_jobs_witness_test.dag | 4 ++-- dag/test/claim/commit_workflow_witness_test.dag | 4 ++-- dag/test/claim/dag_compile_clean_scope_witness_test.dag | 4 ++-- .../claim/dag_compile_clean_shard_totality_witness_test.dag | 4 ++-- dag/test/claim/generated_artifact_drift_test.dag | 4 ++-- dag/test/claim/githooks_pre_push_emit_test.dag | 4 ++-- dag/test/claim/lever_a_local_receipt_witness_test.dag | 4 ++-- dag/test/claim/rust_gates_ci_witness_test.dag | 4 ++-- dag/test/claim/rust_stage0_gates_witness_test.dag | 4 ++-- src/v1/stage0/src/cli_run.rs | 1 - src/v2/lens/disposition_redundancy_test.dag | 4 ++-- .../accumulator_copy_roster_gate_lean_bash_test.dag | 4 ++-- .../complexity/accumulator_copy_roster_gate_std_test.dag | 4 ++-- .../complexity/accumulator_copy_roster_gate_swift_test.dag | 4 ++-- .../claim/complexity/accumulator_copy_roster_gate_test.dag | 4 ++-- src/v2/test/claim/execution/self_host_fixed_point_test.dag | 4 ++-- .../interface_summary/interface_summary_firewall_test.dag | 4 ++-- src/v2/test/claim/live_read_classification_test.dag | 4 ++-- src/v2/test/claim/long/decl_index_enumeration_test.dag | 4 ++-- src/v2/test/claim/long/no_dual_representation_test_test.dag | 4 ++-- src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag | 4 ++-- .../test/claim/self_host_realized_comparison_floor_test.dag | 4 ++-- 22 files changed, 42 insertions(+), 43 deletions(-) diff --git a/dag/test/claim/ci_compile_jobs_witness_test.dag b/dag/test/claim/ci_compile_jobs_witness_test.dag index 0e631adc2e3..7a724f82a01 100644 --- a/dag/test/claim/ci_compile_jobs_witness_test.dag +++ b/dag/test/claim/ci_compile_jobs_witness_test.dag @@ -13,9 +13,9 @@ import gunbc.ci_compile_jobs { } import extdeps.cargo_build { cargo_nextest_build_jobs_flag, cargo_build_jobs_flag } import tools.rust_gates_ci { rust_gate_build_jobs_args } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn join_space(xs: List) -> String { fold(xs, init: "", f: (acc, p) => if acc == "" { p } else { concat(concat(acc, " "), p) }) diff --git a/dag/test/claim/commit_workflow_witness_test.dag b/dag/test/claim/commit_workflow_witness_test.dag index 476b1e88623..4168e182d67 100644 --- a/dag/test/claim/commit_workflow_witness_test.dag +++ b/dag/test/claim/commit_workflow_witness_test.dag @@ -24,9 +24,9 @@ import gunbc.local_tidy_spec { local_tidy_checks } import gunbc.generated_artifact { CiYamlArtifact, GithooksPrePushArtifact, artifact_path } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn witness_ci_spec_projects_from_roster() -> Bool { gate_lists_eq(left: gunbc_ci_floor_gates, right: commit_workflow_ci_floor_gates) diff --git a/dag/test/claim/dag_compile_clean_scope_witness_test.dag b/dag/test/claim/dag_compile_clean_scope_witness_test.dag index 307249db675..f6fc6ff4983 100644 --- a/dag/test/claim/dag_compile_clean_scope_witness_test.dag +++ b/dag/test/claim/dag_compile_clean_scope_witness_test.dag @@ -12,9 +12,9 @@ import tools.dag_compile_clean_scope { witness_entry_root_is_first_witness_layer_root, witness_pool_roots_match_witness_layer_roots } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn dag_compile_clean_scope_empty_touched_skips_holds() -> Bool { witness_empty_touched_skips() diff --git a/dag/test/claim/dag_compile_clean_shard_totality_witness_test.dag b/dag/test/claim/dag_compile_clean_shard_totality_witness_test.dag index bbb7c42e7f1..6ac66e0a01d 100644 --- a/dag/test/claim/dag_compile_clean_shard_totality_witness_test.dag +++ b/dag/test/claim/dag_compile_clean_shard_totality_witness_test.dag @@ -13,9 +13,9 @@ import tools.dag_compile_clean_shard_totality { witness_totality_fails_closed_on_glob_failure, witness_totality_green_when_glob_matches_roster } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn compile_clean_shard_roster_is_well_formed() -> Bool { compile_clean_shard_roster_nonempty() diff --git a/dag/test/claim/generated_artifact_drift_test.dag b/dag/test/claim/generated_artifact_drift_test.dag index d593f88f3b9..bb618ee7f39 100644 --- a/dag/test/claim/generated_artifact_drift_test.dag +++ b/dag/test/claim/generated_artifact_drift_test.dag @@ -13,9 +13,9 @@ import gunbc.os_install { srv3_autoinstall_spec, fleet_autoinstall_specs, srv3_i import gunbc.gitignore_emit { path_is_ignored } import gunbc.plan_registry { all_plans } import gunbc.plans.idea_machine { idea_machine_plan } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data perturb: String = "\n# gunbc-generated-artifact-drift-receipt-perturb" diff --git a/dag/test/claim/githooks_pre_push_emit_test.dag b/dag/test/claim/githooks_pre_push_emit_test.dag index a6d635b1785..79dc38ae91c 100644 --- a/dag/test/claim/githooks_pre_push_emit_test.dag +++ b/dag/test/claim/githooks_pre_push_emit_test.dag @@ -5,9 +5,9 @@ import gunbc.local_tidy_spec { doc_reachability_trigger_globs, generated_artifact_trigger_globs, cargo_fmt_trigger_globs } import extdeps.git.hooks { pre_push_zero_sha, pre_push_stdin_read_vars } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn has(s: String, p: String) -> Bool { string_contains(s: s, pattern: p) diff --git a/dag/test/claim/lever_a_local_receipt_witness_test.dag b/dag/test/claim/lever_a_local_receipt_witness_test.dag index 1e47fa47e49..859d7f5268c 100644 --- a/dag/test/claim/lever_a_local_receipt_witness_test.dag +++ b/dag/test/claim/lever_a_local_receipt_witness_test.dag @@ -1,9 +1,9 @@ module test.claim.lever_a_local_receipt_witness import tools.dag_compile_clean_scope { lever_a_local_receipts_hold } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn lever_a_local_receipts_hold() -> Bool { lever_a_local_receipts_hold() diff --git a/dag/test/claim/rust_gates_ci_witness_test.dag b/dag/test/claim/rust_gates_ci_witness_test.dag index 7efc9db317e..3a5f9a651d3 100644 --- a/dag/test/claim/rust_gates_ci_witness_test.dag +++ b/dag/test/claim/rust_gates_ci_witness_test.dag @@ -1,9 +1,9 @@ module test.claim.rust_gates_ci_witness import tools.rust_gates_ci { gate_diag, rust_gate_reason } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn w_diag_names_check() -> Bool { string_contains( diff --git a/dag/test/claim/rust_stage0_gates_witness_test.dag b/dag/test/claim/rust_stage0_gates_witness_test.dag index f1e01082350..cc03371786b 100644 --- a/dag/test/claim/rust_stage0_gates_witness_test.dag +++ b/dag/test/claim/rust_stage0_gates_witness_test.dag @@ -8,9 +8,9 @@ import tools.rust_stage0_gates { witness_empty_paths_gates_when_substrate_ready, witness_declared_unit_unaffected_by_other_dag_when_substrate_ready } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn w_rs_selects() -> Bool { path_is_rust_monolith(path: "src/v1/stage0/src/lib.rs") } fn w_cargo_toml_selects() -> Bool { path_is_rust_monolith(path: "src/v1/stage0/Cargo.toml") } diff --git a/src/v1/stage0/src/cli_run.rs b/src/v1/stage0/src/cli_run.rs index 74c0cd237ac..67bb0ce6519 100644 --- a/src/v1/stage0/src/cli_run.rs +++ b/src/v1/stage0/src/cli_run.rs @@ -9789,7 +9789,6 @@ new file mode 100644 } #[test] - #[ignore = "manual census: G1 carrier-closure sweep for lying SubstrateInputsOnly stamps"] fn lying_substrate_inputs_only_stamp_census() { use std::collections::HashSet; diff --git a/src/v2/lens/disposition_redundancy_test.dag b/src/v2/lens/disposition_redundancy_test.dag index cb9a23bb634..72fd126f799 100644 --- a/src/v2/lens/disposition_redundancy_test.dag +++ b/src/v2/lens/disposition_redundancy_test.dag @@ -38,9 +38,9 @@ import tools.rust_stage0_gates { import v2.std.collection { List } import v2.std.algebra { length } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data redundancy_present_successor_locator: DeclarationRef = DeclarationRef { module_path: "std.disposition", diff --git a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_lean_bash_test.dag b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_lean_bash_test.dag index 2aaf8dc4add..055874730d3 100644 --- a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_lean_bash_test.dag +++ b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_lean_bash_test.dag @@ -2,9 +2,9 @@ module v2.test.claim.complexity.accumulator_copy_roster_gate_lean_bash import v2.lens.complexity_accumulator_copy.roster_gate { file_gate } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn roster_lean_zero_suspects_within_ratchet() -> Bool { file_gate(path: "src/v2/extdeps/languages/lean.dag", refusal_ceiling: 1) diff --git a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_std_test.dag b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_std_test.dag index 2e3281691ab..f1b8ed10239 100644 --- a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_std_test.dag +++ b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_std_test.dag @@ -3,9 +3,9 @@ module v2.test.claim.complexity.accumulator_copy_roster_gate_std import v2.lens.complexity_accumulator_copy.roster_gate { file_gate } import v2.std.logic { Bool } import v2.std.text { String } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data std_tranche_offline_roster_note: String = "Enrollment plan (operator ruling 2026-07-10, echoed eager-ram-612 #6452 guidance): CI-enrolled = cheap discriminating units only — dag/test/claim behavioral keystones selected by affected-set discovery when dag/std/ changes (markdown_inline_render_keystone_holds, config_record_emit_keystone_holds / serialize_fields_doc, reconcile_share_collapse_witnesses for realization.dag, std_graph_build_adjacency_views_evaluates for graph.dag). OFFLINE = this roster gate module (file_gate serial resolve per path; discovery exclusion row claim/complexity/accumulator_copy_roster_gate lands via #6452 — NOT duplicated on this branch; NOT in witness_discovery_scan_dirs; NOT in commit_gate_roster). Wet recipe on v2.lens.complexity_accumulator_copy.roster_gate.offline_roster_gate_claim_batch_recipe. List-carrier concat(acc,[x]) folds rewritten to prepend+reverse in markdown.dag, markdown_markup.dag, serialize.dag, realization.dag, materialization_ladder.dag; change.dag keyed_collect_keys + keyed_invert_patch map rewrite. keyed_merge_row_lists left concat(acc,[row]) init:left (order-breaking for prepend+reverse). graph.dag neighbor append unchanged. String-carrier debt (7 sites): http_path.dag (2), markup.dag (2), render.dag (1), render_repeat_string_bootstrap.dag (1), width.dag (1). Roster gates only change.dag (ceiling 13) and render_repeat_string_bootstrap.dag (ceiling 0); other cleaned std files are behavioral-witness gated (substrate concat triggers combiner_unregistered_carrier_reaches refusals)." diff --git a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_swift_test.dag b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_swift_test.dag index a5ca38a50aa..0d875d8a758 100644 --- a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_swift_test.dag +++ b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_swift_test.dag @@ -2,9 +2,9 @@ module v2.test.claim.complexity.accumulator_copy_roster_gate_swift import v2.lens.complexity_accumulator_copy.roster_gate { file_gate } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn roster_swift_zero_suspects_within_ratchet() -> Bool { file_gate(path: "src/v2/extdeps/languages/swift.dag", refusal_ceiling: 4) diff --git a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_test.dag b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_test.dag index b5e07d43469..92db01d8597 100644 --- a/src/v2/test/claim/complexity/accumulator_copy_roster_gate_test.dag +++ b/src/v2/test/claim/complexity/accumulator_copy_roster_gate_test.dag @@ -6,9 +6,9 @@ import v2.lens.complexity_accumulator_copy.roster_gate { } import v2.std.logic { Bool } import v2.std.text { String } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn roster_machine_code_zero_suspects_within_ratchet() -> Bool { file_gate(path: "src/v2/extdeps/languages/machine_code.dag", refusal_ceiling: 0) diff --git a/src/v2/test/claim/execution/self_host_fixed_point_test.dag b/src/v2/test/claim/execution/self_host_fixed_point_test.dag index a89b1b98975..b2b74a0f400 100644 --- a/src/v2/test/claim/execution/self_host_fixed_point_test.dag +++ b/src/v2/test/claim/execution/self_host_fixed_point_test.dag @@ -26,9 +26,9 @@ import v2.compiler.self_host { } import v2.std.diagnostic { Accepted, Rejected } import v2.std.witness { Holds, Violates } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data self_host_fixture_fixpoint_source: String = "self_host_fixpoint_byte_identical_v1" diff --git a/src/v2/test/claim/interface_summary/interface_summary_firewall_test.dag b/src/v2/test/claim/interface_summary/interface_summary_firewall_test.dag index 7ca10c117d0..0470281903b 100644 --- a/src/v2/test/claim/interface_summary/interface_summary_firewall_test.dag +++ b/src/v2/test/claim/interface_summary/interface_summary_firewall_test.dag @@ -12,9 +12,9 @@ import std.algebra { Empty } import v2.std.collection { Present, Absent, optional_absent } import v2.std.decl_index { export_signature_facts_host_scaffold_dissolution_trigger } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data firewall_fixture_roots: List = ["src/v2/test/fixture/interface_summary"] diff --git a/src/v2/test/claim/live_read_classification_test.dag b/src/v2/test/claim/live_read_classification_test.dag index f26185910e7..52641e25d6b 100644 --- a/src/v2/test/claim/live_read_classification_test.dag +++ b/src/v2/test/claim/live_read_classification_test.dag @@ -31,7 +31,7 @@ import v2.std.fn_index { fn_arrow_skeleton_g2_marshal_host_scaffold_dissolution_trigger } import std.disposition { Scaffold, Terminal } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } import v2.std.logic { Bool } import v2.std.text { String } import v2.test.claim.complexity.accumulator_copy_roster_gate { live_tree_disposition } @@ -267,7 +267,7 @@ test fn g2_implies_reads_live_tree_for_roster_gate() -> Bool { carrier_homes: live_read_carrier_homes_v0 ) ) - && live_tree_disposition == SubstrateInputsOnly + && live_tree_disposition == ReadsLiveTree } test fn g2_unknown_path_pattern_fail_closed_touched() -> Bool { diff --git a/src/v2/test/claim/long/decl_index_enumeration_test.dag b/src/v2/test/claim/long/decl_index_enumeration_test.dag index 43a8bb5862f..8abe9dcfa8f 100644 --- a/src/v2/test/claim/long/decl_index_enumeration_test.dag +++ b/src/v2/test/claim/long/decl_index_enumeration_test.dag @@ -11,9 +11,9 @@ import v2.std.decl_index { logical_qualified_name_from_module } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn decl_facts_nonempty_over_witness_roots() -> Bool { return decl_facts_count(pool_roots: witness_layer_roots) > 500 diff --git a/src/v2/test/claim/long/no_dual_representation_test_test.dag b/src/v2/test/claim/long/no_dual_representation_test_test.dag index fa9811e35bb..8d8fc49d979 100644 --- a/src/v2/test/claim/long/no_dual_representation_test_test.dag +++ b/src/v2/test/claim/long/no_dual_representation_test_test.dag @@ -5,9 +5,9 @@ import v2.lens.no_dual_representation_test { no_dual_representation_test_live_file_count, } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn no_dual_representation_test_has_no_violations() -> Bool { return no_dual_representation_test_clean_holds() diff --git a/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag b/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag index dfc0c693942..50d835e8a16 100644 --- a/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag +++ b/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag @@ -3,9 +3,9 @@ module v2.test.long.symbol_index_scaling_receipt import v2.lens.complexity_accumulator_copy.roster_gate { file_gate, file_suspect_count } import v2.std.logic { Bool } import v2.std.text { String } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data symbol_index_fill_invocation_frequency_note: String = "INVOCATION FREQUENCY (traced 2026-07-13): namespace_for_subject is the sole callsite of symbol_index_fill_module_roots (03_name_resolve.dag:534). namespace_for_subject is called only from resolve_with_admission_policy (:569). That is called only from resolve_with_admission / resolve_with_admission_grounded, each forwarding default_name_resolution_policy(). Upstream: assemble_program_from_ingest / assemble_program_from_module_roots (ONE resolve per ingest assembly over all validated_roots), compile_ingest_with_admission / compile_source_root_ingest_with_admission (ONE resolve per compile entry), plus isolated claim tests. No per-module loop re-fills all roots: cost is O(N_total) per top-level resolve, NOT O(M·N_total). v1 CI floor (whole_tree_resolved_ctx) does NOT exercise this v2 fill path yet." diff --git a/src/v2/test/claim/self_host_realized_comparison_floor_test.dag b/src/v2/test/claim/self_host_realized_comparison_floor_test.dag index dbe5ee11b27..516a60fdc8d 100644 --- a/src/v2/test/claim/self_host_realized_comparison_floor_test.dag +++ b/src/v2/test/claim/self_host_realized_comparison_floor_test.dag @@ -15,9 +15,9 @@ import v2.std.node { SyntheticOccurrence } import v2.std.witness { Holds, Violates } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn floor_seed_leaf() -> Node { Node { From 0548d7b39053ae7283b7ee5d3a367bae95d5fd42 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Wed, 15 Jul 2026 04:26:01 +0000 Subject: [PATCH 3/4] WIP: Sweep the 2026-07-12 machine-stamped SubstrateInputsOnly batch (#6479) f --- src/v1/stage0/src/cli_run.rs | 37 ++++++++++++++++++- .../self_host_candidate_generation_test.dag | 4 +- ...ompiler_frontier_per_module_probe_test.dag | 4 +- .../compiler_frontier_probe_entry_test.dag | 4 +- .../self_host_module_emit_derisk_test.dag | 4 +- ...compiler_closure_emit_from_ingest_test.dag | 4 +- .../compiler_frontier_census_test.dag | 4 +- ...te1_general_body_producer_witness_test.dag | 4 +- ...e2_namespace_symbol_index_witness_test.dag | 4 +- 9 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/v1/stage0/src/cli_run.rs b/src/v1/stage0/src/cli_run.rs index 67bb0ce6519..0c083a7e70b 100644 --- a/src/v1/stage0/src/cli_run.rs +++ b/src/v1/stage0/src/cli_run.rs @@ -2242,6 +2242,18 @@ const LIVE_READ_CARRIER_HOME_MODULES_V0: &[&str] = &[ /// (an extra witness run) but never under-report (a missed run). It does not attempt to /// prove which touched path a reached carrier actually reads at runtime (that precision is /// G2/G3's job) — reachability plus any touch is treated as a hit. +fn import_closure_module_reaches_carrier_home( + closure_modules: &HashSet, + carrier_home: &str, +) -> bool { + closure_modules.iter().any(|module| { + module == carrier_home + || module + .strip_prefix(carrier_home) + .is_some_and(|suffix| suffix.starts_with('.')) + }) +} + fn runtime_data_dependency_touched_via_carrier_closure( entry_path: &str, facts: &ModuleGraphFactsLive, @@ -2254,7 +2266,9 @@ fn runtime_data_dependency_touched_via_carrier_closure( collect_import_closure_module_names_from_facts(entry_path, facts, &mut closure_modules); LIVE_READ_CARRIER_HOME_MODULES_V0 .iter() - .any(|carrier_module| closure_modules.contains(*carrier_module)) + .any(|carrier_home| { + import_closure_module_reaches_carrier_home(&closure_modules, carrier_home) + }) } #[cfg(test)] @@ -9788,6 +9802,25 @@ new file mode 100644 ); } + #[test] + fn import_closure_carrier_home_matches_submodules() { + use std::collections::HashSet; + + let carrier = "v2.compiler.self_host"; + let mut exact = HashSet::from([carrier.to_string()]); + assert!(super::import_closure_module_reaches_carrier_home( + &exact, carrier + )); + let mut submodule = HashSet::from(["v2.compiler.self_host.frontier".to_string()]); + assert!(super::import_closure_module_reaches_carrier_home( + &submodule, carrier + )); + let mut homonym = HashSet::from(["v2.compiler.self_hostile".to_string()]); + assert!(!super::import_closure_module_reaches_carrier_home( + &homonym, carrier + )); + } + #[test] fn lying_substrate_inputs_only_stamp_census() { use std::collections::HashSet; @@ -9818,7 +9851,7 @@ new file mode 100644 &mut closure_modules, ); for carrier in super::LIVE_READ_CARRIER_HOME_MODULES_V0 { - if closure_modules.contains(*carrier) { + if super::import_closure_module_reaches_carrier_home(&closure_modules, carrier) { lying.push((rel.clone(), (*carrier).to_string())); break; } diff --git a/src/v2/test/claim/execution/self_host_candidate_generation_test.dag b/src/v2/test/claim/execution/self_host_candidate_generation_test.dag index 23d98d9c3e6..38d17312f79 100644 --- a/src/v2/test/claim/execution/self_host_candidate_generation_test.dag +++ b/src/v2/test/claim/execution/self_host_candidate_generation_test.dag @@ -39,9 +39,9 @@ import v2.std.algebra { bag_eq, length, list_snoc_item } import v2.std.diagnostic { Accepted, None, Rejected } import v2.std.logic { Bool } import v2.std.node { Symbol } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn symbol_eq(left: Symbol, right: Symbol) -> Bool { left == right diff --git a/src/v2/test/claim/long/compiler_frontier_per_module_probe_test.dag b/src/v2/test/claim/long/compiler_frontier_per_module_probe_test.dag index d90e541278e..0fd29b056bc 100644 --- a/src/v2/test/claim/long/compiler_frontier_per_module_probe_test.dag +++ b/src/v2/test/claim/long/compiler_frontier_per_module_probe_test.dag @@ -28,9 +28,9 @@ import v2.test.workflow.host_frontier_probe_survey_manifest { } import v2.std.algebra { length } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data compiler_frontier_per_module_probe_note: String = "Fixture-FREE per-module emit-frontier probe over all 27 compiler modules via frontier_probe_survey bin (real ingest, no injected derisk fixtures). Validates roster blocker classes against execution-measured receipts; answers common-root (blocker-class clustering) vs heterogeneous located-reason gaps. Local recipe: frontier_probe_survey --source-root src/v2 --emit-survey-manifest target/frontier-probe-survey/host_frontier_probe_survey_manifest.dag then claim_batch --source-root src/v2 --source-root dag --source-root target/frontier-probe-survey --entry src/v2/test/claim/long/compiler_frontier_per_module_probe_test.dag --function compiler_frontier_per_module_probe_survey_holds" diff --git a/src/v2/test/claim/long/compiler_frontier_probe_entry_test.dag b/src/v2/test/claim/long/compiler_frontier_probe_entry_test.dag index 82694888821..6b8862caff9 100644 --- a/src/v2/test/claim/long/compiler_frontier_probe_entry_test.dag +++ b/src/v2/test/claim/long/compiler_frontier_probe_entry_test.dag @@ -19,9 +19,9 @@ import v2.test.workflow.host_source_root_ingest_manifest { host_source_root_ingest } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree fn frontier_probe_entry_receipt() -> FrontierProbeReceipt { frontier_probe_emit_from_ingest( diff --git a/src/v2/test/claim/long/self_host_module_emit_derisk_test.dag b/src/v2/test/claim/long/self_host_module_emit_derisk_test.dag index 4a40a199562..56b9f1a10d6 100644 --- a/src/v2/test/claim/long/self_host_module_emit_derisk_test.dag +++ b/src/v2/test/claim/long/self_host_module_emit_derisk_test.dag @@ -24,9 +24,9 @@ import v2.std.diagnostic { Accepted, Outcome, Rejected, bind_outcome } import v2.std.logic { Bool } import v2.std.node { Node, Symbol } import v2.std.text { String } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data derisk_module_artifact: Artifact = Artifact { kind: SourceFile, diff --git a/src/v2/test/claim/self_host/compiler_closure_emit_from_ingest_test.dag b/src/v2/test/claim/self_host/compiler_closure_emit_from_ingest_test.dag index 4fa2418a229..22bcdb152fc 100644 --- a/src/v2/test/claim/self_host/compiler_closure_emit_from_ingest_test.dag +++ b/src/v2/test/claim/self_host/compiler_closure_emit_from_ingest_test.dag @@ -23,9 +23,9 @@ import v2.test.workflow.host_source_root_ingest_manifest { host_source_root_ingest, host_source_root_ingest_coverage_receipt } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree type Gap4IngestProbeState = Gap4IngestProbePending diff --git a/src/v2/test/claim/self_host/compiler_frontier_census_test.dag b/src/v2/test/claim/self_host/compiler_frontier_census_test.dag index 5837cce1d31..7f4db5ad86b 100644 --- a/src/v2/test/claim/self_host/compiler_frontier_census_test.dag +++ b/src/v2/test/claim/self_host/compiler_frontier_census_test.dag @@ -26,9 +26,9 @@ import v2.compiler.self_host.frontier { compiler_frontier_sweep_order_complete_holds } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree test fn compiler_frontier_roster_count_matches_expected() -> Bool { compiler_frontier_roster_count() == compiler_frontier_module_count_expected diff --git a/src/v2/test/claim/self_host/wave1_gate1_general_body_producer_witness_test.dag b/src/v2/test/claim/self_host/wave1_gate1_general_body_producer_witness_test.dag index 75003b75cce..0d0abafba09 100644 --- a/src/v2/test/claim/self_host/wave1_gate1_general_body_producer_witness_test.dag +++ b/src/v2/test/claim/self_host/wave1_gate1_general_body_producer_witness_test.dag @@ -10,10 +10,10 @@ import v2.compiler.self_host.frontier { compiler_frontier_row_03_normalize } import v2.std.algebra { length } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } import v2.std.logic { Bool } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data wave1_gate1_witness_note: String = "Wave 1 exit gate 1 fast-lane witness (compile-gate + roster): import-closure resolution of 03_body_producer and 03_normalize. Full ingest execution proofs (add Transform, classical_not Match via tokenize→parse_module→normalize) live in long/wave1_gate1_general_body_producer_witness_test.dag — those witnesses exceed the 5s per-PR discovery budget. A1 fast receipts (disposition marker, wrapper-retained RED): self_host/wave1_gate1_a1_symbol_index_body_producer_witness_test.dag; A1 ingest execution proofs: long/wave1_gate1_a1_symbol_index_body_producer_witness_test.dag. Not proven here: Stage D MVP producer subsumption, frontier probe per-module receipts, or FLAG E dissolution of body_lowering_fold.dag." diff --git a/src/v2/test/claim/self_host/wave1_gate2_namespace_symbol_index_witness_test.dag b/src/v2/test/claim/self_host/wave1_gate2_namespace_symbol_index_witness_test.dag index 15fdf91151a..d54be776351 100644 --- a/src/v2/test/claim/self_host/wave1_gate2_namespace_symbol_index_witness_test.dag +++ b/src/v2/test/claim/self_host/wave1_gate2_namespace_symbol_index_witness_test.dag @@ -12,7 +12,7 @@ import v2.compiler.self_host.frontier { } import v2.std.algebra { length } import v2.std.logic { Bool } -import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } import v2.test.claim.symbol_index.containment { symbol_index_flat_index_false_accept_discriminator_holds, symbol_index_lexical_lookup_unique_variant_holds, @@ -21,7 +21,7 @@ import v2.test.claim.symbol_index.containment { symbol_index_variant_visibility_equivalence_holds } -data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree data wave1_gate2_witness_note: String = "Wave 1 exit gate 2 verification (namespace SymbolIndex / containment-tree resolution) by execution. Proven here: symbol_index_fill + symbol_index_lexical_lookup via containment_test greens (symbol_index_lexical_lookup_unique_variant_holds, symbol_index_variant_visibility_equivalence_holds) and named RED controls (lookup_miss, flat_index_false_accept, unique_variant_without_alias). Import-closure resolution of 00_compile, 01_tokenize, 03_body_producer is compile-gated (symbols import or the witness module does not resolve). Not proven here: frontier probe blocker_class rows, 03_name_resolve/03_resolve end-to-end ingest wire (variant_visibility_test.dag; normalize-stage debt)." From 6ff0160e28225c44c8de69d966cae5983e1df57e Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Wed, 15 Jul 2026 07:45:41 +0000 Subject: [PATCH 4/4] WIP: Sweep the 2026-07-12 machine-stamped SubstrateInputsOnly batch (#6479) f --- docs/plans/inert-layer-lens.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/plans/inert-layer-lens.md b/docs/plans/inert-layer-lens.md index abe43320760..2b36cf23d49 100644 --- a/docs/plans/inert-layer-lens.md +++ b/docs/plans/inert-layer-lens.md @@ -95,8 +95,6 @@ The reading: the **schedule/width** arm of the realization layer is now wired; t ## 8. Generalization — one rule, N substrates (code · docs · lenses) -> **Sibling family (§2 redundancy, the other half).** Inertness is *"nothing reaches this concept"* (0 authorities/consumers). Its dual is *"this concept is reached but duplicates an authority that already exists"* (≥2 authorities) — the **redundancy / degenerate-work** family, whose test-substrate instance is the [vacuity lens](vacuity-lens-design.md) (a test whose expected value duplicates a code authority = `AuthoredDuplication` on the authored-fact substrate of the `materialization_ladder`). Same §2/§3 root, opposite end of the plurality axis (0 vs ≥2). - Reachability-completeness is **not specific to code** — it is a §2-horizontal "one concept, every breadth": *every declared node in a graph must be reachable from a root, on an exception roster, or deleted.* It already runs over the **lens** graph (#5433). It applies unchanged to the **doc** graph — and the doc instance is the **cheapest wall of all** (pure link reachability — no reflective edges *needed for the dangling half*, and far simpler than the code substrate): | substrate | nodes | edges | roots | inert = | dangling = |