Summary
Add an Issues activity-bar panel + coordinator extension to vimcode that hosts the
shared quadraui::Board component, sources its data from coord board --json, and routes
board actions to coord subcommands. This is Phase 0 (read-only board) of the
coordinator integration: the goal is that the full pipeline can eventually be driven from
vimcode at parity with coord-tui.
Design doc: docs/COORDINATOR_INTEGRATION.md (§3, §6, §7, §11).
Why
vimcode and coord-tui are both quadraui apps. We want users who live in either one to do
everything from it. coordinator owns the issue lifecycle (the verb); vimcode owns the code
(the noun). Hosting the board in vimcode is the first step toward the real differentiator —
reviewing the agent's work as real code, in a real editor (Phase 2+, follow-on issues).
Blocks / depends on
- quadraui — reusable
Board component (render + input; BoardModel in / BoardAction
out). JDonaghy/quadraui (filed alongside).
- claude-coordinator —
coord board --json projection. JDonaghy/claude-coordinator
(filed alongside).
Scope (Phase 0 — read-only)
Follow the platform-neutrality rule: shared logic in render.rs/engine, 1–3 lines of
wiring per backend, no bespoke GTK/TUI board code.
src/render.rs — BoardData view model built from the coord board --json payload,
handed to quadraui::Board; new ScreenLayout.board slot (model on ext_sidebar).
src/core/ — engine fields for the panel (selection, focus, last fetched model, poll
receiver). Pure; no Python/GTK. New src/core/coord_client.rs isolates the coord …
subprocess + JSON parse so core stays testable (mock the client in tests).
src/gtk/ + src/tui_main/ — register the Issues entry in the activity bar (the SC
and Extensions panels are the template — TuiPanel, ext_sidebar, PanelRegistration)
and draw quadraui::Board. Key/click → BoardAction (no actions wired yet in Phase 0
beyond selection/open).
- Poll loop — refresh
coord board --json on a timer using the existing
poll_ext_registry / poll_sc_diff pattern (try_recv on a background receiver).
- Lua extension bundle — packaging/glue only: registers the Issues activity entry and
:Coord* commands. Does not render the board and holds no pipeline logic.
Out of scope (later phases, separate issues)
- Actions (dispatch / test / review / merge) wired to
coord subprocess — Phase 0 is
read-only.
- Issue authoring as markdown buffers (
:CoordRefine) — Phase 1.
- In-editor diff review tab +
coord report-result round-trip — Phase 2 (the differentiator).
- Running
coord notify from vimcode — opt-in, later.
Acceptance
- Selecting Issues in the activity bar renders the coordinator board (shared quadraui
component) in both the TUI and GTK backends.
- The board reflects
coord board --json and refreshes on the poll timer.
- No board-specific drawing code in
src/gtk/ or src/tui_main/ beyond activity-bar
registration + a quadraui::Board draw call.
cargo build, cargo test --no-default-features, cargo clippy -- -D warnings,
cargo fmt all pass.
Related
- Design doc:
docs/COORDINATOR_INTEGRATION.md
- quadraui Board component, coordinator
coord board --json (filed alongside).
Summary
Add an Issues activity-bar panel + coordinator extension to vimcode that hosts the
shared
quadraui::Boardcomponent, sources its data fromcoord board --json, and routesboard actions to
coordsubcommands. This is Phase 0 (read-only board) of thecoordinator integration: the goal is that the full pipeline can eventually be driven from
vimcode at parity with coord-tui.
Design doc:
docs/COORDINATOR_INTEGRATION.md(§3, §6, §7, §11).Why
vimcode and coord-tui are both quadraui apps. We want users who live in either one to do
everything from it. coordinator owns the issue lifecycle (the verb); vimcode owns the code
(the noun). Hosting the board in vimcode is the first step toward the real differentiator —
reviewing the agent's work as real code, in a real editor (Phase 2+, follow-on issues).
Blocks / depends on
Boardcomponent (render + input;BoardModelin /BoardActionout).
JDonaghy/quadraui(filed alongside).coord board --jsonprojection.JDonaghy/claude-coordinator(filed alongside).
Scope (Phase 0 — read-only)
Follow the platform-neutrality rule: shared logic in
render.rs/engine, 1–3 lines ofwiring per backend, no bespoke GTK/TUI board code.
src/render.rs—BoardDataview model built from thecoord board --jsonpayload,handed to
quadraui::Board; newScreenLayout.boardslot (model onext_sidebar).src/core/— engine fields for the panel (selection, focus, last fetched model, pollreceiver). Pure; no Python/GTK. New
src/core/coord_client.rsisolates thecoord …subprocess + JSON parse so
corestays testable (mock the client in tests).src/gtk/+src/tui_main/— register the Issues entry in the activity bar (the SCand Extensions panels are the template —
TuiPanel,ext_sidebar,PanelRegistration)and draw
quadraui::Board. Key/click →BoardAction(no actions wired yet in Phase 0beyond selection/open).
coord board --jsonon a timer using the existingpoll_ext_registry/poll_sc_diffpattern (try_recvon a background receiver).:Coord*commands. Does not render the board and holds no pipeline logic.Out of scope (later phases, separate issues)
coordsubprocess — Phase 0 isread-only.
:CoordRefine) — Phase 1.coord report-resultround-trip — Phase 2 (the differentiator).coord notifyfrom vimcode — opt-in, later.Acceptance
component) in both the TUI and GTK backends.
coord board --jsonand refreshes on the poll timer.src/gtk/orsrc/tui_main/beyond activity-barregistration + a
quadraui::Boarddraw call.cargo build,cargo test --no-default-features,cargo clippy -- -D warnings,cargo fmtall pass.Related
docs/COORDINATOR_INTEGRATION.mdcoord board --json(filed alongside).