Skip to content

fix(task-board): resolve the review sweeper's in-progress lane from the board - #6858

Merged
pedrofrxncx merged 1 commit into
mainfrom
fix/review-sweeper-lane-literal-w2
Sep 2, 2026
Merged

fix(task-board): resolve the review sweeper's in-progress lane from the board#6858
pedrofrxncx merged 1 commit into
mainfrom
fix/review-sweeper-lane-literal-w2

Conversation

@pedrofrxncx

@pedrofrxncx pedrofrxncx commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Follows #6790 ("every lane decision goes through the board, not a literal") and #6854, which fixed the same bug pattern elsewhere in the task-board reactions but missed this file.

TaskBoardReviewSweeper.dispatchDueRetries and .returnToTodo in review-sweeper.ts compared item.status against the hardcoded literal "in_progress" instead of asking the board which column means "in progress" (boardLanesForDb(...).progress). For an org on org_board_columns (a board mirrored from a tracker, e.g. Jira), the in-progress column has a different key — so dispatchDueRetries would silently skip every due infrastructure retry it scanned (the re-read guard would always read item.status !== lanes.progress as true and continue), and returnToTodo would never park a permanently-failed card back on To Do. Both fail silently: no error, no log, the card just never recovers.

Fix: read lanes.progress from the board via the existing boardLanesForDb call (already present in returnToTodo; added to dispatchDueRetries) and compare against that instead of the literal.

Failure scenario: an org-owned board whose in-progress column key isn't literally "in_progress" has a Super Agent task fail with a transient/infrastructure error. reactToFailedTaskRun schedules a retry correctly (it already goes through lanes.progress), but the sweeper's dispatchDueRetries never re-dispatches it — the card sits stuck forever with no visible error, and a permanently-failed one never gets parked back on To Do for a human either.

Reviewer: bun run fmt, cd apps/api && bunx tsc --noEmit, bunx oxlint src/tools/task-board/review-sweeper.ts all pass. No existing pure-function unit test covers this (both methods need a live board handle from Postgres), so I didn't add one rather than fake a DB — full CI's integration tier is the right place to catch a regression here.

Locally verified: fmt, targeted tsc, targeted oxlint. Full CI runs the rest.


Summary by cubic

Fixes the review sweeper to compare against the board's actual in-progress lane instead of the hardcoded "in_progress" status. Previously, on orgs with custom board columns (e.g., mirrored from Jira), due retries were silently skipped and permanently-failed cards were never parked back on To Do.

Written for commit fd54e7f. Summary will update on new commits.

Review in cubic

@pedrofrxncx
pedrofrxncx merged commit ec67bce into main Sep 2, 2026
33 checks passed
@pedrofrxncx
pedrofrxncx deleted the fix/review-sweeper-lane-literal-w2 branch September 2, 2026 13:18
decocms Bot pushed a commit that referenced this pull request Sep 2, 2026
PR: #6858 fix(task-board): resolve the review sweeper's in-progress lane from the board
Bump type: patch

- decocms (apps/api/package.json): 4.319.1 -> 4.319.2
- @decocms/native (apps/native/package.json): 4.319.1 -> 4.319.2

Deploy-Scope: server
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant