# CCMA - Chaotic Creature Member Administration File-based member administration for Chaos Computer Club Mannheim e.V. The member store remains readable without this application. Every member has a directory containing `member.json`, `contributions.json`, an append-only `events.jsonl`, and a `files/` directory. ## Development Requires Python 3.11+ with Tk support. ```bash python -m venv .venv .venv/bin/pip install -r requirements.txt .venv/bin/ccma ``` For development tools and tests, install the `dev` extra as well: ```bash .venv/bin/pip install -e '.[dev]' ``` Alternatively, without installation: ```bash PYTHONPATH=src python -m ccma ``` On first start, select or create the central member-store directory. The `VERSION` file is the single source for application and package versions. ## Store layout ```text member-store/ ├── repository.json ├── hausmeister.json ├── rules/ └── members/ └── / ├── member.json ├── contributions.json ├── events.jsonl └── files/ ``` ## Housekeeper rules The housekeeper runs every rule for every member. Built-in Python rules live in `ccma/rules/scripts/`. A member store can add rules in its `rules/` directory. If a store rule has the same filename as a built-in rule, the store version replaces the built-in version. Store rules are trusted executable Python code. Only place reviewed rules from trusted sources in this directory. Rules return structured `RuleAction` objects; CCMA performs all file writes, duplicate checks, audit events, and atomic updates. `hausmeister.json` is written only after a complete run. Each refreshed task gets the pending run ID. A failed run therefore cannot advance the stored counter or silently resolve existing tasks. Do not place a real member store inside the source repository.