# Arbeitsauftrag 030 – Herkunft des fehlerhaften Healthchecks von `hermes-kanban-adapter`

**Modus:** Read-only  
**Datum:** 2026-08-12  
**Scope:** Nur Herkunftsanalyse des Healthchecks für `hermes-kanban-adapter`

## 1. Quelle des Healthchecks

### Gefundene Definition

- **Datei:** `/opt/struktur/hermes-ui-auswahl/compose.yaml`
- **Zeile:** 57
- **Exakter Healthcheck:**

```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
```

### Zusätzliche Bestätigung

Die referenzierte Backup-Datei enthält an derselben Stelle denselben Healthcheck:

- **Datei:** `/opt/struktur/backups/hermes-ui-auswahl-reset-20260812_135820/compose.yaml`
- **Zeilen:** 24–29
- **Exakter Healthcheck:**

```yaml
healthcheck:
  test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:5099/ >/dev/null"]
  interval: 30s
  timeout: 5s
  retries: 5
  start_period: 30s
```

Wichtig: Diese Backup-Datei gehört zum **Workspace-Service**, nicht zum Kanban-Adapter, und zeigt, dass der Kanban-Adapter-Healthcheck **nicht** aus dem Workspace-Backup stammt, sondern separat in der aktiven Compose-Datei definiert wurde.

---

## 2. Nachweis

### Direktnachweis in der Compose-Datei

`docker compose -f /opt/struktur/hermes-ui-auswahl/compose.yaml config` zeigt den fehlerhaften Healthcheck für `hermes-kanban-adapter` in der aufgelösten Compose-Konfiguration:

```text
27:        - node -e "fetch(http://127.0.0.1:5099/health).then(r=>{if(!r.ok)process.exit(1)})"
```

### Direktnachweis im laufenden Container

`docker inspect hermes-kanban-adapter --format '{{json .Config.Healthcheck}}'` liefert:

```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
}
```

Das beweist, dass die fehlerhafte Definition aus der laufenden Container-Konfiguration stammt und nicht erst zur Laufzeit im Container erzeugt wurde.

### Gegenprobe gegen das Image

`docker image inspect ghcr.io/outsourc-e/hermes-workspace:latest --format '{{json .Config.Healthcheck}} ...'` zeigt für das Image **einen anderen, korrekten Healthcheck**:

```json
{"Test":["CMD-SHELL","curl -fsS http://127.0.0.1:3000/ >/dev/null || exit 1"],"Interval":30000000000,"Timeout":5000000000,"StartPeriod":20000000000,"Retries":3}
```

Damit ist belegt:
- Das **Image** enthält **nicht** den fehlerhaften Kanban-Healthcheck.
- Der fehlerhafte Healthcheck stammt aus der **lokalen Compose-Konfiguration**.

---

## 3. Verantwortliche Datei

**Verantwortliche Datei:** `/opt/struktur/hermes-ui-auswahl/compose.yaml`

Dort definiert der Service `hermes-kanban-adapter` den syntaktisch fehlerhaften Healthcheck.

### Herkunft
- **Herkunft:** lokal gepflegte Compose-Datei
- **Nicht aus Image-Metadaten**
- **Nicht aus dem Dockerfile des Images**
- **Nicht aus dem Entrypoint**
- **Nicht aus einem Healthcheck-Skript**
- **Nicht aus einer generierten Runtime-Datei**

---

## 4. Weitere betroffene Stellen

### Derselbe fehlerhafte Healthcheck an weiteren Stellen?

**Gefunden:** Nein, nach der gezielten Suche ist der fehlerhafte String nur an **einer Stelle** sichtbar:

- `/opt/struktur/hermes-ui-auswahl/compose.yaml:57`

### Gleiches Image, anderer Healthcheck?

Ja. Das Image `ghcr.io/outsourc-e/hermes-workspace:latest` besitzt **einen eigenen, korrekten Image-Healthcheck**:

- `curl -fsS http://127.0.0.1:3000/ >/dev/null || exit 1`

Das zeigt eine Trennung zwischen:
- **Image-Standard-Healthcheck** und
- **Compose-überschriebener Healthcheck-Definition**

### Weitere Container mit demselben fehlerhaften Healthcheck?

**Nein, nicht gefunden.**

Die Prüfung ergab keinen zweiten Container, der exakt denselben fehlerhaften `fetch(http://127.0.0.1:5099/health)`-Healthcheck verwendet.

---

## 5. Lokal geändert oder bereits Bestandteil des Images?

**Ergebnis:** lokal geändert / lokal definiert, **nicht** Bestandteil des Images.

Begründung:
1. Das Image-Metadatum enthält einen anderen Healthcheck.
2. Die aktive Compose-Datei enthält die fehlerhafte Definition.
3. Der laufende Container trägt genau diese fehlerhafte Definition in `.Config.Healthcheck`.

Damit ist die Ursache eindeutig: **die Compose-Datei überschreibt den Image-Healthcheck lokal**.

---

## 6. Auswirkungen

### Ist der Fehler auf `hermes-kanban-adapter` beschränkt?

**Ja, nachweislich auf diesen Container beschränkt.**

Die gezielte Suche nach der fehlerhaften Healthcheck-Definition hat keinen zweiten Container mit derselben Definition gefunden.

### Kann dieser Fehler andere Symptome erklären?

Nur sehr eingeschränkt:

- **Nicht geeignet als primäre Erklärung** für Dashboardfehler, Workspacefehler, Cronprobleme, KI & Automation oder YouTube Research.
- **Geeignet als Erklärung** dafür, dass **nur der Gesundheitsstatus des Kanban-Adapters** auf `unhealthy` steht.
- **Eher Folge-/Anzeigeproblem**, nicht Ursache eines allgemeinen Systemausfalls.

---

## 7. Empfehlung für genau EINE Reparaturmaßnahme

**Eine einzige Reparaturmaßnahme:**
Die fehlerhafte Healthcheck-Zeile in `/opt/struktur/hermes-ui-auswahl/compose.yaml` gezielt korrigieren, damit die URL im `node -e`-Ausdruck als String gequotet wird.

Beispiel der beabsichtigten Korrektur:

```bash
node -e "fetch('http://127.0.0.1:5099/health').then(r=>{if(!r.ok)process.exit(1)})"
```

---

## Kurzfazit

Die fehlerhafte Healthcheck-Definition für `hermes-kanban-adapter` stammt **aus der lokalen Compose-Datei** `/opt/struktur/hermes-ui-auswahl/compose.yaml` und **nicht** aus dem Image. Sie ist derzeit nur für diesen einen Container nachweisbar.

**Arbeitsauftrag 030 erledigt.**
