Work produced by the /kb driver on 2026-07-30. Each change is recorded on its
Kanboard task; all remain Done-unverified or parked pending alvis's decisions.
#183 agap-mcp/src/gitea.js
askpassScript() and giteaWikiWrite()'s wiki checkout both used
/tmp/agap-mcp-wiki, so writing the askpass helper made the dir non-empty and
git clone always failed. gitea_wiki_write had likely never succeeded in
production. Askpass moved to its own dir.
#181 agap-mcp/src/server.js
Initialise registeredToolCount at module load so /health reports the real
count immediately instead of 0 until the first MCP request.
#189 kanboard/backup.sh, seafile/backup.sh, vaultwarden/backup.sh,
users-backup.sh, openai/backup-{hindsight-adolf,llm-dbs}.sh
Remove the dead *.ts Zabbix trapper pushes (never landed). users-backup.sh
also pointed at localhost:81 instead of 192.168.1.4:81 and pushed a date
string into a numeric item. Freshness monitoring now rides the .age items.
#192 RESTORE-RUNBOOK.md, {kanboard,seafile,vaultwarden}/restore.sh
Restore path for the three services, verified in throwaway containers.
Note: this work found Seafile backups have carried an empty ccnet_db.sql
since 2026-07-07 -- filed as kb#222, not fixed here.
#164 openai/litellm-config.yaml
Metered `judge` (anthropic/claude-haiku-4-5) entry removed per alvis's
2026-07-30 decision. ANTHROPIC_API_KEY was never wired, so it could not spend.
#128 openai/agent_registry.py
litellm_key_spec() now also grants the routing-mode aliases, gated by the
same _reachable_tiers() check as raw grants, so a small-tier agent cannot
acquire automatic routing that resolves to tier-large.
#219 openai/migrate-adolf-state.sh
Migration script only; inert until run. Copies (never moves) the
openai_adolf-state volume to /mnt/ssd/dbs/adolf, verifying a full sha256
manifest before declaring success. Tested against a throwaway volume.
Deliberately NOT included, both awaiting alvis:
agap-mcp/docker-compose.yml -- kb#174's contested BW_EMAIL revert (parked).
openai/docker-compose.yml -- kb#219's bind-mount switch; the target dirs
under /mnt/ssd/dbs/adolf do not exist yet, so
committing it would let a later `compose up`
recreate Adolf against empty paths.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Y5QPagv4iun1ghpwM96Ff
docker-maintenance/ adds a systemd timer + prune.sh for the root LV that holds
Docker's data-root and has filled to 100% before, risking ENOSPC corruption.
The script sticks to the safe reclaim set (builder cache, dangling images,
stopped containers) and deliberately avoids `-a` and volume pruning, which can
destroy live data when run unattended.
kanboard/backup.sh and healthcheck.sh bring Kanboard in line with the other
services. seafile/ and vaultwarden/ backup scripts get fixes carried from the
stability audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Accumulated uncommitted infra changes:
- Caddyfile: repoint HA/Zabbix to 192.168.1.4/.3, add ~20 new site routes
- Immich: move media to /mnt/smsg, enable CUDA ML, mem limits, rewrite backup.sh
- Add service stacks: agap-mcp, anki, family, freshrss, iperf3, kanboard,
linkwarden, qbittorrent, radicale, syncthing, vikunja, windows
- openwebui: enable API keys; ollama: drop CPU fallback
- seafile/zabbix: extra_hosts entries; matrix: add user juris
- Remove pihole stack and stale wiki/migrate.py
- Ignore marketplace-mcp (standalone repo) and linkwarden runtime data
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LeqyaxJF2nbRXJtae2kNB2
- backup.sh: mysqldump all 3 DBs + rsync seafile-data, runs every 3 days
via root crontab, keeps last 5 backups in /mnt/backups/seafile
- Notifies Zabbix trapper item seafile.backup.ts (id 70369) on AgapHost
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add extra_hosts: docs.alogins.net:host-gateway so OnlyOffice container
can reach Seafile's callback URL without going through the public IP.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>