539 lines
42 KiB
Markdown
539 lines
42 KiB
Markdown
# Waggle OS UX Refactor — Master Implementation Plan
|
||
|
||
> **This is a sequenced INDEX, not a re-paste.** Each phase references the detailed gap cards
|
||
> (`gap-cards/S00..S21.md`) and deltas (`deltas/*.md`) that carry the full build spec. It exists to
|
||
> put them in one coherent, dependency-ordered, full-stack sequence under the locked execution model.
|
||
> The PRD (`../Waggle_OS_UX_Refactor_Master_Handoff_Package/Waggle_OS_UX_Refactor_PRD.md`) is the
|
||
> source of truth; this plan resolves PRD §8, PRD §21 sprints, and Blueprint §19 roadmap into a single
|
||
> **Phase 0..6**. Every backend claim is grounded in `docs/backend-map/` or live source.
|
||
|
||
---
|
||
|
||
## 1. Executive summary, locked decisions, and the 8 non-negotiable product rules
|
||
|
||
### Executive summary
|
||
|
||
Waggle OS is today a single-route windowed desktop OS (`apps/web/src/components/os/Desktop.tsx` +
|
||
`Dock.tsx`; 27 `AppId` window types; no react-router) sitting on a deep, mostly-built backend substrate.
|
||
The refactor converts it into a **workspace-first Agent Desktop** whose spine is **Home Cockpit →
|
||
Workspace Desktop → Ctrl+K → visible Memory/Artifacts → Agents/Skills/Automations → governed Extend →
|
||
Team**. We deliver this as an **in-place incremental refactor** of `apps/web` + **targeted local-sidecar
|
||
extensions** — reusing `workspace-manager`, the `workspace-state` builder, the `.mind` schema, the
|
||
harvest pipeline, `install-audit`, and the approval/trust runtime. The total backend work resolves to
|
||
**53 endpoints** (35 net-new + 18 extend), **5 new sidecar route files** (`home.ts`, `command.ts`,
|
||
`artifacts.ts`, `agents.ts`, `mcps.ts`) + 1 alias plugin (`automations.ts`), **2 new JSON-file stores**
|
||
(`agents.json`, `artifacts.json`), **~13 new design-system components**, and **at most one conditional
|
||
SQLite migration** (`memory_frames.metadata`). All 21 numbered screens + the AppShell are covered.
|
||
|
||
### Locked decisions (founder, via PRD)
|
||
|
||
1. **In-place INCREMENTAL refactor** of `apps/web` + targeted backend extensions. NOT a rebuild.
|
||
2. **FULL-STACK** scope (net-new/extended backend APIs *and* frontend).
|
||
3. **Mockups are DIRECTIONAL** (PRD §24); PRD acceptance criteria win over pixels.
|
||
4. **Local-first by default** — desktop FE talks ONLY to the local sidecar (`:3333`).
|
||
5. **Backend-map is the contract reference**; ground every backend claim there or in live source.
|
||
|
||
### The 8 non-negotiable product rules (condensed handoff §"Non-negotiable product rules"; PRD §6)
|
||
|
||
1. **Workspace is the primary object.** Everything happens inside or across workspaces.
|
||
2. **Ctrl+K is always available** — search, launch, run, create, navigate, extend, from anywhere.
|
||
3. **Memory is visible, inspectable and editable** — source, confidence, scope, evidence, edit/delete.
|
||
4. **Artifacts are outcomes, not attachments** — documents/decks/sheets/dashboards/research are first-class.
|
||
5. **Connectors and MCPs live in Extend, not hidden Settings.**
|
||
6. **Agents must declare scope, model, memory, tools, skills, permissions, and autonomy** (no hidden access).
|
||
7. **No import or elevated tool access without explicit user approval.**
|
||
8. **Use existing backend foundations wherever possible** (do not duplicate backend state logic in the FE).
|
||
|
||
> PRD §20.4 "Avoid": do not add top-level apps that don't fit the IA; do not duplicate backend state
|
||
> calc in the FE; do not hide connectors/MCPs in Settings; **do not default to blank chat on launch**;
|
||
> do not let agents/automations gain hidden access.
|
||
|
||
---
|
||
|
||
## 2. Current state in one paragraph (from the inventories)
|
||
|
||
The FE is a **single `/` route** (`apps/web/src/pages/Index.tsx` → `BootScreen` → `Desktop`); all
|
||
"navigation" is window management in `useWindowManager.ts` keyed by `AppId` (27 ids in `lib/dock-tiers.ts`;
|
||
a stale 8-id `AppView` union and dead `terminal/calculator/notes` ids are cleanup candidates). The dock
|
||
(`Dock.tsx` + `lib/dock-tiers.ts`) already supports **zone-parent flyouts**, which is the hook for the new
|
||
Work/Intelligence/Extend/Team IA without a router. The single backend gateway is `lib/adapter.ts`
|
||
(~1930 LOC, ~150 methods); domain hooks (`useWorkspaces`, `useChat`, `useMemory`, …) wrap it. The
|
||
sidecar already serves **16 of 65** PRD §16 endpoints as-is and **30 more partially**; the rich substrate
|
||
already present includes: the `workspace-state` builder + `WorkspaceNow` block (Home/Workspace seed), the
|
||
full harvest engine (preview/commit/sources), `install_audit` + `trust-model` + the `confirmation.ts`
|
||
approval gate + persistent grants + the `approval_required` SSE event, the EU-AI-Act `ai_interactions`
|
||
append-only store, `cron` (the Automations capability), `teams.db` RBAC CRUD, and the `knowledge_*` graph.
|
||
The biggest **genuine gaps** are: **no Artifact entity/route** anywhere, **no sidecar `/api/agents/*`**
|
||
(only the cloud server has it), **MCP runtime never populated** (`local/index.ts:911`), and **memory has
|
||
no confidence/provenance/metadata column**. Design-wise the Hive DS (`ui/*`, ~50 shadcn primitives +
|
||
`waggle-theme.css` tokens) covers most needs; ~13 product-typed components are net-new.
|
||
|
||
---
|
||
|
||
## 3. Phase table (Phase 0..6)
|
||
|
||
> **Numbering reconciliation.** Three sources order the work slightly differently:
|
||
> **PRD §8** (Phase 0-5) and **PRD §21** (Sprint 1-9) put **Intelligence/builders (P3) BEFORE Extend
|
||
> (P4)**; the **Blueprint §19 roadmap** and the **condensed handoff sequence** put **Extend BEFORE
|
||
> builders**. The `backend-api-delta.md` already commits to the **PRD §8 ordering**. Because **the PRD
|
||
> wins** (locked decision 3 + "PRD acceptance criteria win"), this plan adopts **PRD §8 phase numbering**:
|
||
> P0 Align → P1 Core Runtime → P2 Work+Onboarding → **P3 Intelligence** → **P4 Extend** → P5 Team →
|
||
> **P6 Hardening** (PRD §21 Sprint 9 / Blueprint Phase 7, promoted to a first-class phase because PRD §26
|
||
> DoD #10 "all screens have required states" is otherwise the weakest-traced item — see coverage-check
|
||
> GAP-D4). Phases 3 and 4 are independent (see §4) and MAY be parallelized by separate streams, but the
|
||
> default sequence is PRD order.
|
||
|
||
**Verification gate for EVERY phase** (CLAUDE.md §2 — run, do not claim):
|
||
```
|
||
npx tsc --noEmit --project packages/shared/tsconfig.json # if shared types touched
|
||
npx tsc --noEmit --project packages/hive-mind-core/tsconfig.json # if substrate/migration touched
|
||
npx tsc --noEmit --project packages/server/tsconfig.json # sidecar routes (NOT typechecked by npm run build)
|
||
npx tsc --noEmit --project packages/agent/tsconfig.json # if agent runtime touched
|
||
npm run build # typechecks apps/web (the FE)
|
||
npm run test -- --run # vitest unit
|
||
npm run lint # ESLint repo-wide (no-explicit-any is error repo-wide per CLAUDE.md §10)
|
||
```
|
||
Build order matters (CLAUDE.md §2 / MEMORY 0601 S3): **shared → hive-mind-core → core → agent → server**.
|
||
|
||
---
|
||
|
||
### Phase 0 — Architecture alignment & IA freeze
|
||
|
||
- **Goal:** freeze the IA + route/vocabulary names; establish the shared-type spine + DS token layer that
|
||
every later write-path depends on. No new endpoints. (PRD §8 Phase 0 / §21 Sprint 1 / Blueprint P0.)
|
||
- **Screens delivered:** **S00 (AppShell + IA + Navigation)** — partial: the shell reframe + nav labels +
|
||
Ctrl+K provider skeleton. (Full Ctrl+K UX lands in P1/S03.)
|
||
- **Frontend tasks**
|
||
- *Keep-promote:* `Dock.tsx` + `lib/dock-tiers.ts` zone-parent model → regroup dock entries into
|
||
**Work / Intelligence / Extend / Team / System** zones (PRD §10 IA) — no react-router (see open-question
|
||
**B1**, recommended: in-place dock reframe, keep windowed `AppId` navigation). `Desktop.tsx`
|
||
`appConfig` + `renderAppContent` switch stays the navigation engine.
|
||
- *Rework:* consolidate the dual app-id union onto `AppId`; delete stale `AppView` + dead ids
|
||
(`terminal/calculator/notes`) (`_inventory/frontend.md` §b). Add the **global Ctrl+K provider** shell
|
||
(compose `ui/command.tsx`; absorb `overlays/GlobalSearch.tsx`).
|
||
- *Create:* `components/os/AppShell.tsx` (compose `ui/sidebar.tsx` + `ui/scroll-area.tsx`),
|
||
`WorkspaceSwitcher` (compose `ui/command.tsx` + `ui/dropdown-menu.tsx`), the `--sem-*` token alias layer.
|
||
- **DoD #1 launch-flip (coverage-check GAP-D1):** change the boot default route so launch lands in
|
||
**Home Cockpit**, not blank chat — S00 explicitly owns this (`pages/Index.tsx`/`Desktop.tsx` initial
|
||
window). Even though S01 builds later, the routing decision is frozen here.
|
||
- **Backend tasks** (no routes; `backend-api-delta.md` "Phase 0")
|
||
- `WorkspaceConfig` V2 additive optional fields (`description, type, status, agentIds[], connectorIds[],
|
||
mcpIds[], updatedAt, lastActiveAt`) on `packages/hive-mind-core/src/workspace-manager.ts:5-58` +
|
||
`CreateWorkspaceOptions:60-95`. **JSON file (`workspace.json`) — NO DB migration.**
|
||
- Write-side stamps: `updatedAt` in `update()` (`workspace-manager.ts:222`); `lastActiveAt` from the
|
||
chat/agent loop.
|
||
- **Shared-types changes** (`shared-types-delta.md` §1): add the PRD §15.2 union block to
|
||
`packages/shared/src/types.ts` (`WorkspaceType, Scope, Confidence, MemoryKind, ArtifactKind, AgentType,
|
||
AutonomyLevel, ExtensionType`) + export `interface WorkspaceConfigV2`; FE imports them into
|
||
`apps/web/src/lib/types.ts`. **Enums live once in `@waggle/shared`** (no cross-file union duplication).
|
||
- **Design-system pieces** (`design-system-delta.md` §b): add `--sem-work/-intelligence/-healthy/
|
||
-attention/-risk` alias vars in `waggle-theme.css` mapping to existing `--status-*` tokens. No new base
|
||
palette. Build `AppShell` + `WorkspaceSwitcher` (compose existing primitives).
|
||
- **Exit criteria → PRD acceptance:** IA + route names frozen (no major UX ambiguity, Blueprint P0);
|
||
shared types compile across packages; **launch no longer defaults to blank chat** (DoD #1 routing
|
||
decision committed); dock shows the 5 IA zones.
|
||
- **Verify:** full gate; specifically `tsc` on `shared` + `hive-mind-core` (V2 fields) + `apps/web`.
|
||
|
||
---
|
||
|
||
### Phase 1 — Core runtime: Home Cockpit, Workspace Desktop, Command Center (Ctrl+K)
|
||
|
||
- **Goal:** the daily spine. A returning user "can continue work in under 30 seconds" (Blueprint P2 exit).
|
||
(PRD §8 Phase 1 / §21 Sprints 2-3 / Blueprint P1-P2.)
|
||
- **Screens delivered:** **S01 Home Cockpit**, **S02 Workspace Desktop**, **S03 Command Center (Ctrl+K)**
|
||
(S00 Ctrl+K provider completed here).
|
||
- **Frontend tasks**
|
||
- *Keep-promote:* `components/os/WorkspaceBriefing.tsx` → **Home Cockpit** widgets (PRD §20.1 named seed);
|
||
`DashboardApp.tsx` (workspaces grid) folds into Home. `ChatWindowInstance` `WorkspaceBriefing` home
|
||
screen is the precedent.
|
||
- *Create (S01):* `HomeCockpit` (PRD §20.3) — greeting + ranked workspace cards + suggested actions +
|
||
overnight summary + quick-capture. Retire `overlays/LoginBriefing.tsx`, absorb its catch-up into first
|
||
paint (open-question **C1**).
|
||
- *Create (S02):* `WorkspaceDesktop` as a **maximized `AppWindow`** (open-question **C4/A1** — fixed
|
||
layout v1, no parallel grid engine) with the **8 §12.2 tabs** incl. the **Settings tab** (coverage-check
|
||
G1) and a Tasks tab seeded from `WorkspaceState` (open-question **C7**). Sessions surface via Timeline +
|
||
Ctrl+K (coverage-check G2 — document this, do not build a separate Sessions screen v1).
|
||
- *Create (S03):* `CommandCenter` Ctrl+K overlay on the P0 provider; result groups for the 6 verbs
|
||
(search/launch/create/run/navigate/extend). Reuse the chat approvals pipeline for gated commands
|
||
(open-question **C9**).
|
||
- **Backend tasks** (`backend-api-delta.md` Phase 1)
|
||
- **New `routes/home.ts`:** `GET /api/home/briefing` (NET-NEW; cross-workspace ranker over
|
||
`buildWorkspaceState()`/`buildWorkspaceNowBlock()`), `GET /api/home/overnight` (NET-NEW; since-last-login
|
||
window).
|
||
- **Extend `memory.ts`:** `POST /api/quick-capture` (thin handler → memory write + awareness row for tasks).
|
||
- **Extend `workspaces.ts`:** `GET /api/workspaces/:id/state` (thin route over the existing builder),
|
||
`GET /api/workspaces/:id/activity` (thin alias over events).
|
||
- **New `routes/command.ts`:** `GET /api/command/search` (federates memory/workspaces/skills/sessions),
|
||
`GET /api/command/recent`, `GET /api/command/suggestions` (NET-NEW); `POST /api/command/execute`
|
||
(EXTEND/alias over existing plural `/api/commands/execute` — **alias, don't rename**, open-question **B4**).
|
||
- *No backend* for S02 Tasks/Members/status-bar (all exist; compose client-side).
|
||
- **Shared-types changes:** FE `Workspace` view-model gains `description?/type?/status?/…` (`shared-types-delta`
|
||
§2b); NEW shared `Command`/`CommandResult` (`shared-types-delta` §9); seed identity on the greeting path
|
||
(open-question **B8** — onboarding writes profile AND identity so Home greets by name).
|
||
- **Design-system pieces:** `WorkspaceCard`, `EmptyState`, `ErrorState`, `Skeleton` compositions,
|
||
`ActivityFeed`, `Timeline` (extract from `TimelineApp.tsx` + `lib/timeline-events.ts`), the Ctrl+K
|
||
`CommandCenter` shell with a11y (`aria-label`, focus trap from cmdk).
|
||
- **Exit criteria → PRD acceptance:** PRD §22.1 "land in Home Cockpit and continue useful work" +
|
||
"use Ctrl+K to find and run all major actions"; DoD #1/#2/#3. Home renders first-run-empty + daily +
|
||
attention + overnight-failure states (PRD §14.2); Ctrl+K covers all 6 verbs (PRD §12.3).
|
||
- **Verify:** full gate; `tsc` on `server` (new `home.ts`/`command.ts`) + `apps/web`.
|
||
|
||
---
|
||
|
||
### Phase 2 — Work layer: Memory Center, Artifact Center, Onboarding, Workspace Creation
|
||
|
||
- **Goal:** memory + outcomes are visible and actionable; the day-0 onboarding chain works end-to-end.
|
||
(PRD §8 Phase 2 / §21 Sprints 4-5 / Blueprint P3.)
|
||
- **Screens delivered:** **S04 Memory Center**, **S05 Artifact Center**, **S12 First Launch**,
|
||
**S13 Who Are You**, **S14 Tool Discovery**, **S15 Memory Import**, **S16 Memory Review**,
|
||
**S17 Workspace Creation**.
|
||
- **Frontend tasks**
|
||
- *Rework:* `MemoryApp.tsx` → **Memory Center** (PRD §20.2) with source/confidence/evidence/scope +
|
||
edit/merge/archive/delete; keep the working Graph tab (open-question **A3** — ship in v1) and the
|
||
Harvest/Weaver/Wiki/Evolution tabs.
|
||
- *Create (S05):* `ArtifactCenter` (PRD §20.3) grid/table + DetailDrawer + cross-object related search.
|
||
- *Rework onboarding (PRD §20.2):* keep `OnboardingWizard.tsx` shell, redesign into the 5-step
|
||
profile→tool-discovery→import→review→workspace chain (S12-S17), retrofitting the new `BuilderStepper`.
|
||
**Split Import (stages previews) from Review (commits)** — current code commits at S15; fix per
|
||
open-question **C33** ("nothing imports without review/approval").
|
||
- **Backend tasks** (`backend-api-delta.md` Phase 2)
|
||
- **Extend `memory.ts`:** `GET /api/memory` (alias), `GET /api/memory/:id` (NET-NEW thin),
|
||
`POST /api/memory` (alias), `PATCH /api/memory/:id` (PATCH+bare id), `POST /api/memory/:id/archive`
|
||
(NET-NEW thin), `DELETE /api/memory/:id` (alias), `POST /api/memory/merge` (NET-NEW logic).
|
||
- **Extend `harvest.ts`:** `preview` returns all items + per-item `confidence` + normalized `kind`;
|
||
`commit` accepts `{selectedIds}`; new thin `POST /api/harvest/sources/:id/sync`.
|
||
- **New `routes/artifacts.ts`** (largest net-new domain — aggregation only, no new data store):
|
||
`GET /api/artifacts`, `POST`, `GET/:id`, `PATCH/:id`, `DELETE/:id`, `GET /api/artifacts/search-related`.
|
||
Backed by a lightweight **`artifacts.json` index** over the existing file/document/storage stores
|
||
(open-question **A6** — classification rule: artifact = explicit produced output, not every input).
|
||
- **Extend `workspaces.ts`** (S17): richer `POST /api/workspaces` body (Phase-0 V2 fields); optionally
|
||
extend `WorkspaceTemplate` shape. Record connector/MCP ids as **intent**, do not install at create time
|
||
(open-question **C35**).
|
||
- **Extend `profile.ts`** (S13): add `workType/teamSize/goals` to the allow-list; write profile AND seed
|
||
identity (open-question **B8**). *S12/S14 need ZERO net-new backend* (catalogs already have routes).
|
||
- **Shared-types changes:** NEW shared `Memory` entity + FE view-model (`shared-types-delta` §3); NEW
|
||
`Artifact` everywhere (§4); adopt PRD §15.2 `MemoryKind` canonical + a pure `lib/harvest-kind-map.ts`
|
||
(open-question **B6**); confidence: heuristic at preview, LLM reserved for the standing J08 queue
|
||
(open-question **B2**).
|
||
- **Migrations** (`backend-api-delta.md` §M): **M1 — `memory_frames.metadata TEXT` (CONDITIONAL)** — ship
|
||
it *only* if persisted confidence/scope/status becomes a real filter axis (open-questions **A8/B2**); the
|
||
idempotent ADD-COLUMN pattern is at `hive-mind-core/src/mind/db.ts:116-124`. **M1' — `artifacts` index**
|
||
is a JSON file (no DB). Default: preview-only confidence + in-app filtering needs **no migration**.
|
||
- **Design-system pieces:** `ConfidenceBadge`, `EvidenceChip` (promote the `MemoryApp.tsx` provenance
|
||
pill), `EvidencePanel`, `DetailDrawer` (wrap `ui/sheet.tsx` right-side), `StatusBadge` (semantic +
|
||
non-color indicator — the biggest a11y gap vs `ui/badge.tsx`), `ViewToggle`, `BuilderStepper`
|
||
(retrofit onboarding), `MemoryCard`/`ArtifactRow`.
|
||
- **Exit criteria → PRD acceptance:** PRD §22.1 "inspect and edit memory"; DoD #4 (source/confidence/
|
||
evidence/scope/edit/delete) + #5 (artifact outcome + related search, the "Germany GTM" cross-object
|
||
acceptance PRD §12.5) + #6 (onboarding chain). Memory states §14.4 + Extension/Workspace states render.
|
||
- **Verify:** full gate; if M1 ships, `tsc` + `npm run test` on `hive-mind-core` (migration) + a migration
|
||
round-trip test; `tsc` on `server` (new `artifacts.ts`) + `apps/web`.
|
||
|
||
---
|
||
|
||
### Phase 3 — Intelligence layer: Agents, Skills, Automations (+ builders)
|
||
|
||
- **Goal:** users can create/run the core intelligence objects with validation + review. (PRD §8 Phase 3 /
|
||
§21 Sprint 6 / Blueprint P5 "Builders".) **Independent of Phase 4** (see §4).
|
||
- **Screens delivered:** **S09 Agent Center**, **S18 Agent Builder**, **S06 Skills Hub**, **S19 Skill
|
||
Builder**, **S11 Automation Center**, **S20 Automation Builder**.
|
||
- **Frontend tasks**
|
||
- *Rework:* `AgentsApp.tsx` (Personas) → **Agent Center** tabs (All/Personal/Workspace/Team/Autonomous/
|
||
Archive; Templates is a side affordance — open-question **C22**); `CapabilitiesApp.tsx` → **Skills Hub**;
|
||
`ScheduledJobsApp.tsx` → **Automation Center**.
|
||
- *Create:* `AgentBuilder` (PRD §20.3, §12.9 stepper — declares goal/scope/model/memory/tools/skills/
|
||
permissions/autonomy), `SkillBuilder` (§12.6 stepper), `AutomationBuilder` (§12.10 stepper). Reuse the
|
||
`BuilderStepper` from P2.
|
||
- **Backend tasks** (`backend-api-delta.md` Phase 3)
|
||
- **New `routes/agents.ts`** (sidecar `/api/agents/*` is absent — only the cloud server has it):
|
||
`GET /api/agents`, `POST`, `GET/:id`, `PATCH/:id` (NET-NEW over a new **`agents.json`** store, mirrors
|
||
`agent-groups.json` — open-question **B3**); `POST /api/agents/:id/run` (EXTEND → real executor
|
||
`POST /api/fleet/spawn`, NOT the `agent-groups/:id/run` stub), `POST /api/agents/:id/pause` (EXTEND →
|
||
fleet pause), `GET /api/agents/:id/traces` (NET-NEW read over `execution_traces`).
|
||
- **Extend `skills.ts`:** `PATCH /api/skills/:id` + `POST /api/skills/:id/test` (`:id` variants over the
|
||
existing name-keyed handlers); `POST /api/skills/:id/install` (NET-NEW dispatcher: starter/pack/
|
||
marketplace). Skill **create** is the existing `POST /api/skills/create` (the Builder's real target).
|
||
- **New `automations.ts` alias plugin over cron:** `GET/POST/PATCH /api/automations`, `/:id/run`,
|
||
`/:id/pause`, `/:id/logs` (all EXTEND aliases over `/api/cron/*`); `POST /api/automations/test`
|
||
(NET-NEW no-persist dry-run — do NOT reuse `cron/:id/trigger` which executes+auto-enables,
|
||
open-question **C26**). Also fix the FE bug: `updateCronJob` calls `PUT` but only `PATCH` is registered
|
||
(`adapter.ts:836` vs `cron.ts`). Triggers/conditions/actions ride the existing `job_config TEXT` blob —
|
||
**no migration**. Schedule-only triggers v1; defer Event triggers (open-question **C24**).
|
||
- **Shared-types changes:** MODIFY shared `AgentDef` with §15.5 fields + NEW FE `Agent` view-model
|
||
(`shared-types-delta` §5); NEW `Skill` entity (§6); NEW `Automation` superset of `CronJob` (§7). Adopt PRD
|
||
`organization` skill-scope vocabulary (open-question **C36**).
|
||
- **Migrations:** **M3 — `agents` table is OPTIONAL and NOT recommended for v1** (use `agents.json`). No
|
||
required migration in this phase.
|
||
- **Design-system pieces:** `AgentCard`, `SkillCard`, `AutomationRunRow`, `BuilderStepper` reuse,
|
||
`ApprovalModal` (wrap `ui/alert-dialog.tsx`) for agent-elevation/automation-test approvals.
|
||
- **Exit criteria → PRD acceptance:** PRD §22.1 "create a workspace, agent, skill, and automation"; DoD #7
|
||
(coherent IA across agents/skills/automations). Agent states §14.5 + Automation states §14.6 render;
|
||
agent declares all §12.9 fields (rule #6); automation failures surface to Home (Journey 16 — wire the
|
||
`home/overnight` failure feed to S11/S20).
|
||
- **Verify:** full gate; `tsc` on `agent` (if runtime touched) + `server` (new `agents.ts`/`automations.ts`)
|
||
+ `apps/web`.
|
||
|
||
---
|
||
|
||
### Phase 4 — Extend layer: Connectors, MCPs, Marketplace, Install Audit
|
||
|
||
- **Goal:** capabilities are discoverable, installable, and **governed** (Blueprint P4 exit). (PRD §8
|
||
Phase 4 / §21 Sprint 7.) **Independent of Phase 3** (see §4).
|
||
- **Screens delivered:** **S07 Connector Hub**, **S08 MCP Hub**, **S21 Marketplace / Extend Waggle**.
|
||
- **Frontend tasks**
|
||
- *Rework:* `ConnectorsApp.tsx` → **Connector Hub** (lift connectors out of the Services/MCP-tabs shell);
|
||
the MCP catalog tab → standalone **MCP Hub**; consolidate the **doubly-represented Marketplace**
|
||
(`MarketplaceApp.tsx` + the `CapabilitiesApp` marketplace section) into one **Marketplace / Extend**
|
||
surface (`_inventory/frontend.md` §f IA cleanup).
|
||
- *Create:* the unified Extend faceted catalog (S21) federating the six local domains client-side
|
||
(open-question **A5** — federate-at-read, no `marketplace.db` migration). Install modals render the
|
||
`TrustAssessment` (risk badge + permission summary via `formatTrustSummary`) + a revoke action.
|
||
- **Backend tasks** (`backend-api-delta.md` Phase 4)
|
||
- **Extend `connectors.ts`:** `POST /api/connectors/:id/sync` (NET-NEW, **phased stub** — MVP =
|
||
`healthCheck()` + stamp `lastSyncAt`; full data re-pull deferred, coverage-check **C1**/open-question
|
||
**C16**), `POST /api/connectors/:id/revoke` (EXTEND alias → disconnect + audit), `connect` (+audit),
|
||
`GET /api/connectors` (payload enrichment), optional `/health` + `/activity`.
|
||
- **New `routes/mcps.ts` + the foundational runtime work:** `GET /api/mcps`, `POST /api/mcps/install`
|
||
(via the existing marketplace installer → writes `.mcp.json`), `POST /api/mcps/:id/test`,
|
||
`/:id/revoke`, `POST /api/mcps` (custom), `/:id/start`, `/:id/stop`, `PATCH /:id/permissions`,
|
||
`GET /:id/logs` (phased — deferred if no log-capture infra, coverage-check **C2**). **CRITICAL
|
||
foundational task (coverage-check C4):** populate `mcpRuntime` at boot from persisted config
|
||
(`local/index.ts:911` is empty today) — this is not a route, it is the work item that unblocks ALL MCP
|
||
routes; treat it as an explicit, estimated Phase-4 task. MCP `test` semantics (live handshake vs static
|
||
validation) must be resolved first (coverage-check **C3** / open-question **C21**).
|
||
- **Marketplace + shared audit:** `GET /api/marketplace` (bare-path alias), `GET /api/extend/audit?type=`
|
||
(EXTEND — the read route exists at `/api/audit/installs`; add the filter param to serve S06/S07/S08/S21
|
||
with one route, open-question **C18**).
|
||
- **Shared-types changes:** MODIFY FE Connector to consume shared `ConnectorDefinition`/`ConnectorHealth`
|
||
(`shared-types-delta` §8a — a consumption switch, no new shape); NEW `McpInstance` (§8b); resolve the
|
||
`ExtensionType` union to `skill|agent|connector|mcp|model|template` (open-question **B7**).
|
||
- **Migrations:** **M2 — `install_audit` risk-level CHECK fix (RECOMMENDED, pre-Phase-4).** The TS
|
||
`AuditRiskLevel` includes `'critical'` but both DDL CHECKs allow only `low/medium/high`
|
||
(`install-audit.ts:65` + `schema.ts:130`) → a `record({riskLevel:'critical'})` throws. Pick: widen the
|
||
CHECK (additive migration) **or** lock the CRITICAL→`'high'`+`approvalClass:'blocked'` mapping as the
|
||
permanent contract (zero-migration). Fix **before** any Extend install-audit write path ships
|
||
(coverage-check **C15**).
|
||
- **Design-system pieces:** `ConnectorCard`, `MCPRow`, `ApprovalModal` reuse for install-risk approval,
|
||
the install-audit feed (normalizer over the three audit stores).
|
||
- **Exit criteria → PRD acceptance:** PRD §22.1 "install/revoke connector/MCP with audit trail"; DoD #7;
|
||
Extension states §14.7 render; MCP "auditable/permissioned/health-checked" (§12.8) — with the documented
|
||
v1 caveats (connector-sync stub C1, MCP logs C2). Tier-gate MCP/Marketplace install at **PRO+** through
|
||
`@waggle/shared tiers.ts` (open-question **B5**).
|
||
- **Verify:** full gate; if M2 ships as a migration, `tsc` + test on `hive-mind-core`/`core`; `tsc` on
|
||
`server` (new `mcps.ts`) + `apps/web`; smoke the boot-time MCP runtime population.
|
||
|
||
---
|
||
|
||
### Phase 5 — Team intelligence: Team Workspace, RBAC, Sharing, Audit views
|
||
|
||
- **Goal:** team workflows are permissioned + auditable (Blueprint P6 exit). (PRD §8 Phase 5 / §21 Sprint 8.)
|
||
- **Screens delivered:** **S10 Team Workspace** (+ the RBAC/Audit components PRD §20.3 — see RBAC-owner note).
|
||
- **Frontend tasks**
|
||
- *Rework/create:* `TeamGovernanceApp.tsx` + `searchTeamMemory` surface → **Team Workspace** with the
|
||
**role→capability matrix** table (PRD §17.2), member list with role dropdown (CRUD endpoints exist),
|
||
invite flow (Journey 13), "request access" on permission-denied. **RBAC matrix has no dedicated card
|
||
today (coverage-check GAP-D2)** — S10 must own the §17.2 matrix UI (or add an RBAC/Audit card).
|
||
- *Create:* unified **Audit Views** (normalize the three audit stores by scope) + CSV/PDF export buttons
|
||
over the existing endpoints; per-object **Share** UI.
|
||
- **Backend tasks** (`backend-api-delta.md` Phase 5; `rbac-security-delta.md`)
|
||
- **Extend `team.ts`:** `POST /api/teams/:id/invite` (alias → `/members`), `GET /api/teams/:id/audit`
|
||
(alias → `/activity`), **fix the PUT(owner-only) vs PATCH(owner/admin) role-gate inconsistency** on
|
||
`members/:memberId` (`team.ts:615` vs `:642` — open-question **A7**).
|
||
- **NEW `POST /api/share`** (no such route exists) — share memory/artifact/workspace with role perms;
|
||
gate behind TEAMS tier. **NEW `POST /api/artifacts/:id/share`** (blueprint). Optional
|
||
`GET /api/teams/:id/governance` (surface capability policies/overrides/requests).
|
||
- **Shared-types changes:** unify the role enum in `@waggle/shared` — `TeamRole =
|
||
owner|admin|member|viewer(|guest)`, map PRD "Contributor"→"Member", defer/decide Guest (open-question
|
||
**A7** + rbac-delta §1). Add a shared `requireRole`/`can()` helper used by both `team.ts` and cloud routes.
|
||
- **Migrations:** keep the live `teams.db` 4-role union (no migration) per the recommended A7 answer; a
|
||
`teams.db` CHECK migration is **only** needed if Guest is adopted. Frame-level `/api/share` scope may need
|
||
M1 (`memory_frames.metadata`) — v1 can scope implicitly via workspace `teamId`.
|
||
- **Design-system pieces:** role→capability matrix table, `ApprovalModal`/audit-feed reuse, avatar stack.
|
||
- **Exit criteria → PRD acceptance:** PRD §22.1 "team user can share memory/artifact with role-appropriate
|
||
permissions"; DoD #8 (shared intelligence + roles) + #9 (approval-gated + audited). Workspace
|
||
permission-denied + archived states render (PRD §14.3 / Journey 19).
|
||
- **Verify:** full gate; `tsc` on `shared` (role enum) + `server` (team routes) + `apps/web`; RBAC
|
||
enforcement tests.
|
||
|
||
---
|
||
|
||
### Phase 6 — Hardening: states, a11y, approval/audit consistency, performance, dogfood
|
||
|
||
- **Goal:** close the cross-cutting DoD items the screen phases leave under-traced. (PRD §21 Sprint 9 /
|
||
Blueprint P7. Promoted to a first-class phase because PRD §26 DoD #10 + #9 are otherwise the weakest
|
||
links — coverage-check GAP-D3/GAP-D4.)
|
||
- **Screens delivered:** none new — every S00-S21 screen gets its **§14 state matrix** completed.
|
||
- **Frontend + cross-cutting tasks**
|
||
- **Screen × §14-state coverage grid (GAP-D4).** Build/verify all **9 global states** (PRD §14.1:
|
||
Loading/Empty/Populated/Error/Offline/Syncing/Permission-denied/Partial/Approval) on every major screen
|
||
+ each screen's specific states (§14.2-§14.7). Cards S02/S18/S20/S21 are visibly thin on state
|
||
enumeration — close them. The DS primitives (`EmptyState`/`ErrorState`/`Skeleton`/`StatusBadge`) ship in
|
||
P0-P3; this phase wires them per-screen and proves coverage in a grid artifact.
|
||
- **Approval & Audit as a cross-cutting contract (GAP-D3).** No single card owns the "which actions are
|
||
sensitive, what the approval payload is, what gets audited" taxonomy today, risking per-builder drift.
|
||
Define the canonical gated-action taxonomy + `ApprovalModal` contract once (an S00 sub-spec) and retrofit
|
||
S03/S08/S18/S19/S20. Reuse the built runtime: `needsConfirmationWithAutonomy`, the `approval_required`
|
||
SSE event, `/api/approval/*`, persistent grants (rbac-delta §2).
|
||
- **Journey → screen trace (coverage-check #11).** Verify the 20 PRD §13 journeys end-to-end, especially
|
||
J15 (agent approval), J16 (overnight failure → Home attention, spans S01+S11+S20), J19 (archive), J20
|
||
(delete memory).
|
||
- **A11y, performance, real-data dogfood, visual polish** (PRD §19.3 + §21 Sprint 9). Light-mode QA on
|
||
data-heavy Memory/Artifact tables (Blueprint).
|
||
- **Backend tasks:** append-only triggers on the sensitive `install_audit`/`audit_events` subset (rbac-delta
|
||
§3.2, reconcile with retention); resolve any deferred Phase-4 caveats (connector-sync real pull, MCP logs)
|
||
if scheduled.
|
||
- **Exit criteria → PRD acceptance:** PRD §22.2 technical acceptance (every new screen has loading/empty/
|
||
error/offline/permission states; sensitive actions approval-gated; types consistent with API; no
|
||
mock-only screens where backend exists); DoD #9 + #10 + #11. All §22.3 QA scenarios pass.
|
||
- **Verify:** full gate + `npm run test:e2e` (Playwright) + visual regression; the per-screen state grid is
|
||
the acceptance artifact.
|
||
|
||
---
|
||
|
||
## 4. Critical path / dependency notes
|
||
|
||
```
|
||
P0 (IA freeze + shared types + V2 fields + --sem-* tokens)
|
||
└─ blocks EVERYTHING (every write-path uses V2 fields; every component uses the token layer & unions)
|
||
P1 (Home, Workspace, Ctrl+K)
|
||
├─ S01 Home depends on workspace-state builder (exists) + S03 Ctrl+K (greeting depends on identity seed, B8)
|
||
├─ S03 Ctrl+K provider skeleton starts in P0, completes in P1; S01/S02 consume it
|
||
└─ blocks P2 (Memory/Artifact detail surfaces are reached via Workspace tabs + Ctrl+K)
|
||
P2 (Memory, Artifacts, Onboarding, Workspace Creation)
|
||
├─ Artifact entity (artifacts.json) is the single largest net-new domain; gates artifact-share in P5
|
||
├─ Memory metadata decision (M1) shared by S04 + S16; resolve B2/A8 BEFORE coding
|
||
└─ Onboarding Import/Review split (C33) is correctness-relevant
|
||
P3 (Agents, Skills, Automations + builders) ──┐ independent of P4
|
||
P4 (Connectors, MCPs, Marketplace) ──┤ may run in parallel by separate streams
|
||
├─ P4 has the deepest hidden task: MCP boot-time runtime population (C4) — unblocks ALL MCP routes
|
||
├─ M2 install-audit CHECK fix must land BEFORE any Extend install-audit write (C15)
|
||
└─ both P3 & P4 reuse the BuilderStepper (P2) and ApprovalModal
|
||
P5 (Team, RBAC, Sharing)
|
||
├─ depends on Artifact (P2) for artifact-share and on the unified role enum (A7) ratified before S10
|
||
└─ frame-level /api/share may need M1 (P2) if not scoped via workspace teamId
|
||
P6 (Hardening)
|
||
└─ depends on ALL screens existing; closes the cross-cutting DoD #9/#10/#11
|
||
```
|
||
|
||
**Hard blockers to ratify before coding starts:** the Phase-blocking founder items in §7. **Single biggest
|
||
hidden-effort item:** MCP boot-time runtime population (P4). **Single largest net-new domain:** Artifacts
|
||
(P2). **Most error-prone reuse:** alias-don't-rename the command/automations/connector-revoke vocabularies
|
||
(B4) — exhaustive grep on any rename per CLAUDE.md §3.5.
|
||
|
||
---
|
||
|
||
## 5. Net-new backend endpoint master list (summary)
|
||
|
||
Full per-endpoint spec (method/path/disposition/build-target/substrate/shape/screens) lives in
|
||
[`deltas/backend-api-delta.md`](./deltas/backend-api-delta.md). Summary counts:
|
||
|
||
- **Total endpoints requiring backend work: 53** (de-duplicated NET-NEW + EXTEND).
|
||
- **NET-NEW: 35** — Home ×2, Command ×3, Memory ×3, Artifacts ×6, Agents ×5, Skills ×1, Automations ×1,
|
||
Connectors ×3, MCPs ×8, Team ×3.
|
||
- **EXTEND: 18** — quick-capture, workspace state/activity, command/execute, 4× memory aliases,
|
||
harvest preview/commit + sources/sync, workspaces POST, agents run/pause, skills :id/test, 6×
|
||
automations aliases over cron, connectors revoke/connect/payload, mcps/install, marketplace bare,
|
||
extend/audit filter, team invite/audit/members-gate-fix.
|
||
- **PRD §16 cross-reference:** of the 65 §16-literal endpoints — **16 EXIST** (FE wiring only), **30
|
||
PARTIAL** (→ EXTEND), **19 MISSING** (→ NET-NEW). The delta adds **~16 blueprint-implied** endpoints
|
||
beyond the literal §16 set (MCP start/stop/logs/permissions/custom, connector health/activity,
|
||
automations/test, team governance, artifact-share, extend/audit) — over-, not under-, coverage. All
|
||
**65/65 §16 endpoints are addressed** (coverage-check Table 2).
|
||
- **New sidecar route files: 5** (`home.ts`, `command.ts`, `artifacts.ts`, `agents.ts`, `mcps.ts`) + 1
|
||
alias plugin (`automations.ts` → cron). **New JSON-file stores: 2** (`agents.json`, `artifacts.json`).
|
||
- **Schema migrations:** **1 conditional** (M1 `memory_frames.metadata`, P2/P5) + **1 recommended** (M2
|
||
`install_audit` CHECK fix, pre-P4) + **1 optional/deferred** (M3 `agents` table — NOT for v1). Net
|
||
likely-to-ship: **1**; **0 strictly required** if S16 confidence stays preview-only and `/api/share`
|
||
scopes via workspace `teamId`.
|
||
- **Phase-0 non-endpoint work:** 5 interface/field extensions (`WorkspaceConfig` V2 + write-stamps, FE type
|
||
unions, `UserProfile` fields, `WorkspaceTemplate` shape, `Connector` fields).
|
||
|
||
---
|
||
|
||
## 6. Risk register
|
||
|
||
PRD §24 risks + risks surfaced by the coverage-check / deltas:
|
||
|
||
| # | Risk | Source | Impact | Mitigation (in this plan) |
|
||
|---|---|---|---|---|
|
||
| R1 | UX becomes too complex | PRD §24 | High | Keep Home/Workspace/Ctrl+K as the spine (P0-P1); hide power features behind the IA zones until needed. |
|
||
| R2 | Backend not ready for all screens | PRD §24 | Med | In-place reuse + thin adapters; mock catalog only where safe (PRD §22.2); **A4** = real-where-substrate-exists. |
|
||
| R3 | Memory trust issues | PRD §24 | High | Source/confidence/evidence/review/edit/delete (P2); ConfidenceBadge + EvidencePanel; heuristic-then-LLM (**B2**). |
|
||
| R4 | Agent safety | PRD §24 | High | Explicit permissions + approval prompts + audit (rule #6/#7); reuse `confirmation.ts` + approval SSE. |
|
||
| R5 | Marketplace scope creep | PRD §24 | Med | Federate-at-read local catalog (**A5**); postpone billing/public marketplace + remote registry (PRD §4.4). |
|
||
| R6 | Team RBAC complexity | PRD §24 | Med | Keep the live 4-role union (**A7**); shared `requireRole`/`can()`; defer Guest. |
|
||
| R7 | Global-search performance | PRD §24 | Med | Local indexed providers + async result groups (S03). |
|
||
| R8 | Visual mocks overfit | PRD §24 | Med | PRD acceptance > pixels (locked decision 3). |
|
||
| R9 | **Per-screen state coverage under-traced (DoD #10)** | coverage-check GAP-D4 | High | **Phase 6** state-coverage grid; primitives shipped P0-P3. |
|
||
| R10 | **Approval/audit owned by no card (DoD #9)** | coverage-check GAP-D3 | High | Phase 6 cross-cutting Approval&Audit spec (S00 sub-spec); reuse built runtime. |
|
||
| R11 | **MCP runtime never populated** (unblocks all MCP routes) | coverage-check C4 | High | Explicit, estimated **Phase-4** boot-time population task (not a footnote). |
|
||
| R12 | RBAC role-vocabulary divergence (3 enums, no Guest, PUT/PATCH gate bug) | rbac-delta §1 | Med | Unify enum in `@waggle/shared` (P5); fix the gate; ratify **A7** before S10. |
|
||
| R13 | install-audit `critical` CHECK throws on write | coverage-check C15 / rbac §3.2 | Med | **M2** fix before any Extend install write (pre-P4). |
|
||
| R14 | Connector `/sync` is a cosmetic stub vs §12.7 "data flowing" | coverage-check C1 | Med | Flag v1 partial; schedule real connector-SDK pull (Phase 6/post-v1). |
|
||
| R15 | Sessions not a first-class browsable object | coverage-check G2 | Low | Document Timeline+Ctrl+K as the v1 session UX; soften the §11 "navigable" claim. |
|
||
| R16 | Sidecar type errors ship undetected (`tsx` transpile-only) | CLAUDE.md §2 | Med | Run `tsc --project packages/server` in every phase gate (not just `npm run build`). |
|
||
| R17 | Build-order/stale-dist hides breakage behind green CI | MEMORY 0601 S3 | Med | Enforce shared→hive-mind-core→core→agent→server; nuclear-clean before release verify. |
|
||
|
||
---
|
||
|
||
## 7. Founder sign-off gate (open questions to answer before each phase)
|
||
|
||
Full options + tradeoffs + RECOMMENDED answers in [`deltas/open-questions.md`](./deltas/open-questions.md).
|
||
**Coding on a phase MUST NOT start until its blocking questions are ratified.**
|
||
|
||
### Before Phase 0/1 (the spine) — `[BLOCKS P1]` — ✅ ALL RATIFIED 2026-06-09 (founder)
|
||
All five spine recommendations ratified as-is; **Phase 0 is unblocked.**
|
||
- **B1** ✅ **RATIFIED** Shell topology — in-place dock reframe, keep windowed `AppId` nav (no react-router);
|
||
group dock into Work/Intelligence/Extend/Team zones. The IA freeze; gates everything.
|
||
- **A1** ✅ **RATIFIED** Workspace Desktop layout — fixed layout v1 (PRD §12.2 self-answers).
|
||
- **A2** ✅ **RATIFIED** Home Cockpit scope — personal-only v1; team summary appended later behind RBAC.
|
||
- **B4** ✅ **RATIFIED** `/api/*` vocabulary — alias, don't rename (command/automations/connector-revoke).
|
||
- **B8** ✅ **RATIFIED** Identity store of record — onboarding writes profile AND seeds identity (correct greeting).
|
||
|
||
### Before Phase 2 (work + onboarding) — `[BLOCKS P2]`
|
||
- **A6** Artifact storage — *Rec: `artifacts.json` index over existing workspace storage; artifact = produced output.*
|
||
- **A8** Memory retention/delete — *Rec: soft-status in metadata (Archive reversible), hard delete with consequence confirm.*
|
||
- **B2** Memory confidence — *Rec: cheap heuristic at preview; LLM reserved for the standing J08 queue.*
|
||
- **B6** `MemoryKind` reconciliation — *Rec: PRD §15.2 `MemoryKind` canonical in `@waggle/shared` + pure map helpers.*
|
||
- **A3** Memory graph view — *Rec: ship in v1 (substrate works); default = keep.*
|
||
- **C33** Import↔Review commit split — *Rec: S15 stages previews, S16 commits (fix current commit-at-S15).*
|
||
- **M1 decision** — ship `memory_frames.metadata` only if confidence/scope/status becomes a real filter axis.
|
||
|
||
### Before Phase 3 / 4 / 5 (not P1/P2-blocking, but ratify before the owning screen)
|
||
- **B3** Agent vs Persona boundary + store — *Rec: real Agent entity in `agents.json` referencing `personaId`.* (P3)
|
||
- **C24/C26** Automation triggers + test-run — *Rec: schedule-only v1; no-persist dry-run route.* (P3)
|
||
- **A4** Which connectors/MCPs are real — *Rec: real-where-substrate-exists, catalog-for-the-rest.* (P4)
|
||
- **A5/B7** Marketplace local-vs-remote + `ExtensionType` — *Rec: federate-at-read; `skill|agent|connector|mcp|model|template`.* (P4)
|
||
- **B5** Tier-vocabulary — *Rec: document mapping, route gates through `tiers.ts`, MCP/Marketplace install = PRO+.* (P4)
|
||
- **C21/C3** MCP `test` semantics — *Rec: live spawn-and-`isHealthy()`/`tools/list`; fall back to static validation.* (P4, resolve before S08)
|
||
- **C15** install-audit `critical` CHECK — *Rec: ship the migration (M2) for correctness.* (pre-P4)
|
||
- **A7** Minimum-viable RBAC — *Rec: keep live `owner/admin/member/viewer`, Contributor==Member, defer Guest, fix PUT/PATCH gate.* (ratify before S10)
|
||
|
||
---
|
||
|
||
## 8. Definition of Done checklist (PRD §26)
|
||
|
||
The refactor is done when all 11 hold. Mapped to the phase that delivers each (coverage-check Table 3):
|
||
|
||
- [ ] **1. Home Cockpit replaces blank-chat launch behavior.** — P0 (routing flip, GAP-D1) + P1 (screen).
|
||
- [ ] **2. Workspace Desktop is the default runtime for workspace work.** — P0 (route) + P1 (S02).
|
||
- [ ] **3. Ctrl+K can search, launch, create, run, navigate, and extend.** — P0 (provider) + P1 (S03; all 6 verbs).
|
||
- [ ] **4. Memory Center exposes source, confidence, evidence, scope, and edit/delete.** — P2 (S04/S16; M1 if filterable).
|
||
- [ ] **5. Artifact Center supports outcome search and related objects.** — P2 (S05; `/search-related`).
|
||
- [ ] **6. Onboarding leads profile → tool-discovery → import → review → first workspace.** — P2 (S12-S17 chain).
|
||
- [ ] **7. Agents, skills, automations, connectors, MCPs, marketplace have coherent IA.** — P3 + P4 (Work/Intelligence/Extend zones).
|
||
- [ ] **8. Team workspace supports shared intelligence and roles.** — P5 (S10 + RBAC matrix, GAP-D2).
|
||
- [ ] **9. Sensitive actions are approval-gated and audited.** — cross-cutting; ownership consolidated in **P6** (GAP-D3).
|
||
- [ ] **10. All screens have required states.** — **P6** screen×§14-state grid (the weakest-traced item, GAP-D4).
|
||
- [ ] **11. Claude Code can continue implementation from this PRD without product interpretation.** — this doc set is the evidence.
|
||
|
||
**Plus PRD §22.2 technical acceptance** (verify in P6): no mock-only screens where backend exists; new
|
||
components have loading/empty/error/offline/permission states; sensitive actions approval-gated; state
|
||
derivation centralized in the backend; FE types consistent with API contracts; existing foundations reused.
|
||
|
||
---
|
||
|
||
*Synthesized from PRD §6/§8/§14/§16/§20/§21/§26, Blueprint §19 roadmap, the condensed implementation
|
||
handoff, the 3 inventories, the 22 gap cards (S00-S21), and the 6 deltas. All file/line citations are
|
||
grounded in live source or the audited `docs/backend-map/`.*
|