chore(uptime-kuma): prepare W8.2 low-risk app upgrade packet #506

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

Spec sources (whitelist)

  • state/cycle/W8-module-upgrade-prep.md §W8.2 low-risk apps / Required Evidence Per Upgrade PR / Stop Conditions
  • state/cycle/W8-readiness-2026-05-26.md §Candidate Classification
  • modules/uptime-kuma/module.yaml
  • modules/uptime-kuma/runbook.md

Extracted context

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

W8.2 low-risk apps: Upgrade standard/maintenance user apps with local smokes.
Default candidates: `pogodowa-babcia`, `uptime-kuma`, other standard non-core modules once metadata exists.

From state/cycle/W8-readiness-2026-05-26.md:

`uptime-kuma` | `propose-pr` | stateful user-visible app | `louislam/uptime-kuma:2.1.3` |
Second candidate only after backup/rollback stance is explicit.

From modules/uptime-kuma/module.yaml:

update_policy.mode: propose-pr
artifact.image: louislam/uptime-kuma
artifact.tag: 2.1.3
statefulness: stateful
exposure: tailnet-only

From modules/uptime-kuma/runbook.md:

Stateful (private-pii). Local SQLite holds monitor configurations, heartbeat/uptime history, notification settings, and status page configurations.

Do NOT read (unless escape hatch fires)

  • compose/ — this PR should not change service wiring.
  • Live RS2000 paths — runtime smoke/apply is out of scope.
  • modules/forgejo/ and core services — Forgejo/core upgrades are separate W8.final work.

Allowed touched paths

  • state/cycle/W8-uptime-kuma-pilot.md (create)
  • modules/uptime-kuma/module.yaml (modify only if pinning a verified desired artifact digest or refreshing metadata)
  • Optional: state/cycle/W8-module-upgrade-prep.md (modify, short status note only)

Why this exists (product-first)

uptime-kuma is a better W8.2 rehearsal than Forgejo/core infrastructure, but it still has state. This issue should produce a clear packet: what tag/digest is current, whether a newer safe candidate exists, what backup/rollback evidence is required, and whether a later runtime approval is worth asking for.

Why this matters now

After minio-init, W8 needs one normal app-shaped candidate before touching stateful core services. uptime-kuma has metadata and tailnet-only exposure, but its SQLite state means the packet must be explicit before any upgrade PR.

What "done" looks like

  • A W8.2 uptime-kuma packet records current tag/digest and candidate tag/digest, or explicitly records that no upgrade candidate was selected.
  • Packet includes release-note/changelog pointer or says where none was found.
  • Packet includes backup-before requirement, rollback artifact, smoke command, expected result, and no-runtime-mutation statement.
  • If module.yaml changes, it changes only metadata/digest, not runtime wiring.
  • PYTHONPATH=control-plane python3 -m platformctl.cli validate all --json exits with zero failures.

Scope

In scope:

  • Repo-only packet for a future uptime-kuma W8.2 upgrade.
  • Optional desired digest metadata if verified.

Out of scope:

  • Running the upgrade.
  • Recreating/stopping/restarting uptime-kuma.
  • Changing Traefik exposure.
  • Public status page/product activation.

Suggested approach

  1. Use registry metadata to compare current 2.1.3 with upstream stable tags.
  2. If a candidate exists, record old/new digest and release-note evidence.
  3. If no candidate exists or evidence is ambiguous, document that and stop at packet/no-op.
  4. Keep all runtime action behind a later operator approval.

Escape hatch

If upstream versioning is ambiguous or release notes imply a breaking migration, stop and mark the packet manual, not ready-to-apply.

Unknowns / owner questions

  • None for the packet. Runtime execution is a later explicit owner gate.

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, #501, #502, #503, #504
## Spec sources (whitelist) - `state/cycle/W8-module-upgrade-prep.md` §W8.2 low-risk apps / Required Evidence Per Upgrade PR / Stop Conditions - `state/cycle/W8-readiness-2026-05-26.md` §Candidate Classification - `modules/uptime-kuma/module.yaml` - `modules/uptime-kuma/runbook.md` ## Extracted context > From `state/cycle/W8-module-upgrade-prep.md`: > ``` > W8.2 low-risk apps: Upgrade standard/maintenance user apps with local smokes. > Default candidates: `pogodowa-babcia`, `uptime-kuma`, other standard non-core modules once metadata exists. > ``` > > From `state/cycle/W8-readiness-2026-05-26.md`: > ``` > `uptime-kuma` | `propose-pr` | stateful user-visible app | `louislam/uptime-kuma:2.1.3` | > Second candidate only after backup/rollback stance is explicit. > ``` > > From `modules/uptime-kuma/module.yaml`: > ``` > update_policy.mode: propose-pr > artifact.image: louislam/uptime-kuma > artifact.tag: 2.1.3 > statefulness: stateful > exposure: tailnet-only > ``` > > From `modules/uptime-kuma/runbook.md`: > ``` > Stateful (private-pii). Local SQLite holds monitor configurations, heartbeat/uptime history, notification settings, and status page configurations. > ``` ## Do NOT read (unless escape hatch fires) - `compose/` — this PR should not change service wiring. - Live RS2000 paths — runtime smoke/apply is out of scope. - `modules/forgejo/` and core services — Forgejo/core upgrades are separate W8.final work. ## Allowed touched paths - `state/cycle/W8-uptime-kuma-pilot.md` (create) - `modules/uptime-kuma/module.yaml` (modify only if pinning a verified desired artifact digest or refreshing metadata) - Optional: `state/cycle/W8-module-upgrade-prep.md` (modify, short status note only) ## Why this exists (product-first) `uptime-kuma` is a better W8.2 rehearsal than Forgejo/core infrastructure, but it still has state. This issue should produce a clear packet: what tag/digest is current, whether a newer safe candidate exists, what backup/rollback evidence is required, and whether a later runtime approval is worth asking for. ## Why this matters now After `minio-init`, W8 needs one normal app-shaped candidate before touching stateful core services. `uptime-kuma` has metadata and tailnet-only exposure, but its SQLite state means the packet must be explicit before any upgrade PR. ## What "done" looks like - [ ] A W8.2 `uptime-kuma` packet records current tag/digest and candidate tag/digest, or explicitly records that no upgrade candidate was selected. - [ ] Packet includes release-note/changelog pointer or says where none was found. - [ ] Packet includes backup-before requirement, rollback artifact, smoke command, expected result, and no-runtime-mutation statement. - [ ] If `module.yaml` changes, it changes only metadata/digest, not runtime wiring. - [ ] `PYTHONPATH=control-plane python3 -m platformctl.cli validate all --json` exits with zero failures. ## Scope **In scope:** - Repo-only packet for a future `uptime-kuma` W8.2 upgrade. - Optional desired digest metadata if verified. **Out of scope:** - Running the upgrade. - Recreating/stopping/restarting `uptime-kuma`. - Changing Traefik exposure. - Public status page/product activation. ## Suggested approach 1. Use registry metadata to compare current `2.1.3` with upstream stable tags. 2. If a candidate exists, record old/new digest and release-note evidence. 3. If no candidate exists or evidence is ambiguous, document that and stop at packet/no-op. 4. Keep all runtime action behind a later operator approval. ## Escape hatch If upstream versioning is ambiguous or release notes imply a breaking migration, stop and mark the packet `manual`, not `ready-to-apply`. ## Unknowns / owner questions - None for the packet. Runtime execution is a later explicit owner gate. ## 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, #501, #502, #503, #504
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#506
No description provided.