Agents Builders

Harden release_cli subprocess capture

Archived
harden-release-cli-subprocess-capture

Created

Jun 25, 05:54

Started

Jun 25, 12:42

Completed

Jun 25, 19:24

DevOps handoff

Type

Bug

Shape

backend

Worktree Slug

harden-release-cli-subprocess-capture

Repositories

mcritchie-studio

Release Train

Branch

feat/harden-release-cli-subprocess-capture

Local URL

QA URL

Production URL

tooling ci-flake

Acceptance Criteria

  • release_cli_test IO.popen helpers capture exit status
  • Flunk on subprocess failure not empty stdout
  • Preserve line-126 legitimate empty-output assertion

Expected Test Plan

  • [unit] helpers loud-fail on subprocess error

Checks Run

  • [unit] release_cli_test 70/70 standalone; 50/50 tight loop (~3500 subprocess runs) green
  • [unit] regression fail-first proven: RED vs old IO.popen helper, GREEN vs hardened run_ruby (stderr+exit=1 surfaced)
  • [unit] line-126 legitimate empty-output canary still passes (no over-guard) + new empty-on-clean-exit canary
  • [integration] PARALLEL_WORKERS=4 bin/rails test release_cli_test 6/6 green (parallel-fork harness, the flake's real I/O boundary)

Agent Context

Follow-up to stabilize-worktree-port-test (PR #186). Steffon found test/lib/release_cli_test.rb carries the IDENTICAL latent flake: IO.popen(..., {err: File::NULL}, &:read) across 3 helpers (eval_helper / eval_with_argv / run_cli) discards stderr + exit status, so a reaped-before-flush child surfaces as a silent empty-output failure under CI's parallel-fork harness — same mode as agent_worktree_test:76. It's also in the gating CI sweep. NOT folded into #186 (different file, larger review surface) AND it needs a GENTLER guard: line 126 (test_unparsed_flag_returns_nil_through_the_bin_boundary) LEGITIMATELY asserts empty output, so the helper here must flunk on NONZERO EXIT only, not on empty stdout (unlike the worktree test where all 5 checks return non-empty and the stronger flunk-on-empty guard was safe). Apply Open3.capture3 + exit-status check, preserving the legit empty-output case.

Stage Timeline

Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. means the agent didn't report that metric.

  1. Created Designed
    N Nidoran♀
    Nidoran♀
    Model
    Duration
    Tokens
    Cost
    Completed Jun 25, 05:54 · 2 days ago
    api
  2. Designed Building
    N Nidoran♀
    Nidoran♀
    Model
    claude-opus-4-8
    Duration
    about 7 hours
    Tokens
    Cost
    Started Jun 25, 05:54
    Completed Jun 25, 12:42 · 2 days ago
    cli
  3. Building Submitted
    N Nidoran♀
    Nidoran♀
    Model
    claude-opus-4-8
    Duration
    12 minutes
    Tokens
    Cost
    Started Jun 25, 12:42
    Completed Jun 25, 12:54 · 2 days ago
    cli
  4. Submitted Reviewed
    C Carl
    Carl primary
    S Shannon
    Shannon light
    Model
    claude-opus-4-8
    Duration
    about 1 hour
    Tokens
    3,368,320
    Cost
    ~$6.19
    Started Jun 25, 12:54
    Completed Jun 25, 13:52 · 2 days ago
    cli
  5. Reviewed Assembled
    S Steffon
    Steffon
    Model
    Duration
    about 5 hours
    Tokens
    Cost
    Started Jun 25, 13:52
    Completed Jun 25, 19:03 · 1 day ago
  6. Assembled Shipped
    A Avi
    Avi
    Model
    Duration
    21 minutes
    Tokens
    Cost
    Started Jun 25, 19:03
    Completed Jun 25, 19:24 · 1 day ago
  7. Shipped Archived
    8
    81fad33e-98b5-4075-8ed6-d0efe6cb5804
    Model
    claude-opus-4-8
    Duration
    about 2 hours
    Tokens
    Cost
    Started Jun 25, 19:24
    Completed Jun 25, 21:16 · 1 day ago
    cli

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

No task feedback has been recorded yet.

Sealed-bid sizing

Edit →

Alex (PM)

Avi (PO)

Dev

Actual