Skip to content

Dock composer notices and replace Send anyway with a real recheck - #118

Merged
badcuban merged 2 commits into
mainfrom
feat/composer-notice-dock
Aug 7, 2026
Merged

Dock composer notices and replace Send anyway with a real recheck#118
badcuban merged 2 commits into
mainfrom
feat/composer-notice-dock

Conversation

@badcuban

@badcuban badcuban commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Implements sections 2 and 3 of the approved onboarding mockup (docs/design/onboarding-setup-card.html, included in this PR as the design reference). Section 1 (the first-run setup card) lands separately on top of these primitives.

What changed

  • One notice surface. Provider status, turn errors, held sends, version skew, environment disconnects, and the slow-startup notice all rendered their own floating banner at the top of the chat and stacked. They are all statements about whether the next message can send, so they now share a single slim row docked to the composer's top edge (ComposerNoticeDock): severity dot, bold lead + truncating detail, inline actions, dismiss. Only the worst notice is visible; the rest expand behind "N more ▾". Info-level notices (version skew, update available) wait while anything urgent is active. selectComposerNotices owns the ordering and is unit-tested.
  • "Send anyway" → "I've signed in". The held-send notice's escape hatch now matches the user's actual claim: it re-probes the provider through the same refresh RPC the Settings page uses, folds the returned snapshot into app state, and re-runs the normal send path when the verdict clears — the skipProviderPreflight bypass is deleted. A wrong guess shows "Still signed out. The terminal shows where the sign-in stopped."
  • Phone never-paired screen. No download button on phone widths (you can't install the desktop app on a phone); instead a three-step pairing guide naming where the setup link is minted, with "I have a setup link" as the single action. Desktop widths keep the Preflight provider auth on send and unstrand hosted cold visitors #115 layout.
  • Old banner components deleted/renamed to notice builders (providerStatusNotice, threadErrorNotice, providerReadinessNotice, sessionStartupNotice); ComposerBannerStack and CompactStatusNoticeRow removed.

Notable during build

  • The dock's fixed chrome raised the composer's minimum width enough to break its compact-footer layout at narrow widths; caught by the existing footer-compaction browser test, fixed with [contain:inline-size].

Testing

  • vp fmt, vp lint, vp run typecheck green.
  • Web unit suite: 157 files / 2052 tests green (new: composerNotices.test.ts ordering/suppression cases).
  • Browser suites: ChatView, ProviderModelPicker, SettingsPanels, HostedStaticStatusStates, providerStatusNotice, sessionStartupNotice — 183 green. "Send anyway" tests replaced by two recheck tests (clean recheck → exactly one dispatch; failed recheck → zero dispatches + "Still signed out.").
  • Cold-boot screenshot verification (per the Show provider guidance in the model picker on a cold install #116 lesson) runs before merge; gallery will be attached to this PR.

Implements the approved onboarding mockup (docs/design/onboarding-setup-card.html,
sections 2 and 3):

- All top-of-chat banners (provider status, turn errors, held sends,
  version skew, environment trouble, slow startup) collapse into a single
  slim notice row docked to the top of the composer: severity dot, one
  line, inline actions, worst notice first, the rest behind an "N more"
  expander; info-level notices wait while anything urgent is active
- "Send anyway" is gone. "I've signed in" re-probes the provider over the
  refresh RPC, folds the snapshot into app state, and sends the held
  message through the normal gate when the answer agrees; otherwise the
  notice says "Still signed out."
- The never-paired phone screen drops the download button for a
  three-step pairing guide (install on your computer, Settings > Devices
  > Add device, scan the QR); desktop widths keep the download action
- The mockup file itself is included as the design reference
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
threadlines Skipped Skipped Aug 7, 2026 4:56am

Request Review

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 7, 2026
…blem

Cold-boot screenshot verification caught the dock front-running the wrong
row: with Codex signed out, the error-severity "Codex provider status"
notice outranked the amber held-send notice, hiding the Sign in and I've
signed in actions behind the expander. While a held-send notice is active
for an instance, its provider-status row states the identical fact with
none of the actions, so it now stays hidden (same suppression pattern the
session startup notice uses).
@badcuban
badcuban merged commit 113e60d into main Aug 7, 2026
15 checks passed
@badcuban
badcuban deleted the feat/composer-notice-dock branch August 7, 2026 05:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 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