Bug: ready-to-deliver goals missing from Kanban Queue/Ready/Blocked columns under Owner:Mine filter#1983
Merged
psdjungpulzze merged 1 commit intoJul 12, 2026
Conversation
On the Goals Kanban board, a filter-matching goal that sorts beyond the initially-loaded active page was invisible in every column and the column counts under-reported to 0 (repro: "Owner: My goals" + hide-unassigned active, a freshly-created ready-to-deliver goal owned by the user shows nowhere and Ready auto-collapses). The board filters + fallback counts only ran over the client-loaded page(s) of the server-paginated active set, and a brand-new goal sorts to the END of its priority band (createdAt ASC) so it's the most likely active goal to fall beyond page 1. Fix (client-side eager-load, consistent with the all-client-side facet filtering the board already uses): while ANY facet filter or a search is active, page through the ENTIRE non-terminal active set until its cursor is exhausted, so kanbanGoals/byColumn and the fallback counts become correct automatically. The unfiltered path is untouched — with no filter we keep the paginated initial load, DB-accurate project-wide bucket counts, and manual "Load more"; we do NOT eagerly fetch extra pages. (Server-side facet-filter + filter-aware counts is the scale follow-up if needed.) Also keep the Ready column expanded (not collapsed to a strip) while the active set is still loading under a filter, so a transient 0 count mid-load doesn't hide it; once fully loaded a genuine 0 collapses as before. Desktop is byte-identical when no filter is active. UI/board behavior only — no PM Agent tool/config surface changes, so no agent-config update is needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Integration PR for this goal — its tasks commit onto this branch (one PR per goal). Opened automatically by the engine on first push; left as a draft until the goal completes.
Delivery summary
What was built for this goal, assembled for review at delivery time.
Bug: ready-to-deliver goals missing from Kanban Queue/Ready/Blocked columns under Owner:Mine filter
BUG: on the Goals Kanban board (goals-kanban-view.tsx), with the "Owner: My goals" + "Hiding unassigned" filters active, goal G#592 ("Goals page: consolidate mobile toolbar...", id 7cda1426-78ba-4aeb-a687-8ff292b181cf) does not appear in ANY column -- Queue, Blocked, and Ready all render "0 / No goals matching filters", and Ready auto-collapses to its thin strip. Screenshots: ~/s/iScreen Shoter - 20260711172943593.jpg (Kanban board) and ~/s/iScreen Shoter - 20260711172948939.jpg (Approvals page, for contrast). Verified via the goal-detail API (GET /api/v1/me/engine/goals/7cda1426-...) that G#592 satisfies EVERY condition for the "ready to deliver" gate: status=open, prBoundary=true, prState=ready, deployGateState=passed, unresolvedMustFix=null, lastReviewedSha===prHeadSha (reviewed at head), mergeBlockedReasonKind=null, completion.complete=true, not paused. ownerId and createdById both match Peter's user (confirmed via createdByName="Peter Jung" in the API response), and ownerId is non-null, so it should pass both "Owner: My goals" and "Hiding unassigned". Yet other surfaces correctly recognize it as ready-and-Peter's: - Approvals "Needs Attention" page shows it as a "Ready to deliver" card with an Accept button, attributed to Peter Jung. - The Goals page's own right-sidebar "Awaiting acceptance" widget lists it correctly. -
npm run engine:attention --alllists it as[ready] Goal #592 ... -- ready to deliver. So the bug is isolated to the Kanban board's filtered bucket/column computation specifically -- NOT the underlying goal state, and not every UI surface. Investigation starting points (goals-kanban-view.tsx): -hasActiveFilters(filters)(goals-view.ts ~line 721) correctly returns true here (owner!=="all" and !includeUnassigned both true), so the column count SHOULD fall back to the client-computedbyColumn[col.key].length(from the loaded "active" goals array) rather than the possibly-stale DB aggregate (counts[col.key]) -- confirm this is actually happening. - Ready's "autoCollapse" derives its collapsed/expanded state purely from its OWN computed visible count (comment at ~line 796-853: "collapse when 0 ... filter-aware"). If that count is wrong (0 when it should be 1+), the column collapses and hides the "Load more" affordance (~line 1011-1027) that could otherwise reveal the goal -- a chicken-and-egg trap worth checking regardless of the root cause. - Queue and Blocked were NOT showing a "Load more" button in the screenshot (meaninghasMoreActivewas false -- the client believes the full "active" goals set is already loaded), yet G#592 (status=open, i.e. part of the active/non-terminal set) is still missing frombyColumn. That suggests the underlying "active goals" fetch/query itself may be excluding G#592 -- check whatever server query or hook populates the Kanban's active-bucket goals array (pagination page size, sort order, any owner/assignee predicate baked into the SERVER query that might not agree with the client-side "Owner: My goals" resolution), not just the client-side filter/column logic. - Consider whether this specifically affects VERY RECENTLY created/admitted goals (G#592 was created + queued today) -- e.g. a cache/rollup that hasn't been invalidated since creation (see the related, unmerged PR #1785 "Goals page server cost: scope per-page aggregates, bound goalComputeRollups" for a related caching angle, though that PR is about TTFB not correctness -- may or may not be connected). Quick repro for the investigating agent: log in as Peter, go to the Build project's Goals page (Kanban view), apply "Owner: My goals" (clear "Hiding unassigned" too if needed), and check whether G#592 (or G#593/594/595, its siblings, also created today) appear in Queue/Ready/Blocked. Also worth checking: does REMOVING the filters (Clear all) make it appear? That single experiment cleanly separates "client-side filter-matching bug" from "server-side active-goals fetch bug". Priority: high -- this misleads the goal owner about what needs their action on the primary work-tracking surface.Branch:
goal/bug-ready-to-deliver-goals-missing-from-kanban-queue-ready-b· PR: #1983What shipped
Plan of record
Ready-to-deliver goal G#592 is missing from the Kanban Queue/Ready/Blocked columns under 'Owner: My goals' + 'Hiding unassigned'. Root cause is isolated to the Kanban's loaded active-goal set (not the goal state, which every other surface reads correctly). Decomposed into an implementation task that reproduces to pin the exact cause, fixes it, and adds a regression test.
Acceptance criteria
Review
0 of 1 review finding(s) resolved.
Commits
5338acfe82e23bd795994e7c05c5ef7b19238824…158bef6dfc3e347b8f0b207d6ff8442f1f8207c5in InteractorOSS/product-manager