Freeze a Decision at Opening
What It Does
Staff open a draft directly or another business step creates an open decision. The stored snapshot determines later evaluation even if membership or rules change. Secret voting cannot open with the production port at these commits. The port’s intended outbox behavior is a future requirement, not a built external election service.
The Flow
Lock the draft and committee and load effective decision rules, using the implemented defaults when absent. Check voting method, meeting association, closing time and named threshold. Capture dated voters, authorized seats and meeting attendance and allocate the committee’s yearly sequence number. For a secret ballot invoke the ballot port inside the transaction; the production port is unavailable. Persist the open event and prepare each voter’s notice.
When Something Fails
Reject an invalid opening. No open record. Return the validation refusal. No snapshot is committed. Roll back the opening transaction. No number or snapshot survives failure. Reject opening while no ballot implementation exists. A future synchronous external implementation could act before a rollback. Log a skipped notice without a recovery ledger. Some voters may never receive the call to vote.
Open Design Questions
The stored snapshot determines later evaluation even if membership or rules change. Secret voting cannot open with the production port at these commits. The port’s intended outbox behavior is a future requirement, not a built external election service.