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.
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:
.venv/bin/pip install -e '.[dev]'
Alternatively, without installation:
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
member-store/
├── repository.json
├── hausmeister.json
├── rules/
└── members/
└── <uuid>/
├── 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.