A fix lands where the finding pointed, not everywhere the rule lives — six measured instances in one sweep #257

Open
opened 2026-08-25 19:09:42 +00:00 by jbr870 · 2 comments
Owner

Spawned from finding F-PO-43-5-15 (out-of-scope) on issue #43 during decision D-PO-43-5-9, at the round-1 sweep.

Original scope note: CR-2 fixed []-means-could-not-judge for identity classes and workers reproduces it in the same rewrite (CR-33). CR-17 fixed a permissive paraphrase in qa-playbook and CR-12's fix created a new one in the same file 80 lines away (CR-37). CR-4's fix is guarded by a test that proves nothing (CR-31). CR-27 narrowed §8.4 without updating §7 (CR-32). CR-10 added a field §7 never consults and no entry populates (CR-34, CR-36). CR-21 widened §2 without touching §5 or §8 (CR-35). This is the drift AC-14's lint check exists to catch, but that check guards six anchor phrases and nothing else. fix-workflow.md §2's convergence rule is directly on point: a second re-validation finding of the same CLASS as the one just fixed ends the patching, and its two exits are a round explicitly framed at the class, or deferral with the residue recorded — not a third patch pass of the same shape. Raised as a finding rather than acted on, because choosing between those exits is the operator's call.

Disposition rationale: [CR-45] This is a finding about the design, not a defect in it, and acting on it inside the round it indicts would be the error it describes. Six of this sweep's fifteen findings are the round's own fixes landing where the finding pointed rather than everywhere the rule lives. fix-workflow.md section 2's convergence rule is directly on point and offers exactly two exits: a round explicitly framed at the class, or the class deferred with the residue recorded as a Finding. This resolution takes the second exit deliberately and on the operator's instruction, which is what makes the remaining fix-now items a scoped completion rather than a third patch pass. Resolved under the operator's explicit choice of round-2 strategy this session — presented three options (blockers-only, full round, reassess the design) and instructed to proceed with the first — so this follows the recommender rather than overriding it. The recommendation itself is disposition-recommend.sh's, computed from the finding's fix_cost, feature_value, adjacent_to_blocking and category.

This issue was deferred out of the parent feature's scope; it carries no PREQ yet. Run /dev:requirements --issue={new-number} to flesh it out before planning.

Spawned from finding `F-PO-43-5-15` (out-of-scope) on issue #43 during decision D-PO-43-5-9, at the round-1 sweep. **Original scope note:** CR-2 fixed []-means-could-not-judge for identity classes and workers reproduces it in the same rewrite (CR-33). CR-17 fixed a permissive paraphrase in qa-playbook and CR-12's fix created a new one in the same file 80 lines away (CR-37). CR-4's fix is guarded by a test that proves nothing (CR-31). CR-27 narrowed §8.4 without updating §7 (CR-32). CR-10 added a field §7 never consults and no entry populates (CR-34, CR-36). CR-21 widened §2 without touching §5 or §8 (CR-35). This is the drift AC-14's lint check exists to catch, but that check guards six anchor phrases and nothing else. fix-workflow.md §2's convergence rule is directly on point: a second re-validation finding of the same CLASS as the one just fixed ends the patching, and its two exits are a round explicitly framed at the class, or deferral with the residue recorded — not a third patch pass of the same shape. Raised as a finding rather than acted on, because choosing between those exits is the operator's call. **Disposition rationale:** [CR-45] This is a finding about the design, not a defect in it, and acting on it inside the round it indicts would be the error it describes. Six of this sweep's fifteen findings are the round's own fixes landing where the finding pointed rather than everywhere the rule lives. fix-workflow.md section 2's convergence rule is directly on point and offers exactly two exits: a round explicitly framed at the class, or the class deferred with the residue recorded as a Finding. This resolution takes the second exit deliberately and on the operator's instruction, which is what makes the remaining fix-now items a scoped completion rather than a third patch pass. Resolved under the operator's explicit choice of round-2 strategy this session — presented three options (blockers-only, full round, reassess the design) and instructed to proceed with the first — so this follows the recommender rather than overriding it. The recommendation itself is disposition-recommend.sh's, computed from the finding's fix_cost, feature_value, adjacent_to_blocking and category. This issue was deferred out of the parent feature's scope; it carries no PREQ yet. Run `/dev:requirements --issue={new-number}` to flesh it out before planning.
Author
Owner

Folded in from the round-3 QA sweep on issue #43 (Phase Outcome PO-43-7).

Measured by an executing adversarial reviewer, not inferred. Deferral rationales are on #43 as decision-resolution:v1 comments.


[code CR-64] CR-47's regression scenario is vocabulary-coupled only: it detects a missing verdict word, not a wrong disposition.

Severity: low

Measured: rewriting step 4's budget line to 'ignore budget entries entirely; they never affect triage' — semantics inverted, the word budget retained — leaves scenario_cr47_step4_lacks_verdict_branch PASSING, suite rc=0. The fix report already conceded word-presence cannot check disposition, and the driver read step 4 in full for exactly that reason. Recording the measurement so the limit is on the record rather than in a reviewer's memory: the class's only mechanical guard sees vocabulary drift and not disposition drift — which is precisely what CR-58 is.

Proposed action: Record as a known limit; strengthening it is a design question for #257.


Folded in from the round-3 QA sweep on issue #43 (Phase Outcome PO-43-7). Measured by an executing adversarial reviewer, not inferred. Deferral rationales are on #43 as `decision-resolution:v1` comments. --- ## [code CR-64] CR-47's regression scenario is vocabulary-coupled only: it detects a missing verdict word, not a wrong disposition. **Severity:** low Measured: rewriting step 4's budget line to 'ignore budget entries entirely; they never affect triage' — semantics inverted, the word budget retained — leaves scenario_cr47_step4_lacks_verdict_branch PASSING, suite rc=0. The fix report already conceded word-presence cannot check disposition, and the driver read step 4 in full for exactly that reason. Recording the measurement so the limit is on the record rather than in a reviewer's memory: the class's only mechanical guard sees vocabulary drift and not disposition drift — which is precisely what CR-58 is. **Proposed action:** Record as a known limit; strengthening it is a design question for #257. ---
Author
Owner

Linked: this issue is sibling #452 (recorded by the devwork pipeline).

Linked: this issue is **sibling** #452 (recorded by the devwork pipeline).
Sign in to join this conversation.
No description provided.