Keep Build my Today readiness checks within transport capacity #637

Closed
opened 2026-08-12 09:20:04 +00:00 by timmy · 0 comments
Owner

Problem

Build my Today currently starts one dependency-detail request per ranked candidate with an unbounded Promise.all. The dashboard transport admits seven concurrent reads and fast-fails excess requests, so a larger My Work queue can mark ready work as unverified because the planner saturated its own transport.

Scope

  • Inspect ranked candidates through a bounded worker pool below the shared read bulkhead.
  • Preserve candidate/result order when requests complete out of order.
  • Supersede stale builds so closing or rebuilding the planner cannot overwrite the current draft.
  • Keep genuine dependency failures truthful and retain the explicit Save / Save & start boundary.

Acceptance tests

  • More candidates than the planner limit never exceed bounded in-flight readiness checks.
  • Out-of-order completions preserve ranked recommendation order.
  • A superseded build does not publish stale results.
  • Real lookup failures remain unverified.
  • Focused and full suites pass.

Evidence: frontend/dashboard.js uses unbounded Promise.all(candidates.map(...)) while src/gitea_proxy.py defaults to seven read slots with 250ms admission. Historical issue-title and commit review found no planner-specific concurrency/supersession implementation; #633/#635 introduced recommendation and estimates, while #441 covers the separate Today-start path.

## Problem Build my Today currently starts one dependency-detail request per ranked candidate with an unbounded `Promise.all`. The dashboard transport admits seven concurrent reads and fast-fails excess requests, so a larger My Work queue can mark ready work as unverified because the planner saturated its own transport. ## Scope - Inspect ranked candidates through a bounded worker pool below the shared read bulkhead. - Preserve candidate/result order when requests complete out of order. - Supersede stale builds so closing or rebuilding the planner cannot overwrite the current draft. - Keep genuine dependency failures truthful and retain the explicit Save / Save & start boundary. ## Acceptance tests - More candidates than the planner limit never exceed bounded in-flight readiness checks. - Out-of-order completions preserve ranked recommendation order. - A superseded build does not publish stale results. - Real lookup failures remain unverified. - Focused and full suites pass. Evidence: `frontend/dashboard.js` uses unbounded `Promise.all(candidates.map(...))` while `src/gitea_proxy.py` defaults to seven read slots with 250ms admission. Historical issue-title and commit review found no planner-specific concurrency/supersession implementation; #633/#635 introduced recommendation and estimates, while #441 covers the separate Today-start path.
timmy self-assigned this 2026-08-12 09:20:04 +00:00
timmy closed this issue 2026-08-12 09:28:49 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#637
No description provided.