Compose Panel docs

ADR 0025 — Declared deployment owner

Status: Accepted

Context

Some stacks are deployed by an external pipeline (a CI job, a deploy script) while remaining ordinary Compose directories that the panel can still operate. An action or edit made from the panel may then be overwritten by the next pipeline deployment. The administrator should see that before acting.

Decision

Add stack.managed-by to the ADR 0023 allow-list of declared service labels. When every service that declares it agrees on one value, the stack detail page shows a "Managed by …" badge and a warning in the Actions card. Conflicting values show no badge; the raw values remain visible under declared metadata.

The label is informational only. It never disables, hides or confirms an action, never changes authorization, and is not a trust signal: anyone who can edit the Compose file can set it. No CI API, no integration-specific code or aliases, no deployment state. Values are bounded and escaped like every other stack.* label.

The badge is only on the detail page, which already reads the declared config. The stack list and the edit page do not run compose config, so they do not show it.

Verification

Unit tests cover agreement, conflict and absence, HTML escaping, and that the same actions remain available. Manual check in bun run preview: the release stack shows the badge and the Actions warning; removing the label from its Compose file removes both after a reload.