# Enterprise Architecture Lab

Dieses Java-21-Lab implementiert dieselbe Order-to-Cash-Referenz in drei
bewusst unterschiedlichen Entwicklungs- und Architekturansätzen. Es dient zum
Vergleichen am echten Code, nicht als Sammlung aufeinanderfolgender Vollkopien.
Die Versionsgeschichte gehört in Git.

## Varianten

| Pfad | Schwerpunkt |
| --- | --- |
| `projects/01-layered` | klassische Schichten, Spring Boot, JPA, REST und Integration |
| `projects/02-tdd-first` | vertikale Entwicklung über Red–Green–Refactor und technische Adapter |
| `projects/03-ddd` | Bounded Contexts, Aggregate, Published Language und Process Manager |

Die gemeinsame fachliche Grundlage liegt in `reference-specification/`. Der
evidenzbasierte Vergleich liegt in `architecture-comparison/`. Das
offlinefähige Lernportal startet mit [`index.html`](index.html); ein passender
Lernpfad steht in [`lernweg.html`](lernweg.html).

## Schnellstart

Voraussetzungen sind JDK 21 und Maven 3.9 oder der mitgelieferte Maven Wrapper.

```powershell
mvn -B test
```

Der vollständige Lauf schließt die mit `*IT` benannten PostgreSQL-Tests über
Testcontainers ein und benötigt eine laufende Docker-kompatible Engine. Das
kann Docker Desktop oder eine gestartete Podman-Maschine sein:

```powershell
mvn -B clean verify
```

Für Podman unter Windows wurde dieser Aufbau verifiziert:

```powershell
podman machine start podman-machine-default
$env:DOCKER_HOST = 'npipe:////./pipe/podman-machine-default'
$env:TESTCONTAINERS_RYUK_CONTAINER_PRIVILEGED = 'true'
mvn -B clean verify
```

Der zuletzt verifizierte Komplettlauf umfasst 27 Maven-Module und 121 Unit-,
Architektur- und PostgreSQL-Integrationstests ohne Fehler oder übersprungene
Tests.

Die Teststrategie und gezielte Modulbefehle sind unter
[`docs/testing/README.md`](docs/testing/README.md) dokumentiert.

## Wartung und Qualität

```powershell
python scripts/check_tdd_test_smells.py
python scripts/generate_search_index.py
python scripts/validate_repository.py
```

`validate_repository.py` prüft unter anderem tote lokale HTML-Verweise, die
Vergleichsmatrix, den Suchindex und unerwünschte Lieferartefakte. Tests,
Fixtures, Datenbankmigrationen und sonstige Testvorbereitungen bleiben im
Repository; Build-Ausgaben, Laufprotokolle, PDFs, ZIP-Pakete sowie Prüf- und
Statusberichte gehören nicht hinein.

## Projektstatus und KI-Unterstützung

[`project.yaml`](project.yaml) ist die zentrale, maschinenlesbare Beschreibung
für Status, Tags, Einstiegspunkte und Qualitätsstand. Änderungszeit, Umfang der
letzten Änderung, Code-/HTML-Anteile und Git-Synchronität werden vom
Workspace-Cockpit direkt aus Git abgeleitet. Dadurch bleiben sie filterbar,
ohne als manuelle Momentaufnahme zu veralten.

Werkzeugneutrale KI-Konventionen, Prompts und Skills kommen zentral aus dem
privaten Repository `nursude/ai-governance`. Dieses Projekt hält nur seinen
kleinen Overlay in [`AGENTS.md`](AGENTS.md) und fixiert die verwendete zentrale
Revision in `ai/governance.lock`.
