From a348428f32f2023bda8a83c960d00c94d4585955 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sat, 18 Jul 2026 18:19:12 -0700 Subject: [PATCH] FN-8335: surface settings defaults in help tips Expose default and inheritance descriptions through consistent Settings help affordances. - Move report-mode and per-action override descriptions into accessible help tips - Cover default, override reset, and embedded PostgreSQL connection-cap help text - Keep the settings-default description inventory aligned with rendered copy Files changed: .../__tests__/SettingsModal.general.test.tsx | 37 ++++++++++++++++++++++ .../settings/sections/GeneralSection.tsx | 28 +++++++++------- .../settings-default-descriptions.test.tsx | 13 ++++---- 3 files changed, 60 insertions(+), 18 deletions(-) Fusion-Task-Id: FN-8335 Fusion-Task-Lineage: 7a8711be-8559-4799-afcd-8f22ac3adc2b Co-authored-by: Fusion (runfusion.ai) --- .../__tests__/SettingsModal.general.test.tsx | 37 +++++++++++++++++++ .../settings/sections/GeneralSection.tsx | 28 ++++++++------ .../settings-default-descriptions.test.tsx | 13 +++---- 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx b/packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx index d823082126..4062ecc171 100644 --- a/packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx +++ b/packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx @@ -1347,6 +1347,43 @@ describe("SettingsModal", () => { })); }); + it("renders report-mode default help across unset, populated, and reset action overrides", async () => { + renderModal({ initialSection: "general" }); + await waitForSettingsModalReady(); + + const reportMode = screen.getByLabelText("In-app report mode") as HTMLSelectElement; + expect(reportMode).toHaveValue("draft-review"); + expect(screen.getByTestId("settings-help-reportMode")).toBeInTheDocument(); + expect(screen.getByText(/Default: draft-review \(operator reviews a draft before filing\)/i).closest(".settings-help-bubble")).toBeTruthy(); + + const actionLabels = ["Bug", "Feedback", "Idea", "Help"]; + const actionSelects = actionLabels.map((action) => screen.getByLabelText(`${action} report override`) as HTMLSelectElement); + for (const select of actionSelects) expect(select).toHaveValue(""); + for (const action of ["bug", "feedback", "idea", "help"]) { + expect(screen.getByTestId(`settings-help-reportModeByAction-${action}`)).toBeInTheDocument(); + } + const overrideHelp = screen.getAllByText(/No default — unset actions inherit reportMode/i); + expect(overrideHelp).toHaveLength(4); + for (const help of overrideHelp) expect(help.closest(".settings-help-bubble")).toBeTruthy(); + + fireEvent.change(actionSelects[0], { target: { value: "auto-file" } }); + expect(actionSelects[0]).toHaveValue("auto-file"); + expect(screen.getAllByText(/No default — unset actions inherit reportMode/i)).toHaveLength(4); + + fireEvent.change(actionSelects[0], { target: { value: "" } }); + for (const select of actionSelects) expect(select).toHaveValue(""); + expect(screen.getAllByText(/No default — unset actions inherit reportMode/i)).toHaveLength(4); + }); + + it("renders embedded PostgreSQL connection-cap help from the English locale", async () => { + renderModal({ initialSection: "backups-global" }); + await waitForSettingsModalReady(); + + expect(screen.getByLabelText("Embedded PostgreSQL connection cap")).toHaveValue(500); + expect(screen.getByTestId("settings-help-embeddedPostgresMaxConnections")).toBeInTheDocument(); + expect(screen.getByText("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.").closest(".settings-help-bubble")).toBeTruthy(); + }); + it("saves ephemeral agent toggle in project settings payload", async () => { renderModal({ initialSection: "general" }); await waitForSettingsModalReady(); diff --git a/packages/dashboard/app/components/settings/sections/GeneralSection.tsx b/packages/dashboard/app/components/settings/sections/GeneralSection.tsx index 6a969a849d..08e58b3d89 100644 --- a/packages/dashboard/app/components/settings/sections/GeneralSection.tsx +++ b/packages/dashboard/app/components/settings/sections/GeneralSection.tsx @@ -299,21 +299,28 @@ export function GeneralSection({ form, setForm, projectId, addToast, prefixError A privacy-safe draft review remains the project default, while each of the four guided report actions can explicitly opt into direct filing. Persist overrides as one map so the pipeline resolves them consistently. + + FNXC:SettingsDefaults 2026-07-17-13:55: + FN-8335 restores FN-7505 default-value parity for reportMode and reportModeByAction. + Keep their translated default and inherit descriptions in SettingsHelpTip rather than inline + paragraphs, so every report control exposes the shared accessible help affordance. */} - {/* - 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).")} +
-

{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) => ( -