Repository navigation
Split the retiree-roster claim from #11800 into two authorable reds, and repair the file's resolve after #11762 - #11842
Merged
Merged
Conversation
…production refusal review 69106: `retired == required_retirees_for_host(host: srv1)` was f(x) == f(x) (the subject's retired_units IS that call), and the test-side disjointness fold compared two sets derived on opposite sides of gunbc_runner_slots_per_host. Neither had an authorable red. Both are deleted; the argv equality and the portable_remote_words admission stay. The relation the stale 38 stood in for is now asserted through transition_population_agreement: the real roster plus the subject's top desired unit (from the deploy row, an independent producer) must be refused naming exactly that unit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…le's resolve after #11762 Side-chat changes on #11842: the argv claim keeps only its own subject (length(retired) > 0, the argv literal, portable_remote_words admission); every_desired_srv1_unit_is_outside_the_retirement_manifest plants the whole desired roster beside the real retirees and requires transition_population_agreement to name exactly the desired roster. Also repairs main: #11762 deleted gunbc_runner_slots_per_host while #11800 added it as an import here, so every claim in this file refused to resolve. srv1_width() now reads gunbc_runner_committed_width (Int?; the unresolved arm yields an empty listing, and the two pure-refusal consumers gain a length > 0 conjunct so an empty listing cannot pass vacuously). The new TransitionPopulationUndecidable arm closes to false. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The authorability sentence cited gunbc_runner_slots_per_host and transition_required_retirees, both superseded by #11762; it now names transition_required_retirees_at and the slot: target + 1 range start the evidence run actually mutated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Author
|
review 69250 addressed in 7d5d27d: the authorability annotation now names the live mutation — — sent from nimble-swift-273 |
# Conflicts: # dag/test/claim/runner/runner_host_file_converge_witness_test.dag
Ledger-Repair-Judged: docs/design-rung-drops.md Heal-Candidate-Run: 35533936549
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Sep 20, 2026
# Conflicts: # ROADMAP.md
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.
Repairs a decoration that landed on main in #11800 (efe292a), found by review 69106, and — discovered while doing so — a live main breakage in the same file. Work item
node://adhoc-aa9e0221-13a, parent sunny-ant-606.1. The decoration (review 69106)
the_real_srv1_retiree_roster_reaches_one_admitted_readintest.claim.runner.runner_host_file_converge_witness_testcarried two conjuncts with no authorable red:retired == required_retirees_for_host(host: operator_host_srv1)— f(x) == f(x):runner_host_file_subjectsetsretired_unitsto that very call.retiredanddesired— both derive from the width authority on opposite sides of it, so disjoint by derivation.Both are deleted; no count literal is restored; no assertion whose two sides come from one production call is added (exact manifest correctness stays
runner_slot_retirement_witness_test's proposition).2. Two claims, one interface each
the_real_srv1_retiree_roster_reaches_one_admitted_read— narrowly:length(retired) > 0, the argv literal,portable_remote_wordsadmits it. Its red lives in the cgroup read batching / argv transport.every_desired_srv1_unit_is_outside_the_retirement_manifest(new sibling) — plants the whole desired roster beside the real retirees as an observed surplus and requiresgunbc.runner_width_transitiontransition_population_agreementto answerDisagrees { unexpected }withunexpectedequal to exactly the desired roster (length(desired) > 0as a conjunct;AgreesandUndecidableare false). It proves one cross-authority exclusion relation — every identity the deploy currently desires is outside the transition obligation — not that the manifest is exact.Why its red is authorable in production. The two sides are independent producers:
desired_unitscomes from the deploy row'srunner_countviadesired_runner_slot_members; the obligation from the transition row viatransition_required_retirees_at. Changing production alone —slot: target + 1→slot: targetintransition_required_retirees_at(the off-by-one that counts the top desired-live slot as a retiree, the stale-38 class) — absorbs a desired unit into the manifest, it vanishes fromunexpected, and the exact-list equality fails. Planting the whole roster (not one unit) means a later non-contiguous widening that absorbed any other desired unit fails it the same way. An always-Disagreesfold fails it too, since the list must name the desired roster alone.3. The width migration — and what it is and is not load-bearing for
gunbc.runner_slot_allocationgunbc_runner_slots_per_hostwas deleted by #11762 in the same window that #11800 added it as an import of this file, so for a while every claim in this file refused to resolve on main and no required lane noticed (v2.workflow.required_floorrequired_gate_prefixescarries nodag/test/claim/runner/row, so the file is never resolved unless a diff touches it — DESIGN §3 "the deletion is the census — but only over the population a run compiles", caught in the wild).That import break is already cleared on main by #11871, not by this PR. This PR is therefore not load-bearing for the floor/parse chain. What it replaces is #11871's repair itself: that one returns
0 - 1fromsrv1_width()on the unresolved arm — a fabricated sentinel (DESIGN §5), and one that would startsrv1_retiring_namesat slot 0. Heresrv1_width()isInt?; the unresolved arm yields an empty listing from the four width-derived helpers, and every consumer was audited so that cannot become an absorbing fallback: five carry a positive conjunct no unit can satisfy on an empty listing (every_unit_holds,population_holds, an effective population); the two pure-refusal claims (a_declared_live_slot_missing_from_the_host_refuses,an_unread_omitted_retiree_refuses) gained alength(...) > 0conjunct. TheTransitionPopulationUndecidablearm from #11762 closes tofalse.So the PR's value rests on two things: the claim-quality repair (§1–2) and replacing the
0 - 1sentinel with the typed arm.Evidence
claim_batchbuilt from this exact head into a privateCARGO_TARGET_DIR:/tmp/nimble-swift-273-target/release/claim_batch, sha2569c0882411376f303a92a3a8deb984eaa15598da42f301a77a79290f91b7db7a520a471d8de5(main merged through87c6658641e; zero commits behind main at build time), worktree clean, built 2026-09-20 19:56:42–19:58:58 UTCcba30e3b…; 15:52Zc5cea50c…at9f7d5893f82; 17:51Z295d7697…at3d52ee3487d) are superseded; every re-take reproduced the same verdicts and eval-step counts exactly.One targeted invocation per arm,
GUNBC_MEMORY_BUDGET_BYTES=16GiB, the same four claims:slot: target + 1→slot: targetintransition_required_retirees_at, test untouched)the_real_srv1_retiree_roster_reaches_one_admitted_readevery_desired_srv1_unit_is_outside_the_retirement_manifesta_declared_live_slot_missing_from_the_host_refusesan_unread_omitted_retiree_refusesThe argv claim stays green under the mutation that reds the transition claim — the two controls are independent. Mutation reverted; worktree clean after.
🤖 Generated with Claude Code