Skip to content
Merged
2 changes: 1 addition & 1 deletion dag/gunbc/ci_layer_roots.dag
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ data long_lane_exclusion_note: String = "test/claim/long/ is the LONG-test home

data wet_integration_offline_note: String = "Four wet-integration entries above (host_effect_apply, deploy_access_privilege, ci_deploy_observed_wet, random_bytes_csprng) are OFFLINE per the hermetic-floor posture (operator 2026-07-11: integration-style witnesses must not run regularly; CI runs hermetic/mocked behavior checks). Each performs genuinely live host effects the hermetic envelope refuses by construction: host_effect_apply drives real LocalShell/SSH host effects (the 133s row atop the slow-witness census), deploy_access_privilege applies privileged shell mutations through fixture actors, ci_deploy_observed_wet shells whoami + sudo -n, random_bytes_csprng reads host entropy. Hermetic duals stay discovered where they exist (the ci_deploy split keeps the pure half; deploy_access_check(access, actor) is the mock-shaped dual). Local recipe: claim_batch --wet --source-root dag --source-root src/v2 --entry <entry> per file. Dissolve-on: the scheduled (nightly) lane un-darkens and admits wet integration rows under its own budget — then these four enroll there as declared execution rows and the exclusion rows delete."

data known_red_frontier_note: String = "Two entries above (logic_ground_truth_test, english_emit_add_test) are the KNOWN-RED FRONTIER: witnesses red on main for feature gaps owned by named lanes, exposed per-PR only when a whole-corpus-affecting diff (like the 2026-07-12 interpreter change) selects the entire tree. They are RED CONTROLS for their lanes, not broken tests — deleting them would discard the discriminating input; leaving them discovered reds every wide PR on debts those PRs did not create. So they sit here as declared, countable rows (the typed self-host-frontier pattern applied to witnesses), each with its diagnosis and dissolve-on. logic_ground_truth_test (4 witnesses): the v1 resolver does not bind imported bare variant constructors in EXPRESSION position (import v2.std.logic { True } then gt_complement(a: True) -> undefined variable: True; patterns-via-scrutinee work) — the namespace-only-resolution lane's containment SymbolIndex covers exactly this class; dissolve-on: that lane lands imported-variant value bindings, these four run green, the entry deletes. english_emit_add_test (1 witness): the english-language emit-ingest round trip returns false undiagnosed (S2 emit family); dissolve-on: the S2 behavioral-closure lane greens it locally, the entry deletes. Local recipe per file: claim_batch --source-root dag --source-root src/v2 --entry <file> --functions <csv>. compiler_closure_emit_from_ingest_test (1 witness, compiler_closure_scoped_ingest_module_count_ok_holds, admitted 2026-07-19): it asserts COMPLETE ingest coverage for the src/v2/compiler/00_compile.dag closure. That closure is 91 source reads and the manifest emitter inlines the full Lossless text of every row, so it exceeds MANIFEST_INLINE_LIST_MAX (64) and the emitted carrier is legitimately Empty. The witness was GREEN until 2026-07-19 only because the receipt fabricated its own numbers — produced_row_count was emitted as read_count and coverage_complete was hardcoded true, so it asserted complete coverage over an empty carrier and could never go red. Making the receipt honest (the elision is now the typed, counted SourceRootManifestElided { read_count, cap }) turned a fabricated green into a true red. It is admitted here rather than deleted because it is the discriminating input for the carrier deficit: when the carrier can hold 91 rows, this witness greens by itself and that greening is the un-quarantine event. Its gate did not go vacuous — compiler_closure_ingest_receipt_describes_carrier_holds replaced it as the live claim (the receipt must describe the carrier that landed, falsifiable at any corpus size). Owner: wise-bee-768 / the module-identity storage-binding lane. Dissolve-on: manifest rows carry a source ref plus content hash instead of inlined text, the parse oracle reads through the ref with hash verification, the cap stops binding, this witness greens and the row deletes. emit_host_fold_closure_equals_eval_test (UN-QUARANTINED 2026-07-20, smart-hawk-154 / witness-realization lane 3): three probe_red rows deleted — the eval walk now materializes RuntimeClosure for an Arrow TypeNode in runtime-argument position (eval_fold_is_closure_argument_edge / eval_fold_closure_argument_child_state in 05_eval.dag), so the closure at transform child 3 of fold_fixture_param_call_body evaluates to a real closure value instead of falling through eval_type_node_atom's non-Atom arm into allocate_literal and refusing (BuildFailed). The dissolve-on condition was met as written: emit_host_fold_closure_equals_eval_holds greens wet against the real fold body subgraph, with no empty Value-behavior ComputationNode stub — the interpreted leg reads the closure from the EVALUATED argument list rather than re-walking the node AST, so eval is genuinely exercised. The (a) agreement leg is restored to the family aggregate as emit_on_demand_fold_closure_agreement_holds, routed through run_test_claim_emit_vs_eval so it compares both legs rather than reading the native cached path as its own oracle. No literal-atom roster was extended (dag_symbol_is_fixture_body_literal_atom and v2_evaluator untouched), per the PR 6879 diagnosis-table tripwire. Local recipe: claim_batch --wet --source-root src/v2 --source-root dag --entry src/v2/test/claim/execution/emit_host_fold_closure_equals_eval_test.dag --function <name>. emit_on_demand_field_access_family_witness_test + emit_on_demand_complement_family_witness_test (UN-QUARANTINED 2026-07-20, witty-owl-841 / eval-repair arc): ten probe_red rows deleted — dag_node_is_eval_literal_atom (dag.dag single authority for complement/pick/record fixture literals) plus eval_type_node_atom bind-miss→allocate_literal (interpretation-owned fixture params) and non-Atom TypeNode→allocate_literal (Conj variant scrutinee) repair the lane-2 equals_eval BuildFailed roots; emit_host_complement_equals_eval_all_holds, emit_host_field_access_equals_eval_all_holds, and wet agreement witnesses green locally. Pure subtests in the same files stay OfflineLocalRecipe via test/claim/execution/ exclusion. emit_host_meet_join_equals_eval_test (meet/join, cross-lane receipt 2026-07-20): shares complement literal root — emit_host_meet_equals_eval_holds, emit_host_join_equals_eval_holds, emit_host_meet_join_equals_eval_all_holds green wet locally; no probe_red rows ever admitted (pre-red was family-note debt only, deleted). emit_host_variant_construct_equals_eval_test (variant_construct byproduct): non-Atom TypeNode→allocate_literal closes eval_rejected_bind_key_absent on Conj scrutinee — emit_host_variant_construct_equals_eval_holds + _all_holds green wet locally; no probe_red rows (deferred root repaired by consolidation, not a separate quarantine admission).
data known_red_frontier_note: String = "Two entries above (logic_ground_truth_test, english_emit_add_test) are the KNOWN-RED FRONTIER: witnesses red on main for feature gaps owned by named lanes, exposed per-PR only when a whole-corpus-affecting diff (like the 2026-07-12 interpreter change) selects the entire tree. They are RED CONTROLS for their lanes, not broken tests — deleting them would discard the discriminating input; leaving them discovered reds every wide PR on debts those PRs did not create. So they sit here as declared, countable rows (the typed self-host-frontier pattern applied to witnesses), each with its diagnosis and dissolve-on. logic_ground_truth_test (4 witnesses): the v1 resolver does not bind imported bare variant constructors in EXPRESSION position (import v2.std.logic { True } then gt_complement(a: True) -> undefined variable: True; patterns-via-scrutinee work) — the namespace-only-resolution lane's containment SymbolIndex covers exactly this class; dissolve-on: that lane lands imported-variant value bindings, these four run green, the entry deletes. english_emit_add_test (1 witness): the english-language emit-ingest round trip returns false undiagnosed (S2 emit family); dissolve-on: the S2 behavioral-closure lane greens it locally, the entry deletes. Local recipe per file: claim_batch --source-root dag --source-root src/v2 --entry <file> --functions <csv>. compiler_closure_emit_from_ingest_test (1 witness, compiler_closure_scoped_ingest_module_count_ok_holds, admitted 2026-07-19): it asserts COMPLETE ingest coverage for the src/v2/compiler/00_compile.dag closure. That closure is 91 source reads and the manifest emitter inlines the full Lossless text of every row, so it exceeds MANIFEST_INLINE_LIST_MAX (64) and the emitted carrier is legitimately Empty. The witness was GREEN until 2026-07-19 only because the receipt fabricated its own numbers — produced_row_count was emitted as read_count and coverage_complete was hardcoded true, so it asserted complete coverage over an empty carrier and could never go red. Making the receipt honest (the elision is now the typed, counted SourceRootManifestElided { read_count, cap }) turned a fabricated green into a true red. It is admitted here rather than deleted because it is the discriminating input for the carrier deficit: when the carrier can hold 91 rows, this witness greens by itself and that greening is the un-quarantine event. Its gate did not go vacuous — compiler_closure_ingest_receipt_describes_carrier_holds replaced it as the live claim (the receipt must describe the carrier that landed, falsifiable at any corpus size). Owner: wise-bee-768 / the module-identity storage-binding lane. Dissolve-on: manifest rows carry a source ref plus content hash instead of inlined text, the parse oracle reads through the ref with hash verification, the cap stops binding, this witness greens and the row deletes. emit_host_fold_closure_equals_eval_test (UN-QUARANTINED 2026-07-20, smart-hawk-154 / witness-realization lane 3): three probe_red rows deleted — the eval walk now materializes RuntimeClosure for an Arrow TypeNode in runtime-argument position (eval_fold_is_closure_argument_edge / eval_fold_closure_argument_child_state in 05_eval.dag), so the closure at transform child 3 of fold_fixture_param_call_body evaluates to a real closure value instead of falling through eval_type_node_atom's non-Atom arm into allocate_literal and refusing (BuildFailed). The dissolve-on condition was met as written: emit_host_fold_closure_equals_eval_holds greens wet against the real fold body subgraph, with no empty Value-behavior ComputationNode stub — the interpreted leg reads the closure from the EVALUATED argument list rather than re-walking the node AST, so eval is genuinely exercised. The (a) agreement leg is restored to the family aggregate — since the family-crate migration (merry-pike-487 fan-out) it rides emit_on_demand_match_loop_fold_family_one_build_holds via run_test_claim_from_source_emit_vs_eval_cached, still comparing both legs (oracle = eval) rather than reading the native cached path as its own oracle. No literal-atom roster was extended (dag_symbol_is_fixture_body_literal_atom and v2_evaluator untouched), per the PR 6879 diagnosis-table tripwire. Local recipe: claim_batch --wet --source-root src/v2 --source-root dag --entry src/v2/test/claim/execution/emit_host_fold_closure_equals_eval_test.dag --function <name>. emit_on_demand_field_access_family_witness_test + emit_on_demand_complement_family_witness_test (UN-QUARANTINED 2026-07-20, witty-owl-841 / eval-repair arc): ten probe_red rows deleted — dag_node_is_eval_literal_atom (dag.dag single authority for complement/pick/record fixture literals) plus eval_type_node_atom bind-miss→allocate_literal (interpretation-owned fixture params) and non-Atom TypeNode→allocate_literal (Conj variant scrutinee) repair the lane-2 equals_eval BuildFailed roots; emit_host_complement_equals_eval_all_holds, emit_host_field_access_equals_eval_all_holds, and wet agreement witnesses green locally. Pure subtests in the same files stay OfflineLocalRecipe via test/claim/execution/ exclusion. SCOPE CORRECTION on that un-quarantine (admitted 2026-07-22, merry-pike-487 / one-build migration): the un-quarantine covered the equals_eval lane; executing the offline field_access suite surfaced that the ALT-tree NATIVE leg was NEVER satisfiable — the wrong-field alt tree emits fn get(r: (i32,)) -> i32 { r.1 } under main-suffix get((9,)), field 1 on a 1-tuple, rustc E0609, the crate cannot build — so emit_on_demand_field_access_native_content_change_cold_rebuild_holds (alt octet 1) could never pass and never ran in CI (OfflineLocalRecipe exclusion). The alt native leg is scoped OUT of emit_on_demand_field_access_native_one_build_holds: no probe_red row is admitted because nothing runs red (the leg is not asserted), content-change key sensitivity stays PURE (closure_keys_differ), and the wrong-fixture RED stays eval-anchored on the primary build. Owner: the native-path repair PR 6990 reconciliation. Dissolve-on: the emitted alt source compiles — restore the alt cold run with its octet flip inside emit_on_demand_field_access_native_one_build_holds, then delete this admission and the pointer note field_access_alt_native_quarantine_note. emit_host_meet_join_equals_eval_test (meet/join, cross-lane receipt 2026-07-20): shares complement literal root — emit_host_meet_equals_eval_holds, emit_host_join_equals_eval_holds, emit_host_meet_join_equals_eval_all_holds green wet locally; no probe_red rows ever admitted (pre-red was family-note debt only, deleted). emit_host_variant_construct_equals_eval_test (variant_construct byproduct): non-Atom TypeNode→allocate_literal closes eval_rejected_bind_key_absent on Conj scrutinee — emit_host_variant_construct_equals_eval_holds + _all_holds green wet locally; no probe_red rows (deferred root repaired by consolidation, not a separate quarantine admission).

This roster must not grow silently: a new known-red admission requires the same per-file diagnosis + owner + dissolve-on in this note, and an entry whose witness runs green locally is stale and deletes."

Expand Down
8 changes: 4 additions & 4 deletions dag/gunbc/witness_family_fanout.dag
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,20 @@ data witness_family_fanout_lanes: List<WitnessFamilyLane> = [
lane_number: 4,
kind: EmitHostExecutionFamily,
title: "variant_construct — variant-construct-then-match emit-on-demand native witnesses",
scope_note: "emit_on_demand_variant_construct_family_witness_test: native cold/warm octet receipts (NOT equals_eval agreement — pre-red debt in emit_host_variant_construct_equals_eval_test.dag), wrong-value RED, closure_digest key sensitivity.",
scope_note: "emit_on_demand_variant_construct_family_witness_test: consolidated to ONE-BUILD grain (emit_on_demand_variant_construct_native_one_build_holds — primary cold/warm octet 9 + wrong-value alt cold octet 1 in one root, 2 builds; formerly 5), closure_digest key sensitivity pure.",
witness_entry: "src/v2/test/claim/execution/emit_on_demand_variant_construct_family_witness_test.dag",
witness_function: "emit_on_demand_variant_construct_family_witnesses",
lane_state: "LANDED (wise-fox-351)"
lane_state: "LANDED (wise-fox-351); one-build consolidation (merry-pike-487 fan-out)"
},
WitnessFamilyLane {
lane_id: ^witness_family_lane_classical_not_ingested,
lane_number: 4,
kind: EmitHostExecutionFamily,
title: "classical_not_ingested — ingested classical_not emit-on-demand native witnesses",
scope_note: "emit_on_demand_classical_not_ingested_family_witness_test: interpreted==native equals_eval via run_test_claim_emit_vs_eval, native cold/warm, swapped-source RED, closure_digest key sensitivity.",
scope_note: "emit_on_demand_classical_not_ingested_family_witness_test: consolidated to ONE-BUILD grain (emit_on_demand_classical_not_native_one_build_holds — primary cold/warm octet 0 + cached eval-anchored agreement warm + swapped-source alt cold octet 1 with cached mismatch RED, 2 builds; formerly ~6), closure_digest key sensitivity pure.",
witness_entry: "src/v2/test/claim/execution/emit_on_demand_classical_not_ingested_family_witness_test.dag",
witness_function: "emit_on_demand_classical_not_ingested_family_witnesses",
lane_state: "LANDED (wise-fox-351)"
lane_state: "LANDED (wise-fox-351); one-build consolidation (merry-pike-487 fan-out)"
},
WitnessFamilyLane {
lane_id: ^witness_family_lane_family_crate_grain,
Expand Down
2 changes: 1 addition & 1 deletion dag/std/emit_on_demand.dag
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import std.realization { Materialization, Share, Recompute }

data emit_on_demand_module_note: String = "Witness-realization kernel (plan P3): the pure-spec authority for emit-on-demand native execution — closure ContentHash -> artifact store lookup -> cold (emit+build+run+put) | warm (run-only, compile skipped). Composes P2 std.artifact_store (ContentKeyed, eviction counted) and std.realization (Share on store hit). Source grain (toolchain: source-artifact) is the emit cache; native grain (toolchain: native-artifact) is the zero-compile warm path. The interpreter's surviving roles are named here with dissolution triggers (P3 ACCEPT (c)). Host transport: extdeps.realization.emit_on_demand_host; spine/realize_pack scheduling: v2.std.emit_on_demand. Serial kernel family: emit_host_add (#6879). Fan-out lane 2 (swift-stag-662): emit_host_field_access + emit_host_complement. Width-5 partition ratified on #6879 comment."

data emit_on_demand_cache_key_authority_note: String = "Cache key purity (§5 cache-impurity): emit_on_demand_key hashes ArtifactKey { closure_digest, emitter_identity, target_language, toolchain } — closure_digest is the content hash of declared inputs (inferred_tree_digest over the witness root + evaluated facts; emitted source + build inputs derive from that tree). Witness test_id subdirectories under /tmp are isolation-only shims; they are NOT key material. A changed subject changes closure_digest -> new key -> new workspace path -> cold rebuild (witness: emit_on_demand_native_content_change_cold_rebuild_holds)."
data emit_on_demand_cache_key_authority_note: String = "Cache key purity (§5 cache-impurity): emit_on_demand_key hashes ArtifactKey { closure_digest, emitter_identity, target_language, toolchain } — closure_digest is the content hash of declared inputs (inferred_tree_digest over the witness root + evaluated facts; emitted source + build inputs derive from that tree). Witness test_id subdirectories under /tmp are isolation-only shims; they are NOT key material. A changed subject changes closure_digest -> new key -> new workspace path -> cold rebuild (witness: the one-build receipts, e.g. emit_on_demand_kernel_native_one_build_holds's alt-key cold leg and family_crate_member_change_cold_rebuild_holds)."

data witness_family_build_grain_ruling: String = "Build-grain ruling (operator-directed 2026-07-21, answered by measurement): per-witness native crates cost ~17s of cargo build EACH and lose to the interpreter on wall clock; ONE family-grain crate — every member fn concatenated into one emitted source with an argv-dispatched main — pays the build once, and every member run after the first is compile_skipped. Build at family grain, never per witness. This supersedes witness-realization-plan FLAG B v0 (one binary per entry closure). The family artifact reuses the SAME key authority: emit_on_demand_key over family_closure_digest(member digests) — the family is a different closure input, not a second key scheme. Member LIST ORDER is declared key material (concat order and dispatcher arm order are artifact content); the digest is tag-seeded so a singleton family never collides with its bare member digest. Receipt by execution: emit_on_demand_family_crate_witness_test (one-build-members-warm, unknown-member RED, member-change cold rebuild)."

Expand Down
4 changes: 4 additions & 0 deletions src/v2/compiler/emit_host.dag
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,10 @@ fn run_test_claim_emit_vs_eval_verdict(
}
}

fn emit_host_no_run_args() -> List<String> {
[]
}

fn run_test_claim_emit_vs_eval_verdict_from_run(
subject: TestClaimEvalSubject<Node>,
target: TargetModel,
Expand Down
Loading
Loading