# YachtMemory Paket 2B – ADR-Bibliothek

Paket 2B bindet die vorhandene ADR-Ablage als geschützte Leseschicht in das
Portal ein.

## Voraussetzungen

- Paket 2A ist installiert.
- `architecture.read` existiert.
- `src/services/AdrRepository.php` ist installiert.
- Die ADR-Ablage unter `docs/adr/` ist konsistent.

## Änderungen

### `public/dashboard.php`

Benutzer mit `architecture.read` sehen einen neuen Bereich:

```text
Dokumentation
└── Architektur
```

Der Bereich ist unabhängig von der Administration. Ein normaler Benutzer kann
ADR-Leserechte besitzen, ohne Superadmin zu sein.

### `public/architecture.php`

Neue geschützte ADR-Bibliothek.

Zugriff:

```php
require_permission('architecture.read');
```

Die Seite:

- verwendet ausschließlich `AdrRepository`,
- prüft die Konsistenz der ADR-Ablage vor der Anzeige,
- gruppiert ADRs nach `category`,
- zeigt ADR-ID, Titel, Status, Version und Datum,
- bietet für aktuelle `Accepted`-ADRs die PDF-Ansicht an.

Bei inkonsistenter Ablage werden keine ADRs ausgeliefert. Ein Superadmin sieht
die konkreten Konsistenzfehler; normale Leser nur die allgemeine Meldung.

### `public/architecture_pdf.php`

Geschützte PDF-Auslieferung:

```text
/architecture_pdf.php?adr=ADR-0001
```

Auch diese Route verlangt `architecture.read`.

Der Browser liefert ausschließlich eine ADR-ID. Ein vom Benutzer gelieferter
Dateipfad wird niemals verwendet. Der zulässige PDF-Pfad wird ausschließlich
über `AdrRepository::currentPdfPath()` bestimmt.

## Nicht verändert

- `AdrRepository.php`
- Datenbankschema
- Benutzerverwaltung
- Organisationsrollen
- `roles`
- Handbuch
- öffentliche Schiffseiten
- Widgets

## Installation

```bash
cd /var/www/app.yachtmemory.net

unzip yachtmemory_adr_library_2B.zip
cd yachtmemory_adr_library_2B

sudo ./install.sh /var/www/app.yachtmemory.net
```

Der Installer sichert `dashboard.php` und gegebenenfalls bereits vorhandene
ADR-Seiten vor dem Ersetzen.

## Abnahmetest

### Superadmin

1. Anmelden.
2. Dashboard öffnen.
3. Bereich `Dokumentation` muss sichtbar sein.
4. `Architektur` öffnen.
5. ADR-0001 muss angezeigt werden.
6. `PDF öffnen` muss die aktuelle PDF im Browser öffnen.

### Normaler Benutzer mit `architecture.read`

Gleicher Test. Die ADR-Bibliothek muss zugänglich sein, obwohl keine
Superadmin-Rolle vorliegt.

### Normaler Benutzer ohne `architecture.read`

- Bereich `Dokumentation` darf im Dashboard nicht erscheinen.
- direkter Aufruf von `/architecture.php` muss mit HTTP 403 abgewiesen werden.
- direkter Aufruf von `/architecture_pdf.php?adr=ADR-0001` muss ebenfalls mit
  HTTP 403 abgewiesen werden.

## Repository-Test

Der Installer führt automatisch aus:

```bash
php scripts/check_adr_repository.php
```

Erwartet:

```text
ADR-0001   Accepted     v1.0     ...
ERGEBNIS: KONSISTENT
```
