docs(nexus): refresh codebase map and project status after wave 3b

This commit is contained in:
Nexus Dev 2026-04-11 16:21:12 +00:00
parent 6924de3e08
commit 3e8b204be0
2 changed files with 182 additions and 120 deletions

View file

@ -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.

View file

@ -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 816) is fully shipped. Remaining scope on this branch is the visual repaint phases 47 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 47 (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 816) is complete. The remaining scope on this branch is the visual repaint tail and a backend-dependent backlog item.
### Track A — Visual migration phases 47 (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 47) next.** Rationale: finishes the design-system-migration branch cleanly, no cross-cutting dependencies, unblocks a clean PR for the full Wave 13B + 47 package. Phase 11.5 is better as a separate branch after this one merges.
### Hard hazards to remember