diff --git a/Repo-README.-.md b/Repo-README.-.md index c01ec99..1756379 100644 --- a/Repo-README.-.md +++ b/Repo-README.-.md @@ -1,4 +1,4 @@ - + > Mirrored from `/mnt/DATA/git/govoplan-committee/README.md`. > Origin: `repository`. @@ -13,13 +13,25 @@ `govoplan-committee` is the GovOPlaN module for committee, board, council, and senate workflows for meetings, agendas, minutes, deliberation, voting, formal decision references, and follow-up tasks. -The first headless slice exposes a versioned `committee.decision_path` -capability. It combines committee meeting context with an effective Mandate, +The backend now exposes versioned `committee.workspace` and +`committee.decision_path` capabilities. The workspace persists immutable, +OCC-guarded revisions for bodies, meetings, agenda items, governed vote +results, and minutes, with replay-safe lifecycle events. The decision path +combines that committee context with an effective Mandate, including organization, function, and jurisdiction coverage, with approval, legal bases, evidence, reasoning, and effects to create the shared formal Decision contract. Mandate resolution and Decision persistence remain -optional providers. The module intentionally does not yet add HTTP routes, -database models, migrations, or WebUI navigation. +optional providers. If Decisions is absent, Committee retains a bounded, +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.` 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. ## Initial Ownership @@ -69,6 +81,20 @@ cd /mnt/DATA/git/govoplan-committee PYTHONPATH=src:/mnt/DATA/git/govoplan-core/src /mnt/DATA/git/govoplan-core/.venv/bin/python -m unittest discover -s tests ``` +## API And Recovery + +`/api/v1/committee/workspace/{body|meeting|agenda_item|vote|minute}` supports +bounded list/read/write and immutable history. Writes require an idempotency +key and expected revision after creation. Protected local Decision projections +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 +`committee:ballot:finalize` permission and preserves provider receipt/hash and +evidence without exposing or persisting individual votes. + ## Gitea Workflow Issue templates are installed under `.gitea/`, and the shared label taxonomy is copied to `docs/gitea-labels.json` with the module label `module/committee`.