docs: import canonical RS2000 compose candidate #241

Merged
pdurlej merged 1 commit from codex/auto-deploy/canonical-compose into main 2026-05-12 08:07:47 +02:00
Collaborator

Canary status: missing — fire canary 3+3 manually before merge

Canary Context Pack

Product story

Piotr needs RS2000 to become git-controlled. This PR adds the repo-side canonical compose candidate, but keeps runtime cutover separate so merge is not secretly a production change.

What changed

Added compose/ with candidate canonical RS2000 compose files imported from the live read-only RS2000 compose inventory:

  • compose/apps/compose.yaml
  • compose/base/compose.yaml
  • compose/core/compose.yaml
  • compose/edge/compose.yaml
  • compose/README.md

Secret-like CHANGE_ME_* defaults from live compose were converted to required environment substitutions where the variable name was identifiable.

Why it changed

Auto Deploy cannot become the normal path until the desired compose state exists in pdurlej/platform. This PR creates that repo-side desired-state candidate without changing RS2000 yet.

Files touched

  • compose/README.md
  • compose/apps/compose.yaml
  • compose/base/compose.yaml
  • compose/core/compose.yaml
  • compose/edge/compose.yaml

Relevant context

  • #239 is the inventory PR this canonical import is derived from.
  • Legacy live root remains /opt/vps-home-platform-infra.
  • Target future root remains /opt/pdurlej-platform/current.

Runtime evidence

No RS2000 runtime mutation.

Checks run:

for f in compose/base/compose.yaml compose/core/compose.yaml compose/edge/compose.yaml compose/apps/compose.yaml; do
  docker compose -f "$f" config --no-interpolate >/tmp/compose-config-check.out

done
# docker compose config --no-interpolate OK

python3 - <<'PY'
from pathlib import Path
import yaml
for path in sorted(Path('compose').rglob('*.yaml')):
    yaml.safe_load(path.read_text())
print('canonical compose YAML parse OK')
PY

git diff --check

Secret-safety check: no CHANGE_ME defaults remain in compose YAML. Remaining secret-like strings are environment variable names/substitutions, not raw values.

Known constraints

These files are not live until a later cutover creates/syncs /opt/pdurlej-platform/current and points auto-apply at it. This PR intentionally avoids touching RS2000.

Explicit out-of-scope

  • No deploy root creation.
  • No RS2000 file writes.
  • No service restart.
  • No MOVED.md on RS2000 yet.
  • No runtime compose cutover.

Requested decision

Approve the canonical compose candidate as repo-side desired state, then do a separate cutover/setup PR/runbook before any runtime mutation uses it.

Merge blockers

  • Any real secret value in compose/**.
  • Any reviewer finding that this PR would be mistaken for a live cutover.
  • Any compose parse/config failure.

Operator Merge Checklist

  1. Prefer merging #239 inventory first, then this PR.
  2. Merge does not deploy. Do not SSH/run compose because of this PR alone.
  3. After merge, ask Codex for the deploy-root setup/cutover PR/runbook.

Spec sources read

  • #239 inventory artifacts — source snapshot for canonical import.
  • Live RS2000 read-only files under /opt/vps-home-platform-infra/compose/**/compose.yaml — import source.
  • compose/README.md added in this PR — operator safety boundary.

Refs #142
Refs #220

Canary status: missing — fire canary 3+3 manually before merge ## Canary Context Pack ### Product story Piotr needs RS2000 to become git-controlled. This PR adds the repo-side canonical compose candidate, but keeps runtime cutover separate so merge is not secretly a production change. ### What changed Added `compose/` with candidate canonical RS2000 compose files imported from the live read-only RS2000 compose inventory: - `compose/apps/compose.yaml` - `compose/base/compose.yaml` - `compose/core/compose.yaml` - `compose/edge/compose.yaml` - `compose/README.md` Secret-like `CHANGE_ME_*` defaults from live compose were converted to required environment substitutions where the variable name was identifiable. ### Why it changed Auto Deploy cannot become the normal path until the desired compose state exists in `pdurlej/platform`. This PR creates that repo-side desired-state candidate without changing RS2000 yet. ### Files touched - `compose/README.md` - `compose/apps/compose.yaml` - `compose/base/compose.yaml` - `compose/core/compose.yaml` - `compose/edge/compose.yaml` ### Relevant context - #239 is the inventory PR this canonical import is derived from. - Legacy live root remains `/opt/vps-home-platform-infra`. - Target future root remains `/opt/pdurlej-platform/current`. ### Runtime evidence No RS2000 runtime mutation. Checks run: ```bash for f in compose/base/compose.yaml compose/core/compose.yaml compose/edge/compose.yaml compose/apps/compose.yaml; do docker compose -f "$f" config --no-interpolate >/tmp/compose-config-check.out done # docker compose config --no-interpolate OK python3 - <<'PY' from pathlib import Path import yaml for path in sorted(Path('compose').rglob('*.yaml')): yaml.safe_load(path.read_text()) print('canonical compose YAML parse OK') PY git diff --check ``` Secret-safety check: no `CHANGE_ME` defaults remain in compose YAML. Remaining secret-like strings are environment variable names/substitutions, not raw values. ### Known constraints These files are not live until a later cutover creates/syncs `/opt/pdurlej-platform/current` and points auto-apply at it. This PR intentionally avoids touching RS2000. ### Explicit out-of-scope - No deploy root creation. - No RS2000 file writes. - No service restart. - No `MOVED.md` on RS2000 yet. - No runtime compose cutover. ### Requested decision Approve the canonical compose candidate as repo-side desired state, then do a separate cutover/setup PR/runbook before any runtime mutation uses it. ### Merge blockers - Any real secret value in `compose/**`. - Any reviewer finding that this PR would be mistaken for a live cutover. - Any compose parse/config failure. ## Operator Merge Checklist 1. Prefer merging #239 inventory first, then this PR. 2. Merge does not deploy. Do not SSH/run compose because of this PR alone. 3. After merge, ask Codex for the deploy-root setup/cutover PR/runbook. ## Spec sources read - #239 inventory artifacts — source snapshot for canonical import. - Live RS2000 read-only files under `/opt/vps-home-platform-infra/compose/**/compose.yaml` — import source. - `compose/README.md` added in this PR — operator safety boundary. Refs #142 Refs #220
docs: import canonical RS2000 compose candidate
Some checks failed
canary-required / collect-diff (pull_request) Failing after 3s
canary-required / canary (pull_request) Has been skipped
base-is-main / guard (pull_request) Successful in 1s
67fc427925
Sign in to join this conversation.
No reviewers
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pdurlej/platform!241
No description provided.