run-resource-claims §7 step 4: how do the rule, its restatements and its guards stay in agreement? #483

Open
opened 2026-08-30 07:03:09 +00:00 by jbr870 · 0 comments
Owner

Routed here from issue #43's QA (Phase Outcome PO-43-11, next_state: requirements), under a
stopping 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.md is verified sound. Round
7'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: N is consistent everywhere it is used, that §4's four verdicts are each disposed of, and
that 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:

what broke
CR-58 step 4 restated §4's sum test as pairwise where §4 is global
CR-74 the restatement added the pool into the total, so it always oversubscribed
CR-77 the total dropped the triaged actor's own claim — because workers: N was undefined
CR-86 step 4's own guard cannot see a wrapped reintroduction of the defect it forbids
CR-87 the harness helper still computes the pre-CR-77 arithmetic, so the instrument now contradicts the document it measures

CR-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:

  • stop restating — have the harness extract and run the rule rather than reimplement it;
  • make the guards structural rather than phrase-matching, so a reword cannot silently satisfy them;
  • define the terms once, where they are defined, and have everything else refer to that (this is what
    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:v1 comments for every round's validate/tests/fix phases, CR-1..CR-91
in code-journal.md, and the dispatch journal's DISCOVERY entries. The measurements behind CR-86 and
CR-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.

Routed here from issue #43's QA (Phase Outcome **PO-43-11**, `next_state: requirements`), under a stopping 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.md` is verified sound. Round 7'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: N` is consistent everywhere it is used, that §4's four verdicts are each disposed of, and that 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: | | what broke | |---|---| | CR-58 | step 4 restated §4's sum test as pairwise where §4 is global | | CR-74 | the restatement added the pool into the total, so it always oversubscribed | | CR-77 | the total dropped the triaged actor's own claim — because `workers: N` was undefined | | CR-86 | step 4's own guard cannot see a wrapped reintroduction of the defect it forbids | | CR-87 | the harness helper still computes the pre-CR-77 arithmetic, so the instrument now contradicts the document it measures | CR-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: - stop restating — have the harness extract and run the rule rather than reimplement it; - make the guards structural rather than phrase-matching, so a reword cannot silently satisfy them; - define the terms once, where they are defined, and have everything else refer to that (this is what 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:v1` comments for every round's validate/tests/fix phases, CR-1..CR-91 in `code-journal.md`, and the dispatch journal's DISCOVERY entries. The measurements behind CR-86 and CR-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.
Sign in to join this conversation.
No description provided.