# CivicPulse CivicPulse is an offline-first coalition intelligence and policy provenance core for community organizers, unions, tenant groups, and campaign coalitions. It focuses on three hard problems: - Deterministic coordination when teams work disconnected. - Auditable provenance for policy drafts, endorsements, and evidence. - Privacy-preserving sharing between organizations. ## What is implemented - SQLite-backed immutable provenance ledger. - Coalition graph objects for organizations, contracts, proposals, endorsements, briefs, tasks, and shifts. - Deterministic sync helpers for replica reconciliation. - Role-based privacy redaction for shared policy briefs. - Graph-of-contracts registry for schemas and adapters. - CSV ingestion adapter for volunteer data. - CLI for audit and brief-sharing inspection. ## Repository layout - `src/idea192_civicpulse_offline_first/` core package. - `tests/` pytest coverage for provenance, privacy, sync, and replay behavior. - `test.sh` clean verification entrypoint. - `AGENTS.md` contributor guidance for future agents. ## Running ```bash bash test.sh ``` Or individually: ```bash python3 -m pytest -q python3 -m build ``` ## CLI ```bash civicpulse audit civicpulse share-brief ``` ## Design notes - Events are append-only and hashed for provenance. - Sync uses content-addressed event exchange, so local replicas can converge without a central admin. - Privacy defaults favor redaction, with minimal-signal sharing for public roles. - All stateful actions are recorded in the ledger before being surfaced through the service layer. ## Packaging The package name is `idea192_civicpulse_offline_first`, and this README is wired into `pyproject.toml` as the project long description.