Files
buzz/crates
Duncan 552fcdde7b fix(acp): close P2-1/P2-2/P2-3 and P3 B5 effort state-machine findings
P2-1 — invalid_value ack echoes nonce (lib.rs)
The early-return rejection branch built its own ack before the common
nonce-attaching builder ran. The parsed nonce was in scope but never
added. Desktop's awaitEffortOutcome nonce guard rejects a nonce-less
invalid_value ack, causing an 8 s timeout instead of an immediate
rejection. Fix: attach nonce in the early-return branch when present.
New test: test_b5_invalid_value_ack_echoes_nonce.

P2-2 — committed_effort seeded on startup application (pool.rs)
try_claim hands out desired_effort_gen = None for startup agents, so
return_agent's generation-matched commit block never fires. A later
rejected live pick rolled back to None instead of the confirmed startup
value. Fix: when the V-1 startup propagation block runs and the result
is Applied, seed committed_effort alongside desired_effort. Regression
test: test_startup_success_seeds_committed_effort_for_rollback.

P2-3 — same-generation resolution order-independent (pool.rs)
With parallelism > 1, multiple workers carry the same generation.
Applied wrote only committed_effort; Failed rolled back only
desired_effort; each emitted a terminal ack. Pool state and the ack
stream both depended on return order. Fix: first terminal result for a
generation emits the ack and marks the gen resolved
(last_acked_effort_gen); subsequent same-gen returns update pool state
(commit/rollback) but emit no ack. Semantics documented at the
resolution site. Two-worker tests: test_p2_3_fail_then_success and
test_p2_3_success_then_fail.

P3 fold-in — stale capability cache cleared on model swap (pool.rs)
When a returning agent had populated capabilities but no thought_level
configId (model swapped to a non-effort model), the pool-level
effort_capabilities cache retained stale valid_values. Fix: clear the
cache in the else-if branch; capabilities_ever_discovered stays true
so case C (workers busy) remains active.
New test: test_p3_capability_cache_cleared_on_non_effort_model_return.

P3 fold-in — dead case-C branch resolved (lib.rs)
After the model-swap clear, capabilities_ever_discovered = true AND
effort_capabilities.config_id = None is now a reachable state (all
workers checked out after a model swap), making all_busy_with_known_caps
genuine. No code change — the earlier capability-cache clear made this
case reachable; updated comment confirms it.

P3 fold-in — nonce-gate bypass closed (observerRelayStore.ts)
A nonce-less ok/cleared ack bypassed the stale-result guard when a
nonce had previously been registered. Fix: once a nonce is registered
for an agent, only acks with a matching nonce pass; a missing ack-nonce
is treated as non-matching. Pre-any-pick startup path preserved: when no
nonce has ever been registered, a nonce-less ack still passes through.
Also: resetAgentObserverStore now clears currentEffortNonce so test
isolation is not broken by residual nonce state.
New test file: observerRelayNonceGate.test.mjs (7 cases: startup path,
registered path, mismatch, bypass fix, per-agent isolation, reset).

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-06 18:02:39 -04:00
..