mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-01 19:26:53 +02:00
65 lines
1.8 KiB
Markdown
65 lines
1.8 KiB
Markdown
# 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/
|
|
└── <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.
|