feat(FN-2601): merge fusion/fn-2601 (auto-resolved)

- test(FN-2601): complete Step 3 — cover updated default copy
- feat(FN-2601): complete Step 2 — polish intro styling
- feat(FN-2601): complete Step 1 — update models tab copy
This commit is contained in:
Fusion
2026-04-26 11:39:08 -07:00
committed by gsxdsm
parent 4cfb502c3d
commit db58f29abc
3 changed files with 26 additions and 3 deletions

View File

@@ -10,6 +10,9 @@
.model-selector-intro {
color: var(--text-muted);
font-size: 13px;
line-height: 1.5;
border-left: var(--space-xs) solid var(--todo);
padding-left: var(--space-md);
margin-bottom: var(--space-lg);
}
@@ -23,7 +26,7 @@
.model-selector-error {
padding: var(--space-lg);
background: rgba(248, 81, 73, 0.1);
background: color-mix(in srgb, var(--color-error) 10%, transparent);
color: var(--color-error);
border-radius: var(--radius);
font-size: 13px;

View File

@@ -416,7 +416,7 @@ export function ModelSelectorTab({ task, addToast, onTaskUpdated, settings }: Mo
<div className="model-selector-tab">
<h4>Model Configuration</h4>
<p className="model-selector-intro">
Override the AI models used for this task. When not specified, global default settings are used.
Override the AI models used for this task. When not specified, project or global defaults are used.
</p>
{modelsLoading ? (
@@ -571,7 +571,7 @@ export function ModelSelectorTab({ task, addToast, onTaskUpdated, settings }: Mo
<div className="model-selector-status">
{executorUsingDefault && validatorUsingDefault && planningUsingDefault && savedThinking === null
? "Using global default models."
? "Using project or global default models."
: "Model settings are up to date."}
</div>
</>

View File

@@ -127,6 +127,26 @@ describe("ModelSelectorTab", () => {
expect(screen.queryByText("Reset")).not.toBeInTheDocument();
});
it("shows updated intro copy mentioning project or global defaults", async () => {
render(<ModelSelectorTab task={FAKE_TASK} addToast={mockAddToast} />);
await waitForSelectors();
expect(
screen.getByText(
"Override the AI models used for this task. When not specified, project or global defaults are used.",
),
).toBeInTheDocument();
});
it("shows updated status copy when all selections use defaults", async () => {
render(<ModelSelectorTab task={FAKE_TASK} addToast={mockAddToast} />);
await waitForSelectors();
expect(screen.getByText("Using project or global default models.")).toBeInTheDocument();
});
it("shows 'Using default' when no model overrides are set", async () => {
render(<ModelSelectorTab task={FAKE_TASK} addToast={mockAddToast} />);