# RX-P5-004 – Phase 5.4 Workbench Projection

## Ziel

Read-only-Projektion der in Phase 5.1–5.3 eingeführten Discovery Execution Evidence in die bestehende Evaluation Workbench.

Die Workbench liest historische Profile ausschließlich aus `reconciliation_run.configuration_json`. Die aktuelle `config/discovery_profiles.php` wird für historische Runs nicht herangezogen.

## Umsetzung

### EvaluationWorkbenchQuery

`PdoEvaluationWorkbenchQuery::loadDiscoveryEvidence()` projiziert jetzt je `ReconciliationRunItem`:

- `profile_key` aus dem Run-Snapshot,
- `DiscoveryStepExecution` in `sequence`-Reihenfolge,
- die zugehörige Plan-Definition über `step_key` (Fallback: `sequence` für ältere Strategien),
- `CandidateDiscoveryEvidence` mit `step_rank` / `step_score` sowie finalem Candidate-Rank/-Score,
- `DiscoveryResponseCapture` / `DiscoveryResponseSnapshot` gruppiert nach StepExecution,
- nicht einem Step zugeordnete Captures separat als `unassigned_captures`,
- final konsolidierte `CandidateItem`s weiterhin separat.

Damit bleibt die Trennung erhalten:

```text
Run.configuration                 = Plan / historischer Snapshot
DiscoveryStepExecution            = tatsächliche Step-Ausführung
CandidateDiscoveryEvidence        = strukturierte Candidate-Herkunft
DiscoveryResponseCapture/Snapshot = technische Provider-Evidence
CandidateItem                     = final konsolidierter Profil-Output
```

### Workbench UI

Der bestehende lazy-loaded Evidence-Bereich zeigt bei Profile-Runs nun:

- Profile-Key,
- Step-Key, Methode, Family, Condition und Resource,
- Execution-Status und Candidate Count,
- Candidate Evidence mit Step-Rank/Step-Score,
- finalen Rank/Score des CandidateItems,
- zugeordnete Provider Captures / Raw Snapshots.

`Discovery Evidence` ist auch bei 0 finalen Candidates sichtbar, damit insbesondere `SKIPPED`-, `FAILED`- und Zero-Result-Steps nachvollziehbar bleiben.

Direkte/ältere Runs ohne `DiscoveryStepExecution` bleiben kompatibel: vorhandene Captures bzw. persistierte CandidateItems werden wie bisher als Fallback angezeigt.

## Bewusste Nicht-Ziele

- keine Schreibfunktionalität,
- kein Expert:innenfeedback,
- kein Matching / keine MatchDecision,
- keine Änderung an Candidate-Konsolidierung oder Ranking,
- keine neue Migration,
- keine Rückfrage an die aktuelle Profile-Config für historische Runs.

## Testhinweis

Nach Installation ist keine Migration notwendig. Für den Laufzeittest eignet sich ein bereits vorhandener Profile-Run, z. B. `Annakapelle`:

```text
Discovery Evidence
  exact-string
    EXECUTED
    0 Candidates

  mapped-vocabulary
    EXECUTED
    1 Candidate
      Kapelle
      step rank / step score
      final rank / final score
      Provider Capture / Snapshot
```

Ein Exact-Treffer sollte den zweiten Step als `SKIPPED` anzeigen.

## Offener Punkt

Der normale OpenRefine-Reconciliation-Pfad ist weiterhin nicht `ReconciliationRunItem`-gebunden. Damit kann dort die Phase-5 Execution Evidence noch nicht vollständig entstehen. Dieser Punkt wurde bewusst nicht in 5.4 gelöst.
