Claimcheck: Claim-Verifikation via Kilo-Sub-Sessions (Agent + Workflow)

# Claim-Verifikation via Kilo-Sub-Sessions

**Projekt:** `~/Development/claimcheck`
**Stand:** 2026-08-20 (v1)

## Zweck

Jede Behauptung (Claim) einer Episode wird in einer **frischen Sub-Session** geprüft — separater Kontext pro Claim, keine Kontext-Degeneration, keine Cross-Claim-Kontamination (wichtig für inhaltlich unabhängige Verdikte). Ausführung durch **GLM 4.7** (kleineres/geringeres Modell) statt der Haupt-Session.

## Komponenten

| Datei | Rolle |
|---|---|
| `.kilo/agent/fact-checker.md` | Sub-Agent (mode: subagent, model: `kilo/z-ai/glm-4.7`, 30 Steps): Regeln, Quellen-Tiers, Verdikt-Taxonomie, JSON-Rückgabe-Schema. Verweist für Details auf `agents/prompts/research_agent.md` (Single Source of Truth). Schreibt keine Dateien. |
| `.kilo/command/verify-claims.md` | Orchestrator (`/verify-claims <Episoden-Nr> [Claim-IDs]`, läuft als Subtask): lädt Claims aus episode.yaml, startet je Claim eine parallele Sub-Session, validiert Rückgaben (Taxonomie, T1/T2-Pflicht, Pflichtfelder), schreibt Traces, reportet Tabelle. Überschreibt keine vorhandenen echten Traces ohne Rückfrage. |

## Datenfluss

```
episode.yaml (selected claims)
  → /verify-claims 1 C01,C03
      → Task×N: fact-checker (glm-4.7, Web-Recherche)
      ← JSON je Claim (claim_id, verdict, rationale, sources[tier,quote], confidence, manipulation?)
  → Validierung (Taxonomie, T1/T2, Felder)
  → episodes/<nr>/traces/research_CXX_session.json  (Format wie claimcheck.llm, mock:false)
  → Report-Tabelle
  → [HUMAN] Gate 2: Verdikte gegenlesen → episode.yaml
```

## Design-Entscheidungen

- **Frische Sub-Session pro Claim:** Kontext bleibt klein (~3-5k Tokens) statt wachsender Gesamt-Session; parallele Ausführung möglich; Verdikte beeinflussen sich nicht gegenseitig.
- **GLM 4.7:** Aufgabe ist eng begrenzt (ein Claim, striktes Schema, Tier-Regeln) — ideal für kleineres Modell. Qualitätssicherung dreifach: programmatische Validierung, T1/T2-Quotenpflicht mit wörtlichen Zitaten, Gate 2 (menschliches Gegenlesen) bleibt unverändert.
- **Trace-Kompatibilität:** Ausgabeformat identisch zu `claimcheck.llm`-Traces → `publish` blockiert nicht, Transparenz-Paket funktioniert unverändert. `"model": "glm-4.7 (Kilo-Subagent)"`.
- **Kein Schreibzugriff im Sub-Agent:** Nur der Orchestrator schreibt Traces (eine Schreibstelle, konsistentes Format, einfache Berechtigungen).

## Token-Ökonomie (Einschätzung)

- Eine große Session für 10 Claims trägt alle früheren Turns mit (wachsend, je Turn mehr Input-Tokens).
- Frische Sub-Sessions: fixe kleine Kontexte, linear, parallel — Ersparnis wächst mit Claim-Anzahl.
- Zusätzliche Ersparnis: 4.7 statt 5.x für die Research-Arbeit; Haupt-Modell nur noch für Skript/Gates.

## Pilot (offen)

C01 (Folge 1) mit 4.7 gegenprüfen — Vergleichsbasis: vorhandener, human-geprüfter Trace (glm-5.3, Verdikt `falsch`, BMEIA+Kiel-Quellen). Kriterien: gleiches Verdikt, vergleichbare Quellenauswahl, Zitate wörtlich korrekt.

## Verwendung

```
/verify-claims 2          # alle selektierten Claims von Folge 2
/verify-claims 2 C05,C09  # nur bestimmte Claims (Re-Runs)
```

Nach Abschluss: `claimcheck approve <nr> gate_verdicts` (Human Gate 2) wie bisher.

id: bf6984df81e1475b9b84ba4d24d33050
parent_id: 86f1e0f3538341dfaa58cc3357e03343
created_time: 2026-08-20T06:18:17.890Z
updated_time: 2026-08-20T06:18:17.890Z
is_conflict: 0
latitude: 0.00000000
longitude: 0.00000000
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 1787206697890
user_created_time: 2026-08-20T06:18:17.890Z
user_updated_time: 2026-08-20T06:18:17.890Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
is_locked: 0
extracted_resource_ids: 
type_: 1