# YachtMemory – Derived Infrastructure / Phase 2A.1

Phase 2A installiert die technische Zugriffsschicht für
`yachtmemory_derived`, ohne produktive Leser oder Schreiber umzuschalten.

Neu:

```text
src/lib/DerivedDb.php
src/repositories/DerivedAnchorageRepository.php
```

Das bestehende `AnchorageRepository.php` bleibt bewusst unverändert, weil es
bereits produktiv von der Ankerplatzanalyse verwendet wird.

`DerivedAnchorageRepository` ist eine Übergangsklasse für die kontrollierte
Migration. Nach vollständigem Cutover wird die Repository-Schicht wieder
vereinheitlicht.

## Installation

```bash
unzip yachtmemory_derived_infrastructure_2A.zip
cd yachtmemory_derived_infrastructure_2A
sudo ./install.sh /var/www/app.yachtmemory.net
```

## Erwarteter Test

```text
Derived DB:      yachtmemory_derived
Vessel:          silent_sea (id=1)
Anchorages:      77
First:           #1  2025-06-04 22:41:57
Last:            #77  2026-09-01 13:50:42
...
ERGEBNIS: DERIVED-ZUGRIFF KONSISTENT
```

Nicht verändert werden APIs, Widgets, Full-Rebuild, Incremental-Rebuild,
`TelemetryDbRouter` oder `SilentMessDB`.


## Korrektur gegenüber 2A

2A installierte `DerivedDb.php` und `DerivedAnchorageRepository.php` korrekt,
rief aber das isolierte Testskript mit einem falschen relativen Pfad zu
`bootstrap.php` auf.

2A.1 übergibt dem Testskript das Zielverzeichnis explizit:

```bash
php scripts/test_derived_anchorages.php /var/www/app.yachtmemory.net
```

Die produktiven PHP-Klassen sind gegenüber 2A unverändert.
