docs(cutover): plan post-soak legacy cleanup #340

Merged
pdurlej merged 1 commit from codex/cutover/post-soak-legacy-cleanup-plan into main 2026-05-17 18:29:14 +02:00
Collaborator

Canary status: missing — fire canary via python -m platformctl.tools.run_review before merge

Summary

Documents the post-soak RS2000 legacy cleanup contract and the platform modularization boundary. This converts the operator's 2026-05-17 decisions into an ADR plus an executable cleanup plan, while keeping all destructive cleanup blocked until cutoff soak acceptance and a separate cleanup gate.

Changes

  • Adds ADR-0020 for post-soak legacy cleanup and platform modularization boundaries.
  • Adds state/cutover/rs2000-post-soak-legacy-cleanup.md with cleanup classes, phases, gates, and stop conditions.
  • Updates state/STATUS_NOW.md with the new post-soak default while preserving the current no-mutation cutoff soak mode.

Canary Context Pack

Product story

The operator needs the old RS2000 tree to stop being an ambiguous second source of truth without losing live data/config or cleanup safety. The desired result is a clear post-soak path: move live bind-mounted material first, then delete legacy backups/state/control-plane material only after evidence says it is safe.

What changed

This PR adds a governance ADR and a state/cutover execution plan. It does not touch runtime code, compose files, module manifests, or production paths.

Why it changed

The control-plane cutoff intentionally preserved /opt/vps-home-platform-infra. After inspecting the legacy tree, the operator decided which classes should be deleted after soak and which live data/config should be moved as-is first. The platform also needs a durable rule that pdurlej/platform remains desired-state/control-plane, not a long-term home for old app source and runtime artifacts.

Files touched

  • decisions/0020-post-soak-legacy-cleanup-and-platform-modularization.md
  • state/cutover/rs2000-post-soak-legacy-cleanup.md
  • state/STATUS_NOW.md

Relevant context

  • ADR-0006: single operator status file
  • ADR-0007: risk-proportional review
  • ADR-0017: no stacked PRs
  • ADR-0018: agentic-first root causes
  • state/cutover/rs2000-control-plane-cutoff.md
  • PLATFORM_CHARTER.md modular context/repo-layout direction

Runtime evidence

Read-only evidence collected before drafting:

  • /opt/vps-home-platform-infra is ~152G: ~150G backups, ~1.4G state, ~62M data, ~524K config.
  • Running containers still bind-mount legacy data/*, config/*, env, selected product config, and bootstrap paths.
  • Current cutoff mode remains no delete/rename/prune until separate operator gate.

Known constraints

  • Do not delete or move legacy paths during the current cutoff soak.
  • Do not refactor imported data/config during the first move; move as-is and open follow-up issues.
  • No raw user messages, emails, prompts, Iskra memory, or secrets are stored in evidence.

Explicit out-of-scope

  • Executing any cleanup.
  • Moving bind mounts.
  • DR/restore drill #45.
  • minio-init #310.
  • Infisical direct PAT fallback removal.
  • Vault sunset.

Requested decision

Approve the governance plan as the post-soak cleanup contract. Execution remains blocked until soak acceptance and a separate operator cleanup gate.

Merge blockers

  • Any contradiction with the active cutoff soak contract.
  • Any implication that destructive cleanup may happen before soak acceptance.
  • Any unclear boundary between platform desired state and product/source repositories.

Spec sources read

  • AGENTS.md — repo runbook and PR/governance rules.
  • docs/forgejo-agent-operations.md — Forgejo API/identity rules before opening this PR.
  • state/cutover/rs2000-control-plane-cutoff.md — current cutoff contract and legacy path classification.
  • state/STATUS_NOW.md — canonical operator-facing status to update consistently.
  • decisions/0007-risk-proportional-canary.md — tier and ADR review expectations.
  • decisions/0017-no-stacked-prs-to-main.md — branch/PR hygiene context.
  • decisions/0018-agentic-first-fix-root-causes.md — future-agent signal hygiene.
  • PLATFORM_CHARTER.md — modular context and desired-state repo direction.

Verification

  • git diff --cached --check passed.
  • Repo-only documentation/governance change; no production mutation performed.
  • Runtime inspection was read-only and used only for class sizing/bind-mount context.

Test plan

  • Full review/canary because this PR adds an ADR and touches state/STATUS_NOW.md.
  • Operator checks that the cleanup classes match the 2026-05-17 decision.
  • After merge, future cleanup dispatches cite ADR-0020 and do not execute before soak acceptance.
Canary status: missing — fire canary via `python -m platformctl.tools.run_review` before merge ## Summary Documents the post-soak RS2000 legacy cleanup contract and the platform modularization boundary. This converts the operator's 2026-05-17 decisions into an ADR plus an executable cleanup plan, while keeping all destructive cleanup blocked until cutoff soak acceptance and a separate cleanup gate. ## Changes - Adds ADR-0020 for post-soak legacy cleanup and platform modularization boundaries. - Adds `state/cutover/rs2000-post-soak-legacy-cleanup.md` with cleanup classes, phases, gates, and stop conditions. - Updates `state/STATUS_NOW.md` with the new post-soak default while preserving the current no-mutation cutoff soak mode. ## Canary Context Pack ### Product story The operator needs the old RS2000 tree to stop being an ambiguous second source of truth without losing live data/config or cleanup safety. The desired result is a clear post-soak path: move live bind-mounted material first, then delete legacy backups/state/control-plane material only after evidence says it is safe. ### What changed This PR adds a governance ADR and a state/cutover execution plan. It does not touch runtime code, compose files, module manifests, or production paths. ### Why it changed The control-plane cutoff intentionally preserved `/opt/vps-home-platform-infra`. After inspecting the legacy tree, the operator decided which classes should be deleted after soak and which live data/config should be moved as-is first. The platform also needs a durable rule that `pdurlej/platform` remains desired-state/control-plane, not a long-term home for old app source and runtime artifacts. ### Files touched - `decisions/0020-post-soak-legacy-cleanup-and-platform-modularization.md` - `state/cutover/rs2000-post-soak-legacy-cleanup.md` - `state/STATUS_NOW.md` ### Relevant context - ADR-0006: single operator status file - ADR-0007: risk-proportional review - ADR-0017: no stacked PRs - ADR-0018: agentic-first root causes - `state/cutover/rs2000-control-plane-cutoff.md` - `PLATFORM_CHARTER.md` modular context/repo-layout direction ### Runtime evidence Read-only evidence collected before drafting: - `/opt/vps-home-platform-infra` is ~152G: ~150G backups, ~1.4G state, ~62M data, ~524K config. - Running containers still bind-mount legacy `data/*`, `config/*`, `env`, selected product config, and bootstrap paths. - Current cutoff mode remains no delete/rename/prune until separate operator gate. ### Known constraints - Do not delete or move legacy paths during the current cutoff soak. - Do not refactor imported data/config during the first move; move as-is and open follow-up issues. - No raw user messages, emails, prompts, Iskra memory, or secrets are stored in evidence. ### Explicit out-of-scope - Executing any cleanup. - Moving bind mounts. - DR/restore drill #45. - `minio-init` #310. - Infisical direct PAT fallback removal. - Vault sunset. ### Requested decision Approve the governance plan as the post-soak cleanup contract. Execution remains blocked until soak acceptance and a separate operator cleanup gate. ### Merge blockers - Any contradiction with the active cutoff soak contract. - Any implication that destructive cleanup may happen before soak acceptance. - Any unclear boundary between platform desired state and product/source repositories. ## Spec sources read - `AGENTS.md` — repo runbook and PR/governance rules. - `docs/forgejo-agent-operations.md` — Forgejo API/identity rules before opening this PR. - `state/cutover/rs2000-control-plane-cutoff.md` — current cutoff contract and legacy path classification. - `state/STATUS_NOW.md` — canonical operator-facing status to update consistently. - `decisions/0007-risk-proportional-canary.md` — tier and ADR review expectations. - `decisions/0017-no-stacked-prs-to-main.md` — branch/PR hygiene context. - `decisions/0018-agentic-first-fix-root-causes.md` — future-agent signal hygiene. - `PLATFORM_CHARTER.md` — modular context and desired-state repo direction. ## Verification - `git diff --cached --check` passed. - Repo-only documentation/governance change; no production mutation performed. - Runtime inspection was read-only and used only for class sizing/bind-mount context. ## Test plan - [ ] Full review/canary because this PR adds an ADR and touches `state/STATUS_NOW.md`. - [ ] Operator checks that the cleanup classes match the 2026-05-17 decision. - [ ] After merge, future cleanup dispatches cite ADR-0020 and do not execute before soak acceptance.
docs(cutover): plan post-soak legacy cleanup
All checks were successful
canary-required / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
canary-required / canary (pull_request) Successful in 13s
patchwarden-pr-sanity / sanity (pull_request) Successful in 19s
base-is-main / guard (pull_request) Successful in 1s
130dbd1426
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!340
No description provided.