feat(dashboard): background-activity center (11.3.1)#91
Merged
Conversation
Long-running shell work (the 11.3 model download, a full reindex, later sync/import) ran with no ambient indicator — the model download in particular was silent, and a per-panel Settings card you must navigate to isn't the right home. Add a first-class activity surface in the dashboard chrome, mirroring the sync-status chip. - shared activity-types.ts (ActivityKind/ActivityPhase/BackgroundOperation) - pure BackgroundActivityStore (set/clear/snapshot/onChange, recency order, dedup no-op push) - activity:* IPC (accessor + push to the dashboard) + preload bridge - useBackgroundActivity hook; <ActivityChip> (shown only while work is in flight — spinner + freshest-op title + percent, "N tasks" when several, warning on error) + <ActivityPopover> (a row + determinate/indeterminate bar per op, via the shared <Popover>) - producers: the 11.3 model download (operationFromSemanticStatus) and the full reindex (surfaced only past a 500ms guard so fast per-edit reconciles don't flicker the chip). sync/import/export register the same way (kinds already defined). +22 tests (store 9 · mapper 3 · handlers 4 · chip/popover 6). tsc + lint + shell build + size clean. Complements the Settings → Search detail card: the chip is the ambient indicator, the card the drill-down. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.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
Long-running shell work — the 11.3 model download, a full search reindex, later sync/import/backup — ran with no ambient indicator. The model download in particular was silent, and the per-panel Settings → Search card (from #89) is a drill-down you have to navigate to, not an ambient signal. This adds a first-class background-activity surface in the dashboard chrome, mirroring the existing sync-status chip.
Pieces
activity-types.ts— shared, import-free (ActivityKind/ActivityPhase/BackgroundOperation/ActivitySnapshot), used across main/preload/renderer likesync-status-types.ts.BackgroundActivityStore(pure) —set/clear/snapshot/onChange; recency-ordered, byte-identical re-set is a no-op push.activity:*IPC — one accessor + one push channel to the dashboard (mirrorssync-status-handlers.ts);window.brainstorm.activity.{snapshot,on}preload bridge.useBackgroundActivityhook;<ActivityChip>appears only while work is in flight (next to the sync chip): spinner + freshest-op title + percent, "N tasks" when several, warning glyph on error;<ActivityPopover>lists a row + a determinate/indeterminate bar per op, via the shared<Popover>.Producers wired
operationFromSemanticStatusmaps theSemanticModelStatusfrom feat(search): first-run model-download progress UX (11.3) #89 → an op).Sync / import / export register the same way (their
ActivityKinds are already defined) — the store is a general surface, not a model-download one-off.a11y
Bars are decorative (
aria-hidden); the percent / "Working…" status text is the assistive-tech source (matches the sync chip + the #89 coverage bar). Chip label isaria-live="polite".Tests
+22: store 9 · status→op mapper 3 · handlers 4 (channel/push/destroyed-skip/dispose) · chip + popover 6. Full
bun run test→ 14229 passed, 0 test-case failures (10 failed suites = known worktree Electron-collection artifact). tsc (packages + apps) · lint · shell build · size (renderer 329.88/350 KB gz, main 206.62/305 KB) all clean.🤖 Generated with Claude Code