Frontmatter
| id | 9044 |
| title | Fix: DevRank Updater Infinite Loop & Tracker Pruning |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Feb 7, 2026, 10:42 PM |
| updatedAt | Feb 7, 2026, 10:46 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9044 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8930 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 7, 2026, 10:46 PM |
Fix: DevRank Updater Infinite Loop & Tracker Pruning
tobiu added parent issue #8930 on Feb 7, 2026, 10:43 PM
tobiu assigned to @tobiu on Feb 7, 2026, 10:44 PM

tobiu
Feb 7, 2026, 10:46 PM
Input from Gemini 3 Pro:
✦ Fixed critical issues in the DevRank update cycle.
Fixes
- Infinite Loop for Bots:
Updater.mjsnow updates thetracker.jsonwith the current timestamp even for users who returnnull(bots, deleted, or errors). This ensures they are not immediately re-selected by the scheduler in the next run.- Tracker Pruning:
Cleanup.mjsnow filters thetracker.jsonto remove users who have been updated but did not meet the contribution threshold (and are not whitelisted). This effectively prunes low-value users from the index, preventing the tracking file from growing indefinitely with inactive accounts.- Case Sensitivity:
Storage.mjsnow normalizes login keys to lowercase before updating the tracker map, preventing duplicate entries for users with different casing in different contexts.Code committed to
devbranch.
tobiu closed this issue on Feb 7, 2026, 10:46 PM
Fix two critical issues in the DevRank update cycle:
Infinite Loop for Bots: The Updater currently skips adding
indexUpdatesfor users that returnnull(bots/deleted). This leaves theirlastUpdateasnullin the tracker, causingManager.runUpdateto re-select them immediately in the next run.Updater.mjs, ensureindexUpdatesis pushed even iffetchUserDatareturns null (set timestamp to now, or remove from tracker/add to blacklist).Tracker Pruning: The
Cleanup.mjsservice currently does not prune low-value users fromtracker.json, only fromusers.json. This means we keep tracking thousands of inactive users forever.Cleanup.mjs, remove users fromtracker.jsonif they do not meet the contribution threshold (and are not whitelisted).Plan:
Updater.mjs: EnsureindexUpdatesis populated for "SKIPPED (No Data/Bot)" cases.Cleanup.mjs: Update the tracker filtering logic to respect the contribution threshold, effectively pruning the index.Storage.mjs: Ensure case-insensitivity for logins to prevent duplicates.