Repository navigation
feat(identity): give accounts a switch for indexing and liked Skills - #244
Merged
Merged
Conversation
Collaborator
Author
Contributor
🤖 MERGED
GitHub merged this pull request. No material findings were recorded. 9ec9cc3b-ffcd-451f-9c9a-b57433c52c92 |
1 task done
This was referenced Sep 17, 2026
Sign-in scanned a new account's public repositories and added every SKILL.md to the registry without asking. The onboarding page now asks first, and one click runs the same scan. The /@login/liked list was public for every account with no way to turn it off. It is now private unless the owner turns it on in /me. Migration 0119 keeps existing accounts private, since they never consented either.
Both settings are on by default and the account can turn either off. Sign-in still scans the account's public repositories for SKILL.md and indexes what it finds, because that is how the registry grows and the files are already public on GitHub. `repo_indexing` turns it off, and the scan endpoint then refuses too, so one switch decides. The liked list stays public, which is how it already worked, and `likes_public` closes it. A closed list answers 404 to everyone but its owner, the same answer as a missing account. No shared link breaks on migration. The onboarding prompt is now a notice with a way out rather than a question.
harlan-zw
force-pushed
the
feat/privacy-consent
branch
from
September 22, 2026 02:41
490b0b9 to
6b2db0c
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.






❓ Type of change
📚 Description
Two things took data public with no way to close them. Both now have a switch. Both switches are on by default, because skilld.dev is early and the registry grows on indexed Skills.
SKILL.mdand indexes what it finds. Those files are already public on GitHub, and indexing them is how the catalog grows. The onboarding step now says so, and "Add Skills from your public repositories" in/meturns it off.POST /api/me/repos/scanrefuses with a 403 when it is off, so one switch decides for both paths./@login/likedstays public, which is how it already worked, so no shared link breaks. "Show liked Skills on your profile" in/mecloses it. A closed list answers 404 to everyone except its owner, the same answer as a missing account, so a visitor cannot learn which accounts closed theirs. The profile shows the Liked link only to viewers who can open it, and the owner of a closed list sees "Only you can see your liked Skills".Migration 0121 adds both columns with a default of 1, so no existing account changes behaviour when it lands.
flowchart TD A["GitHub sign-in"] -->|"first sign-in"| B{"users.repo_indexing"} B -->|"1, the default"| C["scanOwnedRepos in waitUntil"] B -->|"0"| D["no scan"] E["POST /api/me/repos/scan"] --> B F["/@login/liked"] --> G{"users.likes_public"} G -->|"1, the default"| H["public list"] G -->|"0, viewer is owner"| I["owner-only list"] G -->|"0, anyone else"| J["404, same as a missing account"] K["/me privacy switches"] -->|"PATCH /api/me/privacy"| B K --> GNotes for a reviewer:
/mescan runs in the request, not inwaitUntil, so an account with many Skill repositories waits on a spinner with a note that the check can take a minute. Sign-in still scans in the background.