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>
3.0 KiB
Requirements-Manifest (kalt verifizierbar)
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.
Wichtig:
done-Items mit Pfadansible-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 | 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 (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.