nexus/PROJECT-STATUS.md

21 KiB
Raw Blame History

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/ 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, full migration complete. Phases 17 (visual repaint) and 816 (structural layout overhaul) are both DONE. Phase 7 audit applied + 3 polish follow-ups (F1/F2/F3) applied. 304/304 tests passing across 38 files. Branch is ready to ship as a single thematic PR.


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 816 of MIGRATION-PLAN.md + the layout spec at docs/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 17, 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 DONE 3 commits 68c87fc8, 16adf9f8, 547e5262 — 57 radius collapses, 29 soft-shadow drops (1 kept: InstallPromptBanner), no display-weight bumps needed
5 ThemePreviewPanel rewrite DONE 2 commits 0c1496d2, d3141ac5 — panel rewritten against DESIGN.md palette, palette grid restyled (kept for theme-generation workshop)
6 hljs syntax highlighting DONE 1 commit f66209f4 — 100% CSS-var references, 4-hue palette discipline, full hljs class coverage (66→111 LOC)
7 Visual QA pass DONE 5 commits 5ab0b19d (audit doc) + 9329e5d9, 862b856d, 77edfdb4, bac89b1a (inline fixes). Audit at docs/reviews/2026-04-11-nexus-phase-7-visual-qa.md. 0 blockers, 4 deviations, 12 follow-ups tracked.
F1 post-Phase-7 polish — brand color aliases DONE c9ed4c92 — 7 files swapped from literal hexes to bg-volt/bg-volt-pale/bg-forest/bg-silver aliases
F2 post-Phase-7 polish — shadow-xs shadcn cleanup DONE 044a2571 — 6 shadcn primitives (select, input, textarea, toggle, checkbox, button)
F3 post-Phase-7 polish — DESIGN.md typography DONE ec6c01b0 — Basier dropped, Inter-only confirmed in §3 + §9

Note: phases 47 shipped AFTER the structural overhaul (phases 816) per the user's sequencing decision — the layout overhaul had bigger leverage and the visual repaint layered cleanly on top.


3. Layout overhaul status (phases 816, structural)

Phase Wave Title Status Commits
8 1 Frame skeleton (IconRail + TopStrip + killed chrome) DONE 10 commits 332ed47b2dbf2811
9 2 Assistant mode (full-bleed chat + slide-overs + home greeting) DONE 8 commits 397e12a8e43d5ec2
10 2 Studio mode (9-workshop grid, Convert folded in, Presentations restored) DONE 5 commits 533490f1cd6c172d + Wave 2.5
11 2 Projects + Builder mode (hero cards + tab strip + 5 placeholder tabs) DONE (with 5 TabPlaceholders) 7 commits 6010a1051e855657
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 7aa98d381a0d611c
14 3A Voice + ⌘K globalization DONE 6 commits 14ecbf009b772aa1
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) DONE 4 commits 1b6727bb, 59572900, a3102351, 4ff707bd
16b 3B Vocabulary sweep + route cleanup + visual QA DONE 3 commits 548cfbdc, 4d667caa, 6924de3e

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 the Project record. Overview tab shows "No milestones defined."
  • costBurnedCents — no aggregate field. Card footer shows .
  • originConversationId — no link from project → conversation. Origin Chat card omitted.
  • activeAgentsCount per project — hard-coded to 0.

Other placeholders

  • DangerZoneSection.tsx renders disabled "Reset workspace" and "Delete all conversations" buttons — no server endpoints exist yet. Honest placeholder per plan.
  • PresentationPanel has always-hardcoded generator — Studio fold-in via componentKey: "presentation".

5. Blocked work

Phase 11.5 — 5 per-project tab scoping tickets

Cannot proceed without one of:

  • Adding projectId to the Agent shared type + reverse index (backend change)
  • Adding typed projectId to Approval.payload (backend change)
  • Extracting AgentList / ApprovalsList / CostsBreakdown / ActivityFeed / OrgChart as 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 (0100)
  • milestones: ProjectMilestone[]
  • nextGateName: string | null
  • costBurnedCents: number
  • originConversationId: string | null
  • activeAgentsCount: 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

Post-Wave-3B snapshot — all 16a and 16b targets confirmed deleted via ls probe 2026-04-11.

Phase 16a dead chrome (7 files)

File Status Reason Phase
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

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-3B state. All routes mount under a company-prefixed root (/:companyPrefix/*) except /instance/*.

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 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)
  • /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)
  • /projects/:projectId/configuration, /projects/:projectId/budget — legacy preserved
  • /instance/settings/general — Phase 13 single-column settings
  • /instance/settings/plugins, /instance/settings/plugins/:pluginId — plugin subsystem
  • /agents/new, /agents/:agentId, /agents/:agentId/:tab, /agents/:agentId/runs/:runId
  • /issues/:issueId
  • /execution-workspaces/:workspaceId
  • /company/settings, /company/export/*, /company/import — workspace export/import (kept)
  • /skills/* (Skill Aggregator linked from Settings)
  • /design-guide, /tests/ux/runs
  • /: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".


8. Pending decisions

From MIGRATION-PLAN.md §10 — all resolved

  1. Light mode: RESOLVED — shipped. Light-mode tokens in index.css :root validated via Phase 7 visual QA. Forest green downrank of volt in light mode works as designed.
  2. Basier font: RESOLVED — Inter only. DESIGN.md §3 amended in follow-up F3 (commit ec6c01b0).
  3. Destructive color: RESOLVED — #ef4444 dark, #dc2626 light, both shipped and audited.
  4. Role hue collapse vs preserve: RESOLVED — --chart-role-1..5 exception documented in index.css.
  5. Display 900: RESOLVED — used in 72px ProjectCard hero and 96px Projects empty state (Phase 4 confirmed).
  6. Theme toggle UX: RESOLVED — binary light/dark, toggle in Settings Workspace section.
  7. Tokyo Night removal: RESOLVED — deleted in Phase 1 commit.

From the layout overhaul

  1. Presentations workshop: RESOLVED — added as 9th workshop in Wave 2.5 per user decision (C). Spec updated from 8→9.
  2. Phase 11 placeholder tabs: RESOLVED — user accepted (A) + draft 11.5 plan. Both shipped.
  3. ProjectCard derivatives: RESOLVED — user chose (B) compute from derivatives. Shipped in Wave 2.5.
  4. Phase 16 scope split: RESOLVED — 16a (dead code + DRY + flex fix) and 16b (vocab + routes + visual QA).
  5. 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 TabPlaceholder UX pain justify promoting the 5 tickets to active work? User's call.
  • Backend Project record enrichment (milestoneProgress, originConversationId, costBurnedCents, activeAgentsCount) — backlog.
  • Phase 16b /issues and /agents redirect targets — confirmed in user's resume prompt: both redirect to /projects.

9. Next actions (ordered)

The nexus/design-system-migration branch is now complete. Phases 17 (visual repaint) + phases 816 (structural layout overhaul) + 3 post-Phase-7 polish follow-ups are all DONE. 304/304 tests passing. DESIGN.md compliance audit has zero blockers. Ready for PR creation.

Immediate

  1. Create the PR against PAP-878-create-a-mine-tab-in-inbox. The branch has ~70+ commits; the PR body should summarize the two overlapping tracks (visual repaint + structural overhaul) and link the audit doc at docs/reviews/2026-04-11-nexus-phase-7-visual-qa.md.
  2. Review the audit doc's remaining follow-ups (F4F12, tracked but not fixed in this branch). None are blockers. Each is a small independent commit that could land as its own PR later.

After this branch merges

Track B — Phase 11.5 per-project scoping (5 tabs)

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 on the placeholder tabs, or milestone pull-in. Fans out into backend type changes (Agent.projectId, Approval.payload.projectId). Should be its own branch — don't mix with the design system PR.

Track C — v1.7 content-generation tail

All 9 Studio workshops shipped. Remaining scope is DRAFT placeholder asset styling (server-side) and any per-workshop refinement that comes out of real user sessions.

Track D — v1.8 Recipe Registry milestone

Planned, not yet started. Phase 14 stubbed the "Recipes" group in the command palette as a disabled placeholder. New branch, new milestone entry in .planning/PROJECT.md.

Phase 7 audit follow-ups (12 tracked, 4 applied F1F3 this session)

Applied: F1 (brand color aliases), F2 (shadow-xs cleanup), F3 (DESIGN.md Inter-only amendment).

Deferred to post-merge: F4F12. See docs/reviews/2026-04-11-nexus-phase-7-visual-qa.md for the full list. None are blockers.

Hard hazards to remember

  • Upstream sync: all commits on this branch use [nexus] (or feat(nexus):/refactor(nexus):) prefix. Don't rename backend identifiers. company in TypeScript/API/DB stays; workspace is display-only.
  • DESIGN.md is law: anything conflicting with DESIGN.md loses. Pure black canvas, volt #faff69 accent, forest #166534 secondary, Inter 900 display, sharp 4/8 radii, charcoal rgba(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 must git add only its own new files. Controller handles shared-file integration commit. See ~/.claude/projects/-opt-nexus/memory/feedback_parallel_dispatch_shared_files.md.