Commit Graph
4354 Commits
Author SHA1 Message Date
claude-bot 5a7b122157 Merge remote-tracking branch 'origin/master' into feat/pve-exporter-token-rotation
# Conflicts:
#	kubernetes/infrastructure/openbao/rotation/kustomization.yaml
2026-07-19 09:55:56 +02:00
k.renner 2d57420e1b Merge pull request 'feat(cloudflare): automated api-token rotation (Class-B) — SUSPENDED/UNTESTED' (#305) from feat/cloudflare-token-rotation into master
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#305
2026-07-19 07:54:41 +00:00
claude-botandClaude Opus 4.8 fd85dbb901 fix(proxmox-rotation): python:alpine (apk fails non-root; lesson from netbird test)
Same fix proven on netbird (#307/#308): alpine+apk -> python:3.13-alpine stdlib so it runs under the non-root restricted PSA. Uses a dedicated no-verify SSL context for the self-signed Proxmox API only (OpenBao stays plain http). Still suspended + untested; the privsep=0 caveat + brief monitoring gap on DELETE+recreate remain documented in the header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 09:13:55 +02:00
claude-bot 3d6caa75bf merge master (netbird kustomization) 2026-07-19 09:13:55 +02:00
claude-botandClaude Opus 4.8 20a1998b95 fix(cloudflare-rotation): python:alpine (apk fails non-root; lesson from netbird test)
Applies the same fix proven on netbird (#307/#308): switch alpine+apk to python:3.13-alpine stdlib so the job runs under the non-root restricted PSA. CF's roll is in-place (PUT /tokens/{id}/value) so no key-settings pitfall like netbird had. Still suspended + untested (needs the bootstrap admin-token + token-id).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 09:12:24 +02:00
claude-bot 589f0e0f0b merge master (netbird kustomization) 2026-07-19 09:12:24 +02:00
k.renner 084644da43 Merge pull request 'fix(netbird-rotation): match key settings (ephemeral+dns), fill group, enable' (#308) from fix/netbird-rotation-key-settings into master
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#308
2026-07-19 07:08:02 +00:00
claude-botandClaude Opus 4.8 bbdd488710 fix(netbird-rotation): match key settings (ephemeral+dns), fill group, enable
Testing #304 end-to-end revealed the minted setup key had the WRONG settings vs the ingress key: ephemeral=false (should be true — peers must be auto-reaped; these DaemonSet peers re-enroll fresh each restart) and allow_extra_dns_labels=false (should be true — the DNS capability). Remediated live and fixed the payload:
- add ephemeral: true, allow_extra_dns_labels: true to the setup-keys POST.
- NB_AUTO_GROUPS = d8umic2oc9cs73d4e1f0 (k8s-ingress-router).
- KEEP the 1y expiry (intentional: an auto-rotated key should expire so a broken rotation surfaces — do NOT match the original's never-expire).
- suspend: false (tested + enabled).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 09:06:50 +02:00
k.renner 30561a62a3 Merge pull request 'fix(netbird-rotation): use python:alpine — apk install fails under non-root PSA' (#307) from fix/class-b-rotation-image into master
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#307
2026-07-19 06:48:43 +00:00
claude-botandClaude Opus 4.8 71c4b33374 fix(netbird-rotation): use python:alpine (apk install fails under non-root PSA)
Testing #304 revealed the runtime 'apk add curl jq' fails ('Unable to lock database: Permission denied') because the job runs non-root (runAsUser 65534) and the openbao ns enforces restricted PSA — apk needs root. Switch to python:3.13-alpine and do the HTTP/JSON via stdlib (urllib/json), no package install, non-root-safe. Same fix must be applied to the still-open cloudflare (#305) and proxmox (#306) Class-B jobs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 08:45:13 +02:00
k.renner ea9eed7216 Merge pull request 'feat(netbird): automated setup-key rotation (Class-B, openbao-ns) — SUSPENDED/UNTESTED' (#304) from feat/netbird-setup-key-rotation into master
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#304
2026-07-19 06:38:32 +00:00
claude-botandClaude Opus 4.8 69ecab3a06 feat(proxmox): automated pve-exporter token rotation (Class-B, openbao-ns) — SUSPENDED
Rotates pve-exporter@pve!monitoring via the Proxmox API. Proxmox has no in-place secret roll, so DELETE+re-create (privsep=0), regenerate pve.yml with the new token_value, patch OpenBao. openbao-ns pattern; per-secret rotator-proxmox role reads a bootstrap privileged Proxmox token + patches pve-exporter-config. refreshInterval 1h->10m; Reloader restarts pve-exporter.
SHIPPED SUSPENDED + UNTESTED (riskiest Class-B): needs a bootstrap privileged Proxmox token at homelab/infrastructure/secret-rotators-bootstrap/proxmox, VERIFICATION that the token uses privsep=0 (else re-grant its ACL after re-create), and awareness of the brief monitoring gap during DELETE+create. Test before spec.suspend=false.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 00:11:22 +02:00
claude-botandClaude Opus 4.8 0ddef38d31 feat(cloudflare): automated api-token rotation (Class-B, openbao-ns) — SUSPENDED
Rolls the cert-manager DNS-01 Cloudflare token in place (PUT /user/tokens/{id}/value) then patches OpenBao. openbao-ns pattern; per-secret rotator-cloudflare role reads a bootstrap admin-token+token-id and patches the api-token path. refreshInterval 1h->10m; no Reloader (cert-manager reads fresh per challenge).
SHIPPED SUSPENDED + UNTESTED: needs the bootstrap admin-token (Edit User API Tokens perm) + the cert-manager token-id provisioned to homelab/infrastructure/secret-rotators-bootstrap/cloudflare, then a manual test (issue/renew a cert) before spec.suspend=false. Risk: a bad roll breaks TLS issuance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 00:08:32 +02:00
claude-botandClaude Opus 4.8 1fc2f84b74 feat(netbird): automated setup-key rotation (Class-B, openbao-ns) — SUSPENDED
First Class-B rotation: calls the self-hosted NetBird mgmt API to mint a fresh reusable setup key, then patches OpenBao (ESO syncs, Reloader restarts the netbird-ingress DaemonSet to re-enroll). openbao-ns pattern; per-secret rotator-netbird role/policy that reads a bootstrap NetBird PAT + patches the setup-key path. refreshInterval 1h->10m.
SHIPPED SUSPENDED + UNTESTED: needs (1) the bootstrap PAT provisioned to homelab/infrastructure/secret-rotators-bootstrap/netbird, (2) NB_AUTO_GROUPS filled with real NetBird group IDs, (3) a manual on-demand test, before spec.suspend is set false. Class-B template for the cloudflare + proxmox rotations to follow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-19 00:06:29 +02:00
gitea_admin b173f64976 Merge pull request 'feat(crowdsec): automated bouncer-key rotation (openbao-ns)' (#303) from feat/crowdsec-bouncer-key-rotation into master
ci/woodpecker/cron/update-all Pipeline failed
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#303
2026-07-18 21:27:05 +00:00
claude-bot 61456ddccc Merge remote-tracking branch 'origin/master' into feat/crowdsec-bouncer-key-rotation
# Conflicts:
#	kubernetes/infrastructure/openbao/rotation/kustomization.yaml
2026-07-18 23:26:42 +02:00
claude-bot 6d28ab21ea Merge remote-tracking branch 'origin/master' into feat/crowdsec-bouncer-key-rotation
# Conflicts:
#	kubernetes/infrastructure/openbao/rotation/kustomization.yaml
2026-07-18 23:24:43 +02:00
k.renner d09d458235 Merge pull request 'feat(authentik): automated SECRET_KEY rotation (openbao-ns)' (#302) from feat/authentik-secret-rotation into master
Reviewed-on: k.renner/homelab#302
2026-07-18 21:24:32 +00:00
claude-bot 0443107992 Merge remote-tracking branch 'origin/master' into feat/authentik-secret-rotation
# Conflicts:
#	kubernetes/infrastructure/openbao/rotation/kustomization.yaml
2026-07-18 23:24:06 +02:00
k.renner e0e42f763e Merge pull request 'feat(shelly-manager): automated auth-secret rotation (openbao-ns)' (#301) from feat/shelly-manager-auth-rotation into master
Reviewed-on: k.renner/homelab#301
2026-07-18 21:20:38 +00:00
claude-botandClaude Opus 4.8 ad5ea965e3 feat(crowdsec): automated bouncer-key rotation (openbao-ns)
Rotates crowdsec-bouncer-key:key quarterly + on-demand via the openbao-ns pattern (per-secret rotator-crowdsec-bouncer role/policy, no netpol). Self-sync: the single KV path feeds both the crowdsec + ingress ns Secrets; Reloader restarts crowdsec-lapi. Both ExternalSecrets refreshInterval 1h->10m.
CAVEAT handled: traefik/crowdsec-middleware.yaml has a THIRD hardcoded copy of this key (not Secret-sourced) — that middleware is inert, and a loud guard comment now warns it must be refreshed from OpenBao before re-enabling. Requires the one-time OpenBao bootstrap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 22:09:16 +02:00
claude-botandClaude Opus 4.8 dc42781a47 feat(authentik): automated SECRET_KEY rotation (openbao-ns)
Rotates authentik-secrets:secret-key (Django signing key) quarterly + on-demand via the openbao-ns pattern (per-secret rotator-authentik role/policy, no netpol). Self-sync 2-sided: server + worker read the same secret; Reloader restarts both via global.podAnnotations. smtp-password in the same KV entry is preserved. externalsecret refreshInterval 1h->10m. BLAST RADIUS: invalidates active SSO sessions + in-flight signed links (re-login); downstream LDAP/proxy outposts unaffected. Requires the one-time OpenBao bootstrap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 22:06:58 +02:00
claude-botandClaude Opus 4.8 5c0412b86a feat(shelly-manager): automated auth-secret rotation (openbao-ns)
Rotates shelly-manager-auth (admin-password + api-key) quarterly + on-demand via the openbao-ns pattern (per-secret rotator-shelly-manager role/policy, no netpol). Reloader restarts shelly-manager; externalsecret refreshInterval 1h->10m. Requires the one-time OpenBao bootstrap (rotator-shelly-manager.hcl).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 22:04:00 +02:00
k.renner 9254eb04b7 Merge pull request 'feat(paperless): automated secret-key rotation (openbao-ns pattern)' (#300) from feat/paperless-secret-rotation into master
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#300
2026-07-18 19:45:21 +00:00
claude-botandClaude Opus 4.8 2fa3e7738f refactor(woodpecker): migrate secret rotation to openbao-ns pattern, drop netpol
Moves the WOODPECKER_AGENT_SECRET rotation from the apps namespace to the openbao namespace (matching the new paperless prototype), so it reaches OpenBao intra-namespace:
- openbao/rotation/woodpecker.yaml: SA + CronJob now in openbao ns, per-secret role rotator-woodpecker.
- openbao/policies/rotator-woodpecker.hcl: replaces the shared rotator policy (retired); per-secret least-privilege.
- REVERTS the #299 netpol pair (apps egress + openbao ingress) — no longer needed intra-ns.
- deletes apps/woodpecker/rotate-agent-secret.yaml and the old rotator.hcl.
server.yaml/agent.yaml (Reloader annotations) and externalsecret.yaml (10m) are unchanged.
Bootstrap: create rotator-woodpecker role/policy in openbao and delete the old rotator role/policy (documented in rotator-woodpecker.hcl).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 21:35:47 +02:00
claude-botandClaude Opus 4.8 ab6589aced feat(paperless): automated secret-key rotation (openbao-ns pattern)
First fan-out of the secret-rotation pattern proven on woodpecker, now using the cleaner openbao-namespace design: the rotation Job runs in the openbao ns so it reaches OpenBao intra-namespace — NO NetworkPolicy edits needed (unlike woodpecker's apps-ns job). Per-secret isolation: its own scoped policy+role (rotator-paperless) so a compromised job can only touch the paperless KV path.
- openbao/rotation/paperless.yaml: SA + quarterly/on-demand CronJob (openbao ns) that bao kv patch's secret-key at homelab/apps/paperless (DB creds preserved).
- openbao/policies/rotator-paperless.hcl: least-privilege policy (manual bootstrap, documented in-file).
- paperless.yaml: reloader annotation; externalsecret.yaml: refreshInterval 1h->10m.
Rotating the Django SECRET_KEY invalidates paperless sessions (re-login); no data loss. Requires the one-time OpenBao bootstrap before first run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 21:29:49 +02:00
k.renner 9cc0a42134 Merge pull request 'fix(netpol): allow woodpecker secret-rotator to reach OpenBao' (#299) from fix/woodpecker-rotator-openbao-netpol into master
ci/woodpecker/cron/alert-monitor Pipeline failed
ci/woodpecker/cron/issue-fix Pipeline failed
Reviewed-on: k.renner/homelab#299
2026-07-18 19:17:11 +00:00
claude-botandClaude Opus 4.8 687e022e9f fix(netpol): allow woodpecker secret-rotator to reach OpenBao
The woodpecker-secret-rotate CronJob (#297) runs in ns apps and could not reach OpenBao (i/o timeout on auth/kubernetes/login) — blocked on BOTH sides: apps is egress-default-deny (no openbao allow) and openbao is ingress-default-deny (rotator not allowlisted). The snapshot job avoids this by living in the openbao ns; ESO is explicitly allowlisted.
- default-deny.yaml (apps egress): namespace-wide allow to openbao:8200, scoped in effect by openbao's ingress (mosquitto pattern).
- openbao-ns.yaml (openbao ingress): scoped allow from the rotator pod labels (apps/woodpecker/secret-rotator) — the real security boundary.
Verified apps has no other blocking egress; kustomize build + yamllint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 20:57:27 +02:00
k.renner 92146ffb5c Merge pull request 'feat(woodpecker): automated WOODPECKER_AGENT_SECRET rotation (OpenBao + ESO + Reloader)' (#297) from feat/woodpecker-secret-auto-rotation into master
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: k.renner/homelab#297
2026-07-18 18:38:19 +00:00
k.renner 1f67d1d081 Merge pull request 'feat(monitoring): woodpecker secret-rotation convergence alerts' (#298) from feat/woodpecker-rotation-alerts into master
Reviewed-on: k.renner/homelab#298
2026-07-18 18:37:55 +00:00
claude-botandClaude Opus 4.8 a3dc001361 feat(monitoring): woodpecker secret-rotation convergence alerts
Closes the H2 gap from the rotation PR (#297) adversarial review: the rotation Job is fire-and-forget, so a downstream failure (ESO/Reloader/pod-reschedule) yields a green Job with no signal. ESO metrics aren't scraped here, so these are kube-state-metrics based:
- WoodpeckerServerNotReady (critical): server StatefulSet 0 ready for 20m.
- WoodpeckerAgentNotReady (warning): agent Deployment 0 available for 20m.
- WoodpeckerSecretRotationJobFailed (warning): named signal for a failed rotation Job (e.g. missing OpenBao bootstrap).
- WoodpeckerSecretRotationStale (warning): quarterly CronJob hasn't succeeded in >100d; absent-until-first-success so it can't false-fire early.
Independent of #297: readiness alerts are useful immediately; the Job/CronJob series stay empty until that PR merges.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 20:32:56 +02:00
claude-botandClaude Opus 4.8 142ff676bb fix(woodpecker-rotation): address adversarial review (pin Reloader, doc gaps)
- H1: pin Reloader chart >=1.0.0 <2.0.0 (was open upper bound; a cluster-wide restart-authority controller must not float across majors — repo pinning discipline).
- M2: correct the restart-downtime comment (server StatefulSet is unavailable for tens of seconds, not 'within seconds').
- M1: note the on-demand/emergency rotation runs during incidents (the 'outside CI hours' safety doesn't apply there).
- H2: document the no-convergence-check limitation + follow-up (add rollout/health check or alert before scaling the pattern).
- L1: correct rotator.hcl rationale — native 'bao kv patch' is a server-side merge, needs no client read-modify; 'read' is surplus.
- L2: warn against token_no_default_policy=true (breaks the kv-v2 preflight).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 15:12:34 +02:00
claude-botandClaude Opus 4.8 646bbf41e4 feat(woodpecker): automated WOODPECKER_AGENT_SECRET rotation (OpenBao + ESO + Reloader)
End-to-end cluster-internal rotation of the shared server<->agent gRPC secret, no per-rotation human step:
- rotate-agent-secret.yaml: quarterly CronJob (+ on-demand) logs into OpenBao via k8s-auth role 'rotator', generates a random value, bao kv patch's homelab/apps/woodpecker (Gitea OAuth fields untouched).
- infrastructure/reloader: Stakater Reloader restarts annotated workloads on Secret change.
- server.yaml/agent.yaml: reloader annotation for woodpecker-secret.
- externalsecret.yaml: refreshInterval 1h -> 10m so a rotation propagates within ~10m.
- openbao/policies/rotator.hcl: least-privilege policy (patch on the one path only); NOT Flux-applied, one-time manual bootstrap documented in-file (eso-read.hcl convention).

PoC scope: woodpecker only. Requires a one-time OpenBao bootstrap (rotator policy + role) before the CronJob succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-18 14:46:21 +02:00
security-bot eaa0988dd4 chore(image-automation): bump gitea.renner.uno/k.renner/shelly-manager:build.1784370668
ci/woodpecker/cron/e2e Pipeline was successful
ci/woodpecker/cron/security-scan Pipeline was successful
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Updates managed by image-automation-controller.
2026-07-18 11:02:42 +00:00
k.renner f75e6aa6ac Merge pull request 'fix(monitoring): scrape pve via Service VIP + node FQDNs, no hardcoded IPs' (#296) from claude-bot/pve-cluster-vip-target into master
ci/woodpecker/cron/issue-fix Pipeline failed
ci/woodpecker/cron/alert-monitor Pipeline failed
Reviewed-on: gitea_admin/homelab#296
2026-07-17 18:29:44 +00:00
claude-botandClaude Opus 4.8 74f387f185 fix(monitoring): use node FQDNs for pve-node scrape, drop raw IPs
No hardcoded IP remains in the pve scrape config: the node job now
targets jupiter/neptune/saturn.renner.uno. instance label reads the
hostname, and a renumbered node follows DNS without a config edit.

Verified: exporter returns node-local metrics when targeted at
jupiter.renner.uno from inside the cluster.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-17 20:23:56 +02:00
claude-botandClaude Opus 4.8 26aadd0629 fix(monitoring): scrape pve cluster metrics via Service VIP, not a fixed node
The pve cluster-collector job hardcoded 10.2.40.201, so cluster-wide
metrics (pve_up, guest info, storage) paused whenever jupiter
specifically was down, even with the cluster healthy. Point it at the
pve Service DNS (pve.apps.svc.cluster.local) whose EndpointSlice
load-balances the PVE API across all three nodes, so the scrape
follows whichever node is up. Node-local job keeps the three explicit
targets — it needs per-node identity.

Verified: exporter returns pve_up for cluster + all nodes when
targeted at the Service DNS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
2026-07-17 20:22:35 +02:00
security-bot 46e35a824d chore(image-automation): bump ghcr.io/music-assistant/server:2.9.9
ci/woodpecker/cron/alert-monitor Pipeline was successful
Updates managed by image-automation-controller.
2026-07-17 18:03:01 +00:00
security-bot 81f3e764b1 chore(image-automation): bump netbirdio/netbird:v0.74.7-rootless
ci/woodpecker/cron/issue-fix Pipeline was successful
ci/woodpecker/cron/alert-monitor Pipeline was successful
Updates managed by image-automation-controller.
2026-07-17 14:58:46 +00:00
k.renner cbe30ed119 Merge pull request 'fix(home-security): repair alarm stats, curate sensor lists, dedup batteries' (#282) from claude-bot/dash-home-security into master
ci/woodpecker/cron/issue-fix Pipeline was successful
ci/woodpecker/cron/alert-monitor Pipeline was successful
Reviewed-on: gitea_admin/homelab#282
2026-07-17 13:18:07 +00:00
k.renner bf534e3f45 Merge pull request 'fix(postgresql-overview): scrape CNPG metrics and rewrite dead pg_* queries' (#286) from claude-bot/dash-postgresql-overview into master
Reviewed-on: gitea_admin/homelab#286
2026-07-17 13:17:58 +00:00
k.renner fa1b526fe4 Merge pull request 'fix(proxmox-cluster): dedupe 3x-scraped series, repair broken panels' (#287) from claude-bot/dash-proxmox-cluster into master
Reviewed-on: gitea_admin/homelab#287
2026-07-17 13:17:23 +00:00
k.renner cf9dc7c3ea Merge pull request 'fix(blackbox-overview): revive dead dashboard (retired datasource, dead TCP/DNS panels)' (#288) from claude-bot/dash-blackbox-overview into master
Reviewed-on: gitea_admin/homelab#288
2026-07-17 13:17:12 +00:00
k.renner 21353fd931 Merge pull request 'fix(node-overview): repair 4 dead panels, exclude rbd/lxc devices, nodename legends' (#289) from claude-bot/dash-node-overview into master
Reviewed-on: gitea_admin/homelab#289
2026-07-17 13:17:02 +00:00
k.renner 76404f6bd9 Merge pull request 'fix(heatpump-roi): repair solar ratio in cost chart, honest annual savings, since-install blended price' (#290) from claude-bot/dash-heatpump-roi into master
Reviewed-on: gitea_admin/homelab#290
2026-07-17 13:16:48 +00:00
k.renner 0225dabe0e Merge pull request 'fix(authentik-overview): repair dead Status panel, dedupe stats, fix outpost panel' (#291) from claude-bot/dash-authentik-overview into master
Reviewed-on: gitea_admin/homelab#291
2026-07-17 13:16:33 +00:00
k.renner 9e3385e821 Merge pull request 'fix(pv-system-roi): repair Cumulative Value panel, honest current-power stat, unit + gap fixes' (#285) from claude-bot/dash-pv-system-roi into master
Reviewed-on: gitea_admin/homelab#285
2026-07-17 13:16:00 +00:00
k.renner e8eee7800a Merge pull request 'fix(infrastructure-overview): repair all 5 panels (wrong job, missing labels, Talos mountpoint)' (#284) from claude-bot/dash-infrastructure-overview into master
ci/woodpecker/cron/alert-monitor Pipeline was successful
Reviewed-on: gitea_admin/homelab#284
2026-07-17 13:15:37 +00:00
k.renner 0861299314 Merge pull request 'fix(home-energy): repair dead panels, wrong queries, misleading semantics' (#283) from claude-bot/dash-home-energy into master
Reviewed-on: gitea_admin/homelab#283
2026-07-17 13:15:20 +00:00
security-bot e1b91e5a33 chore(image-automation): bump gitea.renner.uno/k.renner/shelly-manager:build.1784289602
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
ci/woodpecker/cron/issue-fix Pipeline was successful
ci/woodpecker/cron/alert-monitor Pipeline was successful
Updates managed by image-automation-controller.
2026-07-17 12:02:40 +00:00