fix(app): UI papercut sweep — non-blocking session flows, delete confirmation, resilient sidebar - #12
Draft
usehoplite[bot] wants to merge 5 commits into
Draft
fix(app): UI papercut sweep — non-blocking session flows, delete confirmation, resilient sidebar#12usehoplite[bot] wants to merge 5 commits into
usehoplite[bot] wants to merge 5 commits into
Conversation
Sidebar/palette new-session call sites, session activation, error banner visibility, session delete confirmation, and the localized rename rejection. Co-authored-by: Carlos Orozco O. P. <soycanopa@gmail.com>
Sidebar and palette New session route through the async create_new_session path; session activation clears the transcript and shows a loading state while the background refresh fetches it; every remaining blocking refresh() call site moves to schedule_refresh and the synchronous method is removed. A failed transcript load now surfaces in the error banner instead of rendering a silently empty chat. Co-authored-by: Carlos Orozco O. P. <soycanopa@gmail.com>
The context menu Delete action stages a confirmation overlay using the existing session.delete_confirm copy; the daemon delete only fires on explicit confirm, and cancel or switching sessions leaves the session untouched. Co-authored-by: Carlos Orozco O. P. <soycanopa@gmail.com>
…tion The sidebar error now renders as a banner above the Today/Earlier sections so transient failures never hide navigation, and the empty project-rename rejection reads from the locale catalog instead of a hardcoded string. Adds messages.loading and settings.projects.rename_empty keys plus tests. Co-authored-by: Carlos Orozco O. P. <soycanopa@gmail.com>
Fresh sandboxes need a Rust toolchain to build the workspace and X11 dev libraries to link the GPUI test binaries on Linux. Co-authored-by: Carlos Orozco O. P. <soycanopa@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
An audit of the main user flows (startup, first run, create/navigate sessions, send & stream, sidebar Today/Earlier, settings, rename/delete) found five high-impact papercuts, all fixed in one OpenSpec change (
openspec/changes/ui-papercut-sweep):create_session()+ the blockingrefresh(), which can spawn/rebuild and health-poll the daemon for seconds). All three surfaces now share the async path: activation clears the transcript, shows a localized Loading… state, and the daemon round trip happens on a background executor viaschedule_refresh. The blockingrefresh()method is deleted so no call site can regress.list_messages().unwrap_or_default()silently rendered an empty chat when the load failed; failures now surface through the existing error banner.session.delete_confirm. Delete is now staged behind a confirm overlay (cancel / Escape / outside click leaves the session untouched; confirm keeps the existing optimistic removal + background daemon delete).settings.projects.rename_empty), plus a newmessages.loadingkey for the transcript loading state.Changes by file
crates/circulo-app/src/shell.rs— async activation + loading state, sidebar/palette new-session delegation,refresh()→schedule_refreshmigration, error-banner-above-list, localized rename rejection, staged delete (request/confirm/cancel), unit testscrates/circulo-app/src/session_overlay.rs—SessionOverlay::DeleteConfirmoverlaycrates/circulo-i18n/— two new keys + catalog testopenspec/changes/ui-papercut-sweep/— proposal, design, delta specs, tasks.hoplite/settings.json— sandbox setup script (Rust toolchain + X11 link libs for Linux test linking)Verification
cargo test --workspace— green (app: 55 tests incl. 2 new ones for activation loading state and delete confirmation; i18n: 4; daemon: 26; persist/core/protocol/adapters all pass)scripts/check-crate-boundaries.py— passesactivation_loads_transcript_in_background,delete_is_staged_behind_confirmation