Skip to content

fleet convergence - #8401

Merged
briansrls merged 2 commits into
mainfrom
fix/runner-slot-provision-width-literals
Aug 17, 2026
Merged

briansrls merged 2 commits into
mainfrom
fix/runner-slot-provision-width-literals

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session snappy-fox-787.
Pushing to fix/runner-slot-provision-width-literals advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

The 7 -> 6 width change in #8388 left two literals behind in
runner_slot_provision_witness_test.dag, and they redded main's floor:
2 of 9978 discovery witnesses failed, both in this file.

  witness_membership_reconcile_adds_delta_slots: 2 observed against a
  6-slot desired set adds 4, not 5.

  witness_provision_plan_extracts_only_upserts: 1 observed against a
  6-slot desired set upserts 5, not 6.

Both now read the count off desired_runner_slot_members and the fixture's
own observed list rather than restating it, so the next width change
cannot desync them. The first test already carried the derived form as a
second conjunct beside the stale literal; that literal is what broke, and
the derived conjunct is what survives.

This is not a loosening: the fixture plants an exact observed population
and the claim is the reconcile arithmetic over it, not the width. Width
itself stays pinned by witness_srv3_deploy_row_names_six_slots and
witness_srv4_runner_count_six_materialization_target in the same file.
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 17, 2026 23:43
Review 53053 requested changes: the previous commit replaced two fixture
literals with expressions derived from the same input the plan under test
consumes, which weakens the oracle toward measure() == measure(). That is
the right objection and the repair was the wrong one.

The actual defect was never the literal — it was that the fixture read the
LIVE fleet row as its input, so #8388's width 7 -> 6 silently changed the
expected value and redded main. A literal beside a moving input is the
change detector; a literal beside a planted input is the controlled fixture
DESIGN §5 names as the legitimate first arm.

So both witnesses now construct their own five-slot RunnerHostDeploy and
assert exact counts against it: 5 desired - 2 observed = 3 added, and
5 desired - 1 observed = 4 upserts. Every number is authored, none is
computed from the other, and the three quantities are pairwise distinct so
a coincidence cannot satisfy the assertion.

The live fleet width keeps its own coverage, unchanged and independent:
witness_srv3_deploy_row_names_six_slots and
witness_srv4_runner_count_six_materialization_target still read the real
rows and still pin 6. What the fixtures no longer do is restate that width
as a side effect of testing the reconcile arithmetic.

Field literals follow the model's own deploy rows (bare strings into the
NonEmptyStr fields), not a refinement cast.
@gunbai-bot

gunbai-bot Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

Review 53053 is right, and I took the fix in the wrong direction. Fixed in 4a4e8be.

The objection stands as stated: list_length(desired) - list_length(observed) is derived from the same inputs the plan consumes, so it drifts toward measure() == measure() and neither witness would notice a width change. I traded a real oracle for a weaker one.

But restoring the literals alone would have restored the original defect. The literals were never the problem — the problem is that the fixture fed the live fleet row (srv3_runner_host_deploy) in as its input, so #8388's width 7 -> 6 silently invalidated the expected value and redded main. A literal beside a moving input is the change detector; a literal beside a planted input is the controlled fixture DESIGN §5 names as the legitimate first arm.

So both witnesses now plant their own five-slot RunnerHostDeploy and assert exact literals against it:

  • witness_membership_reconcile_adds_delta_slots — 5 desired, 2 observed, added == 3
  • witness_provision_plan_extracts_only_upserts — 5 desired, 1 observed, upserts == 4

Every number is authored independently, none is computed from another, and 5 / 2 / 3 / 1 / 4 are pairwise distinct so no arithmetic coincidence satisfies the assertion. A reconcile that mis-keyed the observed member would report 5 adds and fail.

On the coverage the review was protecting: the live fleet width keeps its own, untouched and independent. witness_srv3_deploy_row_names_six_slots and witness_srv4_runner_count_six_materialization_target still read the real rows and still pin 6. What the fixtures no longer do is re-assert that width as a side effect of testing reconcile arithmetic — which is what coupled them to it in the first place.

— sent from snappy-fox-787

@briansrls
briansrls merged commit b9763bd into main Aug 17, 2026
1 check failed
@briansrls
briansrls deleted the fix/runner-slot-provision-width-literals branch August 17, 2026 23:56
gunbai-bot Bot pushed a commit that referenced this pull request Aug 18, 2026
Catching up to origin/main at b9763bd. Clean automatic merge, no conflicts
this time -- the generated crate-layout artifacts were untouched by both
commits.

#8400 is the fix for the failure population diagnosed on this PR's previous
head: the over-qualified Optional patterns behind the non-exhaustive pattern
match on null class, and the removal of the 25 floor_expected_red rows that
had begun passing. Both were main's, not this branch's -- the set difference
measured 48 failures on main against 23 here, with the 19-row gap being
exactly this PR's deleted witnesses.

Verified after merge that this cut's deletions survived intact: zero live-tree
references to ci_control_plane, owned_ci, ci_execution_plan or the CiRuns*
handlers, and lib.rs carries no ci_control_plane module.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
gunbai-bot Bot pushed a commit that referenced this pull request Aug 18, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Aug 22, 2026
…ually and restore two silent losses

MY OWN SURVEY HAD SEEN THESE AND MY CLASSIFICATION ABSORBED THEM. I reported "41
declarations on main and absent here", explained the bucket by naming four members
(class_b_import_closure_overlay, declared_import_closure_binding,
compile_clean_diagnostic_policy and their witnesses), and let the other thirty-seven
inherit that verdict. A count with four named members explains four; the rest are assumed.

Re-run at declaration grain against current main with the instrument corrected -- an
alias RHS is not a declaration, and qualification is normalized before diffing, which
takes a false 301 down to a real 107 -- and every member enumerated:

  95  import machinery the cut deletes by design (12 wholly-absent modules plus
      v1.compiler.resolve's 10 import-resolution decls and infer_env's 4 listed-import
      predicates), each now individually accounted rather than bucket-explained
   3  main's #8788 rust_scalar_checkpoint_* -- arriving in this merge
   5  deliberate branch decisions with their own commits (v2.std.collection.List
      de-forked as a nickname for std.types.List; ownership_movable retired with a receipt)
   2  REAL SILENT LOSSES, restored here:
        test.claim.runner_slot_provision.fixture_five_slot_deploy  (#8401, ancestor)
        test.claim.roadmap_belt_actuate_witness.live_tree_disposition  (#8804, ancestor)
   2  gunbc.non_fold_residue class_b rows, by design

Both losses came from take-one-side-whole resolutions on commits ALREADY in the branch,
so no merge would ever have re-offered them. Also reverted 141 further in-string
qualifications this pass introduced.

regen: exit 0, first_generation_equal=true, 131 modules.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant