317 lines
21 KiB
Markdown
317 lines
21 KiB
Markdown
# 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 1–7 (visual repaint) and 8–16 (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 8–16 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 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 | **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 4–7 shipped AFTER the structural overhaul (phases 8–16) 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 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) | **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` (0–100)
|
||
- `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
|
||
|
||
### Active detail pages (still needed from per-project / per-surface links)
|
||
|
||
- `/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 1–7 (visual repaint) + phases 8–16 (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** (F4–F12, 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 F1–F3 this session)
|
||
|
||
Applied: F1 (brand color aliases), F2 (shadow-xs cleanup), F3 (DESIGN.md Inter-only amendment).
|
||
|
||
Deferred to post-merge: F4–F12. 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`.
|