Problem
Follow-up to #510 / PR #517. Extension Edit connection… matches the menu and footer of built-in forms, but several UI/behavior gaps break parity — especially around secrets.
Gaps
1. Password “keep existing” (blocker)
Built-in edit forms allow an empty password and show Leave blank to keep existing; mergeSecretsForConnectionUpdate restores the stored secret after Save.
Extension SDUI password fields:
- Use the schema
placeholder only (no keep-existing hint)
- Honor
field.required — empty password fails validation, so Save can be blocked without retyping the secret
Storage merge after a successful pop is fine; the form never reaches it when validation fails.
2. Test Connection ignores secret merge
In edit mode, Test Connection builds a row from form values without merging the previous password. Save path merges; Test can fail with a blank password even when Save would succeed.
3. Dual Remove on extension tile
Built-in tiles: Remove only via context menu.
Extension tile: context menu Remove and inline × — two delete affordances.
Proposed fix
- SDUI edit mode (
SduiFormBuilder or edit wrapper in extension_connection_form.dart):
- Password fields: empty is valid while editing
- Placeholder / hint: Leave blank to keep existing (same copy as built-ins)
- Test Connection (edit): call
mergeSecretsForConnectionUpdate (or inject previous password) before ExtensionDriverSession.testConnection
- Sidebar: remove the inline × on the extension tile (prefer one dialect: menu-only, matching built-ins)
Acceptance
Files (starting points)
lib/features/connections/extension_connection_form.dart
lib/core/sdui/sdui_form_builder.dart
lib/features/connections/connections_panel_extension.dart
lib/features/connections/connection_creation_flow.dart (mergeSecretsForConnectionUpdate)
Out of scope (optional later)
- Migrate connection form shells to
QueryaDialogCard
- Map SDUI text/password controls to shadcn
TextField for full chrome parity
- Secrets stored only under custom
driverOptions keys (not top-level ConnectionRow.password)
Related
Problem
Follow-up to #510 / PR #517. Extension Edit connection… matches the menu and footer of built-in forms, but several UI/behavior gaps break parity — especially around secrets.
Gaps
1. Password “keep existing” (blocker)
Built-in edit forms allow an empty password and show Leave blank to keep existing;
mergeSecretsForConnectionUpdaterestores the stored secret after Save.Extension SDUI password fields:
placeholderonly (no keep-existing hint)field.required— empty password fails validation, so Save can be blocked without retyping the secretStorage merge after a successful pop is fine; the form never reaches it when validation fails.
2. Test Connection ignores secret merge
In edit mode, Test Connection builds a row from form values without merging the previous password. Save path merges; Test can fail with a blank password even when Save would succeed.
3. Dual Remove on extension tile
Built-in tiles: Remove only via context menu.
Extension tile: context menu Remove and inline × — two delete affordances.
Proposed fix
SduiFormBuilderor edit wrapper inextension_connection_form.dart):mergeSecretsForConnectionUpdate(or inject previous password) beforeExtensionDriverSession.testConnectionAcceptance
Files (starting points)
lib/features/connections/extension_connection_form.dartlib/core/sdui/sdui_form_builder.dartlib/features/connections/connections_panel_extension.dartlib/features/connections/connection_creation_flow.dart(mergeSecretsForConnectionUpdate)Out of scope (optional later)
QueryaDialogCardTextFieldfor full chrome paritydriverOptionskeys (not top-levelConnectionRow.password)Related