Keep Compound Engineering navigation surfaces on the Boxes glyph even when stale plugin metadata is served.
- Route desktop and mobile plugin nav entries through a dashboard-view icon resolver.
- Pin Compound Engineering plugin nav icons to Boxes by plugin id while preserving normal icon fallback behavior for other plugins.
- Align manifest/header icon invariants and add regression coverage for stale Sparkles/Grid3X3 metadata.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/FN-7198-compound-engineering-icon-match.md | 7 +++++++
packages/dashboard/app/components/LeftSidebarNav.tsx | 4 ++--
packages/dashboard/app/components/MobileNavBar.tsx | 6 +++---
.../app/components/__tests__/LeftSidebarNav.test.tsx | 6 +++++-
.../app/components/__tests__/MobileNavBar.test.tsx | 10 +++++++---
.../app/components/__tests__/pluginNavIcon.test.ts | 10 +++++++++-
packages/dashboard/app/components/pluginNavIcon.tsx | 12 ++++++++++++
.../src/__tests__/manifest.test.ts | 14 ++++++++++++++
.../src/dashboard/CompoundEngineeringView.tsx | 3 ++-
9 files changed, 61 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7198
Fusion-Task-Lineage: e910bb82-55a7-4c81-a4fe-947a07b3e308
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Give Compound Engineering its own Boxes glyph across plugin navigation and headers.
- Register the Boxes lucide icon for plugin navigation so desktop and mobile sidebars can resolve it.
- Switch the Compound Engineering manifest, plugin definition, and view header from Sparkles to Boxes.
- Update navigation and manifest tests plus the release changeset for the published CLI bundle.
Files changed:
.changeset/FN-7197-compound-engineering-icon.md | 7 +++++++
.../app/components/__tests__/MobileNavBar.test.tsx | 2 +-
.../app/components/__tests__/pluginNavIcon.test.ts | 14 ++++++++++++++
packages/dashboard/app/components/pluginNavIcon.tsx | 7 ++++++-
plugins/fusion-plugin-compound-engineering/manifest.json | 2 +-
.../src/__tests__/manifest.test.ts | 2 +-
.../src/dashboard/CompoundEngineeringView.tsx | 12 +++++++++---
plugins/fusion-plugin-compound-engineering/src/index.ts | 2 +-
8 files changed, 40 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-7197
Fusion-Task-Lineage: 03c67bfa-3e28-4a2a-b15e-b2c3576588c1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Keep bundled ce-brainstorm guidance aligned with docs/plans as the durable planning artifact.
- Update the visual probe reference to name docs/plans as the durable artifact.
- Add a recursive skill-content guard that prevents docs/brainstorms from being described as new or durable output.
- Assert legacy docs/brainstorms wording remains limited to ce-plan inputs.
Files changed:
.../__tests__/skill-content-alias-guard.test.ts | 85 ++++++++++++++++++++++
.../ce-brainstorm/references/visual-probes.md | 2 +-
2 files changed, 86 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7104
Fusion-Task-Lineage: dd26a511-816d-479c-99ac-7cfec2b96bd4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Code review (8 reviewers) fixes:
- P1: embedded board task-detail now passes onRequestClose so delete/merge/retry dismiss the panel (no ghost task).
- P1: RightDock + TerminalModal drag handlers add pointercancel + unmount teardown (no leaked document listeners / rAF / stuck userSelect); remove dead onOpenChange prop.
- Planning slot DOM-poll interval now caps (self-cancels on mobile); heartbeat slider persist debounced + mounted-guarded.
- Cleanup: remove dead ViewHeader-migration CSS (Skills/Insights), extract shared GithubIcon, move Activity Log embedded CSS to ActivityLogModal.css, FNXC date-format fixes, AGENTS lazy-view note.
- Update stale RightDock roster tests + LeftSidebarNav 'Compound Eng' test to current behavior.
Live UI tweaks:
- Default load lands on board, never the Command Center Dashboard.
- View Board/View Agents moved to the Command Center Overview tab (under the live-activity strip).
- Heartbeat card full-width with spaced, wrapping controls.
- Dev Server panel scrolls in the dock; ChatView right-pane title takes the full line.
- Files pop-out renders deterministic left-right two-pane.
- Mailbox list pane narrower + narrow by default; Add Goal button height matches the Compound stage button; Memory Working-Memory tab no longer overlaps; Skills view fills full width.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compound Engineering plugin view now renders the dashboard's shared ViewHeader (Sparkles icon + title) so it matches the other main-content views. Expose ViewHeader via the dashboard exports map; resolve it in the plugin via an ambient interop declaration (no host runtime dependency). Tests updated (plugin suite green).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dist-freshness.test.ts reads the plugin's compiled dist/settings.js and
dist/session/orchestrator.js to guard against stale dist (FN-6596), but the
plugin had no pretest build and was missing from ensure-test-artifacts.mjs.
On a fresh CI checkout dist/ does not exist, so the guard threw "dist/ is
missing" — failing the non-blocking Full Suite on every main commit.
Register the plugin's required artifacts in ensure-test-artifacts.mjs and add
a `pretest` hook that builds them, matching the dependency-graph / hermes /
openclaw plugins. Verified locally: with dist/ absent, `pnpm --filter
@fusion-plugin-examples/compound-engineering test` now builds dist via the
pretest and all 192 plugin tests pass (incl. the two dist-freshness cases).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restore the compound-engineering broad lane tests after the timeout could not be reproduced on the stabilized shared test infrastructure.
- Re-enable the compound-engineering sync and work-bridge tests by clearing their Vitest quarantine excludes.
- Remove the stale quarantine ledger entries now that the broad package lane stayed stable under verification.
Files changed:
plugins/fusion-plugin-compound-engineering/vitest.config.ts | 10 ++++------
scripts/lib/test-quarantine.json | 13 +------------
2 files changed, 5 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-6606
Fusion-Task-Lineage: f357c626-c181-44a7-a463-c53644566ca1
Normalize spawned Vitest processes to NODE_ENV=test so React/jsdom lanes do not inherit release-shell production mode. Split the compound-engineering plugin Vitest projects so Node-only setup and teardown only run in Node lanes, and quarantine the remaining broad-lane CE timeout flakes under the deletion ratchet.
Quarantine compound-engineering timeout flakes from the broad test workflow.
- Add the compound-engineering orchestrator and skill-wiring tests to the quarantine ledger.
- Exclude the quarantined tests from the compound-engineering node Vitest project without changing timeouts or retries.
- Document the quarantine requirement next to the Vitest excludes.
Files changed:
.../fusion-plugin-compound-engineering/vitest.config.ts | 15 ++++++++++++++-
scripts/lib/test-quarantine.json | 10 ++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6587
Fusion-Task-Lineage: 5aeb0202-8330-4a93-bdab-675c81b9cb54
The non-blocking Full Suite tier on main was red on shards 2 and 4:
- roadmap-store schema assertion lagged core's SCHEMA_VERSION bump to 117
(landed in FN-6277), so it still expected 116.
- useCeSessions "cancel surfaces a transport error" failed deterministically:
a session with an in-flight status keeps the poll fallback running, and a
successful background list refresh called setError(undefined), wiping the
cancel error before it could be observed. Background refreshes (poll + push)
now leave action errors intact; only user-initiated/initial refreshes clear.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolves the onLoad conflict in the compound-engineering plugin by keeping both
the bundled ce-* persona-def install (this branch) and main's
recoverStaleSessionsForContext call.
Also addresses PR #1672 review feedback:
- executor: sentinel resume now guards on !live.paused (mirrors
runAwaitInputNode) so a still-paused task can't consume a reply and re-enter
the skill early.
- TaskCard: make the Answer-questions button text/title/aria-label fallbacks
consistent ("Answer questions") for label-in-name a11y; update test.
- ce-work: replace the unshipped `skill: ce-worktree` reference with the real
git worktree commands so Option B can't dead-end.
- ce-resolve-pr-feedback: invoke bundled scripts by absolute path via the new
FUSION_CE_SKILLS_DIR env (sessions run with cwd=projectRoot); add the Fusion
await-input sentinel path instead of AskUserQuestion for workflow steps;
normalize whitespace-only review bodies like PR comments.
- plugin: expose FUSION_CE_SKILLS_DIR (installed skills root) to step sessions.
- plan doc: add language to fenced block (markdownlint MD040).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
In a Fusion workflow step (FUSION_WORKFLOW_STEP set), the skills now:
- emit a ===FUSION_AWAIT_INPUT=== block instead of calling AskUserQuestion
into the void (Fusion pauses the task + surfaces it on the card; U6/U7),
and take the assumptions path when FUSION_HEADLESS is set;
- dispatch sub-agents via fn_spawn_agent with systemPromptOverride read
from FUSION_CE_AGENTS_DIR/<persona>.md (U2/U3), falling back to inline
single-agent work when the dir/def is absent.
This is the keystone that makes the U1/U2/U3 plumbing actually used.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Vendor the 43 ce-* persona definitions (from compound-engineering 3.9.4),
add installBundledCeAgents() mirroring the skill installer (pinned,
plugin-local, idempotent, never a global ~/.claude/agents), install them
in onLoad, and expose the install dir to executor/step sessions via an
executorRuntimeEnv hook (FUSION_CE_AGENTS_DIR).
Together with U2's systemPromptOverride this gives the lightweight
subagent path: a CE skill reads a persona def from FUSION_CE_AGENTS_DIR
and passes its body to fn_spawn_agent. Installer test added (19 plugin
tests green).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
U1: workflow-step sessions now carry FUSION_WORKFLOW_STEP=1 (scoped to
the step session, not the main executor) so skills detect autonomous
context and surface questions via await-input instead of a dead blocking
tool.
U8: bundle ce-commit, ce-commit-push-pr, and ce-resolve-pr-feedback
(vendored from compound-engineering 3.9.4) so the CE merge/PR flow has
its skills. Registered in COMPOUND_ENGINEERING_SKILLS; manifest test
updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Use per-invocation Vitest worker roots to keep compound-engineering tests from timing out on stale temp fixtures.
- Allocate a fresh FUSION_TEST_WORKER_ROOT during Vitest global setup and remove it during teardown.
- Preserve per-worker fallback root creation when global setup is not available.
- Clean compound-engineering harness project roots on close and cover the setup invariants with regression tests.
Files changed:
packages/core/src/__test-utils__/vitest-setup.ts | 20 +++++++---
.../core/src/__test-utils__/vitest-teardown.ts | 38 +++++++++++--------
.../src/__tests__/_harness.ts | 7 +++-
.../src/__tests__/setup-invariant.test.ts | 43 ++++++++++++++++++++++
4 files changed, 85 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6282
Fusion-Task-Lineage: 8b842dd0-4f51-44de-b2db-8e8bfa97239c