Skip to main content

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. The v2.149.1 auth-preflight contract was later proven false-positive for valid Claude Max users, and the full BUG-52 third-variant fix stack only lands in 2.154.7. The canonical BUG-52 runbook is .planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.md and 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): unblock now advances the phase when the most recent accepted turn is needs_human with a declared phase_transition_request but no recorded gate failure. The operator chain accept-turncheckpoint-turnunblock <hesc> clears the planning_signoff escalation, transitions planning → implementation, and dispatches dev without manual state.json surgery. Packaged claim-reality proof runs the real shipped CLI through the full chain.

  • BUG-52 queued-transition resume (Turn 94): resume advances from queued_phase_transition even when the latest accepted turn carries no fresh phase_transition_request. Packaged claim-reality proof drives the tarball through implementation → qa from the queued state, asserts queued_phase_transition is cleared, and verifies the next dispatch is qa rather than a redundant dev.

  • 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 now connector check refuse the known-hanging Claude local_cli shape before launching the subprocess when neither env-based auth nor --bare is present. All three surfaces use the same canonical claude_auth_preflight_failed contract so operators can grep one identifier across logs, JSON output, and release notes.

  • BUG-54 connector readiness truthfulness: connector check no longer downgrades the known-hanging Claude shape to a soft warning. It now fails with probe_kind: 'auth_preflight', error_code: 'claude_auth_preflight_failed', boolean-only auth_env_present, and fix text naming ANTHROPIC_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, and --bare.

  • BUG-54 process_exit forensic field coverage: the local_cli adapter emits first_output_stream, exit_signal, and watchdog_fired directly on the process_exit diagnostic line, alongside stderr_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-null stderr_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_only rather 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. The startup_failure_type vocabulary 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 per runtimes.<id> without changing the global run_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.mjs mirrors the adapter’s resolveCommand + spawn shape exactly, captures per-attempt spawn_attached / first_output timestamps, 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-turn now distinguishes genuinely_missing (declared path absent and never committed upstream) from divergent_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: normalizeCheckpointableFiles now carries an explicit tester-path regression assertion for .planning/RELEASE_NOTES.md, .planning/acceptance-matrix.md, src/cli.js, and tests/smoke.mjs. A future widening of OPERATIONAL_PATH_PREFIXES, ORCHESTRATOR_STATE_FILES, or BASELINE_EXEMPT_PATH_PREFIXES that 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_changed AND 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-runs and idle_exit on vision exhaustion) are now locked by child-process CLI-chain tests in bug-53-continuous-auto-chain.test.js. Source-only coverage is augmented; the packaged claim-reality suite still covers the shipped-tarball emission of session_continuation and the paused-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-001
  • DEC-BUG54-REPRO-SCRIPT-SHARED-RESOLVER-001
  • DEC-BUG54-REPRO-SCRIPT-NO-PACKED-PREFLIGHT-001
  • DEC-BUG54-TESTER-RUNBOOK-001
  • DEC-BUG54-NO-ADAPTER-VOCAB-WIDENING-001
  • DEC-BUG54-PROCESS-EXIT-FIELD-COVERAGE-001
  • DEC-BUG54-CLAUDE-AUTH-PREFLIGHT-001
  • DEC-BUG54-VALIDATE-AUTH-PREFLIGHT-001
  • DEC-BUG52-PACKED-TURN93-94-PROOF-001
  • DEC-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 agentxchain package inside the failing worktree, then attach the resulting JSON. The normal runtime features in v2.149.1 are the fail-fast auth-preflight contract and the richer process_exit forensic fields.
  • BUG-52 recovery paths from Turn 93/94 are shipped behavior. Operators who previously had to patch .agentxchain/state.json to recover from needs_human + queued_phase_transition states should no longer need that manual surgery on v2.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:

npx --yes -p [email protected] -c "agentxchain --version"

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.md on [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, and exit_signal on process_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 agentxchain package (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.json

    The 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.md on [email protected] or later. Quote the phase_entered event and the next dispatched role for every required shape, including the realistic PM needs_human handoff (proposed_next_role: "human", phase_transition_request: null) that older packages miss.

  • BUG-55 sub-A checkpoint completeness + wrong-lineage: quote accept-turn + checkpoint-turn result for a real QA turn and the resulting git status --short (must be clean). If a declared path was already committed on a divergent lineage, quote the divergent_from_accepted_lineage field on the checkpoint result — the wrong-lineage path must be surfaced distinctly from genuinely_missing.

  • BUG-55 sub-B verification outputs: quote the failure showing undeclared_verification_outputs + verification.produced_files remediation pointer; then quote the clean acceptance path after the produced file is declared.

  • BUG-55 combined tester shape: run accept-turn followed by checkpoint-turn on a QA turn that both declares files_changed and produces fixture outputs; quote git status --short after. Clean tree means BUG-55 is fixed for your reproduction.

  • BUG-53 continuous auto-chain: run agentxchain run --continuous --max-runs 3 from a clean session on [email protected] or later and quote the session_continuation event lines (format session_continuation <previous_run_id> -> <next_run_id> (<next_objective>)). Session status must stay running between runs and end as completed or idle_exit, never paused.

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, and connector validate; doctor warns on the same shape; process_exit forensic 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 manual state.json patching.
  • 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 --short clean output on [email protected] or later.
  • BUG-53: CLI auto-chain + idle_exit + packaged session_continuation coverage. Awaiting tester-quoted session_continuation output on [email protected] or later.