LearnNewsExamplesServices
Frontmatter
id9121
titleDevIndex: Implement "Penalty Box" for Failed User Updates
stateClosed
labels
bugaiperformance
assigneestobiu
createdAtFeb 12, 2026, 9:48 PM
updatedAtFeb 12, 2026, 9:53 PM
githubUrlhttps://github.com/neomjs/neo/issues/9121
authortobiu
commentsCount1
parentIssue9106
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 12, 2026, 9:53 PM

DevIndex: Implement "Penalty Box" for Failed User Updates

Closed v12.0.0 bugaiperformance
tobiu
tobiu commented on Feb 12, 2026, 9:48 PM

This task addresses a critical inefficiency in the DevIndex Updater service where "toxic" users (those who consistently trigger 502/504/403 errors) block the update queue.

Problem: Currently, when a user update fails, the Updater logs the error but does not update the lastUpdate timestamp in tracker.json. This causes the Scheduler to prioritize these same failed users again in the very next run, creating an infinite loop of failures that wastes API quota (especially with the new hourly workflow).

Solution ("The Penalty Box"): Modify DevIndex.services.Updater to update the lastUpdate timestamp to the current time even when an update fails.

Logic:

  • On Success: Update lastUpdate (Standard).
  • On Failure: Update lastUpdate (New).
  • Outcome: Failed users are pushed to the back of the priority queue. They will be retried only after the entire backlog (~3 days) is processed, preventing them from DOS-ing the hourly workflow.

Impact:

  • Unblocks the "Safe 200" hourly workflow.
  • Ensures 100% of the quota is spent on fresh, processable users.
tobiu added the bug label on Feb 12, 2026, 9:48 PM
tobiu added the ai label on Feb 12, 2026, 9:48 PM
tobiu added the performance label on Feb 12, 2026, 9:48 PM
tobiu assigned to @tobiu on Feb 12, 2026, 9:50 PM
tobiu added parent issue #9106 on Feb 12, 2026, 9:50 PM
tobiu referenced in commit e084582 - "fix: Implement Penalty Box for failed user updates (#9121) on Feb 12, 2026, 9:52 PM
tobiu
tobiu Feb 12, 2026, 9:52 PM

Input from Gemini 3 Pro:

✦ I have implemented the "Penalty Box" logic in Updater.mjs.

Change: Inside the processUser catch block, I added:

indexUpdates.push({ login, lastUpdate: new Date().toISOString() });
successCount++;

Effect: Any user that fails processing (after retries) will now have their lastUpdate timestamp set to now. This pushes them to the very end of the priority queue, ensuring the next hourly run picks up fresh, unblocked users. This effectively "unclogs" the pipeline.

tobiu closed this issue on Feb 12, 2026, 9:53 PM
tobiu cross-referenced by #9122 on Feb 12, 2026, 9:55 PM