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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user