Skip to main content

AgentXchain v2.154.0

v2.154.0 is the BUG-62 operator-commit reconcile release. It closes the recovery loop where a human workaround commit on top of an agent checkpoint created Git HEAD has moved since checkpoint drift and blocked subsequent governed work until the operator manually edited state.

Current BUG-52 quote-back target: BUG-62 closure can proceed on [email protected]. But BUG-52 third-variant quote-back must use [email protected] or later — v2.154.0 (and the originally suggested 2.152.0) still loop on the realistic PM needs_human handoff where proposed_next_role: "human" and phase_transition_request: null. The canonical BUG-52 runbook is .planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.md.

The release ships both layers of the fix: a manual command for audited operator recovery, and a continuous-mode auto_safe_only policy that can accept safe fast-forward operator commits before dispatch while still refusing governed-state edits and history rewrites.

Bug Fixes

  • BUG-62 manual reconcile command: agentxchain reconcile-state --accept-operator-head accepts safe fast-forward operator commits as the new governed baseline. It updates accepted_integration_ref, refreshes session.json.baseline_ref, records operator_commit_reconciliation, and emits state_reconciled_operator_commits.

  • BUG-62 safety checks: the reconciler refuses:

    • history rewrites where the prior governed baseline is not an ancestor of HEAD
    • commits that modify .agentxchain/
    • deletion of critical governed evidence such as .planning/acceptance-matrix.md
  • BUG-62 continuous auto-safe-only policy: run_loop.continuous.reconcile_operator_commits accepts "manual", "auto_safe_only", or "disabled". The run command also accepts --reconcile-operator-commits <mode>. Full-auto approval-policy posture promotes the default to auto_safe_only; explicit config and CLI flags win.

  • BUG-62 refusal audit trail: unsafe auto-reconcile pauses the session, writes blocked_on: "operator_commit_reconcile_refused" with actionable recovery detail, and emits operator_commit_reconcile_refused. Safe auto-reconcile reuses the same state_reconciled_operator_commits event as the manual command.

Operator Notes

When status reports checkpoint drift caused by safe operator commits, run:

agentxchain reconcile-state --accept-operator-head

For continuous sessions that should accept only safe fast-forward operator commits before dispatch:

{
"run_loop": {
"continuous": {
"reconcile_operator_commits": "auto_safe_only"
}
}
}

or:

agentxchain run --continuous --reconcile-operator-commits auto_safe_only

Use "manual" to require an explicit operator command, or "disabled" to preserve drift exactly as-is for external debugging.

Decisions

  • DEC-BUG62-MANUAL-OPERATOR-HEAD-RECONCILE-001
  • DEC-BUG62-AUTO-SAFE-ONLY-RECONCILE-001

Evidence

  • node --test cli/test/beta-tester-scenarios/ cli/test/claim-reality-preflight.test.js -> 233 tests / 69 suites / 0 failures / 5 skipped
  • node --test test/continuous-run.test.js test/run-events.test.js test/beta-tester-scenarios/bug-62-operator-commit-reconcile.test.js -> 53 tests / 11 suites / 0 failures / 0 skipped

Tester Re-Run Contract

Run the shipped package, not the source tree:

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

BUG-62 manual operator-commit reconcile

Create a safe product-file commit on top of the last governed checkpoint, then run:

agentxchain status --json
agentxchain reconcile-state --accept-operator-head
agentxchain status --json

Quote the before/after accepted_integration_ref, operator_commit_reconciliation, and the state_reconciled_operator_commits event. The after state should no longer report Git HEAD has moved since checkpoint drift.

BUG-62 safety refusals

Repeat the manual command with an operator commit that modifies .agentxchain/state.json; quote the refusal with error_class: "governance_state_modified". Also test a history rewrite where the previous baseline is no longer an ancestor of HEAD; quote error_class: "history_rewrite".

BUG-62 continuous auto-safe-only reconcile

Configure:

{
"run_loop": {
"continuous": {
"reconcile_operator_commits": "auto_safe_only"
}
}
}

Then start or continue a continuous session after a safe product-file operator commit. Quote the state_reconciled_operator_commits event emitted before the next dispatch. For an unsafe .agentxchain/state.json commit, quote operator_commit_reconcile_refused, blocked_on: "operator_commit_reconcile_refused", and the recovery detail.

Existing open closure contracts

BUG-52 third-variant closure requires tester-quoted shipped-package output on [email protected] or later, following .planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.md. Earlier releases (including 2.152.0 and 2.154.02.154.5) still loop on the realistic PM handoff shape. BUG-54 still requires adapter-path watchdog evidence. BUG-59 still requires tester quote-back for routine auto-approval ledger rows and credentialed hard-stop counter-evidence. Use [email protected] or later and .planning/BUG_59_54_TESTER_QUOTEBACK_RUNBOOK.md for both BUG-54 and BUG-59 so the evidence run does not hit the BUG-52 loop window. BUG-53 still requires a real multi-run chain trace. BUG-61 still requires shipped-package quote-back for ghost auto-retry and exhaustion diagnostics. v2.154.0 does not alter those closure contracts.

BUG-52 standing-gate unblock

For the standing-gate unblock path, pin to [email protected] or later and follow .planning/BUG_52_TESTER_QUOTEBACK_RUNBOOK.md. Quote phase_entered after unblock; older BUG-52 paths may still show trigger: "reconciled_before_dispatch". The current standing-gate path should also show cleanup evidence through phase_cleanup when stale same-phase state existed.

BUG-53 continuous sessions

For still-open BUG-53 closure proof, run the shipped package in continuous mode and quote session_continuation events across chained runs. A bounded idle run should end as idle_exit, not as a paused gate.

BUG-54 startup watchdog

For still-open BUG-54 closure proof, use [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, and the configured runtimes.<id>.startup_watchdog_ms. The closure evidence must come from the adapter path, not from a standalone spawn harness.

BUG-55 checkpoint completeness

For still-open BUG-55 regression proof, 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.

The key operator chain is accept-turn followed by checkpoint-turn against the same accepted turn.