feat(disk-pressure): measure pod ephemeral bytes and attachment ownership #859
No reviewers
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!859
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/uq98-disk-domains"
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?
Closes part of coilyco-flight-deck/node-stats-mcp#26.
What the incident showed
The 2026-08-17 kai-server disk-pressure investigation lived in 62 GiB of
emptyDirunder/var/lib/kubelet/pods, which no ownership domain in the bounded report could see, and in 38 GB of Forgejo attachments the measurement script reported as one bareduline.Changes
pod_ephemeral_bytesdomain inkai-disk-pressure-report. Kubelet bind-mounts local-path PVCs into the pod tree on the same filesystem, sodu -xwalks them again and the bytes land in two domains. The walk excludes*kubernetes.io~local-volume*and*volume-subpaths*so the domains stay additive.--detailedresolves each pod UID to its namespace and pod name.forgejo-storage-measure.sh: bytes split by release, issue, and unattached with 7/30/90-day age buckets; the 50 largest owners by repository and kind; attachments whose repository row is gone; and an on-disk file count to reconcile against those row counts. Column names verified against Forgejo'smodels/repo/attachment.go.raw-du-guardrails.mdreference covering why a plaindu -x /reported 567 GiB on a 401 GiB filesystem, the exclude incantation that corrects it, and the aosguard no-delete/ no-execboundaries so the operator handoff is proposed upfront rather than discovered mid-incident.kubectl rollout restartwas not a classifier disagreeing with aosguard.Bash(kubectl *)is a deliberate fleet-wide deny installed byagentic-os/scripts/apply-base-claude-settings.py, on the stated ground that live-infrastructure CLIs belong to a guarded verb.aosguard ops kubectl rollout restartwas available the whole time.Verification
ward exec disk-pressure-watch-testpasses with a new assertion pinning the exclude contract, and asserting no other domain carries an exclude.pre-commit run --all-filesis clean.The recycle-report half of that test needs GNU
date -d, so it only completes on Linux. That is pre-existing and unrelated; it was verified here against a GNUdateshim.🤖 Generated with Claude Code