AgentXchain v2.150.0
v2.150.0 is a reliability-and-proof release over v2.149.2. It ships two concrete hardenings on the BUG-54 local_cli path (stdout/stderr listener ordering attached before stdin prompt delivery, and a bounded claude --version probe captured in the BUG-54 repro artifact so the next tester JSON can discriminate CLI-version/path differences from adapter-level races), one new BUG-55 coverage slice (the combined files_changed + verification.produced_files[{disposition:"artifact"}] union checkpoint branch) locked at both source-tree and packaged-tarball levels via claim-reality-preflight.test.js, and one benchmark-suite contention fix that restored the local prepublish gate to green so DEC-RELEASE-CUT-AND-PUSH-AS-ATOMIC-001 can run atomically again. No BUG is closed in v2.150.0: BUG-52/53/54/55 remain OPEN pending tester-quoted shipped-package output on a later release.
Current quote-back target: use
[email protected]or later for any still-open BUG-52 / BUG-54 / BUG-55 / BUG-53 tester evidence.v2.150.0predates the BUG-54 watchdog raise (landed inv2.151.0) and the full BUG-52 third-variant fix stack (landed inv2.154.7), so running the closure contracts below against[email protected]can reproduce the BUG-52 standing-gate loop on any run that traverses phase-gate recovery. The canonical BUG-52 runbook is.planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.mdand the canonical BUG-59/54 runbook is.planning/BUG_59_54_TESTER_QUOTEBACK_RUNBOOK.md.
Bug Fixes
-
BUG-54 adapter listener ordering (
dispatchLocalCli): stdout and stderr data listeners are now attached before the prompt is written to the subprocess stdin. Prior ordering created a narrow first-byte race where a subprocess that produced output before the adapter's listeners attached could appear asno_subprocess_outputeven when it had printed on the first event-loop tick. The repro harnesscli/scripts/reproduce-bug-54.mjsmirrors the same ordering so tester JSON artifacts continue to match the adapter's real spawn shape. This is a race-removal hardening, not a BUG-54 closure — the underlying tester reproduction of 0/5 stdout ontusq.dev-21480-cleanis still un-triaged and cannot be explained by adapter ordering alone. -
BUG-54 bounded
claude --versionprobe in repro artifact:cli/scripts/reproduce-bug-54.mjsnow records acommand_probeobject on every configured Claude runtime. For Claude command chains the probe shells the same binary the adapter would spawn with--versionand a short watchdog, capturingstatus,signal,stdout,stderr,error, andtimed_out. For non-Claude commands (or a command chain that does not resolve to aclaudebinary) the probe is recorded asskippedwith a reason. BUG-56 disproved the auth-env-shape-alone hypothesis; Claude CLI version/path differences between failing and healthy machines are now part of the minimum BUG-54 diagnostic artifact. -
BUG-54 discriminator runbook for tester JSON reading:
.planning/BUG_54_DISCRIMINATOR_RUNBOOK.mdis a one-screen (under 60 lines) reading key that tells the tester exactly whichcommand_probe, summary, timing, byte-count, env-boolean, and spawn-shape fields to quote from the repro JSON, and how each combination discriminates "environmental Claude CLI difference" vs "silent watchdog" vs "resource accumulation" vs "stderr-only". Auth env booleans alone are not sufficient evidence after BUG-56 — the runbook enforces the post-BUG-56 quote-back contract. Content locked bycli/test/bug-54-discriminator-runbook-content.test.js. -
BUG-55 combined tester shape — artifact-disposition union checkpoint:
cli/test/beta-tester-scenarios/bug-55-combined-tester-shape.test.jsnow exercises a third branch that was unprotected beforev2.150.0: the case where acceptance seeds both actor-declaredfiles_changedpaths AND verification-produced fixtures withverification.produced_files[i].disposition: "artifact". The merge atcli/src/lib/governed-state.js:3692-3700unions both sets into a single checkpoint commit; the new subtest asserts all 8 declared paths land in one commit's tree andgit status --shortis empty after. BUG-46 covered the artifact-only path; BUG-55 sub-A covered the files_changed-only path. The union semantic is now packaged into the shipped tarball via the extendedclaim-reality-preflight.test.jsassertion. BUG-55 is still OPEN pending tester-quoted shipped-package output. -
BUG-57 benchmark-suite contention flake (local gate repair):
cli/test/benchmark.test.jspreviously spawned 20agentxchainsubprocesses, including seven redundantbenchmark --jsoninvocations across AT-BENCH-002..008. Under the CICD-SHRINK--test-concurrency=4gate the combined wall-clock exceeded the 60s file-level timeout and the suite was cancelled whole. Consolidated to a singlebenchmark --jsoninvocation via abefore()hook into a sharedsharedBaselinePayload(six subprocess spawns saved, ~15s reclaimed), so the full local gate now completes atomically at ~430s and prepublish-gate.sh can honorDEC-RELEASE-CUT-AND-PUSH-AS-ATOMIC-001without--skip-preflight. -
Docs truth: runner-interface CICD-SHRINK wake:
cli/test/runner-interface-docs-content.test.jsAT-RID-003 now asserts the public runner-interface page referencescli/scripts/prepublish-gate.shrather than the removed.github/workflows/ci-runner-proof.yml. Truth preservation after the Turn 116 workflow shrink — no product behavior change. -
Collab surface: word-cap guard repair:
cli/test/agent-talk-word-cap.test.jsrequired an explicit### Open questionsheading in the latest compressed summary. The prior compression used an inline bullet; the guard now holds the post-Turn-116 header convention.
Decisions
DEC-BUG54-LISTENERS-BEFORE-STDIN-001—local_climust attach stdout/stderr listeners before stdin prompt delivery. Removes the adapter-side first-byte ordering race without changing the BUG-54 classification vocabulary.DEC-BUG54-REPRO-INCLUDES-CLAUDE-VERSION-001— BUG-54 repro artifacts for Claude runtimes must include a boundedclaude --versionprobe. Auth env booleans alone are not sufficient discrimination after BUG-56.DEC-BUG54-DISCRIMINATOR-RUNBOOK-001— BUG-54 tester JSON quote-backs must include the bounded Claudecommand_probe, aggregate spawn/stdout/watchdog/timing counts, first failing attempt byte/timing fields, env auth booleans, and resolved spawn shape.DEC-BUG55-COMBINED-ARTIFACT-DISPOSITION-COVERAGE-001— the combined tester-shape scenario must exercise bothdisposition: 'ignore'(fixture cleanup + checkpoint of declared files) ANDdisposition: 'artifact'(fixture survives acceptance + lands in the union checkpoint with declared files).DEC-BUG55-PACKAGED-COMBINED-ARTIFACT-PROOF-001— BUG-55 closure proof must include the source-tree combined tester scenario AND a claim-reality packaged tarball assertion that commits declared actor files and artifact-disposition verification outputs together.
Operator Notes
- No CLI surface change for operators. The listener-ordering fix is internal to
dispatchLocalCli; classification vocabulary and event shapes are unchanged. - Testers reporting new BUG-54 evidence on
v2.150.0should quote thecommand_probeobject fromreproduce-bug-54.mjsoutput and follow.planning/BUG_54_DISCRIMINATOR_RUNBOOK.mdfor which fields to extract. Auth env booleans alone do not prove a machine is healthy/failing after BUG-56. - Operators authoring QA turns that mix actor-declared
files_changedpaths withverification.produced_files[{disposition:"artifact"}]fixture outputs can rely on a singlecheckpoint-turncommitting both sets into one commit and leavinggit statusclean. Rejected before this turn only when the fixture outputs were declared withignoredisposition.
Tester Re-Run Contract
Run the latest shipped package that carries the full BUG-54 watchdog raise and BUG-52 third-variant fix stack, not the source tree:
The command above supersedes the original v2.150.0 quote-back pin. v2.150.0
is historically installable via npx --yes -p [email protected] for
provenance inspection, but every still-open closure contract below must use
[email protected] or later so the tester does not reproduce the BUG-52
standing-gate loop while collecting evidence for an unrelated bug.
BUG-54 adapter reliability (current pin)
For still-open BUG-54 closure proof, pin to [email protected] or later and
follow .planning/BUG_59_54_TESTER_QUOTEBACK_RUNBOOK.md. Quote adapter
diagnostics from real local_cli dispatches, including startup_latency_ms,
elapsed_since_spawn_ms, first_output_stream, watchdog_fired, and
exit_signal on process_exit. If the runtime only stabilizes after raising
runtimes.<id>.startup_watchdog_ms, quote that config too. The closure
evidence must come from the adapter path, not from a standalone spawn
harness. The same runbook is the current BUG-59 quote-back contract for
routine auto-approval ledger rows and credentialed hard-stop counter-evidence.
The historical reproduce-bug-54.mjs discriminator artifact still ships in
the package and remains valid per
.planning/BUG_54_DISCRIMINATOR_RUNBOOK.md, but it is no longer sufficient
closure proof on its own — the adapter-path evidence above is required.
BUG-56 probe-based auth preflight (still in force)
On a Claude Max + no env auth + no --bare setup,
agentxchain connector check <claude-runtime> --json and
agentxchain connector validate <claude-runtime> --json MUST both pass; on a
hanging-Claude shim they MUST both fail with
error_code: "claude_auth_preflight_failed" and smoke_probe.kind: "hang".
BUG-52 phase-gate reconciliation (current pin)
For still-open BUG-52 closure proof, pin to [email protected] or later and
follow .planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.md. The canonical runbook
covers all four shapes (planning_signoff orphan, queued_phase_transition
resume, gate_failed + last_gate_failure, qa_ship_verdict) plus the realistic
PM needs_human handoff (proposed_next_role: "human",
phase_transition_request: null) that only lands in 2.154.7. Quote the
phase_entered event and confirm the next dispatched role is the next
phase's entry role.
BUG-55 checkpoint completeness (coverage validated in v2.150.0)
For still-open BUG-55 regression proof on the current pin, run accept-turn
followed by checkpoint-turn on a turn that declares both product files and
verification outputs. Include verification.produced_files with at least one
artifact or ignored output, prove there are no
undeclared_verification_outputs, and quote git status --short after
checkpointing. Clean tree means BUG-55 is fixed for your reproduction. Use
[email protected] or later.
BUG-53 continuous auto-chain (current pin)
Run agentxchain run --continuous --max-runs 3 from a clean session on
[email protected] or later and quote
session_continuation <previous_run_id> -> <next_run_id> (<next_objective>).
Session status stays running between runs and ends as completed or
idle_exit, never paused.
Evidence
- node --test cli/test/beta-tester-scenarios/ cli/test/claim-reality-preflight.test.js → 219 tests / 66 suites / 0 failures / 5 skipped
- node --test cli/test/beta-tester-scenarios/bug-52-gate-unblock-phase-advance.test.js bug-53-continuous-auto-chain.test.js bug-54-.test.js bug-55-.test.js → 23 tests / 8 suites / 0 failures
- Turn 117 full local gate on HEAD: 6639 pass / 0 fail / 5 skipped / ~430s (
DEC-RELEASE-CUT-AND-PUSH-AS-ATOMIC-001unblocked) - Turn 118 local
reproduce-bug-54.mjson Claude Max / no env auth →3/3 exit_clean_with_stdout,command_probe.stdout = "2.1.87 (Claude Code)\n",stdout_attached=3,watchdog_fires=0
Status
- BUG-54: adapter listener ordering hardened; repro harness now records Claude version probe; discriminator runbook shipped. Closure still requires tester-quoted reliability evidence (>90% across 10 consecutive PM/dev/QA dispatches) on the failing environment.
- BUG-55: combined tester-shape union checkpoint now covered at source + packaged levels. Closure still requires tester-quoted shipped-package output on
v2.150.0. - BUG-52, BUG-53, BUG-56: no code change; tester-quoted shipped-package evidence on
v2.150.0is the remaining gate.