Two orientation files for future sessions that may not have the full
conversation history loaded.
CODEBASE-MAP.md — factual scan of the tree:
1. ui/src/ directory tree with one-line descriptions
2. Full App.tsx route map with ACTIVE / LEGACY / REDIRECT /
PLACEHOLDER status per route
3. Component inventory for frame/, assistant/, studio/, projects/,
settings/ with phase attribution and file status
4. Context + hook map (13 contexts, 39 hooks)
5. API surface (34 files in src/api/)
6. CSS token map for dark and light modes with direct brand refs
7. Known issues — grep for TODO/FIXME/PHASE 11 DATA GAP/placeholder
8. Migration status verified against git log
PROJECT-STATUS.md — narrative status:
1. Current milestone (v1.7 Content Generation + parallel overhaul)
2. Design system phases 1-7 status (1-3 DONE, 4-7 PENDING)
3. Layout overhaul phases 8-16 status (8-15 DONE, 16a mid-flight,
16b pending)
4. Known placeholders — Phase 11 TabPlaceholders and Wave 2.5
TODO(phase-11.5) proxies in Projects.tsx
5. Blocked work — phase 11.5 per-project scoping tickets,
ChatMessageList migration hazard
6. Dead code inventory with ALIVE/DELETED markers
7. Route status — active, redirect, legacy pending deletion
8. Pending decisions from migration plan and layout spec
9. Ordered next actions — wait for 16a, review, dispatch 16b,
full test sweep
Both docs reference git commits and file paths so a fresh session
can cross-check against the actual tree without replaying the wave
history.
NOTE: This commit was originally attempted earlier and got tangled
with Phase 16a's staged deletions in a shared-working-tree race.
Phase 16a's subagent detected the mixed commit and reset it cleanly.
This is the re-commit using git commit -o <specific paths> to
scope strictly to the doc files, avoiding any in-flight phase 16a
work. See memory feedback_parallel_dispatch_shared_files for the
pattern.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
17 KiB
Nexus Project Status
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/anddocs/. 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.
1. Current milestone
- Version: v1.7 — Content Generation
- Branch:
nexus/design-system-migration - Active work: the Nexus layout and information architecture overhaul (a separate, parallel track from the v1.7 content-generation milestone). The overhaul is delivered as phases 8–16 of
MIGRATION-PLAN.md+ the layout spec atdocs/specs/2026-04-11-nexus-layout-overhaul.md. - v1.7 goal: "Comprehensive content generation layer — agents produce visual, document, and media content as real deliverables." The layout overhaul reshapes how these generators are surfaced (Studio workshops) without changing their internals.
- Main/upstream branch:
PAP-878-create-a-mine-tab-in-inbox. Nexus maintains display-layer differentiation; schema/API identifiers stay upstream-compatible for periodic rebases.
v1.7 content-generation milestone status
Active requirements from .planning/PROJECT.md mapped to implementation:
| Requirement | Status | Where |
|---|---|---|
| Presentations & video via Remotion | DONE (v1.7 phase 44) | PresentationPanel.tsx, wired into Studio as the 9th workshop in Wave 2.5 |
| Placeholder assets with DRAFT styling | Partial — DRAFT manifest exists server-side | — |
| Theme & palette generator | DONE (v1.7 phase 41) | Studio themes workshop |
| Wallpapers & visual assets | DONE (v1.7 phase 42) | Studio wallpapers workshop |
| Diagram generation | DONE (v1.7 phase 41) | Studio diagrams workshop |
| Document generation (PDF) | DONE (v1.7 phase 43) | Studio documents workshop |
| Icon generation | DONE (v1.7 phase 41) | Studio icons workshop |
| Social media content | DONE (v1.7 phase 42) | Studio social workshop |
| Branding media kit | DONE (v1.7 phase 43) | Studio brand-kits workshop |
| Whisper voice input in web chat | DONE (v1.6 phase 37) | ChatInput voice mic — lifted into VoiceContext in layout phase 14 |
| Content types as installable Nexus skills | DONE (v1.7 phase 45) | 9 SKILL.md files, Creative group |
2. Design system migration status (phases 1–7, visual repaint)
Verified by git log --oneline on nexus/design-system-migration.
| Phase | Title | Status | Commits |
|---|---|---|---|
| 1 | Foundation — index.css tokens + Inter font |
DONE | e49144a4 |
| 2 | Status + role color dictionaries | DONE | 4b8f8178 |
| 3 | Raw utility sweep | DONE | 3a41ec7b |
| 4 | Typography + radius audit | PENDING | No commits |
| 5 | ThemePreviewPanel rewrite | PENDING | No commits |
| 6 | hljs syntax highlighting | PENDING | No commits |
| 7 | Visual QA pass | PENDING | No commits |
Note: phases 4–7 are independent of the layout overhaul (phases 8–16) and can run before or after. The user explicitly chose to push the structural overhaul first because visual polish layers on top; the layout has bigger leverage.
3. Layout overhaul status (phases 8–16, structural)
| Phase | Wave | Title | Status | Commits |
|---|---|---|---|---|
| 8 | 1 | Frame skeleton (IconRail + TopStrip + killed chrome) | DONE | 10 commits 332ed47b…2dbf2811 |
| 9 | 2 | Assistant mode (full-bleed chat + slide-overs + home greeting) | DONE | 8 commits 397e12a8…e43d5ec2 |
| 10 | 2 | Studio mode (9-workshop grid, Convert folded in, Presentations restored) | DONE | 5 commits 533490f1…cd6c172d + Wave 2.5 |
| 11 | 2 | Projects + Builder mode (hero cards + tab strip + 5 placeholder tabs) | DONE (with 5 TabPlaceholders) | 7 commits 6010a105…1e855657 |
| 12 | 3A | Promote-to-project 700ms transition | DONE | 3 commits d2d41886, 70698b9e, b2775275 + 1 in f41690ff (attribution artifact) |
| 13 | 3A | Settings consolidation (single-column, 8 sections) | DONE | 6 commits 7aa98d38…1a0d611c |
| 14 | 3A | Voice + ⌘K globalization | DONE | 6 commits 14ecbf00…9b772aa1 |
| 15 | 3A | Mobile parity (MobileTabBar + sheet variants) | DONE | 1 commit 4623c8ae |
| 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 |
Wave summary
- Wave 1: Phase 8 alone — foundational frame
- Wave 2: Phases 9, 10, 11 dispatched in parallel as 3 subagents
- Wave 2.5: Controller follow-up batching Presentations fix, ProjectCard derivatives, spec 8→9 drift
- Wave 3A: Phases 12, 13, 14, 15 dispatched in parallel as 4 subagents
- Wave 3B: Phase 16 split into 16a (dead code, running now) and 16b (vocabulary + routes, pending)
4. Known placeholders (from grep)
Phase 11.5 data gaps — queued for backlog plan docs/plans/2026-04-11-nexus-phase-11-5-per-project-scoping.md
Five per-project tabs shipped as TabPlaceholder because reusable list components with projectId props don't exist:
| Tab | File | Missing |
|---|---|---|
| Agents | ui/src/components/projects/tabs/AgentsTab.tsx |
Agent type has no projectId; AgentList isn't a standalone component |
| Gates | ui/src/components/projects/tabs/GatesTab.tsx |
Approval.payload.projectId is untyped; ApprovalsList isn't a standalone |
| Costs | ui/src/components/projects/tabs/CostsTab.tsx |
CostsBreakdown doesn't exist; Costs.tsx is 1100 lines inline |
| Activity | ui/src/components/projects/tabs/ActivityTab.tsx |
activityApi supports server-side entity filtering but no standalone feed component |
| Org | ui/src/components/projects/tabs/OrgTab.tsx |
agentsApi.org() returns company-wide tree with no per-project scoping. Backlog plan recommends dropping this tab entirely |
Each renders a "PHASE 11 DATA GAP" card with precise rationale; honest and diagnosable, not fabricated.
ProjectCard hero-stat proxies — Wave 2.5 derivatives
Five TODO(phase-11.5) annotations in ui/src/pages/Projects.tsx (lines 20, 49, 171, 292, 299). The hero-stat card computes progress from closed_issues / total_issues, nextGateName from the first pending approval whose payload.projectId matches, and lastActivity from max(project.updatedAt, newest issue.updatedAt). These proxies were the Wave 2.5 "don't ship em-dash city" compromise; real backend aggregates on Project are the backlog fix.
Hard data gaps still rendering as em-dashes:
phase/milestones— no milestone field on theProjectrecord. Overview tab shows "No milestones defined."costBurnedCents— no aggregate field. Card footer shows—.originConversationId— no link from project → conversation. Origin Chat card omitted.activeAgentsCountper project — hard-coded to 0.
Other placeholders
DangerZoneSection.tsxrendersdisabled"Reset workspace" and "Delete all conversations" buttons — no server endpoints exist yet. Honest placeholder per plan.PresentationPanelhas always-hardcoded generator — Studio fold-in viacomponentKey: "presentation".
5. Blocked work
Phase 11.5 — 5 per-project tab scoping tickets
Cannot proceed without one of:
- Adding
projectIdto theAgentshared type + reverse index (backend change) - Adding typed
projectIdtoApproval.payload(backend change) - Extracting
AgentList/ApprovalsList/CostsBreakdown/ActivityFeed/OrgChartas standalone projectId-aware components (frontend extraction — easier)
The backlog plan at docs/plans/2026-04-11-nexus-phase-11-5-per-project-scoping.md breaks this into 5 independent tickets. Trigger is UX pain or explicit milestone pull-in.
ProjectCard real fields
Not strictly blocked — Wave 2.5 computes proxies — but the ideal fix adds real backend aggregate fields to the Project record:
milestoneProgress: number(0–100)milestones: ProjectMilestone[]nextGateName: string | nullcostBurnedCents: numberoriginConversationId: string | nullactiveAgentsCount: number
Backend ticket, not UI.
Phase 16a hazard — ChatMessageList migration
ChatMessageList.tsx reads activeConversationId and scrollToMessageId from ChatPanelContext. Phase 16a MUST migrate this off before deleting the context. Phase 9's report explicitly flagged this. Phase 16a's instructions cover it; if Phase 16a reports BLOCKED on this item, that's the hazard firing.
6. Dead code inventory
Pre-16a snapshot — Phase 16a running in background is expected to move ALIVE entries to DELETED.
| File | Status (pre-16a) | Reason for deletion | Owner 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 | — |
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.
7. Route status
From ui/src/App.tsx boardRoutes(). Marks reflect the post-Wave-3A state.
Active (new 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/:projectId/overview— ProjectDetail Overview tab/projects/:projectId/issues— ProjectDetail Issues tab (real wire)/projects/:projectId/agents— ProjectDetail Agents tab (placeholder)/projects/:projectId/gates— ProjectDetail Gates tab (placeholder)/projects/:projectId/costs— ProjectDetail Costs tab (placeholder)/projects/:projectId/activity— ProjectDetail Activity tab (placeholder)/projects/:projectId/org— ProjectDetail Org tab (placeholder)/instance/settings/general— Phase 13 single-column settings/instance/settings/plugins,/plugins/:pluginId— plugin subsystem (kept)
Redirects (Phase 13 + historical)
/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/convertbookmark 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/execution-workspaces/:workspaceId/company/export/*,/company/import/skills/*(Skill Aggregator linked from Settings)/design-guide,/tests/ux/runs/:pluginRoutePath/*(NotFound)
8. Pending decisions
From MIGRATION-PLAN.md §10 — still unresolved for visual phases 4–7
- Light mode: ship / drop / iterate? Light mode tokens already exist in
index.css(:rootblock) but the visual phases to validate them haven't run. - Basier font: license / Inter only / free alternative? Current state: Inter everywhere. Decision pending.
- Destructive color: current dark is
#ef4444, light is#dc2626. Effectively resolved via the shipped tokens. - Role hue collapse vs preserve: resolved —
--chart-role-1..5exception documented inindex.css. - Display 900: resolved — used in the 72px ProjectCard hero and 96px empty state.
- Theme toggle UX: resolved — binary light/dark, toggle in Settings Workspace section.
- Tokyo Night removal: resolved — deleted in Phase 1 commit.
From the layout overhaul
- Presentations workshop: RESOLVED — added as 9th workshop in Wave 2.5 per user decision (C). Spec updated from 8→9.
- Phase 11 placeholder tabs: RESOLVED — user accepted (A) + draft 11.5 plan. Both shipped.
- ProjectCard derivatives: RESOLVED — user chose (B) compute from derivatives. Shipped in Wave 2.5.
- Phase 16 scope split: RESOLVED — 16a (dead code + DRY + flex fix) and 16b (vocab + routes + visual QA).
- MobileTabBar FAB + badge: RESOLVED — user chose (A) ship pure, no FAB/badge. ⌘K handles new-issue on mobile.
Open for future milestones
- Recipe registry v1.8 — planned, not yet started. Phase 14 stubbed the "Recipes" group in the command palette as disabled placeholder.
- Phase 11.5 trigger — when does the
TabPlaceholderUX pain justify promoting the 5 tickets to active work? User's call. - Backend Project record enrichment (milestoneProgress, originConversationId, costBurnedCents, activeAgentsCount) — backlog.
- Phase 16b
/issuesand/agentsredirect targets — confirmed in user's resume prompt: both redirect to/projects.
9. Next actions (ordered)
- Wait for Phase 16a subagent to complete. Check via the background task notification system.
- Review Phase 16a output. Verify all 7 dead files are deleted, ChatMessageList is migrated cleanly, destinations.ts extracted, PersonalAssistant flex layout fix applied.
- 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. - 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
- Run final test sweep after 16b.
- Update
PROJECT-STATUS.md(this file) to mark 16a and 16b as DONE. - Update
CODEBASE-MAP.mddead-code appendix to mark the 7 files as DELETED. - 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
Hard hazards to remember
- Upstream sync: all commits on this branch use
[nexus](orfeat(nexus):/refactor(nexus):) prefix. Don't rename backend identifiers.companyin TypeScript/API/DB stays;workspaceis display-only. - DESIGN.md is law: anything conflicting with DESIGN.md loses. Pure black canvas, volt
#faff69accent, forest#166534secondary, Inter 900 display, sharp 4/8 radii, charcoalrgba(65,65,65,0.8)borders. - No terminal for users: zero-terminal principle. Every surface must be reachable through the UI.
- Shared-file dispatch rule: for parallel subagents editing shared files (
PersonalAssistant.tsx,Layout.tsx,App.tsx,main.tsx), each subagent mustgit addonly its own new files. Controller handles shared-file integration commit. See~/.claude/projects/-opt-nexus/memory/feedback_parallel_dispatch_shared_files.md.