Problem
The board is single-project by configuration: one repo:, one local_gate_cmd:, one store binding for tools/API/view/loop. Working a ticket in any OTHER repo (most commonly: this plugin itself) requires the operator detour — swap project_board.repo + gate in config → restart → work → swap back → restart. The 2026-07-21/22 dogfood ran this detour four times (issues #56, #76, #78+#79, #84+#85+#86 → PRs #75/#77/#80/#81/#82/#87/#88/#89 — every one a self-fix the team could not board without an operator ceremony).
The data model is most of the way there already: get_store is cache-keyed (db, repo, base_branch) (multiple boards coexist in-process since the ADR 0055 P0 fix), and the loop already reads feature.get("repo") at dispatch. The single-project constraint lives in the config wiring alone.
Proposed direction
A projects: map — one board, one loop, one db, per-feature project resolution:
project_board:
default_project: protoagent
projects:
protoagent: { repo: ~/dev/protoAgent-team, local_gate_cmd: "…", base_branch: main }
board-plugin: { repo: ~/dev/projectBoard-plugin, local_gate_cmd: "…" }
Scope guard (the philosophical half)
This deliberately does NOT turn the team into a portfolio manager. The boundary: a team owns one repo plus its own toolchain (the plugins it runs on) — self-sufficiency for self-fixes. Cross-domain orchestration stays with the portfolio tier (pm-stack). Config should keep small-N ergonomic and large-N discouraged.
Acceptance sketch (when picked up — decomposes into ~3 slices)
- Store: project field/label on features; per-project store_kw resolution; prefix/id behavior documented.
- Loop: per-feature repo/gate/preflight; per-project preflight hold isolation.
- Tools/API/view:
project param on create/update/list (default preserved), view grouping, progress keying unchanged.
Refs
The four detours above; ADR 0055 P0 (board cache keying); #73 (preflight hold); #84 (drawer); the operator detour procedure in the protoEngineer workspace config history.
Problem
The board is single-project by configuration: one
repo:, onelocal_gate_cmd:, one store binding for tools/API/view/loop. Working a ticket in any OTHER repo (most commonly: this plugin itself) requires the operator detour — swapproject_board.repo+ gate in config → restart → work → swap back → restart. The 2026-07-21/22 dogfood ran this detour four times (issues #56, #76, #78+#79, #84+#85+#86 → PRs #75/#77/#80/#81/#82/#87/#88/#89 — every one a self-fix the team could not board without an operator ceremony).The data model is most of the way there already:
get_storeis cache-keyed(db, repo, base_branch)(multiple boards coexist in-process since the ADR 0055 P0 fix), and the loop already readsfeature.get("repo")at dispatch. The single-project constraint lives in the config wiring alone.Proposed direction
A
projects:map — one board, one loop, one db, per-feature project resolution:projectat create (board_create_feature(project=…), default =default_project); the loop resolves repo/gate/worktrees-root per FEATURE, not per instance.db_path, one board view (grouped/filterable by project), one monitor drawer (Live coder monitoring: ACP session/update tap + per-feature progress API + click-to-monitor drawer on the board view #84), one global dispatch semaphore.Scope guard (the philosophical half)
This deliberately does NOT turn the team into a portfolio manager. The boundary: a team owns one repo plus its own toolchain (the plugins it runs on) — self-sufficiency for self-fixes. Cross-domain orchestration stays with the portfolio tier (pm-stack). Config should keep small-N ergonomic and large-N discouraged.
Acceptance sketch (when picked up — decomposes into ~3 slices)
projectparam on create/update/list (default preserved), view grouping, progress keying unchanged.Refs
The four detours above; ADR 0055 P0 (board cache keying); #73 (preflight hold); #84 (drawer); the operator detour procedure in the protoEngineer workspace config history.