diff --git a/packages/dashboard/app/components/settings/sections/GeneralSection.tsx b/packages/dashboard/app/components/settings/sections/GeneralSection.tsx
index 3df2fbf47c..1058c78b1f 100644
--- a/packages/dashboard/app/components/settings/sections/GeneralSection.tsx
+++ b/packages/dashboard/app/components/settings/sections/GeneralSection.tsx
@@ -280,14 +280,20 @@ export function GeneralSection({ form, setForm, projectId, addToast, prefixError
the four guided report actions can explicitly opt into direct filing.
Persist overrides as one map so the pipeline resolves them consistently.
*/}
-
+ {/*
+ FNXC:ReportPipeline 2026-07-18-12:40:
+ FN-8277 report mode is a plain Settings control; bind help to i18n paths that state the
+ draft-review default and the unset per-action override so settings-default-descriptions stays green.
+ */}
+
+
{t("settings.general.reportModeHelp", "How in-app bug/feedback/idea/help reports are filed. Default: draft-review (operator reviews a draft before filing).")}
{(["bug", "feedback", "idea", "help"] as const).map((action) => (
))}
+
{t("settings.general.reportModeByActionHelp", "Optional per-action override of the project report mode for bug, feedback, idea, or help. No default — unset actions inherit reportMode.")}
{/*
FNXC:SettingsGeneral 2026-07-15-17:35:
diff --git a/packages/dashboard/app/components/settings/sections/__tests__/settings-default-descriptions.test.tsx b/packages/dashboard/app/components/settings/sections/__tests__/settings-default-descriptions.test.tsx
index 71cc8610d6..5b27b45dab 100644
--- a/packages/dashboard/app/components/settings/sections/__tests__/settings-default-descriptions.test.tsx
+++ b/packages/dashboard/app/components/settings/sections/__tests__/settings-default-descriptions.test.tsx
@@ -163,6 +163,12 @@ const SETTING_DESCRIPTION_KEYS: Record = {
memoryBackupRetention: "backups.numberOfMemoryBackupsToKeepOldestAre",
memoryBackupDir: "backups.directoryForMemoryBackupsRelativeToProjectRoot",
memoryBackupScope: "backups.memoryBackupScopeHint",
+ /*
+ FNXC:EmbeddedPostgres 2026-07-18-12:40:
+ feat(postgres) surfaces embeddedPostgresMaxConnections in DatabaseBackupsSection advanced
+ disclosure; map the existing help string so the DEFAULT_SETTINGS inventory stays complete.
+ */
+ embeddedPostgresMaxConnections: "database.embeddedConnectionCapHelp",
// MemorySection
memoryEnabled: "memory.agentsGetMemorySearchMemoryGetAndMemory",
memoryAutoSummarizeEnabled: "memory.automaticallyCompactMemoryWhenItExceedsTheThreshold",
@@ -255,6 +261,14 @@ const SETTING_DESCRIPTION_KEYS: Record = {
// GeneralSection beside the other import-scoped GitHub settings.
githubImportAutoTranslate: "general.autoTranslateImportedIssuesHelp",
importTranslateTargetLocale: "general.translationTargetLanguageHelp",
+ /*
+ FNXC:ReportPipeline 2026-07-18-12:40:
+ FN-8277 surfaces reportMode + per-action overrides in GeneralSection; map them here so
+ DEFAULT_SETTINGS bookkeeping requires a default-stating description (draft-review project default;
+ reportModeByAction is unset until an action opts in).
+ */
+ reportMode: "general.reportModeHelp",
+ reportModeByAction: "general.reportModeByActionHelp",
githubTrackingDedupEnabled: "general.whenEnabledFusionChecksOpenAndClosedIssues",
githubTrackingEnabledByDefault: "general.offDefault",
sessionAdvisorEnabledByDefault: "general.offDefault",
diff --git a/packages/engine/src/__tests__/executor-prompt.test.ts b/packages/engine/src/__tests__/executor-prompt.test.ts
index f2102f84ee..47153cc023 100644
--- a/packages/engine/src/__tests__/executor-prompt.test.ts
+++ b/packages/engine/src/__tests__/executor-prompt.test.ts
@@ -2647,7 +2647,14 @@ describe("fn_task_update bare-call guard (P1 api-contract)", () => {
expect(text).not.toContain("fn_task_update requires at least one of");
});
- it("narrates a store-accepted skipped transition exactly once", async () => {
+ it("accepts a store-accepted skipped transition without tool-side agent-log narration", async () => {
+ /*
+ FNXC:ProactiveChatStatus 2026-07-18-12:40:
+ FN-8064 moved step start/success/skip narration into TaskStore.updateStep (merge-queue-ops)
+ so workflow projection, review auto-approval, and self-healing share the same chat rows.
+ fn_task_update only reports progress text; appendAgentLog is store-owned when
+ proactiveTaskChatEnabled is true. Covered by packages/core proactive-step-status.pg.test.ts.
+ */
const { store, tool } = makeTool();
store.updateStep.mockResolvedValue(createMockTaskDetail({
steps: [{ name: "No code change needed", status: "skipped", dependsOn: [] }],
@@ -2656,14 +2663,10 @@ describe("fn_task_update bare-call guard (P1 api-contract)", () => {
const result = await tool.execute("call-1", { step: 0, status: "skipped" });
expect(result.isError).not.toBe(true);
- expect(store.appendAgentLog).toHaveBeenCalledTimes(1);
- expect(store.appendAgentLog).toHaveBeenCalledWith(
- "FN-001",
- "Step 0 was skipped — No code change needed.",
- "status",
- undefined,
- "executor",
- );
+ const text = result.content[0]?.type === "text" ? result.content[0].text : "";
+ expect(text).toContain("Step 0");
+ expect(text).toContain("skipped");
+ expect(store.appendAgentLog).not.toHaveBeenCalled();
});
});
diff --git a/packages/engine/src/__tests__/gating-classifications.test.ts b/packages/engine/src/__tests__/gating-classifications.test.ts
index f696bef45c..8513bb16d1 100644
--- a/packages/engine/src/__tests__/gating-classifications.test.ts
+++ b/packages/engine/src/__tests__/gating-classifications.test.ts
@@ -144,6 +144,8 @@ describe("gating-classifications parity", () => {
"fn_memory_append",
"fn_memory_get",
"fn_memory_search",
+ "fn_mission_list",
+ "fn_mission_show",
"fn_post_room_message",
"fn_read_evaluations",
"fn_read_messages",
diff --git a/packages/engine/src/__tests__/heartbeat-executor.test.ts b/packages/engine/src/__tests__/heartbeat-executor.test.ts
index 07e3b6ec7f..5a02b78356 100644
--- a/packages/engine/src/__tests__/heartbeat-executor.test.ts
+++ b/packages/engine/src/__tests__/heartbeat-executor.test.ts
@@ -3272,10 +3272,13 @@ describe("executeHeartbeat", () => {
/*
FNXC:TaskAgentLog 2026-07-16-08:05:
Heartbeat customTools include FN-8058 fn_task_logs_read after fn_task_log so durable agents can read agent-log.jsonl. Count stays exact so new tools fail loudly.
+
+ FNXC:MissionToolParity 2026-07-18-12:40:
+ FN-8294 adds the full Mission hierarchy surface (15 tools) to task-scoped heartbeat sessions via createMissionTools, after agent provisioning and before goal retrieval. Count rose 43→58; keep exact so new tools fail loudly.
*/
- // fn_artifact_register/list/view, agent config/provisioning, goals/evaluations/identity,
+ // fn_artifact_register/list/view, agent config/provisioning, mission hierarchy, goals/evaluations/identity,
// task read discovery (incl. logs_read), workflow discovery/authoring, task promotion, bounded research, clarification, web fetch, memory, and fn_heartbeat_done.
- expect(callArgs.customTools).toHaveLength(43);
+ expect(callArgs.customTools).toHaveLength(58);
expect(callArgs.customTools!.map((tool) => tool.name)).toEqual([
"fn_task_create",
"fn_task_log",
@@ -3292,6 +3295,21 @@ describe("executeHeartbeat", () => {
"fn_update_agent_config",
"fn_agent_create",
"fn_agent_delete",
+ "fn_mission_list",
+ "fn_mission_show",
+ "fn_mission_create",
+ "fn_mission_update",
+ "fn_mission_delete",
+ "fn_milestone_add",
+ "fn_milestone_update",
+ "fn_milestone_delete",
+ "fn_slice_add",
+ "fn_slice_activate",
+ "fn_slice_delete",
+ "fn_feature_add",
+ "fn_feature_update",
+ "fn_feature_delete",
+ "fn_feature_link_task",
"fn_goal_list",
"fn_goal_show",
"fn_read_evaluations",
diff --git a/packages/i18n/locales/en/app.json b/packages/i18n/locales/en/app.json
index 38a984df84..f57670ac66 100644
--- a/packages/i18n/locales/en/app.json
+++ b/packages/i18n/locales/en/app.json
@@ -5963,7 +5963,9 @@
"disabledFusionWorkflowsAreHiddenFromWorkflow": "Disabled Fusion workflows are hidden from workflow pickers. Existing tasks that already use one continue to resolve. Default: all built-in workflows enabled (unset).",
"aiUndoTaskWorkflow": "AI-undo task workflow",
"aiUndoTaskWorkflowInherit": "Inherit project default workflow",
- "aiUndoTaskWorkflowHelp": "Workflow assigned to AI-undo (revert) tasks, which reverse already-shipped code and warrant stricter review. Choose \"Inherit project default workflow\" to leave them on the project default. Default: review-heavy."
+ "aiUndoTaskWorkflowHelp": "Workflow assigned to AI-undo (revert) tasks, which reverse already-shipped code and warrant stricter review. Choose \"Inherit project default workflow\" to leave them on the project default. Default: review-heavy.",
+ "reportModeHelp": "How in-app bug/feedback/idea/help reports are filed. Default: draft-review (operator reviews a draft before filing).",
+ "reportModeByActionHelp": "Optional per-action override of the project report mode for bug, feedback, idea, or help. No default — unset actions inherit reportMode."
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": " and shows update notices in the CLI and dashboard. Cadence is governed by the frequency below. Default: enabled. ",
@@ -6815,6 +6817,12 @@
"resetAllProjectAction": "Reset all project settings",
"menuResetSuccess": "{{section}} settings reset to defaults",
"allProjectResetSuccess": "All project settings reset to defaults"
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Maximum server connections for Fusion's embedded PostgreSQL. Applies after restarting Fusion. Range: 32–2,000. Default: 500. External PostgreSQL uses its provider's connection limit.",
+ "embeddedConnectionCap": "Embedded PostgreSQL connection cap",
+ "embeddedConnectionCapError": "Enter a value between 32 and 2,000.",
+ "advanced": "Advanced database settings"
}
},
"setup": {
diff --git a/packages/i18n/locales/es/app.json b/packages/i18n/locales/es/app.json
index 9e8cd1e2d3..e6cd435e19 100644
--- a/packages/i18n/locales/es/app.json
+++ b/packages/i18n/locales/es/app.json
@@ -1580,6 +1580,43 @@
},
"title": ""
},
+ "portability": {
+ "title": "Exportación / importación de organización",
+ "description": "Descarga o previsualiza un paquete de organización sin secretos.",
+ "export": {
+ "action": "Exportar paquete de organización",
+ "working": "Exportando…",
+ "success": "Exportación lista",
+ "error": "Error al exportar"
+ },
+ "import": {
+ "label": "JSON del paquete de organización",
+ "placeholder": "Pega un paquete de organización sin secretos",
+ "preview": "Vista previa de importación",
+ "previewing": "Generando vista previa…",
+ "previewReady": "Vista previa lista. Confirma para aplicar este paquete.",
+ "apply": "Aplicar importación",
+ "importing": "Importando…",
+ "invalid": "Pega un documento JSON de paquete de organización válido",
+ "error": "No se pudo previsualizar o importar el paquete",
+ "confirmTitle": "¿Importar paquete de organización?",
+ "confirmMessage": "Esto aplica la configuración previsualizada a este proyecto.",
+ "confirmApply": "Importar paquete"
+ },
+ "versions": {
+ "title": "Versiones de configuración",
+ "description": "Restaura cualquier versión de configuración del proyecto registrada.",
+ "loading": "Cargando versiones…",
+ "empty": "Aún no hay versiones de configuración.",
+ "loadError": "No se pudieron cargar las versiones de configuración",
+ "rollback": "Revertir",
+ "rollingBack": "Revirtiendo…",
+ "rollbackError": "No se pudo revertir la configuración",
+ "confirmTitle": "¿Revertir la configuración?",
+ "confirmMessage": "¿Restaurar esta versión? La reversión se registra como una nueva versión.",
+ "confirmRollback": "Revertir"
+ }
+ },
"ecosystem": {
"breadthTitle": "",
"empty": "",
@@ -5902,7 +5939,9 @@
"ephemeralAgentTaskCreationPolicyHint": "Sin valor predeterminado — si no se define, se usa Permitir. «Tras validación» envía una propuesta a tu buzón para aprobar con un clic; Denegar rechaza la creación de tareas de seguimiento.",
"ephemeralAgentTaskCreationPolicyAllow": "Permitir",
"ephemeralAgentTaskCreationPolicyUponValidation": "Tras validación",
- "ephemeralAgentTaskCreationPolicyDeny": "Denegar"
+ "ephemeralAgentTaskCreationPolicyDeny": "Denegar",
+ "reportModeHelp": "Cómo se archivan los informes in-app (error, feedback, idea, ayuda). Predeterminado: draft-review (el operador revisa un borrador antes de archivar).",
+ "reportModeByActionHelp": "Anulación opcional por acción del modo de informe del proyecto (error, feedback, idea o ayuda). Sin valor predeterminado: las acciones no definidas heredan reportMode."
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6768,6 +6807,12 @@
"resetAllProjectAction": "",
"menuResetSuccess": "",
"allProjectResetSuccess": ""
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Máximo de conexiones de servidor para el PostgreSQL integrado de Fusion. Se aplica al reiniciar Fusion. Rango: 32–2.000. Predeterminado: 500. PostgreSQL externo usa el límite de su proveedor.",
+ "embeddedConnectionCap": "Límite de conexiones de PostgreSQL integrado",
+ "embeddedConnectionCapError": "Introduce un valor entre 32 y 2.000.",
+ "advanced": "Ajustes avanzados de base de datos"
}
},
"setup": {
diff --git a/packages/i18n/locales/fr/app.json b/packages/i18n/locales/fr/app.json
index d6fbc8950d..5e82374927 100644
--- a/packages/i18n/locales/fr/app.json
+++ b/packages/i18n/locales/fr/app.json
@@ -1580,6 +1580,43 @@
},
"title": ""
},
+ "portability": {
+ "title": "Export / import d'organisation",
+ "description": "Téléchargez ou prévisualisez un bundle d'organisation expurgé des secrets.",
+ "export": {
+ "action": "Exporter le bundle d'organisation",
+ "working": "Export en cours…",
+ "success": "Export prêt",
+ "error": "Échec de l'export"
+ },
+ "import": {
+ "label": "JSON du bundle d'organisation",
+ "placeholder": "Collez un bundle d'organisation expurgé des secrets",
+ "preview": "Prévisualiser l'import",
+ "previewing": "Prévisualisation…",
+ "previewReady": "Aperçu prêt. Confirmez pour appliquer ce bundle.",
+ "apply": "Appliquer l'import",
+ "importing": "Import en cours…",
+ "invalid": "Collez un document JSON de bundle d'organisation valide",
+ "error": "Impossible de prévisualiser ou d'importer le bundle",
+ "confirmTitle": "Importer le bundle d'organisation ?",
+ "confirmMessage": "Cela applique la configuration prévisualisée à ce projet.",
+ "confirmApply": "Importer le bundle"
+ },
+ "versions": {
+ "title": "Versions de configuration",
+ "description": "Restaurez n'importe quelle version de configuration de projet enregistrée.",
+ "loading": "Chargement des versions…",
+ "empty": "Aucune version de configuration pour l'instant.",
+ "loadError": "Impossible de charger les versions de configuration",
+ "rollback": "Revenir en arrière",
+ "rollingBack": "Retour en cours…",
+ "rollbackError": "Impossible de revenir en arrière sur la configuration",
+ "confirmTitle": "Revenir à une configuration antérieure ?",
+ "confirmMessage": "Restaurer cette version ? Le retour est enregistré comme une nouvelle version.",
+ "confirmRollback": "Revenir en arrière"
+ }
+ },
"ecosystem": {
"breadthTitle": "",
"empty": "",
@@ -5902,7 +5939,9 @@
"ephemeralAgentTaskCreationPolicyHint": "Pas de valeur par défaut — non défini revient à Autoriser. « Sur validation » envoie une proposition à votre boîte pour une approbation en un clic ; Refuser bloque la création de tâches de suivi.",
"ephemeralAgentTaskCreationPolicyAllow": "Autoriser",
"ephemeralAgentTaskCreationPolicyUponValidation": "Sur validation",
- "ephemeralAgentTaskCreationPolicyDeny": "Refuser"
+ "ephemeralAgentTaskCreationPolicyDeny": "Refuser",
+ "reportModeHelp": "Comment les rapports in-app (bug, feedback, idée, aide) sont déposés. Par défaut : draft-review (l'opérateur revoit un brouillon avant dépôt).",
+ "reportModeByActionHelp": "Surcharge optionnelle par action du mode de rapport du projet (bug, feedback, idée ou aide). Aucune valeur par défaut — les actions non définies héritent de reportMode."
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6768,6 +6807,12 @@
"resetAllProjectAction": "",
"menuResetSuccess": "",
"allProjectResetSuccess": ""
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Nombre maximal de connexions serveur pour le PostgreSQL embarqué de Fusion. Appliqué après redémarrage de Fusion. Plage : 32–2 000. Par défaut : 500. PostgreSQL externe utilise la limite de son fournisseur.",
+ "embeddedConnectionCap": "Plafond de connexions PostgreSQL embarqué",
+ "embeddedConnectionCapError": "Saisissez une valeur entre 32 et 2 000.",
+ "advanced": "Paramètres de base de données avancés"
}
},
"setup": {
diff --git a/packages/i18n/locales/ko/app.json b/packages/i18n/locales/ko/app.json
index 884fa6e2ec..857231b524 100644
--- a/packages/i18n/locales/ko/app.json
+++ b/packages/i18n/locales/ko/app.json
@@ -1580,6 +1580,43 @@
},
"title": ""
},
+ "portability": {
+ "title": "조직 내보내기 / 가져오기",
+ "description": "비밀이 제거된 조직 번들을 다운로드하거나 미리 봅니다.",
+ "export": {
+ "action": "조직 번들 내보내기",
+ "working": "내보내는 중…",
+ "success": "내보내기 준비됨",
+ "error": "내보내기 실패"
+ },
+ "import": {
+ "label": "조직 번들 JSON",
+ "placeholder": "비밀이 제거된 조직 번들을 붙여넣으세요",
+ "preview": "가져오기 미리보기",
+ "previewing": "미리보는 중…",
+ "previewReady": "미리보기가 준비되었습니다. 이 번들을 적용하려면 확인하세요.",
+ "apply": "가져오기 적용",
+ "importing": "가져오는 중…",
+ "invalid": "유효한 조직 번들 JSON 문서를 붙여넣으세요",
+ "error": "번들을 미리보거나 가져올 수 없습니다",
+ "confirmTitle": "조직 번들을 가져올까요?",
+ "confirmMessage": "미리본 구성을 이 프로젝트에 적용합니다.",
+ "confirmApply": "번들 가져오기"
+ },
+ "versions": {
+ "title": "구성 버전",
+ "description": "기록된 프로젝트 구성 버전을 복원합니다.",
+ "loading": "버전 불러오는 중…",
+ "empty": "아직 구성 버전이 없습니다.",
+ "loadError": "구성 버전을 불러올 수 없습니다",
+ "rollback": "롤백",
+ "rollingBack": "롤백 중…",
+ "rollbackError": "구성을 롤백할 수 없습니다",
+ "confirmTitle": "구성을 롤백할까요?",
+ "confirmMessage": "이 버전을 복원할까요? 롤백은 새 버전으로 기록됩니다.",
+ "confirmRollback": "롤백"
+ }
+ },
"ecosystem": {
"breadthTitle": "",
"empty": "",
@@ -5902,7 +5939,9 @@
"ephemeralAgentTaskCreationPolicyHint": "기본값 없음 — 미설정 시 허용으로 폴백합니다. 검증 후는 받은편지함으로 제안을 보내 원클릭 승인합니다. 거부는 후속 작업 생성을 거부합니다.",
"ephemeralAgentTaskCreationPolicyAllow": "허용",
"ephemeralAgentTaskCreationPolicyUponValidation": "검증 후",
- "ephemeralAgentTaskCreationPolicyDeny": "거부"
+ "ephemeralAgentTaskCreationPolicyDeny": "거부",
+ "reportModeHelp": "인앱 버그/피드백/아이디어/도움말 리포트 제출 방식. 기본값: draft-review(제출 전 운영자가 초안 검토).",
+ "reportModeByActionHelp": "버그·피드백·아이디어·도움말 등 작업별 프로젝트 리포트 모드 선택 재정의. 기본값 없음 — 미설정 작업은 reportMode를 상속합니다."
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6768,6 +6807,12 @@
"resetAllProjectAction": "",
"menuResetSuccess": "",
"allProjectResetSuccess": ""
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Fusion 내장 PostgreSQL의 최대 서버 연결 수. Fusion 재시작 후 적용. 범위: 32–2,000. 기본값: 500. 외부 PostgreSQL은 제공자 연결 한도를 사용합니다.",
+ "embeddedConnectionCap": "내장 PostgreSQL 연결 상한",
+ "embeddedConnectionCapError": "32에서 2,000 사이의 값을 입력하세요.",
+ "advanced": "고급 데이터베이스 설정"
}
},
"setup": {
diff --git a/packages/i18n/locales/zh-CN/app.json b/packages/i18n/locales/zh-CN/app.json
index 8649d08ca4..a985303b50 100644
--- a/packages/i18n/locales/zh-CN/app.json
+++ b/packages/i18n/locales/zh-CN/app.json
@@ -1580,6 +1580,43 @@
},
"title": ""
},
+ "portability": {
+ "title": "组织导出 / 导入",
+ "description": "下载或预览已清除机密的组织配置包。",
+ "export": {
+ "action": "导出组织包",
+ "working": "正在导出…",
+ "success": "导出就绪",
+ "error": "导出失败"
+ },
+ "import": {
+ "label": "组织包 JSON",
+ "placeholder": "粘贴已清除机密的组织包",
+ "preview": "预览导入",
+ "previewing": "正在预览…",
+ "previewReady": "预览就绪。确认后应用此包。",
+ "apply": "应用导入",
+ "importing": "正在导入…",
+ "invalid": "请粘贴有效的组织包 JSON 文档",
+ "error": "无法预览或导入包",
+ "confirmTitle": "导入组织包?",
+ "confirmMessage": "这会将预览的配置应用到此项目。",
+ "confirmApply": "导入包"
+ },
+ "versions": {
+ "title": "配置版本",
+ "description": "恢复任意已记录的项目配置版本。",
+ "loading": "正在加载版本…",
+ "empty": "尚无配置版本。",
+ "loadError": "无法加载配置版本",
+ "rollback": "回滚",
+ "rollingBack": "正在回滚…",
+ "rollbackError": "无法回滚配置",
+ "confirmTitle": "回滚配置?",
+ "confirmMessage": "恢复此版本?回滚会记录为新版本。",
+ "confirmRollback": "回滚"
+ }
+ },
"ecosystem": {
"breadthTitle": "",
"empty": "",
@@ -5902,7 +5939,9 @@
"ephemeralAgentTaskCreationPolicyHint": "无默认值 — 未设置时回退为允许。需验证会将提案发送到邮箱供一键批准;拒绝则禁止创建后续任务。",
"ephemeralAgentTaskCreationPolicyAllow": "允许",
"ephemeralAgentTaskCreationPolicyUponValidation": "需验证",
- "ephemeralAgentTaskCreationPolicyDeny": "拒绝"
+ "ephemeralAgentTaskCreationPolicyDeny": "拒绝",
+ "reportModeHelp": "应用内缺陷/反馈/想法/帮助报告的提交方式。默认:draft-review(提交前由操作者审阅草稿)。",
+ "reportModeByActionHelp": "可选的按操作覆盖项目报告模式(缺陷、反馈、想法或帮助)。无默认值 — 未设置的操作继承 reportMode。"
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6768,6 +6807,12 @@
},
"modelPricing": {
"description": ""
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Fusion 嵌入式 PostgreSQL 的最大服务器连接数。重启 Fusion 后生效。范围:32–2,000。默认:500。外部 PostgreSQL 使用其提供方的连接限制。",
+ "embeddedConnectionCap": "嵌入式 PostgreSQL 连接上限",
+ "embeddedConnectionCapError": "请输入 32 到 2,000 之间的值。",
+ "advanced": "高级数据库设置"
}
},
"setup": {
diff --git a/packages/i18n/locales/zh-TW/app.json b/packages/i18n/locales/zh-TW/app.json
index 5b73506939..02d25c394e 100644
--- a/packages/i18n/locales/zh-TW/app.json
+++ b/packages/i18n/locales/zh-TW/app.json
@@ -1580,6 +1580,43 @@
},
"title": ""
},
+ "portability": {
+ "title": "組織匯出 / 匯入",
+ "description": "下載或預覽已清除機密的組織設定包。",
+ "export": {
+ "action": "匯出組織包",
+ "working": "正在匯出…",
+ "success": "匯出就緒",
+ "error": "匯出失敗"
+ },
+ "import": {
+ "label": "組織包 JSON",
+ "placeholder": "貼上已清除機密的組織包",
+ "preview": "預覽匯入",
+ "previewing": "正在預覽…",
+ "previewReady": "預覽就緒。確認後套用此包。",
+ "apply": "套用匯入",
+ "importing": "正在匯入…",
+ "invalid": "請貼上有效的組織包 JSON 文件",
+ "error": "無法預覽或匯入包",
+ "confirmTitle": "匯入組織包?",
+ "confirmMessage": "這會將預覽的設定套用到此專案。",
+ "confirmApply": "匯入包"
+ },
+ "versions": {
+ "title": "設定版本",
+ "description": "還原任意已記錄的專案設定版本。",
+ "loading": "正在載入版本…",
+ "empty": "尚無設定版本。",
+ "loadError": "無法載入設定版本",
+ "rollback": "回滾",
+ "rollingBack": "正在回滾…",
+ "rollbackError": "無法回滾設定",
+ "confirmTitle": "回滾設定?",
+ "confirmMessage": "還原此版本?回滾會記錄為新版本。",
+ "confirmRollback": "回滾"
+ }
+ },
"ecosystem": {
"breadthTitle": "",
"empty": "",
@@ -5902,7 +5939,9 @@
"ephemeralAgentTaskCreationPolicyHint": "無預設值 — 未設定時回退為允許。需驗證會將提案傳送到信箱供一鍵核准;拒絕則禁止建立後續任務。",
"ephemeralAgentTaskCreationPolicyAllow": "允許",
"ephemeralAgentTaskCreationPolicyUponValidation": "需驗證",
- "ephemeralAgentTaskCreationPolicyDeny": "拒絕"
+ "ephemeralAgentTaskCreationPolicyDeny": "拒絕",
+ "reportModeHelp": "應用內缺陷/回饋/想法/說明報告的提交方式。預設:draft-review(提交前由操作者審閱草稿)。",
+ "reportModeByActionHelp": "可選的依操作覆寫專案報告模式(缺陷、回饋、想法或說明)。無預設值 — 未設定的操作繼承 reportMode。"
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6768,6 +6807,12 @@
"resetAllProjectAction": "",
"menuResetSuccess": "",
"allProjectResetSuccess": ""
+ },
+ "database": {
+ "embeddedConnectionCapHelp": "Fusion 內嵌 PostgreSQL 的最大伺服器連線數。重新啟動 Fusion 後生效。範圍:32–2,000。預設:500。外部 PostgreSQL 使用其提供者的連線限制。",
+ "embeddedConnectionCap": "內嵌 PostgreSQL 連線上限",
+ "embeddedConnectionCapError": "請輸入 32 到 2,000 之間的值。",
+ "advanced": "進階資料庫設定"
}
},
"setup": {
diff --git a/plugins/fusion-plugin-quality/vitest.config.ts b/plugins/fusion-plugin-quality/vitest.config.ts
index c3ddd86a55..c5a2e23f18 100644
--- a/plugins/fusion-plugin-quality/vitest.config.ts
+++ b/plugins/fusion-plugin-quality/vitest.config.ts
@@ -31,7 +31,8 @@ export default defineConfig({
},
test: {
include: ["src/**/*.test.{ts,tsx}"],
- exclude: ["**/node_modules/**", "**/dist/**"],
+ // Quarantine ledger: scripts/lib/test-quarantine.json — async-quality-store.pg.test.ts (2026-07-18).
+ exclude: ["**/node_modules/**", "**/dist/**", "src/__tests__/async-quality-store.pg.test.ts"],
environment: "node",
setupFiles: [fileURLToPath(new URL("../../packages/core/src/__test-utils__/vitest-setup.ts", import.meta.url))],
globalSetup: [fileURLToPath(new URL("../../packages/core/src/__test-utils__/vitest-teardown.ts", import.meta.url))],
diff --git a/scripts/lib/test-quarantine.json b/scripts/lib/test-quarantine.json
index ea134afa13..616af42939 100644
--- a/scripts/lib/test-quarantine.json
+++ b/scripts/lib/test-quarantine.json
@@ -10,6 +10,11 @@
"file": "packages/cli/src/commands/__tests__/task-lock-retry.test.ts",
"reason": "Full-suite shard 4 after FN-8271 restore (runs 29648812375 / 29648952207): 5s timeouts / store.getTask not a function under package-lane shard load without product-bug evidence; fake-timer board-write mock recovery remains load-sensitive. Quarantine on sight per AGENTS.md. Mirrored in packages/cli/vitest.config.ts.",
"quarantinedAt": "2026-07-18"
+ },
+ {
+ "file": "plugins/fusion-plugin-quality/src/__tests__/async-quality-store.pg.test.ts",
+ "reason": "Full-suite shard 3 (run 29657633544): 5s timeout + leftover psql child under package-lane load without product-bug evidence; embedded-PG lifecycle remains load-sensitive. Quarantine on sight per AGENTS.md. Mirrored in plugins/fusion-plugin-quality/vitest.config.ts.",
+ "quarantinedAt": "2026-07-18"
}
]
}