Skip to content

BaseHarbor v0.4.14

v0.4.14 completes the shared reconciliation, security and lifecycle semantics required before the v0.5 compatibility freeze.

The release does not implement Kubernetes or OpenShift. It defines runtime-neutral reconciliation behavior that current Compose providers and future runtime/delivery adapters can reuse.

Added

  • Shared internal/reconciliation domain model with typed Desired, Observed, Diff and Ownership state.
  • Typed reconciliation states:
  • missing
  • in_sync
  • drift
  • conflict
  • foreign_ownership
  • unsupported
  • degraded
  • Typed actions:
  • create
  • noop
  • repair
  • destroy
  • observe
  • blocked
  • Optional provider-native observation through the existing capability lifecycle.
  • Provider conformance checks for typed reconciliation and verified convergence.

Lifecycle semantics

The shared lifecycle now follows:

intent
  -> resolve
  -> preflight
  -> observe
  -> diff + ownership decision
  -> mutation only when required
  -> bind
  -> verify
  -> observe again
  -> verified convergence

Existing providers remain compatible. Providers that implement the reconciliation observation interface gain typed state and core-level mutation decisions without introducing a second lifecycle engine.

Security and ownership

  • Conflict, unsupported, degraded and foreign-ownership states fail closed before provider mutation.
  • A BaseHarbor-owned missing resource resolves to create.
  • A BaseHarbor-owned stable resource resolves to a core-level noop; provider mutation is skipped.
  • BaseHarbor-owned drift resolves to repair.
  • External ownership is observe-only.
  • Post-verification observation prevents a lifecycle from reporting success when BaseHarbor-owned state did not actually converge.
  • Ownership-safe destroy remains a core requirement; BaseHarbor must never delete foreign resources.

Compatibility

  • Manifest v1 is unchanged.
  • Provider Integration Contract v1 remains the provider boundary.
  • Existing providers that do not yet expose typed observation retain their previous lifecycle behavior.
  • No Kubernetes/OpenShift fields are added to portable application intent.
  • No Argo CD, Flux or other product-specific delivery mechanism becomes part of the application contract.