Store agent logs in per-task JSONL files instead of the legacy SQLite table. - add a file-backed agent log store with JSONL append/read/prune helpers and task-scoped source refs - migrate legacy SQLite agentLogEntries data into task files, rewrite goal citation references, and preserve soft-deleted logs for forensics - update task store, settings, docs, dashboard route coverage, and add regression tests for migration, retention, and log access Files changed: .changeset/fn-5911-agent-log-jsonl.md | 5 + AGENTS.md | 2 +- docs/diagnostics.md | 2 +- docs/settings-reference.md | 2 + docs/soft-delete-verification-matrix.md | 7 +- docs/storage.md | 8 +- .../src/__tests__/agent-log-file-store.test.ts | 123 ++++++ .../core/src/__tests__/agent-log-migration.test.ts | 186 +++++++++ .../core/src/__tests__/agent-log-retention.test.ts | 208 ++++++++++ packages/core/src/__tests__/db-migrate.test.ts | 14 +- packages/core/src/__tests__/db.test.ts | 39 +- .../src/__tests__/goal-citations-store.test.ts | 38 +- packages/core/src/__tests__/goals-schema.test.ts | 2 +- packages/core/src/__tests__/insight-store.test.ts | 10 +- .../src/__tests__/merge-request-record.test.ts | 2 +- packages/core/src/__tests__/mission-store.test.ts | 2 +- packages/core/src/__tests__/run-audit.test.ts | 2 +- packages/core/src/__tests__/secrets-schema.test.ts | 6 +- .../src/__tests__/soft-delete-agent-logs.test.ts | 71 ++-- .../src/__tests__/store-agent-log-file.test.ts | 91 +++++ .../core/src/__tests__/store-merge-queue.test.ts | 2 +- packages/core/src/__tests__/store-test-helpers.ts | 43 +- packages/core/src/__tests__/store-upsert.test.ts | 37 +- packages/core/src/__tests__/task-documents.test.ts | 2 +- packages/core/src/agent-log-constants.ts | 25 ++ packages/core/src/agent-log-file-store.ts | 267 ++++++++++++ packages/core/src/db.ts | 51 ++- packages/core/src/settings-schema.ts | 1 + packages/core/src/store.ts | 453 ++++++++++++--------- packages/core/src/types.ts | 10 +- .../__tests__/agent-log-routes.integration.test.ts | 48 +++ .../src/__tests__/evaluator-evidence.test.ts | 47 ++- packages/engine/src/self-healing.ts | 12 + .../src/store/__tests__/roadmap-store.test.ts | 4 +- 34 files changed, 1477 insertions(+), 345 deletions(-) Fusion-Task-Id: FN-5911 Fusion-Task-Lineage: 07c42f3a-87cf-4558-8f01-ac8460b5558b
fusion-plugin-roadmap
@fusion-plugin-examples/roadmap is the workspace package for the bundled fusion-plugin-roadmap plugin.
Plugin identity
- Manifest id:
fusion-plugin-roadmap - Route namespace:
/api/plugins/fusion-plugin-roadmap/* - Dashboard view id:
plugin:fusion-plugin-roadmap:roadmaps
Package layout
manifest.json— plugin metadata and dashboard view declarationsrc/index.ts— plugin definition (onSchemaInit, routes, dashboard view metadata)src/roadmap-schema.ts— canonical roadmap DDL used byhooks.onSchemaInitsrc/server/index.ts— backend server exportssrc/dashboard-view.tsx— dashboard view entry export for host registrationsrc/dashboard/RoadmapsView.tsx— plugin-owned roadmap planner pagesrc/dashboard/useRoadmaps.ts— plugin-owned roadmap CRUD/reorder/suggestions/handoff hooksrc/dashboard/RoadmapsView.css— plugin-owned roadmap stylessrc/dashboard/api.ts— plugin-local client for/api/plugins/fusion-plugin-roadmap/*src/roadmap-types.ts+src/store/*— roadmap domain types/store
Exported surfaces
- Root export: plugin default + roadmap domain helpers/types
./server: roadmap route + AI suggestion service exports./dashboard-view: Roadmaps dashboard view export for host registry wiring
Regression test ownership
Roadmap behavior regression tests live in this plugin package and should stay here (not in @fusion/core or @fusion/dashboard):
src/store/__tests__/roadmap-store.test.tssrc/store/__tests__/roadmap-ordering.test.tssrc/store/__tests__/roadmap-handoff.test.tssrc/__tests__/index.test.ts(plugin contract:hooks.onSchemaInit, dashboard view metadata registration)src/__tests__/roadmap-routes.test.tssrc/__tests__/roadmap-suggestions.test.ts(AI suggestion flow uses injectedPluginContext.createAiSession()and session lifecycle handling)src/__tests__/api-client.test.tssrc/dashboard/__tests__/useRoadmaps.test.tssrc/dashboard/__tests__/RoadmapsView.test.tsx
Prefer canonical package exports in tests:
- plugin/server surface:
@fusion-plugin-examples/roadmapor@fusion-plugin-examples/roadmap/server - dashboard view surface:
@fusion-plugin-examples/roadmap/dashboard-view
Use deep source imports only when no package export exists for the target module.
Host vs plugin capability boundaries
Plugin-owned responsibilities:
- Define roadmap schema DDL in
src/roadmap-schema.tsand register it viahooks.onSchemaInitinsrc/index.ts. - Implement roadmap AI suggestion behavior through the injected
PluginContext.createAiSession()seam. - Declare plugin dashboard view metadata (
dashboardViews) and export the real view entrypoint (./dashboard-view).
Host-owned responsibilities:
- Execute plugin schema hooks during DB startup and expose resulting tables/indexes to plugin routes.
- Inject
createAiSession()into plugin runtime/route context. - Discover plugin dashboard views via
/api/plugins/dashboard-viewsand resolve plugin view IDs (for roadmap:plugin:fusion-plugin-roadmap:roadmaps) through the host view registry.
Notes
Roadmap tables are plugin-owned and created via hooks.onSchemaInit in src/index.ts, which delegates to src/roadmap-schema.ts. Core database bootstrap no longer creates roadmap tables/indexes.
Roadmap AI suggestion generation is plugin-owned (src/roadmap-suggestions.ts / src/roadmap-routes.ts) and uses PluginContext.createAiSession() when available. The plugin must not import @fusion/engine directly for suggestion generation.
The plugin keeps a single canonical dashboard entrypoint (./dashboard-view) and accepts host-supplied dashboard context (projectId, optional addToast). Do not deep-import dashboard internals from this plugin.