fix(ci): restore Full Suite bookkeeping after concurrent main landings (#2316)

## Summary
- Align heartbeat `customTools` expectations with FN-8294 mission
hierarchy tools (43→58).
- Refresh `COORDINATION_EXEMPT_TOOLS` snapshot for `fn_mission_list` /
`fn_mission_show`.
- Backfill `commandCenter.portability.*` for non-en locales and map
`reportMode` / `reportModeByAction` / `embeddedPostgresMaxConnections`
into settings default-description inventory with i18n help text.
- Realign FN-8064 skip-narration unit test with store-owned proactive
chat (no tool-side `appendAgentLog`).
- Quarantine load-sensitive `async-quality-store.pg.test.ts` (5s timeout
+ leftover psql under full-suite shard load; run 29657633544).

## Test plan
- [x] `pnpm --filter @fusion/engine exec vitest run`
gating-classifications + executor-prompt + heartbeat expected-tools case
- [x] `pnpm --filter @fusion/i18n exec vitest run` i18n-gate-coverage +
parity
- [x] `pnpm --filter @fusion/dashboard exec vitest run`
settings-default-descriptions
- [ ] Full Suite all 4 shards green on main after merge

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Settings**
* Added clearer, localized help text for report modes and per-action
overrides, including inheritance behavior.
* Added advanced embedded database connection-limit settings and
validation guidance.

* **Localization**
* Expanded translations for report settings, database tuning, and
organization configuration import/export workflows across supported
languages.

* **Tests & Maintenance**
* Updated test coverage and expectations for expanded tools and
reporting behavior.
  * Quarantined a flaky database-related test.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
gsxdsm
2026-07-18 12:48:13 -07:00
committed by GitHub
parent 88b0db0f4d
commit 17ee1a8040
13 changed files with 308 additions and 25 deletions

View File

@@ -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.
*/}
<label htmlFor="reportMode">In-app report mode</label>
{/*
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.
*/}
<label htmlFor="reportMode">{t("settings.general.reportMode", "In-app report mode")}</label>
<select id="reportMode" value={form.reportMode ?? "draft-review"} onChange={(e) => setForm((f) => ({ ...f, reportMode: e.target.value as "draft-review" | "auto-file" }))}>
<option value="draft-review">Review draft before filing</option>
<option value="auto-file">File automatically</option>
<option value="draft-review">{t("settings.general.reportModeDraftReview", "Review draft before filing")}</option>
<option value="auto-file">{t("settings.general.reportModeAutoFile", "File automatically")}</option>
</select>
<p className="form-help">{t("settings.general.reportModeHelp", "How in-app bug/feedback/idea/help reports are filed. Default: draft-review (operator reviews a draft before filing).")}</p>
{(["bug", "feedback", "idea", "help"] as const).map((action) => (
<label key={action} htmlFor={`reportMode-${action}`}>
{`${action[0].toUpperCase()}${action.slice(1)} report override`}
{t(`settings.general.reportModeOverride.${action}`, `${action[0].toUpperCase()}${action.slice(1)} report override`)}
<select id={`reportMode-${action}`} value={form.reportModeByAction?.[action] ?? ""} onChange={(e) => setForm((current) => {
const reportModeByAction = { ...current.reportModeByAction };
const selected = e.target.value as "" | "draft-review" | "auto-file";
@@ -295,12 +301,13 @@ export function GeneralSection({ form, setForm, projectId, addToast, prefixError
else delete reportModeByAction[action as ReportActionType];
return { ...current, reportModeByAction: Object.keys(reportModeByAction).length ? reportModeByAction : undefined };
})}>
<option value="">Use project default</option>
<option value="draft-review">Review draft before filing</option>
<option value="auto-file">File automatically</option>
<option value="">{t("settings.general.reportModeUseProjectDefault", "Use project default")}</option>
<option value="draft-review">{t("settings.general.reportModeDraftReview", "Review draft before filing")}</option>
<option value="auto-file">{t("settings.general.reportModeAutoFile", "File automatically")}</option>
</select>
</label>
))}
<p className="form-help">{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.")}</p>
</div>
{/*
FNXC:SettingsGeneral 2026-07-15-17:35:

View File

@@ -163,6 +163,12 @@ const SETTING_DESCRIPTION_KEYS: Record<string, string> = {
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<string, string> = {
// 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",

View File

@@ -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();
});
});

View File

@@ -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",

View File

@@ -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",

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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))],

View File

@@ -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"
}
]
}