Mission Control v2 + Frontier dashboard (F1-F6)#27
Merged
Conversation
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>
This was referenced May 19, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-server→wavex-os-serverrename + all 104 commits of main's evolution.Net new on this PR (no overlap with main's work):
packages/wavex-os-server/src/mission-control/.env.examplefor the Composio API keyPlugin 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
/and ⌘K hotkeys). Natural-language → STRUCTURED card payload that dispatches to the right surfacePath 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)0004–0009→0006–0011(avoids collision with main'swizard_step/wizard_repoat 0004/0005)@wavex-os/sharedworkspace dep towavex-os-server/package.jsonTest plan
pnpm installclean (workspace links + shared package built)@wavex-os/wavex-os-servertsc: 0 errors in net-new code (only pre-existingvendor/wavex-os/*issues that exist on main too)Backup branch
The 21-commit feature history (with the F1-F6 split commits) is preserved on
feat/paperclip-mission-controlfor reference. This integration branch is the squashed-onto-main version intended to merge.🤖 Generated with Claude Code