Zum Inhalt

ADR 0002: Die Application-Umgebung ist Deployment-Kontext

  • Status: Akzeptiert
  • Datum: 2026-09-10

Kontext

BaseHarbor v0.x konzentriert sich auf Compose-basierte Entwicklung und Single-Host-Runtimes. Der langfristige Application-Lifecycle kann später Kubernetes- und OpenShift-Provider umfassen.

Die repositoryeigene baseharbor.yaml enthält derzeit sowohl die stabile Application-Identität als auch app.environment. Runtime-Ressourcen werden über beide Werte nach Deployment getrennt, zum Beispiel baseharbor-workload-<app>-<environment>.

Ohne klare semantische Grenze könnte environment fälschlich als unveränderliche Eigenschaft des Application-Vertrags verstanden werden. Das würde den parallelen Betrieb derselben Application-Quelle in Entwicklung, Staging, Produktion oder kundenspezifischen Deployments erschweren.

Entscheidung

app.name bezeichnet die stabile logische Application-Identität.

app.environment beschreibt in der aktuellen BaseHarbor-Realisierung den Kontext einer Deployment-Instanz. Es ist keine fachliche Eigenschaft der Application und darf weder dauerhaft an den Quellcode noch an einen bestimmten Runtime-Provider gekoppelt werden.

Für die Compose-orientierte v0.x-Implementierung bleibt app.environment in baseharbor.yaml aus Kompatibilitäts- und Bedienbarkeitsgründen zulässig. Der Wert darf weiterhin Compose-Projektnamen, Runtime-Verzeichnisse, Backend-Isolation, Backup-Identität und Lifecycle-Operationen beeinflussen.

Künftige Umgebungs- und Profilfunktionen können die Auswahl beziehungsweise Übersteuerung des Deployment-Kontexts aus den repositoryeigenen Application-Anforderungen herauslösen, ohne die logische Identität zu verändern.

Dies muss unabhängige Realisierungen desselben Application-Vertrags ermöglichen:

mailflow / dev
mailflow / staging
mailflow / production
mailflow / customer-a-production

Compose-first-Regel für v0.x

Compose ist das gegenwärtige Implementierungsziel und soll vollständig und konsistent funktionieren, bevor weitere Provider hinzukommen.

Compose-spezifische Implementierungsdetails sind innerhalb der Compose-/Runtime-Schicht zulässig. Sie dürfen nur dann zu Application-Anforderungen werden, wenn sie tatsächlich einen portablen Bedarf beschreiben.

Folgende Details bleiben providerverantwortlich:

  • Compose-Projektnamen
  • Docker-/Podman-Netzwerknamen
  • generierte Host-Ports
  • Containernamen
  • Volumenamen
  • interne OpenBao-Pfade und Rollennamen

Applications sollen Standard-Schnittstellen wie Datenbank-URLs, Redis-/Valkey-URLs, Secret-Dateien, Service-Endpunkte und gewöhnliche Health-Semantik verwenden.

Konsequenzen

  • Für v0.2.0 ist keine neue Kubernetes-/OpenShift-Funktion erforderlich.
  • Compose-Verhalten und Manifest v1 bleiben kompatibel.
  • Neue v0.2-Arbeit darf keine zusätzlichen direkten Docker-/Podman-Annahmen in das portable Anforderungsmodell aufnehmen.
  • Runtime-spezifische Operationen verbleiben möglichst hinter der Runtime-/Compose-Grenze.
  • Mehrere benannte Ressourcen sind logische Ressourcen und keine HA-Replikate.
  • Provider und Umgebungsprofile können sich unabhängig vom Application-Vertrag weiterentwickeln, ohne erneute operative Einrichtung aller Applications zu erzwingen.

Release-Gate

Eine Änderung blockiert v0.2.0 nur, wenn sie Sicherheit oder Datenintegrität gefährdet, den aktuellen Compose-Lifecycle beschädigt oder eine Provider-/Umgebungsannahme fest verdrahtet, die künftige Provider wesentlich behindert.

Noch fehlende Kubernetes-/OpenShift-, Identity-, Policy-, GUI- oder HA-Funktionen sind für v0.2.0 kein Blocker.