Commit Graph

1524 Commits

Author SHA1 Message Date
gsxdsm
669b106548 FN-6514: restore QuickEntryBox test isolation
Rescues the QuickEntryBox suite by restoring jsdom globals instead of keeping it quarantined.

- Snapshot and restore QuickEntryBox viewport, visibility, matchMedia, and object URL descriptors after each test.
- Add a guard test that proves mutated jsdom globals return to their original descriptors.
- Remove the QuickEntryBox quarantine entries while documenting the rescue pattern.

Files changed:
 docs/testing.md                                    |  2 +
 .../components/__tests__/QuickEntryBox.test.tsx    | 50 ++++++++++++++++++++++
 packages/dashboard/vitest.config.ts                |  7 ++-
 scripts/lib/test-quarantine.json                   |  5 ---
 4 files changed, 55 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6514

Fusion-Task-Lineage: 12f20ad8-19ee-4168-91a9-33193b1ab5f7
2026-06-16 22:13:46 -07:00
gsxdsm
1c3a4df255 FN-6509: show resumable subtask progress
Subtask breakdowns now show live progress immediately and remain resumable after closing.

- Add startup and reconnecting progress states with empty-thinking feedback.
- Preserve generating and editing subtask sessions for background resume instead of canceling on close.
- Cover mobile, desktop, running, awaiting-input, and completed resume flows in modal tests.
- Document resumable subtask generation behavior and add localized strings.

Files changed:
 docs/task-management.md                            |   2 +
 .../app/components/SubtaskBreakdownModal.tsx       |  80 ++++++++---
 .../__tests__/SubtaskBreakdownModal.test.tsx       | 156 ++++++++++++++++++---
 packages/i18n/locales/en/app.json                  |   5 +
 packages/i18n/src/resources.d.ts                   |   5 +
 5 files changed, 209 insertions(+), 39 deletions(-)

Fusion-Task-Id: FN-6509

Fusion-Task-Lineage: 3bc143fa-a00f-42b6-afd4-ba4fb65b4b63
2026-06-16 21:37:32 -07:00
gsxdsm
602fefff19 FN-6498: smooth mobile quick chat viewport tracking
Keep the mobile Quick Chat sheet aligned with visualViewport changes without redundant layout writes.

- Dedupe repeated mobile visualViewport samples before updating sheet CSS variables.
- Reset viewport tracking state and CSS variables on close/unmount to prevent stale reopen sizing.
- Add regression coverage for mobile tracking, reopen behavior, desktop bypass, and missing visualViewport fallback.
- Document the viewport-smoothing pitfall alongside the keyboard board-shift solution.

Files changed:
 .../quick-chat-mobile-keyboard-board-shift.md      |   4 +
 packages/dashboard/app/components/QuickChatFAB.tsx |  25 +++-
 .../app/components/__tests__/QuickChatFAB.test.tsx | 141 +++++++++++++++++++++
 3 files changed, 167 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6498

Fusion-Task-Lineage: 23c17843-778a-4337-aeed-c80793615738
2026-06-16 21:25:39 -07:00
gsxdsm
cc022867be FN-6505: inline chat attachment contents for agents
Chat agents now receive readable attachment content when responding to user prompts.

- Add shared attachment loading and formatting for session and room chat surfaces.
- Inline supported text attachments and forward image attachments through prompt options.
- Cover session and room attachment handling with regression tests and document the behavior.

Files changed:
 .changeset/fuzzy-chat-attachments.md               |   5 +
 docs/dashboard-guide.md                            |   2 +
 .../src/__tests__/chat-attachment-content.test.ts  | 139 ++++++++++++++++++
 .../dashboard/src/__tests__/chat-manager.test.ts   | 123 ++++++++++++++++
 packages/dashboard/src/chat-attachment-content.ts  | 163 +++++++++++++++++++++
 packages/dashboard/src/chat.ts                     |  43 +++++-
 6 files changed, 470 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6505

Fusion-Task-Lineage: 9bc7a65c-2516-42a4-8d3c-2bc53ea1c895
2026-06-16 21:09:20 -07:00
gsxdsm
a89804ec5f FN-6508: expose fallback workflow model lanes
Expose declared fallback model lanes in project Settings while preserving workflow-scoped persistence.

- Load the default workflow definition before rendering Project Models lane controls.\n- Show fallback model dropdowns only when the workflow declares matching provider/model settings.\n- Persist and reset fallback lane edits through the Settings modal primary Save action.\n- Update settings documentation for default-workflow and global fallback model placement.

Files changed:\n docs/settings-reference.md                         |  40 +++---\n .../components/__tests__/SettingsModal.test.tsx    | 135 ++++++++++++++++++++-\n .../settings/sections/ProjectModelsSection.tsx     |  52 +++++++-\n 3 files changed, 204 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6508

Fusion-Task-Lineage: 18dba2f9-658a-4b82-850f-3bbeb70341d3
2026-06-16 20:59:30 -07:00
gsxdsm
a4537167ab FN-6501: render chat question response controls
Render structured assistant question prompts directly in chat surfaces.

- Add parser and formatter support for question tool calls.
- Add reusable question response UI for select, multi-select, text, and confirm prompts.
- Wire regular chat and quick chat to show live and answered question states.
- Cover parsing and chat response behavior with dashboard tests and localized labels.

Files changed:
 .changeset/fn-6501-chat-question-response.md       |   5 +
 docs/dashboard-guide.md                            |   2 +
 .../app/components/ChatQuestionResponse.css        | 194 ++++++++++++++++
 .../app/components/ChatQuestionResponse.tsx        | 247 +++++++++++++++++++++
 packages/dashboard/app/components/ChatView.tsx     |  85 ++++++-
 packages/dashboard/app/components/QuickChatFAB.tsx |  84 ++++++-
 .../__tests__/ChatQuestionResponse.test.tsx        |  52 +++++
 .../app/components/__tests__/ChatView.test.tsx     |  51 +++++
 .../app/components/__tests__/QuickChatFAB.test.tsx |  64 ++++++
 .../utils/__tests__/parseQuestionToolCall.test.ts  |  82 +++++++
 .../dashboard/app/utils/parseQuestionToolCall.ts   | 240 ++++++++++++++++++++
 packages/i18n/locales/en/app.json                  |  10 +
 12 files changed, 1105 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6501
Fusion-Task-Lineage: 1fd4a3aa-b2d7-4157-a196-852fdeda680d
2026-06-16 20:13:13 -07:00
gsxdsm
21c4d3e5ca FN-6495: load chat session skills
Enable dashboard chat sessions to request the same agent and plugin skills used by execution lanes.

- Pass enabled plugin-contributed skills through the dashboard chat plugin runner contract.
- Add skill selection for bound-agent chat, model-only QuickChat, and room responder sessions.
- Cover regular chat, QuickChat, no-metadata fallback, legacy runner, and room responder skill requests.
- Document dashboard chat skill behavior and add a minor changeset for the published CLI package.

Files changed:
 .changeset/fn-6495-chat-skill-selection.md         |   5 +
 docs/agents.md                                     |   1 +
 .../dashboard/src/__tests__/chat-manager.test.ts   | 125 +++++++++++++++++++++
 .../dashboard/src/__tests__/chat.rooms.test.ts     |  45 ++++++++
 packages/dashboard/src/chat.ts                     |  35 ++++++
 packages/dashboard/src/server.ts                   |   5 +
 packages/engine/src/index.ts                       |   6 +
 7 files changed, 222 insertions(+)

Fusion-Task-Id: FN-6495

Fusion-Task-Lineage: 0b8998e2-848c-4c79-b93a-16c0b3c3d8a3
2026-06-16 19:40:56 -07:00
gsxdsm
7852c34a9f FN-6493: update lazy view inventory guard
Keep the lazy-loaded dashboard inventory aligned with AppModals imports.\n\n- Document SettingsModal and WorkflowNodeEditor alongside other lazy-loaded dashboard views.\n- Update the dashboard guide inventory count and modal lazy-load note.\n- Extend the docs guard test to scan AppModals lazy imports and assert the 22-view inventory.\n\nFiles changed:\n AGENTS.md                                          |  6 ++--\n docs/dashboard-guide.md                            |  5 ++-\n .../app/__tests__/lazy-loaded-views-docs.test.ts   | 40 +++++++++++++++++++---\n 3 files changed, 43 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6493

Fusion-Task-Lineage: d2b4de05-fb3c-4965-921e-4f8551e3e96a
2026-06-16 18:22:28 -07:00
gsxdsm
b85d02add0 Merge pull request #1682 from Runfusion/feature/acp-route-a-followups
feat(acp): Route A follow-ups — token usage, opt-in headless auth, status tests + bridge-auth learning
2026-06-17 06:12:06 +08:00
gsxdsm
963362cd43 FN-6490: add mission-goal linking controls
Add bidirectional mission-goal linking in the dashboard with route support and tests.

- Add Goals view controls to list, link, unlink, and navigate linked missions.
- Add Mission detail controls to link active goals and unlink existing goal chips while refreshing summaries.
- Expose goal-to-mission lookup through the goals API and cover route and UI behavior.
- Update mission and dashboard docs for cross-linking flows.

Files changed:
 docs/dashboard-guide.md                            |   4 +-
 docs/missions.md                                   |   8 +-
 packages/dashboard/app/App.tsx                     |   2 +-
 packages/dashboard/app/components/GoalsView.css    |  90 +++++++++-
 packages/dashboard/app/components/GoalsView.tsx    | 191 ++++++++++++++++++++-
 .../dashboard/app/components/MissionManager.css    |  38 +++-
 .../dashboard/app/components/MissionManager.tsx    | 125 +++++++++++++-
 .../app/components/__tests__/GoalsView.test.tsx    | 149 ++++++++++++++--
 .../__tests__/MissionManager.goal-links.test.tsx   | 140 +++++++++++++++
 .../dashboard/src/__tests__/goals-routes.test.ts   |  70 +++++++-
 packages/dashboard/src/goals-routes.ts             |  37 +++-
 11 files changed, 821 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-6490

Fusion-Task-Lineage: aa51e053-04c5-4124-90a0-bc421c8f979f
2026-06-16 15:08:24 -07:00
gsxdsm
222b5cedf3 FN-6489: replace dashboard rgba tokens with color-mix
Replace raw dashboard RGB alpha colors with color-mix token expressions and guard the global CSS surface.

- Converted global theme shadow, state, mission, event, and theme-data alpha colors from raw rgba() to color-mix() expressions.
- Added CSS fixture loading for theme-data.css and a regression test banning raw rgb/rgba outside var() fallbacks across global app CSS.
- Documented the stricter dashboard styling rule for global and theme token CSS.

Files changed:
 docs/dashboard-guide.md                            |   2 +-
 .../__tests__/global-theme-css-no-raw-rgba.test.ts |  68 +++
 packages/dashboard/app/public/theme-data.css       | 573 +++++++++++----------
 packages/dashboard/app/styles.css                  |  49 +-
 packages/dashboard/app/test/cssFixture.ts          |   7 +
 5 files changed, 389 insertions(+), 310 deletions(-)

Fusion-Task-Id: FN-6489

Fusion-Task-Lineage: 7c466971-d15c-4382-a24b-1b32eea71974
2026-06-16 15:08:24 -07:00
gsxdsm
a38752c6bb FN-6486: rescue quarantined flaky tests
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
2026-06-16 15:08:24 -07:00
gsxdsm
0093678ee6 FN-6481: require release triage authorization
Block release-class tasks from automatic triage dispatch unless they come from a user-authored source with explicit authorization.

- Add release intent classification and authorization-marker enforcement before final triage transitions.
- Record activity/log details when release tasks are parked awaiting manual approval.
- Surface the new release-authorization activity in dashboard activity views.
- Cover release gating behavior with engine tests and document the architecture pattern.
- Add a changeset for the published CLI package.

Files changed:
 .changeset/fn-6481-release-triage-authorization.md |   5 +
 .../release-triage-requires-user-authorization.md  |  33 +++++
 packages/core/src/types.ts                         |   2 +
 packages/core/vitest.config.ts                     |   4 +
 packages/dashboard/app/components/ActivityFeed.tsx |   5 +
 .../dashboard/app/components/ActivityLogModal.tsx  |   6 +
 .../__tests__/triage-release-authorization.test.ts | 158 +++++++++++++++++++++
 .../engine/src/triage-release-authorization.ts     | 100 +++++++++++++
 packages/engine/src/triage.ts                      |  51 +++++++
 scripts/lib/test-quarantine.json                   |   8 +-
 10 files changed, 371 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6481
Fusion-Task-Lineage: 0bddb77a-87e5-4fa5-b31a-e773bdae7a29
2026-06-16 15:08:24 -07:00
gsxdsm
601a85b7c9 FN-6474: clarify plugin tarball install docs
Clarifies packaged external plugin proof-point docs so tarballs are extracted before installation.

- Document that fn plugin install accepts built plugin directories or installed package names, not raw .tgz archives.
- Update external plugin proof-point and authoring guidance to extract pnpm pack output and install ./package.
- Add a static regression test guarding the runbook and authoring guide against raw tarball install instructions.

Files changed:
 docs/cli-reference.md                              |  1 +
 docs/plugins/external-authoring.md                 |  2 +-
 docs/plugins/external-proof-point-runbook.md       | 10 +++++-
 .../external-proof-point-runbook-install.test.ts   | 40 ++++++++++++++++++++++
 4 files changed, 51 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6474

Fusion-Task-Lineage: 744d43ff-ed98-43a1-9cb9-e25f96225ab7
2026-06-16 15:08:24 -07:00
gsxdsm
65c49585d1 fix(review): address PR #1682 re-review (reuse concurrency + auth hardening)
- P1 (Greptile): a tool-use break-early turn released the warm connection
  (inUse=false) while conn.prompt() was still pending, letting the next turn
  launch a concurrent prompt on the same ACP session (protocol corruption).
  keepWarm now requires !sawToolCall, so a tool-use turn tears the connection
  down like the non-reuse path; only a clean stop turn (prompt fully resolved
  before finish) keeps it warm. + test.
- buildBridgeEnv: treat a whitespace-only auth var as absent (v.trim()), so a
  blank higher-preference token can't shadow a real lower-preference one and we
  never forward a useless blank token. + test.
- Auth-forwarding tests: clear ambient auth vars in beforeEach so a runner-env
  token can't shadow the case under test (CodeRabbit).
- Doc: clarify the allow-list never carries API keys by default; the single
  FUSION_CLAUDE_ACP_FORWARD_AUTH opt-in (default OFF) is the only exception.

348/348 pass, tsc clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 14:52:58 -07:00
gsxdsm
799e590e3e Merge pull request #1580 from Runfusion/feature/workflow-owned-merge-s07-completion-handoff-merge-work
refactor(workflow): S07 completion handoff creates merge work
2026-06-16 04:30:22 +08:00
gsxdsm
1b5b8708a6 Merge pull request #1579 from Runfusion/feature/workflow-owned-merge-s06-git-merge-capabilities
refactor(workflow): S06 git and merge capability extraction
2026-06-16 04:28:26 +08:00
gsxdsm
ffef0aad6a docs(solutions): ACP bridge 'Not logged in' — thin spawn env + keychain session isolation
Compound learning: the claude-code-cli-acp bridge returned 'Not logged in'
despite a working claude -p, due to (1) a too-thin spawn env (needs XDG_*/USER/
SHELL beyond HOME/PATH) and (2) macOS login-Keychain session isolation for
detached/headless processes. Six headless tasks misdiagnosed it as an upstream
gap. Cross-linked from the ACP runtime integration pattern doc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 13:15:38 -07:00
gsxdsm
2bffad1784 Merge remote-tracking branch 'origin/main' into fix/test-timeout-failures
# Conflicts:
#	scripts/test-changed.mjs
2026-06-15 12:13:40 -07:00
gsxdsm
642780220e chore(acp): apply subagent-review follow-ups (changeset, KTD10 tests, docs)
Two-reviewer pass (security + architecture) on KTD10 + the full Route A
increment: no code defects, no P0, merge-ready as a dormant increment. Applying
the P1 follow-ups:

- Add the feature changeset (@runfusion/fusion minor) — the one convention gap.
- KTD10 tests: fail-closed (bridge not resolved -> env stays unset -> -p) and
  idempotency (second onLoad keeps the first published path).
- Document the two intentional, parallel MCP-forwarding paths (U10 engine-adapter
  vs U11 provider-driver) so nobody double-forwards, and the known
  ACP-path-token-usage=0 residual so U12 doesn't treat it as a bug.

Reviewers confirmed: dormancy invariant holds end-to-end (nothing sets
FUSION_CLAUDE_ACP=1; both flag+path required; -p is the default); OAuth pi path
untouched. 206/206 plugin tests, 333/333 pi-claude-cli tests, typecheck clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:40:06 -07:00
gsxdsm
239bec74c4 docs(acp): record U11 tool-flow verification PASS — enablement gate cleared
Live run: forwarded MCP tools and native Bash both refuse to execute when we
return cancelled to session/request_permission (no TOCTOU). streamViaAcp's
deny-by-default + break-early is verified safe. Env allow-list (incl. XDG/USER)
validated as required for the bridged claude to authenticate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:21:43 -07:00
gsxdsm
03d12b6289 docs(acp): record U11 implementation design (ready to execute)
Reverse-engineered the streamViaCli contract and locked the U11 build plan:
AssistantMessageEventStream shape to match, the kill-switch branch point in
streamSimple, the KTD10 injection seam (pi-claude-cli adds @agentclientprotocol/sdk;
bridge path injected like mcpConfigPath), MCP-server construction reusing
ensureMcpConfig, full-history prompting (R13), ACP->pi event translation
paralleling event-bridge.ts, and live-bridge verification via the U9 harness.

No transport change yet — the live `claude -p` path is untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 05:56:47 -07:00
gsxdsm
079844e1c1 feat(acp): forward MCP servers on session/new (U10) + record U9 GO / R17
Route A unblock + the first Route A code increment.

- U9 verdict recorded (plan OQ1 + docs/acp-contract.md): in an authenticated
  interactive session the pinned claude-code-cli-acp 0.1.1 bridge forwards
  session/new mcpServers to Claude, Claude invokes the forwarded Fusion tool,
  and the call traverses the ACP permission gate (session/request_permission).
  Both security-critical answers resolve positively — overturns the headless
  NOT-GO chain (FN-6466/6467/6473/6476), whose only blocker was running
  detached from the login keychain session.
- R17 (daemon auth) recorded and closed for the supported setup: creds are
  macOS Keychain-only; the user's login-session fn daemon has keychain access
  (the existing claude -p provider authenticates there), so the bridge does too.
- U10: thread an optional mcpServers list through the ACP runtime contract.
  newAcpSession now forwards it (was hardcoded []); AgentRuntimeOptions (engine
  + plugin-local copy) gains the field; defaults to [] to preserve Route B's
  read-only ask posture. Tool calls still route through the U5 permission floor.

Plugin typechecks clean; provider-session tests 12/12 (incl. 2 new forwarding
tests). U11-U13 (provider transport swap, picker/auth, workflow verify) remain.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 05:56:47 -07:00
gsxdsm
bc6dfd386e FN-6478: surface paused workflow graph failures
Surface stranded paused workflow exits as actionable executor failures.

- Treat paused or aborted graph exits as benign only while the live task remains in-progress.
- Preserve terminal/review lifecycle state while recording operator-actionable failure evidence for advanced columns.
- Cover user-paused, pause-aborted, existing-failure, in-progress, in-review, todo, and done column recovery paths.
- Document the workflow lifecycle invariant and add a patch changeset.

Files changed:
 .changeset/fn-6478-paused-workflow-executions.md   |   5 +
 docs/architecture.md                               |   1 +
 .../engine/src/__tests__/executor-recovery.test.ts | 283 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |  30 ++-
 4 files changed, 315 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6478

Fusion-Task-Lineage: 219d8612-6604-4dbc-9a3a-a1c7837419c1
2026-06-15 02:30:41 -07:00
gsxdsm
de8f871b4d FN-6479: index upstream ACP MCP forwarding doc
Index the upstream ACP MCP forwarding sponsorship doc so the docs README and CLI index test keep it discoverable.

- Add the upstream ACP MCP passthrough and permission forwarding sponsorship doc link under Audit Reports.
- Add the upstream doc to the required docs README index coverage.
- Guard that CLI Printing Press docs remain indexed in Audit Reports only, not duplicated under Plugins.

Files changed:
 docs/README.md                                      |  5 +++++
 .../cli/src/__tests__/docs-readme-index.test.ts     | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+)

Fusion-Task-Id: FN-6479

Fusion-Task-Lineage: f23afeba-a989-4552-8857-fe2984df6081
2026-06-15 02:30:41 -07:00
gsxdsm
56d4fd24b3 FN-6476: record ACP auth rerun blockage
Document the authenticated ACP bridge rerun attempt and preserve the Route A blocked verdict.

- Update the ACP contract with FN-6476 readiness proof results showing the pinned bridge still reports an unauthenticated Claude session.
- Keep OQ1 answers unresolved because no forwarded Fusion tool invocation or permission-gate traversal was observed.
- Add FN-6476 status notes to the Claude ACP runtime plan so U9 remains NOT GO without a claude -p fallback.

Files changed:
 docs/acp-contract.md                                      | 11 ++++++++++-
 docs/plans/2026-06-14-001-feat-claude-acp-runtime-plan.md |  3 +++
 2 files changed, 13 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6476

Fusion-Task-Lineage: f37dcc62-9758-47af-bb50-169e902211a5
2026-06-15 02:30:41 -07:00
gsxdsm
fcca1366ef FN-6475: document ACP MCP forwarding sponsorship
Record the upstream sponsorship package for ACP MCP passthrough and permission gating while keeping Route A blocked.\n\n- Add a ready-to-file upstream issue for claude-code-cli-acp MCP passthrough and permission-forwarding support.\n- Link the filed upstream issue from the ACP contract and runtime plan.\n- Preserve the OQ1/U9 NOT GO status until authenticated reruns prove forwarded tool invocation and gating.\n\nFiles changed:\n docs/acp-contract.md                               |   5 +\n .../2026-06-14-001-feat-claude-acp-runtime-plan.md |   3 +\n ...laude-code-cli-acp-mcp-permission-forwarding.md | 121 +++++++++++++++++++++\n 3 files changed, 129 insertions(+)

Fusion-Task-Id: FN-6475

Fusion-Task-Lineage: 3cbd14e3-9388-4cf4-b256-3678459eb926
2026-06-15 02:30:41 -07:00
gsxdsm
1d474a1dff FN-6473: document Route A ACP escalation blockage
Record the authenticated Route A ACP escalation rerun and keep U9 blocked.

- Update the ACP contract OQ1 status to FN-6473 with the observed unauthenticated bridge result.
- Capture the explicit request-permission instrumentation outcome: zero forwarded tool calls and zero permission callbacks.
- Extend the Claude ACP runtime plan with the escalation status and upstream bridge/ACP permission-forwarding requirement.

Files changed:
 docs/acp-contract.md                                      | 13 +++++++++++--
 docs/plans/2026-06-14-001-feat-claude-acp-runtime-plan.md |  3 +++
 2 files changed, 14 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6473

Fusion-Task-Lineage: 2e6ec23b-a9cd-4fd0-b24e-72ee8bb145ac
2026-06-15 02:30:41 -07:00
gsxdsm
830bc7a67c FN-6467: record ACP bridge rerun blocker
Record the FN-6467 U9 rerun outcome so Route A remains gated on authenticated ACP bridge evidence.

- Document the second direct bridge attempt against claude 2.1.177 and claude-code-cli-acp 0.1.1.
- Preserve the accepted 62-tool custom-tools MCP payload details and lockfile integrity evidence.
- Mark forwarded tool invocation and ACP permission-gate traversal as unresolved because the bridge still reports Not logged in.

Files changed:
 docs/acp-contract.md                                      | 15 ++++++++++-----
 docs/plans/2026-06-14-001-feat-claude-acp-runtime-plan.md |  3 +++
 2 files changed, 13 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6467
Fusion-Task-Lineage: fa2c1e16-7822-421b-80cf-e4ab247641a5
2026-06-15 02:30:41 -07:00
gsxdsm
1b1d6f4359 FN-6466: record blocked ACP bridge spike result
Record the real Route A U9 bridge attempt and keep OQ1 at NOT GO.

- Document that claude-code-cli-acp accepted a non-empty Fusion MCP server declaration.
- Capture the unauthenticated claude blocker before forwarded tool invocation or permission telemetry.
- Keep FN-6460 blocked until an authenticated rerun proves tool forwarding and ACP permission traversal.

Files changed:
 docs/acp-contract.md                                      | 13 +++++++++++--
 docs/plans/2026-06-14-001-feat-claude-acp-runtime-plan.md |  3 +++
 2 files changed, 14 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6466

Fusion-Task-Lineage: 0bce3b9f-fbab-4562-9a7b-9d5551335fa4
2026-06-15 02:30:41 -07:00
gsxdsm
41d4704138 FN-6465: document ACP Route A recovery blockers
Record the unrecovered Route A U9 verdict and the design-only U14 confirmation so follow-up work preserves the ACP permission-gate blocker.\n\n- Add an ACP contract open-question entry that marks Route A as NOT GO until real MCP forwarding and ACP permission-gate traversal are proven.\n- Capture the FN-6465 recovery outcome in the Claude ACP runtime plan, including the missing FN-6459 evidence and required rerun criteria.\n- Confirm the internal Route A design mechanisms while keeping implementation blocked on U9.\n\nFiles changed:\n docs/acp-contract.md                               | 24 ++++++++++++++++++++++\n .../2026-06-14-001-feat-claude-acp-runtime-plan.md |  9 ++++++++\n 2 files changed, 33 insertions(+)

Fusion-Task-Id: FN-6465

Fusion-Task-Lineage: d4762440-cbb9-4206-b4b2-be578eba30dd
2026-06-15 02:30:41 -07:00
gsxdsm
863ebfaa96 FN-6464: add CLI session relaunch route
Enable exhausted CLI sessions to request a fresh task-backed relaunch from the dashboard.

- Add an authenticated project-scoped relaunch endpoint for task-bound CLI sessions.\n- Wire relaunch intent through the dashboard server to clear resume linkage and re-enqueue the owning task.\n- Enable the session banner Relaunch fresh action and cover API, UI, transport, and runtime wiring behavior.\n- Document the CLI session action contract and add a published package changeset.\n\nFiles changed:\n .changeset/fn-6464-cli-relaunch-route.md           |  5 ++
 docs/agents.md                                     |  4 +
 packages/cli/src/commands/dashboard.ts             |  2 +
 packages/dashboard/app/App.tsx                     | 20 +++--
 .../app/__tests__/app-cli-action-wiring.test.tsx   | 31 +++++++-
 packages/dashboard/app/api/legacy.ts               |  7 ++
 .../__tests__/SessionNotificationBanner.test.tsx   | 52 ++++++++++---
 .../src/__tests__/cli-agent-runtime-wiring.test.ts | 49 +++++++++++-
 .../src/__tests__/cli-session-transport.test.ts    | 36 +++++++++
 .../src/__tests__/cli-sessions-routes.test.ts      | 50 +++++++++++-
 packages/dashboard/src/cli-session-transport.ts    | 38 +++++++++
 packages/dashboard/src/index.ts                    |  3 +-
 packages/dashboard/src/routes/cli-sessions.ts      | 26 ++++++-
 packages/dashboard/src/server.ts                   | 89 ++++++++++++++++++++++
 14 files changed, 390 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-6464

Fusion-Task-Lineage: f1ce171b-84a7-4893-9288-e1c8f01c3305
2026-06-15 02:30:41 -07:00
gsxdsm
a9815fb1ff FN-6457: add ACP ask runner and bundled Claude bridge setup
Route ACP-backed planning and validation through a read-only ask-once runner with a pinned Claude bridge foundation.

- Add askAcpOnce for single-turn ACP sessions with timeout handling, JSON recovery, clean stop validation, and disposal.
- Refactor validation seams to use ACP runtime prompts and require structured pass verdicts.
- Resolve the Claude ACP bridge from the plugin bundle and add setup checks for identity, environment, probing, and auth readiness.
- Document the ACP Route B plan and update tests for validator, session, runtime, and plugin setup behavior.

Files changed:
 CONCEPTS.md                                        |   6 +
 docs/acp-contract.md                               |  36 ++
 .../2026-06-14-001-feat-claude-acp-runtime-plan.md | 465 +++++++++++++++++++++
 .../engine/src/__tests__/cli-agent-ask.test.ts     | 104 +++++
 .../src/__tests__/cli-agent-validator.test.ts      | 137 +++---
 .../src/__tests__/interactive-ai-session.test.ts   |  96 +++--
 packages/engine/src/agent-runtime.ts               |   6 +-
 packages/engine/src/cli-agent-ask.ts               | 120 ++++++
 packages/engine/src/cli-agent-validator.ts         |  65 ++-
 .../cli-agent/__tests__/one-shot-session.test.ts   |  16 +-
 packages/engine/src/cli-agent/one-shot-session.ts  |  17 +-
 packages/engine/src/index.ts                       |   8 +-
 packages/engine/src/interactive-ai-session.ts      |  33 +-
 plugins/fusion-plugin-acp-runtime/AGENTS.md        |  14 +
 plugins/fusion-plugin-acp-runtime/CHANGELOG.md     |   6 +
 plugins/fusion-plugin-acp-runtime/README.md        |  13 +-
 plugins/fusion-plugin-acp-runtime/package.json     |   3 +-
 .../src/__tests__/index.test.ts                    |  51 ++-
 .../src/__tests__/process-manager.test.ts          |  32 +-
 .../src/__tests__/runtime-adapter.test.ts          |   4 +-
 .../src/__tests__/setup.test.ts                    |  71 ++++
 plugins/fusion-plugin-acp-runtime/src/cli-spawn.ts |  95 ++++-
 plugins/fusion-plugin-acp-runtime/src/index.ts     |  16 +-
 .../src/process-manager.ts                         |  26 +-
 .../src/runtime-adapter.ts                         |  11 +-
 plugins/fusion-plugin-acp-runtime/src/setup.ts     | 104 +++++
 plugins/fusion-plugin-acp-runtime/src/types.ts     |   6 +-
 pnpm-lock.yaml                                     | 139 ++++--
 28 files changed, 1502 insertions(+), 198 deletions(-)

Fusion-Task-Id: FN-6457
Fusion-Task-Lineage: a3364ed7-cb28-4a2b-b898-6ccd0d95fb92
2026-06-15 02:30:41 -07:00
gsxdsm
fee0178b4f FN-6461: block incomplete no-commits no-op finalization
Add a shared no-op finalize guard so no-commits tasks with mostly incomplete steps return to todo instead of silently completing.

- Add core step-evidence evaluation for no-commits no-op finalization.
- Apply the guard across AI empty merge, early empty-own-diff, legacy no-op classifier, direct no-op, and self-healing finalize lanes.
- Emit run-audit/log evidence and preserve progress when demoting blocked tasks.
- Cover guard behavior with core, merger, AI merge, real-git, and self-healing tests.
- Document the finalize integrity invariant and add a patch changeset.

Files changed:
 .changeset/fn-6461-no-commits-finalize-guard.md    |   5 +
 docs/architecture.md                               |   2 +
 .../__tests__/no-commits-finalize-guard.test.ts    |  58 +++++++
 packages/core/src/index.ts                         |   2 +
 packages/core/src/no-commits-finalize-guard.ts     |  42 +++++
 packages/engine/src/__tests__/merger-ai.test.ts    |  59 +++++++
 .../merger-finalize-unproven.real-git.test.ts      | 176 +++++++++++++++++++++
 packages/engine/src/__tests__/self-healing.test.ts | 125 +++++++++++++++
 packages/engine/src/merger-ai.ts                   |  45 ++++++
 packages/engine/src/merger.ts                      | 130 +++++++++++++++
 packages/engine/src/run-audit.ts                   |   6 +
 packages/engine/src/self-healing.ts                |  41 ++++-
 12 files changed, 689 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6461
Fusion-Task-Lineage: 36647768-42da-414a-9304-d8e0ed61b99c
2026-06-15 02:29:08 -07:00
gsxdsm
da44392fea FN-6462: document OAuth refresh behavior
Document Claude OAuth refresh behavior across user-facing docs.

- Explain that auth status polling can refresh expired Anthropic OAuth credentials automatically.
- Clarify when OAuth expiry banners and notifications remain visible after refresh attempts.
- Update onboarding guidance to set expectations for Claude re-login frequency.

Files changed:
 docs/dashboard-guide.md    |  6 +++++-
 docs/getting-started.md    |  2 +-
 docs/settings-reference.md | 10 ++++++++--
 3 files changed, 14 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6462

Fusion-Task-Lineage: 06a73655-483d-4379-aeba-ac6bf9bb8df9
2026-06-15 02:29:08 -07:00
gsxdsm
f7635faf37 FN-6452: backfill plugin proof-point evidence
Document the restored FN-6437 proof-point results in the external plugin runbook.

- Replace the pending-verification placeholder with the recorded NOT MET verdict for @runfusion/fusion@0.43.0.
- Add package, integrity, environment, command, scaffold, and TypeScript failure evidence from the restored report.
- Preserve explicit gaps for list/enable proof and follow-up checks that were blocked by the released scaffold failure.

Files changed:
 docs/plugins/external-proof-point-runbook.md | 132 +++++++++++++++++++++++++--
 1 file changed, 124 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6452

Fusion-Task-Lineage: 14d3b848-59cd-43bb-b725-6586182906ee
2026-06-14 15:29:35 -07:00
gsxdsm
fa71525850 FN-6438: add external plugin proof-point runbook
Add a durable proof-point runbook for validating external plugins against released Fusion CLI builds.

- Document release selection, npm integrity capture, scaffold/build/test/install/enable validation, and pass/fail criteria for external plugin proof points.
- Link the runbook from the docs index so it remains discoverable with other plugin authoring docs.
- Extend the docs README index test to require the new proof-point runbook entry.

Files changed:
 docs/README.md                                     |   1 +
 docs/plugins/external-proof-point-runbook.md       | 211 +++++++++++++++++++++
 .../cli/src/__tests__/docs-readme-index.test.ts    |   1 +
 3 files changed, 213 insertions(+)

Fusion-Task-Id: FN-6438

Fusion-Task-Lineage: 5c768d7e-4465-42ac-9535-f16dc42ab6d0
2026-06-14 15:29:35 -07:00
gsxdsm
12efd3fd3f FN-6445: reject quality skip-list overlaps
Prevent dashboard curated skip-list entries from masking tests already covered by quality projects.

- Add validation that flags skip-list files included by quality lanes.
- Cover overlap, empty-reason overlap, and genuine orphan cases in inventory tests.
- Document that skip-lists are only for genuinely non-executed dashboard tests.

Files changed:
 docs/testing.md                                 |  1 +
 scripts/__tests__/check-test-inventory.test.mjs | 29 ++++++++++++++++++++++---
 scripts/check-test-inventory.mjs                |  9 ++++++++
 3 files changed, 36 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6445

Fusion-Task-Lineage: 1741f684-8dfc-41fc-8f30-baa3700ac11b
2026-06-14 15:29:35 -07:00
gsxdsm
c9680b5767 FN-6448: document Quick Chat mobile reliability
Document Quick Chat's mobile send and stop-button reliability expectations.\n\n- Note the mobile delivery watchdog for stranded queued messages.\n- Describe duplicate pointer/touch send protection and immediate stop handling.\n- Document the streaming stop control's square touch-target sizing.\n\nFiles changed:\n docs/dashboard-guide.md | 3 +++\n 1 file changed, 3 insertions(+)

Fusion-Task-Id: FN-6448

Fusion-Task-Lineage: e5d4e5b5-05ba-47bc-9b64-0d641b8d75a8
2026-06-14 15:29:35 -07:00
gsxdsm
4f7b3ac78f FN-6439: clear stale near-duplicate flags
Clear near-duplicate decisions when their canonical task is no longer active.

- Add a shared canonical activity helper for near-duplicate detection.
- Clear stale persisted near-duplicate metadata when canonical tasks are done, archived, or deleted.
- Prevent triage and dashboard surfaces from presenting duplicate decisions for inactive canonicals.
- Cover stale-flag cleanup and hidden dashboard affordances with regression tests.

Files changed:
 docs/task-management.md                            |   4 +-
 .../near-duplicate-stale-flag-clear.test.ts        | 105 +++++++++++++++++++++
 packages/core/src/__tests__/near-duplicate.test.ts |  19 +++-
 packages/core/src/index.ts                         |   2 +
 packages/core/src/near-duplicate-canonical.ts      |  25 +++++
 packages/core/src/near-duplicate.ts                |   3 +
 packages/core/src/store.ts                         | 102 +++++++++++++++++++-
 packages/dashboard/app/App.tsx                     |   7 +-
 packages/dashboard/app/components/Column.tsx       |  10 ++
 packages/dashboard/app/components/TaskCard.tsx     |  12 ++-
 .../dashboard/app/components/TaskDetailModal.tsx   |  12 ++-
 packages/dashboard/app/components/WorktreeGroup.tsx     |  30 +++++-
 .../app/components/__tests__/TaskCard.test.tsx     |  28 ++++++
 .../__tests__/TaskDetailModal.rendering.test.tsx   |  26 +++++
 .../near-duplicate-intake.test.ts                  |  24 +++++
 packages/engine/src/triage.ts                      |  10 ++
 16 files changed, 411 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6439

Fusion-Task-Lineage: e57b80e8-36aa-4b96-ad13-53b5a431477d
2026-06-14 15:29:35 -07:00
gsxdsm
0b047d4fc8 FN-6440: replace dashboard skip-list placeholders
Dashboard curated-gate skip-list entries now point to actionable tracking work.

- Replace placeholder FN-TBD references with concrete Fusion task IDs grouped by affected dashboard area.
- Document the requirement that skip-list reasons cite real tracking tasks unless entries are removed after rescue.
- Preserve the standalone build-output exception while making the remaining skip-list ownership actionable.

Files changed:
 docs/testing.md                             |  1 +
 scripts/lib/dashboard-curated-skiplist.json | 66 ++++++++++++++---------------
 2 files changed, 34 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-6440
Fusion-Task-Lineage: abf1cef2-8199-4746-b8ec-8b5487eb1ecc
2026-06-14 15:29:35 -07:00
gsxdsm
1f660f3e8a FN-6434: block Vitest timeout appeasement
Add a fast guard that rejects Vitest timeout bumps in tracked test files.

- Add a test-timeout appeasement scanner with a temporary allowlist for legacy exemptions.
- Run the scanner in pretest, pretest:full, and test:gate so merge gates catch timeout bumps.
- Cover the scanner behavior with node:test cases and document the policy/remediation path.

Files changed:
 docs/testing.md                                    |   6 ++
 package.json                                       |   6 +-
 .../check-no-test-timeout-appeasement.test.mjs     |  49 +++++++++
 scripts/check-no-test-timeout-appeasement.mjs      | 119 +++++++++++++++++++++
 .../lib/test-timeout-appeasement-allowlist.json    |  10 ++
 5 files changed, 187 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6434

Fusion-Task-Lineage: deb46a27-b0c9-4644-b8bb-34ce98e7acde
2026-06-14 15:29:35 -07:00
gsxdsm
93b2288d37 FN-6433: rescue non-CLI quarantined tests
Rescue and ratchet non-CLI quarantine state across engine, core, and dashboard suites.

- Empty the core, dashboard, and engine quarantine exclude arrays after proving rescued suites run under package load.
- Replace broad AI-merge active-session registry cleanup with path-scoped unregistering in engine tests.
- Delete the duplicate soft-delete blocker residue suite and clear the quarantine ledger.
- Document the non-CLI quarantine sweep pattern for future rescues.

Files changed:
 docs/testing.md                                    |   2 +
 packages/core/vitest.config.ts                     |  10 +-
 packages/dashboard/vitest.config.ts                |  12 +-
 .../merger-ai-cleanup-active-session.test.ts       |  20 +++-
 .../engine/src/__tests__/merger-ai-cleanup.test.ts |   5 +-
 .../soft-delete-blocker-residue.test.ts            | 128 ---------------------
 packages/engine/vitest.config.ts                   |  12 +-
 scripts/lib/test-quarantine.json                   |  65 +----------
 8 files changed, 40 insertions(+), 214 deletions(-)

Fusion-Task-Id: FN-6433

Fusion-Task-Lineage: 18c37475-e6e1-4358-9350-eca65cf53b68
2026-06-14 15:29:35 -07:00
gsxdsm
59f2596c61 FN-6435: add plugin scaffold state
Ensure generated plugin scaffolds include the FusionPlugin state required by the SDK contract.

- Add state: "installed" to workspace and standalone plugin scaffold outputs.
- Cover scaffold output with tests and a compile-time FusionPlugin fixture.
- Document the state field in plugin authoring guidance and add a patch changeset.

Files changed:
 .changeset/FN-6435-plugin-scaffold-state.md        |  9 +++++++
 docs/PLUGIN_AUTHORING.md                           |  2 ++
 packages/cli/src/__tests__/plugin-scaffold.test.ts | 22 ++++++++++++++--
 packages/cli/src/commands/plugin-scaffold.ts       |  5 ++++
 .../type-guards/plugin-scaffold-fusion-plugin.ts   | 30 ++++++++++++++++++++++
 5 files changed, 66 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6435

Fusion-Task-Lineage: 8c7e2f5d-9dd4-4058-aef9-11d6ff0ba5e0
2026-06-14 15:29:35 -07:00
gsxdsm
2fc6d4d667 FN-6430: rescue CLI quarantine tests
Rescue the quarantined CLI suites by fixing shared test isolation instead of extending timeouts.

- Remove rescued CLI files from the quarantine ledger and Vitest exclude list while preserving an empty rescue ledger comment.
- Tighten Vitest HOME isolation to reject inherited worker homes and sweep legacy top-level fn-test-home roots with bounded cleanup.
- Reset affected CLI fixtures, close research stores, and narrow the slow mission store seam so rescued tests run on default timeouts.
- Document the CLI shared-fixture rescue pattern for future quarantine recoveries.

Files changed:
 docs/testing.md                                    |   2 +
 .../cli/src/__tests__/extension-task-tools.test.ts |   7 +-
 packages/cli/src/__tests__/extension.test.ts       | 117 +++++++++----------
 .../cli/src/commands/__tests__/mission.test.ts     |  16 ++-
 packages/cli/src/commands/__tests__/plugin.test.ts |   5 +
 packages/cli/vitest.config.ts                      |  52 ++-------
 packages/core/src/__test-utils__/vitest-setup.ts   |  25 ++++-
 .../core/src/__test-utils__/vitest-teardown.ts     |  28 ++++-
 .../vitest-teardown-worker-root-cleanup.test.ts    |  15 +++
 scripts/lib/test-quarantine.json                   | 124 +--------------------
 10 files changed, 157 insertions(+), 234 deletions(-)

Fusion-Task-Id: FN-6430

Fusion-Task-Lineage: 943b73b4-5f92-4703-8e93-0ae3207eb63c
2026-06-14 15:29:35 -07:00
gsxdsm
b1ba87e599 FN-6414: preserve built-in Z.ai models after extensions
Keep GLM-5.2 visible when user Z.ai extensions replace the provider registration.

- Add shared helpers to clone and register the built-in Z.ai provider safely.
- Re-merge missing built-in Z.ai models after extension provider registration in daemon, serve, dashboard, and pi flows.
- Cover provider replacement behavior in core and dashboard model route tests, and document the extension-preserving behavior.

Files changed:
 .changeset/FN-6414-glm-5-2-visible.md              |  5 ++
 docs/settings-reference.md                         |  2 +-
 packages/cli/src/commands/daemon.ts                | 12 +--
 packages/cli/src/commands/dashboard.ts             | 12 +--
 packages/cli/src/commands/serve.ts                 | 12 +--
 packages/core/src/__tests__/zai-provider.test.ts   | 33 +++++++-
 packages/core/src/index.ts                         |  7 +-
 packages/core/src/zai-provider.ts                  | 93 +++++++++++++++++++++
 ...register-model-routes-zai-real-registry.test.ts | 97 ++++++++++++++++++++++
 packages/engine/src/pi.ts                          | 12 +--
 10 files changed, 250 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-6414

Fusion-Task-Lineage: f0990da2-968d-4782-8c00-fbc350d6954f
2026-06-13 21:17:20 -07:00
gsxdsm
7b839069b5 FN-6420: run dependency sync in AI merge worktrees
Run configured or inferred dependency installs before AI merge verification uses the clean-room worktree.

- Add shared dependency-sync helpers with install marker caching for inferred lockfile installs.
- Run dependency sync during AI clean-room merges and audit/log the command, skip reason, and duration.
- Reuse the helper from merger paths while documenting the new behavior and covering install success/failure cases.

Files changed:
 .changeset/fn-6420-ai-merge-dependency-sync.md     |   5 +
 docs/architecture.md                               |   2 +-
 docs/settings-reference.md                         |   2 +-
 .../src/__tests__/executor-step-session.test.ts    |   5 +-
 .../merger-ai-dependency-install.slow.test.ts      | 269 +++++++++++++++++++++
 packages/engine/src/merge-dependency-sync.ts       | 144 +++++++++++
 packages/engine/src/merger-ai.ts                   |  31 +++
 packages/engine/src/merger.ts                      | 120 +++------
 packages/engine/src/run-audit.ts                   |   1 +
 9 files changed, 484 insertions(+), 95 deletions(-)

Fusion-Task-Id: FN-6420

Fusion-Task-Lineage: 49353cb6-4953-4670-b620-a90331f048dc
2026-06-13 21:09:12 -07:00
gsxdsm
6bb120525d FN-6424: scope terminal symbols font glyph ranges
Prevent the terminal symbols font from corrupting ASCII cell measurement on mobile.\n\n- Add unicode-range scoping to the Fusion terminal Nerd Font symbols face.\n- Cover the CSS contract so symbols ranges include Nerd Font blocks and exclude printable ASCII.\n- Document the xterm font-loading regression and required verification path.\n\nFiles changed:\n .../xterm-symbols-nerd-font-unicode-range.md       | 63 ++++++++++++++++++++++\n .../dashboard/app/__tests__/terminal-input.test.ts | 49 +++++++++++++++++\n .../dashboard/app/components/TerminalModal.css     |  5 ++\n 3 files changed, 117 insertions(+)

Fusion-Task-Id: FN-6424

Fusion-Task-Lineage: 7350c926-1d51-474b-bfc3-a17f922b9322
2026-06-13 20:46:54 -07:00
gsxdsm
b898c3d1db FN-6419: keep task metadata inline
Keep task detail metadata in a compact wrapping row across viewport sizes.

- Make the detail metadata container a wrapping flex row with aligned controls, provenance, PR context, and timestamps.
- Document the one-row metadata behavior in the dashboard guide.
- Add rendering and responsive CSS regression coverage for direct inline metadata children and mobile row behavior.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../dashboard/app/components/TaskDetailModal.css   | 21 +++++++--
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 53 ++++++++++++++++++++++
 ...etailModal.responsive-and-dependencies.test.tsx | 10 ++++
 4 files changed, 81 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6419

Fusion-Task-Lineage: 925c2f0d-8665-430f-8e4e-a00d80704e8d
2026-06-13 20:33:44 -07:00
gsxdsm
417183da9f FN-6415: send task chat on Enter
Enable the task-detail Chat composer to submit messages with standard Enter behavior.

- Submit non-empty task chat drafts on plain Enter while preserving Shift+Enter newline entry and IME composition safety.
- Keep Cmd/Ctrl+Enter as a supported send path through the same handler.
- Document the composer keyboard shortcuts and add dashboard tests for steering, refinement, newline, shortcut, and composition behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/tiny-tasks-chat-enter.md                |   5 +
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/TaskChatTab.tsx  |  13 ++-
 .../app/components/__tests__/TaskChatTab.test.tsx  | 120 +++++++++++++++++++++
 4 files changed, 136 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-6415

Fusion-Task-Lineage: 7d200bf6-5130-4fb8-b59c-66bccffe4265
2026-06-13 19:32:27 -07:00