Repository navigation
feat(identity): delete accounts and publish a privacy page - #248
Merged
Merged
Conversation
Collaborator
Author
Contributor
🤖 MERGED
GitHub merged this pull request. No material findings were recorded. 22de60c4-00c2-45fa-ad70-eb09cd953593 |
This was referenced Sep 17, 2026
Nobody could remove a skilld account or the data tied to it. Several account tables carry no foreign key, so deleting the users row alone would leave email history and tokens behind. The test reads the migrated schema. A future table that names an account fails it until account deletion clears that table too.
The owner keeps Web Analytics on, so the page no longer claims skilld.dev runs no analytics. It lists what Cloudflare documents the beacon records.
/privacy described a site with no usage analytics. skilld.dev keeps anonymous counts of copied commands, because it needs to know which Skills people run. The page now says what a count holds, where it lives, and how long it stays, plus the 1% timing traces, the counted GitHub links in email, and the new defaults for liked Skills and Repository indexing.
harlan-zw
force-pushed
the
feat/account-deletion-privacy
branch
from
September 22, 2026 02:32
16268dd to
4c4d860
Compare
harlan-zw
changed the base branch from
chore/privacy-data-retention
to
main
September 22, 2026 02:32
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.






Rebased onto
mainnow that #241 has landed. The old base branch was merged, so the diff read against a dead ref.❓ Type of change
📚 Description
Nobody could delete a skilld account, and nothing on skilld.dev said what the site stores. This adds both.
Account deletion.
/megets a Delete account section. The confirm dialog asks for the GitHub login.DELETE /api/mealso needs the sign-in cookie: a CLI token alone gets a 403, so a token copied off a laptop cannot delete the account. One D1 batch removes every row that names the account. Then the Worker asks GitHub to revoke the OAuth grant and clears the session. If GitHub refuses or times out, the account is still gone and the toast links to GitHub settings.Decisions I made:
ownersandskill_revisions.author_loginstay for the same reason.skill_dirtyfor a recount.email_preference_eventshas no foreign key, so deleting theusersrow alone would leave rows behind./privacyis a Markdown article like/verify, linked from the footer and from the delete section. It now describes the site as it actually works, including the parts that exist to grow it:/me.Merge this last, after #240, #243, and #244.
/privacydescribes the site once they land.Loose ends:
#privacy, which exists only on chore(protocol): remove the unused CLI telemetry contract skilld#148 so far./privacysays D1 Time Travel can keep deleted rows for up to 30 days, the Workers Paid window.weekly_click_events, because chore(analytics): keep anonymous usage aggregates, drop the visitor trail #240's migration drops it and a delete against it would then fail. feat(identity): count email clicks as daily aggregates #243'semail_click_countsnames no account, so it needs no delete.