Assignment
Create a local proposal API with two users, two tickets, immutable proposal records, and a fake write adapter.
Build sequence
- Implement approve, reject, expire, and apply transitions.
- Test changes to content, target, identity, and resource version after approval.
- Attempt duplicate application and application after rejection.
- Capture an audit record linking the approver, proposal, and final effect.
Acceptance checks
- No mutation occurs for changed, rejected, expired, or unauthorized proposals.
- Repeated application has at most one side effect.
- The reviewer can understand the exact action without inspecting a model transcript.
Evidence to keep
Submit the working artifact or decision document described above, the inputs used, and the observed results for every acceptance check. Include one failed attempt and the change you made after investigating it. Label fixture-based outcomes separately from live-system measurements. These artifacts become part of your final portfolio review.