Make the survivor-loop brief's test command load every test file #1679

Closed
opened 2026-11-10 21:02:05 +00:00 by jared · 2 comments
Owner

Problem

The survivor-loop brief gives the haiku agent a test command that runs only the first test file. The agent then reports a green run when the other test files can fail.

Observed

os-sdlc-mutation-pass brief fills TEST_COMMAND in lib/os_sdlc/mutation_test/pass/packet/brief.rb:26 with this command:

bundle exec ruby -Itest test/system_model_pattern_site_test.rb test/os_sdlc/system_model/pattern_site/page_test.rb test/os_sdlc/system_model/pattern_site/entry_test.rb

Ruby loads the first file as the script. Ruby passes the other paths to that script as ARGV, and Minitest does not load them. The #1656 page and entry haiku agent found this on 2026-11-10 and ran each file by hand.

Reproduce

cd plugins/os-sdlc && bin/os-sdlc-mutation-pass brief . --source lib/os_sdlc/system_model/pattern_site/page.rb --test test/system_model_pattern_site_test.rb --test test/os_sdlc/system_model/pattern_site/page_test.rb | grep 'Run: bundle'

Approach

Pass::Packet::Brief fills TEST_COMMAND with a command that loads each named test file, for example bundle exec ruby -Itest -e 'ARGV.each { |path| require File.expand_path(path) }' <tests>.

Required work: none beyond the acceptance criteria.

Acceptance criteria

  1. Given brief with two --test paths, when the brief is printed, then its test command loads both test files.
  2. Given that test command run on two test files where only the second file has a failing test, when it runs, then it reports the failure.

Owner sketch

class OsSdlc::MutationTest::Pass::Packet::Brief
  def text
end

Origin

  • Trigger: #1656 survivor loop, page and entry group, haiku agent report
  • Improvised this session: the agent ran each test file alone
  • Chain: green check skips files ← ruby a b c runs only a (Ruby CLI) ← Brief builds bundle exec ruby -Itest #{tests} ← DESIGN (docs/takedown/1668-20261110-104618/final-design.json)
  • Root candidate: none found; searched mutation-pass, packet/brief, TEST_COMMAND, mutation_test/pass, survivor loop, ruby -Itest
  • Where: plugins/os-sdlc/lib/os_sdlc/mutation_test/pass/packet/brief.rb
  • Session: e04dcfb2-d544-497a-9020-55066ed00123
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os-plugins-os-sdlc/e04dcfb2-d544-497a-9020-55066ed00123.jsonl

VERDICT: CREATE (ticket-skeptic, 2026-11-10): no open ticket covers the brief test command.

## Problem The survivor-loop brief gives the haiku agent a test command that runs only the first test file. The agent then reports a green run when the other test files can fail. ## Observed `os-sdlc-mutation-pass brief` fills `TEST_COMMAND` in `lib/os_sdlc/mutation_test/pass/packet/brief.rb:26` with this command: ``` bundle exec ruby -Itest test/system_model_pattern_site_test.rb test/os_sdlc/system_model/pattern_site/page_test.rb test/os_sdlc/system_model/pattern_site/entry_test.rb ``` Ruby loads the first file as the script. Ruby passes the other paths to that script as `ARGV`, and Minitest does not load them. The #1656 page and entry haiku agent found this on 2026-11-10 and ran each file by hand. ## Reproduce ``` cd plugins/os-sdlc && bin/os-sdlc-mutation-pass brief . --source lib/os_sdlc/system_model/pattern_site/page.rb --test test/system_model_pattern_site_test.rb --test test/os_sdlc/system_model/pattern_site/page_test.rb | grep 'Run: bundle' ``` ## Approach `Pass::Packet::Brief` fills `TEST_COMMAND` with a command that loads each named test file, for example `bundle exec ruby -Itest -e 'ARGV.each { |path| require File.expand_path(path) }' <tests>`. Required work: none beyond the acceptance criteria. ## Acceptance criteria 1. Given `brief` with two `--test` paths, when the brief is printed, then its test command loads both test files. 2. Given that test command run on two test files where only the second file has a failing test, when it runs, then it reports the failure. ## Owner sketch ```ruby class OsSdlc::MutationTest::Pass::Packet::Brief def text end ``` ## Origin - Trigger: #1656 survivor loop, page and entry group, haiku agent report - Improvised this session: the agent ran each test file alone - Chain: green check skips files ← `ruby a b c` runs only `a` (Ruby CLI) ← `Brief` builds `bundle exec ruby -Itest #{tests}` ← DESIGN (`docs/takedown/1668-20261110-104618/final-design.json`) - Root candidate: none found; searched mutation-pass, packet/brief, TEST_COMMAND, mutation_test/pass, survivor loop, ruby -Itest - Where: `plugins/os-sdlc/lib/os_sdlc/mutation_test/pass/packet/brief.rb` - Session: e04dcfb2-d544-497a-9020-55066ed00123 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os-plugins-os-sdlc/e04dcfb2-d544-497a-9020-55066ed00123.jsonl VERDICT: CREATE (ticket-skeptic, 2026-11-10): no open ticket covers the brief test command.
Author
Owner

Work started on branch ticket-1679 through the os-sdlc pipeline (poodr-ticket-implementation).

Work started on branch ticket-1679 through the os-sdlc pipeline (poodr-ticket-implementation).
Author
Owner

Resolution

Done: Pass::Packet::Brief fills TEST_COMMAND with 'bundle exec ruby -Itest -e '''ARGV.each { |path| require File.expand_path(path) }''' ', so every named test file loads. Tests cover AC 1 (both files required, in order) and AC 2 (a failure only in the second file is reported).

Evidence: main e239c0e81 (merged); suite 4898 runs 0 failures; rubocop clean; design audit no must-fix; manual run on two scratch files: 2 runs, 1 failure. Implementation 278 hand-finished after escalation 127 (test helper used Runnable.run, absent in Minitest 6.0.6; now run_suite).

Follow-ups: none

## Resolution **Done:** Pass::Packet::Brief fills TEST_COMMAND with 'bundle exec ruby -Itest -e '\''ARGV.each { |path| require File.expand_path(path) }'\'' <shell-escaped tests>', so every named test file loads. Tests cover AC 1 (both files required, in order) and AC 2 (a failure only in the second file is reported). **Evidence:** main e239c0e81 (merged); suite 4898 runs 0 failures; rubocop clean; design audit no must-fix; manual run on two scratch files: 2 runs, 1 failure. Implementation 278 hand-finished after escalation 127 (test helper used Runnable.run, absent in Minitest 6.0.6; now run_suite). **Follow-ups:** none <!-- os-backlog kind: resolution -->
jared closed this issue 2026-11-11 16:11:43 +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#1679
No description provided.