pipeline passes tickets whose cases are all satisfiable by doubles; production wiring never lands #604

Open
opened 2026-09-16 21:27:38 +00:00 by jared · 0 comments
Owner

Problem

Two runs on 2026-09-16 (impl 23 for #599, impl 24 for #600) reached green with every ticket case passing while the production path was unchanged. #599: SharedRunner shipped with a doubled spawner only; Fingerprint still defaulted to per-call Server. #600: Daemon shipped as fork+sleep with an empty touched daemon.sock, connect returning nil, QueryRunner untouched; behavior-verifier failed twice, test-writer could not write an accepted red test for production uses the daemon, run ended in unexpected_pass escalation. Both hand-finished by the orchestrator.

Observed

Case-passing tests do not verify production construction. Both tickets reached green; neither touched production behavior.

Reproduce

n/a: design defect in ticket verification gates.

Expected

Every ticket has at least one case that a double cannot satisfy (an end-to-end CLI run or a measurement). behavior-verifier names the production caller that constructs each new collaborator.

Origin

  • Trigger: hand-finish of #599 and #600, session 01153d94
  • Improvised this session: none
  • Chain: test doubles satisfy all cases → no end-to-end case → production path untested DESIGN
  • Root candidate: ticket-skeptic and behavior-verifier redesign
  • Where: plugins/os-sdlc/agents/behavior-verifier.md, plugins/os-backlog ticket-skeptic
  • Session: 01153d94-6459-43dc-bd20-e68b757af56f
  • Transcript: https://claude.com/claude-code (session in progress)

Owner sketch

class Backlog::TicketSkeptic
  def validate(title, body, parent_ticket)
end

class OsSdlc::BehaviorVerifier
  def verify_production_path(diff, classes_added)
end

Acceptance criteria

  1. ticket-skeptic rejects a body whose every case ends in (double) or names an injected collaborator, with a message naming the missing end-to-end case.
  2. behavior-verifier fails a green increment where a new class has no production constructor call site outside tests, naming the class.
  3. A ticket with one end-to-end case passes both checks.
## Problem Two runs on 2026-09-16 (impl 23 for #599, impl 24 for #600) reached green with every ticket case passing while the production path was unchanged. #599: SharedRunner shipped with a doubled spawner only; Fingerprint still defaulted to per-call Server. #600: Daemon shipped as fork+sleep with an empty touched daemon.sock, connect returning nil, QueryRunner untouched; behavior-verifier failed twice, test-writer could not write an accepted red test for production uses the daemon, run ended in unexpected_pass escalation. Both hand-finished by the orchestrator. ## Observed Case-passing tests do not verify production construction. Both tickets reached green; neither touched production behavior. ## Reproduce n/a: design defect in ticket verification gates. ## Expected Every ticket has at least one case that a double cannot satisfy (an end-to-end CLI run or a measurement). behavior-verifier names the production caller that constructs each new collaborator. ## Origin - Trigger: hand-finish of #599 and #600, session 01153d94 - Improvised this session: none - Chain: test doubles satisfy all cases → no end-to-end case → production path untested DESIGN - Root candidate: ticket-skeptic and behavior-verifier redesign - Where: plugins/os-sdlc/agents/behavior-verifier.md, plugins/os-backlog ticket-skeptic - Session: 01153d94-6459-43dc-bd20-e68b757af56f - Transcript: https://claude.com/claude-code (session in progress) ## Owner sketch ```ruby class Backlog::TicketSkeptic def validate(title, body, parent_ticket) end class OsSdlc::BehaviorVerifier def verify_production_path(diff, classes_added) end ``` ## Acceptance criteria 1. ticket-skeptic rejects a body whose every case ends in (double) or names an injected collaborator, with a message naming the missing end-to-end case. 2. behavior-verifier fails a green increment where a new class has no production constructor call site outside tests, naming the class. 3. A ticket with one end-to-end case passes both checks.
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#604
No description provided.