Releases: protoLabsAI/portfolio-plugin
Release list
v0.14.7 — PM-side task cancel
Added
- portfolio_cancel_feature — the PM can un-dispatch a task on a team board (#27). The PM could dispatch but never cancel; a stuck or duplicate task had no recovery from the PM side (Roxy's task_close failed with 'unknown issue' — no write path to the team's board). New tool POSTs to the team's project_board /features/{id}/cancel over the stored bearer, moving the feature to the terminal 'cancelled' lane. The managed repo + any PR are untouched. Pairs with the v0.14.6 dispatch dedup for real queue control. (#28)
v0.14.6 — dispatch dedup
Added
- portfolio_dispatch refuses a same-title task already open on the board (#25). The PM had no guard against re-dispatching queued work, so duplicate tasks stacked up (surfaced by Roxy dispatching several 'Assess repo' tasks). Dispatch now reads the board first and skips a normalized-title match in an open lane (done/cancelled don't count), naming the existing feature;
force=truedispatches a second copy anyway, and an unreadable board never blocks. (#26)
v0.14.5 — remove a dead ephemeral board from the dashboard
Fixed
- A dead ephemeral board can be removed from the dashboard (#23). When a spawned team's member dies (e.g. a host restart), its board card showed
All connection attempts failedwith no way to clear it — teardown refused (the team was already gone from the registry) and the only recourse was a console reload. Unreachable board cards now carry a Remove (✕) that drops the board from whatever store backs it (spawned team → teardown; remote → unregister; dead local member → stop + purge), idempotently. NewPOST /api/plugins/portfolio/forget+_forget_board. (#24)
v0.14.4 — spinup works on two-tier hosts (protoAgent ≥ 0.78)
Fixed
portfolio_spinup_teamfailed withError binding repo into team config: ENOENTon every current host (#21). protoAgent ≥ 0.78 scaffolds the team workspace config at<ws>/config/langgraph-config.yaml(ADR 0065 two-tier paths); the bind step still read the pre-two-tier root location, the rollback purged the workspace, and the PM retried into a debugging spiral. The config path now resolves per host layout, with the legacy root as fallback. (#22)
v0.14.3 — readable dashboard fetch errors
Fixed
- Dashboard fetches surface readable errors instead of raw JSON-parse failures. Any transient non-JSON response (a fleet-proxy hiccup, a restarting member, an HTML error page) hit the 5-second poll as WebKit's
SyntaxError: The string did not match the expected pattern. A JSON error body now surfaces itsdetail/errormessage, a non-JSON body its HTTP status — and the message self-clears on the next successful poll. The spinup drawer's second barer.json()reuses the same helper. (#20)
v0.14.2 — protoAgent ≥ 0.77 compatibility (two-tier store paths)
Fixed
- Portfolio dashboard 500s on protoAgent ≥ 0.77 — the plugin still imported the legacy
scope_leafpath knob, deleted in protoAgent 0.77 (protoAgent#1481, ADR 0065). Every data route (/api/plugins/portfolio/*) raisedImportError, surfacing in the console asSyntaxError: The string did not match the expected pattern(WebKit parsing the text/plain 500 body). PM data stores (portfolio_snapshot.json,portfolio_links.json,portfolio_teams.json) now resolve via the two-tierinstance_paths().store()API, with ascope_leaffallback on pre-0.77 hosts —min_protoagent_versionstays 0.42.0. (#19)
v0.13.1 — isolated board db path fix
The isolated board db now lives at /.beads/board.db (beads requires a .beads/ component in the path). 90 tests.
v0.13.0 — isolated team board
A spawned team's board is now isolated by default (its own scoped beads DB, not the repo's committed .beads) — so a team on a repo with an existing board never resumes/pollutes it, only works what the PM dispatches. shared_board=True opts back into the repo's board. No projectBoard-plugin change (it already honors db_path). 90 tests.
v0.12.0 — prebuilt archetypes + branch freshness
Spin up a team for a frequently-worked repo with one word via portfolio.team_archetypes presets (portfolio_spinup_team(archetype=...) + a dashboard dropdown), and the repo is freshened (git fetch + fast-forward the default branch) on spawn so the team never works on stale code. 87 tests.
v0.11.0 — spin up team button
The Portfolio dashboard gains a + Team button: a form (name, repo, gate, onboard/auto-dispose) that POSTs to a new gated /spinup route and refreshes the grid. Extracted _spinup_team() shared by the tool + the button. 77 tests.