feat(FN-2166): persist dev server script configuration across sessions

- Extend dev server store with config defaults, normalization, and JSON persistence alongside runtime state.
- Add GET/PUT /api/dev-server/config endpoints with strict request validation for nullable fields and preview URLs.
- Add dashboard API helpers plus a useDevServerConfig hook to load and update selected script, source, command, and preview override.
- Update DevServerView and styles to support saved script selection, change/clear actions, and synchronized command/preview inputs.
- Expand dev server store/routes/component tests and document the config endpoint in architecture docs.
This commit is contained in:
Fusion
2026-04-20 11:36:39 -07:00
committed by gsxdsm
parent ca6ed92dd1
commit 42476ec3da
12 changed files with 1096 additions and 229 deletions

View File

@@ -2869,12 +2869,11 @@ describe("TaskStore", () => {
it("includeArchived=false excludes archived tasks; default includes them", async () => {
const keep = await store.createTask({ description: "Stays visible" });
const toArchive = await store.createTask({ description: "Will be archived" });
await store.moveTask(toArchive.id, "todo");
await store.moveTask(toArchive.id, "in-progress");
await store.moveTask(toArchive.id, "in-review");
await store.moveTask(toArchive.id, "done");
await store.archiveTask(toArchive.id);
const toArchive = await store.createTask({ description: "Will be archived", column: "done" });
// This assertion is about list filtering, not branch cleanup.
// Use non-cleanup archiving to avoid invoking git commands in test environments.
await store.archiveTask(toArchive.id, false);
const withArchived = await store.listTasks();
const withoutArchived = await store.listTasks({ includeArchived: false });