|
| 1 | +# ADR-025: Governance Approval Workflow |
| 2 | + |
| 3 | +## Tag |
| 4 | +#adr_025 |
| 5 | + |
| 6 | +## Status |
| 7 | +Proposed |
| 8 | + |
| 9 | +## Date |
| 10 | +2026-06-22 |
| 11 | + |
| 12 | +## Scope |
| 13 | +ModularityKit.Mutator.Governance |
| 14 | + |
| 15 | +## Context |
| 16 | + |
| 17 | +The core mutation model already supports `PolicyRequirement`, and the governance package already introduces pending mutation requests. |
| 18 | + |
| 19 | +What is still missing is the explicit approval flow that connects both concepts: |
| 20 | + |
| 21 | +- a mutation request enters `PendingApproval` |
| 22 | +- request-level requirements become visible and durable |
| 23 | +- approvers can approve or reject |
| 24 | +- decisions become part of request history |
| 25 | +- approved requests move toward execution |
| 26 | + |
| 27 | +Without this workflow, approval remains only a modeled intention and not an executable governance capability. |
| 28 | + |
| 29 | +## Decision |
| 30 | + |
| 31 | +The governance package should implement approval as a first-class specialization of pending request lifecycle. |
| 32 | + |
| 33 | +Expected direction: |
| 34 | + |
| 35 | +- `PolicyRequirement` should map into request-level approval requirements |
| 36 | +- approval should not be represented only as a policy denial outcome |
| 37 | +- approval and rejection must be explicit governance actions |
| 38 | +- approval decisions must be recorded through `MutationRequestDecision` |
| 39 | +- approved requests must have a defined path toward execution |
| 40 | +- rejected requests must transition into a terminal governed status |
| 41 | + |
| 42 | +Multi-step and multi-actor approvals should be supported by the model, even if the first runtime implementation starts with a simpler flow. |
| 43 | + |
| 44 | +## Design Rationale |
| 45 | + |
| 46 | +- Approval is one of the main reasons to introduce governance separately from core runtime. |
| 47 | +- The request model already provides the right seam for deferred approval-based execution. |
| 48 | +- Approval should build on pending lifecycle rather than creating a parallel flow model. |
| 49 | + |
| 50 | +## Consequences |
| 51 | + |
| 52 | +### Positive |
| 53 | + |
| 54 | +- Governance gains a real approval process instead of a placeholder concept. |
| 55 | +- Request history becomes meaningful for approval-driven changes. |
| 56 | +- Future integrations with identity, ticketing, or compliance systems have a natural workflow hook. |
| 57 | + |
| 58 | +### Negative |
| 59 | + |
| 60 | +- Approval introduces additional lifecycle complexity and version-drift concerns. |
| 61 | +- The runtime must define how approved requests behave when state has changed since submission. |
| 62 | + |
| 63 | +## Related ADRs |
| 64 | + |
| 65 | +- ADR-021: Governance Pending Mutation Lifecycle |
| 66 | +- ADR-023: Governance Versioned Request Resolution |
| 67 | +- ADR-024: Governance Runtime Pending Request Handling |
0 commit comments