# Arbeitsauftrag 033 – Beweiskette für `hermes-kanban-adapter`
**Modus:** Read-only
**Datum:** 2026-08-12
**Ziel:** Lückenlos nachweisen, aus welcher Compose-Datei der laufende Container `hermes-kanban-adapter` erzeugt wurde und an welcher Stelle der fehlerhafte Healthcheck entsteht.
## Kurzfazit
Der laufende Container `hermes-kanban-adapter` wurde nachweislich aus der Compose-Konfiguration in
`/opt/struktur/hermes-ui-auswahl/compose.yaml`
für das Compose-Projekt `hermes-ui-auswahl` erzeugt.
Die fehlerhafte Healthcheck-Definition ist **bereits in dieser Compose-Datei vorhanden** und erscheint **identisch** in
1. der lokalen `compose.yaml`,
2. `docker compose config`,
3. dem laufenden Container-Inspect.
Es gibt keine gefundene Override-, Merge-, Include- oder Profile-Schicht, die den Healthcheck erst später verändert.
---
## 1) Tatsächlich verwendete Compose-Datei
### Docker-Metadaten des laufenden Containers
`docker inspect hermes-kanban-adapter` liefert:
- **Containername:** `hermes-kanban-adapter`
- **Compose-Projekt:** `hermes-ui-auswahl`
- **Project Working Directory:** `/opt/struktur/hermes-ui-auswahl`
- **Config Files:** `/opt/struktur/hermes-ui-auswahl/compose.yaml`
- **Service:** `hermes-kanban-adapter`
- **Container Number:** `1`
- **Config Hash:** `0281a8510cf550460ddcad9cec9e97f9c20c19fbd61f2ae2bbc11397c971f04c`
- **Created:** `2026-08-12T14:00:36.625739324Z`
### Schlussfolgerung
Damit ist die tatsächlich verwendete Compose-Datei eindeutig belegt:
- **Datei:** `/opt/struktur/hermes-ui-auswahl/compose.yaml`
- **Projekt:** `hermes-ui-auswahl`
- **Arbeitsverzeichnis:** `/opt/struktur/hermes-ui-auswahl`
---
## 2) Docker-Labels
Die relevanten Compose-Labels am Container lauten:
- `com.docker.compose.project = hermes-ui-auswahl`
- `com.docker.compose.project.working_dir = /opt/struktur/hermes-ui-auswahl`
- `com.docker.compose.project.config_files = /opt/struktur/hermes-ui-auswahl/compose.yaml`
- `com.docker.compose.service = hermes-kanban-adapter`
- `com.docker.compose.oneoff = False`
- `com.docker.compose.config-hash = 0281a8510cf550460ddcad9cec9e97f9c20c19fbd61f2ae2bbc11397c971f04c`
Diese Labels sind die direkte Beweiskette dafür, dass der Container aus genau diesem Compose-Projekt und genau dieser Konfiguration stammt.
---
## 3) Vergleich: Datei → `docker compose config` → laufender Container
### a) Healthcheck in der verwendeten `compose.yaml`
In `/opt/struktur/hermes-ui-auswahl/compose.yaml` steht bei `hermes-kanban-adapter`:
```yaml
healthcheck:
test: ["CMD-SHELL", "node -e \"fetch(http://127.0.0.1:5099/health).then(r=>{if(!r.ok)process.exit(1)})\""]
interval: 30s
timeout: 5s
retries: 5
start_period: 5s
```
### b) Healthcheck in `docker compose config`
`docker compose -f /opt/struktur/hermes-ui-auswahl/compose.yaml config` liefert für denselben Service:
```yaml
healthcheck:
test:
- CMD-SHELL
- node -e "fetch(http://127.0.0.1:5099/health).then(r=>{if(!r.ok)process.exit(1)})"
timeout: 5s
interval: 30s
retries: 5
start_period: 5s
```
### c) Healthcheck im laufenden Container
`docker inspect hermes-kanban-adapter` zeigt:
```json
{"Test":["CMD-SHELL","node -e \"fetch(http://127.0.0.1:5099/health).then(r=>{if(!r.ok)process.exit(1)})\""],"Interval":30000000000,"Timeout":5000000000,"StartPeriod":5000000000,"Retries":5}
```
### Bewertung
Die drei Darstellungen sind inhaltlich identisch:
- **Compose-Datei:** fehlerhafte `fetch(http://...)`-Zeile vorhanden
- **Compose config:** derselbe String, nur normalisiert dargestellt
- **Laufender Container:** derselbe String als Healthcheck-Test
**Ergebnis:** Es gibt **keine** nachweisbare spätere Umformung zwischen Datei und Container. Die fehlerhafte Definition entsteht bereits in der Compose-Datei selbst.
---
## 4) Prüfergebnis zu Overrides, Merge-Dateien, Includes, Environment-Substitution, Profiles
### Gefundene Dateien
Unter `/opt/struktur/hermes-ui-auswahl` wurde nur diese Compose-Datei gefunden:
- `/opt/struktur/hermes-ui-auswahl/compose.yaml`
Zusätzlich existiert das Reset-Backup:
- `/opt/struktur/backups/hermes-ui-auswahl-reset-20260812_135820/compose.yaml`
### Negative Befunde
Es wurden **keine** Treffer gefunden für:
- `include:`
- `extends:`
- `profiles:`
- `merge:`
- `override`
- `workspace-overrides`
### Bewertung
Es gibt auf Basis der gefundenen Dateien und der `docker compose config`-Ausgabe **keinen Hinweis** darauf, dass der Healthcheck erst durch eine Override-, Merge-, Include- oder Profil-Schicht verändert wird.
---
## 5) Entsteht der fehlerhafte Healthcheck erst bei `docker compose config` oder erst bei `docker compose up`?
**Nein.**
Begründung:
- In der lokalen `compose.yaml` ist die fehlerhafte Zeile bereits vorhanden.
- `docker compose config` gibt denselben String aus.
- Der laufende Container trägt denselben String in `.Config.Healthcheck.Test`.
**Schlussfolgerung:** Die fehlerhafte Definition entsteht **nicht erst** bei `docker compose config` oder `docker compose up`. Sie ist bereits in der Quelldatei vorhanden und wird unverändert übernommen.
---
## 6) Stammt der Container aus der aktuell vorhandenen `compose.yaml` oder aus einer älteren Compose-Konfiguration?
Die Beweise sprechen für die **aktuell vorhandene** `compose.yaml`:
- `com.docker.compose.project.config_files` zeigt exakt auf `/opt/struktur/hermes-ui-auswahl/compose.yaml`
- `com.docker.compose.project.working_dir` zeigt auf `/opt/struktur/hermes-ui-auswahl`
- `docker compose -f /opt/struktur/hermes-ui-auswahl/compose.yaml config` reproduziert den gleichen Healthcheck
- der Container wurde am `2026-08-12T14:00:36.625739324Z` erstellt, also im zeitlichen Zusammenhang mit dieser lokalen Compose-Fassung
**Es gibt keinen Nachweis**, dass der Container noch aus einer älteren Compose-Konfiguration stammt.
---
## 7) Beweiskette in Kurzform
**Datei**
`/opt/struktur/hermes-ui-auswahl/compose.yaml`
→ **Compose-Labels**
`com.docker.compose.project = hermes-ui-auswahl`
`com.docker.compose.project.working_dir = /opt/struktur/hermes-ui-auswahl`
`com.docker.compose.project.config_files = /opt/struktur/hermes-ui-auswahl/compose.yaml`
→ **`docker compose config`**
Healthcheck ist derselbe fehlerhafte `node -e "fetch(http://127.0.0.1:5099/health)..."`
→ **laufender Container**
`hermes-kanban-adapter` trägt denselben Healthcheck in `.Config.Healthcheck.Test`
---
## 8) Exakte Stelle, an der der fehlerhafte Healthcheck entsteht
Die Fehlerquelle ist exakt diese Zeile in:
`/opt/struktur/hermes-ui-auswahl/compose.yaml`
```yaml
test: ["CMD-SHELL", "node -e \"fetch(http://127.0.0.1:5099/health).then(r=>{if(!r.ok)process.exit(1)})\""]
```
Der Fehler entsteht dort durch die fehlenden Anführungszeichen um die URL innerhalb des `fetch(...)`-Aufrufs.
---
## 9) Empfehlung für genau eine dauerhafte Reparaturmaßnahme
Die Healthcheck-Zeile in der Compose-Datei dauerhaft korrekt quoten:
```yaml
test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:5099/health').then(r=>{if(!r.ok)process.exit(1)})\""]
```
---
## 10) Abschlussbewertung
1. **Tatsächlich verwendete Compose-Datei:** `/opt/struktur/hermes-ui-auswahl/compose.yaml`
2. **Docker-Labels:** belegen Projekt, Working Directory und Config File eindeutig
3. **Compose-Projekt:** `hermes-ui-auswahl`
4. **Beweiskette Datei → docker compose config → laufender Container:** geschlossen und identisch
5. **Exakte Stelle des Fehlers:** Healthcheck-Zeile in `compose.yaml`
6. **Dauerhafte Reparaturmaßnahme:** URL im `fetch(...)`-Aufruf korrekt quoten
**Arbeitsauftrag 033 erledigt.**