Behavior-verifier errors on a test-path-only diff because the brief carries no code_changes #1428

Open
opened 2026-10-27 17:36:45 +00:00 by jared · 0 comments
Owner

Problem

The behavior-verifier returns verdict:error on a ticket whose whole diff is test paths. The brief carries code_changes: null because every changed file sits under the target's test_path, so the verifier has no production diff to verify and errors instead of judging the test-only increment. The run ends implementation_failed and the orchestrator must hand-finish green work.

Observed

Implementation 192 (ticket #1392, target os-me): the diff was a UseCase shim in plugins/os-me/test/test_helper.rb plus plugins/os-me/test/use_case_journeys_test.rb. Handoff 1735 from the behavior-verifier says "code_changes is null in the brief... the whole diff arrived only as test_changes." Implementation 165 (ticket #1327) failed the same way.

Reproduce

Open an implementation on a ticket whose acceptance criteria are satisfied by test files only, run the map to the behavior-verifier node, and read its verdict: verdict:error.

Approach

The brief classifies every changed path under test_path as a test change. Either the brief must pass the test-path diff as the increment when no production path changed, or the behavior-verifier must verify a test-only increment from test_changes. Pick one owner and record it.

Required work:

  1. Behavior-verifier judges a test-only increment instead of erroring — check: absent code_changes is null in plugins/os-sdlc/agents/behavior-verifier.md

Acceptance criteria

  1. Given an implementation whose diff touches only files under the target's test_path, when the behavior-verifier node runs, then its verdict is pass or fail, never error.
  2. Given the same implementation, when the brief is built, then the verifier receives the test-path diff as the increment to verify.

Owner sketch

class OsSdlc::Dispatch::Brief
  def code_changes; end
  def test_changes; end
end

Origin

  • Trigger: /os-sdlc:implement 1392, implementation 192, behavior-verifier handoff 1735, reason verdict:error
  • Improvised this session: hand-finish of #1392 per the escalation procedure
  • Chain: green test-only increment fails the run ← verifier errors on null code_changes ← brief puts every test_path file in test_changes ← DESIGN (brief split by path, verifier assumes a production diff)
  • Root candidate: none found; searched behavior-verifier, code_changes, test_changes, test-only, brief, verdict:error
  • Where: plugins/os-sdlc/lib/os_sdlc/dispatch/brief.rb; plugins/os-sdlc/agents/behavior-verifier.md
  • Session: 47f54f99-e35c-4567-a3e6-581fecf54dc3
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-ticket-1392/47f54f99-e35c-4567-a3e6-581fecf54dc3.jsonl

VERDICT: CREATE

## Problem The behavior-verifier returns `verdict:error` on a ticket whose whole diff is test paths. The brief carries `code_changes: null` because every changed file sits under the target's `test_path`, so the verifier has no production diff to verify and errors instead of judging the test-only increment. The run ends `implementation_failed` and the orchestrator must hand-finish green work. ## Observed Implementation 192 (ticket #1392, target os-me): the diff was a `UseCase` shim in `plugins/os-me/test/test_helper.rb` plus `plugins/os-me/test/use_case_journeys_test.rb`. Handoff 1735 from the behavior-verifier says "code_changes is null in the brief... the whole diff arrived only as test_changes." Implementation 165 (ticket #1327) failed the same way. ## Reproduce Open an implementation on a ticket whose acceptance criteria are satisfied by test files only, run the map to the behavior-verifier node, and read its verdict: `verdict:error`. ## Approach The brief classifies every changed path under `test_path` as a test change. Either the brief must pass the test-path diff as the increment when no production path changed, or the behavior-verifier must verify a test-only increment from `test_changes`. Pick one owner and record it. Required work: 1. Behavior-verifier judges a test-only increment instead of erroring — check: absent `code_changes is null` in `plugins/os-sdlc/agents/behavior-verifier.md` ## Acceptance criteria 1. Given an implementation whose diff touches only files under the target's `test_path`, when the behavior-verifier node runs, then its verdict is `pass` or `fail`, never `error`. 2. Given the same implementation, when the brief is built, then the verifier receives the test-path diff as the increment to verify. ## Owner sketch ```ruby class OsSdlc::Dispatch::Brief def code_changes; end def test_changes; end end ``` ## Origin - Trigger: /os-sdlc:implement 1392, implementation 192, behavior-verifier handoff 1735, reason `verdict:error` - Improvised this session: hand-finish of #1392 per the escalation procedure - Chain: green test-only increment fails the run ← verifier errors on null code_changes ← brief puts every test_path file in test_changes ← DESIGN (brief split by path, verifier assumes a production diff) - Root candidate: none found; searched behavior-verifier, code_changes, test_changes, test-only, brief, verdict:error - Where: plugins/os-sdlc/lib/os_sdlc/dispatch/brief.rb; plugins/os-sdlc/agents/behavior-verifier.md - Session: 47f54f99-e35c-4567-a3e6-581fecf54dc3 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-ticket-1392/47f54f99-e35c-4567-a3e6-581fecf54dc3.jsonl VERDICT: CREATE
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#1428
No description provided.