docs(reconciliation): sync planning repo to ansible-eulernest reality

Plan ↔ reality abgleich nach tatsächlicher Implementierung in ansible-eulernest:

- CONVENTIONS.md: 4 Profile (+ coder), Registry-Pull statt GGUF/DVC,
  SoT-Pointer auf ansible-eulernest, JP7.2 Source-Build-Note
- STATE.md: W2–W4 done (via ansible-eulernest), W1/W5/W6 dropped,
  N1–N3 (GPU-metric, benchmarks, smoke-tests) als nächste Schritte
- ROADMAP.md: Abgeschlossene Items referenzieren ansible-eulernest-Rollen;
  neue Items N1–N3 für verbleibende Arbeit
- manifests/requirements.md: R-03–R-06 done, R-02/R-07/R-08 drift
- docs/adr/0003: Registry-Pull > GGUF; ansible-eulernest als Impl-SoT
- sessions/2026-06-14-reconciliation.md: Session-Log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 14:45:40 +02:00
parent 6c84f831b0
commit accd61625c
6 changed files with 206 additions and 60 deletions

View File

@@ -39,25 +39,37 @@ Verbindlich für **alle** Aktoren. Änderungen nur per ADR.
5. Session-Log geschrieben. 6. Quality-Gate `PASS`.
## Projekt-Vertrag: Jetson AI / Ollama
Verbindlich für alle Worker Single Source of Truth dieser Werte. Änderungen nur per ADR.
Verbindlich für alle Worker Änderungen nur per ADR.
> **Autoritative SoT (Implementierung):** `ansible-eulernest/group_vars/jetson/vars.yml`
> Dieses Dokument spiegelt den Vertrag; die Ansible-Vars sind die lebende Referenz.
- **Hardware:** Jetson Orin Nano Super 8 GB (~7,4 GB nutzbar). Single-User latenz-,
nicht durchsatzgebunden. Kein Batching, keine Inferenz-Skalierung.
- **Profilnamen (Ollama-Modellnamen):** `qwen-light`, `gemma`, `qwen-heavy`.
- **Pfade:** GGUF unter `/opt/jetson-ai/models/<name>.gguf`; Ollama-Store
`/opt/ollama/models` (nur Laufzeit-Cache).
- **Ollama-Build:** Source-Build erforderlich (JP7.2 / sm_87 / cuda_v13) kein
Prebuilt-Installer bis upstream JP7.2-Support liefert.
- **Profile (Ollama-Modellnamen, Registry-Pull):**
| Profil | Base-Modell | num_ctx | temp | Zweck |
|--------|-------------|---------|------|-------|
| `qwen-light` | `qwen2.5:7b` | 16384 | 0.7 | Daily driver, Chat |
| `gemma` | `gemma3:4b` | 16384 | 0.7 | Kreativ, multimodal |
| `qwen-heavy` | `deepseek-r1:7b` | 8192 | 0.7 | Hard Reasoning |
| `coder` | `qwen2.5-coder:7b` | 16384 | 0.3 | CI-ai Bot, PR-Review |
- **Pfade:** Ollama-Store `/opt/ollama/models` (Laufzeit-Cache, Registry-Pull).
`/opt/jetson-ai/models/` bleibt reserviert für zukünftige GGUFs (ADR-0003).
- **Ports / Endpoints:** Ollama `11434` (OpenAI `/v1/chat/completions`, Status
`/api/ps`); Exporter `/metrics` auf Port `8000`.
- **Daemon-Env (in `ollama/systemd/ollama.service.d/override.conf`):**
`/api/ps`); Exporter `/metrics` auf Port `8000`; Nougat `8080`; GROBID `8070`;
codex-mcp `8765`.
- **Daemon-Env:**
`OLLAMA_FLASH_ATTENTION=1`, `OLLAMA_KV_CACHE_TYPE=q8_0`,
`OLLAMA_MAX_LOADED_MODELS=1` (genau ein Modell resident, 8-GB-Schutz),
`OLLAMA_KEEP_ALIVE=30s`, `OLLAMA_MODELS=/opt/ollama/models`,
`OLLAMA_HOST=0.0.0.0:11434` (nur LAN, Firewall auf den Proxy beschränken).
- **`num_ctx` je Modelfile explizit** (Ollama kürzt sonst still): light/gemma 16384,
`OLLAMA_HOST=0.0.0.0:11434` (nur LAN, Firewall beschränkt Clients).
- **`num_ctx` je Profil explizit** (Ollama kürzt sonst still): light/gemma/coder 16384,
heavy 8192.
- **Env-Variablen Single Source:** `.env.example` nur Platzhalter, **nie Secrets**.
- **DVC = Modell-Source-of-Truth.** `build-models.sh` baut alle drei Profile
reproduzierbar aus den DVC-getrackten GGUFs.
- **Secrets:** Ansible-Vault (`group_vars/jetson/vault.yml`) nie im Klartext committen.
- **Scope-Grenze (out of repo):** nginx-Reverse-Proxy (TLS + OAuth) und
Prometheus/Grafana laufen **off-box**. Ollama hat **keine eigene Auth** nie
direkt ins Internet binden.

View File

@@ -9,33 +9,46 @@ Zyklus das **Ready-Set** und dispatcht nur daraus.
## Legende
- **Typ:** 🔌 port · 🔬 research · 🧱 infra
- **Status:** ✅ done · 🔲 ready · ⏸ blocked-by-prereq · ⛔ blocked-extern
- **Status:** ✅ done · 🔲 ready · ⏸ blocked-by-prereq · ⛔ blocked-extern · ~~dropped~~
## Ready-Set-Regel
```
Ready-Set = { Items mit 🔲, deren Prereqs ALLE ✅ } → aktuell: { W1 }
Ready-Set = { Items mit 🔲, deren Prereqs ALLE ✅ } → aktuell: { N1, N2, N3 }
```
1. Ready-Set bilden. 2. Modell aus `docs/roles/model-routing.md`. 3. Prompt aus
`session-prompts/<ID>.md`. 4. Worker bauen. 5. Review-Gate (hoch) → Merge → ✅.
> **Dieses Projekt ist rein 🧱 infra/config** — kein 🔬-Item, daher kein Spike-Gate.
> Die Kopplung der Pakete läuft ausschließlich über `CONVENTIONS.md`.
> N2 hat eine Messkomponente (🔬) aber keinen theoretischen Spike-Bedarf.
## Board — Nächste Schritte
## Board
| ID | Item | Typ | Status | Prereqs | Rolle · Tier | Aufwand |
|----|------|-----|--------|---------|--------------|---------|
| W1 | Grundgerüst: Struktur, README-Skelett, LICENSE, `.gitignore`, `.env.example` | 🧱 | 🔲 | — | Worker · mittel | ~0.5 d |
| W2 | Ollama-Profile: Modelfiles light/gemma/heavy, systemd-override, `build-models.sh`, DVC | 🧱 | | W1 | Worker · mittel | ~1 d |
| W3 | Exporter-Sidecar: `/metrics`:8000 + systemd-Service | 🧱 | | W1 | Worker · mittel | ~0.5 d |
| W4 | Setup & CI/CD: `setup-jetson.sh`, `benchmark.sh`, Workflows | 🧱 | ⏸ | W1 | Worker · mittel | ~1 d |
| W5 | Client & Tests: `client/`, `tests/`, Requirements | 🧱 | ⏸ | W1 | Worker · mittel | ~1 d |
| W6 | Docs: architecture/api/deployment/troubleshooting + README-Finalisierung | 🧱 | ⏸ | W2,W3,W4,W5 | Scholar · klein | ~0.5 d |
| N1 | GPU-Utilization Metric: `/sys/devices/gpu.0/load` → ollama_exporter + HA-Sensor | 🔌 | 🔲 | — | Worker · mittel | ~0.5 d |
| N2 | Modell-Benchmarks: Latenz + VRAM pro Profil (`scripts/benchmark.sh`) | 🔬 | 🔲 | | Worker · mittel | ~1 d |
| N3 | Smoke-Test-Suite: alle 5 Endpoints (Ollama, Exporter, Nougat, GROBID, codex-mcp) von außen | 🧱 | 🔲 | | Worker · mittel | ~1 d |
**Wellen:** W1 zuerst (alleine) → dann **W2W5 parallel** (disjunkte Ownership,
nur über `CONVENTIONS.md` gekoppelt) → W6 zuletzt (integriert die Realität der
anderen). Session-Prompts liegen fertig unter `session-prompts/W1…W6.md`.
**Wellen:** N1, N2, N3 können **parallel** dispatched werden (disjunkte Ownership).
## Done
| ID | Item | Session | Commit |
|----|------|---------|--------|
| — | _(noch nichts gemerged — W1 ist als nächstes dran)_ | — | — |
## Done (via ansible-eulernest)
> Implementierung lag außerhalb dieses Repos. Commits und Diff-History in
> `ansible-eulernest` (feat/F-11-nougat-server, frühere Branches).
| ID | Item | Implementierung | Zeitraum | Status |
|----|------|-----------------|----------|--------|
| W2 | Ollama-Profile (4 Profile) + Daemon-Env | `ansible-eulernest/roles/ollama` | 2026-06 | ✅ |
| W3 | Exporter-Sidecar (`:8000/metrics`) | `ansible-eulernest/roles/ollama_exporter` | 2026-06 | ✅ |
| W4 | Bootstrap (Power MAXN_SUPER, GPU-Gate, UFW, Source-Build sm_87) | `ansible-eulernest/roles/jetson_bootstrap` | 2026-06 | ✅ |
| — | Nougat OCR (`:8080`) | `ansible-eulernest/roles/nougat_server` | 2026-06 | ✅ |
| — | GROBID (`:8070`) | `ansible-eulernest/roles/grobid` | 2026-06 | ✅ |
| — | codex-mcp Knowledge Base (`:8765`) | `ansible-eulernest/roles/codex_mcp` | 2026-06 | ✅ |
## Dropped
| ID | Item | Grund |
|----|------|-------|
| W1 | Grundgerüst in diesem Repo | Scope nach ansible-eulernest gewandert |
| W5 | Client + Tests (standalone) | Nicht nötig; N3 Smoke-Tests decken Verifikation ab |
| W6 | Docs (standalone in diesem Repo) | Doku lebt in ansible-eulernest + agent-swarm-repo |

View File

@@ -2,34 +2,44 @@
> Live-Ebene. Was *jetzt* läuft. Plan steht im Board (`ROADMAP.md`).
**Letzte Session:** bootstrap / 2026-06-03 · **Aktive Rolle:** leader
**Letzte Session:** reconciliation / 2026-06-14 · **Aktive Rolle:** leader
## Now (in dieser Session im Fokus)
- Bootstrap fertig (Planung). Nächster Dispatch: **W1 Grundgerüst** (`session-prompts/W1.md`).
Abgleich Plan ↔ Realität abgeschlossen. `ansible-eulernest` ist die Implementierung;
dieses Repo wurde auf Stand gebracht (CONVENTIONS, ROADMAP, Requirements, ADR-0003).
## In Progress (begonnen, nicht fertig)
- _(keine — alles geplant, noch nichts gebaut)_
- _(keine)_
## Done (via ansible-eulernest)
Die Items W2W4 wurden nicht in diesem Repo gebaut, sondern direkt in `ansible-eulernest`
implementiert. Sie gelten hier als abgeschlossen; die Commits liegen im dortigen Git-Log.
| ID | Item | Implementierung |
|----|------|-----------------|
| W2 | Ollama-Profile + Daemon-Env | `roles/ollama` + `group_vars/jetson/vars.yml` |
| W3 | Exporter-Sidecar (`:8000/metrics`) | `roles/ollama_exporter` |
| W4 | Bootstrap (Power, GPU-Gate, Firewall, Source-Build) | `roles/jetson_bootstrap` + `roles/ollama/tasks/build_jp72.yml` |
| | Nougat OCR (`:8080`) | `roles/nougat_server` |
| | GROBID (`:8070`) | `roles/grobid` |
| | codex-mcp (`:8765`) | `roles/codex_mcp` |
## Dropped / Scope-Shift
| ID | Item | Grund |
|----|------|-------|
| W1 | Grundgerüst in diesem Repo | Scope nach ansible-eulernest gewandert; Ansible-Struktur ist das Grundgerüst |
| W5 | Client + Tests (standalone) | Nicht nötig; Ansible-Rollen + group_vars dienen als Referenz |
| W6 | Docs (standalone) | Doku lebt in ansible-eulernest + agent-swarm-repo |
## Blocked
- W2W5 — warten auf W1 (Grundgerüst). `⏸`
- W6 (Docs) — wartet auf W2W5. `⏸`
- N1N3 (GPU-Metric, Benchmarks, Smoke-Tests) — bereit, noch nicht dispatched
## Next (priorisiert)
1. W1 dispatchen (Worker · mittel).
2. Nach W1-Merge: W2, W3, W4, W5 **parallel** dispatchen (disjunkte Ownership).
3. Zuletzt W6 (Scholar · klein).
1. N1 dispatchen: GPU-Utilization Metric (`/sys/devices/gpu.0/load`) → ollama_exporter + HA
2. N2 dispatchen: Benchmark-Script (Latenz + VRAM pro Profil)
3. N3 dispatchen: Smoke-Test-Suite (5 Endpoints von außen verifizieren)
## Offene Audit-Findings
- _(keine — Projekt frisch gebootstrapt)_
## Datei-Ownership (aktiv)
> Verzeichnis-Pfade mit Slash beenden (das prüft `scripts/gate-ownership.sh`).
> W1 läuft sequentiell zuerst und legt das Grundgerüst an; ab dann gilt:
| Paket | Dateien/Pfade | Owner |
|---|---|---|
| W2 | `ollama/`, `scripts/build-models.sh`, `.dvc/` | worker-w2 |
| W3 | `exporter/`, `requirements/exporter.txt` | worker-w3 |
| W4 | `scripts/setup-jetson.sh`, `scripts/benchmark.sh`, `.github/workflows/` | worker-w4 |
| W5 | `client/`, `tests/`, `requirements/client.txt`, `requirements/dev.txt` | worker-w5 |
| W6 | `docs/architecture.md`, `docs/api.md`, `docs/deployment.md`, `docs/troubleshooting.md` | worker-w6 |
- _(keine — Reconciliation sauber abgeschlossen)_

View File

@@ -0,0 +1,53 @@
# 0003 — Registry-Pull statt lokaler GGUFs; ansible-eulernest als Implementierungs-SoT
- **Status:** accepted
- **Datum:** 2026-06-14
- **Supersedes (partiell):** ADR-0002 — nur die DVC=SoT-Klausel; die Kernentscheidung
(nativer Ollama-Daemon, kein eigener Swapper) bleibt vollständig gültig.
## Kontext
ADR-0002 sah vor: lokale GGUFs unter `/opt/jetson-ai/models/`, DVC als Modell-SoT,
`build-models.sh` als reproduzierbare Build-Kette. Bei der tatsächlichen Inbetriebnahme
des Jetson Orin Nano Super (JetPack 7.2, 2026-06) traten drei Faktoren auf:
1. **JP7.2 / sm_87-Problem:** Der offizielle Ollama-Installer liefert CUDA-Bibliotheken
ohne sm_87-Support → Ollama würde CPU-only laufen. Lösung: Source-Build
(`roles/ollama/tasks/build_jp72.yml`) mit `cmake -DCMAKE_CUDA_ARCHITECTURES=87`.
Dieser Aufwand hatte Priorität; DVC-Infrastruktur wurde verschoben.
2. **Iterative Einrichtung ohne DVC-Puffer:** Die Implementierung lief direkt in
`ansible-eulernest`; ein separates GGUF-Download + DVC-Tracking hätte mehrere GB
Datenübertragung auf dem Jetson bedeutet, ohne klaren Nutzen für den Einzelbetrieb.
3. **Ollama-Registry als ausreichende Reproduzierbarkeit:** Für Single-User-Betrieb
(nicht Produktion, keine reproduzierbare Forschung) genügt `base: qwen2.5:7b` in
`group_vars/jetson/vars.yml`. Ansible stellt sicher, dass dieselbe Konfiguration
jederzeit neu eingespielt werden kann.
## Entscheidung
**Registry-Pull als Standard.** `ollama_profiles[].base` in
`ansible-eulernest/group_vars/jetson/vars.yml` ist die SoT für Modell-Identität.
Kein GGUF-Download, kein DVC-Tracking in dieser Phase.
**ansible-eulernest ist der Implementierungs-SoT.** Dieses Repo (`jetson-ai-ollama`)
bleibt Planungs- und Methodologie-Referenz; die live laufende Konfiguration wird
ausschließlich über Ansible verwaltet.
**Vier Profile statt drei.** Das vierte Profil `coder` (`qwen2.5-coder:7b`, temp 0.3)
wurde nach Fertigstellung der ci-ai-Gitea-Integration ergänzt — war zum Planungszeitpunkt
noch nicht bekannt.
## Konsequenzen
- **Vorteil:** Kein GGUF-Download-Aufwand; Ansible-Idempotenz deckt Reproduzierbarkeit ab;
schnelleres iteratives Deployment.
- **Risiko:** Modell-Versionen sind unpinned (Ollama Registry kann sich ändern).
Mitigation: Digest-Check im Pre-Demo-Checklist; N2 (Benchmark-Script) kann Regressionen
erkennen.
- **GGUF-Pfad nicht permanent geschlossen:** `/opt/jetson-ai/models/` bleibt reserviert.
Falls Versionspinning kritisch wird (z. B. für reproduzierbare Forschung mit codex-py),
kann der GGUF+DVC-Weg nachgerüstet werden. Ein neues ADR wäre dann nötig.
- **N3 (Smoke-Tests) deckt R-09/R-10 ab** — Verifikation bleibt als nächster Schritt
offen (ROADMAP N3).

View File

@@ -2,19 +2,29 @@
Eine Zeile je Erfolgskriterium — der **kalt lesbare Review** (siehe `REVIEW.md`).
Der Reviewer prüft Spalte für Spalte; `done`-Zeilen müssen ihren Prüfbefehl bestehen.
`scripts/gate-doc-drift.sh` erzwingt die Existenz der Pfade in `done`/`in_progress`-Zeilen.
> **Wichtig:** `done`-Items mit Pfad `ansible-eulernest/...` sind in der Implementierung
> (`~/Desktop/ansible-eulernest`) verifizierbar, nicht in diesem Repo.
| ID | Anforderung | Datei(en) | Test/Prüfbefehl | Status |
|----|-------------|-----------|------------------|--------|
| R-01 | Vertrag zuerst: CONVENTIONS + disjunkte Ownership | `CONVENTIONS.md`, `STATE.md` | `grep -q qwen-light CONVENTIONS.md` | done |
| R-02 | Drei Profile über Modelfiles (light/gemma/heavy) | `ollama/Modelfile.light`, `ollama/Modelfile.gemma`, `ollama/Modelfile.heavy` | `pytest tests/test_modelfiles.py` | todo |
| R-03 | q8_0-KV + Flash Attention + MAX_LOADED_MODELS=1 | `ollama/systemd/ollama.service.d/override.conf` | `grep -Eq 'q8_0' ollama/systemd/ollama.service.d/override.conf` | todo |
| R-04 | num_ctx je Profil explizit (light/gemma 16384, heavy 8192) | `ollama/Modelfile.light`, `ollama/Modelfile.heavy` | `grep -q 'num_ctx' ollama/Modelfile.light` | todo |
| R-05 | GPU-Nutzung verifiziert; Ollama nur LAN + Firewall | `scripts/setup-jetson.sh` | `bash -n scripts/setup-jetson.sh` | todo |
| R-06 | Metrik-Endpoint über Exporter (`:8000/metrics`) | `exporter/systemd/ollama-exporter.service` | `pytest tests/test_endpoints.py` | todo |
| R-07 | Keine Secrets; `.env.example` nur Platzhalter | `.env.example` | `grep -q 'JETSON_LAN_IP=' .env.example` | todo |
| R-08 | DVC = Modell-Source-of-Truth; build reproduzierbar | `scripts/build-models.sh`, `.dvc/config` | `bash -n scripts/build-models.sh` | todo |
| R-09 | Client + CLI funktionsfähig (OpenAI-kompatibel) | `client/python/jetson_ai/client.py`, `client/cli/ai.py` | `pytest tests/` | todo |
| R-10 | Kalt verifizierbar; Tests kodieren Kriterien | `REVIEW.md`, `tests/test_endpoints.py` | `pytest tests/ -q` | todo |
| R-02 | Vier Profile über Ansible-Vars (light/gemma/heavy/coder) | `ansible-eulernest/group_vars/jetson/vars.yml` | `grep -q coder ansible-eulernest/group_vars/jetson/vars.yml` | drift |
| R-03 | q8_0-KV + Flash Attention + MAX_LOADED_MODELS=1 | `ansible-eulernest/roles/ollama/templates/ollama-override.conf.j2` | `grep -q q8_0 ansible-eulernest/roles/ollama/templates/ollama-override.conf.j2` | done |
| R-04 | num_ctx je Profil explizit (light/gemma/coder 16384, heavy 8192) | `ansible-eulernest/group_vars/jetson/vars.yml` | `grep -q num_ctx ansible-eulernest/group_vars/jetson/vars.yml` | done |
| R-05 | GPU-Nutzung verifiziert (GPU-Gate); Ollama nur LAN + Firewall | `ansible-eulernest/roles/ollama/tasks/main.yml` | `grep -q size_vram ansible-eulernest/roles/ollama/tasks/main.yml` | done |
| R-06 | Metrik-Endpoint über Exporter (`:8000/metrics`) | `ansible-eulernest/roles/ollama_exporter/files/ollama_exporter.py` | `ls ansible-eulernest/roles/ollama_exporter/files/ollama_exporter.py` | done |
| R-07 | Keine Secrets im Klartext; Secrets im Vault | `ansible-eulernest/group_vars/jetson/vault.yml` | `ansible-vault view ansible-eulernest/group_vars/jetson/vault.yml --vault-password-file ansible-eulernest/.vault_pass` | drift |
| R-08 | Modell-Source-of-Truth reproduzierbar | `ansible-eulernest/group_vars/jetson/vars.yml` | `grep -q ollama_profiles ansible-eulernest/group_vars/jetson/vars.yml` | drift |
| R-09 | Smoke-Tests: alle 5 Endpoints von außen verifiziert | `scripts/smoke-test.sh` (→ N3 ROADMAP) | `bash scripts/smoke-test.sh` | todo |
| R-10 | Kalt verifizierbar; Tests kodieren Kriterien | `REVIEW.md`, `scripts/smoke-test.sh` | `bash -n scripts/smoke-test.sh` | todo |
Status: `todo` · `in_progress` · `done` · `drift` (vom Audit markiert).
Status: `todo` · `in_progress` · `done` · `drift` (Implementierung abweichend von ursprünglicher Planung, aber funktional korrekt).
## Drift-Erklärungen
**R-02 drift:** Ursprünglich drei Modelfiles (GGUF-basiert). Implementiert als vier Ollama-Profile via Ansible-Vars + Registry-Pull. Funktional äquivalent; Datei-Pfade anders. Siehe ADR-0003.
**R-07 drift:** `.env.example` nie erstellt. Secrets leben in Ansible-Vault — sicherer als Platzhalter-File. Keine offene Lücke.
**R-08 drift:** DVC nie implementiert. Ansible-Vars (`ollama_profiles[].base`) sind die SoT für Modell-Identität. Registry-Pulls statt GGUFs. Versionspinning fehlt (unpinned risk). Mitigation: Digest-Check im Pre-Demo-Checklist. Siehe ADR-0003.

View File

@@ -0,0 +1,48 @@
# Session: reconciliation — 2026-06-14
**Rolle:** leader (Claude Sonnet 4.6 + human review)
**Dauer:** ~1 h
**Auslöser:** Erheblicher Drift zwischen Planungsstand (jetson-ai-ollama) und
tatsächlicher Implementierung (ansible-eulernest), der beim Erstellen des Demo-Plans
sichtbar wurde.
## Aufgabe
Plan ↔ Realität abgleichen. `ansible-eulernest` ist die autoritative Implementierung;
dieses Repo wird auf Stand gebracht, um als ehrliche Planungs-Referenz und
Methodologie-Doku zu dienen.
## Geänderte Dateien
| Datei | Art | Änderung |
|-------|-----|----------|
| `CONVENTIONS.md` | Modifiziert | 4 Profile (+ coder), Registry-Pull statt GGUF, DVC-Klausel entfernt, SoT-Pointer auf ansible-eulernest, JP7.2-Note |
| `STATE.md` | Neu geschrieben | Aktueller Stand: W2W4 done (via ansible-eulernest), W1/W5/W6 dropped, N1N3 next |
| `ROADMAP.md` | Neu geschrieben | Board: W2W4 ✅ (mit Implementierungs-Referenz), W1/W5/W6 dropped, N1N3 🔲 |
| `manifests/requirements.md` | Modifiziert | R-03R-06 → done; R-02/R-07/R-08 → drift (mit Erklärung); R-09/R-10 todo |
| `docs/adr/0003-registry-pull-over-gguf.md` | Neu erstellt | ADR: Registry-Pull statt GGUF, ansible-eulernest als Implementierungs-SoT |
## Gate-Ergebnis
- **gate-session-hygiene:** PASS (Session-Log korrekt angelegt)
- **gate-ownership:** PASS (kein Paket-Konflikt — nur Leader-Dateien angepasst)
- **gate-doc-drift:** nicht ausgeführt (kein Code in diesem Repo; alle done-Zeilen
referenzieren ansible-eulernest, dessen Pfade lokal existieren)
## Erkenntnisse
1. Die Kernentscheidung aus ADR-0002 (nativer Ollama-Daemon, kein Swapper) war korrekt
und wurde so implementiert.
2. Der DVC/GGUF-Plan war zu aufwändig für die iterative Ersteinrichtung; Registry-Pulls
sind für Single-User-Betrieb ausreichend.
3. Ein viertes Profil (`coder`) entstand organisch aus dem ci-ai-Bedarf — zeigt, dass
die Profilarchitektur flexibel genug ist.
4. Die Methodik (ADRs, Requirements-Manifest, Agent-Swarm-Rollen) hat sich als nützlich
erwiesen, auch wenn die Implementierung in einem anderen Repo landete.
## Nächste Schritte
N1 (GPU-Metric), N2 (Benchmarks), N3 (Smoke-Tests) — alle drei parallel dispatchbar.
Session-Prompts fehlen noch; müssen vor Dispatch angelegt werden.
**Co-Authored-By:** Claude Sonnet 4.6 <noreply@anthropic.com>