# 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.**
