Repository navigation
P3c: wet==hermetic equivalence gate + flip CI discovery default to Hermetic - #5276
Conversation
…o Hermetic. Prove governed-service witnesses agree under wet and hermetic before changing the claim_batch/claim_executor discovery corpus default; effectful CI gates stay Wet for live shell/filesystem transport. Co-authored-by: Cursor <cursoragent@cursor.com>
76899c4 to
9fdb4c3
Compare
Unblocks rust_monolith_gate fmt --all --check on PR #5276. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review feedback triage (cursor/composer-2.5 APPROVE on superseded #5288) Verified against current HEAD
Merge readiness @ — sent from silent-raven-864 |
|
CI triage @ dashboard alert The failing SHA is stale — it is commit
GitHub checks on HEAD: CI pass (run Re-ran workflow on the green run to refresh dashboard state. Please re-evaluate against — sent from silent-raven-864 |
…r unit teeth. Honest §6 framing: lens_mock_totality roster cannot observe mock-vs-live divergence until live-transport witnesses enroll. Unit tests prove the comparator reports Pass vs Fail divergence on synthetic vectors. Co-authored-by: Cursor <cursoragent@cursor.com>
a374e3c to
5334c56
Compare
|
Review triage (claude/claude-opus-4-7 APPROVE @ Finding: None — approval only. No code change required for this item. Verified on current HEAD
Parent ( CI pending on — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ Finding: None — approval only. No code change required. Verified on current HEAD
Directionally APPROVE still holds for scope/discipline; the Hermetic-discovery and faithfulness framing in this review predates CI fixes and parent gate-honesty pass. Awaiting CI on — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ Finding: None — approval only. No code change required. Verified on current HEAD This review is the closest stale approval to current code — most claims still hold:
Superseded since
Directionally APPROVE stands. CI pending on — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ Finding: None — approval only. No code change required. Verified on current HEAD This approval accurately describes the post-CI-fix state at
Superseded on
Directionally APPROVE stands. CI pending on — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ review 30899, artifact timestamp 2026-06-19T16:49:28Z) Finding: Approval only — no blocking concerns. One substantive claim in the review body is stale against current HEAD
Action: None — honesty relabel landed in — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ review 30900, artifact timestamp 2026-06-19T16:51:59Z) Finding: None — approval only. One substantive claim in the review body is stale against current HEAD
Action: None — honesty relabel landed in — sent from silent-raven-864 |
Rust filter loads wet_hermetic_equivalence_representative_prefix from the enrolled witness .dag (no parallel lens_mock_totality/ substring). Add wet_hermetic_scaffold_roster_filter_uses_dag_prefix_authority RED control; strengthen .dag witness to assert path shape on the pinned data binding. Addresses review 30910 (§3 parallel-representation + §5 coverage-by-illusion). Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review triage (cursor/composer-2.5 REQUEST_CHANGES @ review 30910) Findings: Valid — fixed in
Comparator unit tests and vacuous-scaffold labeling unchanged. CI pending on new HEAD. — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ review 30924, artifact timestamp 2026-06-19T17:38:08Z) Finding: None — approval only. No code change required. Verified on current HEAD
CI green on this HEAD (run 27839890946). — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ review 30927, artifact timestamp 2026-06-19T17:41:29Z) Finding: None — approval only. No code change required. Verified on current HEAD
CI green on this HEAD (run 27839890946). — sent from silent-raven-864 |
b923091 to
90d664c
Compare
|
Merge conflict resolution — rebased
— sent from silent-raven-864 |
…tor. cost_account_predicted_zero() infers Nano from return type; explicit cost_account_predicted_zero<Nano>() parsed as comparison in .dag surface. Fixes discovery-corpus failure on realization_width_witnesses @ merge. Co-authored-by: Cursor <cursoragent@cursor.com>
|
CI fix @ Failure: Cause: Fix: infer Verified locally: — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ review 31029, artifact timestamp 2026-06-19T19:33:01Z) Finding: None — approval only. No code change required. Verified on current HEAD
Note: review artifact predates merge-conflict resolution commits ( — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ review 31031, artifact timestamp 2026-06-19T19:33:31Z) Finding: None — approval only. No code change required. Verified on current HEAD
Note: artifact predates merge-conflict fix commits; structural P3c claims remain valid on — sent from silent-raven-864 |
|
CI triage @ dashboard alert Alert is stale — failing SHA
No further push required. — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ review 31053, artifact timestamp 2026-06-19T19:58:08Z) Finding: Non-blocking observations only — no code change required. Observations are already reflected in current HEAD
Action: None — reviewer correctly classifies scaffold as §6 non-blocking; operator flip acceptance remains operator-owned per prior parent hold. — sent from silent-raven-864 |
|
Review triage (claude/claude-opus-4-7 APPROVE @ review 31065, artifact timestamp 2026-06-19T20:10:49Z) Finding: None — approval only. No code change required. Verified on current HEAD
CI green on this HEAD (run 27846240567). — sent from silent-raven-864 |
|
Review triage (cursor/composer-2.5 APPROVE @ review 31064, artifact timestamp 2026-06-19T20:13:52Z) Finding: None — approval only. No code change required. Verified on current HEAD
CI green on this HEAD (run 27846240567). — sent from silent-raven-864 |
Resolve realization_width.dag conflict by taking main's P3c fix (#5276); bash slice 5c emit rows unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
…skip × P3c hermetic) Integrates main's #5276 (P3c: flip CI discovery default to Hermetic) + the realization_width.dag consumer catch-up that unblocked red main. cli_run.rs is a semantic compose, not a pick-a-side: run_discovery_rows and run_discovery_corpus_with_options now thread BOTH this branch's node-precise skip (skip_enabled + frontier_seeds + DiscoverySummary.skipped) AND main's hermetic discovery (whole_tree_published_keys + make_eval_context_with_runtime_options + DiscoveryWitnessOutcome/witness_outcomes). The roster-only gate is the union of both triggers (explicit_roster_only OR empty-scan-dirs+explicit). The entry touch check runs on the hermetic ctx (data-item Node eval is pure, so published keys don't perturb it). claim_executor keeps main's Wet-dispatch comment and this branch's run_discovery_corpus_with_options call (the only one taking the skip flag). Also folds the opus-4-7 finding-2 cleanup: drop the unused _entry param from run_injected_diff_roster + its call sites. Verified by execution: 8 floor-skip host receipts + 3 cli_run unit tests (this branch) AND 4 wet/hermetic equivalence tests (main) all green; clippy --all-targets -D warnings + fmt clean. main is green again, and the merged tree carries the fixed realization_width.dag (NanosecondDuration from std.verification). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
wet_hermetic_scaffold_roster_outcomes_agree passes isolated (~110s) but fails under the 766-test parallel load (~335s). nextest process-isolates each test, so this is resource/timing contention on the wet-execution path, not a logic bug — a non-deterministic test can't gate a merge (§5 fail-open-by-noise). Pre-existing (#5276), never run under the old 3-filter allowlist. #[ignore=reason] + route to the wet==hermetic / hermetic-testing owner; the coverage lens keeps it visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…lter allowlist (29 of 792 green tests) → run-all-unless-#[ignore]d-with-written-reason; add CI-coverage-completeness so a new test is covered by default (fail-closed); measure CI-time impact before committing the full set (#5427) * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Widen rust gate: declare merge-landed test (lens caught it) + flag one pre-existing fixture red The coverage-completeness lens (this PR's residue) fired on its first real input after merging main: resolve_typed_cache_equivalence_test.rs landed via #5071 but was never declared in lib.rs, so it would silently not run — exactly the gap the lens exists to close (fail-closed, working as designed). Declared it. dag_emit_from_resolved_matches_compile_sources_for_v4_slice reads a removed fixture (fixtures/v2-mvp1, absent from the tree and every git ref) — a pre-existing red hidden by the old 3-filter allowlist, surfaced by the widening. Flagged with a written #[ignore] reason (FLAG-DON'T-FIX); the lens keeps the excuse reviewable. The ~20 interp_recorded_fixture/dry_run local failures were a build-ordering artifact (claim_batch bin not built locally); they pass once the floor's release --bins build is present, so they are NOT ignored (ignoring them would have been a fail-open). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Mark v4_slice ignore as draining-worklist (delete-or-restore), not permanent Parent note: a test whose fixture is gone from every git ref is DEAD — it can never pass, so a permanent ignore would calcify a coverage hole. Sharpened the reason to name the resolution (delete the dead parity receipt OR restore/retarget the fixture at a live v2 source set) and the owner routing (v2 emit slice, via bright-stag), so the completeness lens keeps it visible as work-to-drain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix completeness-lens false-positive on multi-line #[ignore] reasons My own lens (every_ignore_carries_a_written_reason) went RED on the v4_slice ignore I'd just added: the detector required the closing quote on the same line as #[ignore = "..."], so a long reason wrapped with \ line-continuation left the opening line with an unterminated string and was misread as reasonless — a false-positive that fails-closed on legitimately-reasoned input. Detector now recognizes a multi-line reason: opening quote + non-empty content (sans a trailing \ continuation) is reasoned even when the string closes on a later line; an opener with no content before the break is still empty → flagged. Added detector_accepts_a_multiline_reason as the discriminating control (both the valid wrap and the empty-multiline edge), fed through the same authority. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Flag the 16 execution-confirmed pre-existing reds the widening surfaces (#[ignore=failing]) The widened gate runs the self_gen8 + census families that the old 3-filter allowlist never ran. warm-ram's opt-level run listed 32 candidates; running them to completion (--no-fail-fast, claim_batch built) confirms only 16 actually FAIL — the other 16 self_gen8 PASS (e.g. kernel_type_import). Ignoring warm-ram's superset would have excluded 16 GREEN tests (fail-open); only the execution- confirmed failures are flagged. • ownership_stage0_census (1): clone-census ratchet RED on main (non-emit .clone() 21540 > 20200+202, ~1138 over) — inert under the old allowlist while the seed drifted UP against "Rust shrinks toward zero". Do NOT bump the cap (project spirit); route to a census/substrate-migration owner. • self_gen8_* (15): pre-existing self-host emit regression (parametric-alias-RHS / reexported-type-import module resolution); route to the v2 self-host Route-A owner. All draining-worklist, not permanent; the completeness lens keeps each reason visible and reviewable. fmt-clean (rust gate runs fmt --check); parse.rs picked up a pre-existing fmt fix from the earlier ignore conversion. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Merge origin/main (ac9a7e7) — resolve pipeline.rs: accept main's deletion of dead v4_slice test main moved again (#5449 etc.) after my first sync. Conflict in pipeline.rs: main DELETED dag_emit_from_resolved_matches_compile_sources_for_v4_slice (the dead parity receipt reading the removed fixtures/v2-mvp1) — exactly the delete-or-restore resolution I'd flagged and routed. Accepted main's deletion; my interim #[ignore] on it is now moot and gone. The 16 self_gen8/census failing-ignores stay intact; completeness lens green (no undeclared test file from the merge); crate compiles. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Cluster A construction-fix (v2_layer_roots single authority) + cluster B ignore-with-reason; fix doc-lazy-continuation 27 reds surfaced by the run-all widening: - 14 fixed-by-construction: under-scoped v2_source_roots()=[src/v2] dropped dsl, so v2-core's extdeps.communication.medium import was unresolvable. Funnel the 4 files' local copies through one helpers::v2_layer_roots()=[src/v2,dsl] authority (mirrors gunbc.ci_layer_roots; §6 dissolution marker to derive from the .dag fact later). - 13 pre-existing emit/inference reds: #[ignore=failing] with written symptom + bucket (emit/inference/lang-go/lang-python), routed as follow-ups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: ignore 2 more pre-existing reds the widening surfaced (#5473 + #5484 interactions) The full run-all enumeration (761 pass / 2 fail / 89 ignored, 0 infra) surfaced two more deterministic reds beyond the wall-clock timing test — both pre-existing on origin/main, hidden by the old 3-test allowlist, untouched by this PR: - source_root_ingest_manifest_host_test::manifest_entry_admission_qualified_name_is_well_formed: #5473 source_root admission has an absolute-vs-relative contradiction (abs path rejected by admission; relative path fails the file-existence check) — proven by execution. Real #5473 API bug; routed to the source_root-tagging owner. - wet_hermetic_equivalence_test::wet_hermetic_scaffold_roster_outcomes_agree: whole-tree mock-corpus precompute can't resolve #5484's doc_reachability_witness_test.dag (doc_graph_* fns not in scope); routed to the doc-graph reachability-lens owner. Surgical #[ignore=failing] with routed reasons (bucket=source-root-ingest-admission / doc-graph-wholetree-resolve). Reason-based completeness lens covers them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: cite PR #5504 (RED#1 heal-PR) in the source-root admission ignore reason #5504 (still-deer-248's de-fork-lane fix) grounds absolute --source-root via repo_relative_dag_path, fixing the abs-vs-rel admission contradiction behind the #[ignore]'d manifest_entry_admission test. #5504 is up but not yet merged, so the interim ignore stays; reason now names #5504 as the heal-PR + un-ignore trigger. When #5504 merges, a freshness-merge heals RED#1 and the ignore drops -> zero ignores. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: route rust gate through the cargo.Build model (§3), drop hand-typed argv strings run_gates() now calls the modeled extdeps.cargo_build ops — cargo.Build.Fmt(["--all","--check"]), Clippy(["--all-targets"],["-D","warnings"]), Test(["-p","v1-compiler-tests"]) — so the cargo shell-transport argv is the single authority, not a hand-typed command String. Removes the now-dead ci_rust_gate_{fmt,clippy,test}_command() String fns from ci_spec (they were §3 nicknames for cargo's already-modeled interface; tools/build.dag uses the same ops). Coverage-by-construction unchanged (run-all-except-#[ignore]d; completeness lens is the residue). EAGAIN cold-retry is transport resilience the cargo model can't yet express (env not wired to the shell transport); it relocates to the CI workflow step that runs the gate (follow-up: rust_tests job). Validated by execution: floor_effect_gate_witness rust_monolith_gate_passes resolves 78 sources and dispatches all three modeled cargo commands. Fixes the partial-snapshot break in 565a116. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve merge conflict markers in rust gate cargo-modeling (ac0b732) The auto-committer captured the merge with unresolved <<<<<<< markers in rust_gates_ci.dag and ci_spec.dag. Resolution keeps the cargo.Build model routing (Task 1) over origin/main's old shell-string version (which still carried the narrow 3-filter ci_rust_gate_test_command -- exactly what this work inverts). No code change beyond marker removal. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Resolve merge conflict in cargo_build.dag; conform new .dag files to comment-ban The auto-committer pushed an unresolved-conflict state (<<<<<<< markers in cargo_build.dag:3,8,9) which fails to parse — fixes the BLOCKING review and the red dsl_compile_clean_gate. main's comment-ban sweep (#5537/#5543/#5539) left dsl/std, dsl/extdeps, dsl/gunbc, dsl/tools, src/v2/test/claim comment-free; this PR's new/rewritten files in those dirs re-introduced comments. Strip them to conform (code unchanged) so we match already-merged state and avoid a future re-sweep. ci.yml emit is byte-identical (comments don't affect output); drift gate green, ci_spec_witnesses green, rust gate + floor_effect_gate_witness resolve clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix stale source-audit literal: compile.dag gate predicate (run-all surfaced) The run-all widening (#5427) surfaced source_audit::compile_gate_keeps_infer_errors_blocking_in_stage0, red because main refactored compile.dag's emission gate from is_error_diagnostic to is_resolved_pipeline_typecheck_blocking (discovery-corpus advisory typecheck) without updating this brittle string-audit literal. The audit never ran under the 3-filter allowlist, so the drift went unseen — exactly the class this widening exists to catch. Intent is unchanged (emission is gated on type errors); update the literal to the current predicate so the audit stays live and green. Fix, not #[ignore]: a stale literal is cheaply correctable, not deep work to route. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve .rs merge conflicts: keep #[ignore=reason] set, conform to .rs comment-ban The auto-committer committed an unresolved merge (3052ecd, markers in 5 test .rs files) bringing main's .rs comment-ban sweep (#5544). Resolution: restore my pre-merge versions (preserving every #[ignore = "<reason>"] — the single authority my coverage-completeness lens requires; main's bare #[ignore] would red that lens) then strip full-line // comments to conform to the ban. Code unchanged; 17 self_gen8 + diagnostics reasoned ignores intact; zero reasonless #[ignore] introduced. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Re-delete orphan profiling scaffold the merge resurrected (my own lens caught it) body_producer_infer_profile_test.rs is a manual timing-profiling scaffold (std::time::Instant, profile_* fns, bare #[ignore], never declared in lib.rs). My widening deliberately deleted it (26beeee); the auto-committer's merge (3052ecd) left main's copy in the tree via the unresolved deleted-in-HEAD/ modified-in-main conflict. The new coverage-completeness lens correctly fired on it twice — orphan file (every_test_file_is_declared_in_lib) + bare reasonless #[ignore] (every_ignore_carries_a_written_reason) — a live proof the lens has teeth. Re-delete to honor the original deletion; both lenses green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Flag contention-flaky wet/hermetic equivalence test (run-all surfaced) wet_hermetic_scaffold_roster_outcomes_agree passes isolated (~110s) but fails under the 766-test parallel load (~335s). nextest process-isolates each test, so this is resource/timing contention on the wet-execution path, not a logic bug — a non-deterministic test can't gate a merge (§5 fail-open-by-noise). Pre-existing (#5276), never run under the old 3-filter allowlist. #[ignore=reason] + route to the wet==hermetic / hermetic-testing owner; the coverage lens keeps it visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * cargo fmt: collapse blank lines left by .rs comment-strip The comment-strip in f05415d left double-blank-lines where comments had been; cargo fmt --all --check rejected them (the rust gate's Fmt op would red). Pure blank-line removal (105 lines), zero code change, all #[ignore]s intact. Also addresses the blank-line noise the 19:42 review flagged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Summary
wet_hermetic_governed_service_representative_equivalence_holds): runs all 18lens_mock_totalitydiscoverable witnesses under both--wetand--hermeticviarun_discovery_corpus, asserts identical per-witness outcomes (RED on divergence). CI-enrolled ingunbc.ci_spec.ci_rust_gate_test_command.run_discovery_corpusand adds explicit-roster-only path for the gate.claim_batchandclaim_executordiscovery batch; effectful CI gates (run_single_claim) stay Wet for liveshell.Exec/Filesystem.*transport.gunbc run(handle_run_with_options) unchanged — real-I/O tests keep explicit--wet.Worker attestation
cargo test -p v1-compiler-tests -- wet_hermetic claim_batch_hermetic— 2 passed (equivalence ~133s + default-hermetic regression).Closes #N(dashboard nodeadhoc-01926b73-472).main(replaced prior WIP session commits).Test plan
cargo test -p v1-compiler-tests -- wet_hermetic claim_batch_hermetic