Integrate committee ballots with Voting

This commit is contained in:
2026-08-01 20:57:25 +02:00
parent 758b59ca03
commit 133e55987e
12 changed files with 565 additions and 104 deletions
+10 -8
View File
@@ -19,12 +19,13 @@ protected local Decision projection so the outcome remains reconstructable.
The `/committee` WebUI provides the body, meeting, agenda, vote, and minutes
workspace using the same immutable revisions and lifecycle guards as the API.
`committee.ballot_finalizer` delegates provider-bound external or secret
ballots to `committee.ballot_adapter.<provider>` capabilities. Committee
validates the exact choices, eligible/cast totals, tenant evidence, receipt,
and result hash, then stores only the verified aggregate. Individual ballots
never enter Committee persistence, and a provider-bound vote cannot be closed
through the generic workspace endpoint.
When Voting is installed, Committee creates and follows a governed
`voting.ballots` record while retaining only its meeting/agendum reference and
verified aggregate outcome. Voting owns the frozen electorate, casting,
tallying, certification, challenge, and annulment lifecycle. The older
`committee.ballot_finalizer` / `committee.ballot_adapter.<provider>` path
remains a 0.1 compatibility boundary for existing external integrations;
individual provider ballots never enter Committee persistence.
## Initial Ownership
@@ -57,6 +58,7 @@ Expected optional integrations:
- tasks
- workflow
- approvals
- voting
## Development Install
@@ -83,8 +85,8 @@ use a separate read permission. Database restore is the semantic recovery unit;
linked Calendar, Files, Records, Tasks, Approvals, and Decisions objects retain
their own recovery responsibility.
`POST /api/v1/committee/workspace/vote/{vote_id}/finalize-provider` is the
separate effect boundary for an installed ballot adapter. It requires the
`POST /api/v1/committee/workspace/vote/{vote_id}/finalize-provider` is the 0.1
compatibility effect boundary for an installed ballot adapter. It requires the
`committee:ballot:finalize` permission and preserves provider receipt/hash and
evidence without exposing or persisting individual votes.