STATUS · Methoden-Protokoll · API- und Spurentrennung · v0.4 · publikationsbereit
ZAHLEN · keine empirischen Zahlen; Vorlagen ohne echte Schlüssel
PARTNER · Ein-Mensch-Werkstatt · unabhängig · privat finanziert
DATUM · 2026-09-23 · Kennung FORSCH-PROV0446 (PROVISORISCH)
AUTOR · Thomas Schüller · Syntagma Forschung · Wien · ORCID 0009-0003-9799-6747

Abbildung 1: Vier Spuren mit getrennten Konten, Schlüsseln, Lizenzen und Ablagen. Das Prüfwerkzeug blockiert die Veröffentlichung, sobald Spuren einer fremden Spur im Bündel stehen.
Grundregel: je Spur eine eigene .env-Datei, ein eigenes
Konto, eigene Schlüssel, eigene Repositorien. Nie ein Schlüssel einer
Spur in der Datei einer anderen. Diese Fassung ist bewusst ohne
Betriebsdaten der kommerziellen Spuren geschrieben: Adressen,
Mail-Konten und Anbieter stehen als Platzhalter.
| Spur | Zweck | Lizenz der Ergebnisse | Kennungsreihe | Schlüssel-Suffix |
|---|---|---|---|---|
| FORSCHUNG | offene Forschung (Syntagma Forschung) | Texte CC BY 4.0, Code AGPL-3.0 | FORSCH- | _FORSCHUNG |
| SCHICHTWERK-OPS | kommerzielle Fertigung, Marke Schicht-Werk | kommerziell | SW- | _OPS |
| SIGNALWERK | Dachmarke der Werkzeugprodukte | kommerziell, kein CC BY auf Produktcode | SIG- | _SIGNALWERK |
| CUEPOINT | Veranstaltungstechnik | kommerziell | CUE- | _CUEPOINT |
~/secrets/
├── .env.forschung
├── .env.schichtwerk
├── .env.signalwerk
├── .env.cuepoint
└── README.md
Alle vier Dateien: chmod 600, außerhalb jedes
Repositoriums, nie eingecheckt.
.env.forschungTRACK=forschung
AUTHOR_NAME="Thomas Schüller"
AUTHOR_ORCID="0009-0003-9799-6747"
AUTHOR_MAIL="forschung@tschueller.com"
AUTHOR_BRAND="Syntagma Forschung · Wien"
ZENODO_TOKEN_FORSCHUNG=
ORCID_CLIENT_ID_FORSCHUNG=
ORCID_CLIENT_SECRET_FORSCHUNG=
ANTHROPIC_API_KEY_FORSCHUNG=
HOSTING_KEY_FORSCHUNG=
GIT_TOKEN_FORSCHUNG=.env.schichtwerkTRACK=schichtwerk
COMPANY_MAIL=<Ops-Konto>
COMPANY_DOMAIN=<Ops-Domain>
HOSTING_HOST_OPS=
HOSTING_USER_OPS=
HOSTING_PASS_OPS=
SHOP_API_TOKEN_OPS=
ANTHROPIC_API_KEY_OPS=
GIT_TOKEN_OPS=.env.signalwerkTRACK=signalwerk
BRAND_MAIL=<SIG-Konto>
BRAND_DOMAIN=<SIG-Domain>
LICENSE_SERVER_KEY_SIGNALWERK=
STORE_API_TOKEN_SIGNALWERK=
ANTHROPIC_API_KEY_SIGNALWERK=
GIT_TOKEN_SIGNALWERK=.env.cuepointTRACK=cuepoint
BRAND_MAIL=<CUE-Konto>
BRAND_DOMAIN=<CUE-Domain>
HOSTING_KEY_CUEPOINT=
ANTHROPIC_API_KEY_CUEPOINT=
GIT_TOKEN_CUEPOINT=from pathlib import Path
SPUREN = {"forschung": "_FORSCHUNG", "schichtwerk": "_OPS",
"signalwerk": "_SIGNALWERK", "cuepoint": "_CUEPOINT"}
def load_track_env(track: str) -> dict:
assert track in SPUREN, f"unbekannte Spur: {track}"
env_path = Path.home() / "secrets" / f".env.{track}"
mode = env_path.stat().st_mode & 0o777
assert mode == 0o600, f"{env_path} muss chmod 600 sein"
out = {}
for line in env_path.read_text().splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, _, val = line.partition("=")
out[key.strip()] = val.strip().strip('"')
suffix = SPUREN[track]
fremd = [k for k in out if k.endswith(tuple(s for s in SPUREN.values() if s != suffix))]
assert not fremd, f"fremde Schlüssel in .env.{track}: {fremd}"
return outDer Lader prüft Dateirechte und lehnt Schlüssel mit dem Suffix einer anderen Spur ab.
Browser-Werkzeuge (STIMME, AKTE, RECHT) nutzen keine
.env. Nutzer:innen tragen den eigenen Schlüssel lokal
ein:
const loadBYOK = (tool, provider) => localStorage.getItem(`${tool}_byok_${provider}`);
const saveBYOK = (tool, provider, key) => localStorage.setItem(`${tool}_byok_${provider}`, key);
const clearBYOK = (tool, provider) => localStorage.removeItem(`${tool}_byok_${provider}`);Der Schlüssel geht an keinen eigenen Server, nur direkt an den gewählten Anbieter.
scan-spurentrennung.sh (neutrale Edition)Die verbotenen Muster stehen nicht im Skript, sondern in Textdateien
im Ordner muster/: je Spur eine Datei
(forschung.txt, ops.txt,
signalwerk.txt, cuepoint.txt) und
alle.txt für Muster, die in jeder Spur verboten sind
(gängige Schlüsselformate). Veröffentlicht wird die neutrale Edition mit
Beispielwerten (*.example.invalid). Jede Organisation trägt
dort die Kontakte, Domains und Konten ihrer eigenen Spuren ein; diese
echten Muster bleiben intern.
./scan-spurentrennung.sh <verzeichnis> # Spur forschung, Muster ./muster
./scan-spurentrennung.sh <verzeichnis> --track=cuepoint
./scan-spurentrennung.sh <verzeichnis> --muster=/pfad/zu/internen/mustern| Exit | Bedeutung |
|---|---|
| 0 | sauber |
| 1 | Treffer, Veröffentlichung blockiert |
| 2 | Aufruffehler (Verzeichnis, Musterordner oder Musterdatei fehlt) |
Gewollte, dokumentierte Nennungen tragen den Marker
SPUREN-DOC. Formatkonvertierung (etwa MD → HTML mit pandoc)
entfernt HTML-Kommentare; nach jeder Konvertierung wird der Scan deshalb
erneut über alle Ausgabeformate gefahren. Die Testsuite
test-scan-spurentrennung.sh prüft sieben Fälle mit eigenen
Testmustern: sauber, Leck einer anderen Spur, Marker, Leck einer vierten
Spur, Schlüssel, fehlendes Verzeichnis, fehlende Musterdatei.
.env-Datei im Bündel| Spur | Intervall |
|---|---|
| FORSCHUNG | 90 Tage |
| SCHICHTWERK-OPS | 60 Tage |
| SIGNALWERK | 60 Tage |
| CUEPOINT | 60 Tage |
Beim Spurwechsel im Browser ein anderes Browser-Profil verwenden, nicht denselben Tab.
Lizenz: Text CC BY 4.0 · Skripte AGPL-3.0-or-later. Closure-Typ
methoden-protokoll.