bird and netbird-service-sync run images from Gitea's registry with no copy on ghcr.io. In the infrastructure Kustomization they started long before the restored Gitea served them and sat in ImagePullBackOff (restore rehearsal runs 27, 28). infrastructure cannot depend on gitea, which depends on it, so both move to a new Kustomization, infrastructure-inhouse, that depends on infrastructure, infrastructure-crds and gitea. Their namespace stays in infrastructure. e2e-test.sh checks the new Kustomization for Ready. Images published to ghcr.io too have a fallback in the nodes' registry mirror and need no ordering; multus cni-plugins stays in infrastructure. The secret-rotator and backup-verify CronJobs also use Gitea images but only run on schedule; they are left in place. bird fills routing table 47, which exists only where the site patch routes pod traffic into it, and renders its config from node annotations only that site sets. On a site without it the template rendered <no value> and the init container crash-looped (run 28). The DaemonSet now selects on net.renner.uno/pod-table=47, which site-homelab.yaml puts on its nodes. Production rollout: 1. The pod-table label must be on the nodes (talosctl patch, no reboot) before the DaemonSet change reconciles, or bird is removed from every node and pod traffic falls through to the main table. 2. infrastructure must run with prune: false (the stack's first PR) when this merges. It then drops bird and netbird-service-sync from its inventory without deleting them, and infrastructure-inhouse adopts them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>