# CHANGELOG WP1

## WP1-001A — Domain Foundation

**Status:** completed  
**Scope:** Domain Objects und Aggregatinvarianten gemäß DM001 und ADR001  
**Persistence:** nicht enthalten  
**OpenRefine-Integration:** nicht enthalten

### Neue Dateien

```text
src/Domain/Reconciliation/DomainInvariantViolation.php
src/Domain/Reconciliation/SourceValue.php
src/Domain/Reconciliation/InterpretationGraph.php
src/Domain/Reconciliation/InterpretationNode.php
src/Domain/Reconciliation/ReconciliationResult.php
src/Domain/Reconciliation/CandidateItem.php
src/Domain/Reconciliation/MatchDecision.php
tests/Domain/Reconciliation/DomainFoundationTest.php
```

### Änderungen

- `SourceValue` als Aggregate Root eingeführt.
- Für WP1 genau einen `InterpretationGraph` pro `SourceValue` abgesichert.
- Für WP1 genau eine initiale Root-`InterpretationNode` pro Graph abgesichert.
- Graph-Span und unverändertes `sourceFragment` gegen `SourceValue.value` validiert.
- `ReconciliationResult` als zweiter Aggregate Root eingeführt.
- Candidate-URI innerhalb eines Ergebnisses eindeutig gehalten.
- `rank` wird als positive Ordnungsangabe validiert; die offene Frage zu Gleichständen wird nicht vorweggenommen.
- Domain-Score auf `0..1` begrenzt.
- `MatchDecision` darf nur einen Candidate desselben Ergebnisses auswählen.
- Datenbank-IDs sind nullable und können genau einmal zugewiesen werden.
- Keine SQL-, PDO-, JSON-, xTree- oder OpenRefine-Abhängigkeit eingeführt.
- Keine generischen Basisklassen, Repositories oder Persistenzabstraktionen eingeführt.

### Bewusste Begrenzungen

- `ContextItem` wird erst nach ADR002 integriert.
- Weitere Interpretation Graphs und Child Nodes gehören zur nächsten Phase.
- `MatchDecision` ist modelliert, wird im produktiven WP1-Pfad aber noch nicht erzeugt.
- Kontrollierte URIs werden in diesem Paket noch nicht zentral registriert.
- `success` bleibt ein passives Kompatibilitätsattribut und steuert keinen Workflow.

### Installation

Die Verzeichnisse `src/` und `tests/` aus diesem Paket in das Projektverzeichnis kopieren. Es werden keine vorhandenen Dateien überschrieben.

### Test

Aus dem Projektwurzelverzeichnis:

```bash
php tests/Domain/Reconciliation/DomainFoundationTest.php
```

Erwartete Ausgabe:

```text
WP1-001A Domain Foundation: OK
```
