Why
Two concepts have been conflated under "favorites" in the workbench's evolution:
- A favorited resource — URI + method + a request shape. Protocol-independent, cross-workflow. ("This /pets endpoint matters to me.")
- A named workflow configuration — a complete setup for one workflow. Bench params, scan profile, mock setup, parallel-session config. Workflow-specific. ("My standard 100-session p95 bench against staging.")
Concept #1 lives at the cross-workflow level — split out to #139's Home/Launchpad design.
Concept #2 lives per-workflow. This issue is about #2.
Proposal — per-mode "Saved Configs" (Profiles / Presets / Templates)
Every workflow mode that has a setup form gets a small "Saved configs" affordance:
Storage
Per-mode store under bowire_presets_<mode> (localStorage today; per-workspace store once #116 lands). Each preset entry:
{
"id": "uuid",
"name": "100-session staging p95",
"createdAt": "...",
"lastUsedAt": "...",
"config": { /* mode-specific config blob */ }
}
UI
- A "Save preset…" button at the bottom of each workflow's setup form.
- A picker at the top: "Load preset…" → dropdown of saved configs for this mode.
- A small "★ Set as default" toggle per preset — default config auto-applies on mode entry.
Distinct from favorites
- Favorites = resource markers (cross-workflow, single store,
bowire_favorites).
- Presets = workflow configs (per-mode,
bowire_presets_<mode>).
- Naming uses "preset" / "profile" in the UI — never "favorite" — to avoid confusion.
Acceptance
Composes with
Out of scope
Why
Two concepts have been conflated under "favorites" in the workbench's evolution:
Concept #1 lives at the cross-workflow level — split out to #139's Home/Launchpad design.
Concept #2 lives per-workflow. This issue is about #2.
Proposal — per-mode "Saved Configs" (Profiles / Presets / Templates)
Every workflow mode that has a setup form gets a small "Saved configs" affordance:
Storage
Per-mode store under
bowire_presets_<mode>(localStorage today; per-workspace store once #116 lands). Each preset entry:{ "id": "uuid", "name": "100-session staging p95", "createdAt": "...", "lastUsedAt": "...", "config": { /* mode-specific config blob */ } }UI
Distinct from favorites
bowire_favorites).bowire_presets_<mode>).Acceptance
bowire_presets_<mode>).Composes with
Out of scope