Add disk-pressure budgets and a guarded CI circuit breaker on kai-server #707
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#707
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Outcome
Keep the single-node kai-server cluster out of Kubernetes DiskPressure while Forgejo uploads, container repulls, and CI scratch change which storage category is growing. Add one measured capacity policy, early warning, and a guarded admission path for disk-heavy CI. This issue coordinates the control layer around the source-specific cleanup in #624 and the runner migration in #693 without duplicating either.
What the 2026-07-31 incident taught us
661a938separately hardened that image source, but it does not reduce disk risk.Proposed forward actions
Acceptance
Evidence and related work
317bfbe.661a938.2026-08-01 recurrence evidence
Current read-only classification:
No live mutation was made. Durable Forgejo cleanup is blocked by the runbook until an attended operator installs the backup plane, completes an initial backup, and returns the in-pod Forgejo storage split from the disk-pressure measurement reference. Blind PVC, package, Git object, containerd, or log deletion remains unsafe.
Forgejo measurement follow-up at 2026-08-01T05:50Z:\n\n* attended run reached the cluster and reported PostgreSQL at 381 MB\n* the four application measurements failed before execution because sh -lc loaded a Bash-only Forgejo login-profile fragment\n* corrected wrapper now uses non-login sh -c, with a focused fake-k3s regression test\n* commit
9b67b77landed on canonical main and Forgejo lint plus secret scan passed\n* live after-state remains pending the attended wrapper rerun\n\nRollback: revert9b67b77if the non-login shell causes an unexpected measurement regression. No live storage mutation was made.Current disk-pressure evidence: root use is 88.85% with 57.4 GB available, inodes are healthy at 10.02%, and kubelet image garbage collection is repeatedly failing. Forgejo owns 141.5G, dominated by 120.2G of completed package or OCI data and 18.6G of attachments. Its repositories total 660M and PostgreSQL is 381M.\n\nNo durable Forgejo data has been removed. Package retention remains gated on a current backup and an exact owner/version inventory, with deletion through a Forgejo-managed surface only. Measurement fix
4241976is on main with successful lint and secret-scan runs. A corrected attended capture is the next evidence step.Follow-up evidence from agentic-os#836 on 2026-08-01:
The native release is complete. Dev-base publication remains queued behind the runner and disk-pressure containment tracked here.
Package attribution is complete. Forgejo has 120 GB of referenced package blobs and only 149 MB expired-unreferenced. coilyco-flight-deck/container owns 117 GB, with agentic-os accounting for 116 GB and 749 external tags. There are zero package cleanup rules. This is persistent referenced data, not a failed garbage-collection backlog.\n\nThe proposed bounded Forgejo rule keeps the newest 50 tags per package, protects every moving release and build-cache alias, and removes all other tags during supported package cleanup. No destructive change has run. A fresh backup and Kai's explicit approval remain the immediate gate.
Immediate package-pressure relief is now scripted and landed in
0d1b5a0(infrastructure#719). The measured source remains 116 GB of referenced agentic-os OCI blobs across 749 external versions. The script is preview-first, preserves the newest 50 versions and moving release/buildcache aliases, and refuses apply without an exact confirmation and a successful restic backup completed within four hours. No durable data has been deleted. Next evidence is the attended preview candidate count, then a fresh backup and explicit destructive approval before apply.