LearnNewsExamplesServices
Frontmatter
id9230
titleDevIndex: Implement Star-Based Opt-Out Service (OptOut.mjs)
stateClosed
labels
enhancementai
assigneestobiu
createdAtFeb 21, 2026, 4:23 PM
updatedAtFeb 21, 2026, 4:30 PM
githubUrlhttps://github.com/neomjs/neo/issues/9230
authortobiu
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 21, 2026, 4:30 PM

DevIndex: Implement Star-Based Opt-Out Service (OptOut.mjs)

Closed v12.0.0 enhancementai
tobiu
tobiu commented on Feb 21, 2026, 4:23 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

  1. New Service (apps/devindex/services/OptOut.mjs):
    • Query the GraphQL API for stargazers of the designated opt-out repository.
    • Request stargazers sorted by STARRED_AT descending, fetching up to 100 per page.
    • Support pagination (using endCursor) to fetch subsequent pages if a large spike occurs until starredAt is older than lastCheck.
  2. State Tracking:
    • Store the timestamp of the last processed star in a new file (e.g., apps/devindex/data/optout-sync.json).
  3. Blacklisting Logic:
    • Add newly discovered stargazers to apps/devindex/data/blacklist.json.
    • Remove them from the rich data store (users.jsonl), tracker.json, and failed.json.
  4. Pipeline Integration:
    • Run this new OptOut.mjs service at the beginning of the devindex-pipeline.yml workflow.
tobiu added the enhancement label on Feb 21, 2026, 4:23 PM
tobiu added the ai label on Feb 21, 2026, 4:23 PM
tobiu assigned to @tobiu on Feb 21, 2026, 4:24 PM
tobiu referenced in commit 596f4df - "feat(devindex): Implement Star-Based Opt-Out Service (#9230)" on Feb 21, 2026, 4:29 PM
tobiu
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 the neomjs/devindex-opt-out repository. It fetches them in batches of 100, sorted by STARRED_AT descending, and stops when it reaches previously processed timestamps.
  • apps/devindex/services/Storage.mjs: Added methods getOptOutSync, saveOptOutSync, and addToBlacklist to 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 the npm run devindex:optout command.
  • .github/workflows/devindex-pipeline.yml: Added the Run DevIndex Opt-Out step to run right before the Spider loop, ensuring clean data during the discovery run.

The tests have run correctly, catching NOT_FOUND cleanly, 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
tobiu referenced in commit 255abdc - "chore(devindex): Add optout-sync.json (#9230)" on Feb 21, 2026, 4:31 PM