docs(nexus): refresh codebase map and project status after wave 3b
This commit is contained in:
parent
6924de3e08
commit
3e8b204be0
2 changed files with 182 additions and 120 deletions
127
CODEBASE-MAP.md
127
CODEBASE-MAP.md
|
|
@ -3,7 +3,7 @@
|
|||
> **Purpose:** fast orientation for sessions that don't have the full conversation history loaded. This file is factual — generated by scanning the tree, not by reading intent docs. If something here contradicts a plan or spec, trust this file over the plans.
|
||||
>
|
||||
> **Branch:** `nexus/design-system-migration`
|
||||
> **Last updated:** 2026-04-11 after Wave 3A completion. Phase 16a is running in the background at the time of this snapshot; see §7 and §8 for which files are expected to move.
|
||||
> **Last updated:** 2026-04-11 after **Wave 3B completion** (phases 16a and 16b DONE). Route map and component inventory rescanned against current `ui/src/App.tsx` and filesystem. 24 files deleted across 16a (7) + 16b (17). 294/294 tests passing.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -39,33 +39,28 @@ ui/src/
|
|||
└── types/ — cross-cutting TypeScript types
|
||||
```
|
||||
|
||||
**File sizes for orientation:**
|
||||
- Largest page: `AgentDetail.tsx` (4104 L), `Inbox.tsx` (2028 L), `IssueDetail.tsx` (1696 L), `DesignGuide.tsx` (1532 L), `CompanyImport.tsx` (1355 L). These are legacy Paperclip pages.
|
||||
**File sizes for orientation (post-16b):**
|
||||
- Largest remaining legacy pages: `AgentDetail.tsx` (4104 L), `IssueDetail.tsx` (1696 L), `DesignGuide.tsx` (1532 L), `CompanyImport.tsx` (1355 L). `Inbox.tsx` (2028 L) was deleted in 16b.
|
||||
- Largest Nexus-era pages: `ProjectDetail.tsx` (1006 L — Phase 11), `PersonalAssistant.tsx` (379 L — Phase 9), `StudioWorkshopDetail.tsx` (362 L — Phase 10), `Projects.tsx` (315 L — Phase 11 + Wave 2.5).
|
||||
- Layout shell: `Layout.tsx` ~240 L (down from 510 L pre-Phase-8).
|
||||
|
||||
---
|
||||
|
||||
## 2. Route map (from `ui/src/App.tsx` `boardRoutes()`)
|
||||
## 2. Route map (from `ui/src/App.tsx` `boardRoutes()`, post-16b)
|
||||
|
||||
All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) except `/instance/*` which is global.
|
||||
All routes mount under a company-prefixed root (`/:companyPrefix/*`) except `/instance/*` which is global. Rescanned 2026-04-11 after 16b.
|
||||
|
||||
| Route | Component | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| (index) | `<Navigate to="dashboard">` | LEGACY | Phase 16b will redirect to `/assistant` |
|
||||
| `dashboard` | `Dashboard` | LEGACY | Kill in Phase 16b — Assistant conversational home replaces it |
|
||||
| (board index) | `<Navigate to="assistant">` | REDIRECT | Phase 16b — default landing is Assistant |
|
||||
| `onboarding` | `OnboardingRoutePage` | ACTIVE | First-run wizard |
|
||||
| `companies` | `Companies` | LEGACY | Single-workspace; kill in Phase 16b |
|
||||
| `company/settings` | `CompanySettings` | LEGACY | Overlaps with instance settings — Phase 16b decision |
|
||||
| `company/export/*` | `CompanyExport` | ACTIVE | Still useful for workspace export |
|
||||
| `company/import` | `CompanyImport` | ACTIVE | Still useful for workspace import |
|
||||
| `company/settings` | `CompanySettings` | ACTIVE | Workspace settings (kept — still different from instance settings) |
|
||||
| `company/export/*` | `CompanyExport` | ACTIVE | Workspace export |
|
||||
| `company/import` | `CompanyImport` | ACTIVE | Workspace import |
|
||||
| `skills/*` | `CompanySkills` | ACTIVE | Skill Aggregator — linked from Settings §Skills |
|
||||
| `settings` | `LegacySettingsRedirect` → `/instance/settings/general` | REDIRECT | Phase 13 redirect |
|
||||
| `settings/*` | `LegacySettingsRedirect` | REDIRECT | Phase 13 |
|
||||
| `settings`, `settings/*` | `LegacySettingsRedirect` → `/instance/settings/general` | REDIRECT | Phase 13 |
|
||||
| `plugins/:pluginId` | `PluginPage` | ACTIVE | Plugin system |
|
||||
| `org` | `OrgChart` | LEGACY | Demoted — Phase 16b kill |
|
||||
| `agents` → `/agents/all` | Redirect | LEGACY | Phase 16b: redirect to `/projects` |
|
||||
| `agents/all`, `/active`, `/paused`, `/error` | `Agents` | LEGACY | Per-project tab now; Phase 16b kill |
|
||||
| `agents`, `agents/all`, `/active`, `/paused`, `/error` | `<Navigate to="/projects">` | REDIRECT | Phase 16b — global list replaced by per-project Agents tab |
|
||||
| `agents/new` | `NewAgent` | ACTIVE | Per-project agent creation |
|
||||
| `agents/:agentId`, `/:tab`, `/runs/:runId` | `AgentDetail` | ACTIVE | Agent detail still needed |
|
||||
| `projects` | `Projects` | **ACTIVE (Phase 11 + Wave 2.5)** | Hero-stat card grid |
|
||||
|
|
@ -80,30 +75,28 @@ All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) excep
|
|||
| `projects/:projectId/org` | `ProjectDetail` | **ACTIVE (placeholder)** | Phase 11 TabPlaceholder, hidden for single-agent |
|
||||
| `projects/:projectId/configuration` | `ProjectDetail` | LEGACY preserved | Phase 11 kept for backwards compat |
|
||||
| `projects/:projectId/budget` | `ProjectDetail` | LEGACY preserved | Phase 11 kept for backwards compat |
|
||||
| `issues`, `issues/all`, `/active`, `/backlog`, `/done`, `/recent` | `Issues` / redirects | LEGACY | Phase 16b kill — redirect to `/projects` |
|
||||
| `issues`, `issues/all`, `/active`, `/backlog`, `/done`, `/recent` | `<Navigate to="/projects">` | REDIRECT | Phase 16b — global list replaced by per-project Issues tab |
|
||||
| `issues/:issueId` | `IssueDetail` | ACTIVE | Issue detail still needed |
|
||||
| `routines`, `routines/:routineId` | `Routines` / `RoutineDetail` | LEGACY | Phase 13 linked from Settings; Phase 16b kill top-level |
|
||||
| `execution-workspaces/:workspaceId` | `ExecutionWorkspaceDetail` | ACTIVE | Workspace detail |
|
||||
| `goals`, `goals/:goalId` | `Goals` / `GoalDetail` | LEGACY | Phase 16b kill — folded into Overview milestones |
|
||||
| `approvals`, `/pending`, `/all`, `/:approvalId` | `Approvals` / `ApprovalDetail` | LEGACY | Phase 11 demoted → per-project Gates tab; Phase 16b kill top-level |
|
||||
| `costs` | `Costs` | LEGACY | Phase 16b kill |
|
||||
| `activity` | `Activity` | LEGACY | Phase 16b kill |
|
||||
| `inbox`, `/mine`, `/recent`, `/unread`, `/all`, `/new` | `Inbox` / redirects | LEGACY | Phase 16b kill — replaced by Assistant dot + ⌘K |
|
||||
| `assistant` | `PersonalAssistant` | **ACTIVE (Phase 9 + 12)** | Default landing |
|
||||
| `assistant/:conversationId` | `PersonalAssistant` | **ACTIVE** | Conversation-specific |
|
||||
| `content-studio` | `ContentStudio` | **ACTIVE (Phase 10 + Wave 2.5)** | Workshop grid |
|
||||
| `content-studio/:workshopSlug` | `ContentStudio` | **ACTIVE** | Phase 10 workshop detail |
|
||||
| `convert`, `/:sourceFormat`, `/:sourceFormat/:targetFormat` | `ConvertPage` | LEGACY preserved | Kept for bookmark compat; Studio has Convert workshop |
|
||||
| `convert`, `/:sourceFormat`, `/:sourceFormat/:targetFormat` | `<Navigate to="content-studio/convert">` | REDIRECT | Phase 16b — folded into Studio |
|
||||
| `design-guide` | `DesignGuide` | ACTIVE | Internal design reference |
|
||||
| `tests/ux/runs` | `RunTranscriptUxLab` | ACTIVE | UX test lab |
|
||||
| `:pluginRoutePath` | `PluginPage` | ACTIVE | Plugin runtime |
|
||||
| `*` | `NotFoundPage` | ACTIVE | 404 |
|
||||
| `*` | `NotFoundPage` scope="board" | ACTIVE | 404 |
|
||||
| `/instance/settings/general` | `InstanceGeneralSettings` | **ACTIVE (Phase 13)** | Single-column settings |
|
||||
| `/instance/settings/heartbeats` → `/general` | Redirect | REDIRECT | Phase 13 collapsed |
|
||||
| `/instance/settings/experimental` → `/general` | Redirect | REDIRECT | Phase 13 collapsed |
|
||||
| `/instance/settings/plugins`, `/:pluginId` | `PluginManager` / `PluginSettings` | ACTIVE | Plugin system keeps its own settings sub-tree |
|
||||
|
||||
**Unprefixed redirect routes** (catch direct-entered non-company-prefixed URLs): every top-level route has a matching `UnprefixedBoardRedirect` variant. Phase 13 also added unprefixed redirect routes for the new project sub-routes.
|
||||
### Deleted top-level routes (no longer mounted, post-16b)
|
||||
|
||||
`dashboard`, `companies`, `org`, `goals`, `goals/:goalId`, `costs`, `activity`, `inbox`, `inbox/*`, `approvals`, `approvals/*`, `routines`, `routines/:routineId`. All fall through to `NotFoundPage scope="board"`.
|
||||
|
||||
**Unprefixed redirect routes** (catch direct-entered non-company-prefixed URLs): `UnprefixedBoardRedirect` variants exist for `issues/:issueId`, `skills/*`, `settings`, `settings/*`, `agents/new`, `agents/:agentId`, `agents/:agentId/:tab`, `agents/:agentId/runs/:runId`, `projects`, `projects/:projectId`, `projects/:projectId/overview`, `projects/:projectId/issues`, `projects/:projectId/issues/:filter`, `projects/:projectId/agents`, `projects/:projectId/gates`, `projects/:projectId/costs`, `projects/:projectId/activity`, `projects/:projectId/org`, `projects/:projectId/configuration`, `tests/ux/runs`.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -128,7 +121,7 @@ All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) excep
|
|||
|
||||
*Lines are approximate; exact counts drift with commits.
|
||||
|
||||
**Pending (Phase 16a):** `destinations.ts` to consolidate the 4-destination config shared between `IconRail.tsx` and `MobileTabBar.tsx`.
|
||||
**Post-16a:** `destinations.ts` consolidates the 4-destination config shared between `IconRail.tsx` and `MobileTabBar.tsx` (commit `a3102351`).
|
||||
|
||||
### `ui/src/components/assistant/` (Phase 9 + 12)
|
||||
|
||||
|
|
@ -181,7 +174,7 @@ All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) excep
|
|||
| `AboutSection.tsx` / `.test.tsx` | ACTIVE | Version, fork info, MIT |
|
||||
| `DangerZoneSection.tsx` / `.test.tsx` | PLACEHOLDER | Disabled buttons — no server endpoints exist yet |
|
||||
|
||||
### `ui/src/pages/` (key files)
|
||||
### `ui/src/pages/` (key files, post-16b)
|
||||
|
||||
| File | Phase | Status |
|
||||
|---|---|---|
|
||||
|
|
@ -191,11 +184,13 @@ All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) excep
|
|||
| `Projects.tsx` | 11/2.5 | ACTIVE — hero-stat list with derivatives |
|
||||
| `ProjectDetail.tsx` | 11 | ACTIVE — Builder tabs + legacy `configuration`/`budget` preserved |
|
||||
| `InstanceGeneralSettings.tsx` | 13 | ACTIVE — single-column settings |
|
||||
| `Dashboard.tsx` | — | LEGACY — Phase 16b kill |
|
||||
| `Companies.tsx` | — | LEGACY — Phase 16b kill (single workspace) |
|
||||
| `Issues.tsx`, `Agents.tsx`, `Approvals.tsx`, `Costs.tsx`, `Activity.tsx`, `OrgChart.tsx`, `Goals.tsx`, `Inbox.tsx`, `Routines.tsx` | — | LEGACY — Phase 16b kill/redirect |
|
||||
| `ConvertPage.tsx` | — | LEGACY preserved — `/convert` route kept for compat |
|
||||
| `AgentDetail.tsx`, `IssueDetail.tsx`, `ApprovalDetail.tsx`, `GoalDetail.tsx`, `RoutineDetail.tsx` | — | ACTIVE — detail pages still needed |
|
||||
| `AgentDetail.tsx`, `IssueDetail.tsx` | — | ACTIVE — detail pages still needed |
|
||||
| `NewAgent.tsx`, `ExecutionWorkspaceDetail.tsx` | — | ACTIVE |
|
||||
| `CompanySettings.tsx`, `CompanyExport.tsx`, `CompanyImport.tsx`, `CompanySkills.tsx` | — | ACTIVE — workspace-level surfaces |
|
||||
| `PluginManager.tsx`, `PluginSettings.tsx`, `PluginPage.tsx` | — | ACTIVE |
|
||||
| `DesignGuide.tsx`, `RunTranscriptUxLab.tsx`, `NotFound.tsx` | — | ACTIVE |
|
||||
| `Auth.tsx`, `BoardClaim.tsx`, `CliAuth.tsx`, `InviteLanding.tsx` | — | ACTIVE — auth flow |
|
||||
| `Dashboard.tsx`, `Companies.tsx`, `Inbox.tsx`, `Inbox.test.tsx`, `Issues.tsx`, `Agents.tsx`, `Approvals.tsx`, `ApprovalDetail.tsx`, `Costs.tsx`, `Activity.tsx`, `OrgChart.tsx`, `Goals.tsx`, `GoalDetail.tsx`, `Routines.tsx`, `RoutineDetail.tsx`, `ConvertPage.tsx` | — | **DELETED** — Phase 16b |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -216,7 +211,6 @@ All routes are mounted under a company-prefixed root (`/:companyPrefix/*`) excep
|
|||
| **`VoiceContext`** (Phase 14) | `state`, `mediaStream`, `hasQueuedVoice`, `startListening`, `stopListening`, `drainQueue` | `GlobalMicButton`, `ChatInput`, `PersonalAssistant` queue drain |
|
||||
| **`CommandPaletteContext`** (Phase 14) | `open`, `setOpen`, `toggle` + global Cmd+K listener | `CmdKButton`, `CommandPalette`, `Layout.onSearch` |
|
||||
| `LiveUpdatesProvider` | SSE stream subscriptions | Chat, activity, project state |
|
||||
| **`ChatPanelContext`** | Legacy `chatOpen`, `activeConversationId`, `scrollToMessageId` | `ChatMessageList` reads this — **Phase 16a migrating it off** |
|
||||
|
||||
### Hooks (`ui/src/hooks/`, 39 total)
|
||||
|
||||
|
|
@ -226,7 +220,7 @@ Key Nexus-era hooks:
|
|||
- `usePromoteToProject` (Phase 12) — state machine for the promote animation
|
||||
- `useStreamingChat` (v1.3) — SSE chat stream
|
||||
- `useChatConversations` / `useChatMessages` / `useChatSearch` / `useChatBookmarks` / `useChatFileUpload` (v1.3)
|
||||
- `useVoiceMode` / `useVadRecorder` / `usePiperTts` (v1.6) — voice primitives; `useVadRecorder` is now orphaned post-Phase-14 (Phase 16a deletes)
|
||||
- `useVoiceMode` / `usePiperTts` (v1.6) — voice primitives; `useVadRecorder` deleted in Phase 16a
|
||||
- `useBrainstormerDefault` (v1.3) — brainstormer workflow default
|
||||
- `useHardwareInfo` (v1.5) — hardware probe for onboarding
|
||||
- `useInboxBadge` — legacy, still consumed by pre-Phase-15 code
|
||||
|
|
@ -377,8 +371,8 @@ Unrelated to the design system migration, these have been flagged across review
|
|||
| **Wave 2 integration** | — | **DONE** | `1b7e3d44` (routing + IconRail gate indicator) |
|
||||
| **Wave 2.5** | — | **DONE** | `428f0336` (Presentations + ProjectCard derivatives + spec 8→9) |
|
||||
| **Wave 3A integration** | — | **DONE** | `fb76b5ee` (TopStrip test provider mocks + PromoteTransition mobile variant + Layout onSearch cleanup) |
|
||||
| 16a — Dead chrome cleanup | 3B | **IN PROGRESS** | Subagent running in background at time of this snapshot |
|
||||
| 16b — Vocabulary sweep + route cleanup | 3B | **PENDING** | Blocked on 16a |
|
||||
| 16a — Dead chrome cleanup | 3B | **DONE** | 4 commits (`1b6727bb`, `59572900`, `a3102351`, `4ff707bd`) — 7 files deleted, destinations extracted, flex layout fix |
|
||||
| 16b — Vocabulary sweep + route cleanup | 3B | **DONE** | 3 commits (`548cfbdc`, `4d667caa`, `6924de3e`) — 17 files deleted, routes collapsed to redirects, instance-settings whitelist cleaned |
|
||||
|
||||
### Non-overhaul commits mixed in
|
||||
|
||||
|
|
@ -396,24 +390,55 @@ All five Wave 3 plans + Phase 11.5 backlog plan live at:
|
|||
- `docs/plans/2026-04-11-nexus-phase-13-settings-consolidation.md` — DONE
|
||||
- `docs/plans/2026-04-11-nexus-phase-14-voice-cmdk-globalization.md` — DONE
|
||||
- `docs/plans/2026-04-11-nexus-phase-15-mobile.md` — DONE
|
||||
- `docs/plans/2026-04-11-nexus-phase-16-cleanup.md` — IN PROGRESS as 16a, pending as 16b
|
||||
- `docs/plans/2026-04-11-nexus-phase-16-cleanup.md` — DONE (both 16a and 16b)
|
||||
|
||||
The layout overhaul spec is at `docs/specs/2026-04-11-nexus-layout-overhaul.md`. It was amended post-Wave-2 to reflect the 8→9 workshop count (Presentations restoration).
|
||||
|
||||
---
|
||||
|
||||
## Appendix: Dead code files slated for deletion (pre-16a snapshot)
|
||||
## Appendix: Dead code files — post-Wave-3B snapshot
|
||||
|
||||
| File | Status | Reason |
|
||||
|---|---|---|
|
||||
| `ui/src/components/ChatPanel.tsx` | ALIVE | Phase 8 unmounted from Layout; Phase 16a deletes |
|
||||
| `ui/src/context/ChatPanelContext.tsx` | ALIVE | Phase 16a deletes AFTER migrating ChatMessageList off it |
|
||||
| `ui/src/components/Sidebar.tsx` | ALIVE | Phase 8 unmounted; Phase 16a deletes |
|
||||
| `ui/src/components/BreadcrumbBar.tsx` | ALIVE | Phase 8 unmounted; Phase 16a deletes |
|
||||
| `ui/src/components/PropertiesPanel.tsx` | ALIVE | Phase 8 unmounted; Phase 16a deletes |
|
||||
| `ui/src/components/VoiceMicButton.tsx` | ALIVE | Phase 14 orphaned; Phase 16a deletes |
|
||||
| `ui/src/hooks/useVadRecorder.ts` | ALIVE | Phase 14 orphaned; Phase 16a deletes |
|
||||
| `ui/src/components/InstanceSidebar.tsx` | **DELETED** | Phase 13 deleted |
|
||||
| `ui/src/components/MobileBottomNav.tsx` | **DELETED** | Phase 15 deleted |
|
||||
All 24 files in the 16a + 16b target list are confirmed deleted (verified via `ls` probe 2026-04-11).
|
||||
|
||||
Phase 16a is expected to move all 7 ALIVE entries to DELETED.
|
||||
### Phase 16a (7 files deleted)
|
||||
|
||||
| File | Reason |
|
||||
|---|---|
|
||||
| `ui/src/components/ChatPanel.tsx` | Phase 8 unmounted from Layout |
|
||||
| `ui/src/context/ChatPanelContext.tsx` | Migrated ChatMessageList off first (`1b6727bb`) |
|
||||
| `ui/src/components/Sidebar.tsx` | Phase 8 unmounted |
|
||||
| `ui/src/components/BreadcrumbBar.tsx` | Phase 8 unmounted |
|
||||
| `ui/src/components/PropertiesPanel.tsx` | Phase 8 unmounted |
|
||||
| `ui/src/components/VoiceMicButton.tsx` | Phase 14 orphaned |
|
||||
| `ui/src/hooks/useVadRecorder.ts` | Phase 14 orphaned |
|
||||
|
||||
### Phase 16b (17 files deleted)
|
||||
|
||||
| File | Reason |
|
||||
|---|---|
|
||||
| `ui/src/pages/Dashboard.tsx` | Replaced by Assistant conversational home |
|
||||
| `ui/src/pages/Companies.tsx` | Single-workspace mode |
|
||||
| `ui/src/pages/Goals.tsx` / `GoalDetail.tsx` | Folded into Overview milestones |
|
||||
| `ui/src/pages/Costs.tsx` | Demoted to per-project Costs tab |
|
||||
| `ui/src/pages/Activity.tsx` | Demoted to per-project Activity tab |
|
||||
| `ui/src/pages/OrgChart.tsx` | Demoted to per-project Org tab |
|
||||
| `ui/src/pages/Inbox.tsx` / `Inbox.test.tsx` | Replaced by Assistant dot + ⌘K |
|
||||
| `ui/src/pages/ConvertPage.tsx` | Folded into Studio Convert workshop |
|
||||
| `ui/src/pages/Approvals.tsx` / `ApprovalDetail.tsx` | Demoted to per-project Gates tab |
|
||||
| `ui/src/pages/Routines.tsx` / `RoutineDetail.tsx` | Linked from Settings sub-surface only |
|
||||
| `ui/src/pages/Issues.tsx` | Global list removed; per-project IssuesTab keeps the wire |
|
||||
| `ui/src/pages/Agents.tsx` | Global list removed |
|
||||
| `ui/src/components/ChatSearchDialog.tsx` | Orphaned — no consumers after Phase 8 |
|
||||
| `ui/src/components/ChatBookmarkList.tsx` | Orphaned — no consumers after Phase 8 |
|
||||
|
||||
### Historical
|
||||
|
||||
| File | Phase |
|
||||
|---|---|
|
||||
| `ui/src/components/InstanceSidebar.tsx` | 13 |
|
||||
| `ui/src/components/MobileBottomNav.tsx` | 15 |
|
||||
|
||||
### Residual cleanup targets (not deleted, flagged)
|
||||
|
||||
- `ui/src/hooks/useInboxBadge.ts` — orphaned after `Inbox.tsx` deletion, left intact (out of 16b scope).
|
||||
- Dangling `/dashboard` hrefs in `SkillDetail.tsx`, `SkillBrowser.tsx`, `PluginManager.tsx`, `PluginSettings.tsx`, `PluginPage.tsx`, `NotFound.tsx`, `CompanyImport.tsx`, `ProjectDetail.tsx`, `AgentDetail.tsx`, `company-page-memory.ts`, `useCompanyPageMemory.ts` — now fall through to `NotFoundPage scope="board"`. Low-priority rewrite to `/assistant` or project-specific equivalents.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
> **Purpose:** snapshot of where the project is right now — what's shipped, what's blocked, what to do next. Generated by scanning git log + code + reading `.planning/` and `docs/`. If this file disagrees with any plan or spec, trust this file; the code is the source of truth.
|
||||
>
|
||||
> **Last updated:** 2026-04-11, mid-Wave-3B. Phase 16a is running in the background at the time of this snapshot; the "Wave 3B in progress" sections will need a refresh when 16a completes.
|
||||
> **Last updated:** 2026-04-11, **Wave 3B complete**. Phases 16a and 16b are both DONE and verified — 294/294 tests passing. The structural layout overhaul (phases 8–16) is fully shipped. Remaining scope on this branch is the visual repaint phases 4–7 and the Phase 11.5 backlog.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -67,8 +67,8 @@ Verified by `git log --oneline` on `nexus/design-system-migration`.
|
|||
| **Wave 2 controller integration** | — | Wire routing + icon rail gate dot | **DONE** | `1b7e3d44` |
|
||||
| **Wave 2.5 follow-ups** | — | Presentations workshop + ProjectCard derivatives + spec drift fix | **DONE** | `428f0336` |
|
||||
| **Wave 3A controller integration** | — | TopStrip test providers + PromoteTransition mobile variant + Layout onSearch cleanup | **DONE** | `fb76b5ee` |
|
||||
| 16a | 3B | Dead chrome cleanup (delete 7 files + DRY destinations + flex layout fix) | **IN PROGRESS** | Subagent running in background |
|
||||
| 16b | 3B | Vocabulary sweep + route cleanup + visual QA | **PENDING** | Blocked on 16a |
|
||||
| 16a | 3B | Dead chrome cleanup (delete 7 files + DRY destinations + flex layout fix) | **DONE** | 4 commits `1b6727bb`, `59572900`, `a3102351`, `4ff707bd` |
|
||||
| 16b | 3B | Vocabulary sweep + route cleanup + visual QA | **DONE** | 3 commits `548cfbdc`, `4d667caa`, `6924de3e` |
|
||||
|
||||
### Wave summary
|
||||
|
||||
|
|
@ -144,35 +144,69 @@ Backend ticket, not UI.
|
|||
|
||||
## 6. Dead code inventory
|
||||
|
||||
**Pre-16a snapshot — Phase 16a running in background is expected to move ALIVE entries to DELETED.**
|
||||
**Post-Wave-3B snapshot — all 16a and 16b targets confirmed deleted via `ls` probe 2026-04-11.**
|
||||
|
||||
| File | Status (pre-16a) | Reason for deletion | Owner phase |
|
||||
### Phase 16a dead chrome (7 files)
|
||||
|
||||
| File | Status | Reason | Phase |
|
||||
|---|---|---|---|
|
||||
| `ui/src/components/ChatPanel.tsx` | ALIVE | Phase 8 unmounted | 16a |
|
||||
| `ui/src/context/ChatPanelContext.tsx` | ALIVE | Phase 16a migrates ChatMessageList off first | 16a |
|
||||
| `ui/src/components/Sidebar.tsx` | ALIVE | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/BreadcrumbBar.tsx` | ALIVE | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/PropertiesPanel.tsx` | ALIVE | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/VoiceMicButton.tsx` | ALIVE | Phase 14 orphaned | 16a |
|
||||
| `ui/src/hooks/useVadRecorder.ts` | ALIVE | Phase 14 orphaned | 16a |
|
||||
| `ui/src/components/InstanceSidebar.tsx` | **DELETED** | Phase 13 | — |
|
||||
| `ui/src/components/MobileBottomNav.tsx` | **DELETED** | Phase 15 | — |
|
||||
| `ui/src/components/ChatPanel.tsx` | **DELETED** | Phase 8 unmounted | 16a |
|
||||
| `ui/src/context/ChatPanelContext.tsx` | **DELETED** | Migrated ChatMessageList off first (`1b6727bb`) | 16a |
|
||||
| `ui/src/components/Sidebar.tsx` | **DELETED** | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/BreadcrumbBar.tsx` | **DELETED** | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/PropertiesPanel.tsx` | **DELETED** | Phase 8 unmounted | 16a |
|
||||
| `ui/src/components/VoiceMicButton.tsx` | **DELETED** | Phase 14 orphaned | 16a |
|
||||
| `ui/src/hooks/useVadRecorder.ts` | **DELETED** | Phase 14 orphaned | 16a |
|
||||
|
||||
**After 16a completes, re-run `ls ui/src/components/{ChatPanel,Sidebar,BreadcrumbBar,PropertiesPanel,VoiceMicButton}.tsx ui/src/context/ChatPanelContext.tsx ui/src/hooks/useVadRecorder.ts` to confirm all 7 are gone.**
|
||||
### Phase 16b dead pages + orphaned chat surfaces (17 files)
|
||||
|
||||
| File | Status | Reason | Phase |
|
||||
|---|---|---|---|
|
||||
| `ui/src/pages/Dashboard.tsx` | **DELETED** | Replaced by Assistant conversational home | 16b |
|
||||
| `ui/src/pages/Goals.tsx` | **DELETED** | Folded into Overview milestones | 16b |
|
||||
| `ui/src/pages/GoalDetail.tsx` | **DELETED** | Folded into Overview milestones | 16b |
|
||||
| `ui/src/pages/Costs.tsx` | **DELETED** | Demoted to per-project Costs tab | 16b |
|
||||
| `ui/src/pages/Activity.tsx` | **DELETED** | Demoted to per-project Activity tab | 16b |
|
||||
| `ui/src/pages/OrgChart.tsx` | **DELETED** | Demoted to per-project Org tab | 16b |
|
||||
| `ui/src/pages/Inbox.tsx` | **DELETED** | Replaced by Assistant dot + ⌘K | 16b |
|
||||
| `ui/src/pages/Inbox.test.tsx` | **DELETED** | Paired with Inbox.tsx | 16b |
|
||||
| `ui/src/pages/ConvertPage.tsx` | **DELETED** | Folded into Studio Convert workshop | 16b |
|
||||
| `ui/src/pages/Approvals.tsx` | **DELETED** | Demoted to per-project Gates tab | 16b |
|
||||
| `ui/src/pages/ApprovalDetail.tsx` | **DELETED** | Demoted to per-project Gates tab | 16b |
|
||||
| `ui/src/pages/Routines.tsx` | **DELETED** | Linked from Settings sub-surface | 16b |
|
||||
| `ui/src/pages/RoutineDetail.tsx` | **DELETED** | Linked from Settings sub-surface | 16b |
|
||||
| `ui/src/pages/Issues.tsx` | **DELETED** | Global list removed; per-project IssuesTab keeps wire | 16b |
|
||||
| `ui/src/pages/Agents.tsx` | **DELETED** | Global list removed | 16b |
|
||||
| `ui/src/pages/Companies.tsx` | **DELETED** | Single-workspace mode | 16b |
|
||||
| `ui/src/components/ChatSearchDialog.tsx` | **DELETED** | Orphaned — no consumers after Phase 8 | 16b |
|
||||
| `ui/src/components/ChatBookmarkList.tsx` | **DELETED** | Orphaned — no consumers after Phase 8 | 16b |
|
||||
|
||||
### Historical deletions
|
||||
|
||||
| File | Status | Phase |
|
||||
|---|---|---|
|
||||
| `ui/src/components/InstanceSidebar.tsx` | **DELETED** | 13 |
|
||||
| `ui/src/components/MobileBottomNav.tsx` | **DELETED** | 15 |
|
||||
|
||||
### Residual concerns flagged by 16b report
|
||||
|
||||
- **Dangling `/dashboard` hrefs** (non-blocking but cosmetic): `SkillDetail.tsx`, `SkillBrowser.tsx`, `PluginManager.tsx`, `PluginSettings.tsx`, `PluginPage.tsx`, `NotFound.tsx`, `CompanyImport.tsx`, `ProjectDetail.tsx` (post-import navigate), `AgentDetail.tsx` (agent self-detail crumbs), `company-page-memory.ts` (fallback), `useCompanyPageMemory.ts`. These now fall through to `NotFoundPage scope="board"`. Low-priority follow-up: rewrite to `/assistant` or project-specific equivalents.
|
||||
- **Vocabulary sweep partial**: `CompanyImport.tsx` / `CompanyExport.tsx` / `CompanySkills.tsx` body copy, `OnboardingWizard` `level: "company"` enum (code identifier, not display), and internal thrown-error strings in `NewGoalDialog`, `NewIssueDialog`, `NewProjectDialog`, `AgentConfigForm`, `IssueDetail`, `ProjectDetail`, `GoalDetail` kept "company" verbatim because they are invariant exceptions not user-visible toasts. Acceptable per "workspace is display-only" rule.
|
||||
- **`useInboxBadge.ts`** is now orphaned (Inbox.tsx deleted). Out of explicit 16b scope — left intact as a no-op hook. Low-value cleanup target.
|
||||
|
||||
---
|
||||
|
||||
## 7. Route status
|
||||
|
||||
From `ui/src/App.tsx boardRoutes()`. Marks reflect the post-Wave-3A state.
|
||||
From `ui/src/App.tsx boardRoutes()`. Marks reflect the **post-Wave-3B** state. All routes mount under a company-prefixed root (`/:companyPrefix/*`) except `/instance/*`.
|
||||
|
||||
### Active (new Nexus destinations)
|
||||
### Active Nexus destinations
|
||||
|
||||
- `/assistant` — PersonalAssistant (Phase 9+12+14)
|
||||
- `/assistant/:conversationId` — PersonalAssistant
|
||||
- `/content-studio` — ContentStudio (Phase 10 + Wave 2.5)
|
||||
- `/content-studio/:workshopSlug` — ContentStudio workshop detail
|
||||
- `/projects` — Projects (Phase 11 + Wave 2.5)
|
||||
- `/projects` — Projects hero-stat grid (Phase 11 + Wave 2.5)
|
||||
- `/projects/:projectId/overview` — ProjectDetail Overview tab
|
||||
- `/projects/:projectId/issues` — ProjectDetail Issues tab (real wire)
|
||||
- `/projects/:projectId/agents` — ProjectDetail Agents tab (placeholder)
|
||||
|
|
@ -180,46 +214,37 @@ From `ui/src/App.tsx boardRoutes()`. Marks reflect the post-Wave-3A state.
|
|||
- `/projects/:projectId/costs` — ProjectDetail Costs tab (placeholder)
|
||||
- `/projects/:projectId/activity` — ProjectDetail Activity tab (placeholder)
|
||||
- `/projects/:projectId/org` — ProjectDetail Org tab (placeholder)
|
||||
- `/projects/:projectId/configuration`, `/projects/:projectId/budget` — legacy preserved
|
||||
- `/instance/settings/general` — Phase 13 single-column settings
|
||||
- `/instance/settings/plugins`, `/plugins/:pluginId` — plugin subsystem (kept)
|
||||
- `/instance/settings/plugins`, `/instance/settings/plugins/:pluginId` — plugin subsystem
|
||||
|
||||
### Redirects (Phase 13 + historical)
|
||||
### Active detail pages (still needed from per-project / per-surface links)
|
||||
|
||||
- `/instance` → `/instance/settings/general`
|
||||
- `/instance/settings/heartbeats` → `/general`
|
||||
- `/instance/settings/experimental` → `/general`
|
||||
- `/settings`, `/settings/*` → `/instance/settings/general`
|
||||
- `/approvals` → `/approvals/pending`
|
||||
- `/inbox` → `/inbox/mine` (legacy)
|
||||
- `/agents` → `/agents/all` (legacy)
|
||||
|
||||
### Legacy (pending Phase 16b deletion or redirect)
|
||||
|
||||
- `/dashboard` — Dashboard.tsx → Phase 16b: delete
|
||||
- `/companies` — Companies.tsx → Phase 16b: delete (single workspace)
|
||||
- `/org` — OrgChart.tsx → Phase 16b: delete
|
||||
- `/agents/all`, `/active`, `/paused`, `/error` — Agents.tsx → Phase 16b: redirect `/agents` → `/projects`
|
||||
- `/issues`, `/issues/all`, `/active`, `/backlog`, `/done`, `/recent` → Phase 16b: redirect `/issues` → `/projects`
|
||||
- `/issues/:issueId` — IssueDetail.tsx → ACTIVE (kept — detail page still needed)
|
||||
- `/routines`, `/routines/:routineId` → Phase 16b: delete top-level (Phase 13 linked from Settings)
|
||||
- `/goals`, `/goals/:goalId` → Phase 16b: delete (folded into Overview)
|
||||
- `/approvals/*` → Phase 16b: delete (demoted to per-project Gates tab)
|
||||
- `/costs` — Costs.tsx → Phase 16b: delete
|
||||
- `/activity` — Activity.tsx → Phase 16b: delete
|
||||
- `/inbox/*` — Inbox.tsx → Phase 16b: delete
|
||||
- `/convert`, `/:sourceFormat`, `/:sourceFormat/:targetFormat` → LEGACY PRESERVED (Studio has the Convert workshop, but `/convert` bookmark redirect for now)
|
||||
- `/company/settings` — CompanySettings.tsx → Phase 16b decision (overlaps with instance settings)
|
||||
|
||||
### Other actives (kept because detail pages still needed)
|
||||
|
||||
- `/agents/new`, `/agents/:agentId`, `/:tab`, `/runs/:runId`
|
||||
- `/projects/:projectId` (root), `/projects/:projectId/configuration`, `/projects/:projectId/budget`
|
||||
- `/agents/new`, `/agents/:agentId`, `/agents/:agentId/:tab`, `/agents/:agentId/runs/:runId`
|
||||
- `/issues/:issueId`
|
||||
- `/execution-workspaces/:workspaceId`
|
||||
- `/company/export/*`, `/company/import`
|
||||
- `/company/settings`, `/company/export/*`, `/company/import` — workspace export/import (kept)
|
||||
- `/skills/*` (Skill Aggregator linked from Settings)
|
||||
- `/design-guide`, `/tests/ux/runs`
|
||||
- `/:pluginRoutePath`
|
||||
- `/*` (NotFound)
|
||||
- `/:pluginRoutePath` (plugin host)
|
||||
- `/*` (NotFoundPage)
|
||||
|
||||
### Redirects (post-16b)
|
||||
|
||||
| From | To | Source |
|
||||
|---|---|---|
|
||||
| `/` (board index) | `/assistant` | Phase 16b |
|
||||
| `/instance` | `/instance/settings/general` | Phase 13 |
|
||||
| `/instance/settings/heartbeats` | `/instance/settings/general` | Phase 13 |
|
||||
| `/instance/settings/experimental` | `/instance/settings/general` | Phase 13 |
|
||||
| `/settings`, `/settings/*` | `/instance/settings/general` | Phase 13 |
|
||||
| `/agents`, `/agents/all`, `/active`, `/paused`, `/error` | `/projects` | Phase 16b |
|
||||
| `/issues`, `/issues/all`, `/active`, `/backlog`, `/done`, `/recent` | `/projects` | Phase 16b |
|
||||
| `/convert`, `/convert/:sourceFormat`, `/convert/:sourceFormat/:targetFormat` | `/content-studio/convert` | Phase 16b |
|
||||
|
||||
### Deleted top-level routes (no longer mounted)
|
||||
|
||||
`/dashboard`, `/companies`, `/org`, `/goals`, `/goals/:goalId`, `/costs`, `/activity`, `/inbox`, `/inbox/*`, `/approvals`, `/approvals/*`, `/routines`, `/routines/:routineId`. All now fall through to `NotFoundPage scope="board"`.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -254,23 +279,35 @@ From `ui/src/App.tsx boardRoutes()`. Marks reflect the post-Wave-3A state.
|
|||
|
||||
## 9. Next actions (ordered)
|
||||
|
||||
1. **Wait for Phase 16a subagent to complete.** Check via the background task notification system.
|
||||
2. **Review Phase 16a output.** Verify all 7 dead files are deleted, ChatMessageList is migrated cleanly, destinations.ts extracted, PersonalAssistant flex layout fix applied.
|
||||
3. **Run full test sweep** after 16a: `npx vitest run src/components/frame/ src/components/assistant/ src/components/studio/ src/components/projects/ src/components/settings/ src/context/ src/hooks/`. Expected: still 294+ tests passing.
|
||||
4. **Dispatch Phase 16b** as a sequential subagent with the scope confirmed by user decisions:
|
||||
- Vocabulary sweep "company" → "workspace" in UI strings only
|
||||
- Delete `/dashboard`, `/goals`, `/costs`, `/activity`, `/org`, `/inbox`, `/convert`, `/approvals`, `/routines`
|
||||
- `/issues` → redirect to `/projects`
|
||||
- `/agents` → redirect to `/projects`
|
||||
- Visual QA pass against DESIGN.md
|
||||
5. **Run final test sweep** after 16b.
|
||||
6. **Update `PROJECT-STATUS.md`** (this file) to mark 16a and 16b as DONE.
|
||||
7. **Update `CODEBASE-MAP.md`** dead-code appendix to mark the 7 files as DELETED.
|
||||
8. **Decide next priority:**
|
||||
- Run visual migration phases 4–7 (typography audit, ThemePreviewPanel rewrite, hljs, visual QA)
|
||||
- Or start Phase 11.5 tickets
|
||||
- Or switch back to the v1.7 content-generation milestone work
|
||||
- Or move to the v1.8 Recipe Registry milestone
|
||||
The structural layout overhaul (phases 8–16) is complete. The remaining scope on this branch is the visual repaint tail and a backend-dependent backlog item.
|
||||
|
||||
### Track A — Visual migration phases 4–7 (RECOMMENDED NEXT)
|
||||
|
||||
Pure frontend, no backend dependencies, unblocked. Recommended first because (a) it's the only remaining DESIGN.md compliance gap, (b) it completes the design system migration as a single thematic branch unit, and (c) the work is self-contained to ~3 files + one QA sweep.
|
||||
|
||||
1. **Phase 4 — Typography + radius audit.** Grep `rounded-xl`, `rounded-2xl`, `rounded-3xl` and bump down to `rounded-lg` (8px) or `rounded-sm` (4px). Bump display moments to `font-black` (900). Replace soft shadows with border + inset "pressed" depth.
|
||||
2. **Phase 5 — ThemePreviewPanel rewrite.** `ui/src/components/ThemePreviewPanel.tsx` currently showcases Catppuccin. Rewrite against volt/forest/silver palette. Update `ThemePaletteGrid.tsx` or deprecate.
|
||||
3. **Phase 6 — hljs syntax highlighting.** Replace the 3 theme rule sets in `ui/src/index.css` with a single DESIGN.md-compliant block (neon + white on dark, terminal aesthetic per §4).
|
||||
4. **Phase 7 — Visual QA pass.** Walk every top-level route (Assistant, Studio, Projects, ProjectDetail, Settings, Skills, Plugins, Onboarding, Invite, Auth). Compare against DESIGN.md §3–§7. File issues as a punch list commit.
|
||||
|
||||
### Track B — Phase 11.5 per-project scoping (blocked on backend or extraction work)
|
||||
|
||||
See backlog plan `docs/plans/2026-04-11-nexus-phase-11-5-per-project-scoping.md`. 5 tabs × (extract standalone component + add `projectId` prop or backend field). Trigger: explicit UX pain or milestone pull-in. Not recommended as immediate next because it fans out into backend type changes.
|
||||
|
||||
### Track C — Low-value follow-ups (defer until needed)
|
||||
|
||||
- Rewrite residual `/dashboard` hrefs in `SkillDetail`, `SkillBrowser`, `PluginManager`, `PluginSettings`, `PluginPage`, `NotFound`, `CompanyImport`, `ProjectDetail`, `AgentDetail`, `company-page-memory.ts`, `useCompanyPageMemory.ts` → `/assistant` or project-specific equivalents.
|
||||
- Delete orphaned `ui/src/hooks/useInboxBadge.ts`.
|
||||
- Dedicated vocabulary sweep for `CompanyImport.tsx` / `CompanyExport.tsx` / `CompanySkills.tsx` body copy.
|
||||
|
||||
### Other possible pivots
|
||||
|
||||
- Switch back to the v1.7 content-generation milestone work (all 9 workshops shipped, remaining is DRAFT placeholder assets).
|
||||
- Move to the v1.8 Recipe Registry milestone.
|
||||
|
||||
### Recommendation
|
||||
|
||||
**Tackle Track A (visual migration phases 4–7) next.** Rationale: finishes the design-system-migration branch cleanly, no cross-cutting dependencies, unblocks a clean PR for the full Wave 1–3B + 4–7 package. Phase 11.5 is better as a separate branch after this one merges.
|
||||
|
||||
### Hard hazards to remember
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue