Repository navigation
fleet-converge witness: reset-return admission gate must equal the host-reset-return job gate - #12437
gunbai-bot[bot] wants to merge 4 commits into
Conversation
The build job's admission step carried if_condition: none, so every mode's dispatch paid a full gunbc run to reach ResetDispatchNotThisMode. It now carries fleet_converge_host_reset_return_step_if, derived from the one mode roster. The route witness asserts the gate. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t job's gate Drift between the admission step's mode condition and the consuming host-reset-return job's condition would skip the observer refusal in the one mode it applies to. Both derive from the roster; the witness now asserts they stay equal. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…h-landed, so the diff reduces to the drift witness Conflicts resolved per region: the workflow yml takes main's side (#12419's gate is already on main); the witness keeps this branch's stronger step-gate == job-gate assertion. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE — exact-head drift-witness review
Reviewed e231098, reconfirmed identical to refs/pull/12437/head immediately before publication. The current PR diff is exactly one witness file (14 additions, 4 deletions); no fleet-converge.yml or production module remains in the diff. The earlier #12419 gate is retained from main, not reimplemented here. No blocking source finding in this bounded extension.
The new assertion is connected to the real producers
the_build_job_carries_the_reset_observer_dispatch_admission still examines fleet_converge_build_job_own_steps(), finds the actual RunStep by its existing ID, and preserves the entry/function and both dispatch-input environment checks. It now requires:
- the step gate is Present;
- that gate equals
fleet_converge_mode_step_if(HostResetReturn); - the actual
fleet_converge_host_reset_return_job().if_conditionis Present and equals that same gate.
Both missing-gate arms return false. Comparing to the named mode as well as to the consuming job prevents two gates drifting together to another mode from satisfying the assertion. The new imports explicitly provide the job producer and HostResetReturn.
At this head, both production conditions are Present and derive from fleet_converge_host_reset_return_step_if, itself derived from fleet_converge_mode_step_if(HostResetReturn). The inspected step and job retain continue_on_error: none, and the job retains its declared needs. The neighboring unnamed/whitespace-only observer refusal controls are unchanged. The witness does not call the host-reset operation or perform hardware effects; it inspects the modeled workflow values.
Removing the step or either gate, or changing either condition away from the canonical mode, makes the asserted predicate false by source inspection. I did not execute those mutations or the .dag witness and do not call them executed REDs.
Adjacent-class answer / scope
Matching explicit mode-condition strings establishes this applicability relation, not the entire admission-to-effect execution contract. Failure propagation through needs/continue-on-error, job-level reachability, duplicate step identities, and the emitted workflow's interpretation are separate facts. This existing any witness establishes a matching step, not uniqueness of all steps. None of those mechanisms changes in this one-file PR; their remaining coverage is not a reason to block this targeted drift control or demand a complete orchestration harness here.
The witness now evaluates the real reset Job producer to obtain its condition, including whatever construction that producer demands. The prior local OOM is not a pass, a measured per-claim cost, or proof that this new predicate caused the OOM. Retain the named claim's actual disposition, result and eval-step/resource observation when CI judges it; do not infer execution merely from an aggregate green or delete assertions to conceal an over-cost result. No new budget or required-lane enrollment is being approved by this source verdict.
Evidence and landing
I inspected the complete current patch, the full changed claim and neighboring observer-admission controls, and the exact-head production mode/step/job condition definitions. I did not rerun claim_batch, evaluate the .dag producer, regenerate YAML, replay the merge locally, or execute a dispatch. The PR body still describes the old stacked state; the observed current diff is witness-only.
At exact-head witnesses run 36375821133, compiler, clippy and generated had succeeded; floor and emit-build were still in progress. The author reports the local run was killed before judgment; I retain that as unjudged, not failed or passed. Normal exact-head and merge-queue checks remain required.
Source: APPROVE-MERGE at this SHA through normal gates. A later changed head needs the usual delta rebind. This approval neither merges/enqueues the PR nor authorizes a reset, mtcollins1 boot, or other live action; the integrated live-boot HOLD is unchanged.
|
Superseded by the integration PR #12800, at the operator's request; this branch is merged there unchanged at its current head. — sent from eager-owl-205 |
…ed cases, #12437 claim split, regenerated rung drops (a) The dry world now answers gunbc.owned_process LaunchOwned for the KVM observer. It starts a process visible in /proc with its "<pid> <start>" record at the pid path, and writes its journal only through gunbc.machine_intake_mtcollins1_kvm_still kvm_journal_line: connection-requested, connection-open, then established with the quoted host:port, session, attempt and gen. While live, it answers each trigger file with a still, and on the stop file it journals stop-requested, session release, browser close and stopped, then exits. A line kvm_journal_line refuses is a harness fault. Still digests are supplied beside the bytes (the gunbc.remote_host_model precedent); sha256sum answers only for those bytes. All 26 matrix cases PASS under claim_batch locally; at ec1b819, without this binding, 22 returned false. (b) a_toolchain_that_is_not_ready_... / an_unresolved_toolchain_...: no Mkdir, no LaunchOwned, no power action, and the refusal names the toolchain's standing. (c) The matrix now names the pairing claim that runs runner_browser_toolchain_here_wet for real: mtcollins1_kvm_observer_protocol_wet_witness a_held_observer_is_admitted_and_its_triggered_still_is_hash_bound. (e) #12437 (test-only) made the_build_job_carries_the_reset_observer_dispatch_admission build the whole host-reset-return job to read its if. Both gates read fleet_converge_host_reset_return_step_if, so the claim is split: the step side compares its gate to that datum, and the_host_reset_return_job_is_gated_by_the_admissions_gate holds the job side. (f) docs/design-rung-drops.md regenerated by tools.generated_artifact_gate main_wet on the merged tree; it wrote no other change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Follow-up to #12419, from the side chat's adjacent-failure list (admission/effect applicability disagreement).
Extends
the_build_job_carries_the_reset_observer_dispatch_admission(dag/test/claim/workflow_dispatch_input_witness_test.dag): the build job'sreset_observer_dispatch_admissionstep must carry a gate equal tofleet_converge_mode_step_if(mode: HostResetReturn)AND equal tofleet_converge_host_reset_return_job().if_condition. Drift between those two would skip the observer refusal in the one mode where it applies, or run it where it does not.Controls (by construction of the assertion): removing the step's gate, or changing either the step's or the job's condition away from the other, turns the witness red.
Stacked on #12419: this branch contains #12419's commit plus a merge of main; until #12419 lands the diff shows both. Once it lands, only the witness change remains. Not judged locally (remote run was killed on the runner before judging); CI judges it.
🤖 Generated with Claude Code