docs(w8.3): define stateful and sidecar upgrade gate #507

Closed
opened 2026-05-26 17:54:22 +02:00 by codex · 1 comment
Collaborator

Spec sources (whitelist)

  • state/cycle/W8-module-upgrade-prep.md §W8.3 sidecar/stateful / Required Evidence Per Upgrade PR / Stop Conditions
  • state/cycle/W8-readiness-2026-05-26.md §Candidate Classification / Stop Conditions
  • state/cycle/W8-minio-init-pilot.md §Risk Class / Smoke Contract For Future Runtime Approval
  • decisions/0022-module-source-and-release-boundaries.md §Update workflow / Anti-patterns

Extracted context

From state/cycle/W8-module-upgrade-prep.md:

W8.3 sidecar/stateful: Upgrade stateful or sidecar-bound services.
Gate: Backup-before plus restore/rollback path.

From state/cycle/W8-minio-init-pilot.md:

Runtime execution of a future tag change still requires operator approval and
should treat `minio` as the backup reference module.

From decisions/0022-module-source-and-release-boundaries.md:

Stateful, public-edge, auth, and security-sensitive modules stay manually
gated until explicit policy says otherwise.

Do NOT read (unless escape hatch fires)

  • Live RS2000 paths — this is a gate definition, not a smoke.
  • compose/ — no service wiring changes.
  • state/cutover/ — destructive cleanup is a separate M01/W3d gate.

Allowed touched paths

  • state/cycle/W8-stateful-sidecar-gate.md (create)
  • state/cycle/W8-module-upgrade-prep.md (modify, short gate reference only)

Why this exists (product-first)

W8 will slow down or become risky if every stateful module has to re-argue the same backup/rollback rules. A small gate document lets agents prepare upgrade PRs consistently while keeping real state changes behind the right operator approvals.

Why this matters now

minio-init proved a sidecar-bound packet. Before any minio, redis, postgres, or similar module upgrade, the platform needs one shared checklist for backup-before, restore confidence, smoke shape, and stop conditions.

What "done" looks like

  • A W8.3 gate document defines required evidence for stateful, sidecar-bound, secret-bearing, and public-edge upgrade classes.
  • The gate explicitly distinguishes repo-only packet PRs from runtime apply/recreate approvals.
  • The gate says when #433 W3d/full sandbox DR is mandatory before continuing.
  • The gate includes at least one example each for minio-init, minio, redis, and postgres using metadata-only language.
  • No module image/tag/digest changes and no runtime instructions that imply immediate execution.

Scope

In scope:

  • Gate/checklist documentation for W8.3.
  • References back to #389/#501/#502.

Out of scope:

  • Executing upgrades.
  • Creating backups.
  • Running restore drills.
  • Editing module manifests beyond a pointer, unless separately justified.

Suggested approach

  1. Start from the W8 prep evidence list.
  2. Convert it into class-specific gates.
  3. Make all runtime mutation language explicitly operator-gated.
  4. Add a short pointer in W8 prep.

Escape hatch

If the gate needs a new ADR or contradicts ADR-0022/W3 restore stance, stop and comment on #389 rather than inventing policy.

Unknowns / owner questions

  • Whether to require #433 before every W8.3 runtime apply or only before broad/core batches. If unclear, default to stricter/manual wording.

Risk class

  • risk/runtime
  • risk/process
  • risk/exposure
  • risk/product

Class of service

  • class/security-sensitive

Trace

  • Original source: #389 W8 coordination lane after #501/#502
  • Migrated by: codex, 2026-05-26
  • Related issues / PRs: #389, #433, #501, #502, #503, #504
## Spec sources (whitelist) - `state/cycle/W8-module-upgrade-prep.md` §W8.3 sidecar/stateful / Required Evidence Per Upgrade PR / Stop Conditions - `state/cycle/W8-readiness-2026-05-26.md` §Candidate Classification / Stop Conditions - `state/cycle/W8-minio-init-pilot.md` §Risk Class / Smoke Contract For Future Runtime Approval - `decisions/0022-module-source-and-release-boundaries.md` §Update workflow / Anti-patterns ## Extracted context > From `state/cycle/W8-module-upgrade-prep.md`: > ``` > W8.3 sidecar/stateful: Upgrade stateful or sidecar-bound services. > Gate: Backup-before plus restore/rollback path. > ``` > > From `state/cycle/W8-minio-init-pilot.md`: > ``` > Runtime execution of a future tag change still requires operator approval and > should treat `minio` as the backup reference module. > ``` > > From `decisions/0022-module-source-and-release-boundaries.md`: > ``` > Stateful, public-edge, auth, and security-sensitive modules stay manually > gated until explicit policy says otherwise. > ``` ## Do NOT read (unless escape hatch fires) - Live RS2000 paths — this is a gate definition, not a smoke. - `compose/` — no service wiring changes. - `state/cutover/` — destructive cleanup is a separate M01/W3d gate. ## Allowed touched paths - `state/cycle/W8-stateful-sidecar-gate.md` (create) - `state/cycle/W8-module-upgrade-prep.md` (modify, short gate reference only) ## Why this exists (product-first) W8 will slow down or become risky if every stateful module has to re-argue the same backup/rollback rules. A small gate document lets agents prepare upgrade PRs consistently while keeping real state changes behind the right operator approvals. ## Why this matters now `minio-init` proved a sidecar-bound packet. Before any `minio`, `redis`, `postgres`, or similar module upgrade, the platform needs one shared checklist for backup-before, restore confidence, smoke shape, and stop conditions. ## What "done" looks like - [ ] A W8.3 gate document defines required evidence for `stateful`, `sidecar-bound`, `secret-bearing`, and `public-edge` upgrade classes. - [ ] The gate explicitly distinguishes repo-only packet PRs from runtime apply/recreate approvals. - [ ] The gate says when #433 W3d/full sandbox DR is mandatory before continuing. - [ ] The gate includes at least one example each for `minio-init`, `minio`, `redis`, and `postgres` using metadata-only language. - [ ] No module image/tag/digest changes and no runtime instructions that imply immediate execution. ## Scope **In scope:** - Gate/checklist documentation for W8.3. - References back to #389/#501/#502. **Out of scope:** - Executing upgrades. - Creating backups. - Running restore drills. - Editing module manifests beyond a pointer, unless separately justified. ## Suggested approach 1. Start from the W8 prep evidence list. 2. Convert it into class-specific gates. 3. Make all runtime mutation language explicitly operator-gated. 4. Add a short pointer in W8 prep. ## Escape hatch If the gate needs a new ADR or contradicts ADR-0022/W3 restore stance, stop and comment on #389 rather than inventing policy. ## Unknowns / owner questions - Whether to require #433 before every W8.3 runtime apply or only before broad/core batches. If unclear, default to stricter/manual wording. ## Risk class - [x] `risk/runtime` - [x] `risk/process` - [ ] `risk/exposure` - [ ] `risk/product` ## Class of service - [ ] `class/security-sensitive` ## Trace - Original source: #389 W8 coordination lane after #501/#502 - Migrated by: codex, 2026-05-26 - Related issues / PRs: #389, #433, #501, #502, #503, #504
Author
Collaborator

Sequencing note from codex: keep this proposed until #505/#506 land; then mark ready-for-agent as the next W8 batch. This is not blocked on more ADR/policy work, only on avoiding parallel drift while the first two packets establish current evidence.

Sequencing note from codex: keep this proposed until #505/#506 land; then mark ready-for-agent as the next W8 batch. This is not blocked on more ADR/policy work, only on avoiding parallel drift while the first two packets establish current evidence.
Sign in to join this conversation.
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 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#507
No description provided.