-
Notifications
You must be signed in to change notification settings - Fork 0
fix: settings & company page UX polish (12 items) #709
Description
Summary
Batch of UX bugs and improvements identified during manual review of the Settings, Company, Org Chart, and Dashboard pages. All are in the settings/company UI area and should land as a single PR.
Issues
Bugs
1. Advanced toggle does not revert visually on Cancel
- Toggle basic->advanced, dialog appears, click Cancel -- toggle stays visually "on" even though
showAdvancedremainsfalse - Root cause: PrimeVue
ToggleSwitchflips its visual state on click beforehandleAdvancedToggle()runs. WhentoggleAdvanced()returns'needs_warning'it does not changeshowAdvanced, so the switch visual diverges from the model. Thecancelevent fromAdvancedWarningDialogis never handled inSettingsPage.vue - Fix: either use
:model-valuebinding that forces the switch back, or explicitly handle thecancelevent
2. Org Chart shows "No departments" despite departments existing
- OrgChart uses
companyStore.fetchDepartments()which callsGET /departments(theDepartmentControllerAPI). Company page reads departments from thecompany/departmentsJSON setting. These are two different data paths - The API endpoint validates against a
Departmentschema withDepartmentNameenum. Departments saved via Company page may not match that schema, causing the API to return empty - Fix: align the data paths -- either OrgChart should read from the same settings source, or the Company page should validate/transform departments to match the API schema on save
3. Department card edit/delete buttons invisible
CompanyDepartmentCardhas pencil/trash buttons withtextprop (PrimeVue text-only buttons). On the darkbg-slate-800/50card background,severity="secondary"text buttons are nearly invisible- Screenshot confirms: cards show name + budget tag only, no visible action buttons
- Fix: use visible icon buttons (remove
textprop or add hover reveal with opacity transition)
4. Dashboard System Status -- inconsistent "ok" vs "OK" casing
- API Server shows
health?.statusraw from backend ("ok"lowercase) - Persistence and Message Bus use hardcoded
"OK"(uppercase) - Fix: normalize all status labels to the same casing (e.g. uppercase "OK" everywhere, or use a shared formatter)
5. Log level shows empty/nothing instead of effective value
observability/root_log_levelhasdefault="debug"in the definition, but if the resolved value comes back as empty string or null, the Select dropdown shows nothing- Should display the effective value from the running app (env var
SYNTHORG_LOG_LEVELor definition default)
UX Improvements
6. Department Add form -- poor UX, no hints, no prefill
- "Head" field is a raw text input (
placeholder="e.g. agent-cto-001") -- should be a dropdown populated from existing agents - No explanation of what "Teams", "Reporting Lines", "Policies" expect as JSON structure -- needs help text or example templates
- Budget % has no contextual hint (e.g. remaining budget across departments)
- No field-level tooltips or guidance
7. "General" settings tab looks auto-generated and unpolished
- Both
CompanyGeneralFormand Settings page namespace tabs render viaSettingGroupRendererwhich produces a flat list of key-value inputs - No visual hierarchy, no contextual grouping, no designed layout -- reads like a raw config dump
- Needs intentional layout with logical sections, descriptions, and spacing
8. setup_complete should never be exposed in the settings UI
api/setup_completeis defined atlevel: basic(default), visible in the API tab without advanced mode- This is internal system state users should never manually toggle
- Fix: either set
level: advanced+ mark hidden, or filter it out of the settings UI entirely
9. Source badge labels ("YAML" / "Database") are meaningless to users
SettingSourceBadgeshowsDatabase,YAML,Environment,Default- Users don't care about storage backend. Show
Custom(for db/yaml overrides) vsDefault-- the only distinction that matters Environmentshould remain distinct but with different treatment (see Implement agent-to-agent messaging with channels and topics #10)
10. Environment-sourced settings should be greyed out, not just badged
- When a setting comes from an env var, it shows an orange "Environment" badge but the field still looks editable
- Should visually disable the input and show a clear message: "Set by environment variable -- cannot be changed here"
11. default_provider setting -- unnecessary, not actually used
- Defined as
"Default LLM provider name for new tasks"withdefault=None - Subscriber code explicitly calls it "advisory-only" -- watched for logging only, never read by routing logic
- Provider selection is determined by agent model config + routing strategy
- Fix: remove the setting definition, or at minimum hide it from the UI
12. Remove or normalize the default_provider concept
- If we keep it, it needs a clear purpose and UI explanation
- If we remove it, clean up the subscriber watch list too
Affected files
web/src/views/SettingsPage.vue-- advanced toggle cancel handlingweb/src/stores/settings.ts-- toggle state managementweb/src/views/CompanyPage.vue-- department data pathweb/src/views/OrgChartPage.vue-- department data sourceweb/src/components/company/CompanyDepartmentCard.vue-- button visibilityweb/src/components/company/CompanyDepartmentFormDialog.vue-- form UXweb/src/components/company/CompanyGeneralForm.vue-- general tab layoutweb/src/components/settings/SettingSourceBadge.vue-- label textweb/src/components/settings/SettingField.vue-- env var disablingweb/src/components/dashboard/SystemStatus.vue-- ok/OK casingsrc/synthorg/settings/definitions/api.py-- setup_complete levelsrc/synthorg/settings/definitions/providers.py-- default_providersrc/synthorg/settings/subscribers/provider_subscriber.py-- default_provider watch