Late-gate routing rule: test_path offenses dispatch to test-lint-fixer #313

Closed
opened 2026-08-07 12:55:20 +00:00 by jared · 1 comment
Owner

Question

How does the existing late lint stage (autocorrect → lint gate → lint-worklist → lint-fixer fanout, plus the lint-fixer-single loop path) split offenses by file location so files under test_path dispatch to test-lint-fixer while others go to lint-fixer? Both dispatch paths must be covered — the #261 deadlock arose in the re-dispatch loop. Depends on the test-lint-fixer charter (#312).

Map: #310

Blocked by #312

## Question How does the existing late lint stage (autocorrect → lint gate → lint-worklist → lint-fixer fanout, plus the lint-fixer-single loop path) split offenses by file location so files under test_path dispatch to test-lint-fixer while others go to lint-fixer? Both dispatch paths must be covered — the #261 deadlock arose in the re-dispatch loop. Depends on the test-lint-fixer charter (#312). Map: #310 Blocked by #312
jared self-assigned this 2026-08-07 13:10:06 +00:00
Author
Owner

Resolution (2026-08-07)

Routing rule: agent selection is a pure function of the assignment file's path. A lint assignment file whose target is under test_path dispatches os-sdlc:test-lint-fixer; any other file dispatches os-sdlc:lint-fixer. The rule applies at every dispatch point — the lint-worklist fanout AND the lint-fixer-single re-dispatch loop (where the #261 deadlock actually occurred). No new rows, no worklist restructuring: the existing per-file assignment machinery is reused unchanged; only the agent name varies by path. Per ADR-0097 discipline the routing function lives in tested Ruby under lib/os_sdlc/transition_table/, never in skill prose.

No refusal machinery (per #312): a persisting offense after dispatch is the stepper's ordinary gate failure — now with a worker chartered to act on every file class, the #261 staffing gap is closed structurally.

Conditional green re-run: when any test file was edited at the late gate, green-assert re-runs before proceeding to ac-lint/review — the mirror of #311's red-assert bracket, deterministically verifying the assertion-set invariant held. When only production files were fixed, no re-run; zero cost on that path.

## Resolution (2026-08-07) **Routing rule: agent selection is a pure function of the assignment file's path.** A lint assignment file whose target is under test_path dispatches os-sdlc:test-lint-fixer; any other file dispatches os-sdlc:lint-fixer. The rule applies at every dispatch point — the lint-worklist fanout AND the lint-fixer-single re-dispatch loop (where the #261 deadlock actually occurred). No new rows, no worklist restructuring: the existing per-file assignment machinery is reused unchanged; only the agent name varies by path. Per ADR-0097 discipline the routing function lives in tested Ruby under lib/os_sdlc/transition_table/, never in skill prose. **No refusal machinery** (per #312): a persisting offense after dispatch is the stepper's ordinary gate failure — now with a worker chartered to act on every file class, the #261 staffing gap is closed structurally. **Conditional green re-run:** when any test file was edited at the late gate, green-assert re-runs before proceeding to ac-lint/review — the mirror of #311's red-assert bracket, deterministically verifying the assertion-set invariant held. When only production files were fixed, no re-run; zero cost on that path.
jared closed this issue 2026-08-07 13:11:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#313
No description provided.