Manage issue blockers without leaving Today #531

Closed
opened 2026-08-11 01:51:08 +00:00 by timmy · 0 comments
Owner

Problem

Stackchain renders issue dependencies and uses them to gate Today, but operators cannot add or remove blockers in the dashboard. On mobile they must leave the active work flow, edit dependencies in Gitea, return, refresh, and restart context. Existing dependency work (#435, #437, #443) is read/navigation only.

Slice

Add authenticated, CSRF-protected issue dependency mutation APIs plus mobile issue-sheet controls to search, add, and remove blockers. Mutations must confirm canonical upstream state before changing the rendered list; removing the final blocker must refresh readiness without discarding the Today session.

Acceptance

  • Add one accessible open issue as a blocker and render the server-confirmed relationship.
  • Reject self, duplicate, closed, pull-request, malformed, or inaccessible candidates.
  • Remove a blocker only after upstream confirmation; preserve prior UI state on failure.
  • Revalidate that the source issue is assigned to the signed-in operator.
  • Coalesce repeated taps into one mutation.
  • Preserve Today plan/session and refresh readiness after the last blocker is removed.
  • Picker is keyboard accessible, has 44px controls, and does not overflow at 320px/390px.
  • Behavioral API/controller/mobile tests and full suite pass.

Non-duplication

All historical titles and recent commits through v0.1.0-rc.714 were checked. #435 surfaces blockers, #437 skips blocked items, and #443 previews blockers; none mutates dependency relationships.

## Problem Stackchain renders issue dependencies and uses them to gate Today, but operators cannot add or remove blockers in the dashboard. On mobile they must leave the active work flow, edit dependencies in Gitea, return, refresh, and restart context. Existing dependency work (#435, #437, #443) is read/navigation only. ## Slice Add authenticated, CSRF-protected issue dependency mutation APIs plus mobile issue-sheet controls to search, add, and remove blockers. Mutations must confirm canonical upstream state before changing the rendered list; removing the final blocker must refresh readiness without discarding the Today session. ## Acceptance - Add one accessible open issue as a blocker and render the server-confirmed relationship. - Reject self, duplicate, closed, pull-request, malformed, or inaccessible candidates. - Remove a blocker only after upstream confirmation; preserve prior UI state on failure. - Revalidate that the source issue is assigned to the signed-in operator. - Coalesce repeated taps into one mutation. - Preserve Today plan/session and refresh readiness after the last blocker is removed. - Picker is keyboard accessible, has 44px controls, and does not overflow at 320px/390px. - Behavioral API/controller/mobile tests and full suite pass. ## Non-duplication All historical titles and recent commits through v0.1.0-rc.714 were checked. #435 surfaces blockers, #437 skips blocked items, and #443 previews blockers; none mutates dependency relationships.
timmy self-assigned this 2026-08-11 01:51:08 +00:00
timmy closed this issue 2026-08-11 02:04:34 +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#531
No description provided.