T-XFZC-dashboard-spa-leases-view
State: planning/draft · Impact: medium · Complexity: small
Phase 12 (M-VBZB) retired the dashboard server’s hand-rolled INDEX_HTML
view in favor of the new static SPA (packages/ts/dashboard-spa), but the
SPA never grew a replacement for INDEX_HTML’s active/archived lease
detail tables — only a lease-count pill survives (ActiveWorkView). This
task closes that gap so the SPA reaches INDEX_HTML’s lease-detail parity.
INDEX_HTML(removed fromserver.tsby this phase) rendered an active leases table and an archived leases table, each with per-lease detail rows, sourced from/api/state’sactive_leases/archived_leasesarrays.- Those two arrays are still present on
/api/stateand@sdlc/dashboard-client’sDashboardStatetype — nothing was removed server-side. ActiveWorkView.vue(the SPA’s/workview) shows only anactive_leasescount pill; no SPA route renders the lease arrays themselves. The desktop app’sControlPlaneViewrenders a lease table too, but it reads a different, SDF-Rust-backed lease source (useTransport().controlPlaneGetLeases), not/api/state, so it is not reusable here (native-only, out of scope for a standalonesdlc dashboard).
Proposed
Section titled “Proposed”A new SPA view (or a section of an existing one) renders
/api/state.active_leases and archived_leases as tables, matching
INDEX_HTML’s per-lease columns closely enough that nothing INDEX_HTML
showed is now unreachable from the SPA.
Approach
Section titled “Approach”- Confirm the exact columns INDEX_HTML rendered for each lease table (task/lease holder, acquired/expiry time, state) from its removed template or PR history.
- Add a
LeasesView.vue(or extendActiveWorkView.vue) that renders both tables from the existingactive_leases/archived_leasesfields already onDashboardState— no new API surface needed. - Link it from wherever the lease-count pill currently lives.
- Cover it with the same table-rendering test pattern the other new T-DJJ2
views use (
RoadmapProgressView.test.ts,PrBoardView.test.ts, etc.).
| Area | Note |
|---|---|
packages/ts/dashboard-spa/src/views/ | New or extended view rendering the lease tables |
packages/ts/dashboard-spa/src/views/ActiveWorkView.vue | Current home of the lease-count pill; likely link/entry point |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: A dashboard SPA view renders
active_leasesas a table (one row per lease, matching INDEX_HTML’s columns). - AC-2: The same view (or a sibling) renders
archived_leasesas a table. - AC-3: The view is reachable from the SPA’s navigation, not just a raw URL.
Out of scope
Section titled “Out of scope”- none
Dependencies
Section titled “Dependencies”- none
Discovery context
Section titled “Discovery context”- PR #2415 review (P12 static SPA dashboard), thread on
solutions/ontological/desktop/docs/sdlc-json-api-ui-inventory.md: the hard cutover from INDEX_HTML to the SPA dropped the lease-detail tables without a filed follow-up or a completion-note mention. This task and the M-VBZB completion-note update are the fix.