Zum Inhalt

Capability-first Application-Verträge (v0.4.25)

Verbindlicher Scope: #872, korrigiert am 2026-10-11. Er ersetzt das feste SQL/Secrets/Identity-Paket, Entwickler-IDs und die vertagte Entfernung früherer Planung und Abnahme. Bestehende Sicherheit, Ownership, HA und Recovery bleiben verbindlich.

Autorenformat und systemeigene Identität

version: 1
app:
  name: myapp
  environment: dev

Services sind optional und niemals implizit. SQL ist services.sql: true unter services; ausführliche Anforderungen und benannte Instanzen nutzen die vorhandene Grammatik. Keine provider:-Sektion, kein weiterer Parser, keine Pflicht-Zusatzdatei.

Entwickler setzen NIEMALS Application-IDs. ParseYAML lehnt jedes app.id, auch leere Werte, vor Änderungen ab. Das Feld entfernen und die Anwendung explizit initialisieren. Keine ID-Frage, kein ID-Flag, keine Konvertierung alter Autoren-IDs. ParseCanonicalYAML nutzt denselben Parser mit Freigabe für interne Datensätze; nur bestehende systemeigene Store-/Backup-Adapter verwenden diesen Zugang. YAML serialisiert interne Records, AuthoredYAML lässt die ID für Entwickler- Ausgaben weg. Interne IDs und Machine-Ausgaben bleiben gültig und werden beim Lesen niemals neu erzeugt.

MCP app.create und app.adopt nehmen dasselbe typisierte Intent ohne ApplicationID entgegen. Ihre Eingabeschemas stammen aus den kanonischen Manifest-Typen, lassen das systemeigene Feld weg und lehnen mitgelieferte Werte vor Änderungen ab. Version, Name und Environment sind Pflichtfelder; weggelassene Anforderungssektionen erhalten leere Standardwerte. Ausführbare Anforderungen und Quellauswahl werden weiterhin geprüft. Autorisierung erfolgt vor dem Speichern der Identität; Ergebnisse enthalten die tatsächlich erzeugte kanonische ID. Wiederholte Adoption überschreibt keine Autorenquelle. Nach einer unterbrochenen Adoption liefert ein erhaltener kanonischer Owner beim Wiederholen dieselbe ID.

Operation Identität und Schreibverhalten
Parse / inspect / plan Keine Vergabe oder Speicherung; nur bestehende autoritative Claims auflösen
Explizite Initialisierung / Registrierung Einmal erzeugen, wenn wirklich neu; im bestehenden kanonischen Store speichern
Wiederholung / Neustart / Bearbeitung / anderes Target Dieselbe systemeigene Identität verwenden
Widersprüchliche oder fehlende registrierte Identität Vor Änderungen abbrechen; autoritativen State wiederherstellen, keine Ersatz-ID
Gleichzeitige Initialisierung Store.Create-Gewinner übernehmen oder unvollständigen State zum sicheren Wiederholen melden
Entwickler-app.id Verständlich ablehnen; Autoren-Datei und vorhandene Benutzerdaten erhalten

ResolveIdentity ist rein. Store.InitializeIdentity nutzt den bestehenden kanonischen Owner .baseharbor/apps/<name>/baseharbor.yaml. Deployment-Records projizieren diese Identität. Adapter gleichen Repository-/Source-Ownership ab, nicht App-Namen fremder Repositories. Lesende Adapter rufen Create, InitializeIdentity oder Sync niemals auf. Keine parallele Identity-Registry, automatische Migration oder Löschung vorhandener Daten.

Provider-Auflösung und Footprint

Application Contract beschreibt Bedarf. Bestehende Target-/Deployment-Bindings beschreiben Provider und Platzierung. ProviderPreference wählt optional InstanceID oder ProviderKind; beide müssen zusammenpassen. Leer bedeutet Automatic. Die Auswahl verwendet tatsächlich registrierte Capability-Angebote, keine fest codierte Provider-Liste. Kompatible Bindings bleiben stabil; expliziter Widerspruch ist ein typisierter Konflikt. Unterschiedliche Targets können denselben portablen Bedarf unterschiedlich realisieren.

ResolveFootprint liest capability.Registry v2 und Facts vorhandener Pläne/ Observer eines Targets. Facts enthalten tatsächliche Dependency-Instanz-IDs: null bedeutet unbekannt, [] verifiziert keine. Keine schreibende Discovery, neue Registry, Scheduler oder zweiter Resolver. Fremde Targets/Ressourcen, Zyklen, fehlende Dependencies und inkompatible/mehrdeutige Auswahl scheitern klar. Automatic ohne verfügbare Deklaration bleibt unaufgelöst und autorisiert keine Provisionierung. Eine verifiziert ausgewählte Instanz ist strukturell vollständig, auch wenn das Binding erst in der bestehenden Apply-Transaktion gespeichert wird.

Adapter für Runtime-Berechtigungen/Consumption liefern verifizierte DependencyRoots vorhandener Pläne an denselben Resolver. Nil bedeutet bei dieser Absicht unvollständig; [] beweist keine zusätzliche Provider-Realisierung, nicht den Wegfall von Sicherheitsanforderungen. Jeder ConsumerIntent liefert eigene Roots; Verifikation wird nicht zwischen Verbrauchern übernommen. Unbekannte Roots autorisieren keinen Core-losen Eingriff.

Keine Capability impliziert das alte Core-Paket. SQL, Cache, Secrets, Identity und HTTPS wählen nur ihre Realisierung und echte erklärte Dependencies. Identity kann SQL benötigen. HTTPS benötigt nicht automatisch Identity oder OpenBao. Separat aktivierte Management-/Console-Dienste liefern ihre tatsächlichen Sicherheitsanforderungen als eigene Verbraucher; TLS/OIDC/mTLS/Autorisierung/HA/ Recovery werden nicht abgeschwächt. Das bestehende core-Ausgabefeld klassifiziert eine echte Deklaration und fordert kein Paket an.

Der gemeinsame Read-only-Befund heißt baseharbor.footprint/v1:

Feld Bedeutung
requirements Bedarf, vorhandenes Binding oder requested/unbound, ausgewählte Instanz/State
existing / additional Bestehende/shared/gestoppte Ressourcen gegen deklarierte neu benötigte Ressourcen
dependencies Gewählte Dependency-IDs; null ist unverifizierbar, [] verifiziert keine
unused Informations-IDs außerhalb dieses Bedarfs ohne Bindings; niemals Entfernungsfreigabe
scope / ownership / shared / consumers Bestehende Ownership und Binding-Anzahl; keine erfundenen App-Zahlen
memory_bytes / containers measured/estimated/unknown; Werte benötigen nichtnegative Menge und Herkunft
core / complete Tatsächlich erklärter Bedarf und strukturelle Sicherheit; unvollständig verbietet unsichere Änderungen

Unbekannte Messwerte sind bei strukturell vollständiger Auflösung zulässig. Schätzungen kommen aus Provider-Nachweisen, niemals erfundenen RAM-/Container- Versprechen oder Summen.

Wechsel der nativen Backend-Platzierung

Die bestehende Operator-Platzierung kann eigene PostgreSQL-/Valkey-Realisierungen über normales app apply zwischen Shared- und Application-Scope wechseln. Der gewünschte Footprint meldet das Ziel als requested/unbound, bis verifiziertes Apply sein Binding veröffentlicht. Der konkrete Folgenplan benennt ursprünglichen und gewünschten Owner. Zieldaten sind unabhängig: Vorhandene Inhalte werden nicht automatisch kopiert. Ursprüngliche Volumes, geschützte Zugangsdaten und Registry-Owner bleiben erhalten; der Rückwechsel verwendet ihren Speicher erneut. Ungeprüfter Zugriff oder Materialerhalt bleibt teilweise und verlangt die aktuellen Bestätigungen.

Ausgeführte und ausstehende Backend-Platzierungen sind Realisierungsmetadaten im bestehenden Deployment-GeneratedState, keine Autorenabsicht oder weitere Registry. Das lesende kanonische Runtime-Inventar nutzt diese Owner-Projektion. Geänderte Operator-Policy schreibt damit beim Retry nicht die vorherige Realisierung um. Ein unterbrochenes Deployment schützt ursprünglichen und gewünschten Provider in derselben Target-Verbraucherunion, auch wenn eine andere App inzwischen eine andere Policy nutzt. Erst tatsächliche Prüfung des Ziels und Workloads sowie Konvergenz der alten Runtime erlauben das neue Binding und das Entfernen der ausstehenden Projektion. Andere Verbraucher behalten Shared- Runtime. Bei Aufteilung einer Shared-Quelle auf benannte Ziele erscheinen alle Zielfolgen; kein einzelnes Ziel wird als Ersatz für alle behauptet.

Dieser native Platzierungswechsel implementiert keine Migration von Datenbankinhalten, OpenBao-/Identity-Materialübergabe oder nicht unterstützte Adapter für externe Provider.

Die automatische Auswahl behält die gewählte Deployment-Platzierung nach dem Entfernen eines einmaligen Operator-Overrides, auch beim Deaktivieren und erneuten Aktivieren einer Capability. Explizite Operator-Policy fordert einen neuen Wechsel an; die Ausführung hält diese Auswahl fest und prüft sie gegen den bestätigten Plan. Die native PostgreSQL-Prüfung verwendet die erhaltene Container-Rolle und Datenbank. Natives Valkey projiziert seinen Default-Benutzer mit dem erhaltenen Passwort; die geschützte Shared-ACL-Identität bleibt für den Rückwechsel erhalten. Dieser Benutzerwechsel ist eine explizite Planfolge, kein Zurücksetzen der Zugangsdaten.

Target-Verbraucherunion und Hinzufügen/Entfernen/Reaktivieren

App---full-reset und Remote-App-Zerstörung bestätigen einen aggregierten baseharbor.provider-impact-scope/v1 des ausgewählten Deployments. Der enthaltene Providerplan allein erlaubt kein Löschen seines geschützten Zustands. Beide aktuellen Bestätigungen sind erforderlich; Full Reset verlangt zusätzlich die separate Datenlöschungszustimmung. Geänderte Veröffentlichungs-/Recovery-Owner machen diese Zustimmung ungültig. Ungeprüftes Remote-Material und dessen Zugriff bleiben explizit teilweise. Standard-Remote-Zerstörung behält Veröffentlichung, Zugangsdaten und Deployment-Owner, gibt Referenzen erst nach geprüfter Containerentfernung frei und nutzt die geschützte stillgelegte Absicht zur expliziten Reaktivierung. Erhaltene Dateien beweisen weder unauthentifizierten Zugriff noch eine funktionierende Materialübergabe.

ResolveProviderPlan(snapshot, consumers, inventoryComplete) delegiert jeden aktiven Verbraucher an ResolveFootprint und vereinigt seine gesamte Dependency- Closure. ConsumerIntent projiziert einen bestehenden App- oder unabhängigen Management-Owner: Key, Active, Manifest, Preferences, DependencyRoots. Inaktive Einträge behalten die Identität und geben Bindings frei. Der Aufrufer beweist die vollständige Target-Inventarisierung aus bestehenden autoritativen Ownern. Nicht zugeordnete Bindings oder unverifizierbare Facts machen den Plan unvollständig. Automatische Konvergenz erhält dann Ressourcen; absichtliche Änderungen nutzen die konkrete Folgenanalyse und Bestätigung unten.

Bei einer unterbrochenen bestehenden Bereitstellung darf ConsumerIntent.RetainedIntents kanonische angewendete/ausstehende Manifeste unter DERSELBEN aktiven systemeigenen App-ID und Umgebung projizieren. Jedes nutzt das bestehende ResolveFootprint und relevante ausdrückliche Präferenzen; Anforderungen und Provider-/Dependency-Closure werden zu einem Verbraucher zusammengeführt. Erhaltene Capability-Bindings werden nicht freigegeben, nur weil das gewünschte Manifest sie nicht mehr anfordert. Runtime-Roots allein erhalten diese Bindings nicht. Der Adapter liefert die beobachtete Dependency-Root-Union aller kanonischen Projektionen einschließlich Runtime-Berechtigungen/Consumption. Abweichende oder fehlende Owner sowie inaktive erhaltene Projektionen sind ungültig; unbekannte erhaltene Anforderungen machen das Inventar unvollständig. Erst der verifizierte Lifecycle-Abschluss entfernt die erhaltene Projektion und erlaubt die normale Konvergenz nach dem letzten Verbraucher. Keine neue Identität, gespeicherte Manifest-Authority oder Provider-Auflösung wird eingeführt.

baseharbor.provider-plan/v1 enthält Verbraucher-Footprints, benötigte Provider- IDs, freizugebende Bindings und Änderungen mit Ownership-/Evidenznachweis:

Aktion Bedeutung
add Ausgewählte neu benötigte Realisierung materialisieren
reuse Von App, Management-Verbraucher oder Dependency benötigte Realisierung erhalten
restart Benötigte eigene gestoppte Runtime reaktivieren
stop Eigene laufende Runtime nach Freigabe durch den letzten Verbraucher stoppen
remove-runtime Unnötige eigene gestoppte Runtime entfernen; persistente Daten erhalten
preserve External/BYO, fremd/unverifizierbar oder unvollständiges Inventar; niemals implizit löschen

Alle Änderungen tragen PreserveData=true. Pläne erlauben keinen direkten Runtime-Eingriff. Session 2 verwendet sie im bestehenden plan -> preflight -> confirm -> apply -> verify. Daten-/Recovery-Elemente einzeln mit Grund erhalten; Löschung benötigt explizite destruktive Zustimmung und Ownership-Nachweis. Automatische Konvergenz erhält weiterhin verwendete Shared- Ressourcen; absichtliche eigene Entfernung nennt sämtliche betroffenen Verbraucher. Fremde/externe Infrastruktur wird niemals gelöscht. Wiederholtes Apply, unterbrochener Retry und Deaktivieren/ Reaktivieren konvergieren idempotent. Capability-Entfernung gehört zu v0.4.25.

Human-CLI, JSON und MCP verwenden dieselben Domain-Ergebnisse und vorhandene Machine-Fehler-/Exit-/Autorisierungszuordnung. ResolutionError bleibt typisiert. Fixtures: internal/application/testdata/v0425-resolution.json; Union-Invarianten: internal/application/provider_union_test.go. Vollständiger Provider-/Capability- Wizard: v0.4.26. #777-Profile-/Host-Verträge unten bleiben reine Spezifikation.

Provider-Wechsel: Folgen und Entwicklerentscheidung

Entwickler dürfen Funktionen hinzufügen, ändern, ersetzen, deaktivieren und entfernen, auch ohne Fortführung oder mit vollständiger Löschung. Fehlende Alternativen sind offengelegte Folgen, kein dauerhaftes Verbot. Alternativlose, unbekannte oder destruktive Ergebnisse zeigen Achtung und benötigen zwei unabhängige ausdrückliche Bestätigungen des konkreten aktuellen Plans. Datenlöschung benötigt zusätzlich die bestehende getrennte destruktive Freigabe. Normale Apply-Zustimmung bestätigt weder beide Stufen noch implizit Datenlöschung.

DescribeProviderChanges(snapshot, union, requests, observation) ergänzt dieselbe aufgelöste Verbraucherunion. Keine zweite Provider-Auflösung und keine Änderungen am State. Adapter direkter Provider-Operationen und App-/Target-Lifecycles projizieren ihre Aufträge in diese API. ProviderPlan.Impact trägt das optionale gemeinsame Ergebnis baseharbor.provider-impact/v1; CLI, JSON/MCP und späterer Wizard verwenden es unverändert. Ausführung erfolgt durch bestehende plan/preflight/confirmation/apply/verify-Autoritäten.

Domain-Ergebnis Verbindliche Bedeutung
before / after Tatsächlicher Provider-Typ/Instanz, Target, Scope/Owner, Orte und sichere Zugriffs-/Security-Referenzen; vorgeschlagenes After ist kein Ausführungsnachweis
dependencies / dependents / functions Betroffene Apps und unabhängige Management-/Console-Verbraucher; transitiver Dependency-Pfad, notwendiger/optionaler Bedarf, verlorene/geänderte/erhaltene Funktion und beobachtetes Ablauf-/Validierungsverhalten
scenario Capability nicht mehr benötigt; Provider trotz verbleibendem Bedarf entfernt; Ersatz; Provider weiterhin von anderem Verbraucher verwendet; ungenutzter Provider
materials Einzelnes aktuelles Material und Ort, Recovery-Referenzen, geplantes retained/transferred/deleted/revoked/expired/invalidated/nonrecoverable/unknown-Ergebnis und Ziel/Zugriff
prerequisites Konkrete Übergabe, Rebind oder adapterspezifische Verifikation, Unterstützung/Nachweis und Folge fehlender Verifikation; kein erfundener Fallback
effects Tatsächlich relevante Vorher-/Nachher-Änderungen bei Verfügbarkeit, Konsistenz, Dauerhaftigkeit, Aufbewahrung, Protokoll, Policy/TLS/HA, Zustellung, Routing, Wiederverbindung oder Recovery aus dem Adapter
complete Vollständigkeit des Wissens; false benötigt Achtung/zwei Bestätigungen und verbietet die informierte Entscheidung nicht
plan_id / revision Deterministischer Hash aus Folgen, relevantem Binding-/Ownership-/Dependency-State und Revision bestehender Owner; wesentliche Änderungen entwerten alte Zustimmung
confirmations_required / destructive Eine normale Stufe oder zwei für alternativlose/unbekannte/destruktive Folgen; explizite Datenlöschung bleibt getrennt

ProviderPlan.ConsumerActivity enthält auch explizit inaktive Verbraucher aus denselben Intents; vergangene Runtime-Nutzung wird nicht als aktueller Bedarf interpretiert. Nur Mengen-Messrauschen entwertet unveränderte Folgen nicht.

ProviderImpactObservation projiziert bestehende Installation-, Deployment-, Runtime-, Registry-, Credential-, Zertifikats- und Recovery-Owner nur vorübergehend. IntegrationDescriptor.ChangeContract() beschreibt Funktionen, Material- und Betriebsinventar des ausgelieferten Providers. ReferenceIntegrations() iterieren; keine zweite Provider-Registry oder feste Produkt-Warnliste. Unbekannte Extension- Verträge und fehlende Beobachtungen bleiben sichtbar unbekannt. Sie werden niemals pauschal als sicher oder erfolgreich fortgeführt dargestellt.

Verbraucherspezifische Continuations beweisen unterstützten Ersatz und verifiziertes Rebind. Ein laufender kompatibler Ersatz allein genügt nicht. Sichere Übergabe/Zugriff verifizieren, bevor Fortführung behauptet oder die alte Realisierung entfernt wird. Ohne Übergabe darf der Entwickler stattdessen den Funktionsverlust zweimal bestätigen und die Entfernung ausführen. Erhaltener, nicht zugänglicher Speicher ist Recovery, keine Secret-Auslieferung, Token-Vergabe oder Zertifikatserneuerung. Keine Secrets in Klartext-Manifeste, Repositories, Logs oder erfundene Ersatzspeicher schreiben. Absichtliches Entfernen benötigter Authentifizierung zeigt betroffenen Dienst/Zugriff als nicht verfügbar; es aktiviert niemals stillschweigend unauthentifiziertes Management.

Nur tatsächliche OpenBao-Nutzung erzeugt Folgen für Secret-Policies, dynamische Credentials oder PKI. Lease-Ablauf/Widerruf und Downstream-Gültigkeit benötigen Nachweise; exportierte Credentials beweisen keine Fortführung. Aktuelle Token-/ Zertifikatsgültigkeit unterscheidet sich von künftiger Vergabe, Erneuerung, JWKS-Refresh, Sessions und Widerruf. Beobachtete Offline-Validierung mit Ablauf kann geänderte statt sofort nicht verfügbare Validierung bedeuten. Keine pauschal sofort ungültigen Tokens/Zertifikate erfinden. Caches, Jobs, Sessions, Queues und Telemetriepuffer sind nicht automatisch entbehrlich. Unbekannte Aufbewahrung/Orte bleiben unbekannt. Erhaltenes Material bleibt am tatsächlichen Ort; gelöschtes Material bedeutet kein Ziel; Löschung. Bestehende Owner beweisen Ownership und autorisierte Referenzen. Zwei Bestätigungen geben keine Rechte auf fremde externe Ressourcen.

Mehrere Änderungen bilden einen Gesamtplan. Entfernung einer Dependency des Ersatzproviders entwertet seine Fortführung; SQL-Stop nennt abhängige Identity-/ Broker-Funktionen. Verbraucherbezogenes Unbind erhält die Runtime anderer Verbraucher und nennt den verlorenen Zugriff. Automatische Konvergenz nach dem letzten Verbraucher erhält Daten; explizite vollständige Löschung inventarisiert vor Zustimmung jedes betroffene Element.

ValidateProviderChangeConsent prüft beide Stufen, aktuellen Plan-Hash und getrennte Löschfreigabe. Bestehende interaktive/nichtinteraktive Autoritätsadapter erheben die Bestätigungen; der interaktive Adapter fragt nach den erforderlichen Planbestätigungen gesondert nach der Datenlöschung. Ablehnung oder EOF erteilen keine Löschfreigabe. Maschinenzustimmung setzt delete_data unabhängig. Keine zusätzlichen CLI-Flags oder unabhängige Frontend-Policy. Unmittelbar vor Änderungen aus aktuellen autoritativen Beobachtungen neu planen. Veraltete Pläne erneut anzeigen und bestätigen. Technisch nicht unterstützte Übergabe ehrlich melden, niemals als erfolgreiche Verlagerung darstellen.

RecordProviderChangeResult übernimmt tatsächliche verifizierte Ausführungs- ergebnisse, meldet complete/partial/failed, echte Endorte und ausstehende Schritte. Betroffene Funktionen benötigen eigene Verbraucher-/Root-/Funktionsverifikation und Nachweise; ein Runtime-Stop allein beweist keine Login-/Lease-/PKI-Folgen. Vorgeschlagenes After niemals als erledigt übernehmen. Fehlendes Material, abweichende Behandlung oder fehlender Recovery-Nachweis bleibt Teilfehler. PendingProviderChanges behält den ursprünglichen Verbraucherscope und liefert nur unerledigte Operationen/Materialaktionen an den bestehenden idempotenten Replan-/Retry-Lifecycle. Kein Scheduler, kein neuer State-Owner. Unterbrochene Übergabe, Rollback/Wiederverbindung und irreversible Folgen bleiben sichtbar.

Globale Registrierungsänderungen über mehrere Targets

Eine globale External-Provider-Registrierung verwendet ihren bestehenden Registrierungsowner, keinen erfundenen Runtime-Target. ComposeProviderImpactScope führt unveränderte ProviderImpactPlan-Ergebnisse aller beobachteten Targets zusammen. Der Adapter inventarisiert konfigurierte und erhaltene Target-States, angewandte und unterbrochene Deployment-Bindings sowie unabhängige Management-Verbraucher, bevor er den Umfang als vollständig ausweist. Diese Projektion führt keine neue Auflösung durch und erzeugt keinen weiteren State-Owner.

Die gemeinsame PlanID bindet Registrierungsowner/-Revision, sämtliche Target-Pläne und deren tatsächliche Folgen. Eine einzelne Target-Bestätigung autorisiert nicht den gesamten Umfang; geänderte Registrierung, Target-Mitgliedschaft, Bindings oder Folgen benötigen neue Zustimmung. Countdown-Messwerte allein entwerten unveränderte absolute Gültigkeiten nicht. Unbekannter/unvollständiger oder destruktiver Umfang zeigt Achtung und verwendet dieselben zwei Bestätigungen sowie die gesonderte Löschzustimmung wie Änderungen eines einzelnen Targets.

RecordProviderImpactScopeResult prüft die Ausführung jedes Targets über die bestehende Ergebnisautorität. Das Löschen des Registrierungseintrags allein belegt keine Verbraucherkonfiguration oder vollständigen Erfolg auf allen Targets. Fehlende/unbekannte Owner- oder Target-Nachweise bleiben teilweise; erhaltene Registrierung/Ownership ermöglicht neue Planung und Wiederaufnahme. Externe Infrastruktur, Daten und Credentials bleiben außerhalb der lokalen Registrierungsentfernungsautorität. Der Runtime-/Transportadapter muss jede gewählte Operation weiterhin beobachten, autorisieren, erneut prüfen, ausführen und verifizieren.

Bestehende Ancillary-Realisierungen

ResolutionSnapshot.Ancillary beobachtet bestehende Gateway-/Sidecar-Realisierungen aus Runtime-/Routenownern. ProviderFact.Ancillary und OwnerReference kennzeichnen sie; ProviderFootprint und Impact-Realisierungen erhalten diese Unterscheidung. Das ist ein vorübergehendes Inventar neben der bestehenden Registry, keine zweite Registrierung oder State-Autorität. Ancillary-Provider.Capabilities ist leer: Automatic bietet sie nicht als App-Provider an; explizite Capability-Auswahl ist inkompatibel. Dieselbe Dependency-Closure übernimmt ihre tatsächlichen IDs nur aus verifizierten Provider-Dependencies oder Verbraucherroots. Dieselbe Union erfasst Shared-Nutzer, eigene Entfernung, unbekannten State und Folgen. Kein verpflichtendes Sidecar-/Core-Paket.

Ein Target-eigener Shared-Gateway verwendet seinen tatsächlichen bestehenden Installation-/Routenowner ohne erfundene Application-UUID. Er behauptet keine allgemeine Shared-Platzierung der auswählbaren Caddy-Integration. App-Sidecars behalten ihre tatsächliche systemeigene App-ID. Der native Executor verwendet Shared-Scope und seinen einzigen bestehenden Target-Projektowner (RuntimeExecutorDependency); alle App-/Management-Roots referenzieren dieselbe physische ID. Er gehört nie einer einzelnen App und wird nicht über getrennte App-Aliase mehrfach gezählt. Der Broker je App verwendet Application-Scope.

Gewöhnliche deklarierte Workload-Komponenten erhalten eigene Ancillary-Metadaten runtime-workload (RuntimeWorkloadDependency), auch bei Apps ohne Capabilities. Sie sind keine privilegierten Executor und keine auswählbaren Capability-Provider. Tatsächlicher Betrieb/Zugriff, laufende Arbeit, Konfiguration und Volume-Folgen benötigen Beobachtungen; ein passendes Projektlabel autorisiert keine undeklarierte Komponente. Broker-/Executor-Metadaten beschreiben tatsächliche Autorisierungs-/Credential-, Ausführungs-/Steuerungs- und In-flight-Folgen; Nutzung benötigt weiterhin Beobachtungen.

Abdeckung ausgelieferter Provider

Die Tabelle inventarisiert die deklarative Abdeckung. Adapter liefern tatsächliche Daten-/Zugriffsorte und Nutzung; Materialarten sind mögliche Inventarkategorien, keine Behauptung, dass jede Instanz alles enthält. Runtime-Einstiegspunkte und native Abnahme gehören zu den konsumierenden Lifecycle-Tests. Bestehende runtime-broker/runtime-executor-Sidecars besitzen ausschließlich Ancillary-Folgenmetadaten, keine auswählbare Capability-Integration. Unbekannte Extensions bleiben unbekannt.

Registrierter Provider Relevante Funktionen/Materialinventar Autorität für Orte/Zugriff und konkrete Folgen
PostgreSQL Transaktionen/Abfragen; Datenbank, Schemas, WAL, Credentials, Backups Bestehende Datenbank-/Runtime-/Recovery-Owner; Transaktionen, Konsistenz, Dauerhaftigkeit, Reconnect und Recovery
Valkey Cache/durable KV, tatsächliche Sessions/Jobs; Snapshots/AOF Bestehende Runtime-/Daten-Owner; Ablauf/Eviction, Dauerhaftigkeit und relevanter flüchtiger Verlust
OpenBao Tatsächliche Secret-/Policy-, Lease-/PKI-Nutzung; Secrets, Schlüssel/Zertifikate, Recovery Bestehende Credential-/OpenBao-/PKI-Owner und gewählter Backing Store; sichere Auslieferung, Erneuerung, Widerruf und Ablauf
Caddy HTTP-Routing und tatsächliche TLS-/Erneuerungsnutzung; Routen/Konfiguration, Schlüssel/Zertifikate Bestehende Exposure-/PKI-/Runtime-Owner; DNS/Routen, HTTPS-Verfügbarkeit und künftige Erneuerung
SeaweedFS Objektlesen/-schreiben; Objekte/Dateien, Metadaten, Credentials, Backups Bestehende S3-/Runtime-/Recovery-Owner; Dauerhaftigkeit, S3-Kompatibilität, Rechte und Aufbewahrung
OpenTelemetry Collector Empfang/Weiterleitung; tatsächliche Puffer/Konfiguration Bestehende Telemetrie-/Runtime-Owner; Zustellungslücken, Pufferverlust, Routing und Aufbewahrung
External OTLP Tatsächlicher Empfang/Weiterleitung und registrierte Referenzen Externer Registrierungs-/Zugriffsowner; nur Unbind-/Rebind-Folgen, keine Löschung fremder Infrastruktur
Prometheus Ingest/Query und tatsächliche Regeln; Metriken, WAL, Konfiguration Bestehende Metrik-/Runtime-/Daten-Owner; Scrape-Lücken, Aufbewahrung, Abfragezugriff und Recovery
Loki Ingest/Query; Logs, WAL/Index, Konfiguration Bestehende Log-/Runtime-/Storage-Owner; Zustellungslücken, Aufbewahrung und Abfragezugriff
Tempo Ingest/Query; Traces, WAL/Index, Konfiguration Bestehende Trace-/Runtime-/Storage-Owner; Zustellungslücken, Aufbewahrung und Abfragezugriff
Keycloak Tatsächliches Login/SSO, Vergabe/Validierung/JWKS, Sessions/Refresh; Benutzer/Realms/Clients/Signierschlüssel/Tokens Bestehende Identity-/Datenbank-/Zugriffsowner; Login/Refresh, gecachte Gültigkeit und authentifizierte Management-Verfügbarkeit
External OIDC Tatsächliche OIDC-Verbraucher und registrierte Referenzen Externer Registrierungs-/Zugriffsowner; lokale Binding-Entfernung, keine Löschung fremder Benutzer/Realms
RabbitMQ Tatsächliche Queue-/PubSub-/Stream-Nutzung; Nachrichten/In-flight, Offsets/Topologie/Credentials Bestehende Messaging-/Runtime-/Storage-Owner; Reihenfolge, Acknowledgements, Zustellung, Dauerhaftigkeit und Reconnect
Ancillary Runtime-Broker Tatsächliche Autorisierung/Credentials/Policy; Konfiguration, Zertifikate/Recovery Bestehende Broker-/Runtime-/Credential-Owner; Autorisierung, Erneuerung, TLS und Verfügbarkeit
Ancillary Runtime-Workload Tatsächlicher Komponentenbetrieb/-zugriff; In-flight/Konfiguration und Volumes Bestehender App-/Deployment-Owner; Ausfall/Reconnect und beobachteter Materialerhalt, keine privilegierte Executor-Autorität
Ancillary Runtime-Executor Tatsächliches Execute/Observe/Control; In-flight/Konfiguration, Zertifikate/Credentials Bestehende Executor-/Runtime-Owner; In-flight-Arbeit, Autorisierung/TLS und Reconnect
MongoDB Lesen/Schreiben/Transaktionen; Dokumente/Indizes/Oplog, Credentials/Backups Bestehende Document-/Runtime-/Storage-/Recovery-Owner; Konsistenz, Dauerhaftigkeit, Protokoll und Reconnect

Fixtures: internal/application/testdata/v0425-provider-impact.json und v0425-provider-impact-consent.json. Domain-Tests umfassen jeden registrierten Provider, negative Ownership/unbekannten State, Provider-Kaskaden und zwei Apps/ Console, Ersatzverifikation, gemeinsame Dependency-Entfernung, begrenzten Retry, tatsächliche finale und teilweise Ergebnisse. Offline-Schemas prüfen identische Machine-Ergebnisse und lehnen Secret-Inhalte sowie einstufige unbekannte/ destruktive Bestätigung ab. Vollständiger Capability-/Provider-Wizard: v0.4.26.

Abgeleitete Verbraucheraktionen und Lifecycle-Abdeckung

Die Lifecycle-Matrix prüft alle deklarierten Funktionen und Materialarten aller vierzehn Referenzintegrationen für Hinzufügen/Reaktivieren/Update, Stoppen, Zerstören, Runtime-Entfernung, Deaktivieren/Entbinden, Neubinden und Ersetzen. Fremde Runtime-Mutationen werden mangels Ressourcenberechtigung zurückgewiesen; ein bewusst gewählter lokaler Zugriffsverlust bleibt möglich. Deklarationstests ersetzen keine native Ausführungsabnahme.

ProviderImpactObservation.ConsumerActions bildet unterstützte Operationen des bestehenden Verbraucheradapters ab. ProviderChangeRequest.ConsumerActions wählt deren IDs ausdrücklich aus. Jede Aktion benennt Verbraucher/Wurzel/Funktion, tatsächliche Modi, gewähltes Funktionsergebnis, Abhängigkeiten, Credential-Referenzen und Standorte sowie Credential-Owner, Synchronisierung und Rotation vorher/nachher. Ein nicht ausgewählter lokaler Authentifizierungsmodus wird niemals zum Fallback. Nicht unterstützte oder ungeprüfte Aktionen bleiben unbekannt und dürfen explizit akzeptiert werden; sie werden niemals als funktionierend gemeldet. Abhängigkeiten gewählter Aktionen werden im bestehenden transitiven Providergraphen auf dem tatsächlichen Target geprüft. Gestoppte, entfernte, fremde, unbeobachtete oder zyklische Voraussetzungen sowie unbekannte Abhängigkeitsketten machen die Fortsetzung unbekannt, auch wenn der direkt benannte Provider läuft. Aggregierte Änderungen dürfen keine Fortsetzung über eine unterbrochene Abhängigkeit behaupten. Ersatzprovider nutzen dieselbe Prüfung für ihre gesamte Abhängigkeitskette. Jeder Knoten muss auf dem gewählten Target registriert oder kanonisch ergänzend, als laufend beobachtet, unterstützt und mit Realisierungsevidenz geprüft sein. Ein laufender Fakt ohne diese Beobachtung reicht nicht. Geplantes Hinzufügen oder Reaktivieren beweist keine ausgeführte Verfügbarkeit. Nach tatsächlicher Wiederherstellung werden die Beobachtung und die Planbestätigung erneuert. Ungeprüfter Ersatz bleibt teilweise und darf mit den erforderlichen Bestätigungen weiterhin bewusst akzeptiert werden. Credential-Referenzen bleiben gleich, sofern ihre Änderung nicht ausdrücklich gewählt wurde. Adapter prüfen zusätzlich, dass erhaltene Werte und tatsächlich bestehende Synchronisierung konsistent bleiben; dieses reine Ergebnis liest oder erzeugt keine Passwörter. OIDC-Ownership ist von nativen Datenbank-/Service-Zugangsdaten getrennt. Prometheus nutzt beispielsweise bestehende devaccess-Zugangsdaten und native Basic-Authentifizierung; SeaweedFS erhält native Admin-Referenzen beim bestehenden geschützten Runtime-Owner. Identity-Entfernung setzt diese nicht zurück.

ObservedAt und tatsächliche ValidUntil/ExpiresAt ergeben remaining_validity_seconds für Token, Zertifikate und Leases. Fehlende aktuelle Gültigkeitsevidenz bleibt unbekannt; abgelaufene Offline-Validierung ist nicht verfügbar. Erhaltene Zertifikatsdateien bedeuten weder unbegrenztes TLS noch künftige Erneuerung.

Geschützte X.509-Dateien liefern valid_from und expires_at aus den geparsten Zertifikaten. Bei Bundles gelten der späteste Beginn und das früheste Ablaufdatum aller Zertifikate, auch wenn zuerst ein Schlüsselblock steht. Die aktuelle Beobachtung unterscheidet noch nicht gültiges, innerhalb des Zeitfensters liegendes und abgelaufenes Material. Dies belegt nur die Zeitgrenzen; Trust-Kette, Widerruf, Endpunktzugriff und künftige Erneuerung benötigen tatsächliche Prüfungen. Schlüsselinhalte und Zertifikats-Subjects werden nicht ausgegeben. Der Zustimmungs-Digest ignoriert nur den laufenden Restgültigkeits-Countdown; absolute Ablaufzeit, tatsächlich abgelaufene/gültige Folgen und geändertes Material erfordern weiterhin neue Zustimmung. ProviderMaterial.Retention prüft getrennt das Überleben von Stoppen und Runtime-Entfernung für bedeutsamen flüchtigen Zustand: Cache, Sessions, Jobs, Queues/Nachrichten, laufende Arbeit, Telemetriepuffer, Leases und Token. Ein Volume allein reicht nicht; nachgewiesener Verlust ist einzeln nicht wiederherstellbar und benötigt destruktive Zustimmung.

Tatsächliche Ausführungsergebnisse müssen jede betroffene Funktion, ausgewählte Verbraucheraktion und betriebliche Auswirkung belegen. Fehlende Umkonfiguration oder abweichende Owner, Credential-Referenzen, Synchronisierung, Rotation oder Garantien bleiben teilweise/fehlgeschlagen. Wiederholung erhält gewählte Aktionen und holt Zustimmung zum aktuellen Plan ein. Ein Materialschritt gilt bei Wiederholung erst als erledigt, wenn geprüfte Disposition, Endstandort, Zustellungs-/Zugriffsreferenzen und erhaltene Recovery-Referenzen übereinstimmen; das richtige Ziel allein verdeckt keine unvollständige sichere Übergabe. Abschlussbelege und Wiederholungsausschluss verwenden dieselben Materialprüfungen. Eine unbekannte Materialdisposition bleibt unerledigt, auch wenn der Adapter diese Unsicherheit bestätigt; die Zustimmung zur Änderung belegt keinen Materialabschluss. Bei unvollständigem maßgeblichem Inventar bleibt das Gesamtergebnis teilweise, auch wenn keine bekannte Operation mehr offen ist. Geprüfte Einzelschritte bleiben ausgeführt und werden nicht wiederholt; der bestehende Lebenszyklus muss das unbekannte Inventar neu beobachten und planen, bevor er den Gesamtabschluss belegt. Recovery-Referenzen folgen ausdrücklich gewählten eigenen Backup-Übergaben oder -Löschungen im aggregierten Plan. Eine vollständige eigene Löschung darf inventarisierte Backups mit destruktiver Zustimmung einschließen; nicht gewählte oder fremde Recovery-Ressourcen bleiben geschützt.

Provider und bestehende Implementierungsautorität Erforderliche providerspezifische Analyse/Aktionen bei Hinzufügen/Ändern/Entfernen
PostgreSQL — application/runtime_postgres.go, shared_postgres_* Tatsächliche SQL-Verbraucher und Identity-/Backing-Store-Abhängige; Bereitstellung/Binding und Zugriff prüfen; Version/Protokoll/Transaktionen/WAL/Backup-Konsistenz; abhängige Verbraucher nach gewähltem Restore/Ersatz neu verbinden; erhaltene Datenbank von verlorenem Endpunkt unterscheiden
Valkey — application/shared_core_valkey.go, valkey_stable_verify.go, valkey_ha*, valkey_credential_rotation* Persistenz/AOF/Snapshot gegenüber Cache-/Session-/Job-Semantik; Zugriff und tatsächliche Ablaufzeiten prüfen; Clients neu binden, Credentials erhalten; In-Memory-Sessions/Jobs nicht als erhaltenes Volume behandeln
OpenBao — openbao/managed_credentials.go, service_pki*, runtime_pki*, dynamische App-Secret-Operationen Tatsächliche KV-/Policy-/Lease-/PKI-Verbraucher und SQL-Backing erfassen; gewählte sichere Zustellungsübergabe mit Berechtigungs-/Verschlüsselungsprüfung; Credentials bewusst erhalten/widerrufen; Zertifikats-/Schlüsselstandorte, Restgültigkeit, Erneuerungs-/Widerrufsabhängigkeiten; gewählte Verbraucher vor Abbau umkonfigurieren
Keycloak — identityprovider/keycloak_files.go, keycloak_driver.go, application/identity_binding.go Tatsächliche Shared-SQL-/Gateway-/OIDC-Verbraucher; Realm-/Client-/Schlüssel-/Session-Inventar; unterstützte Login-Umkonfiguration und Zugriff prüfen; Offline-Token-Gültigkeit von JWKS/Refresh/Ausstellung trennen; separat verwaltete native Service-Credentials erhalten
External OIDC — externe Realisierung in identityprovider und bestehender Registrierungs-/Binding-Owner Issuer/Discovery/Client-Kompatibilität und gewählte Verbrauchermodi prüfen; nur lokale Bindings entfernen; keine Berechtigung über fremde Konten, Sessions oder Signaturschlüssel
Caddy — devgateway/render.go, App-Exposure-/PKI-Owner Tatsächliche App-/Shared-Routen-Verbraucher, DNS/Endpunkte, Zertifikats-/Schlüsselreferenzen und Renewal-Owner; gewählte Routen/TLS/Auth-Zugriffe prüfen; erhaltene Gültigkeit von Provider-Erneuerung trennen; andere Routen erhalten
SeaweedFS — objectstorage/admin_credentials.go, pki_rotation.go, Provider-Realisierung Tatsächliche Objekte/Dateien/Metadaten und S3-Verbraucher; Konsistenz/Dauerhaftigkeit/Berechtigungen und gewählte Übergabe; native Admin-/Client-Credentials erhalten; TLS-Reload, Endpunkt-Neubindung und Objektzugriff prüfen
RabbitMQ — application/rabbitmq_credentials.go, rabbitmq_ha*, Credential-Rotation/-Prüfung Tatsächliche Queues/Streams/Topologie, Offsets, unbestätigte Nachrichten und Jobs; Reihenfolge/Zustellung/Bestätigung sowie dauerhafter/flüchtiger Zustand; getrennte App-/Admin-Konten erhalten; nach Änderung neu verbinden und Publish/Consume prüfen
MongoDB — application/mongodb_runtime.go, mongodb_ha*, Credential-Rotation/-Prüfung Tatsächliche Dokumente/Indizes/Oplog und Clients; Protokoll/Transaktionen/Konsistenz/Dauerhaftigkeit; Credentials erhalten, Clients neu binden und Lesen/Schreiben sowie gewählte Wiederherstellung prüfen
OTel Collector — Realisierung in telemetry, App-Telemetrie-Binding und PKI-Reload Tatsächliche Empfangs-/Weiterleitungsziele, Puffer und TLS-Referenzen; Zustellungslücken/Rückstau oder unwiederbringliche Pufferverluste; Routing konfigurieren und prüfen, bevor Downstream-Zustellung behauptet wird
External OTLP — registrierter Endpunkt und Telemetrie-Binding-Owner Protokoll/TLS/Auth und gewählter Weiterleitungsendpunkt; Neubindung/Zustellung prüfen; Lücken benennen; keine Mutation/Löschung fremder Puffer/Stores
Prometheus — metrics/prometheus_files.go, prometheus_shared.go, Topologie-/Recovery-Owner Tatsächliche Scrape-/Query-/Rule-Verbraucher, TSDB/WAL und Aufbewahrung; native Basic-Auth-Credentials unabhängig von Identity erhalten; Konfiguration/Auth/Query-Zugriff prüfen; Scrape-Lücken und verlorene Alerts benennen
Loki — logs/render.go, Topologie-/PKI-Reload-Owner Tatsächliche Log-Zustellungs-/Query-Verbraucher, Store/Index/WAL, Labels/Protokoll/Aufbewahrung; Writer/Reader neu binden, Zugriff/TLS prüfen; Log-Lücken und erhaltene, aber unzugängliche Historie benennen
Tempo — traces/tempo_ha.go, Topologie-/PKI-Reload-Owner Tatsächliche Trace-Ingest-/Query-Verbraucher, Puffer/Store/Index/Aufbewahrung; Zustellungs-/Query-Routen neu binden und TLS/Zugriff prüfen; Sampling-/Zustellungslücken von gelöschter Historie trennen
Begleitende Broker/Executor — runtimebroker/compose_render.go, bestehende Executor-/Runtime-Owner Tatsächliche Policy-/Service-Credential-/Zertifikats- und laufende Control-/Work-Verbraucher; Auth-/Ablauf-/Renewal-Abhängigkeiten; gewählte Wiederverbindung/Control-Operation prüfen; Sidecars nicht als neue Capability-Angebote registrieren

Derselbe Abhängigkeitsgraph trägt Datenbank-, Gateway-, Secret-/PKI- und Authentifizierungsänderungen zu allen tatsächlichen direkten und transitiven Verbrauchern. Abhängigkeiten gewählter Übergänge werden gegen aggregierte Änderungen geprüft: Die Entfernung einer Abhängigkeit des neuen Modus darf nicht als funktionierende Fortsetzung erscheinen. Runtime-Mutationspfadinventar und native Nachweise dieser Aktionen gehören zur Abnahmeverantwortung von Session 2.

#777 portabler Connection-Profile-Transport (nur Vertrag)

Dies ist eine Import-/Export-Transporthülle für die spätere #777-Implementierung, kein Ersatz für development.StackProfile (development/v1), Target-Config, Access-Store oder Provider-Registry. Diese Spezifikation liefert weder Implementierung noch Dateierzeugung oder Onboarding-Oberfläche.

Feld der Hülle Vertrag
version Exakt baseharbor.connection-profile/v1; unbekannte Version ablehnen
name Anzeigename; niemals Identität oder Berechtigungsnachweis
core.installation_id / core.url Bestehende Core-UUID und HTTPS-Management-Endpunkt; Serveridentität prüfen
trust.ca_pem / trust.sha256 Ein öffentliches PEM-CA-Zertifikat und sein DER-SHA-256-Fingerprint; Übereinstimmung prüfen und unabhängige autorisierte Trust-Entscheidung verlangen
targets Portable Deskriptoren: name, tenant_id, runtime_provider, scope; bestehende Target-Semantik erhalten
access OIDC issuer, client_id und scopes; kein importierter Berechtigungsnachweis
expires_at Optionale Transportablaufzeit; abgelaufenes Enrollment-Material ablehnen
extensions Namespaced optionale spätere Felder; keine Änderung bestehender Pflichtsemantik

Der Transport beschreibt Core, Trust und gewählte Targets. Er enthält weder App-Absicht noch Provider-Credentials oder einen neuen autoritativen State. Targets referenzieren gegebenenfalls einen Core; Profile sind keine Targets und führen dev/prod-Installationen nicht zusammen. Core-loser Lokalbetrieb benötigt keinen Profile-Import.

Passwörter, private Schlüssel, Refresh-/Access-Tokens, AppRole-Secrets, Recovery-Material, lokale Sockets/Engine-Kontexte, Checkout-Pfade und State-Roots ausschließen. Auth-/Enrollment-Artefakte werden nach explizitem Login/Enrollment in vorhandenen geschützten Access-Ownern gespeichert. Deskriptor-Import darf keine Rolle erteilen, fremde Deployments übernehmen, beliebige Endpunkte aktivieren oder Ressourcen starten. Importierter öffentlicher Trust autorisiert einen Server nicht selbst. Vor Schreiben bestehender Config-/Access-Owner Core-UUID, HTTPS, Issuer, Tenant und gewähltes Target prüfen.

Import: parse -> validate -> Referenzen/Konflikte auflösen -> Diff zeigen -> explizite Autorisierung -> bestehende Owner-Transaktion -> verifizieren. Gleiche Identität/Inhalte sind idempotent; gleicher Alias mit anderer Identität ist ein Konflikt. Teiländerungen zurückrollen oder als unvollständig mit Recovery-Aktion anzeigen, niemals Erfolg melden. Export ist lesend und erhält portable Identität ohne Secrets/lokale Felder. Host-lokale Werte nach Import in bestehender lokaler Config auflösen. Die spätere Implementierung benötigt Schema-/Transaktions- Konformität gegen diese Semantik.

Host-Platform-Grenze (nur Vertrag)

Die semantische Grenze baseharbor.host-platform/v1 ist Adapter-Capability- Verhandlung, keine neue Runtime, Registry, Scheduler oder Multi-OS-Implementierung.

Verantwortung Grenze
Plattform-/Feature-Erkennung Host-Facts und supported/unsupported/unverifiable mit Nachweis
Engine-Auswahl Tatsächlicher Endpoint, Kontext und rootless/rootful; kein stiller privilegierter Fallback
Lokale Pfade / Source-Zugriff Host-lokale Zuordnung außerhalb Manifest/Profile; deterministischer Fehler bei fehlender Source
Credential-/Trust-Zugriff Bestehender geschützter Owner und explizite Trust-Änderungen; keine automatische Sicherheitsabschwächung
Browser / PTY / Shell Tatsächliche Unterstützung oder typisierte Nichtverfügbarkeit; Non-TTY/EOF/Cancel erhalten
Runtime-Ausführung Bestehender RuntimeProvider verantwortet Lifecycle und Provider-Verifikation
Enrollment / Remote-Autorität Bestehende Core-/Node-Autorität und mTLS; lokaler Host-Adapter erzeugt keine Remote-Autorität

Linux-, WSL2- und Darwin-Implementierungen folgen später. Adapter melden echte Unterstützung, statt Erfolg nicht unterstützter Operationen vorzutäuschen. Host-Pfade, Sockets und Plattform-Defaults verändern weder ApplicationID, Capability-Absicht, Target-Ownership, Footprint-Evidenz noch Machine-Fehler. Kein Host-Probing mit dauerhaften Effekten aus Inspektion/Footprint.

Normative Offline-Schemas: contracts/footprint/v1/footprint.schema.json und contracts/connection-profile/v1/profile.schema.json. Profile-Shape-Validierung beweist weder gültiges CA-Material, Fingerprint-Übereinstimmung, Ablaufzeit, eindeutige Tenants noch Autorisierung; spätere Importer müssen diese Semantik prüfen und nur geprüfte nicht geheime Extensions zulassen.

Lokale Workload-Autorisierung

Die portable Umgebung test oder prod fordert allein kein Operator-OIDC an. Eine tatsächliche lokale CLI-/JSON- oder stdio-Ausführung kann nach Prüfung local-runtime-Autorität für genau eine App-Operation auf einem Target und in einer Umgebung verwenden. Der Adapter beobachtet die ausgewählte lokale Docker-Engine samt Binding oder die native rootless Linux-Podman-info-Auswahl. Diese Autorität ist Ausführungskontext, kein OIDC-Principal, portabler Input oder zusätzlicher Identity-Owner.

Explizite gespeicherte beziehungsweise über die Umgebung gesetzte Operator- OIDC-Policy, eine unabhängig angeforderte Management-Installation einschließlich eines gültigen partiellen Owners, Tenant-Scope, Remote und HTTP behalten ihre bestehende Authentifizierung. HTTP entfernt geerbte lokale Autorität. Unklarer Engine-/Owner-State wird nicht als lokaler Nachweis ausgegeben. Autorisierte App-Operationen dürfen echte Provider-Abhängigkeiten materialisieren; explizite Management-Befehle behalten ihre eigene Autorisierung. Lokale Autorität erteilt keine Provider-Änderungsbestätigung und keinen Consent zur Datenlöschung. Die zwei Bestätigungen des aktuellen Plans bleiben getrennt.

Domain-/Adapter-Negativtests prüfen die Implementierung. Tatsächliche lokale Produktions-CLI- und stdio-Runtime-Abnahme auf dem Kandidaten bleibt erforderlich.

ProviderScopeOwner.destructive markiert die endgültige Löschung des gemeinsamen Owners selbst, einschließlich Installationskonfiguration und State ohne vorhandenen Provider-Teilplan. Das Feld fließt in die Scope-Revision ein und erfordert separate delete_data-Zustimmung zusätzlich zu beiden aktuellen Planbestätigungen. Ohne dieses optionale Feld bleibt die bestehende nicht destruktive Owner-Semantik erhalten.

Frische Ausführungsabhängigkeiten und Credential-Zustellung

ProviderImpact.ContinuationDependencies bindet den ausgewählten Ersatz und Verbraucheraktionen an den bestehenden Target-Graphen einschließlich transitiver Ancillary-Owner. ProviderExecutionOutcome.ContinuationDependencies liefert nach der Ausführung frische Beobachtungen derselben Identitäten und Kanten. Fehlende, gestoppte, nicht unterstützte, ungeprüfte, fremde oder geänderte Owner/Kanten dürfen nicht als abgeschlossene Fortsetzung gemeldet werden. ObserveProviderContinuationDependencies liest bestehende Registry-/Ancillary- Fakten und Beobachtungen; es plant keine Wiederherstellung und erzeugt keinen zusätzlichen Zustandsowner. Ein geänderter Graph verlangt neue Planung/Bestätigung. Fehlgeschlagene Ergebnisnachweise bleiben sichtbar und für den Retry offen.

Native Providerbeobachtungen verlangen, dass alle ausgewählten kanonischen Container vorhanden und laufend sind; bei vorhandenem Healthcheck muss dessen Status gesund sein. Ein laufender HA-Member qualifiziert nicht das gesamte angegebene Modul. Diese Beobachtung belegt nur Prozess-/Health-Inventar, kein Quorum, keinen authentifizierten Zugriff, keine Datenkontinuität und keine Vollständigkeit unbekannter Sidecars.

Kanonische Recovery-Helfer mit eigenem Profil bleiben im vollständigen Eigentumsinventar, sind aber keine dauerhaft benötigten Prozesse. Einmalige Voraussetzungen mit service_completed_successfully und restart: no benötigen einen tatsächlichen erfolgreichen Abschluss statt eines laufenden Zustands. Docker prüft den eigenen beendeten Container; Quadlet kann diesen Nachweis nach dem Entfernen des Containers in seiner aktuellen kanonischen systemd-Unit bewahren. Fehlende, fehlgeschlagene, fremde, veraltete oder überschriebene Abschlussnachweise lassen die Verfügbarkeit ungeprüft. Die Beobachtung startet oder repariert keine Aufgabe; die vollständige Lifecycle-Ressourcenauswahl bleibt erhalten.

Normales Reapply darf fehlende Zugangsdaten einer vorhandenen geschützten nativen Credential-Gruppe nicht neu erzeugen. SQL, Valkey, RabbitMQ, MongoDB und S3, ihre unabhängigen logischen Instanzen sowie unterstützte Management-Zugänge werden vor der Erzeugung initialer Werte geprüft. Vorhandene Runtime-Deklarationen, Binding-Materialien oder erhaltene Gruppenschlüssel unterscheiden die Fortsetzung von einer neuen unabhängigen Gruppe. Unvollständiges erhaltenes Material benötigt Wiederherstellung über seinen ursprünglichen Owner; das fehlgeschlagene Reapply lässt den Owner unverändert und gibt keine Secret-Werte in Diagnosen aus. Neue unabhängige Instanzen und bewusstes Entfernen von Fähigkeiten bleiben möglich. Dieser Schutz belegt keine Live-Authentifizierung, migriert keine Daten und stellt keinen Ersatz-Authentifizierungsmodus bereit.

External-OIDC-Reapply ohne erneut gesetzte Secret-/CA-Eingaben übernimmt geschütztes Material ausschließlich für denselben Provider, Issuer und Client. Es generiert keine Credentials neu, reicht sie nicht an eine andere Autorität weiter und macht aus einem vertraulichen Client nicht stillschweigend einen öffentlichen Client. Eine andere Autorität benötigt ausdrückliches Ersatzmaterial, wenn vertrauliche Credentials/Trust erhalten sind. Nicht unterstützte Credential-/Trust-Entfernung bleibt eine konkrete technische Grenze; ein Public-Client- oder System-Trust- Fallback wird nicht als implementiert behauptet.

Die Identity-Binding-Verifikation vergleicht Client-/Credential-/Trust-Projektionen auf Host und Workload mit den Runtime- und Application-Umgebungsreferenzen. Abweichungen oder veraltete Referenzen schlagen ohne Secret-Werte in Fehlern fehl. Dies belegt konsistente Zustellung, kein Benutzerlogin, keine Token-/Refresh- Gültigkeit, Revocation oder zukünftige Erneuerung. Tatsächliche Zugriffsprüfungen bleiben getrennte Anforderungen.

Teilautorität beim Installationsabbau

Der Installations-Folgenplan enthält jeden ausgewählten App-Reset-Teilplan. Die gemeinsamen Bestätigungen und die separate Datenentscheidung delegieren nur an genau diese destruktiven App-Deployment-Teilpläne nach erneuter Prüfung. Sie autorisieren keine andere Operation, keinen geänderten Owner, keinen nicht angezeigten oder unbekannten Teilplan. Die gemeinsame Revision verwendet fachliche Teilplan-IDs statt laufender Verbrauchsmessungen. Ein fehlgeschlagener Teilplan erhält das betroffene Target und den geschützten Retry-Owner; untere Fallback- oder Target-Cleanup-Pfade dürfen diese Teilautorität nicht umgehen. Native Ausführungsfehler bleiben Teilfehler und benötigen vor einem Retry einen frisch beobachteten Plan und neue Bestätigungen.