Sacha Al Himdani
ab5f42ad74
Redesign document approval flow
...
Replace the per-approver add/remove model with a quorum-based approval
system. Documents now have default approvers that are pre-populated when
requesting approval, and the publish dialog lets users adjust the list
before submitting.
Key changes:
- Add PENDING_APPROVAL document version status with dedicated transitions
- Introduce approval quorums with request/approve/reject/void lifecycle
- Add default approvers per document (stored in document_default_approvers)
with MERGE-based upsert for efficient sync
- Add NoDuplicates validator for slice fields
- Split ALTER TYPE ADD VALUE migrations into separate files (required by
PostgreSQL when run inside transactions)
- Use VOIDED consistently for both quorum status and decision state enums
- Expose void/approve/reject through GraphQL and MCP, with e2e tests
- Add approval management UI: publish dialog with approver selection,
approval list with void support, and external approve/reject page
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com >
2026-04-09 18:18:30 +02:00
..
2026-04-09 18:18:30 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-09 13:06:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-21 19:16:19 +01:00
2026-03-21 19:16:19 +01:00
2026-03-21 19:16:19 +01:00
2026-04-03 11:56:06 +02:00
2026-04-09 13:06:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-02 14:37:29 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-15 15:04:27 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-09 13:06:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-09 18:18:30 +02:00
2026-04-03 17:38:28 +02:00
2026-04-03 17:38:28 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 18:18:30 +02:00
2026-03-31 13:31:30 +02:00
2026-04-09 18:18:30 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 17:38:28 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 18:18:30 +02:00
2026-03-27 19:43:20 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-09 13:06:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-31 13:31:30 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-18 19:19:04 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-19 16:37:51 +01:00
2026-03-19 10:02:28 +01:00
2026-03-19 16:37:51 +01:00
2026-03-17 15:05:31 +01:00
2026-03-17 15:05:31 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 17:51:31 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-02 10:59:25 +02:00
2026-04-02 14:37:29 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-24 15:55:31 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-09 13:06:06 +02:00
2026-04-09 13:06:06 +02:00
2026-04-09 13:06:06 +02:00
2026-04-09 13:06:06 +02:00
2026-04-09 13:06:06 +02:00
2026-04-02 13:35:39 +02:00
2026-04-02 13:35:39 +02:00
2026-04-03 08:33:37 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00
2026-03-25 17:38:32 +01:00
2026-04-03 11:56:06 +02:00