Skip to content

T-6S37-sdf-active-work-view

Status: closed/done · Impact: high · Complexity: large

Give SDF its first real screen: the “active work, locally and on Git/GitHub” view — tasks, leases, worktrees, PR verdicts — consumed from the existing sanctioned data plane (GET /api/state). Reaching parity here is the gate that authorizes the T-QT7X excision.

LocationRole today
apps/sdlc/lib/services/dashboard/server.tsBun/Hono server: GET /api/state, POST /api/refresh
apps/sdlc/lib/services/dashboard/contract.tszod contract (DashboardState) — source for the typed client
packages/ts/dashboard-client/generated typed client (createDashboardClient({baseUrl}).getState())
apps/dashboard/src/Vue SPA rendering the same view (manual reload only, no filter) — the ideas donor

apps/sdf/src-nuxt/ is the scaffold shell from T-WDXJ with no views.

An SDF active-work page with four cross-linked panels (tasks, leases, local work, PRs) keyed by basename/task_id, the summary KPI strip, the established status color language, interval polling, and a text filter (restoring the two legacy-INDEX_HTML features the SPA dropped). Works in browser mode against a dev proxy and in the desktop shell, which supervises the backend via sdlc dashboard start/stop.

  1. Consume @sdlc/dashboard-client from src-nuxt (a packages/ts API library is the S-0008-sanctioned seam). Relative /api base in browser; absolute http://127.0.0.1:<port>/api in desktop.
  2. Nuxt dev proxy /api127.0.0.1:6174; moon run sdf:dev mirrors the old dashboard:dev pattern (sdlc dashboard start --port 6174 && nuxt dev), exploiting start’s detach-and-return.
  3. Desktop: on launch, spawn/attach sdlc dashboard start for the configured project root (Tauri shell plugin; v1 equivalent of T-CKC1’s sidecar recommendation), reuse pidfile/registry semantics, stop on exit if we started it.
  4. Port the panels from apps/dashboard/src components, adding polling (interval setting, default 5s) and text filter across headline/status/file/id; render lease expiry_state and stale_inflight warnings with the legacy pill treatment.
  5. Storybook stories per panel against fixture DashboardState blobs.
LocationKindChange
apps/sdf/src-nuxt/app/modifyactive-work page, panel components, composables (poll, filter)
apps/sdf/src-nuxt/package.jsonmodifydashboard-client dependency
apps/sdf/src-tauri/src/modifybackend supervise command (spawn/stop sdlc dashboard)
apps/sdf/moon.ymlmodifydev task starts backend + nuxt dev
  • AC-1: browser mode (moon run sdf:dev) renders live tasks, leases, worktrees, and PR verdicts matching GET /api/state for this repo.
  • AC-2: view auto-refreshes on the polling interval and the text filter narrows the task list; both verified in tests and live.
  • AC-3: desktop app launches, brings up (or attaches to) the backend, and shows the same data; closing the window stops a backend it started.
  • AC-4: no imports from apps/sdlc/lib/** (S-0008 validator passes).
  • New data sources or server routes (Phase 5 territory).
  • Deleting apps/dashboard (T-QT7X — immediately after this).
  • ontogen transports (T-UBPG); this phase is plain HTTP via the existing client.
  • T-WDXJ (hard): the scaffold this builds in.
  • Phase 2 of D-0018-sdf-control-plane-app. Feature gaps to restore (polling, filter) identified in the 2026-07-16 research pass against the legacy INDEX_HTML.

T-WDXJ


← Back to Tasks