Skip to content

fix(web): await provider settings persistence - #75

Closed
saphid wants to merge 1 commit into
docs/consistency-settings-completionfrom
fix/consistency-settings-completion
Closed

saphid wants to merge 1 commit into
docs/consistency-settings-completionfrom
fix/consistency-settings-completion

Conversation

@saphid

@saphid saphid commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

What Changed

Provider-add and custom-model forms previously cleared or announced success after dispatching a void settings updater. They now wait for the selected environment's typed persistence result. Pending saves block duplicates; rejection/interruption retains the draft and an actionable error; stale completions cannot close a reopened or different-environment editor.

Why

This implements the audited provider-form portion of the proposed settings-completion contract. Custom-model add/edit/removal carry acknowledgment through the existing panel/card/section callbacks, including portaled input guards and cleanup only after confirmed removal. Quiet preference controls keep their existing contract. It does not claim every settings path was runtime-proven.

Stacked on docs/consistency-settings-completion in the fork, independently of other invariant pairs.

Validation

  • 55 focused tests passed across provider-add, wizard, custom-model completion/editor, provider-card and environment-routing cases.
  • Web package typecheck and scoped lint exited 0; effect-dependency style warnings remain.
  • Independent direct devin -p --model swe-2-max review was attempted against the frozen diff and coding standard. It produced no output for over 600 seconds; its captured process was stopped (exit 1). No completed independent verdict is claimed.

UI Changes

Runtime proof (2026-09-20, isolated proof app; base d6f2913 vs this branch): with server.updateSettings frames dropped via a WebSocket send filter (exactly one request dropped), adding a custom model on base clears the input and shows nothing — the edit is silently lost. On this branch the input retains its value, "Saving…" is shown, and the controls stay disabled; the slow-request watchdog later surfaces the stuck request.

Before: https://github.com/user-attachments/assets/96ae4da5-8bb6-4c4f-9e74-8b021e52af57
After: https://github.com/user-attachments/assets/62fe85c2-63af-4a87-84b0-f2223a6e10f9
After (pending + watchdog toast): https://github.com/user-attachments/assets/6c3a3c7e-273c-463b-8409-d1c4f164d9c9
Still: https://github.com/user-attachments/assets/fb9c943c-1423-4d03-abc6-1c1ddeb38571

Limitation: the injection drops the request outright, so the capture proves the guarded pending state; the eventual "Could not save" terminal error is exercised by tests, not this capture.

Checklist

  • This PR is focused on one persistence outcome
  • I explained what changed and why
  • I included before/after screenshots for UI changes
  • I included interaction video

Implemented by GPT-6 Astra (medium reasoning) in Codex; independent SWE-2 Max review attempt in Devin CLI timed out without a verdict.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 20, 2026
@saphid

saphid commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

Superseded by pingdotgg#12874 — the implementation PR now lives upstream against main (it contains the docs commit until the paired docs PR merges). Same head branch, same commits; this fork draft is closed to avoid a duplicate review surface.

@saphid saphid closed this Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant