Skip to content

Tickets: lock status changes while an approval request is pending - #280

Open
romanivan-flamingo wants to merge 9 commits into
mainfrom
hotfix/ticket-status-lock-pending-approval
Open

romanivan-flamingo wants to merge 9 commits into
mainfrom
hotfix/ticket-status-lock-pending-approval

Conversation

@romanivan-flamingo

@romanivan-flamingo romanivan-flamingo commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Summary

FE part of ClickUp 86ajqa7bv: a Tech Required ticket with a pending tool-approval request cannot change status. The server enforces the lock (openframe-saas-tenant#2764: 409 TICKET_STATUS_LOCKED_PENDING_APPROVAL, empty availableTransitions); this PR mirrors it in the UI so users see the reason instead of hitting the error.

  • Detail page - the inline status changer renders as a locked tag with the reason in a tooltip; handleTransition guards the programmatic path; the ticket refetches right after approve/reject so the lock releases immediately.
  • Board - dragging a locked card out of its lane toasts the reason and snaps the card back; the Take Over trigger on the assignee avatar toasts instead of opening the modal. The board fragment now selects statusDefinition.kind.
  • Take Over - blocked everywhere (agreed with BE; admin override is a follow-up pending designs): openTakeOver has a safety-net guard, both Start Direct Chat buttons disable with the tooltip while the AI still works a locked ticket.
  • Edit form - the status field disables with the tooltip.
  • Lock signal: Ticket.pendingApproval (added to GET_TICKET_QUERY; same pending semantics as the server-side lock - escalate-to-human offers excluded).

romanivan-flamingo and others added 2 commits August 24, 2026 15:53
A Tech Required ticket with a pending tool-approval request cannot change
status - the server rejects every transition (409, openframe-saas-tenant#2764)
and returns empty availableTransitions. Mirror the lock in the UI instead of
letting users hit the error:

- detail page: the inline status changer renders as a locked tag with the
  reason in a tooltip; handleTransition guards the programmatic path; the
  cached ticket refetches right after approve/reject so the lock releases
- board: dragging a locked card out of its lane toasts the reason and snaps
  back; the Take Over trigger on the assignee avatar toasts instead of
  opening the modal (the board fragment now selects statusDefinition.kind)
- take-over: openTakeOver has a safety-net guard, and both Start Direct Chat
  buttons disable with the tooltip while the AI still works a locked ticket
- edit form: the status field disables with the tooltip

The lock signal is Ticket.pendingApproval (now selected by GET_TICKET_QUERY),
which uses the same pending semantics as the server-side lock.

Requires @flamingo-stack/openframe-frontend-core with TicketStatusTag
disabled/disabledReason (openframe-oss-lib#1898) - version bump follows the
lib release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brings TicketStatusTag disabled/disabledReason and the TicketInfoSection
pass-through for the pending-approval status lock (openframe-oss-lib#1898).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@romanivan-flamingo
romanivan-flamingo marked this pull request as ready for review August 24, 2026 14:30
@romanivan-flamingo
romanivan-flamingo requested a review from a team as a code owner August 24, 2026 14:30
…dicate

The drop interception checked statusDefinition kind + pendingApproval
directly; isStatusLockedByPendingApproval is the single definition of the
lock and works on board dialogs since the fragment selects the kind.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@romanivan-flamingo romanivan-flamingo self-assigned this Aug 24, 2026
pavlo-flamingo
pavlo-flamingo previously approved these changes Aug 24, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@romanivan-flamingo
romanivan-flamingo enabled auto-merge (squash) August 25, 2026 12:29
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.

3 participants