feat(desktop): ship without accounts by default - #76
Merged
Conversation
Collaborator
Author
|
Note on the empty checks list: Once #75 merges and this retargets to
|
Packaged builds no longer contain sign-in. `CC_ACCOUNTS=1` brings it back;
nothing is deleted.
The hosted account system works. The problem is what it can legally carry.
`scrubSettings` replaces `command`, `args`, `path`, `dir`, anything holding
an absolute path and anything secret-shaped with markers before upload, so
what actually crosses machines is a preference blob and a set of profile
shapes with holes in them that you re-point by hand on the second Mac.
That is a thin return for a hosted Postgres holding user rows in a product
whose claim is that context stays on your machine — and it was the only
thing making that claim need an asterisk. The stated justification was a
hook for entitlements; Packs shipped as a free preview with payments
dormant behind paymentsLive, so nothing is being entitled yet. When sync is
wanted for real, the better version rides git-core.mjs/git-sync.mjs against
the user's own repo, which is infrastructure this project already owns.
The hosted project had zero rows in user_settings, so disabling stranded
nobody.
Mechanics:
- generate-supabase-config.mjs writes {"accounts":"disabled"} unless
CC_ACCOUNTS=1, and needs no credentials to do it. The file is still
written because electron-builder treats a missing extraResources source
as a build failure, and because "off" should be a state the app reads
rather than infers from an absent file.
- loadSupabaseConfig treats that marker as authoritative over both
userData and the environment. The marker describes the artifact users
downloaded, so a stale VITE_SUPABASE_* in someone's shell must not
quietly switch sign-in back on. `npm run dev` never generates a packaged
config, so development still resolves from env.
- The renderer hides the Account pane rather than showing it empty. An
Account tab that opens onto "sign-in isn't configured" advertises a
feature the build does not have. Availability rides the existing static
launch metadata so the pane is absent on first paint.
- The release workflow stops passing Supabase secrets.
This closes the #44 gate by not shipping the thing that needed validating.
The three manual acceptance checks stay written down in
docs/release-gates.md and come due again on any CC_ACCOUNTS=1 build.
All auth and settings-sync code, migrations and tests remain and still run
in CI. Only the packaging default changed.
Signed-off-by: John Siracusa <siracusa5@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
siracusa5
force-pushed
the
c/disable-accounts-supabase
branch
from
July 30, 2026 06:18
ee125f4 to
6a83002
Compare
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.
Stacked on #75 — targets that branch, and GitHub will retarget it to
mainwhen #75 merges. Review #75 first.Summary
Packaged builds no longer contain sign-in.
CC_ACCOUNTS=1brings it back. Nothing is deleted — all auth and settings-sync code, migrations and tests remain and still run in CI. Only the packaging default changed.The hosted project had zero rows in
user_settings, so this strands nobody.Why
The account system works. The problem is what it can legally carry.
scrubSettingsreplacescommand,args,path,dir, anything holding an absolute path, and anything secret-shaped with markers before upload. So what actually crosses machines is a preference blob and a set of profile shapes with holes in them, which you re-point by hand on the second Mac.That's a thin return for:
It was also the single thing making "your data stays local" need an asterisk. For a local-first product, no account required is the stronger trust signal.
The stated justification was a hook for entitlements. Packs shipped as a free preview with payments dormant behind
paymentsLive— nothing is being entitled. And when sync is genuinely wanted, the better version ridesgit-core.mjs/git-sync.mjsagainst the user's own repo: infrastructure this project already owns and maintains for team sync, with no hosted service and no asterisk.Mechanics
generate-supabase-config.mjswrites{"accounts":"disabled"}unlessCC_ACCOUNTS=1extraResourcessource as a build failure, and "off" should be a state the app reads, not infers from absence.loadSupabaseConfigtreats that marker as authoritative over userData and envVITE_SUPABASE_*in someone's shell must not quietly switch sign-in back on in a shipped build.npm run devnever generates a packaged config, so dev still resolves from env.Closes the #44 gate
By not shipping the thing that needed validating.
docs/release-gates.mdmoves #44 to## Closed:— which also unblocks the release guard added in #75 — and keeps the record of what shipped unvalidated, plus the three manual checks, which come due again on anyCC_ACCOUNTS=1build.Test plan
npm test— exit 0tsc --noEmitclean,build+build:livetest:navigation,test:cli-status,npm run smoke→SMOKE OKnpm run build+ install-page verificationnpm run supabase:configwith no env →{"accounts":"disabled"}, exit 0CC_ACCOUNTS=1still rejects missing/secret/non-HTTPS credentials, Account pane hidden when accounts are off## Open:section remains)check-dco.sh— 5 commits signed offReversing this
CC_ACCOUNTS=1 SUPABASE_URL=… SUPABASE_ANON_KEY=… npm run dist, then clear the acceptance checks indocs/release-gates.mdbefore distributing.🤖 Generated with Claude Code