feat(approvals): deferred functionality — delegation, notifications, lifecycle tie-ins #169
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The approvals/ECO workflow system has a complete backend API (migrations 018-019,
internal/api/approval_handlers.go,internal/workflow/workflow.go) but several planned features are not yet implemented. This issue tracks deferred functionality that should be built as the system matures.Current State
Implemented:
Not implemented (this issue):
1. Approval Delegation / Proxy Signing
Allow a signer to delegate their approval to another user.
POST /api/items/{pn}/approvals/{id}/delegate— signer delegates to another userdelegated_byfield2. Email / Notification Integration
Notify signers when they have pending approvals.
approval.created: send notification to all listed signersapproval.signed: notify remaining unsigned signers and the creatorapproval.completed: notify all participants3. Lifecycle State Tie-Ins
Automatically transition item lifecycle state based on approval outcomes.
engineering-changeworkflow completes withapproved:review→released(if item has .kc metadata with lifecycle)rejectedor back todraft4. Approval Templates
Pre-filled signer lists per workflow for common approval patterns.
POST /api/approval-templates— create template (name, workflow, default signers)GET /api/approval-templates— list templates5. Bulk Approval Operations
Approve/reject multiple items in one action.
POST /api/approvals/bulk-sign— sign multiple pending approvals at once6. Web UI
No approval UI exists. Needed:
Partially covered by #147 (metadata tab scaffolds an approvals page placeholder).
7. Session Override Workflow (from #167)
The
session-overrideworkflow (#167) adds approval-gated force-release for edit sessions. This requires:resource_type+resource_idrather than justitem_idPriority
Acceptance Criteria
This is a tracking issue. Individual items should be broken into separate issues when prioritized for implementation.