Migrate Approvals interface patterns

This commit is contained in:
2026-08-03 12:55:27 +02:00
parent 62d0f300cb
commit 24e95591e0
9 changed files with 333 additions and 22 deletions
+30
View File
@@ -0,0 +1,30 @@
# Approvals Interface Pattern Migration
This migration applies the GovOPlaN interface pattern language to the
Approvals-owned route without changing the append-only approval model or
importing optional sibling modules.
## Surface Inventory
| Surface | Archetype | Consequence class | Contract |
| --- | --- | --- | --- |
| `/approvals` list | Searchable work queue | Select request or create immutable chain | Shared loading, empty, error, permission, selection, and help states |
| Approval detail | Governed record detail | Inspect exact subject, chain, state, and evidence | Locale-aware history, status, provenance, explained lifecycle actions |
| Request dialog | Consequential definition editor | Freeze exact subject and approval chain | Guarded draft, field help, validation reasons, at least one step |
| Decision dialog | Governed decision | Append approval or rejection evidence | Required reason/signature, guarded draft, explicit confirmation action |
## Consequence And Availability Rules
- Creation freezes the subject identity and digest plus every ordered step,
selector, quorum, separation, and signature requirement.
- Approving or rejecting appends attributable evidence and cannot be edited.
- Only pending or escalated requests can be decided. Terminal requests remain
available for reconstruction.
- Missing create or decide permission is visible and points to the Access role
assignment destination and responsible administrator.
- Signature references are evidence pointers and never a cryptographic claim.
The module uses Core dialogs, controls, status, blockers, help, loading, empty,
error, and draft-guard contracts. Native selection buttons preserve keyboard
order; bounded list/detail viewports remain responsive. English and German
catalogues cover module-owned copy and dates follow the active platform locale.