Add a test-required-work gate step for test-path Required-work checks #865

Open
opened 2026-10-01 11:09:46 +00:00 by jared · 1 comment
Owner

Problem

ADR-0244 runs typed Required-work checks before the suite, but the pipeline cannot route a failed check to the test-writer. A check whose glob is under the test path therefore fails twice and escalates, because programmer-repair never edits tests. #863 ruled Option A: test-writer changes the existing tests a ticket names, and a new gate step checks the result in the red round.

Observed

ADR-0244 Consequences names this gap: routing a failure to the item owner is out of scope.
A repair round that only migrates tests, with no new acceptance-criteria test in the diff, can give unexpected_pass.

Reproduce

n/a: design gap in the gate set, no single command shows it.

Approach

Add a test-required-work gate step beside retired-tests in Query::Gate::Commands. It runs only the typed Required-work checks whose glob is under the target test path. The existing required-work gate keeps the other checks.

retired-tests skips by returning no command when the ticket has no entries. test-required-work follows that form: the command is nil when the ticket has no test-path check, so no step runs.

Required work:

  1. Add the test-required-work gate command that selects typed checks whose glob is under test_path — check: present test-required-work in plugins/os-sdlc/lib/os_sdlc/**/*.rb

Acceptance criteria

  1. Given a ticket with one typed check whose glob is under test_path and one under the code path, both unmet, when the test-required-work gate runs, then it reports only the test-path check.
  2. Given a ticket with no test-path checks, when the gate commands are built, then no test-required-work step runs.

Owner sketch

class OsSdlc::Query::Gate::Commands
  def test_required_work_command
  end
end

Origin

  • Trigger: user ruling on #863, Option A, 2026-10-01
  • Improvised this session: none
  • Chain: test-path Required work escalates ← programmer-repair never edits tests ← DESIGN (docs/adr/0244, Consequences)
  • Root candidate: #863
  • Where: plugins/os-sdlc/lib/os_sdlc/query/gate/commands.rb
  • Session: 55a56279-83ee-47d5-a21e-ee67f9e28abd
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/55a56279-83ee-47d5-a21e-ee67f9e28abd.jsonl

Parent: #863

## Problem ADR-0244 runs typed Required-work checks before the suite, but the pipeline cannot route a failed check to the test-writer. A check whose glob is under the test path therefore fails twice and escalates, because programmer-repair never edits tests. #863 ruled Option A: test-writer changes the existing tests a ticket names, and a new gate step checks the result in the red round. ## Observed ADR-0244 Consequences names this gap: routing a failure to the item owner is out of scope. A repair round that only migrates tests, with no new acceptance-criteria test in the diff, can give `unexpected_pass`. ## Reproduce n/a: design gap in the gate set, no single command shows it. ## Approach Add a `test-required-work` gate step beside `retired-tests` in `Query::Gate::Commands`. It runs only the typed Required-work checks whose glob is under the target test path. The existing `required-work` gate keeps the other checks. `retired-tests` skips by returning no command when the ticket has no entries. `test-required-work` follows that form: the command is nil when the ticket has no test-path check, so no step runs. Required work: 1. Add the `test-required-work` gate command that selects typed checks whose glob is under test_path — check: present `test-required-work` in `plugins/os-sdlc/lib/os_sdlc/**/*.rb` ## Acceptance criteria 1. Given a ticket with one typed check whose glob is under test_path and one under the code path, both unmet, when the `test-required-work` gate runs, then it reports only the test-path check. 2. Given a ticket with no test-path checks, when the gate commands are built, then no `test-required-work` step runs. ## Owner sketch ```ruby class OsSdlc::Query::Gate::Commands def test_required_work_command end end ``` ## Origin - Trigger: user ruling on #863, Option A, 2026-10-01 - Improvised this session: none - Chain: test-path Required work escalates ← programmer-repair never edits tests ← DESIGN (docs/adr/0244, Consequences) - Root candidate: #863 - Where: plugins/os-sdlc/lib/os_sdlc/query/gate/commands.rb - Session: 55a56279-83ee-47d5-a21e-ee67f9e28abd - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/55a56279-83ee-47d5-a21e-ee67f9e28abd.jsonl Parent: #863
Author
Owner

Not ready (checked 2026-10-27, takedown track). Missing: (1) the class moved: Query::Gate::Commands is now OsSdlc::Gate::Commands at plugins/os-sdlc/lib/os_sdlc/gate/commands.rb; the Required-work check glob still names the old path tree only loosely. (2) Open design choice: required_work_command (gate/commands.rb:51-56) does not filter by path, so a test-path check would report in both required-work and test-required-work unless required-work excludes them; map/check/entry_gate_rules.rb:7 requires required-work, so the split must keep its coverage. (3) Alone, the step is dead: no map names it until #866 wires it into the test-writer node. Suggest folding #865 into #866 or ordering them as one slice.

Not ready (checked 2026-10-27, takedown track). Missing: (1) the class moved: Query::Gate::Commands is now OsSdlc::Gate::Commands at plugins/os-sdlc/lib/os_sdlc/gate/commands.rb; the Required-work check glob still names the old path tree only loosely. (2) Open design choice: required_work_command (gate/commands.rb:51-56) does not filter by path, so a test-path check would report in both required-work and test-required-work unless required-work excludes them; map/check/entry_gate_rules.rb:7 requires required-work, so the split must keep its coverage. (3) Alone, the step is dead: no map names it until #866 wires it into the test-writer node. Suggest folding #865 into #866 or ordering them as one slice.
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.

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