Skip to content

Mission Control v2 + Frontier dashboard (F1-F6)#27

Merged
aimerdoux merged 1 commit into
mainfrom
feat/mc-frontier-integration
May 19, 2026
Merged

Mission Control v2 + Frontier dashboard (F1-F6)#27
aimerdoux merged 1 commit into
mainfrom
feat/mc-frontier-integration

Conversation

@dylanriedw10-oss
Copy link
Copy Markdown
Collaborator

Summary

Brings the MC v2 accountability ledger + the 6 Frontier dashboard surfaces (F1-F6) onto main as a single integration commit. Adopts main's op-omega-serverwavex-os-server rename + all 104 commits of main's evolution.

Net new on this PR (no overlap with main's work):

  • 12 server services in packages/wavex-os-server/src/mission-control/
  • 24 plugin UI components (Mission Control + Frontier)
  • 6 DB tables (deliverables / expected_kpi_impacts / mission_control_events / assignment_links / chief_of_staff / kpi_snapshots) at migrations 0006-0011
  • 6 plain-language event renderers + their tests
  • 8 server-side test files
  • .env.example for the Composio API key

Plugin v0.4.0 → v0.15.0. Drops the 5 legacy Supabase-gated widgets (already replaced by Mission Control surfaces on main).

The six Frontier surfaces

What it does Where it lives
F1 Living Headline LLM-rendered display-type sentence + narrative + sentiment chip at the top of every MC view Top of MC page + dashboard widget
F1 Status Orb Pulsing health indicator (calm/active/watching/action) computed over scoreboard + burn + deliverables + orphans. Click for reasons + deep links Top right of MC header
F2 Decision Queue Ranked, actionable list — replaces "Stream" as the first subnav tab. Inline approve/reject/dismiss/declare-impact buttons First tab + compact section in dashboard
F3 Receipts panel Side drawer that opens on any KPI click. Shows causal chain: forecast vs realized, accuracy, $ spent, $/point, confidence, contributor list Triggered from Scoreboard rows + Hero KPI cards + chat-nav KPI cards
F4 Chat-as-nav Persistent bottom input bar ( / and ⌘K hotkeys). Natural-language → STRUCTURED card payload that dispatches to the right surface Bottom of full-page MC
F5 Empty-state CTAs + Tab badges Starter CTAs when queue is empty ("Declare your first KPI" / "Activate fleet"). Per-tab badge counts Decisions tab body + subnav chips
F6 Accountability Map Replaces the topology Graph with a scannable card grid. One card per agent: name + role + health + KPI chips + stats + last activity Map tab (renamed from "Graph")

Path adaptations made during port

  • op-omega-server/wavex-os-server/ (adopts main's rename)
  • @op-omega/plugin-*@wavex-os/plugin-* (imports across MC files)
  • @paperclipai/plugin-sdk@wavex-os/plugin-sdk-shim (plugin imports)
  • /api/op-omega/onboarding//api/wavex-os/onboarding/ (route prefixes)
  • DB migrations 0004000900060011 (avoids collision with main's wizard_step/wizard_repo at 0004/0005)
  • Added @wavex-os/shared workspace dep to wavex-os-server/package.json

Test plan

  • pnpm install clean (workspace links + shared package built)
  • @wavex-os/wavex-os-server tsc: 0 errors in net-new code (only pre-existing vendor/wavex-os/* issues that exist on main too)
  • Plugin esbuild bundle: 224.5kb success
  • Plugin tsc: same error class as main (workspace shim re-export issues, pre-existing; build still emits dist/ files)
  • DB migration renumbering verified — no collisions with main's 0001-0005
  • CI / human review pass

Backup branch

The 21-commit feature history (with the F1-F6 split commits) is preserved on feat/paperclip-mission-control for reference. This integration branch is the squashed-onto-main version intended to merge.

🤖 Generated with Claude Code

Brings the MC v2 ledger + 6 Frontier surfaces onto main as a single
integration commit. Spans the rename from op-omega-server → wavex-os-server
(adopts main's package rename) + the entire MC accountability platform.

## Underlying ledger (MC2-1 through MC2-8 + MCv2-P0 through P6)
* Shared types + Zod schemas for Task/Deliverable/ScopeNode/ActivityEvent
  /KPI/ExpectedKpiImpact (packages/shared/src/{types,schemas}/mission-control.ts)
* DB tables: deliverables, expected_kpi_impacts, mission_control_events,
  assignment_links, chief_of_staff, kpi_snapshots (migrations 0006-0011 +
  schema files; renumbered to avoid colliding with main's wizard migrations)
* Server services (packages/wavex-os-server/src/mission-control/):
  - activity-log + bus, scope-tree + cache, assignment-chain
  - kpi-impacts (scoreboard with history/status/freshness/owners)
  - graph (accountability nodes/edges/health/bottleneck detection)
  - impact-graph (causal task → KPI chain)
  - chief-of-staff (origination rules, evaluator, transparency log)
  - cost-attribution ($/KPI point, capacity heatmap, burn rate)
  - polish (cost dashboard + weekly export)
  - report-generator (weekly markdown report)
  - kpi-sampler (sparkline time-series)
  - chief-context (Kernel chat injection)
* Composio live OAuth (vault/service deleteAllForConnector +
  routes/credentials Composio setup endpoint with hot-reload)
* Plugin UI bundle (packages/paperclip-plugin-wavex):
  - 24 widgets/components: Unified surface, Scoreboard, Graph, Polish,
    Stream, Deliverables, Chief, NodeProfile, ImpactGraph, ConnectorsSidebar,
    DeliverableInspector, MissionControlPage, MissionControlSidebarEntry
  - Renderers for Task/Deliverable/Node/KPI/Chief/System events with tests
  - JSX classic transform via build-ui.mjs (kills false React-19 key warnings)
  - Plugin v0.4.0 → v0.15.0 (drops legacy Supabase widgets)

## Frontier surfaces (F1-F6)
* F1 — Living Headline + Status Orb. LLM-rendered display-type sentence
  + narrative + sentiment chip at the top of every MC view. Paired pulsing
  health orb (calm/active/watching/action) computed over scoreboard + burn
  + deliverables + orphans.
* F2 — Decision Queue. Replaces "Stream" as the first subnav tab. Ranked
  actionable items: deliverable reviews, orphan tasks, runway alerts, stale
  KPIs, starter CTAs. Inline approve/reject/dismiss/declare-impact buttons.
* F3 — Receipts side panel. Click any KPI → portaled drawer with causal
  chain: forecast vs realized, accuracy, $ spent, $/point, confidence
  (high/medium/low/unknown), contributor list with owner names + deliverables.
* F4 — Chat-as-nav. Persistent bottom input bar with `/` and ⌘K hotkeys.
  Natural-language questions return STRUCTURED card payloads (kpi/decision/
  agent/text) that dispatch to the right surface. Hallucination guard
  validates KPI ids against the actual scoreboard.
* F5 — Empty-state CTAs + Tab badges. Starter CTAs ("Declare your first
  KPI" / "Activate your agent fleet") when queue is empty. Tab-counts
  endpoint surfaces per-tab badge counts.
* F6 — Accountability Map (replaces topology Graph). Scannable card grid:
  per-agent name + role + health + KPI chips + stats + last activity. Click
  → opens Receipts. Sort by severity, filter by Needs attention.

## REST endpoints (all under /api/mission-control/:companyId/)
activity, scope-tree, deliverables, deliverable/:id/{content,review,reveal},
scoreboard, scoreboard-rich, kpi-impacts, measure-due, sample-kpis,
kpi/:kpiId/{impact-graph,receipts}, impact-summary, assignments, graph,
chief, chief/rules, chief/rules/:id, chief/evaluate, cost, cost-per-kpi,
capacity, capacity-heatmap, burn-rate, weekly-export, reports/weekly,
headline, health-orb, decision-queue, ask, tab-counts, accountability-map

## Plugin worker handlers
24 ctx.data + ctx.actions handlers covering every endpoint, plus the chat
nav action.

## Verified locally
* pnpm install clean (workspace links + shared package built)
* @wavex-os/wavex-os-server tsc: 0 errors in our code (only pre-existing
  vendor/wavex-os/* issues that also exist on main)
* Plugin esbuild bundle: 224.5kb success
* Plugin tsc: same error class as main (workspace shim re-export issues,
  pre-existing; build still emits dist/ files because noEmitOnError is off)

## Path adaptations from source branch
* op-omega-server/ → wavex-os-server/ (adopts main's package rename)
* @op-omega/plugin-* → @wavex-os/plugin-* (imports across MC files)
* @paperclipai/plugin-sdk → @wavex-os/plugin-sdk-shim (plugin imports)
* /api/op-omega/onboarding/ → /api/wavex-os/onboarding/ (route prefixes)
* DB migrations 0004-0009 → 0006-0011 (avoids collision with main's
  wizard_step/wizard_repo at 0004/0005)
* Added @wavex-os/shared workspace dep to wavex-os-server/package.json

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@aimerdoux aimerdoux merged commit 680fa2a into main May 19, 2026
1 check passed
aimerdoux added a commit that referenced this pull request May 19, 2026
…29)

Two bugs that surfaced trying to build the wavex plugin locally after
#27 + #28. Neither one was caught by OSS CI because the plugin build
isn't run on the test workflow; the build is only exercised at dev
boot time via `pnpm dev:wavex-plugin:build`. Both bugs hard-fail the
build so the plugin's dist/ never refreshes — the Mission Control UI
loads a stale bundle that doesn't include any of the F1-F6 or Pool B
work.

1. **Hardcoded user path in build-ui.mjs**

   The esbuild import was pinned to
   `/Users/dylanriedweg/wavex-os/node_modules/.pnpm/esbuild@0.27.7/...`
   — works only on the original author's machine. esbuild isn't a
   direct dep of this package so a bare `import "esbuild"` also fails
   (pnpm's isolated store hides it). Replaced with a glob over the
   workspace root's `.pnpm` store that picks up whichever esbuild
   version is installed:

   ```js
   const pnpmStore = resolve(__dirname, "../../node_modules/.pnpm");
   const esbuildDir = readdirSync(pnpmStore).find((d) => /^esbuild@\d/.test(d));
   const esbuildMain = pathToFileURL(join(pnpmStore, esbuildDir, ...));
   const { build } = await import(esbuildMain.href);
   ```

   Robust across machines and esbuild minor-version bumps.

2. **`Record<View, number>` missing the new `"pool-b"` key**

   #28 added `"pool-b"` to the `View` type union but didn't update
   `countByTab`, which is typed `Record<View, number>`. tsc:

       MissionControlPage.tsx(94,9): error TS2741: Property '"pool-b"'
       is missing in type ... but required in type 'Record<View, number>'

   Added `"pool-b": 0` with a comment noting that Pool B Health
   doesn't have a backend-driven badge yet — the
   `mission-control-tab-counts` RPC predates it. A follow-up can
   surface `pillar_suggest_calls_24h - pillar_suggest_success_24h`
   as the badge value when chips are failing.

After both fixes, plugin builds to a fresh 235.8kb dist/ui/index.js
that includes the PoolBHealthWidget. Paperclip dev server now loads
the new "Pool B" subnav tab.

Co-authored-by: aimerdoux <aimerdoux94@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants