Review decisions on exhibition requests are currently one-way. Once a request leaves
submitted, its state is terminal:
- The organizer's inline/bulk actions (approve / reject / withdraw) only appear while a
request is submitted. After a decision the row shows no actions, and the detail view
drops to notes-only.
- A submitter who withdraws their own request cannot undo it, even if it was a mistake.
There is no "reinstate" action anywhere.
So a misclick is permanent: rejecting the wrong request, or a submitter withdrawing by
accident, can only be undone by editing the database.
This differs from the CfP in orga, where SubmissionStates.valid_next_states makes
decisions reversible — a rejected proposal can be accepted, and a withdrawn one can go
back to submitted.
Notes
- Reactivate, don't duplicate. Withdrawing an accepted request deactivates the
partner profile it created rather than deleting it. Re-approving must reactivate that
existing profile — the current approve path returns early when a partner is already
linked, so it would hand back the deactivated one without re-enabling it.
- Emails. Approve/reject queue the acceptance/rejection emails via the shared model
methods; a changed decision should queue the email matching the new state, and moving
back to submitted should not send a decision email.
- Terminal-state guards exist in a few places (list action endpoint, detail review form,
bulk actions) and all need to move to the shared transition map so the rules stay
consistent.
Follow-up on #91 #92
Review decisions on exhibition requests are currently one-way. Once a request leaves
submitted, its state is terminal:request is
submitted. After a decision the row shows no actions, and the detail viewdrops to notes-only.
There is no "reinstate" action anywhere.
So a misclick is permanent: rejecting the wrong request, or a submitter withdrawing by
accident, can only be undone by editing the database.
This differs from the CfP in orga, where
SubmissionStates.valid_next_statesmakesdecisions reversible — a rejected proposal can be accepted, and a withdrawn one can go
back to submitted.
Notes
partner profile it created rather than deleting it. Re-approving must reactivate that
existing profile — the current approve path returns early when a partner is already
linked, so it would hand back the deactivated one without re-enabling it.
methods; a changed decision should queue the email matching the new state, and moving
back to
submittedshould not send a decision email.bulk actions) and all need to move to the shared transition map so the rules stay
consistent.
Follow-up on #91 #92