mirror of
https://github.com/block/buzz.git
synced 2026-11-02 07:22:55 +00:00
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>
Buzz
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition