- Simplify kiwix role from 213 lines to 151 lines
- Replace per-archive torrent status loops with single shell command
- Decouple kiwix startup from declared inventory - now serves whatever
completed ZIM files exist in transmission download directory
- Remove redundant status rechecks and waits
- Fix tailscale_serve role to handle empty JSON in check mode
This reduces ansible runtime by ~3 minutes by eliminating O(n) shell
invocations per archive (previously ~132 operations, now ~5).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>