Restore test fixes: site facts, self-restore, CNPG archive generations, dependency graph #1296
Closed
claude-bot
wants to merge 43 commits from
worktree-restore-test-real into main
pull from: worktree-restore-test-real
merge into: :main
:main
:alert-fix/issue-1551
:shelly-manager-no-mtu-probing
:lb-replies-table-47
:fix/vip-replies-table-47
:renovate/node-26.x
:renovate/hermes-image
:renovate/home-assistant-minor-patch
:renovate/ci-minor-patch
:renovate/all-minor-patch
:revert/gate-sync-oidc
:fix/gate-sync-proxy-sweep
:feat/gate-sync-oidc
:feat/youtrack
:ci-image/claude-2.1.316
:worktree-loki-retention-365d
:paperless-drop-syncthing-monitor
:worktree-alloy-unifi-syslog-label
:worktree-syncthing-ui-gate
:alert-fix/issue-1527
:shelly-manager-sleepy-rollout
:kuma-root-group
:ci-image/claude-2.1.312
:worktree-ntp-ipv4-record
:kuma-notifications
:shelly-manager-iot-v6-world-egress
:ssh-ca-nas-2
:shelly-manager-iot-ipv6-egress
:shelly-manager-net1-no-ra
:shelly-firmware-lb-reachable
:shelly-manager-local-firmware
:claude/ma-pocketcasts-up-next-top-pick
:claude/outpost-image-flux
:claude/outpost-image-literal
:claude/date-image-tag
:docs/mosquitto-shelly-manager-settings-comment
:review-bot-token-read-issue
:alert-fix/issue-1505
:t_1bc87417/konairius-registry
:review-bot-on-request
:review-bot-efficiency
:ci-ansible-netbird
:worktree-crowdsec-ma-imageproxy-whitelist
:ci-image/claude-2.1.311
:worktree-openbao-oidc-authentik
:alert-fix/issue-1461
:claude/authentik-2026.8.4
:fix/ma-sendspin-mdns-net1
:claude/ma-pocketcasts-up-next-mark-played
:claude/ma-pocketcasts-up-next-playlist
:revert/ma-po-token-server
:alert-fix/issue-1453
:claude/gitea-mcp-imagerepo
:feat/ma-youtube-music-po-token-v2
:feat/ma-youtube-music-po-token
:claude/coredns-talos-owned-2
:claude/coredns-talos-owned
:claude/k8s-gateway-ingress-resolver
:claude/egress-followups
:feat/wiki-cronjobs
:claude/mqtt-admin-register
:claude/shelly-manager-mdns
:feat/wiki-encyclopedia-pilot
:ci-image/claude-2.1.310
:claude/mosquitto-legacy-auth-removal
:claude/egress-lockdown
:fix/gate-embedded-refresh-interval
:fix/gate-embedded-browser-host
:feat/authentik-gate-forwardauth
:docs/drop-wildcard-references
:fix/netbird-controller-disable-dns
:feat/dns-labels-split-2
:feat/dns-labels-split-1
:fix/cloudflare-lb-sync-image-tag
:feat/cloudflare-lb-sync
:fix/wordpress-php85-php2shell
:feat/update-os
:chore/talos-1.13.12
:atlas/talos-v1.13.12-cve-2026-99999
:fix/gitea-webhook-sync-org-scope
:atlas/kuma-mcb-www-retries
:feat/hermes-gitea-pr-review-loop
:atlas/traefik-chart-42
:fix/monitoring-k8s-gateway-probe
:alert-fix/issue-1081-rotator
:ci-image/claude-2.1.306
:alert-fix/issue-1084-v2
:atlas/flux-2.9.6
:alert-fix/issue-1082
:feat/hermes-gitea-issues-kanban
:worktree-restore-test-real
:fix/hermes-multiplex-env
:feat/hermes-experts
:feat/hermes-ha-mcp
:feat/kuma-status-page
:fix/hermes-ha-updates-review
:feat/hermes-alert-monitor
:feat/hermes-ha-updates
:fix/turn-tcp-router
:fix/crowdsec-own-ca
:fix/livekit-service-links
:fix/crowdsec-lapi-transport-ca
:feat/matrix-element-call
:feat/kuma-public-coverage
:feat/ha-matrix-nabu-secret
:feat/hermes-matrix-cross-signing
:feat/hermes-matrix
:fix/wiki-basic-auth-in-service
:proposal/traefik-vip-maglev-dsr
:fix/hermes-dashboard-ws-ping-timeout
:fix/hermes-dashboard-ws-ping-interval
:fix/hermes-dashboard-refresh-token
:feat/wiki-drop-gate
:feat/wiki-oidc-provider
:fix/hermes-soul-talos-node-names
:claude/docs-konairius-main
:claude/drop-k-renner-org-secrets
:claude/prompts-main
:claude/default-branch-main
:feat/hermes-cli-logins
:claude/plan-step0-claude-bot
:alert-fix/issue-1363
:claude/homelab-konairius
:claude/konairius-org-secrets
:fix/hermes-image-registry-bot
:feat/hermes-use-custom-image
:feat/hermes-image
:feat/kuma-task5-monitors
:feat/hermes-gitea
:fix/hermes-configmap-namespace
:feat/hermes-homelab-context
:fix/uptime-kuma-script-mount
:feat/kuma-task4-bootstrap
:feat/kuma-task4-cluster
:feat/kuma-sync-default-notifications
:fix/hermes-image-policy
:fix/kuma-sync-foreign-key-create
:feat/hermes-agent
:chore/kuma-sync-smoke-remove
:feat/kuma-sync-smoke
:feat/kuma-sync-deploy
:ci-image/claude-2.1.303
:feat/kuma-sync
:docs/uptime-kuma-plan
:chore/remove-autokuma
:fix/uptime-kuma-ipv6
:feat/autokuma-pilot-update
:fix/drop-flux-image-automation-alert
:feat/autokuma-pilot
:feat/autokuma
:fix/uptime-kuma-fail-guard
:fix/uptime-kuma-setup-diagnostics
:feat/uptime-kuma-vps
:ci/ansible-image-hvac
:claude/plan-homelab-konairius-main
:fix/kubejobfailed-resolve-on-later-success
:claude/homeassistant-konairius
:claude/ha-config-sync-identity
:feat/site-base-domain
:claude/review-bot-repos-konairius
:claude/authentik-konairius-images
:claude/notes-renovate-konairius
:claude/vsftpd-konairius-image
:claude/registry-bot-read-scope
:claude/registry-bot
:ci-image/claude-2.1.302
:claude/review-bot-approved
:claude/review-bot-backends
:fix/wp-pg-recovery-source
:feat/review-bot-status
:worktree-hcloud-wg-site
:node-dns-via-k8s-gateway
:chore/remove-paperclip
:worktree-k8s-gateway-chart-4
:fix/review-bot-approve-with-unverified
:chore/remove-wiki-maintenance-ci
:fix/review-bot-unique-tag
:fix/review-bot-rereview
:fix/review-bot-build-trigger
:fix/review-bot-backoff-cap
:fix/review-bot-rate-limit
:chore/disable-old-pr-review
:feat/review-bot-deploy
:feat/review-bot-service
:feat/pr-review-mistral
:fix/gitea-mcp-public-gitea-url
:alert-fix/issue-1242
:alert-fix/issue-1241
:fix/gitea-mcp-command
:feat/gitea-mcp
:claude/netbird-service-sync-pin
:claude/gitea-public
:feat/embed-knn-bench
:claude/pr-review-latest-cli
:ci-image/claude-2.1.296
:chore/decommission-openproject
:claude/pr-review-central
:feat/openproject-authentik-oidc
:fix/alloy-syslog-udm-cef-regex
:alert-fix/issue-1217
:alert-fix/issue-1214
:atlas/ren-1363-openproject-seeder-order
:atlas/ren-1367-gitea-1.27
:atlas/ren-1367-gitea-pre-upgrade-snapshot
:atlas/ren-1363-openproject
:atlas/ren-1345-ops-image-jq
:atlas/ren-1345-hermes-prometheus-read
:atlas/ren-1345-bridge-agent-secrets
:atlas/ren-802-retire-sml2mqtt
:atlas/ren-953-remove-legacy-users
:atlas/ren-1307-edge1-register
:atlas/ren-1307-edge1-cred-receiver
:atlas/ren-953-controller-ha-cert
:atlas/ren-1256-prune-shellies-secret
:atlas/ren-953-ha-mqtt-cert-sync
:atlas/ren-1256-adopt-shellies-secret
:atlas/ren-1203-eso-gitea-namespace
:atlas/ren-1203-gitea-package-retention
:atlas/ren-1196-agent-runtime-tzdata
:atlas/ren-1017-remove-legacy-shellies
:atlas/ren-1017-ht-wake-reland
:atlas/ren-1017-shelly-30
:atlas/ren-1167-revert-1183
:alert-fix/issue-1184
:atlas/ren-1017-ht-wake
:atlas/ren-1017-shelly-group5c
:atlas/ren-1017-shelly-group5b
:atlas/ren-1080-controller-1d03144-rotate-hold
:atlas/ren-1017-shelly-group5
:atlas/ren-1017-shelly-group4
:atlas/ren-1053-controller-a307693
:atlas/ren-1017-shelly-group3
:atlas/ren-1017-shelly-group2
:atlas/ren-1017-shelly-group1
:atlas/ren-1017-device-list
:atlas/ren-1017-shelly-accounts
:atlas/ren-953-agents-read-paperclip-pod
:atlas/ren-953-agents-read
:atlas/ren-953-ha-mqtt-tls
:atlas/ren-953-ha-account
:atlas/ren-953-evcc-cert
:atlas/ren-953-evcc-account
:atlas/ren-953-z2m-cert
:atlas/ren-953-z2m-account
:atlas/ren-953-health-probe-cert
:atlas/ren-931-agent-shelly-manager
:atlas/ren-900-controller-bump
:atlas/ren-900-mosquitto-dynsec
:atlas/ren-888-revoke-test-account
:atlas/ren-888-mqtt-account-controller
:atlas/ren-841-remove-repair-job
:atlas/ren-841-k8s-plugin-termination-receipt
:atlas/ren-841-lease-receipt-repair
:atlas/ren-802-suspend-open3e-int-rotator
:atlas/ren-826-remove-read-job
:atlas/ren-826-room-setpoint-read
:atlas/ren-809-remove-capture
:atlas/ren-809-open3e-fbh-capture
:atlas/ren-723-authentik-2026.8.3
:atlas/ren-772-remove-rekey-job
:atlas/ren-772-wp-repo4-rekey
:atlas/ren-722-mdns-relay-v191-attach
:atlas/ren-723-openbao-rolling
:atlas/ren-722-dhcp-lease-renew
:atlas/ren-722-cni-plugins-installer-v1.9.1
:atlas/ren-723-influxdb-snapshot
:atlas/ren-722-cni-plugins-v1.9.1
:atlas/ren-722-job-force-annotations
:atlas/ren-717-matrix-bridge-1791195981
:atlas/ren-702-paperclip-cap-kill
:atlas/ren-691-matrix-bridge-1791179547
:atlas/ren-685-matrix-bridge-1791177680
:ci-image/claude-2.1.289
:atlas/ren-671-matrix-bridge-1791152484
:atlas/ren-663-matrix-public
:atlas/ren-587-matrix-bridge
:atlas/ren-567-authentik-grant-types
:atlas/ren-567-mas
:atlas/ren-627-edge1-ssh-egress
:atlas/ren-621-loki-read-gateway
:atlas/ren-603-pclp-pg-memory
:atlas/ren-583-gitea-pvc-volumename
:atlas/ren-583-gitea-volume-60gi
:atlas/ren-563-claude-session-resume
:atlas/ren-563-revert-1111
:atlas/ren-567-matrix
:atlas/ren-563-acpx-session-resume
:atlas/ren-544-argus-token-v3
:atlas/ren-539-atlas-token-v3
:atlas/ren-541-claude-auto-memory
:atlas/ren-540-hestia-token-v3
:atlas/ren-528-review-bot-verify-repo
:atlas/ren-533-shelly-manager-probe
:atlas/ren-525-rotate-argus-token
:atlas/ren-509-rotate-agent-tokens
:atlas/ren-487-hubble-relay
:atlas/ren-488-govulncheck
:atlas/ren-487-agent-pod-egress
:atlas/ren-453-retire-immich-library
:atlas/ren-451-restore-abort
:atlas/ren-451-restore-test-skip-cnpg
:alert-fix/issue-1095
:atlas/ren-442-restore-capacity-gate
:z2m-ws90-converter
:alert-fix/issue-1089
:atlas/ren-419-ephemeral-wear-alert
:alert-fix/issue-1084
:alert-fix/issue-1081
:atlas/ren-414-agent-kubectl-sa
:atlas/ren-411-agent-gitea-egress
:atlas/ren-409-paperclip-14769
:atlas/ren-405-k8s-plugin-dist
:atlas/ren-401-kaniko-oom
:atlas/ren-401-paperclip-patched-image
:z2m-memory-limit
:atlas/ren-350-beets-write-retry
:fix/navidrome-native-api
:atlas/ren-350-paperclip-lidarr-cnp
:atlas/ren-350-beets-retry-skips
:atlas/ren-350-beets-write
:atlas/ren-350-beets-phase2
:atlas/ren-350-beets-cronjob
:atlas/ren-339-restore-test-teardown
:atlas/ren-339-restore-roll
:atlas/ren-339-restore-plugin
:atlas/ren-339-ha-backup-cleanup
:atlas/ren-339-ha-restore-test
:atlas/ren-315-renovate-groups
:atlas/ren-315-renovate-tool-install
:atlas/ren-107-retention-divergence-alert
:atlas/ren-159-remove-ren28-negative-probes
:atlas/ren-302-claude-agent-acp
:atlas/ren-298-agent-sandbox-v0.5.6
:atlas/ren-294-ical-proxy-926ead0
:atlas/ren-286-agent-runtime-own-workflow
:atlas/ren-285-agent-sandbox-labels
:atlas/ren-286-agent-runtime-images
:atlas/ren-285-agent-sandbox
:atlas/ren-148-paperless-ingress-scoping
:atlas/ren-93-promql-gate
:atlas/ren-268-ha-hacs-proxy
:atlas/ren-266-hacs-versions
:atlas/ren-245-ha-critical-alerts
:atlas/ren-243-ha-window
:feat/openbao-secret-exists-check
:atlas/ren-239-ical-proxy-main-73b5d97
:atlas/ren-238-ical-proxy-main-4783abe
:atlas/ren-201-ical-proxy-gitea-image
:atlas/ren-216-renovate
:atlas/ren-152-wal-backlog-retune
:atlas/ren-198-pin-kps-chart
:atlas/ren-176-ha-pg-walstorage
:atlas/ren-166-cilium-verdict-metric
:atlas/ren-7-alert-contacts
:atlas/ren-177-velero-cephfs-readonly-backuppvc
:feat/paperclip-api-door
:atlas/ren-186-cost-ledger-sync
:atlas/ren-183-yaml-anchors
:atlas/ren-161-promtool-ci
:atlas/ren-163-ceph-nearfull-headroom
:atlas/ren-7-restore-audiobooks
:atlas/ren-127-podmonitor-comment
:atlas/ren-165-wal-maxparallel-stage
:atlas/ren-141-ha-pg-32gi
:atlas/ren-147-cilium-agent-metrics-service
:atlas/ren-142-negative-control-probe
:atlas/ren-140-negative-test-probes
:atlas/ren-102-flux-ksm-crs
:atlas/ren-7-pilot-endpointmonitors
:atlas/ren-131-openbao-unavailable-for
:atlas/ren-106-narrow-eso-failed
:atlas/ren-116-probe-citation-path
:atlas/ren-103-scrape-doc-gaps
:atlas/ren-6-imc-deploy
:atlas/ren-100-externalsecret-healthcheck
:atlas/ren-91-imagepolicy-total-order
:atlas/ren-88-ceph-ec-pool-false-page
:atlas/ren-86-paperclip-dependson-monitoring
:atlas/ren-36-prometheus-read-path
:docs/probe-egress-dependency-and-revert-recipe
:docs/paperclip-claude-token
:fix/paperclip-memory
:docs/probe-cnp-egress-and-status-caveats
:feat/ren-21-paperless-app-health-probe
:feat/ren-21-navidrome-app-health-probes
:alert-fix/issue-968
:feat/paperclip-wiki-key
:feat/lidarr
:feat/wiki-api-key-paperclip
:feat/paperclip-signup-off
:feat/paperclip
:feat/netbird-retire-vps-proxy
:feat/navidrome
:feat/immich-bulk-cutover
:feat/immich-bulk-pvcs
:feat/wiki-image-automation
:chore/wiki-image-fact-drafter
:chore/wiki-image-facts-page
:chore/abs-drop-old-books-pvc
:chore/wiki-image-judge-one-request
:feat/abs-books-bulk
:feat/libation-strip-branding
:feat/cephfs-ec-bulk
:feat/open3e-int-broker-user
:feat/wiki-reloader
:chore/wiki-image-phases-4-6
:feat/wiki-anthropic-key
:feat/wiki-service-write-token
:chore/retire-python-wiki-index
:feat/wiki-machine-door
:chore/wiki-phase3-image
:chore/wiki-phase2-image
:chore/wiki-build-1790250017
:feat/wiki-gate
:fix/gitea-egress-wiki
:feat/wiki-service-manifests
:docs/proposal-wiki-web-api
:alert-fix/issue-937
:fix/alertmanager-info-inhibitor
:feat/cephx-allowed-ciphers-aes256k
:feat/cephx-drop-prior-csi-keys
:ci/wiki-consolidate-tilde-paths
:feat/cephx-csi-aes256k
:ci/wiki-consolidate-in-ci
:chore/talos-1.13.10
:feat/drain-tolerant-singletons
:ci/wiki-distill-skip-empty
:ci/wiki-audit-script
:fix/k8s-gateway-oci-chart
:docs/network-traffic-classes-as-built
:feat/node-ip-vlan-46
:alert-fix/issue-920
:feat/bird-attached-node0
:feat/node-vlan-46-link
:chore/cni-drop-stage-labels
:feat/cni-sole-writer-converge-b2
:feat/cni-sole-writer-converge-b1
:chore/cni-stage-k8s-1
:fix/whereabouts-reconciler-cordon
:chore/cni-stage-k8s-2
:chore/cni-stage-k8s-3
:feat/cni-staged-sole-writer
:feat/netbird-service-sync-phase2
:feat/netbird-service-sync-phase1
:chore/gitea-namespace-phase3
:feat/gitea-namespace-phase2
:feat/gitea-namespace-phase1
:ci-image/claude-2.1.280
:fix/ci-claude-refresh-mixed-pins
:fix/align-ci-claude-pins
:fix/ci-claude-bump-token-newline
:worktree-fix-paperless-memory-limit
:alert-fix/issue-897
:alert-fix/issue-896
:fix/wiki-maintenance-merge-verify
:feat/pick-model-newest-among-comparable
:feat/pick-model-typesafe
:fix/wiki-maintenance-rebase-push
:fix/wiki-maintenance-strip-secrets
:fix/wiki-maintenance-image-2.1.278
:feat/wiki-maintenance-ci
:fix/wiki-index-commit-tags
:fix/wiki-index-pin-digest-2
:alert-fix/issue-880
:fix/wiki-index-tree-paging
:fix/wiki-index-pin-digest
:fix/wiki-index-strip-credentials
:fix/gitea-webhook-egress-wiki-index
:fix/wiki-index-openbao-ingress
:feat/wiki-index-deploy
:feat/wiki-index-image
:fix/eso-allow-ai
:feat/wiki-embed
:fix/multus-only-cni-writer
:fix/cilium-cni-uninstall
:feat/onebase-room-telemetry
:fix/external-dns-scrape-policy
:feat/dns-monitoring
:fix/external-dns-annotation-prefix
:fix/ftp-scanner-probe
:fix/libation-accounts-persistence
:fix/libation-pin-14.2.1
:feat/ceph-read-affinity
:fix/bird-local-cidr
:feat/single-pod-table
:docs/traffic-classes
:feat/podpod-rules
:fix/bird-static
:fix/bird-digest
:feat/bird-mesh2
:feat/bird-kubectl
:feat/bird-mesh
:feat/bird-image-api
:feat/bird-daemonset
:alert-fix/issue-844
:feat/bird-image
:alert-fix/issue-843
:feat/pod-egress-vlan47
:docs/576-rejected-options
:feat/antrea-eval
:feat/nodeip-pod0
:feat/cilium-native-pod0
:feat/bgp-peer-ingress
:feat/bgp-listen-ingress
:feat/ingress-static-addressing
:feat/k8s-net-split-phase-a
:feat/cilium-pin-devices
:chore/ci-k8s-2026-09-08
:feat/flux-2.9.5
:feat/ci-tool-pins
:feat/openbao-seal-key-bootstrap
:feat/openbao-static-seal
:fix/openbao-alerts-immediate
:feat/intel-gpu-dashboard
:feat/intel-gpu-exporter
:feat/intel-gpu-monitoring-resource
:fix/reloader-configmap-annotations
:netbird-proxy-protocol-digest
:netbird-proxy-protocol-deploy
:netbird-proxy-protocol
:netbird-proxy-services-uid
:netbird-proxy-services-deploy
:netbird-proxy-services
:proxy-watchdog-cooldown
:proposal-node-roll-downtime
:alert-fix/issue-808
:lapi-transport-phase-2
:ceph-address-ranges
:fix/arp-flux-second-nic
:rehearsal-san
:osd-partlabel-no-ceph
:lapi-transport-post-crds
:san-host-device-nad
:san-rollout
:san-role-rename
:ceph-20-cutover
:rebuild-tooling
:apply-set-hygiene
:rebuild-image-resilience
:cold-rebuild-ordering
:fix/bootstrap-honour-vm-state
:chore/remove-paperless-eval
:issue-fix/789-cilium-node-ula
:issue-fix/787-mdns-relay-supervisor
:trmnl-firmware-sync-off
:trmnl-device-tls
:vmtest-flux
:eval-script-fixes
:alert-fix/issue-780
:worktree-eval-script-fixes
:eval-out-of-iac
:paperless-eval-jobs
:paperless-eval-fixes
:paperless-eval-instance
:crowdsec-tailer-polling
:crowdsec-alerting
:llama-single-slot
:llama-ctx-revert
:arm-crowdsec-proxy-1
:fix-proxy-deploy-triggers
:llama-ctx-fix
:arm-crowdsec-proxy-2
:llama-ctx-assist
:crowdsec-metrics-dashboard
:alert-fix/issue-761
:embed-batch-fix
:crowdsec-lapi-service-annotations
:ha-llm-agent
:paperless-eval
:crowdsec-bouncer-unpack-on-host
:embed-bgem3
:crowdsec-bouncer-fetch-controller
:crowdsec-edge-lapi
:alert-fix/issue-750
:embed-pvc
:immich-drop-pgvectors
:fix-stale-migration-docs
:embed-oom
:embed-eval
:paperless-reloader
:close-paperless-data-migration
:paperless-llm
:paperless-3x
:llama-gate-flow
:llama-authentik-gate
:alert-fix/issue-726
:llama-single-alias
:llama-alias-order
:llama-model-alias
:ai-eval
:remove-netbird-backup
:llama-thinking-alias
:llama-split-embed
:netbird-backup-vacuum-into
:llama-server
:intel-gpu-device-plugin
:ceph-osd-by-label
:alert-fix/issue-714
:alert-fix/issue-712
:cilium-track-untracked-settings
:proposal-cilium-single-owner
:fix-cilium-bootstrap-seed
:woodpecker-agent-probe
:add-missing-probes
:paperless-http-probes
:gatus-hardening
:gatus-drop-file-check
:gatus-config-reload
:drop-pbs2-gatus
:generic-blackbox-alert
:probe-ci-openbao
:cleanup-nas-1-remnants
:ci-image/claude-2.1.250
:woodpecker-deployment-dispatch-rest
:woodpecker-deployment-dispatch-pilot
:fix-monitor-selector-comments
:fix-wear-alert-design
:trim-comments-authentik
:trim-comments-apps
:trim-comments-helm
:trim-comments-netpol
:trim-comments-infra
:trim-comments-talos
:alert-fix/issue-675
:trim-manifest-comments
:drop-unused-barman-creds
:hetzner-creds-shared-path
:ephemeral-framing
:disk-dashboard-smart
:smartctl-privileged
:smartctl-seccomp
:smartctl-exporter
:disk-dashboard-status
:disk-dashboard
:ci-image/claude-2.1.247
:kaniko-fork-rest
:kaniko-replacement
:proposal-traffic-classes
:runbook-remote-rebuild-possible
:runbook-cold-rebuild-baremetal
:alert-fix/issue-657
:velero-stale-60h
:talos-1-13-9
:ceph-mon-disk-warn-default
:ceph-san-pool-widen
:no-ipv6-on-vlan-parents
:alert-fix/issue-649
:alert-fix/issue-645
:openbao-alerting
:openbao-ha-3-replicas
:alert-fix/issue-635
:ceph-san-cleanup
:ceph-san-nad
:whereabouts-ipam
:talos-1-12-11
:mdns-relay
:netbird-rotate-migration
:runbook-stale-sockets
:drop-monitoring-agent
:ansible-drop-dead-plays
:ansible-rotate-netbird
:ansible-drop-pve
:tofu-state-verify
:alert-fix/issue-603
:drop-decommissioned-dns
:tofu-drop-proxmox-vm
:drop-pve-monitoring
:talos-factory-installer
:cilium-reloader
:drop-talos-image-seeding
:cilium-vlan-bypass
:restore-replicapool-size
:restore-cephfs-metadata-size
:alert-fix/issue-592
:ceph-readd-neptune
:k8s-3-baremetal
:ceph-drop-neptune
:alert-fix/issue-591
:ceph-readd-saturn
:alert-fix/issue-590
:remove-vm-605
:remove-vm-151
:k8s-2-baremetal
:ceph-remove-k8s-2
:baremetal-conversion-runbook
:restore-after-jupiter
:alert-fix/issue-579
:ceph-readd-k8s-1
:k8s-1-network-fix
:alert-fix/issue-573
:k8s-1-ephemeral-on-crucial
:alert-fix/issue-571
:alert-fix/issue-569
:immich-window-scaledown
:ceph-exclude-k8s-1
:crowdsec-cpu-requests
:jupiter-baremetal-u2
:velero-restore-test-monthly
:ws90-reporting-config
:alert-fix/issue-562
:fix-ws90-merge-overclaim
:fix-ws90-debounce-rationale
:worktree-z2m-2.13.0-ws90-debounce
:kaniko-no-debug-image
:alert-fix/issue-557
:alert-fix/issue-554
:alert-fix/issue-550
:bump-stale-ci-images
:document-pool-no-redundancy-meaning
:fix-ci-pool-blocks-osd-maintenance
:rotate-cephx-daemon-keys
:fix-ceph-health-alert
:repoint-ci-workspaces
:ci-throwaway-cephfs
:rollout-archive-timeout
:archive-timeout-gf-pg
:reduce-pg-wal-fpi
:reduce-wal-segment-padding
:fix-prometheus-cardinality
:fix-barman-sidecar-visible
:feat-paperless-data-repoint
:feat-paperless-data-block
:fix-cnpg-write-tuning
:fix-emptydir-tmpfs
:fix-trmnl-renderer-tmpfs
:feat-ha-recorder-db-url
:alert-fix/issue-525
:fix-cnpg-backup-alerting
:feat-ha-recorder-postgres
:fix-ceph-mon-write-amplification
:fix-ceph-replica-size-2
:fix-ceph-deferred-write-amplification
:fix-326-noise-log-suppression
:fix-381-z2m-discovery
:decommission-rustfs-lxc
:document-hairpin-id-diff
:fix-rustfs-shim-replace
:fix-rotator-woodpecker-url
:alert-fix/issue-510
:bump-woodpecker-cli
:migrate-woodpecker-stage3
:migrate-woodpecker-stage2
:fix-eso-woodpecker-namespace
:migrate-woodpecker-namespace
:ceph-mon-data-avail-warn
:revert-image-gc-thresholds
:fix-ceph-toolbox-and-gc-thresholds
:fix-cilium-policy-map-exhaustion
:drop-stale-hetzner-dns
:fix-outpost-callback-path
:bump-ci-k8s-pins
:fix-wordpress-config-extra
:wordpress-renner-uno
:fix-authentik-double-passkey-touch
:pin-ical-proxy-image
:fix-trmnl-renderer-reloader
:fix-trmnl-render-lang
:fix-trmnl-session-expiry
:fix-trmnl-graphite-theme
:fix-trmnl-token-lifetime
:fix-trmnl-renderer-runtime
:feat-trmnl-renderer
:fix-trmnl-lb-address
:feat-trmnl-terminus
:retire-dead-monitoring
:heating-can-supervisorctl
:fix-native-teardown
:edge-capability-groups
:heating-can-image
:edge-bootstrap-selfcontained
:prometheus-pve-hostnames
:inventory-pve-hostnames
:chrony-allow-ipv6
:ntp-vrrp-linklocal-and-dad-sequencing
:ntp-service-address-health-gated
:ntp-anycast-capture-drift
:ntp-health-clock-correctness
:chrony-comment-correction
:worktree-chrony-makestep
:ci-k8s-validate
:rotator-repin
:mosquitto-rotate-health
:alert-fix/issue-454
:alert-fix/issue-452
:mosquitto-rotation-proposal
:mosquitto-openbao
:mosquitto-drop-apk
:paperless-drop-apk
:cni-plugins-image
:multus-drop-apk
:fix-jq-comment
:rename-alpine-jq
:fix-ci-yaml
:z2m-seed-drop-apk
:z2m-interview-watchdog
:alert-fix/issue-439
No Reviewers
Labels
Clear labels
apollo
atlas
clio
daedalus
hestia
Hermes expert: Immich, Audiobookshelf, Libation, Navidrome, Music Assistant
Hermes expert: Talos, Flux, network, Authentik, Matrix, monitoring
Hermes expert: Paperless, wiki, ical-proxy, TRMNL, websites
Hermes expert: Gitea, Woodpecker, Renovate, review-bot, Hermes
Hermes expert: Home Assistant, IoT, MQTT, ESPHome, voice
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: konairius/homelab#1296
Reference in New Issue
Block a user
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.
The changes from the Hetzner restore test (runs 23–29): the production configuration boots a cluster on new hardware and restores itself, unchanged, and the dependency graph says what the services actually need.
Do not merge in one step. Several objects move between pruned Kustomizations (pruning the Velero HelmRelease out of
infrastructurewould uninstall Velero), and some changes need state in production first. The rollout order is below.What changes
Site facts in the Talos site patches
cilium-siteandk8s-gateway-siteConfigMaps as Talos inline manifests per site; the HelmReleases read them viavaluesFrom(pod routing and native-routing CIDRs, k8s-gateway upstream).advertisedSubnetsand nodeIP subnets per site; IPv4 first invalidSubnets.hardware.renner.uno/intel-gpu,net.renner.uno/iot-vlan; bird runs only where the site setsnet.renner.uno/pod-table=47.Restore from backup, without manual steps
restore-<schedule>Kustomization per Velero Schedule, Gitea first; each app depends on its own restore.<x>-g<timestamp>; recovery reads the prefix with the newest base backup. bootstrap.sh writesflux-system/cnpg-pathsbefore Flux starts; the 14 ObjectStores live inkubernetes/cnpg-object-storeswith Flux substitution. The plugin's empty-archive check stays on.Dependency graph (
scripts/flux-graph.shdraws it)wait: true); otbr suspended.infrastructure-inhouse(waits for Gitea).home-assistant-iot, so HA does not wait on the IoT VLAN.Restore test harness (
bootstrap.sh hcloudtest,FLUX_SOURCE=restore-test,hcloudclean)cluster.yaml+site-hcloud.yaml+hcloud-N.yaml, contained by an egress firewall; Flux from the GitHub mirror throughkubernetes/restore-test/flux-root.yaml, whose patches are the test's deviations (Velero ReadOnly, rotators suspended, no NetBird writes, no Gitea egress).renner-uno-k8s-cnpg-rtest, created and deleted by the harness.Rollout order (production)
site-homelab.yamlandk8s-{1,2,3}.yaml. Check that the nodes carryhardware.renner.uno/intel-gpu,net.renner.uno/iot-vlanandnet.renner.uno/pod-table=47, and that thecilium-siteandk8s-gateway-siteConfigMaps exist in kube-system (Talos creates inline manifests only on a config change;talosctl upgrade-k8sif needed).flux-system/cnpg-pathsby hand with the current prefixes as both source and archive, so the running clusters keep archiving where they do:CNPG_<X>_SOURCE/_ARCHIVE=s3://renner-uno-k8s-cnpg/<x>-pgfor ak, ha, im, mx, pprl, tr, and.../wp-pg-woodpeckerfor wp.infrastructure→crowdsec,external-dns-unifi,netbird-ingress,velero(+ ExternalSecrets frominfrastructure-crds),velero-schedulesinfrastructure→infrastructure-inhouse(bird, netbird-service-sync)cnpg-object-stores(all ObjectStores now carryprune: disabled)home-assistant→home-assistant-iotrestore-<schedule>Restore does in a running production cluster whose PVCs already exist. Not verified in production.externalClusterson a live CNPG Cluster restarts its pods. Check on one cluster first.Evidence
Restore test run 29 (2026-10-16) on this branch: cluster, OpenBao restore, all Velero restores and all CNPG recoveries succeeded (the empty-archive check passed against the new prefixes; woodpecker, which failed in run 28, recovered). Failures found there are fixed on the branch: the home-assistant ↔ home-assistant-iot Secret cycle, the radius Service blocking monitoring-rules, Secret ordering of the infrastructure services. Expected on Hetzner: llama-server/wiki (no iGPU), music-assistant/matter-server (no IoT VLAN). Not yet tested end to end: the home-assistant chain (HA, evcc, trmnl, zone-configurator, speech-to-phrase), which run 29 did not reach.
🤖 Generated with Claude Code
Hetzner rejects a firewall rule with more than 100 destination prefixes ("rules[2].destination_ips: value required to be smaller"; the limit is not in the API spec or the FAQ — measured on an unattached firewall: 100 accepted, 101 rejected). Run 24 failed on the single rule carrying all 245 complement prefixes. The tcp allow-list is now one rule per 100. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>The infrastructure Kustomization health-checked the openbao HelmRelease, which is Ready as soon as the chart is installed, sealed or not. On a cold cluster infrastructure-crds then applied the openbao ClusterSecretStore while OpenBao was unreachable and then sealed ("503 Vault is sealed"). External Secrets backs the store off exponentially, so every ExternalSecret stayed "ClusterSecretStore not ready" for minutes after OpenBao was restored and unsealed; Velero's pod could not mount cloud-credentials-hetzner meanwhile (restore rehearsal run 27; ~15 min in run 22). The openbao StatefulSet is now a health check too. Its readiness probe is `bao status`, which fails while sealed, and podManagementPolicy is OrderedReady, so 3/3 ready means every replica is unsealed. No cycle: OpenBao's PVC comes from infrastructure-ceph-cluster, which does not depend on infrastructure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>bird fills routing table 47, which exists only where the site patch routes pod traffic into it (site-homelab.yaml RoutingRuleConfig), and renders its config from node annotations that only that site and the k8s-N patches set (pod0, egress gateway). On Hetzner the template rendered <no value> and the init container crash-looped ("syntax error, unexpected '<'", run 28). site-homelab.yaml labels its nodes net.renner.uno/pod-table=47 and the DaemonSet selects on it; on a site without table 47 it has no pods. Production rollout order: the 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. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A CNPG cluster restored from barman archived back into the location it recovered from. plugin-barman-cloud's restore job checks the archive target (plugins[] ObjectStore + serverName) and stops with "Expected empty archive" when it holds WAL, which after a disaster it always does. It has no exception for target == recovery source (internal/cnpgi/restore/restore.go, v0.15). Run 28 hit it on wp-pg; the other six never got that far. The check stays. Instead, archive and source become two ObjectStores whose paths are chosen per incarnation: - kubernetes/cnpg-object-stores/: all 14 ObjectStores (<x>-store archives, <x>-store-source is read by bootstrap.recovery), in a Kustomization of their own with postBuild.substituteFrom: cnpg-paths. Nothing else lives there: substitution blanks every ${...}, which is why it is not on the app Kustomizations (home-assistant's scripts, the Grafana dashboards). The ConfigMap is not optional; without it the paths would render empty. - bootstrap.sh writes cnpg-paths before Flux starts, once per incarnation (an existing one is kept): CNPG_<X>_SOURCE the prefix among <x>, <x>-g<14 digits> and the store's cnpg.renner.uno/source-prefixes whose <x>/base/ holds the newest base backup CNPG_<X>_ARCHIVE <x>-g<UTC timestamp>, new and so empty Every ScheduledBackup has immediate: true, so a new incarnation has a base backup in its own prefix minutes after it starts, and a later recovery picks it. S3 access is curl --aws-sigv4 with the restore key (already in bootstrap.sh's secret list), so the CI image needs no new tool. - The restore test archives to renner-uno-k8s-cnpg-rtest, created by the flux phase and emptied and deleted by hcloudclean. A test incarnation with a base backup in the production bucket would be its newest, and the next real recovery would read the test's data. - The six clusters that recovered from their archive store now name <x>-store-source in externalClusters. serverName stays the cluster name everywhere. The app Kustomizations depend on cnpg-object-stores, which depends on infrastructure-cnpg-barman. Verified against the bucket, read-only, 2026-10-16: - the restore key lists renner-uno-k8s-cnpg and can create and delete a bucket (renner-uno-k8s-cnpg-rtest created and deleted again); - the listing parser on real responses, top level and an encoded nested prefix; for wp-pg it picks wp-pg-woodpecker (newest 20261016T024000) over wp-pg (20260818T023502); - leftover test serverNames (ak-pg-rtest, im-pg-rtest, ha-pg-restore-test, pprleval-pg) hold no base backups and match no candidate pattern. shellcheck clean; all seven apps and cnpg-object-stores build; the render holds exactly the 14 expected variables. Production rollout, one time: 1. Create flux-system/cnpg-paths with the current prefixes as both source and archive (ak-pg, ha-pg, im-pg, mx-pg, pprl-pg, tr-pg; wp-pg-woodpecker), so the running clusters keep archiving where they do. 2. Move the ObjectStores in two phases (add in cnpg-object-stores, then drop from the apps). All 14 now carry prune: disabled; before this only ak, im and pprl did. 3. Whether changing externalClusters on a live Cluster restarts its pods is not verified; check on one cluster first. Older generations are not cleaned up: retention applies only to the current archive prefix. A cleanup script is planned separately. RECOVERY.md: the table describes the new layout; the manual restore drill reads <x>-store-source. That drill wrote 3 WAL files to ak-pg/ak-pg-rtest on 2026-07-25 despite isWALArchiver: false, so its "only ever reads" claim does not hold; not changed here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>WIP: restore test fixes — site facts, self-restore, CNPG archive generations, dependency graphto Restore test fixes: site facts, self-restore, CNPG archive generations, dependency graphToo large to review (the review bot runs out of context). Split into 9 stacked PRs, each based on the previous one, to merge in order: #1297, #1298, #1299, #1300, #1301, #1302, #1303, #1304, #1305. Together their tree is identical to this branch (
9c35f95f).Pull request closed