AgentXchain v2.149.1
v2.149.1 turns BUG-54 from “better diagnostics” into an actual fail-fast product contract. Claude local_cli runtimes now refuse the known non-interactive keychain-auth hang shape before spawn when neither env-based auth nor --bare is present, and that refusal now surfaces consistently across adapter dispatch, connector check, and connector validate, with doctor warning on the same shape. The release also carries BUG-52’s four-lane reconciler recovery proof, BUG-55’s checkpoint/verification hardening, and BUG-53’s continuous auto-chain proof. None of BUG-52/53/54/55 flip to closed here — closure still requires tester-quoted shipped-package output per rule #12.
Current quote-back target: use
[email protected]or later for any still-open BUG-52 / BUG-54 / BUG-55 / BUG-53 tester evidence. Thev2.149.1auth-preflight contract was later proven false-positive for valid Claude Max users, and the full BUG-52 third-variant fix stack only lands in2.154.7. 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-52 reconciler recovery — needs_human orphan path (Turn 93):
unblocknow advances the phase when the most recent accepted turn isneeds_humanwith a declaredphase_transition_requestbut no recorded gate failure. The operator chainaccept-turn→checkpoint-turn→unblock <hesc>clears the planning_signoff escalation, transitionsplanning → implementation, and dispatchesdevwithout manualstate.jsonsurgery. Packaged claim-reality proof runs the real shipped CLI through the full chain. -
BUG-52 queued-transition resume (Turn 94):
resumeadvances fromqueued_phase_transitioneven when the latest accepted turn carries no freshphase_transition_request. Packaged claim-reality proof drives the tarball throughimplementation → qafrom the queued state, assertsqueued_phase_transitionis cleared, and verifies the next dispatch isqarather than a redundantdev. -
BUG-52 phase-reconcile lookup hardening: the reconciler is now resilient to accepted-turn lookup paths that previously mis-identified the candidate turn, eliminating the narrow shape the Turn 98-class false closure could still hide behind.
-
BUG-54 Claude auth preflight across live surfaces:
dispatchLocalCli,connector validate, and nowconnector checkrefuse the known-hanging Claudelocal_clishape before launching the subprocess when neither env-based auth nor--bareis present. All three surfaces use the same canonicalclaude_auth_preflight_failedcontract so operators can grep one identifier across logs, JSON output, and release notes. -
BUG-54 connector readiness truthfulness:
connector checkno longer downgrades the known-hanging Claude shape to a soft warning. It now fails withprobe_kind: 'auth_preflight',error_code: 'claude_auth_preflight_failed', boolean-onlyauth_env_present, and fix text namingANTHROPIC_API_KEY,CLAUDE_CODE_OAUTH_TOKEN, and--bare. -
BUG-54
process_exitforensic field coverage: thelocal_cliadapter emitsfirst_output_stream,exit_signal, andwatchdog_fireddirectly on theprocess_exitdiagnostic line, alongsidestderr_excerpt. Single-record triage can now discriminate between watchdog-kill (SIGTERM +watchdog_fired: true), stderr-only natural exit (first_output_stream: null+exit_signal: null+ non-nullstderr_excerpt), and healthy exit (first_output_stream: 'stdout'or'staged_result') without cross-line correlation. -
BUG-54 stderr-classification correctness: stderr-only startup activity now renders as
diagnostic_onlyrather than "Producing output," and stays in the BUG-54 failure bucket across progress/watchdog/run paths. Dashboard no longer paints stderr-only subprocesses as healthy work-in-progress. Thestartup_failure_typevocabulary is normalized to typed subtypes on both the adapter emission side and the status consumer side. -
BUG-54 per-runtime
startup_watchdog_ms: operators can override the startup watchdog perruntimes.<id>without changing the globalrun_loop.startup_watchdog_ms. The ghost detector honors the same override, so watchdog and ghost detection stay parity-aligned instead of computing drift from two separate source-of-truths. -
BUG-54 reproduction harness + tester runbook:
cli/scripts/reproduce-bug-54.mjsmirrors the adapter’sresolveCommand+ spawn shape exactly, captures per-attemptspawn_attached/first_outputtimestamps,watchdog_fired,exit_code/exit_signal, full stderr/stdout, and boolean-only auth-key presence flags. The in-tree runbook maps the 9 classification buckets directly onto the BUG-54 hypothesis set, so non-auth failures still have a deterministic next diagnostic step instead of another guess cycle. -
BUG-55 sub-A wrong-lineage path distinct surfacing:
checkpoint-turnnow distinguishesgenuinely_missing(declared path absent and never committed upstream) fromdivergent_from_accepted_lineage(declared path already committed on a different lineage than the accepted baseline). Operators get a wrong-lineage hint with actionable remediation instead of a generic missing-path error. Upstream presence is now anchored to the accepted baseline rather than arbitrary HEAD state. -
BUG-55 sub-A silent-filter tester-path regression lock:
normalizeCheckpointableFilesnow carries an explicit tester-path regression assertion for.planning/RELEASE_NOTES.md,.planning/acceptance-matrix.md,src/cli.js, andtests/smoke.mjs. A future widening ofOPERATIONAL_PATH_PREFIXES,ORCHESTRATOR_STATE_FILES, orBASELINE_EXEMPT_PATH_PREFIXESthat silently strips the tester-reported paths before checkpoint-turn ever sees them will now fail in CI at the exact filter boundary the tester encounters, not downstream. -
BUG-55 combined tester-shape regression: a dedicated scenario exercises the full combined shape — QA turn with declared
files_changedAND verification commands that produce fixture outputs — as a child-process CLI chain. Locks both sub-A and sub-B behavior in a single tester-reproduction-shaped test. -
BUG-53 CLI auto-chain + idle_exit regressions: both paths (auto-chain through
--max-runsandidle_exiton vision exhaustion) are now locked by child-process CLI-chain tests inbug-53-continuous-auto-chain.test.js. Source-only coverage is augmented; the packaged claim-reality suite still covers the shipped-tarball emission ofsession_continuationand thepaused-only-on-blocked invariant. -
Dashboard BUG-54 output rendering: false "Producing output" rendering on stderr-only failing subprocesses is eliminated so operators get a truthful dashboard state during BUG-54 reproductions.
Decisions
DEC-BUG54-REPRO-SCRIPT-CONTRACT-001DEC-BUG54-REPRO-SCRIPT-SHARED-RESOLVER-001DEC-BUG54-REPRO-SCRIPT-NO-PACKED-PREFLIGHT-001DEC-BUG54-TESTER-RUNBOOK-001DEC-BUG54-NO-ADAPTER-VOCAB-WIDENING-001DEC-BUG54-PROCESS-EXIT-FIELD-COVERAGE-001DEC-BUG54-CLAUDE-AUTH-PREFLIGHT-001DEC-BUG54-VALIDATE-AUTH-PREFLIGHT-001DEC-BUG52-PACKED-TURN93-94-PROOF-001DEC-BUG55A-WRONG-LINEAGE-DISTINCT-001
Operator Notes
- The BUG-54 reproduction harness is a diagnostic artifact shipped in the npm package. Testers should resolve it from the installed
agentxchainpackage inside the failing worktree, then attach the resulting JSON. The normal runtime features inv2.149.1are the fail-fast auth-preflight contract and the richerprocess_exitforensic fields. - BUG-52 recovery paths from Turn 93/94 are shipped behavior. Operators who previously had to patch
.agentxchain/state.jsonto recover fromneeds_human+queued_phase_transitionstates should no longer need that manual surgery onv2.149.1.
Tester Re-Run Contract
Run the latest shipped package that carries the full BUG-56, BUG-54, and BUG-52 fix stack, not the source tree:
The command above supersedes the original v2.149.1 quote-back pin. v2.149.1
remains historically installable, but every still-open closure contract below
must use [email protected] or later.
-
BUG-54 auth preflight and startup reliability: follow
.planning/BUG_59_54_TESTER_QUOTEBACK_RUNBOOK.mdon[email protected]or later. The current contract requires real adapter-path dispatch diagnostics (startup_latency_ms,elapsed_since_spawn_ms,first_output_stream,watchdog_fired, andexit_signalonprocess_exit) and the BUG-59 routine auto-approval ledger rows and credentialed hard-stop counter-evidence. The older static auth-shape failure is historical, not current closure proof. -
BUG-54 root-cause triage when reliability stays below 90% after auth is corrected: resolve the reproduction harness from the installed
agentxchainpackage (not the repo tree) inside the failing worktree:REPRO="$(npm root)/agentxchain/scripts/reproduce-bug-54.mjs"[ -f "$REPRO" ] || REPRO="$(npm root -g)/agentxchain/scripts/reproduce-bug-54.mjs"node "$REPRO" --synthetic "Say READY and nothing else." --attempts 10 --out ./bug-54-repro.jsonThe consolidated quote-back checklist lives at
.planning/BUG_52_53_54_55_TESTER_UNBLOCK_RUNBOOK.md; the per-field reading key for this JSON lives at.planning/BUG_54_REPRO_SCRIPT_TESTER_RUNBOOK.md. -
BUG-52 phase-gate reconciliation — current contract: follow
.planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.mdon[email protected]or later. Quote thephase_enteredevent and the next dispatched role for every required shape, including the realistic PMneeds_humanhandoff (proposed_next_role: "human",phase_transition_request: null) that older packages miss. -
BUG-55 sub-A checkpoint completeness + wrong-lineage: quote
accept-turn+checkpoint-turnresult for a real QA turn and the resultinggit status --short(must be clean). If a declared path was already committed on a divergent lineage, quote thedivergent_from_accepted_lineagefield on the checkpoint result — the wrong-lineage path must be surfaced distinctly fromgenuinely_missing. -
BUG-55 sub-B verification outputs: quote the failure showing
undeclared_verification_outputs+verification.produced_filesremediation pointer; then quote the clean acceptance path after the produced file is declared. -
BUG-55 combined tester shape: run
accept-turnfollowed bycheckpoint-turnon a QA turn that both declaresfiles_changedand produces fixture outputs; quotegit status --shortafter. Clean tree means BUG-55 is fixed for your reproduction. -
BUG-53 continuous auto-chain: run
agentxchain run --continuous --max-runs 3from a clean session on[email protected]or later and quote thesession_continuationevent lines (formatsession_continuation <previous_run_id> -> <next_run_id> (<next_objective>)). Session status must stayrunningbetween runs and end ascompletedoridle_exit, neverpaused.
The closure artifact is the tester's quoted shipped-package output. No source-tree run, local green test, or agent summary is sufficient for BUG-52, BUG-53, BUG-54, or BUG-55.
Evidence
- node --test cli/test/beta-tester-scenarios/ → 172 tests / 64 suites / 0 failures
- node --test cli/test/claim-reality-preflight.test.js → 42 tests / 1 suite / 0 failures
- node --test --test-name-pattern='BUG-52' cli/test/claim-reality-preflight.test.js → 5 passed, 34 skipped (packed four-lane reconciler coverage green)
- node --test cli/test/local-cli-adapter.test.js → full suite green (watchdog + stderr-only + staged-result paths assert
watchdog_fired,exit_signal,first_output_stream,stderr_excerpt)
Status
- BUG-54: auth preflight now fails fast across adapter dispatch,
connector check, andconnector validate;doctorwarns on the same shape;process_exitforensic fields, reproduction harness, runbook, per-runtime watchdog override, and dashboard rendering fix remain shipped. Awaiting tester-quoted[email protected]or later output. - BUG-52: four-lane reconciler coverage shipped (planning/qa separated checkpoint, Turn 93 orphan, Turn 94 queued). Awaiting tester-quoted operator chain output on
[email protected]or later with no manualstate.jsonpatching. - BUG-55: sub-A wrong-lineage distinct surfacing + sub-B undeclared-output rejection + combined tester-shape regression + silent-filter tester-path lock. Awaiting tester-quoted
git status --shortclean output on[email protected]or later. - BUG-53: CLI auto-chain + idle_exit + packaged session_continuation coverage. Awaiting tester-quoted
session_continuationoutput on[email protected]or later.