Commit Graph

10373 Commits

Author SHA1 Message Date
gsxdsm
0cd2ae1032 FN-6314: allow chat steering during review sessions
Task Chat can now steer active assigned sessions while tasks are being reviewed or merged.

- Permit composer steering for in-review reviewing, merging, merging-fix, and fixing statuses when an agent is assigned or checked out.
- Keep paused, user-paused, unassigned, todo, and done tasks disabled with clearer active-session messaging.
- Cover in-review steering and disabled-session states in TaskChatTab tests and update dashboard documentation.

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/TaskChatTab.tsx  | 13 +++--
 .../app/components/__tests__/TaskChatTab.test.tsx  | 61 ++++++++++++++++++++--
 3 files changed, 67 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6314

Fusion-Task-Lineage: 42c0f4f7-58f5-4e0c-837f-9f4b7c497fa3
2026-06-12 16:10:02 -07:00
Phil Larson
285f238e92 fix(FN-424): keep audit logging non-blocking 2026-06-12 16:08:00 -07:00
Phil Larson
f331419867 fix(FN-424): simplify prompt scope parsing 2026-06-12 15:59:58 -07:00
Phil Larson
e6eef1a925 fix(dashboard): harden insight extraction response handling 2026-06-12 15:58:20 -07:00
Phil Larson
8541db3185 fix(engine): normalize dashboard research providers 2026-06-12 15:57:12 -07:00
Phil Larson
8a4cc12d67 fix(dashboard): map merge workflow nodes in editor 2026-06-12 15:57:12 -07:00
Phil Larson
151277ac4c fix(dashboard): read insight extraction response from session state 2026-06-12 15:57:05 -07:00
Phil Larson
c6bcbe26a2 fix(FN-352): address no-commit review feedback 2026-06-12 15:54:47 -07:00
Phil Larson
3a729f53a9 fix(FN-352): allow no-commit coordination completion 2026-06-12 15:51:50 -07:00
Phil Larson
834ea3c227 fix(FN-343): address follow-up review findings 2026-06-12 15:51:50 -07:00
Phil Larson
16d71e6773 fix(FN-343): address PR review feedback 2026-06-12 15:51:50 -07:00
Phil Larson
2c8e9c6439 fix(dashboard): map merge workflow nodes in editor 2026-06-12 15:51:50 -07:00
Phil Larson
e35f3dd2b8 feat(FN-343): complete Step 5 — document cleanup diagnostics and changeset
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:51:45 -07:00
Phil Larson
92c5503f88 test(FN-343): cover merger temp cleanup visibility
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:51:45 -07:00
Phil Larson
3cfc3972a5 fix(FN-343): classify pruned temp merge worktree removals
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:51:45 -07:00
Phil Larson
21afa84b2b test(FN-343): add regression for temp cleanup classification
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:51:40 -07:00
Phil Larson
02a85818c1 fix(FN-343): address follow-up review findings 2026-06-12 15:51:15 -07:00
Phil Larson
2ac9968ea5 fix(FN-343): address PR review feedback 2026-06-12 15:51:15 -07:00
Phil Larson
271c0be231 fix(dashboard): map merge workflow nodes in editor 2026-06-12 15:51:14 -07:00
Phil Larson
4f803b8625 feat(FN-343): complete Step 5 — document cleanup diagnostics and changeset
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:50:53 -07:00
Phil Larson
14cc9d82d1 test(FN-343): cover merger temp cleanup visibility
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:50:53 -07:00
Phil Larson
b094e0c765 fix(FN-343): classify pruned temp merge worktree removals
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:50:53 -07:00
Phil Larson
af830ac770 test(FN-343): add regression for temp cleanup classification
Fusion-Task-Id: FN-343

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:45:16 -07:00
Phil Larson
e9b48bd50c fix(FN-424): address no-commit review edge cases 2026-06-12 15:45:04 -07:00
gsxdsm
480e55ffd8 FN-6311: fix localized next-heartbeat fallbacks
Fix Active Agents next-heartbeat localization so non-English UI falls back to interpolated elapsed text instead of raw placeholders.

- Clear stale non-English nextHeartbeat strings that referenced the obsolete {{time}} placeholder.
- Add regression coverage across supported non-English app catalogs for future and overdue heartbeat labels.
- Add a patch changeset for the published Fusion package.

Files changed:
 .../fn-6311-active-agents-heartbeat-locales.md     |  5 ++
 .../__tests__/ActiveAgentsPanel.test.tsx           | 69 +++++++++++++++++++++-
 packages/i18n/locales/es/app.json                  |  2 +-
 packages/i18n/locales/fr/app.json                  |  2 +-
 packages/i18n/locales/zh-CN/app.json               |  2 +-
 packages/i18n/locales/zh-TW/app.json               |  2 +-
 6 files changed, 77 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6311

Fusion-Task-Lineage: b307cce4-2691-499e-bbe9-73cc1ca1705d
2026-06-12 15:34:05 -07:00
Phil Larson
fb4a5e912a feat(FN-424): complete Step 3 — guide operational no-commit planning
Fusion-Task-Id: FN-424

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:02:41 -07:00
Phil Larson
630b2a834f docs(FN-424): add no-commit completion changeset 2026-06-12 15:00:39 -07:00
Phil Larson
ab35c87114 test(FN-424): prove no-commit guard preserves worktree checks
Fusion-Task-Id: FN-424

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 15:00:19 -07:00
gsxdsm
2b5c4ae745 FN-6307: trim dashboard test waits
Trim heavyweight dashboard test paths while preserving coverage and recording the timing evidence.

- Seed the planning route rate limiter directly so boundary assertions avoid 999 duplicate HTTP session creations.
- Replace negative wait polling in NewTaskModal and heartbeat saturation assertions with direct checks after the triggering event settles.
- Document FN-6307 timing measurements and note the unrelated pre-existing settings-route failures observed during verification.

Files changed:
 docs/test-speed-audit-FN-5048.md                   | 20 +++++++++++++
 .../app/components/__tests__/NewTaskModal.test.tsx |  8 ++----
 .../src/__tests__/routes-planning.test.ts          | 33 +++++++++++++---------
 3 files changed, 41 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6307

Fusion-Task-Lineage: b32b22e7-6729-4bd0-bc3a-ad053178bb1c
2026-06-12 14:58:59 -07:00
Phil Larson
35502afdb8 fix(FN-424): align no-commit regression fixtures
Fusion-Task-Id: FN-424

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 14:58:40 -07:00
Phil Larson
cb128f5824 test(FN-424): cover plan-only no-commit finalization
Fusion-Task-Id: FN-424

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-12 14:58:39 -07:00
gsxdsm
039d3ce440 FN-6236: move fast triage into workflow settings
Move fast triage prompting into the workflow/settings prompt model.

- Add a core-owned fast triage prompt and expose the workflow prompt mode type.
- Add a fast-mode builtin workflow variant and route triage prompt selection through workflow settings.
- Remove the engine-local fast triage prompt constant and update triage tests for workflow-driven fast mode.
- Document the fast triage prompt mode setting and add a patch changeset.

Files changed:
 .changeset/FN-6236-fast-mode-workflow-variant.md   |   7 +
 docs/settings-reference.md                         |   2 +
 packages/core/src/__tests__/agent-prompts.test.ts  |  16 +-
 .../builtin-workflow-settings-triage.test.ts       |   5 +
 packages/core/src/agent-prompts.ts                 | 221 +++++++++++++++++++
 packages/core/src/builtin-workflow-prompts.ts      |  12 +-
 packages/core/src/builtin-workflow-settings.ts     |  18 +-
 packages/core/src/index.ts                         |   5 +
 packages/core/src/types.ts                         |   4 +
 .../triage-duplicate-search-regression.test.ts     |  18 +-
 .../triage-fast-mode-workflow-variant.test.ts      | 219 +++++++++++++++++++
 .../triage-planning-prompt-single-source.test.ts   |   8 +-
 packages/engine/src/__tests__/triage.test.ts       |  64 +++---
 packages/engine/src/triage.ts                      | 235 ++-------------------
 14 files changed, 565 insertions(+), 269 deletions(-)

Fusion-Task-Id: FN-6236

Fusion-Task-Lineage: 369954d8-41e7-4d88-aa6d-e6bbca077d50
2026-06-12 14:39:51 -07:00
gsxdsm
751d94244c FN-6294: collapse workflow merge primitives
Collapse built-in workflow merge-policy primitives back to the legacy merge seam until graph execution owns merge policy end-to-end.

- Treat all merge-policy primitive node kinds as a synthetic legacy merge node during graph traversal.
- Preserve shadow-stage parity by mapping the synthetic merge node into legacy stage transitions.
- Add regression coverage for success, failure, pre-merge review failure, and alternate merge-region entry points.
- Record a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6294-merge-region-collapse.md        |   5 +
 .../workflow-graph-executor-handlers.test.ts       |  13 ++-
 .../workflow-graph-merge-region-collapse.test.ts   | 116 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |  14 ++-
 packages/engine/src/workflow-graph-executor.ts     |  63 ++++++++++-
 5 files changed, 203 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-6294

Fusion-Task-Lineage: fe86b5e2-861f-448d-8db0-b0332e6ad76f
2026-06-12 14:21:18 -07:00
gsxdsm
ba610a1c0e FN-6296: fix stuck-kill force-requeue cleanup
Reap hung executor surfaces before requeueing stuck-kill timeout tasks.

- terminate spawned child agents and active session surfaces before clearing execution guards
- remove stale worktrees during force-requeue while preserving concurrent recovery ownership
- add regression coverage and architecture notes for the cleanup contract

Files changed:
 docs/architecture.md                               |   2 +
 .../engine/src/__tests__/executor-recovery.test.ts | 248 ++++++++++++++++++++-
 packages/engine/src/executor.ts                    |  61 ++++-
 3 files changed, 305 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-6296

Fusion-Task-Lineage: a393e2b1-a72c-4d7b-9de2-6bf7268986d4
2026-06-12 14:08:52 -07:00
gsxdsm
dd51b5e321 FN-6293: stabilize process supervisor cascade test
Stabilize the process supervisor cascade teardown assertion without relying on the lifetime timer.

- Disable maxLifetimeMs for the explicit cascade teardown test so it cannot race the test's wait window.
- Assert the supervised child exits from SIGTERM and the supervisor registry is cleaned up.
- Keep the grandchild termination assertion explicit after cascade cleanup.

Files changed:
 packages/core/src/__tests__/process-supervisor.test.ts | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6293

Fusion-Task-Lineage: 56fbedee-57e3-4b33-b84e-03fc1a7b7212
2026-06-12 13:50:24 -07:00
gsxdsm
491b04c44b FN-6289: Treat merge primitives as terminal workflow boundaries
Allow the linear workflow compiler to stop at engine-owned merge policy regions.

- Exempt merge/retry/branch-group primitive kinds from linearity fan-out checks and step emission.
- Validate builtin coding workflow compilation while preserving deferral for stepwise workflows.
- Update builtin workflow selection tests and publish the patch changeset for @runfusion/fusion.

Files changed:
 .changeset/fix-workflow-compiler-merge-region.md   |  4 +-
 .../core/src/__tests__/builtin-workflows.test.ts   |  8 ++--
 .../core/src/__tests__/workflow-compiler.test.ts   | 38 ++++++++++++++++++
 packages/core/src/workflow-compiler.ts             | 46 +++++++++++++++++++---
 4 files changed, 85 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-6289
Fusion-Task-Lineage: 22d6e778-2e92-42b9-bb0d-4cc71d1631c7
2026-06-12 13:36:02 -07:00
gsxdsm
72661faf96 FN-6305: allow title summarization for long descriptions
Title summarization now accepts oversized task descriptions while bounding the model prompt.

- Remove the 2000-character validation ceiling for summarize-title requests.
- Truncate long descriptions only at model-input time with a dedicated exported cap.
- Update route/API docs and tests for long-description behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6305-title-summarize-any-length.md   |  5 +++
 packages/core/src/__tests__/ai-summarize.test.ts   | 43 ++++++++++++++++++----
 packages/core/src/ai-summarize.ts                  | 34 +++++++++++------
 packages/core/src/index.ts                         |  1 +
 packages/dashboard/app/api/legacy.ts               |  2 +-
 .../src/__tests__/routes-planning.test.ts          | 25 +++++++++++++
 packages/dashboard/src/routes.ts                   |  2 +-
 7 files changed, 92 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-6305
Fusion-Task-Lineage: 69a83173-ac85-489f-b4cc-d1a70b6d25eb
2026-06-12 13:12:55 -07:00
gsxdsm
283adce4d0 FN-6295: move AI merge clean rooms into worktrees
Move AI-merge clean-room worktrees into the configured worktrees directory while preserving legacy cleanup.

- Resolve AI-merge roots through the configured worktrees directory using a hidden .ai-merge container.
- Keep local git excludes and stale cleanup compatible with legacy .fusion/ai-merge and tmpdir locations.
- Exclude the .ai-merge container from worktree pool and self-healing one-level sweeps.
- Add regression coverage for path resolution, cleanup, orphan reap, and cap enforcement behavior.
- Update architecture and agent guidance for the relocated clean-room root.

Files changed:
 AGENTS.md                                          |  2 +-
 docs/architecture.md                               |  4 +-
 .../engine/src/__tests__/merger-ai-cleanup.test.ts | 50 +++++++++----
 .../__tests__/self-healing-tempdir-sweep.test.ts   | 87 +++++++++++++++++++---
 .../engine/src/__tests__/worktree-paths.test.ts    | 24 ++++++
 .../engine/src/__tests__/worktree-pool.test.ts     | 55 ++++++++++++++
 packages/engine/src/merger-ai.ts                   | 27 +++++--
 packages/engine/src/self-healing.ts                | 25 +++----
 packages/engine/src/worktree-paths.ts              | 17 +++++
 packages/engine/src/worktree-pool.ts               | 10 +--
 10 files changed, 247 insertions(+), 54 deletions(-)

Fusion-Task-Id: FN-6295
Fusion-Task-Lineage: d95d32c2-3253-4964-b68a-252b4cb65109
2026-06-12 12:49:34 -07:00
gsxdsm
4f3a70aebf fix: keep mobile chat keyboard up on re-focus and hide nav while typing
Direct-chat composer no longer scrolls on focus (which aborted the iOS keyboard
raise on every tap after a dismiss). Layout-viewport drift is now undone on blur
— immediately plus a short follow-up cancelled on the next focus — so each focus
starts at scrollY 0 and the keyboard lock's scrollTo is a no-op.

Also hide the mobile bottom nav while the keyboard is up: it previously pinned to
bottom:0 and relied on the keyboard to cover it, but on iOS the layout viewport
does not shrink, so the bar overlapped the composer. It now slides off-screen
(translateY(100%) + pointer-events:none); safe because the nav is a sibling of
the input, not an ancestor.

Folds into the existing iOS chat-keyboard changeset.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 11:39:01 -07:00
gsxdsm
e5036b13c2 fix: self-clear Quick Chat send-button tap latch on mobile
The send/stop buttons run their action on pointerdown/touchstart and set a
shared handledMobileActionRef latch so the trailing synthetic onClick does not
double-fire. The latch was only cleared inside onClick, but iOS suppresses that
click after preventDefault() in touchstart — leaving it stuck true, so the next
real click (e.g. after switching chats) was swallowed and the button looked
dead. Make the latch self-clearing (auto-reset timer + consume-on-click) so it
can never persist across taps; also stops a stuck stop-button latch from killing
the next send tap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 11:38:53 -07:00
gsxdsm
0897b2a0bf FN-6281: add bounded graph resume retries
Add a narrow persisted retry path for transient workflow-graph failures during resume after restart or unpause.

- Persist graphResumeRetryCount with schema migration, store round-tripping, manual retry reset, and task serialization coverage.
- Retry only no-progress execute-seam graph failures immediately following resume markers, then clear transient status/error and re-run within a capped budget.
- Preserve terminal graph failure handling for explicit reasons, durable task failures, completed progress, non-resume cases, and exhausted retry budgets.
- Document the resume-limbo retry contract and add a patch changeset for @runfusion/fusion.

Files changed:
 .changeset/fn-6281-graph-resume-retry.md           |   5 +
 docs/architecture.md                               |   1 +
 packages/core/src/__tests__/db-migrate.test.ts     |  30 +--
 packages/core/src/__tests__/db.test.ts             |  44 ++---
 packages/core/src/__tests__/goals-schema.test.ts   |   2 +-
 packages/core/src/__tests__/insight-store.test.ts  |  10 +-
 .../core/src/__tests__/manual-retry-reset.test.ts  |   1 +
 .../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      |   4 +-
 .../core/src/__tests__/store-merge-queue.test.ts   |   2 +-
 .../core/src/__tests__/store-persistence.test.ts   |  22 +++
 packages/core/src/__tests__/task-documents.test.ts |   2 +-
 packages/core/src/db.ts                            |  10 +-
 packages/core/src/manual-retry-reset.ts            |   1 +
 packages/core/src/store.ts                         |  14 +-
 packages/core/src/types.ts                         |   5 +
 .../engine/src/__tests__/executor-recovery.test.ts | 201 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |  54 ++++++
 19 files changed, 359 insertions(+), 53 deletions(-)

Fusion-Task-Id: FN-6281

Fusion-Task-Lineage: f9061445-8624-465a-9255-c3d02eac1bdb
2026-06-12 11:10:12 -07:00
gsxdsm
36ba1b9d68 FN-6292: prevent dependency-blocking file leases
Prevent dependency waiters from holding file-scope leases that can block their own dependencies.

- Exclude in-progress tasks with unmet scheduling dependencies from active overlap lease maps.
- Add self-healing recovery for existing dependency/lease circular waits with triple-proof auditing.
- Cover scheduler and self-healing behavior with regression tests and document the new audit events.

Files changed:
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   5 +-
 packages/engine/src/__tests__/scheduler.test.ts    | 108 +++++++++++++
 packages/engine/src/__tests__/self-healing.test.ts | 172 ++++++++++++++++++++-
 packages/engine/src/scheduler.ts                   |  67 +++++---
 packages/engine/src/self-healing.ts                | 132 ++++++++++++++++
 6 files changed, 462 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-6292
Fusion-Task-Lineage: 7c0e852d-bdb1-4775-a6b7-2b60b7583da1
2026-06-12 10:49:02 -07:00
gsxdsm
93237c3f0c FN-6301: preserve mobile chat composer native focus
Preserve native mobile composer focus so first taps open the keyboard and sends remain usable.

- Stop canceling unfocused mobile textarea touch starts in direct chat, room chat, and Quick Chat.
- Add regression coverage for iOS and Android native focus behavior across the affected composers.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-6301-mobile-chat-composer.md         |  5 ++
 packages/dashboard/app/components/ChatView.tsx     | 16 ++---
 packages/dashboard/app/components/QuickChatFAB.tsx | 18 +----
 .../components/__tests__/ChatView.rooms.test.tsx   | 23 +++++--
 .../app/components/__tests__/ChatView.test.tsx     | 45 +++++++++++++
 .../app/components/__tests__/QuickChatFAB.test.tsx | 77 ++++++++++++++++++++++
 6 files changed, 153 insertions(+), 31 deletions(-)

Fusion-Task-Id: FN-6301

Fusion-Task-Lineage: 3bee944d-3b94-41a2-976e-c1e3221236ad
2026-06-12 10:27:24 -07:00
gsxdsm
4bd6024ef7 FN-6300: add live task chat tab
Add a live chat-style task detail tab for following and steering active agent work.

- Add TaskChatTab with grouped agent log bubbles, live-follow scrolling, and steering message composer.
- Share chat input autosize helpers between ChatView and task chat.
- Wire the Chat tab into task detail navigation with localized labels and regression coverage.

Files changed:
 docs/dashboard-guide.md                            |   2 +
 .../dashboard/app/components/AgentLogViewer.tsx    |   2 +-
 packages/dashboard/app/components/ChatView.tsx     |  25 +-
 packages/dashboard/app/components/TaskChatTab.css  | 193 ++++++++++++++
 packages/dashboard/app/components/TaskChatTab.tsx  | 276 +++++++++++++++++++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  13 +-
 .../app/components/__tests__/TaskChatTab.test.tsx  | 181 ++++++++++++++
 .../TaskDetailModal.attachments-and-tabs.test.tsx  |  19 +-
 .../TaskDetailModal.definition-actions.test.tsx    | 104 ++++----
 ...etailModal.responsive-and-dependencies.test.tsx |   2 +-
 packages/dashboard/app/utils/chatInputAutosize.ts  |  18 ++
 packages/i18n/locales/en/app.json                  |   1 +
 packages/i18n/locales/es/app.json                  |   1 +
 packages/i18n/locales/fr/app.json                  |   1 +
 packages/i18n/locales/ko/app.json                  |   1 +
 packages/i18n/locales/zh-CN/app.json               |   1 +
 packages/i18n/locales/zh-TW/app.json               |   1 +
 17 files changed, 757 insertions(+), 84 deletions(-)

Fusion-Task-Id: FN-6300
Fusion-Task-Lineage: 1eb8a17b-3ca5-4cba-81c6-ac7ccce0a113
2026-06-12 10:00:08 -07:00
gsxdsm
dcb049587f FN-6298: fix agent heartbeat timestamp badges
Fix agent heartbeat card badges to use dedicated timestamp translation keys.

- Use separate Last/Next heartbeat timestamp keys so existing label strings do not collide with interpolated badge text.
- Add localized timestamp strings for all app locales.
- Cover desktop and mobile agent cards against raw placeholder or missing timestamp regressions.

Files changed:
 packages/dashboard/app/components/AgentsView.tsx   |  4 ++--
 .../app/components/__tests__/AgentsView.test.tsx   | 25 +++++++++++++++++++---
 .../__tests__/agents-view-mobile.test.tsx          | 23 ++++++++++++++++++--
 packages/i18n/locales/en/app.json                  |  2 ++
 packages/i18n/locales/es/app.json                  |  2 ++
 packages/i18n/locales/fr/app.json                  |  2 ++
 packages/i18n/locales/ko/app.json                  |  2 ++
 packages/i18n/locales/zh-CN/app.json               |  2 ++
 packages/i18n/locales/zh-TW/app.json               |  2 ++
 9 files changed, 57 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6298

Fusion-Task-Lineage: 1561bcdc-83c9-4a81-aa7b-09d0c441ac1a
2026-06-12 09:46:46 -07:00
gsxdsm
cdcfa20ce0 FN-6297: make mobile edge details full-screen
Makes workflow edge details behave like a full-screen mobile editor stage while keeping the mobile tabs visible.

- Add a mobile edge-detail editor body state that hides the canvas and expands the inspector.\n- Add a dismiss control to the mobile edge inspector.\n- Preserve the top mobile tab row sizing and cover the edge-detail/mobile-tab CSS contracts with tests.

Files changed:\n .../app/components/WorkflowNodeEditor.css          | 19 +++++++++++++\n .../app/components/WorkflowNodeEditor.tsx          | 22 ++++++++++++---\n .../__tests__/WorkflowNodeEditor.css.test.ts       | 11 ++++++++\n .../__tests__/WorkflowNodeEditor.test.tsx          | 31 ++++++++++++++++++++++\n 4 files changed, 80 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6297

Fusion-Task-Lineage: be7cea97-0790-4d88-9fa5-3d484b4d3dfb
2026-06-12 09:38:03 -07:00
gsxdsm
f7f2cae9d0 FN-6237: apply frontend UX criteria as workflow policy
Move frontend UX criteria out of triage self-instructions and into deterministic workflow policy.

- Add a shared frontend UX policy helper that matches frontend file scopes and injects the byte-equivalent checklist idempotently.
- Apply the policy during triage finalization and persist the updated PROMPT.md when applicable.
- Replace the legacy prompt-based injection instructions with a pointer to the deterministic policy.
- Cover path matching, insertion behavior, and checklist parity with focused core tests.
- Add a minor changeset for the published Fusion package.

Files changed:
 .changeset/fn-6237-frontend-ux-policy.md           |   5 +
 .../core/src/__tests__/frontend-ux-policy.test.ts  | 119 +++++++++++++++++
 packages/core/src/agent-prompts.ts                 |  29 +---
 packages/core/src/frontend-ux-policy.ts            | 148 +++++++++++++++++++++
 packages/core/src/index.ts                         |   1 +
 packages/engine/src/triage.ts                      |  19 ++-
 6 files changed, 291 insertions(+), 30 deletions(-)

Fusion-Task-Id: FN-6237

Fusion-Task-Lineage: 7ac95064-9ec6-4760-8609-20c35075aca1
2026-06-12 09:24:02 -07:00
gsxdsm
d2ea10445e Merge: fix iOS chat keyboard collapse via overflow-only viewport lock
Replace the position:fixed body pin for the inline chat composer with an
overflow-only viewport lock so iOS no longer blurs the focused textarea
when the keyboard opens. Modals keep the position:fixed lock.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:03:53 -07:00
gsxdsm
70655195f2 fix: stop iOS chat keyboard collapse from position:fixed scroll lock
The mobile chat keyboard collapsed the instant it opened on iOS because
the keyboard scroll-lock pinned body to position:fixed a beat after the
composer was already focused — pinning an ancestor to position:fixed
after focus blurs the input on iOS Safari (no visible jump, since the
dashboard base layout is already at scrollY 0).

Add useMobileKeyboardViewportLock: an overflow-only viewport lock
(overflow:hidden on html/body + scrollTo(0,0)) that does NOT touch
position, mirroring the working Quick Chat panel. App-level and ChatView
keyboard pins use it now; modals keep the position:fixed lock unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:03:40 -07:00
gsxdsm
75719d015c Merge: fix iOS mobile chat keyboard collapse and Quick Chat FAB open
Keep the iOS soft keyboard up in the main chat composer (drive the
.chat-thread drift transform in JS only on real viewport offset, so a
transformed ancestor never blurs the focused textarea) and make the
Quick Chat FAB open on iPhone (toggle on pointerup since setPointerCapture
suppresses the synthetic click on WebKit).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 08:46:59 -07:00