Erstmal: Danke. Prometheus lebt davon, dass Maintainer von OSS-Libraries, Mirror-Betreiber, Forschende und Tooling-Entwickler:innen mitarbeiten.
Dieses Dokument deckt drei Pfade:
- Code-Beitrag (PR gegen
main) - Mirror-Betrieb (eigene Mirror-Instanz spiegeln in
mirrors.jsonimprometheus-federation-Repo) - Maintainer-Erweiterung (
MAINTAINERS.mdergänzen)
Vorher: lies CODE_OF_CONDUCT.md. Sicherheitslücken nicht hier melden, sondern via SECURITY.md.
1. Code-Beitrag#
Setup#
Voraussetzungen: Node 20+, Python 3.10+, Git, make (optional, nur wenn du den globalen Test-Runner über Make abgebildet sehen willst).
git clone https://codeberg.org/mortisnexus/prometheus-project.git
cd prometheus-project
# proto-Workspace (Submission-Schema + Crypto)
cd src/proto/crypto-py && python -m venv .venv && . .venv/bin/activate && pip install -e .[test]
cd ../crypto-ts && npm install
cd ../../..
# Konzept-Doku rendern (lokal)
# `--directory` ist Pflicht, nicht `--bind`: Ohne die Einschränkung läge unter
# dem servierten Root auch .secure/ (private ed25519-Keys, Mirror-DIDs) und
# PEN/_findings/. `--bind 127.0.0.1` entfernt davon nur die NETZ-Exposition —
# jeder lokale Prozess erreicht 127.0.0.1 weiterhin, etwa ein postinstall-Hook
# in einem parallel laufenden `npm install`, der GET /.secure/ ausliest.
python3 -m http.server 8000 --bind 127.0.0.1 --directory concept # → http://localhost:8000/
Coding-Standards#
Pro Workspace gilt:
- Python:
ruff check,ruff format --check,mypy --strictmüssen grün sein. Tests:pytest -q. Coverage-Schwelle ≥ 80 % auf neuem Code. - TypeScript:
npm run typecheck(=tsc --noEmit),npm test(=vitest run). Coverage-Schwelle ≥ 80 % (V8-Provider). - Rust (ab
src/mirror/):cargo fmt --check,cargo clippy -- -D warnings,cargo test.
CI verdrahtet das in .forgejo/workflows/pr-quick.yml (Codeberg) und spiegelt nach .github/workflows/pr-quick.yml für GitHub-Mirror. ADR-DEV-0001 dokumentiert die CI-Wahl.
4-Agent-Review-Gate#
Vor jedem Commit/Push muss ./review.sh ein PASS aller vier Review-Agents (Gauss, Euler, Bohr, Newton) zeigen — siehe CLAUDE.md §Code Review Process. Das schließt explizit ein:
- Konsistenz gegen
concept/(kein Drift zwischen Code und Doku ohne PR-Ergänzung der Doku). - PII-Defense-in-Depth darf nicht „aufgeräumt" werden — Stufen 5 + 6 aus
concept/data-flow.mdmüssen koexistieren.
PR-Workflow#
- Branch von
main:feature/<sprint-id>-<kurzname>oderfix/<thema>oderdoc/<thema>. - Vor dem ersten Commit:
pre-commit install(siehe.pre-commit-config.yaml). - Commit-Message: imperativ, Deutsch ok, eine Zeile <72 Zeichen + leere Zeile + Body. Konsole/CHANGELOG-Sätze in Vergangenheit/Perfekt formulieren. Sprint-ID in der ersten Zeile als
sprint(<id>): …wenn der PR genau einen Sprint adressiert. - Tests grün, Coverage nicht gesenkt.
- PR-Body verlinkt: Sprint, K-Bezug (falls gemessen), berührte ADRs.
- Mindestens ein Maintainer-Review approve; Federation-relevante Änderungen (
concept/ADR-v2-*,mirrors.json-Schema-Edits, neue Major-Schema-Version) brauchen zwei Maintainer.
2. Mirror-Betrieb#
Ein Mirror akzeptiert Submissions (POST /v1/submit), persistiert in ClickHouse, hängt Hashes an Sigstore Rekor und veröffentlicht tägliche Open-Data-Snapshots (concept/system-overview.md §4–6).
Voraussetzungen, bevor du mirrors.json ergänzt (ADR-v2-0006):
- Eine Mirror-DID (
did:key:z…) erzeugt und sicher verwahrt. - EU-Hosting bevorzugt (DSGVO-Pragmatik); andere Regionen erlaubt, GDPR-Verantwortung liegt dann beim Betreiber (
infrastructure-map.md§4.5). - Datenschutzerklärung auf Basis des Templates in
infra/legal/mirror-agb-template.mdöffentlich publiziert; URL alsprivacy_policy_urlim Mirror-Record (Pflichtfeld, sieheADR-v2-0006Schema). - Mindestens drei Co-Sign-Reviews auf deinen
mirrors.json-PR.
infra/docker-compose.yml startet den Phase-1-Mirror-Stack lokal — ClickHouse + Sigstore-Rekor + Mock-Mirror-API. Für Produktion siehe src/mirror/README.md (kommt mit Sprint P2-Ph1-S1).
3. Maintainer-Erweiterung#
Pfad in MAINTAINERS.md dokumentiert. Kurz:
- PR gegen
MAINTAINERS.mdmit deiner DID, Handle, Organisation, Rollen-Wunsch. - Zwei bestehende Maintainer co-signieren.
- Innerhalb von 14 Tagen ein erfolgreicher Co-Sign auf das nächste Federation-Artefakt.
Schreibstil & Sprache#
- Konzept-Doku unter
concept/ist Deutsch, sachlich, beratend. Englisch nur für Standardbegriffe (PURL, Mirror, SDK, Federation, Snapshot, k-Anon). - Code und Code-Kommentare sind Englisch (npm/PyPI/Crates erwarten EN-Dokumentation).
- Commits, Issues, PRs dürfen Deutsch oder Englisch sein — Hauptsache klar.
Frontmatter-Pflicht in concept/*.md:
---
title: …
status: …
audience: …
---
Bei substantieller Änderung status:-Zeile updaten. Konsistenz-Wächter ist concept/06-offene-punkte.md und concept/06b-doku-audit.md.
Wo melde ich was?#
| Was | Wohin |
|---|---|
| Bug oder Feature-Request | Issue im Repo, Label setzen wenn möglich |
| Sicherheitslücke | SECURITY.md-Pfad, NICHT Issue-Tracker |
| Re-Identifikations-Demo | SECURITY.md-Pfad, 90 Tage Disclosure-Frist |
| Doku-Diskussion / Konzeptfrage | Issue mit Label concept |
| Mirror-Onboarding | Issue mit Label federation und Mirror-DID-Vorschlag |
| Sprint-Plan-Konflikte | Issue mit Label sprint und Verweis auf sprints/INDEX.md |