chore(m5): add Spool Daemon upgrade notice + clean up docs#117
Merged
chore(m5): add Spool Daemon upgrade notice + clean up docs#117
Conversation
One-time notice for users upgrading from a pre-M5 Spool, plus the cross-cutting documentation cleanup that PR2-#5 deferred. ## Upgrade notice Built as a React modal (not a native dialog) so it matches Spool's design system — warm card, Geist Sans, accent CTA — and shows the real Spool Daemon app icon (copied from spool-lab/spool-daemon). Trigger logic (in main, exposed via IPC): - shouldShow = !shown && !wasNewDb && initialUserVersion < 5 - New users with no prior DB → don't show (no captures to mourn) - Existing users at v0-v4 → show on first launch after upgrade - After dismiss/install click → flag persists, never shown again - User who quits without dismissing → loses the notice (acceptable for an informational nudge; not critical state) The "wasNewDb" + "getInitialUserVersion" helpers are added to packages/core/src/db/db.ts. Both are captured before runMigrations runs so the post-state can't muddy the upgrade detection. uiPreferences now respects SPOOL_DATA_DIR (was hardcoded to ~/.spool/ui.json regardless of env override) — this surfaced during sandbox smoke testing and would have leaked dialog-shown state out of test sandboxes. The "Get Spool Daemon" button uses shell.openExternal to https://spool.pro/daemon (was earlier mistakenly written as spool.dev/daemon in three places — fixed across the dialog, README, and positioning doc). ## Doc cleanup (cross-cutting) - README.md — drop stars/bookmarks/likes from tagline, drop the Connectors bullet, replace with a forward to Spool Daemon, drop the fieldtheory-cli acknowledgement (Twitter bookmarks gone) - DESIGN.md — drop bookmarks/capture from Product Context, rewrite Source Chips + Sources Panel sections to be session-only, drop "Capture / add" icon, fix Status Bar dot color guidance - docs/spool-positioning.md — strip bookmark/star marketing, end with a forward to Spool Daemon - packages/core/README.md — drop "connected sources", "connector sync engine", "connector loader", "connector registry" — replaced with watcher + stars - Deleted docs/connector-developer-guide.md (607 lines) and docs/connector-sync-architecture.md (924 lines) — both exclusively about the removed subsystem docs/superpowers/* historical plans + specs left intact (they're dated git-log-style records, not current docs). ## Tests - Extended migration-v5.test.ts with assertions for the new wasNewDb / getInitialUserVersion helpers on both the upgrade path (wasNewDb=false, initialVersion=4) and the fresh-install path (wasNewDb=true, initialVersion=0). - Smoke verified locally: launching dev against a downgraded v4 sandbox shows the modal with the right icon and copy; clicking either button persists the flag and the modal does not return on re-launch. Net -1466 / +103. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced Apr 28, 2026
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.
Summary
Continuation of #112 / #113 / #114 / #115 / #116. Adds the one-time upgrade notice for users coming from a pre-M5 Spool, and finishes the cross-cutting documentation cleanup that earlier PRs deferred.
-1466 / +184net.Upgrade notice
A React modal (not a native dialog) so it matches Spool's design system — warm card, Geist Sans, accent CTA — and uses the real Spool Daemon app icon (copied from
spool-lab/spool-daemon).Trigger logic (computed in main, exposed via IPC):
The "lost on quit-before-dismiss" behaviour is intentional — this is an informational nudge, not critical state, and avoiding a second persistent flag keeps the design simple. (VS Code-style "what's new" notices behave the same way.)
wasNewDb()andgetInitialUserVersion()are added to@spool-lab/core'sdb.ts. Both are captured beforerunMigrations()runs so the post-migration state doesn't muddy the detection.Dialog UX:
shell.openExternal('https://spool.pro/daemon')and persists shown flagSide fix:
uiPreferencesnow respectsSPOOL_DATA_DIR(was hardcoded to~/.spool/ui.jsonregardless of env override). Surfaced during sandbox smoke testing and would have leaked dialog-shown state out of test sandboxes.Doc cleanup (cross-cutting)
docs/connector-developer-guide.md(607 lines) anddocs/connector-sync-architecture.md(924 lines) — both exclusively about the removed subsystemdocs/superpowers/*historical plans + specs left intact (they're dated git-log-style records, not current docs).Features that should still work post-PR (verified)
wasNewDb/getInitialUserVersion)pnpm exec tsc --noEmitcleanpnpm build:electroncleanpnpm install --frozen-lockfileuser_version=4, clearedspoolDaemonNoticeShown, launched dev → modal appears with daemon icon, copy correct, "Spool Daemon" doesn't break across lineswasNewDb=trueshort-circuits; covered bymigration-v5.test.ts"no-op fresh install" caseui.json,getDaemonNoticePendingreturns false, modal does not reappearGet Spool Daemonbuttonhttps://spool.pro/daemonviashell.openExternal(notspool.dev— that's not the canonical domain)Test plan
pnpm install --frozen-lockfilecleanspool.dev/daemonreferences swept tospool.pro/daemon🤖 Generated with Claude Code