Repository navigation
Affected-set and schedule-retention receipts: name the states they actually witness (empty-observation narrow; release ≠ eviction) - #7720
Merged
Conversation
1 of 3 tasks
4 tasks done
…its projection DESIGN.md is generated from gunbc.design_document; editing the projection alone is exactly the drift the generated_artifact_drift_gate exists to catch, and CI auto-heal would have regenerated the row away while the PR still looked like it landed it. The carrier now carries the row (quotes escaped per the file's convention) and DESIGN.md is its character-identical projection — verified by execution rather than by eye: witness_committed_is_fixed_point PASS and its red control PASS on the patched tree (dag/test/claim/generated_artifact_drift_test.dag, claim_batch). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ines The reviewer was right and the cause is worth naming: the multi-line format! strings lost their Rust `\`-newline continuations when I authored them through a heredoc, so ~18-space runs from source indentation landed mid-sentence in the emitted receipt. Real continuations restored on all three arms. Asserted rather than fixed once: the test now renders all three arms and reds on any run of two or more spaces. A receipt whose whole job is to stop a misreading has to be readable, and the next edit cannot silently reintroduce this. Executed: no_observed_change_is_reported_as_its_own_state_not_as_unaffected PASS. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Author
|
Fixed in b0d7460 — the nit was correct, and the cause is worth naming rather than just correcting. Those three strings were authored through a heredoc, which ate the Rust I also made it a property instead of a one-time fix: the test now renders all three arms and reds on any run of two or more spaces. This particular receipt exists to stop a misreading, so its legibility is part of what it does — and the same heredoc mistake would otherwise be one edit away from returning. — sent from sleek-dove-87 |
briansrls
pushed a commit
that referenced
this pull request
Aug 3, 2026
…ing gap, stage-1 landing condition) (#7730) * Design note: push-event affected-set baseline, with evidence status per claim Written to outlive #7720 and #7729, because the load-bearing content is not either implementation — it is which claims are observed, which are spec-grounded, and which window each number came from. Every number here is short-window by construction (the events API retains a few hundred events and before is unrecoverable once a push ages out), so an unnamed window would imply a baseline nobody measured. Records, with receipts: the self-compare defect and its three-consumer tell; why the payload beats a minted env channel on section 3 grounds rather than diff size; the per-arm evidence table including the zero-SHA arm being unobserved-and-spec-grounded rather than measured; and two claims that sound right and are not — a non-ancestor before was NOT shown to under-select, and the 'discarded object will be missing so git fails loudly' fallback is false at 9 of 9. The deeper defect and the measurement that flips it: incremental selection is sound only if every prior push was covered, and run conclusion is a bad proxy for floor coverage in BOTH directions — 6 of 15 failure runs had a green floor, and 10 of 10 cancelled runs had a green floor, because cancellation lands after the floor completes. On the right predicate the walk-back to the nearest green floor is 1 for 30 of 39 and never past 6, so a last-green baseline is affordable rather than prohibitive. And the landing condition on stage 1, which is what makes 'the gap becomes observable' true rather than merely plausible: without a counted receipt the gap becomes active and silent instead, since today it is inert only because main pushes select nothing. Declared as a section 4b(3) rung regression with bounded population and restoration trigger. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * WIP: Affected-set selection defect: an entry the skip logic retained produced * Correct four citations in the push-event baseline design note (review 47769) All four findings confirmed by execution against origin/main: - "Filed in DESIGN's recurring-failure-modes list as empty-observation narrow" was present tense about a name that gunbc#7720 proposes and has not merged. Now states the proposal and its open PR explicitly. - dag/tools/merge_admission_stamp.dag is deleted; "already reads GITHUB_EVENT_PATH" cited a module that does not exist. The surviving symbol, tools.merge_admission_walk merge_admission_pr_number_deferred_note, is stronger evidence anyway: its dissolve-on already names the typed payload projection this note proposes, so one projection discharges both consumers. - extdeps.github.push_event does not exist on main or HEAD. Both sites naming it now say it is written by gunbc#7729 and is unresolvable until that lands. The class the reviewer caught is the one this note is about: a citation that reads as current repository state while naming something that is merely intended. Section 3's own evidence-status discipline applies to the note's citations, not only to its measurements. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 3, 2026
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 3, 2026
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 3, 2026
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
pushed a commit
that referenced
this pull request
Aug 3, 2026
* Reconcile generated artifacts for occurrence identity debt receipt test. #7559 landed v1_tests_claim_occurrence_identity_debt_receipt_test.rs without lib.rs registration, .gitattributes merge driver row, or regenerated ci.yml heal exclude list — regen_verify_gate_passes failed on main. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Lane B: write v2-emitted Rust to disk with compile receipt. Extend candidate_generation through emit, Filesystem.Write, and a wet cargo smoke transport so the direct rust door proves provenance, disk write, and compilation without v1.compiler.emit_rust in the closure. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix direct rust door proof plan to return WalkPlan. claim_executor requires WalkPlan with finalization field, not a bare batch list. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix direct rust door contract imports for v2 std modules. Use length from v2.std.algebra and split Bool/Int/List/String across v2.std.logic, v2.std.integer, v2.std.collection, and v2.std.text so discovery resolve succeeds on the acceptance witnesses. Co-authored-by: Cursor <cursoragent@cursor.com> * Exclude wet direct-rust-door compile witness from hermetic discovery. Hermetic CI cannot mock Filesystem.Write or shell.Mktemp.Dir; provenance and closing-contract witnesses stay on the discovery path while the cargo compile smoke runs via the offline wet recipe in tools.direct_rust_door_transport. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review: scaffold Cargo.toml debt, drop golden-string gate. Mark direct_rust_door_cargo_toml with feature:medium_structure_containment and a named dissolve-on trigger. WrittenSourceIndependentOfSeedEmitter now checks only seed-free closure provenance; byte oracle stays on the discriminating provenance witness. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix v2_interpreted_emitter_closure module path for honest provenance. Record v2.compiler.self_host.candidate_generation (the real module authority) instead of the fabricated v2.compiler.candidate_generation path minted receipts were carrying. Co-authored-by: Cursor <cursoragent@cursor.com> * Route wet transport through candidate_generation write authority. direct_rust_door_transport now calls mint_written_provenanced_rust_artifact instead of duplicating Filesystem.Write of Cargo.toml and src/main.rs. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Operator freeze: monotonic receipts, ingest path, run closure. SourceProduced-only mint before cargo; advance_written after compile. Witnesses and wet transport use generate_*_from_ingest; closure from realized_closure_for_v2_direct_rust_door_emit_run() not static data. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Route wet transport through mint_written/write_rust_workspace authority. Review 47560: collapse parallel Filesystem.Write in transport; wet smoke calls candidate_generation.mint_written_provenanced_rust_artifact only. Fixture scaffold uses lib crate so emitted add fn compiles; CargoGreen advances only after cargo build executes (SourceProduced first). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Meet review-ready conditions: merge main, closure post-emit, quarantine. Merge main (#7704 landed). Bind realized_closure inside candidate_generation only after generate_rust_emission_candidate succeeds; remove caller-supplied closure parameters. Point acceptance quarantine probe to long-lane witness; update roadmap authority entry. Wet smoke still PASS on write_rust_workspace path. Co-authored-by: Cursor <cursoragent@cursor.com> * Rebase onto main (#7719 witness admission, #7720). Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com> * Sync stage0_std_core crate index after rebase regen. Removes std_keyed_row/std_keyed_roster module paths dropped by main; required for regen_stage0 --verify split-crate boundary check. Co-authored-by: Cursor <cursoragent@cursor.com> * Sync stage0 measure/schedule emit after trait-derive Clone bounds. Fresh self-emit adds Clone generic param bounds on std_measure helpers; regen_stage0 --verify was failing on CI regen_verify_gate_passes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Address review 47861: drop orphan proof plan, fix long-lane reasons. Delete unused direct_rust_door_proof_plan (enrollment is falsifier_substrate_long_lane_rows). Witness notes cite that authority with local recipes. SubstrateLongLaneRow reasons separate eval-budget routing from the ingest-path functional gap on closing-contract witnesses. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two receipts asserted facts their mechanisms cannot support, and one counter measured the wrong quantity. Both cost real diagnosis time this week. This PR fixes the honesty; the baseline defect underneath (1) gets its own PR, deliberately.
1. The empty-observation narrow (affected-set)
A zero-changed-path observation was rendered as the verdict
N unaffected (import-closure, skipped without resolve). Those are different states: one says the diff proves these rows unaffected, the other says the comparison could not express what changed.This is the exact mirror of DESIGN §5's absorbing fallback. There, a mechanism that cannot compute the affected set substitutes the superset — ⊤-as-answer conflated with ⊤-as-ignorance. Here it substitutes the empty set — ⊥-as-answer conflated with ⊥-as-ignorance. It does not widen, it narrows to nothing, which is strictly worse than the case §5 already forbids: a widen is merely expensive, a narrow is silently uncovered.
It is not hypothetical. A push whose baseline ref is the pushed ref diffs the commit against itself.
30774223741(eb3dd3c) and30773369033(bd3968a) both report an identical4118 unaffectedon two different commits. A skip count cannot be a function of a diff it does not depend on.src/v2/test/claim/round_trip/dag_comment_wall_test.dag. All four executed on its own PR run30761160726; none executed on the main-push run30764935708that merged them. No line named the entry either way — skips are counted, not narrated.compile-cleansays the quiet part out loud:compile-clean scope: empty touched-path set — whole-tree baseline (diff observed nothing, or could not observe).One observation, three consumers, three different copings — compile-clean widens to whole-tree (fail-closed, correct), regen gates on
GITHUB_EVENT_NAME(a workaround, and its own comment admits the empty diff), the witness floor skips (fail-open). Three behaviors from one fact is not three reasonable local choices; it is the signature of an observation that is wrong, and §6 says root-cause to the layer rather than patch the subsystem.What changed here: the Applied report renders that state as its own sentence, located by the baseline it compared against and carrying its own frequency (rows skipped under it). The baseline is read back through a projection of the existing
resolve_diff_baselineauthority (v2.workflow.floor_diff_observefloor_observe_diff_baseline_readout_for_ci) — a diagnostic read, never a second derivation.What did NOT change: the run disposition. The empty diff still has no special run arm (operator ruling 2026-07-05, PR-A dissolved it into the general disposition and it must not be resurrected). What was missing was not an arm but the state's visibility — this line neither widens nor narrows the run.
2. Release is not eviction (schedule retention)
decrement_closurecounted an eviction for every closure name reaching refcount zero, whether or not it had cache keys to drop. Arming spans the whole discovered roster while the affected set resolves a subset, so the counter over-reported by the entire unresolved population: a live receipt readschedule_evictions=2200againstmodules_refcounted=2200andtyped_cache_peak=883— a claim to have evicted every module it had ever heard of, ~2.5× the modules ever cached. A counter that equals the arm count by construction carries no information at all.Release (refcount → 0) and eviction (cached state actually dropped) are now separate facts, counted apart:
released_modules/evicted_modules,schedule_releases/schedule_evictions.3. The per-entry drain label
entry='…'was read as proof the entry had been scheduled and executed — independently, by two readers, hours apart — and sent the diagnosis of (1) down a false path.index_arm_schedule_retentionwalks every discovered row before any predict-skip, so the line appears for entries the affected set never resolved. It witnesses one thing: the schedule moved past that entry. It is nowschedule_passed_entry='…', with a legend on the ARMED receipt. That two independent readers misread it is a property of the label, not of the readers.Evidence (executed, not asserted)
.dagwitnesses PASS indag/test/claim/executor_schedule_retention_test.dag(2 new rows), viaclaim_batch.unreconciled_module_releases_without_evicting— new discriminating control. Re-fusing the two counters was executed and reds it (1 → 2).no_observed_change_is_reported_as_its_own_state_not_as_unaffected— both directions asserted against identical counts, so the observation state is the only discriminator.diff_baseline_readout_answers_or_refuses_but_never_fabricates— executes the new.dagprojection live: answers for a push, and carries the model's refusal for apull_requestwith no base ref rather than fabricating a base.schedule_retention_policy_matches_modeled_authorityextended — the two new modeled facts are pinned in lockstep with the Rust realization, so a policy edit that forgets either side reds.cargo fmt --all --checkclean. Two failures inwitness_layer_roots_compile_clean_tests(source root does not exist: dag) reproduce identically on a stashed tree — pre-existing, not from this change.DESIGN.md
Adds one entry to the recurring-failure-modes list: empty-observation narrow, with the receipt. §4b requires every newly discovered error class to file a row; this is that row. Called out explicitly so review can reject it cheaply if the class belongs elsewhere.
Follow-up (separate PR, by decision)
The push baseline itself: a push's predecessor is its own before-SHA (the GitHub push webhook
beforefield), not the default branch, and an absent/zero SHA must refuse — never self-compare, never fall back to the default branch. It changes what every main push runs, which touches the five-minute-CI-gate lane, so it gets its own review and receipt — including an explicit statement of where regen's cold control lives once it no longer rides on a broken baseline, and whether the 4-hourly falsifier remains the declared cold lane. A cold control that survives only as an accident of a bug is not a control.Session state (sleek-dove-87, recorded 2026-08-03 for the wind-down)
DONE and green by execution. Everything in this PR. All 4
.dagwitnesses inexecutor_schedule_retention_test.dagPASS; the three new Rust tests pass;cargo fmt --all --checkclean. The discriminating control was falsified, not assumed: re-fusingschedule_releases/schedule_evictionswas executed and redsunreconciled_module_releases_without_evicting(1 → 2). The DESIGN.md change was made through its carrierdag/gunbc/design_document.dag—witness_committed_is_fixed_pointand its red control both PASS, so the projection is byte-identical.Merge readiness. 2 distinct approving providers (claude, cursor), no REQUEST_CHANGES,
mergeable=MERGEABLE. All five checks on run30781107628are COMPLETED:build,regen,heal_generated_artifactsand the floorci(41m49s) are SUCCESS;deploy_dashboard_srv1is SKIPPED. One caveat for whoever merges from this body: the dashboard summary reportschecks: pending, which is the skipped deploy job being read as pending —gh pr view --json statusCheckRollupshows every check COMPLETED and nothing failing. Nothing is blocked on me. Per standing policy I have not merged.Not code, worth keeping — the merge hazard on
design_document.dag. Two sessions editing that file both rewrite the same long single-line string literals, and a direct two-way comparison against main gives false alarms. The check that works is a three-dot diff, plus a pure-insertion oracle: strip the common prefix and suffix from the-/+pair; if deleting the inserted middle from the+line reconstructs the-line byte-for-byte, the edit is a pure insertion and cannot have silently dropped prior text. My change was a pure insertion of 935 of 939 characters.grep -con a long single-line literal counts lines containing the match, never occurrences — it will report1for a doubled insertion.What I would do next if I continued. Nothing on this PR. It is finished; it needs a merge decision, not more work.