run-resource-claims §7 step 4: how do the rule, its restatements and its guards stay in agreement? #483
Labels
No labels
component:adapters
component:lifecycle
component:qa
component:setup
component:shared
component:worktrees
phase/accepted
phase/backlog
phase/deployed
phase/developing
phase/integrating
phase/planning
phase/qa
phase/requirements
phase/uat
priority:critical
priority:critical
priority:high
priority:high
priority:low
priority:low
priority:medium
priority:medium
type:bug
type:chore
type:docs
type:feature
type:infra
type:tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
jbr870/devwork-skills#483
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Routed here from issue #43's QA (Phase Outcome PO-43-11,
next_state: requirements), under astopping rule agreed with the operator before round 7 ran.
What this is not
It is not the contract. After seven QA rounds
run-resource-claims.mdis verified sound. Round7's sweep found no High, no false green and no safety inversion in shipped behaviour, and confirmed
by execution — not by reading — that the padding wrapper's behavioural enumeration is complete, that
workers: Nis consistent everywhere it is used, that §4's four verdicts are each disposed of, andthat no consumer restates a rule it should defer to.
What this is
Every edit to §7 step 4 desynchronises something that verifies it. Five hits on one sentence:
workers: Nwas undefinedCR-87 is the sharpest: a fix changed the document and left the restatement in the same file it was
editing. Nothing keeps the two in step, and nothing noticed.
The question to answer
How do §7 step 4's rule, its restatements, and the guards over it stay in agreement? Candidate
directions, none of them decided:
finally fixed CR-77 after two failed attempts at the sentence).
Findings routed here
[code CR-86] scenario_cr77 is fold-blind to a wrapped reintroduction of the defect it guards — CR-84's property, in a scenario round 7 itself authored.
Severity: medium
Driver-measured by insertion after a replacement probe went no-op. cr77 folds step 4 with a plain
tr '\n' ' 'and no leading-# strip, unlike cr74 and cr78. Injecting the pre-fix phrase UNWRAPPED makes cr77 FAIL correctly; injecting the identical phrase WRAPPED across a #-comment break makes it PASS. Same insertion, only the wrap differs, isolating the wrap as sole cause. It is not literally dead — it fails on the unwrapped shape — but the wrapped shape is exactly what a reword-plus-hard-wrap produces, and CR-84 warned that CR-77's sentence is the one future fixes would touch. The F9 brief flagged that interaction explicitly and the fix stage stripped only cr74's fold. By the accounting this QA has used, where cr74's identical property was called the tenth dead assertion, this is the eleventh.Proposed action: The same sed 's/^#:space:*//' cr74 and cr78 already use — but route it through the verification-tier requirements pass rather than an eighth patch round.
[code CR-87] The harness helper step4_disposition still implements the pre-CR-77 arithmetic, so the measuring instrument now contradicts the document it measures.
Severity: medium
Driver-confirmed by reading the helper and the fixed document. step4_disposition computes total = overrun + peer_workers and has no parameter for the triaged actor's own claim; the document now requires 'every open actor's claimed workers, the TRIAGED ACTOR'S OWN claim included, plus that excess'. On CR-77's own worked example — pool 8, triaged claims 4 with excess 1, peer claims 4 — the document says VOID (9 > 8) and the helper says recorded (5 <= 8). Before the fix the two agreed; the fix changed the document and left the restatement, in the same file it was editing. No current fixture crosses the boundary, so no scenario asserts a wrong verdict today — hence Medium — but it is literally a defect created by round 7's own fix, in the permissive direction, and it is the fourth entry in this one sentence's restatement chain after CR-58, CR-74 and CR-77.
Proposed action: Give the helper the own-claim term, or stop it restating the formula at all.
[code CR-88] Step 4's budget total collapses time: it sums every actor whose window intersects, not every actor concurrently open.
Severity: medium
Measured. Pool 8; triaged actor claims 2 with excess 1; peers B and C each claim 3, both intersecting the triaged window, but B released before C dispatched. Step 4's formula gives 2+3+3+1 = 9 > 8 and voids; true concurrent peak is 6 and it should record. §4's own fence is instantaneous — 'every actor dispatched and not yet released' — while step 4's restatement sums over the whole window. Conservative direction, which is the contract's deliberate error direction, and pre-existing rather than introduced by round 7, which fixed only the own-claim term. It borders #354's deferred executable sum test but is not covered by it: the prose formula itself overcounts.
Proposed action: Decide whether the total is instantaneous or window-wide, and say so in one place.
[code CR-90] cr77's semantics guard accepts the opposite definition of N, so a future flip would not fail it.
Severity: low
Its regex passes on 'total workers in use' language as well as on 'excess beyond claim'. A future edit that flipped N's definition — breaking the padding rule's coherence, which is precisely what CR-77 was about — would leave the scenario green. Guard-looseness against a hypothetical future edit rather than a live defect, and it belongs with the verification-tier work rather than on its own.
Proposed action: Pin the definition, not merely the presence of a definition.
Evidence
All of it is on #43:
qa-report:v1comments for every round's validate/tests/fix phases, CR-1..CR-91in
code-journal.md, and the dispatch journal's DISCOVERY entries. The measurements behind CR-86 andCR-87 are in PO-43-11's finding text and were reproduced by the driver independently of the sweep.
Run
/dev:requirements --issue={this}before planning.