Basis aus 2nd-brain für LPIC-Prüfungsvorbereitung übernommen
Regeln, Standards, Kontextstruktur und Werkzeuge übernommen; 2nd-brain- Inhalte (Stacks, Ansible-Inventar, Architektur, Knowledge) entfernt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
7f6b8ebe07
70 files changed
+2816
No files matched your search
@@ -0,0 +1,26 @@
|
||||
# ai/rules/ – verbindliche Regeln
|
||||
|
||||
> Regeln haben **Vorrang** vor allem anderen in dieser Basis (außer den Sicherheits-/Datenschutzgrenzen des Agenten selbst).
|
||||
> Eine Regel pro Datei. Ändern nur durch den Bediener oder auf seine ausdrückliche Anweisung.
|
||||
|
||||
| Datei | Regel in einem Satz |
|
||||
|---|---|
|
||||
| [language.md](language.md) | Alles in der Amtssprache aus `AGENTS.md`; Struktur sprachneutral englisch. |
|
||||
| [privacy.md](privacy.md) | Keine identifizierenden Personen-/Umgebungsdaten an externe Dienste; Daten nach Klasse behandeln. |
|
||||
| [secrets.md](secrets.md) | Geheimnisse nie in Dateien/Git/Chat; Secret-Store zuerst, Ansible Vault als Fallback. |
|
||||
| [headers.md](headers.md) | Jede Code-Datei trägt einen Header mit namentlich Verantwortlichen. |
|
||||
| [testing.md](testing.md) | Lokal testen; Cloud-VMs und Produktion nur mit ausdrücklicher Freigabe. |
|
||||
| [file_safety.md](file_safety.md) | Vor Löschen/Überschreiben ansehen, `*.orig` statt Löschen. |
|
||||
| [web_search.md](web_search.md) | Web-Recherche erlaubt, aber ohne interne Daten; Quellen mit Datum. |
|
||||
|
||||
## Aufbau einer Regeldatei
|
||||
```markdown
|
||||
# Regel: <Thema>
|
||||
|
||||
> Stand: TT.MM.JJJJ · gilt für: alle Agenten (bis auf Widerruf)
|
||||
|
||||
## Erlaubt / Pflicht
|
||||
## Verboten / Einschränkungen
|
||||
## Ausnahmen (wer darf freigeben, wie wird es dokumentiert)
|
||||
```
|
||||
Ausnahmen, die der Bediener erteilt, in `context.md` mit Datum festhalten – sie gelten nur für genau diesen Fall.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Regel: Löschen und Überschreiben
|
||||
|
||||
> Stand: 07.10.2026 · gilt für: alle Agenten
|
||||
|
||||
- Vor dem Löschen/Überschreiben: **Ziel ansehen** (Inhalt, Größe, Änderungsdatum) und im Zweifel nachfragen.
|
||||
- Statt Löschen: Sicherung `<datei>.orig` (bei Kollision `<datei>.orig.JJJJMMTT`). `*.orig` steht in `.gitignore`.
|
||||
- Massenoperationen (`rm -r`, `find -delete`, `rsync --delete`, `git clean`, `git reset --hard`) nur mit Freigabe und vorherigem Trockenlauf.
|
||||
- Fremde Dateien (nicht in dieser Basis/diesem Projekt entstanden) nicht ohne Auftrag umbauen oder „aufräumen“.
|
||||
- Ansible: `backup: true` bei Templates auf Zielsystemen, sofern die Datei keine Geheimnisse enthält (sonst Kopien mit Geheimnissen → bewusst entscheiden).
|
||||
@@ -0,0 +1,35 @@
|
||||
# Regel: Header mit Verantwortlichen
|
||||
|
||||
> Stand: 08.10.2026 · gilt für: jede Code-, Konfigurations- und Template-Datei, die in diesem Repo entsteht
|
||||
|
||||
## Pflicht
|
||||
Jede Datei beginnt (nach Shebang bzw. `---`) mit einem Header im **bashdoc-Stil** (`## @tag`), eingerahmt von `#-----`-Linien:
|
||||
|
||||
| Tag | Pflicht | Inhalt |
|
||||
|---|---|---|
|
||||
| `@file` | ja | Dateiname |
|
||||
| `@brief` | ja | Zweck in einem Satz |
|
||||
| `@author` | ja | `Name <mail>` des verantwortlichen Menschen (aus `ai/context/responsible.md`) – nie die KI. Mehrere Autoren: Zeile `@author` wiederholen, Hauptautor zuerst |
|
||||
| `@owner` | ja | `Name <mail>` oder Rolle des fachlich Verantwortlichen (aus `responsible.md`) |
|
||||
| `@assist` | wenn KI beteiligt | `KI-unterstützt (<Modell>), geprüft von <author>` |
|
||||
| `@version` | ja | SemVer + Datum `x.y.z (TT.MM.JJJJ)` |
|
||||
| `@usage` | Scripts/Playbooks | Aufruf; Optionen bei Bash über `## @OPTIONS@` (generiert) |
|
||||
|
||||
- Agenten tragen Namen und Mail exakt wie in `responsible.md` (Spalte „Header-String“) ein. Fehlt dort ein Eintrag: Platzhalter `<AUTOR>` stehen lassen und den Bediener darauf hinweisen – **keine Namen erfinden**.
|
||||
- Bei inhaltlicher Änderung: `@version` erhöhen, Datum aktualisieren; `@author` nur ändern, wenn die Verantwortung wechselt.
|
||||
- Kommentar-Präfix je Sprache: Bash/YAML/Python `##`, Jinja `{#- … -#}`, SQL `--`. Format der Tags bleibt gleich.
|
||||
|
||||
## Vorlagen
|
||||
`ai/common/templates/` – Bash (`bash/script_template.sh`), Ansible (`ansible/playbooks/example.yml`), Docker (`docker/docker-compose.yml`).
|
||||
|
||||
## Beispiel (mehrere Autoren)
|
||||
```bash
|
||||
## @author Erika Muster <erika.muster@example.org>
|
||||
## @author Max Beispiel <max.beispiel@example.org>
|
||||
## @owner Clara Fach <clara.fach@example.org>
|
||||
```
|
||||
|
||||
## Änderungsprotokoll
|
||||
- 07.10.2026 – angelegt.
|
||||
- 08.10.2026 – `Name <mail>`-Format, mehrere `@author` erlaubt.
|
||||
- 23.10.2026 – Mandantenbezug entfernt (Einzelprojekt).
|
||||
@@ -0,0 +1,17 @@
|
||||
# Regel: Amtssprache
|
||||
|
||||
> Stand: 07.10.2026 · gilt für: alle Agenten, alle Ausgaben
|
||||
|
||||
## Pflicht
|
||||
- Die **Amtssprache** steht in `AGENTS.md` → „Metadaten“ (Skeleton: `de`). Sie gilt für:
|
||||
Antworten, Markdown-Dokumente, Code-Kommentare, `@brief`-Texte, Log-/Konsolenmeldungen, Ansible-Task-Namen, Commit-Messages.
|
||||
- Fachbegriffe, Produktnamen und Code-Bezeichner bleiben im Original.
|
||||
- Bei `de`: korrekte Orthografie mit Umlauten und ß – nie `ae`/`oe`/`ue`/`ss` als Ersatz (außer in Bezeichnern, s. u.).
|
||||
|
||||
## Sprachneutral (immer Englisch, ASCII)
|
||||
- Datei- und Ordnernamen, Variablen, Funktionen, Rollen, Tags, YAML-/Frontmatter-Schlüssel.
|
||||
- Grund: Übernahmen aus/in skel-ai mit anderer Amtssprache behalten Struktur, Verweise und Scripts.
|
||||
|
||||
## Datum & Zahlen
|
||||
- Fließtext: TT.MM.JJJJ (bei `de`), immer absolut – nie „gestern“, „nächste Woche“.
|
||||
- Maschinenlesbar (Frontmatter, Dateinamen, Logs): ISO 8601 `JJJJ-MM-TT`.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Regel: Datenschutz
|
||||
|
||||
> Stand: 23.10.2026 · gilt für: alle Agenten · **Priorität 1**
|
||||
|
||||
## Grundsatz
|
||||
Nichts, was die Basis verlässt (Web-Suche, externe APIs, Cloud-KI außerhalb der Freigabe, Pastebins, Issue-Tracker Dritter),
|
||||
darf auf den Betreiber, seine Umgebung oder Dritte (Kontakte, Kunden) rückführbar sein.
|
||||
|
||||
## Datenklassen
|
||||
| Klasse | Beispiele | In der AI-Basis ablegen? | An externe Dienste? |
|
||||
|---|---|---|---|
|
||||
| öffentlich | Herstellerdoku, Paketversionen, RFCs | ja | ja |
|
||||
| intern | Hostnamen, IP-Pläne, Topologie, Dienste, Rollen | ja (Knowledge-DB, Projekte) | **nein** (nicht in Suchen/URLs) |
|
||||
| vertraulich | Personennamen über die Verantwortlichen hinaus, Kundendaten, Verträge, Logs mit Personenbezug | nein – nur Verweis auf Ablageort | nein |
|
||||
| geheim | Passwörter, Schlüssel, Tokens, Zertifikats-Privatschlüssel | **nie** (→ `secrets.md`) | nie |
|
||||
|
||||
## Pflicht
|
||||
- Namentlich genannt werden **nur** die Verantwortlichen aus `ai/context/responsible.md` (Header-Pflicht, `headers.md`).
|
||||
- Weitere Personen nur als Rolle („Leitung Buchhaltung“, „Azubi IT“), nie mit Namen/Kontaktdaten.
|
||||
- Beispiele, Testdaten, Doku-Snippets: pseudonymisiert (`host01`, `192.0.2.0/24`, `example.org`, `user_a`).
|
||||
- Logs/Dumps aus Kundensystemen vor dem Einfügen in einen Chat bereinigen (Namen, Mailadressen, IPs öffentlicher Netze).
|
||||
|
||||
## Leitsatz: so lokal wie möglich, so auswärts wie nötig
|
||||
Verarbeitung (KI, Speicherung, Dienste) zuerst auf eigener Infrastruktur. Ein externer Dienst nur, wenn lokal nicht
|
||||
sinnvoll machbar – und nur bis zur unten freigegebenen Klasse.
|
||||
|
||||
## Freigegebene KI-Dienste
|
||||
| Dienst | Erlaubt für Klasse bis | Grundlage (z. B. AVV, Self-Hosting) | Stand |
|
||||
|---|---|---|---|
|
||||
| Lokale Modelle (Ollama, STT auf `kellerbeast`) | vertraulich (inkl. persönlicher Inhalte) | Self-Hosting | 23.10.2026 |
|
||||
| Claude Code (Anthropic) | intern (Lerninhalte, Lab-Konfiguration, Code, Doku – **keine** persönlichen Inhalte) | Entscheidung Betreiber | 23.10.2026 |
|
||||
|
||||
## Vertrauenswürdige Ablagen
|
||||
| Ablage | Erlaubt für Klasse bis | Grundlage | Stand |
|
||||
|---|---|---|---|
|
||||
| Gitea (self-hosted, Remote dieses Repos) | vertraulich | Self-Hosting | 23.10.2026 |
|
||||
|
||||
> Ohne Eintrag gilt: nur Klasse „öffentlich“ darf an externe KI-Dienste. Rechtliche Bewertung (DSGVO, AVV) liegt beim Betreiber – der Agent gibt keine Rechtsberatung.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Regel: Geheimnisse
|
||||
|
||||
> Stand: 07.10.2026 · gilt für: alle Agenten, alle Projekte
|
||||
|
||||
1. **Nie** Passwörter, Shared Secrets, private Schlüssel oder Tokens in Dateien der Basis, ins Git, in Chats oder Logs – auch nicht in Beispielen mit echten Werten.
|
||||
2. **Quelle Nr. 1: Secret-Store** (Platzhalter: HashiCorp Vault `<VAULT_ADDR>`, KV v2, Mount `secret`, Pfad `<projekt>/<dienst>/…`). Konkrete Werte in `ai/context/environment.md`.
|
||||
3. **Fallback: Ansible Vault.** Passwortdatei **außerhalb** des Repos (`~/.ans-secret-<projekt>`), Variablennamen beginnen mit `vault_`.
|
||||
4. `.env`-Dateien: nie im Git, nur `.env.example` mit gleichen Schlüsseln und Platzhaltern. Secrets in `.env` nur, wenn das Werkzeug es erzwingt (z. B. Docker-Stack).
|
||||
5. **Ansible:** Tasks mit Geheimnissen `no_log: true`, Templates mit Geheimnissen `diff: false` – sonst landen Werte in Terminal und `ansible.log`.
|
||||
6. **Bash:** Geheimnisse nie als Kommandozeilenargument (sichtbar in `ps`), nie mit `becho`/`bdebug` ausgeben; per Datei-Deskriptor, stdin oder Umgebungsvariable übergeben.
|
||||
7. Geheimnisse **erzeugen**, nicht ausdenken: `openssl rand -hex 24` direkt im Schreibbefehl (`vault kv put … key="$(openssl rand -hex 24)"`). Bei KV v2 `patch` statt `put`, wenn nur ein Schlüssel geändert wird.
|
||||
8. **Agenten** lesen keine `.env`/Vault-Inhalte aus und geben keine Geheimnis-Werte aus – nur Schlüsselnamen. Benötigt ein Test ein Geheimnis, fragt der Agent den Bediener, ihn selbst auszuführen.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Regel: Testen
|
||||
|
||||
> Stand: 07.10.2026 · gilt für: alle Agenten
|
||||
|
||||
## Pflicht
|
||||
- **Lokal testen:** Syntax-/Lint-Checks (`bash -n`, `shellcheck`, `ansible-lint`, `yamllint`, `docker compose config`) und Läufe in lokalen Containern/VMs (z. B. `debian:<release>` per Docker/Podman).
|
||||
- **Trockenlauf zuerst:** Bash `-n`, Ansible `--check --diff`, dann echter Lauf.
|
||||
- **Idempotenz** prüfen: zweiter Lauf ohne Änderungen (`changed=0`).
|
||||
- Ergebnis des Tests (Datum, was, wogegen, Ergebnis) in `context.md` festhalten.
|
||||
|
||||
## Verboten ohne ausdrückliche Freigabe des Bedieners für genau diesen Fall
|
||||
- Code in **Cloud-VMs/Sandboxes Dritter** ausführen oder testen.
|
||||
- Läufe gegen **Produktivsysteme** (auch `--check` nicht, wenn Zugangsdaten oder Last im Spiel sind).
|
||||
- Änderungen an Netzwerkgeräten, die die Verbindung des Agenten/Bedieners kappen können (Firewall, Routing, SSH) – immer mit Rückfallweg (z. B. zeitgesteuertes Rollback) und Freigabe.
|
||||
|
||||
## Ausnahmen
|
||||
Freigabe im Chat genügt; der Agent vermerkt sie mit Datum in `context.md` („Freigabe: Lauf gegen host01, 07.10.2026“).
|
||||
@@ -0,0 +1,16 @@
|
||||
# Regel: Web-Recherche
|
||||
|
||||
> Stand: 07.10.2026 · gilt für: alle Agenten mit Web-Zugriff
|
||||
|
||||
## Erlaubt
|
||||
- Herstellerdoku, Paketversionen, Kompatibilität, Sicherheitshinweise (CVE), Best Practices nachschlagen.
|
||||
- Vor jedem neuen Docker-Stack oder jeder neuen Ansible-Rolle: Original-Doku holen (Pflicht laut `ai/common/docker.md` / `ansible.md`).
|
||||
|
||||
## Einschränkungen
|
||||
- **Keine internen Daten** in Suchanfragen oder URLs: keine IPs, Hostnamen, MACs, Domains, Projekt-/Firmennamen, Personennamen (→ `privacy.md`).
|
||||
- Keine Inhalte aus lokalen Dateien/Code an Web-Dienste übergeben (keine Pastebins, keine Online-Validatoren mit internem Inhalt).
|
||||
- Ergebnisse mit **Quelle (URL) und Abrufdatum** ablegen; Unbelegtes als Einschätzung kennzeichnen.
|
||||
- Dauerhaft wertvolle Recherche → Knowledge-DB (`context/knowledge/research/`).
|
||||
|
||||
## Gesperrte Seiten
|
||||
- (derzeit keine)
|
||||
Reference in new issue
Block a user