Project

General

Profile

Actions

Feature #1527

closed
RA

Feature #1510: Implement internal user roles with ticket progression and assignment controls

Ticket panel: Move Forward and a role-correct Change Status control

Feature #1527: Ticket panel: Move Forward and a role-correct Change Status control

Added by Redmine Admin 4 days ago. Updated 4 days ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
07/31/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:

docs/superpowers/specs/2026-07-31-internal-roles-design.md

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
deployed_at:
branch:
pr_url:
security_key:
severity:
paused:

Description

**Surface:** frontend-only

First half of the frontend. A designer-agent section is appended to `docs/design/design-system.md` first, then `TaskDetailPane.tsx` gains a Move Forward action and a Change Status control, both rendered strictly from the server-provided capabilities.

The existing `useTransitionTask` hook (`src/features/tasks/useTransitionTask.ts`) is finally rendered — it has existed and been wired to a working route all along, but nothing has ever used it.

**The dropdown must not offer a developer anything the server would refuse:** a developer sees exactly the single next status (or no dropdown at all, leaving Move Forward as the only door); cto/admin see the full allowed set, forward and backward.

No status order and no permission rule may be duplicated in `src/`.

## Acceptance criteria
- [ ] A design-system section for these controls exists **before** the code lands, and the built UI matches it.
- [ ] FE types carry `internal_role`, `next_status_id`, `can_move_forward`, `allowed_statuses`; a grep proves no status-order array and no role predicate exists anywhere in `src/`.
- [ ] Move Forward renders only for internal users, is enabled iff `can_move_forward && next_status_id !== null`, and **names the concrete target stage** in its label.
- [ ] The disabled state uses `aria-disabled` (not a bare `disabled`, which drops focusability) with a keyboard-reachable tooltip wired via `aria-describedby`, explaining why — not assigned to you / no next stage.
- [ ] **Developer view:** the Change Status control offers exactly one option — `next_status` — or is hidden entirely with Move Forward left as the only control. A test asserts no other status is reachable from the developer's UI.
- [ ] **cto / admin view:** the control lists every allowed status, and a backward transition can be performed and succeeds.
- [ ] Backlog(16) never appears as a selectable target, in any role.
- [ ] **HARD:** on a Backlog ticket neither Move Forward nor Change Status renders for any role, including CTO and admin — Submit stays the only way out, tested for both.
- [ ] **Developer picks a non-next status → handled gracefully:** with a stale/forced option, submitting a non-next target surfaces the server 403 as an inline, readable error, optimistic state is rolled back and the pane refetches — asserted by test, not left to a toast.
- [ ] A 409 shows the existing invalid-transition message; neither error blanks the pane.
- [ ] An ordinary client sees no status controls at all — the pane is read-only on status exactly as today (regression test).
- [ ] The mutation invalidates both the board and the detail queries so the row re-groups under its new stage.
- [ ] New i18n keys in **both** `en.ts` and `fr.ts` (real French, identical ICU placeholders/plural branches).
- [ ] Vitest covers CTO, Developer-assigned, Developer-not-assigned, ordinary client, the backlog case, and the 403/409 renders.
- [ ] `npx vitest run && npx tsc --noEmit && npx eslint . && npm run build` all green.


Files

design-1527-before.png (296 KB) design-1527-before.png Redmine Admin, 07/31/2026 06:11 PM
design-1527-after.png (1.72 MB) design-1527-after.png Redmine Admin, 07/31/2026 06:11 PM
design-1527-mockup.html (24.6 KB) design-1527-mockup.html Redmine Admin, 07/31/2026 06:11 PM
design-1527-before-reconstruction.html (6.91 KB) design-1527-before-reconstruction.html Redmine Admin, 07/31/2026 06:11 PM
design-1527-before.png
design-1527-after.png
Actions

Also available in: PDF Atom