Releases: protoLabsAI/projectBoard-plugin
Release list
v0.25.0 — Max-Mode candidate selection + readable board errors
Added
- Execution-grounded Max-Mode candidate selection (ADR 0064) — the loop grounds candidate picks in execution results. (#59)
Fixed
- An unusable board now fails readably instead of cryptically.
GET /featuresandGET /features/{fid}were the only store-touching routes outside_guard— on a board with no repo bound / no.beads/brmissing, theBoardErrorescaped as a text/plain 500 and the console view showed WebKit'sSyntaxError: The string did not match the expected pattern. Both routes now answer JSON 400 with the actionable message, and the view's fetch helper surfacesdetail(or the HTTP status for non-JSON bodies) instead of a raw parse error — previously a JSON 400 would have silently rendered an empty board. (#60)
v0.24.0 — share node_modules with coder worktrees
create_worktree now symlinks the main repo's node_modules into each coder worktree (root + monorepo workspace packages), so npm/pnpm pre-PR gates + builds resolve deps without a per-worktree install. Best-effort, no-op for non-node repos. 196 tests.
v0.18.0
Batched release of everything since v0.4.1 — the loop's autonomy + the self-improving flywheel.
Loop reliability
- Same-tier CI-fix budget before escalating (v0.12.0) — a red check gets
ci_fix_maxsame-tier fixes (error injected) before climbing a model tier, so a one-line lint nit no longer burns smart→reasoning→opus. - Pre-PR local gate (v0.13.0) — runs the repo's real checks in the worktree and hands the coder the failure to fix before opening a PR; opens anyway after the budget (CI stays the backstop).
- Auto-rebase on conflict (v0.14.0) — a sibling merge that stales a PR is rebased onto base in a detached worktree (clean → force-push, no coder; conflict → bounded coder re-resolve).
- Specific CI failure recorded (v0.16.0) — the attempt comment carries the real error (golden-map / F841 / schema), not the
Failing checks:header.
Self-improving flywheel (the loop learns from itself)
loop-retro(v0.15.x) mines the board's attempt/outcome history into recurring failure classes + flow stats (board_retrotool +retro.py).- Distill → grounding (v0.17.x) — schedule-safe, propose-over-create: writes a dated retro report and (v0.18.0) writes lessons to the knowledge graph (
loop-lessons). - Inject into coders (v0.18.0) — the loop reads relevant
loop-lessonsfrom the KG (graph.sdk.knowledge_search) and injects a "Known gotchas for this area" block into each coder's prompt, so known failures are heeded on attempt 1.
Plus earlier autonomy/resilience work (goal-verify gate, keep-worktree retries, format fixups). Releases now run on the fleet protoLabsAI/release-tools cadence (LLM notes + Discord).
v0.4.1 — docs/accuracy patch
A small accuracy patch over v0.4.0 — documentation + one error message only, no behaviour change.
Fixes (#16)
- The board's "projection over beads" claim is now consistent.
store.pyhas no separate store of its own — every read/write shellsbr, and beads-rust owns the.beads/*.db+ JSONL. A stale module docstring still called the board "a SQLite data model" (a leftover from before the beads migration); corrected. - Correct beads-rust reference. The dependency is beads-rust — the
brCLI (cratebeads_rust), not the stale, write-broken homebrewbd. The README now links the real repo (Dicklesworthstone/beads_rust), recommendscargo install beads_rust, warns offbd, and the "CLI not on PATH" error says the same. (The code already defaulted tobr.)
Full diff: v0.4.0...v0.4.1
v0.4.0 — resilience, parallel-correctness & PR reconciliation
The plugin's first hardening release: a tested, CI-gated, resilient autonomous board-driver. Everything since v0.2.0 (PRs #4–#13).
Highlights
Testing & CI
- First test suite — 116 tests, runs standalone (no protoAgent host needed).
- CI on the org's Namespace runner (
rufflint + format +pytest). ruff-clean source; manifest ↔ pyproject version coherence.
Throughput
- Parallel drives —
max_concurrent > 1builds several features at once, each in its own worktree. - Merge-poll / PR reconcile Done edge — works without a public webhook URL.
P0 — resilience (survives unattended)
- Failure classification + backoff — transient failures (rate-limit / network / merge-conflict) retry with backoff; capability failures escalate a tier or block; terminal failures (auth / unknown) block. No more "any failure → permanently blocked."
- Stuck-coder watchdog (
coder_timeout_s, default 30 min) — a hung coder is killed and reaped; everyawaitin a drive is now bounded. - Crash recovery on boot — features stranded
in_progressby a previous run are resumed (adopt an open PR) or reset toready.
P1 — concurrency-correctness
- Hot-file overlap guard — two parallel coders never edit the same file (a guaranteed conflict).
- Review-queue WIP limit (
max_pending_reviews, default 5) — don't pile up PRs faster than they merge. - Periodic health sweep (
health_sweep_interval_s) — reclaim slots from dead drives, reap orphaned worktrees. - Foundation-aware dependency gate — opt-in
dep_gate: reviewreleases non-foundation blockers atin_review;foundation=Truefeatures always gate dependents on merge.
P2 — reconciliation
- PR reconcile —
in_reviewfeatures are reconciled to their PR's real state: merged →done, closed-unmerged →blocked(the last "stuck-forever" class).
Compatibility
- Requires protoAgent ≥ 0.27.0, the
br(beads) CLI,git+gh, and thedelegatesplugin with anacpcoder. - Ships disabled; new config knobs all have safe defaults (serial, merge-gated, watchdog on). No breaking changes — install/enable as before.
Full diff: v0.2.0...v0.4.0
v0.2.0 — gated operator API + DS plugin-kit adoption
Security: the operator CRUD/transition routes move to the bearer-gated /api/plugins/project_board prefix (plugin-view rule 2) — previously creatable/transitionable without the bearer on token-gated deployments. Public-of-necessity stays: /board, /webhook/pr (HMAC), /features/{fid}/ci. Kit: dynamic-import plugin-kit.js (ESM — protoContent#224), initPluginView + slug-aware authed apiFetch. Needs protoAgent ≥0.27 (unchanged). From the 2026-06-12 plugin-ecosystem hardening pass.