Stabilize the @fusion/core task-list dist barrel guard without weakening its coverage.
- Load the built dist core barrel once in beforeAll when dist artifacts exist.
- Reuse the cached runtime module across dist export and fn_task_list surface assertions.
- Keep the source barrel and real runtime export path coverage intact while reducing duplicate dynamic import pressure.
Files changed:
.../core/src/__tests__/task-list-format.test.ts | 33 ++++++++++++++--------
1 file changed, 21 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-6591
Fusion-Task-Lineage: 4de45ab8-fdb3-4ed0-bf21-afcc2fb49902
Resolves conflicts in the lazy-loaded heavy-views inventory. main independently
grew the curated list to 22 (adding AppModals lazy modals); this branch added the
Command Center view. Combined count is 23 — updated the AGENTS.md prose/inventory
and the lazy-loaded-views-docs test contract (count + length assertions) to 23,
keeping main's richer "App-level and AppModals" wording.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add regression coverage that exercises fn_task_list through the built @fusion/core dist exports.
- Expand core task-list formatting tests from export checks to a runtime-shaped fn_task_list execution path.
- Add a CLI extension regression test that mocks @fusion/core to the built dist barrel before executing fn_task_list.
- Cover broad and filtered task-list truncation paths with dependency rendering to catch missing clampTaskListText exports.
Files changed:
packages/cli/src/__tests__/extension.test.ts | 82 ++++++++++++++-
.../core/src/__tests__/task-list-format.test.ts | 110 ++++++++++++++++++++-
2 files changed, 190 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6535
Fusion-Task-Lineage: dd405811-5655-406d-92e6-53f0e35ac217
Rescue the same-day core and CLI flaky quarantines by fixing their fixture seams instead of appeasing timeouts.
- Make the core concurrent-write lock helper release synchronously inside its child process so package load cannot delay the transient lock release.
- Close real CLI TaskStore fixtures before removing temp roots and switch mock cleanup to non-hoisted unmocking.
- Remove both test files from package quarantine excludes and clear the quarantine ledger while documenting the rescue pattern.
Files changed:
docs/testing.md | 2 ++
packages/cli/src/__tests__/extension-task-tools.test.ts | 17 +++++++++++++----
packages/cli/vitest.config.ts | 4 +++-
.../core/src/__tests__/store-concurrent-writes.test.ts | 8 +++++++-
packages/core/vitest.config.ts | 4 +++-
scripts/lib/test-quarantine.json | 13 +------------
6 files changed, 29 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-6486
Fusion-Task-Lineage: c90358c4-0549-4c68-8d17-2e2a336433b5
- monitor-trait: atomic incident-level claim (conditional UPDATE) so concurrent
regression ingests can't open duplicate fix tasks; loser absorbs (+ tests)
- register-git-github: attach/detach KnowledgeIndexRefreshService per project
store so task:moved→done refreshes the index for non-primary projects
- agent-logger: make usage-event emission genuinely fail-soft (try/catch +
absorb async rejection) so a throwing emitUsageEvent can't break tool logging
(+ sync-throw and rejected-promise tests)
- db: add composite (kind, ts) index on usage_events backing Command Center
tool analytics; folded into migration 118 (unreleased) — no SCHEMA_VERSION bump
- db.test: assert the six v120 deployments/incidents indexes survive migration
- lazy-loaded-views-docs.test: fix stale "20-view" → "21-view" description
- add FNXC_LOG change-log annotations across the touched package files per AGENTS.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds deployments + incidents tables (db migration 119→120), real MTTR/deploy/
incident aggregation replacing the U7 seam, an auth-gated SSRF-safe deploy/
incident ingestion route, and a monitor trait that auto-opens a single fix task
on a regression signal. Storm guard groups by the U11 Signal groupingKey with a
threshold gate, cooldown absorption, per-window circuit breaker, and self-loop
guard. Also completes the otel test ActivityAnalytics fixture.
Adds knowledge_pages (db migration 118→119) + a deterministic, model-free
keyword index of task/PR history in packages/dashboard/src, incrementally
refreshed on task completion (task:moved→done listener) and queryable via an
auth-gated, project-scoped API. Complements the LLM-extracted insights/memory
surfaces rather than duplicating them.
Follow-ups: no React view yet; PR-history page population attaches via U18.
mapAnalyticsToOtlp maps token/cost/activity aggregates to the OTLP/HTTP JSON
envelope (counters + gauges, model/provider/node/agent attributes); a periodic
dashboard exporter is opt-in via FUSION_OTEL_METRICS_ENDPOINT, https-validated,
header-redacted, backs off on failure, and never blocks startup/shutdown.
Minimal exporter (no SDK dep) — real @opentelemetry SDK is a follow-up.
aggregateSdlcFunnel derives per-stage counts, conversion, completion rate, and
throughput/day from activityLog task:moved transitions, mapping columns to stages
by trait (unknown → Other). Rides additively on the /activity payload; SdlcFunnel
renders it via the U4 Funnel primitive in the Overview Throughput section.
routeModel + conservative v0 allowlist (dependabot/lint → cheap tier) wired
into execution/planning/validation lanes in model-resolution.ts; governance
(isPermitted) and column-agent override are absolute, OFF by default. Routing
decisions (with counterfactual) emit via the U1 usage_events seam.
Adds autoResolveReviewComments project setting (default on) gating the existing
Review-response loop, a single-sourced summarizePrThreadActivity counter, and
fixed/acted thread counts in the dashboard PR summary. Resolution stays
independent of the auto-merge gate (disabled merge still resolves threads).
composeLiveSnapshot (core, U6a) feeds GET /api/command-center/live; register-
command-center-routes exposes tokens/tools/activity/productivity/live as thin
adapters over the U2 aggregators + U3 cost. All endpoints inherit session auth
(401 unauth) and apply getScopedStore (no cross-project leak). Vite proxy verified.
costFor() derives USD from token counts via a hand-maintained provider:model
rate map with pricingAsOf + staleness flag; unknown models report unavailable
rather than guessing. Cost wired additively into token-analytics per-task so it
is correct for any groupBy.
Schema migration 117→118 adds usage_events; events captured via a dedicated
emitUsageEvent seam wired through AgentLogger tool hooks + executor session
context (model/provider/nodeId), not by widening log signatures. meta is
size-capped and carries only non-sensitive descriptors.
Replace the manual FUSION_CLAUDE_ACP env enable with an experimental feature
switch. `experimentalFeatures.claudeCliAcp` is ON by default (off only when
explicitly set false); the engine translates it into the FUSION_CLAUDE_ACP
dispatch the pi-claude-cli provider reads, at registerExtensionProviders time.
- Still fail-closed: with no bridge path published (acp-runtime plugin absent),
the provider falls back to `claude -p`.
- Explicit FUSION_CLAUDE_ACP env always wins (operator / test override).
- New testable helper claude-acp-enable.ts (6/6 tests); flag documented in the
core experimentalFeatures doc.
So with the acp-runtime plugin installed, Claude CLI now routes through the ACP
bridge by default; set experimentalFeatures.claudeCliAcp=false to force `-p`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Refresh stored Claude OAuth credentials before reporting dashboard auth status or resolving model auth so users do not need to repeatedly re-login after access-token expiry.
Coalesce concurrent refresh attempts, prevent stale refreshes from overwriting newer logins, and route CLI dashboard/serve/daemon/onboard auth wiring through the shared refresh-capable storage.
Move observed load-sensitive and slow tests out of the default lanes per the deletion-ratchet policy, keep the quarantine ledger in sync, and preserve corrupt databases when recovery fails during verification.
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>
Add ce-commit-push-pr and ce-resolve-pr-feedback as coding-mode skill
steps before the merge seam. Per KTD-6 the CE steps own commit/push/PR
creation and feedback resolution; Fusion's merge seam still owns the
board-state merge transition, so the two never race the same branch.
Tests assert the new steps, coding mode, preserved merge seam, and
ordering.
NOTE: the precise handoff between ce-commit-push-pr's PR and Fusion's
workflow-owned board merge (Risk-3) needs verification on a running board.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Record stepless built-in workflow defaults so zero-step selections survive task creation.\n\n- Return an explicit workflow selection for built-in workflows that compile to zero steps.\n- Cover both normal and reserved-id task creation for coding and interpreter-deferred stepwise defaults.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/FN-6335-zero-step-workflow-defaults.md | 5 +++++\n packages/core/src/__tests__/builtin-workflows.test.ts | 14 ++++++++++++++\n packages/core/src/store.ts | 4 +++-\n 3 files changed, 22 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6335
Fusion-Task-Lineage: 521ef05d-bef7-4d26-9f6a-592363f522d1
Rescues the database recovery corruption test by reducing its fixture size and removing its quarantine.
- Reduce recovery test fixture rows so sqlite3 .recover is not overfed while still corrupting a B-tree page.
- Re-enable packages/core/src/__tests__/db.test.ts in the core Vitest config.
- Remove the db recovery test entry from the quarantine ledger.
Files changed:
packages/core/src/__tests__/db.test.ts | 5 +++--
packages/core/vitest.config.ts | 1 -
scripts/lib/test-quarantine.json | 5 -----
3 files changed, 3 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6334
Fusion-Task-Lineage: c4555976-fe98-4f25-a1b5-e70bfd991b16