Second conversion batch, each typechecked against the built `@novox/mesh-sdk` and (where containerised) digest-pinned.
| Module | Shape | Notes |
|---|---|---|
| **bookshelf** | radarr/Servarr twin (v1 API) | 4 tools |
| **unifi** | portainer-shaped tooled app | 7 tools, 9 ports, settings-merged config |
| **fail2ban** | firewall-shaped host module (no container) | service + restart-on; **ban actions still source ufw/iptables — must be rewritten nftables-native before it actually bans** |
| **marrytts** | manifest-only plain container | no tools, like resolv-conf |
Catalogue is now 41 modules. Remaining service conversions and the whole-catalogue install scenario are tracked in MIGRATION-READINESS.md.
https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
- bookshelf: Servarr v1 fork on the radarr template (4 tools).
- unifi: portainer-shaped tooled app (7 tools, 9 ports), settings-merged config.
- fail2ban: host-level security module mirroring firewall (service + restart-on,
no container); ban actions preserved as source ufw/iptables and FLAGGED to be
rewritten nftables-native before it actually bans.
- marrytts: manifest-only plain container (no tools), like resolv-conf.
All typecheck against the built @novox/mesh-sdk; service images digest-pinned.
Held from merge pending the hq initialization reconciliation.
Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Second conversion batch, each typechecked against the built
@novox/mesh-sdkand (where containerised) digest-pinned.Catalogue is now 41 modules. Remaining service conversions and the whole-catalogue install scenario are tracked in MIGRATION-READINESS.md.
https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF