disinto/factory/best-practices/disk.md
johba 90ef03a304 refactor: make all scripts multi-project via env vars
Replace hardcoded harb references across the entire codebase:
- HARB_REPO_ROOT → PROJECT_REPO_ROOT (with deprecated alias)
- Derive PROJECT_NAME from CODEBERG_REPO slug
- Add PRIMARY_BRANCH (master/main), WOODPECKER_REPO_ID env vars
- Parameterize worktree prefixes, docker container names, branch refs
- Genericize agent prompts (gardener, factory supervisor)
- Update best-practices docs to use $-vars, prefix harb lessons

All project-specific values now flow from .env → lib/env.sh → scripts.
Backward-compatible: existing harb setups work without .env changes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 13:49:09 +01:00

1.3 KiB

Disk Best Practices

Safe Fixes

  • Docker cleanup: sudo docker system prune -f (keeps images, removes stopped containers + dangling layers)
  • Truncate factory logs >5MB: truncate -s 0 <file>
  • Remove stale worktrees: check /tmp/${PROJECT_NAME}-worktree-*, only if dev-agent not running on them
  • Woodpecker log_entries: DELETE FROM log_entries WHERE id < (SELECT max(id) - 100000 FROM log_entries); then VACUUM;
  • Node module caches in worktrees: rm -rf /tmp/${PROJECT_NAME}-worktree-*/node_modules/
  • Git garbage collection: cd $PROJECT_REPO_ROOT && git gc --prune=now

Dangerous (escalate)

  • docker system prune -a --volumes — deletes ALL images including CI build cache
  • Deleting anything in $PROJECT_REPO_ROOT/ that's tracked by git
  • Truncating Woodpecker DB tables other than log_entries

Known Disk Hogs

  • Woodpecker log_entries table: grows to 5GB+. Truncate periodically.
  • Docker overlay layers: survive normal prune. -a variant kills everything.
  • Git worktrees in /tmp: accumulate node_modules, build artifacts
  • Forge cache in ~/.foundry/cache/: can grow large with many compilations

Lessons Learned

  • After truncating log_entries, run VACUUM FULL (reclaims actual disk space)
  • Docker ghost overlay layers need prune -a but that kills CI images — only do this if truly desperate