gsxdsm
b2f564c2be
FN-6791: add i18n regression guardrails
...
Add focused i18n regression coverage for dashboard localization guardrails.
- Assert dashboard hardcoded-string lint ignores stay limited to non-shipping patterns.
- Verify real locale catalogs retain key parity across supported locales and namespaces.
- Cover fallback behavior for empty secondary translations, missing keys, unsupported locale tags, and Chinese locale normalization.
- Document that @fusion/i18n tests now protect lint-ignore scope and catalog parity drift.
Files changed:
docs/i18n-contributing.md | 2 +
.../i18n/src/__tests__/i18n-gate-coverage.test.ts | 65 +++++++++++++++++++
.../i18n/src/__tests__/locale-fallback.test.ts | 72 ++++++++++++++++++++++
3 files changed, 139 insertions(+)
Fusion-Task-Id: FN-6791
Fusion-Task-Lineage: 7f52113e-237a-415d-a109-51295fdc0372
2026-06-20 11:02:55 -07:00
gsxdsm
bdf95f8d65
FN-6770: localize dashboard workflow and task UI strings
...
Localize dashboard workflow, task, setup, and pull request UI copy through the shared i18n resources.
- Replace hardcoded dashboard strings in workflow, task detail/chat/comment, setup wizard, PR, and related modal components with translation lookups.
- Add app/common namespace keys across English and secondary locale catalogs, plus regenerated i18n resource types.
- Add the published package changeset and clear the now-localized component files from the i18n lint deferral list.
Files changed:
.changeset/fn-6770-localize-workflow-task-pr.md | 5 +
i18next.config.ts | 17 +-
packages/dashboard/app/components/Board.tsx | 10 +-
.../dashboard/app/components/PrCreateModal.tsx | 38 +--
packages/dashboard/app/components/PrPanel.tsx | 2 +-
.../dashboard/app/components/PullRequestView.tsx | 51 ++--
.../dashboard/app/components/SettingsModal.tsx | 92 +++----
.../dashboard/app/components/SetupWizardModal.tsx | 8 +-
packages/dashboard/app/components/TaskChatTab.tsx | 107 ++++----
packages/dashboard/app/components/TaskComments.tsx | 2 +-
.../dashboard/app/components/TaskDetailModal.tsx | 54 ++--
.../app/components/WorkflowNodeEditor.tsx | 109 +++++----
.../app/components/WorkflowResultsTab.tsx | 190 +++++++-------
.../dashboard/app/components/WorkflowSelector.tsx | 20 +-
packages/i18n/locales/en/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/en/common.json | 28 +--
packages/i18n/locales/es/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/es/common.json | 28 +--
packages/i18n/locales/fr/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/fr/common.json | 28 +--
packages/i18n/locales/ko/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/ko/common.json | 28 +--
packages/i18n/locales/zh-CN/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/zh-CN/common.json | 28 +--
packages/i18n/locales/zh-TW/app.json | 268 ++++++++++++++++++--
packages/i18n/locales/zh-TW/common.json | 28 +--
packages/i18n/src/resources.d.ts | 272 ++++++++++++++++++---
27 files changed, 2144 insertions(+), 609 deletions(-)
Fusion-Task-Id: FN-6770
Fusion-Task-Lineage: 393b6b8a-1902-4e46-a53e-b4a0793022ca
2026-06-20 10:35:40 -07:00
gsxdsm
eca96fbd0b
FN-6771: localize settings section copy
...
Localize dashboard settings section text and restore i18n lint coverage for those files.
- Replace hardcoded settings section labels, help text, placeholders, and status copy with i18n lookups.
- Add settings translation keys across supported app and common locale catalogs and refresh generated resource types.
- Remove the settings sections from the i18n lint deferral list and document that coverage requirement.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6771-localize-settings-sections.md | 5 +
docs/i18n-contributing.md | 3 +-
i18next.config.ts | 26 +-
.../settings/sections/AgentPermissionsSection.tsx | 55 +-
.../settings/sections/AppearanceSection.tsx | 91 +-
.../settings/sections/AuthenticationSection.tsx | 457 +++-------
.../settings/sections/BackupsSection.tsx | 229 ++---
.../settings/sections/CommandsSection.tsx | 49 +-
.../settings/sections/ExperimentalSection.tsx | 109 +--
.../settings/sections/GeneralSection.tsx | 487 ++++-------
.../settings/sections/GlobalGeneralSection.tsx | 183 +---
.../settings/sections/GlobalModelsSection.tsx | 525 ++++-------
.../components/settings/sections/MemorySection.tsx | 458 +++-------
.../components/settings/sections/MergeSection.tsx | 863 ++++++------------
.../settings/sections/NodeRoutingSection.tsx | 108 +--
.../settings/sections/NodeSyncSection.tsx | 105 +--
.../settings/sections/NotificationsSection.tsx | 484 ++++------
.../settings/sections/PluginsSection.tsx | 105 +--
.../settings/sections/ProjectModelsSection.tsx | 971 ++++++++-------------
.../components/settings/sections/RemoteSection.tsx | 560 +++++-------
.../settings/sections/ResearchGlobalSection.tsx | 314 ++-----
.../settings/sections/ResearchProjectSection.tsx | 226 ++---
.../settings/sections/RuntimesSections.tsx | 40 +-
.../settings/sections/ScheduledEvalsSection.tsx | 169 ++--
.../settings/sections/SchedulingSection.tsx | 381 ++------
.../settings/sections/WorktreesSection.tsx | 330 ++-----
packages/i18n/locales/en/app.json | 698 ++++++++++++++-
packages/i18n/locales/en/common.json | 8 +
packages/i18n/locales/es/app.json | 698 ++++++++++++++-
packages/i18n/locales/es/common.json | 8 +
packages/i18n/locales/fr/app.json | 698 ++++++++++++++-
packages/i18n/locales/fr/common.json | 8 +
packages/i18n/locales/ko/app.json | 698 ++++++++++++++-
packages/i18n/locales/ko/common.json | 8 +
packages/i18n/locales/zh-CN/app.json | 698 ++++++++++++++-
packages/i18n/locales/zh-CN/common.json | 8 +
packages/i18n/locales/zh-TW/app.json | 698 ++++++++++++++-
packages/i18n/locales/zh-TW/common.json | 8 +
packages/i18n/src/resources.d.ts | 706 ++++++++++++++-
39 files changed, 7178 insertions(+), 5097 deletions(-)
Fusion-Task-Id: FN-6771
Fusion-Task-Lineage: cdf9b36f-414e-4084-b661-b578a4c27314
2026-06-20 08:57:45 -07:00
gsxdsm
083ebf8134
FN-6780: make i18n status check key parity
...
Make i18n status enforce catalog key parity while allowing empty fallback placeholders.
- Add a reusable i18n parity checker that reports missing and orphaned keys across secondary locales.
- Route pnpm i18n:status through the project parity gate and keep the upstream completeness report as i18n:status:report.
- Document that empty secondary locale strings are valid fallback placeholders and cover parity behavior with tests.
Files changed:
docs/i18n-contributing.md | 18 +++-
i18next.config.ts | 13 ++-
package.json | 3 +-
packages/i18n/scripts/check-i18n-parity.mjs | 110 +++++++++++++++++++++++
packages/i18n/src/__tests__/config.test.ts | 2 +-
packages/i18n/src/__tests__/parity.test.ts | 130 ++++++++++++++++++++++++++++
packages/i18n/src/parity.ts | 126 +++++++++++++++++++++++++++
7 files changed, 393 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6780
Fusion-Task-Lineage: f687586a-bc09-4f9d-843f-b7205eb40a58
2026-06-20 06:46:35 -07:00
gsxdsm
b760fa0df9
FN-6769: localize remaining dashboard strings
...
Localize the remaining dashboard UI clusters and refresh the generated i18n resources.
- Replace hardcoded labels across agent, plugin, mission, workflow node, research, document, activity, and miscellaneous dashboard components with app namespace translations.
- Add and synchronize locale catalog entries for English, Spanish, French, Korean, Simplified Chinese, and Traditional Chinese.
- Update i18n lint configuration and generated resource types, with a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6769-i18n-cluster.md | 5 +
i18next.config.ts | 47 +--
.../dashboard/app/components/ActiveAgentsPanel.tsx | 2 +-
packages/dashboard/app/components/ActivityFeed.tsx | 12 +-
.../dashboard/app/components/ActivityLogModal.tsx | 4 +-
packages/dashboard/app/components/AddNodeModal.tsx | 4 +-
.../dashboard/app/components/AgentDetailView.tsx | 6 +-
.../app/components/AgentGenerationModal.tsx | 2 +-
.../dashboard/app/components/AgentImportModal.tsx | 4 +-
.../app/components/AgentOnboardingModal.tsx | 4 +-
.../app/components/AgentPromptsManager.tsx | 2 +-
.../dashboard/app/components/AgentRunHistory.tsx | 2 +-
.../dashboard/app/components/AgentsOverviewBar.tsx | 2 +-
.../dashboard/app/components/BranchGroupCard.tsx | 4 +-
.../dashboard/app/components/CliBinaryPanel.tsx | 8 +-
.../app/components/CursorCliProviderCard.tsx | 4 +-
.../dashboard/app/components/DashboardLoader.tsx | 4 +-
.../dashboard/app/components/DevServerView.tsx | 8 +-
.../dashboard/app/components/DocumentsView.tsx | 6 +-
.../dashboard/app/components/ErrorBoundary.tsx | 9 +-
.../dashboard/app/components/ExecutorStatusBar.tsx | 5 +-
.../dashboard/app/components/GitHubStarPrompt.tsx | 14 +-
.../dashboard/app/components/GitManagerModal.tsx | 4 +-
.../dashboard/app/components/GroupTaskModal.tsx | 2 +-
packages/dashboard/app/components/Header.tsx | 4 +-
.../dashboard/app/components/HermesRuntimeCard.tsx | 2 +-
packages/dashboard/app/components/InsightsView.tsx | 2 +-
.../dashboard/app/components/IssueMentionPopup.tsx | 5 +-
packages/dashboard/app/components/MailboxView.tsx | 6 +-
.../components/MilestoneSliceInterviewModal.tsx | 2 +-
.../app/components/MissionInterviewModal.tsx | 2 +-
.../dashboard/app/components/MissionManager.tsx | 8 +-
.../app/components/ModelOnboardingModal.tsx | 2 +-
.../dashboard/app/components/NodeDetailModal.tsx | 2 +-
.../app/components/PiExtensionsManager.tsx | 10 +-
.../dashboard/app/components/ProjectSelector.tsx | 6 +-
packages/dashboard/app/components/QuickChatFAB.tsx | 44 +--
packages/dashboard/app/components/ResearchView.tsx | 2 +-
packages/dashboard/app/components/RoutineCard.tsx | 6 +-
.../dashboard/app/components/RoutineEditor.tsx | 2 +-
packages/dashboard/app/components/RoutingTab.tsx | 2 +-
packages/dashboard/app/components/ScheduleCard.tsx | 6 +-
packages/dashboard/app/components/ScheduleForm.tsx | 2 +-
packages/dashboard/app/components/ScriptsModal.tsx | 2 +-
.../app/components/StashConflictModal.tsx | 4 +-
.../dashboard/app/components/TerminalModal.tsx | 2 +-
.../app/components/nodes/WorkflowNodeTypes.tsx | 47 +--
packages/i18n/locales/en/app.json | 274 +++++++--------
packages/i18n/locales/es/app.json | 144 ++++++--
packages/i18n/locales/fr/app.json | 144 ++++++--
packages/i18n/locales/ko/app.json | 144 ++++++--
packages/i18n/locales/zh-CN/app.json | 144 ++++++--
packages/i18n/locales/zh-TW/app.json | 144 ++++++--
packages/i18n/src/resources.d.ts | 375 +++++++++++++++++++--
54 files changed, 1261 insertions(+), 442 deletions(-)
Fusion-Task-Id: FN-6769
Fusion-Task-Lineage: a8733dc9-3b48-47e6-88c4-020f83ab41de
2026-06-20 05:04:25 -07:00
gsxdsm
d4d7623ee0
FN-6749: rebaseline i18n lint guardrail
...
Rebaseline the i18n hardcoded-string lint guardrail for shipping dashboard surfaces.
- Add scoped i18n lint ignores for non-shipping tests, stories, and deferred source-copy files with follow-up rationale.
- Localize remaining plugin/view copy and replace technical glyph literals that should not be linted as prose.
- Refresh synced locale catalogs and generated resource types, and document the lint baseline policy.
Files changed:
.changeset/fn-6749-i18n-lint-rebaseline.md | 5 +
docs/i18n-contributing.md | 14 +
i18next.config.ts | 96 ++
.../dashboard/app/components/AgentDetailView.tsx | 4 +-
.../app/components/ConversationHistory.tsx | 4 +-
.../app/components/DockerNodeOnboardingModal.tsx | 8 +-
.../components/MilestoneSliceInterviewModal.tsx | 4 +-
.../app/components/MissionInterviewModal.tsx | 4 +-
.../app/components/ModelSelectionModal.tsx | 4 +-
.../dashboard/app/components/NodeDetailModal.tsx | 15 +-
.../dashboard/app/components/PlanningModeModal.tsx | 4 +-
.../dashboard/app/components/SessionTerminal.tsx | 15 +-
.../app/components/SubtaskBreakdownModal.tsx | 4 +-
packages/dashboard/app/components/TaskForm.tsx | 4 +-
.../dashboard/app/components/TerminalModal.tsx | 18 +-
.../dashboard/app/plugins/pluginViewRegistry.tsx | 7 +-
packages/i18n/locales/en/app.json | 890 +++++++++---
packages/i18n/locales/en/common.json | 82 +-
packages/i18n/locales/es/app.json | 986 ++++++++++---
packages/i18n/locales/es/common.json | 82 +-
packages/i18n/locales/fr/app.json | 986 ++++++++++---
packages/i18n/locales/fr/common.json | 82 +-
packages/i18n/locales/ko/app.json | 1482 ++++++++++++++------
packages/i18n/locales/ko/cli.json | 8 +-
packages/i18n/locales/ko/common.json | 82 +-
packages/i18n/locales/zh-CN/app.json | 1482 ++++++++++++++------
packages/i18n/locales/zh-CN/cli.json | 8 +-
packages/i18n/locales/zh-CN/common.json | 82 +-
packages/i18n/locales/zh-TW/app.json | 1482 ++++++++++++++------
packages/i18n/locales/zh-TW/cli.json | 8 +-
packages/i18n/locales/zh-TW/common.json | 82 +-
packages/i18n/src/resources.d.ts | 459 +++---
32 files changed, 6055 insertions(+), 2438 deletions(-)
Fusion-Task-Id: FN-6749
Fusion-Task-Lineage: 789a7cbb-fdf8-4190-8cd2-6bf7d5e2d552
2026-06-19 22:14:57 -07:00
gsxdsm
c158dda8a6
FN-6745: add xhigh thinking level support
...
Adds the xhigh reasoning option across settings, task flows, APIs, and model adapter tests.
- Extend the shared thinking-level enum, validation paths, generated resource types, and settings documentation for `xhigh`.
- Surface `xhigh` in task, agent, and global model selectors with localized labels.
- Cover task route handling, task form rendering, and Pi adapter mapping behavior with regression tests.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6745-xhigh-thinking-level.md | 5 +
docs/settings-reference.md | 2 +-
.../core/src/__tests__/thinking-levels.test.ts | 9 ++
packages/core/src/types.ts | 10 +-
packages/dashboard/app/api/legacy.ts | 6 +-
.../dashboard/app/components/AgentDetailView.tsx | 2 +-
.../dashboard/app/components/ModelSelectorTab.tsx | 1 +
.../dashboard/app/components/NewAgentDialog.tsx | 3 +-
packages/dashboard/app/components/NewTaskModal.tsx | 2 +-
.../dashboard/app/components/TaskDetailModal.tsx | 2 +-
packages/dashboard/app/components/TaskForm.tsx | 2 +
.../app/components/__tests__/TaskForm.test.tsx | 14 +++
.../settings/sections/GlobalModelsSection.tsx | 1 +
.../src/__tests__/routes-tasks-ops.test.ts | 8 +-
.../dashboard/src/__tests__/routes-tasks.test.ts | 8 +-
packages/dashboard/src/agent-generation.ts | 4 +-
packages/dashboard/src/agent-onboarding.ts | 4 +-
.../src/routes/register-task-workflow-routes.ts | 5 +-
packages/engine/src/__tests__/pi.test.ts | 25 ++++
packages/i18n/locales/en/app.json | 3 +
packages/i18n/locales/es/app.json | 3 +
packages/i18n/locales/fr/app.json | 3 +
packages/i18n/locales/ko/app.json | 3 +
packages/i18n/locales/zh-CN/app.json | 3 +
packages/i18n/locales/zh-TW/app.json | 3 +
packages/i18n/src/resources.d.ts | 126 ++++++++++++++++++++-
26 files changed, 229 insertions(+), 28 deletions(-)
Fusion-Task-Id: FN-6745
Fusion-Task-Lineage: 779e1517-607b-482b-83a1-0f2bb94ae736
2026-06-19 16:47:34 -07:00
gsxdsm
3df9107e58
FN-6710: use Working for chat wait states
...
Chat now labels pre-stream assistant activity as work in progress instead of a connection step.
- Switch full Chat and Quick Chat waiting copy to the chat.workingStatus translation key.
- Rename localized chat loading text from Connecting to Working across shipped locales and generated resource types.
- Update chat recovery docs, implementation comments, and tests to expect the Working indicator.
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/ChatView.tsx | 6 +++++-
packages/dashboard/app/components/QuickChatFAB.tsx | 2 +-
packages/dashboard/app/components/__tests__/ChatView.test.tsx | 10 +++++-----
.../dashboard/app/components/__tests__/QuickChatFAB.test.tsx | 4 ++--
packages/dashboard/app/hooks/useChat.ts | 4 ++--
packages/dashboard/app/hooks/useQuickChat.ts | 2 +-
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 +-
packages/i18n/src/resources.d.ts | 2 +-
14 files changed, 24 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6710
Fusion-Task-Lineage: a7592c7d-605f-4a9b-b0d3-be875ed2eff5
2026-06-19 06:41:28 -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
e8c2d516af
FN-6386: add one-click update installation
...
Add a dashboard update action that installs available Fusion releases directly from the UI.
- Add an install-update API route backed by npm global install with bin-collision retry handling.
- Add Update now controls, loading/error/success states, and responsive styling to the update banner and settings modal.
- Extend localization, documentation, changeset coverage, and update-check tests for the new install flow.
Files changed:
.changeset/fn-6386-update-now-button.md | 5 +
docs/dashboard-guide.md | 4 +
docs/settings-reference.md | 2 +
packages/dashboard/app/api/legacy.ts | 13 ++
.../dashboard/app/components/SettingsModal.css | 38 +++++-
.../dashboard/app/components/SettingsModal.tsx | 96 ++++++++++++--
.../app/components/UpdateAvailableBanner.css | 46 +++++++
.../app/components/UpdateAvailableBanner.tsx | 103 ++++++++++++---
.../components/__tests__/SettingsModal.test.tsx | 79 +++++++++++
.../__tests__/UpdateAvailableBanner.test.tsx | 57 +++++++-
.../components/__tests__/settings-mobile.test.tsx | 19 +++
.../src/__tests__/update-check-route.test.ts | 78 ++++++++++-
.../dashboard/src/__tests__/update-check.test.ts | 45 +++++++
.../src/routes/register-update-check-routes.ts | 25 +++-
packages/dashboard/src/update-check.ts | 93 +++++++++++++
packages/i18n/locales/en/app.json | 14 +-
packages/i18n/src/resources.d.ts | 146 ++++++++++++++++++++-
17 files changed, 819 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-6386
Fusion-Task-Lineage: bcccf253-c0f1-493e-b849-b189a65d1479
2026-06-13 16:30:28 -07:00
gsxdsm
bd87ce7d7e
FN-6304: add optional workflow steps
...
Allow workflows to define default-on optional steps and expose browser verification as a togglable workflow option.
- Add core optional-step helpers, IR metadata, compiler support, exports, and regression coverage.
- Mark browser verification optional in the built-in coding workflow and document optional workflow-step behavior.
- Add dashboard/API support for optional step defaults and enabled-state presentation with localized label cleanup.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6304-optional-workflow-steps.md | 5 ++
docs/task-management.md | 2 +-
docs/workflow-steps.md | 8 ++
packages/core/src/__tests__/workflow-ir.test.ts | 45 +++++++++++
.../src/__tests__/workflow-optional-steps.test.ts | 88 ++++++++++++++++++++++
packages/core/src/builtin-coding-workflow-ir.ts | 1 +
packages/core/src/index.ts | 3 +
packages/core/src/store.ts | 3 +
packages/core/src/workflow-compiler.ts | 30 +++++++-
packages/core/src/workflow-ir-types.ts | 11 +++
packages/core/src/workflow-ir.ts | 32 +++++++-
packages/core/src/workflow-optional-steps.ts | 46 +++++++++++
packages/dashboard/app/api/legacy.ts | 10 +++
.../dashboard/app/components/InlineCreateCard.css | 20 +++++
.../dashboard/app/components/InlineCreateCard.tsx | 87 ++++++++++++++++-----
.../app/components/WorkflowResultsTab.tsx | 44 +++++++++--
.../components/__tests__/InlineCreateCard.test.tsx | 41 +++++++++-
.../__tests__/WorkflowResultsTab.test.tsx | 58 +++++++++++++-
.../src/__tests__/workflow-routes.test.ts | 22 ++++++
.../src/routes/register-workflow-routes.ts | 16 +++-
packages/i18n/locales/en/app.json | 6 +-
packages/i18n/locales/es/app.json | 3 -
packages/i18n/locales/fr/app.json | 3 -
packages/i18n/locales/ko/app.json | 3 -
packages/i18n/locales/zh-CN/app.json | 3 -
packages/i18n/locales/zh-TW/app.json | 3 -
packages/i18n/src/resources.d.ts | 6 +-
27 files changed, 543 insertions(+), 56 deletions(-)
Fusion-Task-Id: FN-6304
Fusion-Task-Lineage: 385f8ae1-494f-4e2b-a6e9-3a2d2bbe7f71
2026-06-12 17:57:19 -07:00
gsxdsm
563cb5b372
Address PR review feedback ( #1433 )
...
- always dispose AI design session (try/finally) + rejecting-agent test
- prune expired design rate-limit entries per check
- apply workflowId precedence in createTaskWithReservedId
- compare-and-set migrated project default (no pre-transaction snapshot)
- reject fragment ids in setDefaultWorkflowId at the write boundary
- guard stripApprovalBypassFlags against malformed template nodes
- hoist duplicate stepToFragmentIr call in migration loop
- auto-layout preserves unplaced nodes (strictColumnForY)
- second same-pair connection births a failure edge for condition-capable sources
- insertFragment expands foreach templates into child nodes (lossless round-trip)
- copyIrWithFreshIds remaps namespaced foreach child layout keys
- discard stale AI-edit results after workflow switch
- i18n: returnEmptyString:false so empty locale placeholders fall back to en
- test fixes: schema-version titles, migrate idempotency assertion, TaskForm post-resolve + cross-mode regression, deterministic waits
2026-06-05 13:56:05 -07:00
gsxdsm
968e9a45fc
feat(dashboard): node editor becomes the primary workflow surface; retire WorkflowStepManager
2026-06-05 00:48:24 -07:00
gsxdsm
62c820bf99
feat(dashboard): design-with-AI affordances in the workflow editor
2026-06-05 00:32:38 -07:00
gsxdsm
91284f516d
feat(dashboard): template picker on workflow creation
2026-06-05 00:06:06 -07:00
gsxdsm
ef33d79e78
feat(core,dashboard): workflow-centric task creation with atomic workflowId materialization
2026-06-04 23:47:24 -07:00
gsxdsm
407ce03bf2
feat(dashboard): workflow and template JSON import/export with trust-boundary stripping
2026-06-04 23:16:46 -07:00
gsxdsm
d8ff8db759
feat(core,dashboard): lazy idempotent legacy-step migration into workflow templates
2026-06-04 22:33:25 -07:00
gsxdsm
0418730244
fix(i18n): restore catalog keys pruned by i18n:extract; keep only additive editor keys
2026-06-04 21:18:48 -07:00
gsxdsm
7e239e257f
feat(dashboard): workflow editor onboarding and empty states
2026-06-04 21:13:13 -07:00
gsxdsm
d382d51c75
feat(dashboard): one-click auto-layout respecting column bands
2026-06-04 21:00:52 -07:00
gsxdsm
5a499ea212
feat(dashboard): workflow editor dialogs, inline rename, and dirty-state guard
2026-06-04 20:51:24 -07:00
gsxdsm
f67a2542b9
feat(dashboard): node/edge deletion with safe cascade semantics
2026-06-04 19:45:44 -07:00
gsxdsm
ffc4d8a6ed
feat(dashboard): success/failure edge authoring with cycle guard and interpreter-only banner
2026-06-04 19:35:34 -07:00
gsxdsm
297a00d3de
feat(dashboard): redesign workflow nodes as card-style with config summaries
2026-06-04 19:26:55 -07:00
gsxdsm
3aa8d2d28b
feat(dashboard): flag-gated multi-lane board — lane per workflow, trait-keyed columns, typed drag rejections, hold promote (U9)
2026-06-04 01:49:51 -07:00
gsxdsm
e703bdd608
feat(i18n): add Korean locale + localized READMEs with language switcher
...
- ko added to SUPPORTED_LOCALES and every enumeration site (config,
settings enum, help text, tests); Korean catalogs authored for all
current keys; CLI bundles regenerated for 6 locales; 한국어 endonym
- README translated into zh-CN, zh-TW, fr, es, ko; every README carries
a language-switcher line and the localized ones note that English is
canonical
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 17:33:16 -07:00
gsxdsm
75213bbb08
fix(i18n): address PR review feedback
...
- config: explicit Hans script wins over HK/MO region (zh-Hans-HK -> zh-CN),
with regression tests for script-vs-region precedence
- dashboard i18n: detection.caches [] so the detector's init-time auto-persist
can't masquerade as a user choice and suppress server-settings hydration
- LanguageSelector: role=group (radiogroup conflicted with aria-pressed)
- bin: validate --lang against SUPPORTED_LOCALES (fail loudly, not silent
fallback); help text clarifies the flag is terminal-UI-only
- cli i18n test: assert a real fr catalog lookup (defaultValue could mask a
catalog that never loaded); comment the async changeLanguage re-init seam
- assert-locale-chunks: only dirs containing common.json count as locales
- plan doc: merge duplicate Ink 6.8->7.0 risk bullets
- AGENTS.md/solution doc: frontmatter field list + normalizer excerpt synced
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 12:29:02 -07:00
gsxdsm
4f6013ff3a
test+refactor(i18n): close code-review residuals
...
- Extract a shared normalizeToSupportedLocale helper in @fusion/i18n used by
both the CLI env detection and the dashboard navigator detection
(convertDetectedLanguage), fixing multi-subtag navigator tags (zh-Hans-CN)
and unifying Chinese script resolution.
- Add a cross-tab storage listener to useLanguage so a language change in one
tab propagates to others.
- Dedup the namespace lists into packages/i18n/namespaces.json, consumed by
config.ts and all three build scripts (no more 3-way drift risk).
- Add tests: dashboard i18n/index.ts (document.lang mirror, init non-blocking),
useLanguage concurrent-hydration race + cross-tab adoption,
normalizeToSupportedLocale, namespace-source consistency.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 09:03:16 -07:00
gsxdsm
9072d71306
feat(i18n): add @fusion/i18n package, catalogs, and i18next-cli tooling (U2)
...
Create the @fusion/i18n package as the authored source-of-truth: shared
i18next config (namespace split, script-aware zh-CN/zh-TW fallback, plural
setup), en base catalogs, and a generated CLI static-import map so the
terminal surface is drop-in for new locales. Add the i18next-cli workflow
(extract/sync/types/status/lint) wired as root i18n:* scripts, install the
i18next stack into dashboard + CLI, strip @fusion/i18n from the published CLI
manifest, gitignore the generated dashboard catalog tree, and add a changeset.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-03 08:00:31 -07:00