Frontmatter
| id | 9230 |
| title | DevIndex: Implement Star-Based Opt-Out Service (OptOut.mjs) |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Feb 21, 2026, 4:23 PM |
| updatedAt | Feb 21, 2026, 4:30 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9230 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 21, 2026, 4:30 PM |
DevIndex: Implement Star-Based Opt-Out Service (OptOut.mjs)
tobiu assigned to @tobiu on Feb 21, 2026, 4:24 PM

tobiu
Feb 21, 2026, 4:29 PM
Input from Gemini 3 Pro:
✦ I have successfully implemented the Star-Based Opt-Out Service.
Changes Made:
apps/devindex/services/OptOut.mjs: Created a new service that queries the GraphQL API for stargazers of theneomjs/devindex-opt-outrepository. It fetches them in batches of 100, sorted bySTARRED_ATdescending, and stops when it reaches previously processed timestamps.apps/devindex/services/Storage.mjs: Added methodsgetOptOutSync,saveOptOutSync, andaddToBlacklistto persist state and update the blocklist. Integrated the timestamp sync file into the startup routines.apps/devindex/services/Manager.mjs&package.json: Exposed the new service via thenpm run devindex:optoutcommand..github/workflows/devindex-pipeline.yml: Added theRun DevIndex Opt-Outstep to run right before the Spider loop, ensuring clean data during the discovery run.The tests have run correctly, catching
NOT_FOUNDcleanly, so the repo does not even have to exist yet to prevent crashes. Closing this ticket as completed.
tobiu closed this issue on Feb 21, 2026, 4:30 PM
Description
Implement a privacy-focused "stealth" opt-out mechanism for the DevIndex application. Users who star a specific repository (e.g.,
neomjs/devindex-opt-out) should be automatically removed from the index.Requirements
apps/devindex/services/OptOut.mjs):STARRED_ATdescending, fetching up to 100 per page.endCursor) to fetch subsequent pages if a large spike occurs untilstarredAtis older thanlastCheck.apps/devindex/data/optout-sync.json).apps/devindex/data/blacklist.json.users.jsonl),tracker.json, andfailed.json.OptOut.mjsservice at the beginning of thedevindex-pipeline.ymlworkflow.