Commit Graph
100 Commits
Author SHA1 Message Date
chemavxandClaude Opus 4.8 6043e7d66c zona-exclusion: stage Infisical-backed SMTP secret with key remap (3a)
InfisicalStaticSecret syncs shared /smtp-gmail -> zona-exclusion-secrets-infisical,
template-remapping UPPER_SNAKE -> hyphenated lowercase smtp-user/smtp-pass to match
the deployment secretKeyRef. Old secret stays live until 3c.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:10:48 +00:00
chemavxandClaude Opus 4.8 dd28956d76 ghost-en: drop dead ghost-en-smtp ignoreDifferences (3c)
Old out-of-band ghost-en-smtp secret deleted (kubectl); SMTP now sourced from
Infisical-backed ghost-en-smtp-infisical. Remove the now-obsolete /data
ignoreDifferences stanza from both app manifests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:09:15 +00:00
chemavxandClaude Opus 4.8 bafbdc8a3b ghost-en: repoint SMTP to Infisical-backed secret (3b)
mail__options__auth__user/pass secretKeyRef
  ghost-en-smtp -> ghost-en-smtp-infisical
Recreate roll picks up the Infisical-synced credentials.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:06:41 +00:00
chemavxandClaude Opus 4.8 d3bd1a3503 ghost-en: stage Infisical-backed SMTP secret (3a)
InfisicalStaticSecret syncs shared /smtp-gmail -> ghost-en-smtp-infisical
(parallel name, passthrough SMTP_USER/SMTP_PASS). Old secret stays live until 3c.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:06:04 +00:00
chemavxandClaude Opus 4.8 29d817547b gitea-runner: repoint token to Infisical-backed secret (3b, out-of-band)
env GITEA_RUNNER_REGISTRATION_TOKEN secretKeyRef
  gitea-runner-secret -> gitea-runner-secret-infisical
Rolls the pod: fresh emptyDir -> act_runner re-registers with same-value token.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:49:16 +00:00
chemavxandClaude Opus 4.8 8e162130dd gitea-runner: stage Infisical-backed secret (3a, out-of-band)
InfisicalStaticSecret syncs /gitea-runner -> gitea-runner-secret-infisical
(parallel name). Out-of-band: created via kubectl apply; commit is for record.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:48:46 +00:00
chemavxandClaude Opus 4.8 41a4f13bc3 Repoint cloudflare-ddns deployment to cloudflare-ddns-secret-infisical (cloudflare-ddns 3b)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:58:14 +00:00
chemavxandClaude Opus 4.8 c6efbdc469 Add cloudflare-ddns InfisicalStaticSecret from /cloudflare-ddns (cloudflare-ddns 3a, out-of-band)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:57:49 +00:00
chemavxandClaude Opus 4.8 48a2577f2a Repoint renovate cronjob to renovate-token-infisical (renovate 3b)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:52:41 +00:00
chemavxandClaude Opus 4.8 442e329c89 Add renovate-token InfisicalStaticSecret from /renovate (renovate 3a)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:51:53 +00:00
chemavxandClaude Opus 4.8 f5364500f6 Remove plaintext grafana-telegram Secret from git (monitoring 3c)
7th and final copy of the Telegram bot token leaving git. monitoring is
out-of-band (not ArgoCD-managed), so the live secret is pruned manually with
kubectl. Grafana already reads grafana-telegram-infisical (from /telegram).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:34:08 +00:00
chemavxandClaude Opus 4.8 e1fd0c9283 Repoint grafana TELEGRAM_* env to grafana-telegram-infisical (monitoring 3b, out-of-band)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:30:24 +00:00
chemavxandClaude Opus 4.8 a89d6e9a9a Add grafana-telegram InfisicalStaticSecret from /telegram (monitoring 3a, out-of-band)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:28:51 +00:00
chemavxandClaude Opus 4.8 07aacc6878 Remove plaintext bot-secrets Secret from git (polymarket-bot 3c)
Last plaintext secret leaving git; the 6th/last copy of the Telegram token.
ArgoCD prunes the live bot-secrets Secret (and its cleartext
last-applied-configuration annotation). Consumers already on bot-secrets-infisical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:21:53 +00:00
chemavxandClaude Opus 4.8 dc0d24ded6 Repoint api/bot envFrom + cronjob to bot-secrets-infisical + bot-config (polymarket-bot 3b)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:18:35 +00:00
chemavxandClaude Opus 4.8 fb9170ec5b Add bot-secrets InfisicalStaticSecret + bot-config ConfigMap (parallel, polymarket-bot 3a)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 10:16:24 +00:00
chemavxandClaude Opus 4.8 318d66303a Remove plaintext htpasswd Secret from git (filebrowser)
Phase 3c of migration #2: drop the Secret stanza from auth.yaml; the Middleware
stays and references filebrowser-auth-infisical (synced from homelab/prod
/filebrowser). ArgoCD prunes the old plaintext filebrowser-auth secret — the
bcrypt htpasswd leaves git. Completes migration #2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:52:24 +00:00
chemavxandClaude Opus 4.8 7e9ee295e4 Repoint filebrowser Traefik Middleware to filebrowser-auth-infisical
Phase 3b of migration #2: Middleware.spec.basicAuth.secret now references the
Infisical-managed secret. Secret stanza in auth.yaml left in place as fallback
until 3b is verified (401 w/o creds, 200 w/ creds), then removed in 3c.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:46:46 +00:00
chemavxandClaude Opus 4.8 58851adf9a Add filebrowser InfisicalStaticSecret for basic-auth (parallel)
Phase 3a of migration #2: syncs FILEBROWSER_USERS from homelab/prod /filebrowser
via read-only infisical-operator/infisical-auth, template-remapped to the
lowercase 'users' key Traefik basic-auth requires, into parallel-name
filebrowser-auth-infisical. Old plaintext filebrowser-auth secret + the Traefik
Middleware untouched (repoint=3b, removal of the Secret stanza=3c).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:45:12 +00:00
chemavxandClaude Opus 4.8 0e50d88b54 Remove plaintext telegram-notify secrets from git (n8n/portfolio/openclaw/polymarket-bot)
Phase 3c: hooks now read telegram-notify-infisical (synced from homelab/prod
/telegram). Deleting these 4 manifests prunes the old plaintext secrets — the
bot token leaves git for the remaining 4 namespaces. Completes migration #1.

NOTE: polymarket-bot/bot-secrets still embeds the same token (migration #3).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:34:16 +00:00
chemavxandClaude Opus 4.8 b124f128e6 Repoint PostSync hooks to telegram-notify-infisical (n8n/portfolio/openclaw/polymarket-bot)
Phase 3b: all 4 hooks' secretKeyRefs now read the Infisical-managed secret.
Old plaintext telegram-notify secrets stay as fallback until 3c.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:31:02 +00:00
chemavxandClaude Opus 4.8 7b1f2da613 Add InfisicalStaticSecret for telegram-notify in n8n/portfolio/openclaw/polymarket-bot (parallel)
Phase 3a of telegram-notify migration: each syncs TELEGRAM_BOT_TOKEN/
TELEGRAM_CHAT_ID from shared homelab/prod /telegram via read-only
infisical-operator/infisical-auth, into parallel-name telegram-notify-infisical.
Old plaintext secrets + hooks untouched (repoint=3b, removal=3c).
polymarket-bot: standalone secret only; bot-secrets copy is migration #3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:28:30 +00:00
chemavxandClaude Opus 4.8 c52e7c751a Remove plaintext telegram-notify secret from git (researchowl)
The PostSync hook now reads telegram-notify-infisical (synced from
homelab/prod /telegram). Deleting this manifest prunes the old plaintext
secret — the bot token leaves git for researchowl. Security win.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:26:08 +00:00
chemavxandClaude Opus 4.8 c12c41fb63 Repoint researchowl PostSync hook to telegram-notify-infisical
Both secretKeyRefs (TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID) now read the
Infisical-managed secret instead of the plaintext-in-git telegram-notify.
Old secret stays as fallback until 3c removes its manifest.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:21:30 +00:00
chemavxandClaude Opus 4.8 5445722ab1 Add researchowl InfisicalStaticSecret for telegram-notify (parallel)
Syncs TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID from shared homelab/prod /telegram
via the read-only infisical-operator/infisical-auth. Targets parallel-name
telegram-notify-infisical; old plaintext telegram-notify stays live until the
hook is repointed (3b) and the old manifest removed (3c).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 20:20:15 +00:00
chemavxandClaude Opus 4.8 f1ad60b046 Cut over polymarket-bot deployments to Infisical-managed pull secret
api/bot: imagePullSecrets gitea-registry -> gitea-registry-infisical.
dashboard: add gitea-registry-infisical (previously had NO pull secret
despite pulling a private image — fixes latent ErrImagePull-on-reschedule
bug). Old gitea-registry stays as rollback net until decommission.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 06:37:55 +00:00
chemavxandClaude Opus 4.8 3957b69b10 Add polymarket-bot InfisicalStaticSecret for gitea-registry pull secret
Reconstructs the dockerconfigjson pull secret from the shared /registry v3
fields (GITEA_REGISTRY_USERNAME/GITEA_REGISTRY_TOKEN) via the shared
infisical-operator/infisical-auth. Targets parallel-name
gitea-registry-infisical; old gitea-registry stays live until cutover.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 06:27:47 +00:00
chemavxandClaude Opus 4.8 9d2dd78542 Cut over researchowl deployment to Infisical-managed pull secret
imagePullSecrets: gitea-registry -> gitea-registry-infisical (the
InfisicalStaticSecret-managed dockerconfigjson). Old gitea-registry stays
as rollback net until decommission.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 06:17:38 +00:00
chemavxandClaude Opus 4.8 36296ad5ea Add researchowl InfisicalStaticSecret for gitea-registry pull secret
Reconstructs the dockerconfigjson pull secret from the discrete
GITEA_REGISTRY_USERNAME/GITEA_REGISTRY_TOKEN fields at homelab/prod /registry,
via the shared infisical-operator/infisical-auth. Targets parallel-name
gitea-registry-infisical; old gitea-registry stays live until cutover.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 06:11:41 +00:00
chemavxandClaude Opus 4.8 5a0fd04598 Add shared Infisical auth layer (InfisicalConnection + InfisicalAuth)
Phase 2: GitOps-managed shared auth layer in infisical-operator ns —
InfisicalConnection (https://infisical.chemavx.xyz) + InfisicalAuth
(kubernetes method, operator SA via TokenReview) + identity-ID Secret
(non-secret UUID; auth is via SA token, so safe in git). To be referenced
cross-namespace by per-app InfisicalStaticSecret CRs later. No real secret yet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 20:39:30 +00:00
chemavxandClaude Opus 4.8 5f6b491ed3 Add Infisical token-reviewer RBAC for Kubernetes Auth
Phase 2 Step 2: dedicated SA infisical-token-reviewer bound to
system:auth-delegator (TokenReview), explicit long-lived SA token Secret
(k8s 1.34 doesn't auto-create). ArgoCD ignores /data so selfHeal won't
strip the controller-populated token. Token value never committed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 16:05:59 +00:00
chemavxandClaude Opus 4.8 2c81ab03a7 Add Infisical Kubernetes operator (secrets-operator v0.11.1)
Phase 2 Step 1: controller-only, dedicated infisical-operator namespace,
hostAPI -> self-hosted instance, cluster-scoped, ServerSideApply for CRDs.
No InfisicalSecret CRs yet — operator sits idle until later UI config.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 15:42:14 +00:00
chemavxandClaude Opus 4.8 c459eb3930 fix(infisical): single-source Helm with inline values
The multi-source variant ($values git ref) caused the infisical app to
prune its own Application object on first sync (controller pruned
Application/argocd/infisical, orphaning the workloads). Switch to a
single-source Helm app with inline valuesObject (same chart 1.9.0, same
DB/Redis passwords) and drop the hand-written tracking-id annotation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 06:51:23 +00:00
chemavxandClaude Opus 4.8 e548a06ebc feat(infisical): add Infisical platform (Phase 1, chart-managed pg/redis)
Deploy infisical-standalone 1.9.0 (Infisical v0.158.0) in a dedicated
'infisical' namespace via a multi-source ArgoCD app (chart + values).
Bundled Postgres (dedicated local-path PVC, 8Gi) + Redis. Ingress via
Traefik + cert-manager (letsencrypt-prod) at infisical.chemavx.xyz.

Crown-jewel secrets (ENCRYPTION_KEY, AUTH_SECRET, SITE_URL) are injected
out-of-band via the 'infisical-secrets' Secret (kubectl, IgnoreExtraneous),
NOT in git. Postgres/Redis passwords guard ClusterIP-only in-cluster
services holding ciphertext; acceptable in values per design review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 06:39:26 +00:00
chemavxandClaude Opus 4.8 6036b8d67b chore(polymarket-bot): remove gitea-registry secret from GitOps
The dockerconfigjson held the old account password (now rotated/revoked)
in plaintext. Manage this image-pull secret out-of-band via kubectl
(like researchowl), so no registry credential lives in git going forward.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:17:52 +00:00
chemavxandClaude Opus 4.8 6d30c0f3e0 fix(ghost-en): stage redirects via initContainer, not read-only mount
A ConfigMap volume is read-only at the FS level, so the Ghost entrypoint's
chown -R on content/ failed ("Read-only file system") and crash-looped.
Copy redirects.yaml onto the writable PVC with an initContainer instead;
still GitOps-sourced and refreshed on every pod start.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:40:07 +00:00
chemavxandClaude Opus 4.8 797471f744 feat(ghost-en): GitOps-managed redirect for old Pentagon slug
Recover ~454 GSC impressions stranded on a 404. Adds a ghost-en-redirects
ConfigMap (content/data/redirects.yaml) 301-redirecting the old slug
/pentagon-second-uap-declassification-may-2026-apollo-12-sandia/ to the
live /pentagon-uap-second-release-may-2026/. Mounted read-only via subPath
so it survives content PVC recreation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:35:33 +00:00
chemavxandClaude Fable 5 e42896a8c1 feat(ollama): enable prune, guarded by Prune=false on the models PVC
Last app without prune; now consistent with the rest of the cluster.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:58:50 +00:00
chemavxandClaude Fable 5 729e3ac4af fix: Prune=false guard on every PVC under a prune-enabled Application
Same protection already given to polymarket-bot postgres and n8n: without
it, removing a PVC manifest from git (rename, multi-doc refactor) would
make ArgoCD destroy the volume and its data.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:55:23 +00:00
chemavx b30d505e0e feat(filebrowser): writable images mount to manage imagefinder output 2026-06-12 15:50:21 +00:00
chemavxandClaude Fable 5 0619a5caf7 feat(n8n): enable prune, guarded by Prune=false on the workflows PVC
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:50:21 +00:00
chemavxandClaude Fable 5 2afbb9559c chore(argocd): drop non-authoritative researchowl Application dump
The real manifest is researchowl/argocd-app.yaml, self-managed inside the
app's own synced path; edits to this copy get silently reverted by selfHeal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:50:21 +00:00
chemavxandClaude Fable 5 0c061c1ee2 fix(researchowl): notification annotations in the self-managed Application manifest
researchowl/argocd-app.yaml lives inside the app's own synced path, so it is
the source of truth: annotations applied only to the live object (or to the
argocd/ dump copy) get reverted by selfHeal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:46:22 +00:00
chemavx 649c4ddd95 Revert "test: temporary invalid manifest to verify on-sync-failed Telegram trigger"
This reverts commit 44b76e3049.
2026-06-12 15:41:13 +00:00
chemavxandClaude Fable 5 44b76e3049 test: temporary invalid manifest to verify on-sync-failed Telegram trigger
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:35:22 +00:00
chemavxandClaude Fable 5 23abc484c7 feat(argocd): recover Telegram notifications (failed/degraded) and prune for polymarket-bot
- Notifications via generic webhook to the Telegram Bot API: the engine's
  native telegram service only supports channels and negative group IDs,
  so a positive private chat_id never worked ("chat not found").
- Only on-sync-failed and on-health-degraded triggers; on-sync-succeeded
  dropped (CI already reports successful deploys).
- Subscribe annotations on polymarket-bot, researchowl and n8n.
- prune: true on polymarket-bot, guarded by Prune=false on the postgres
  PVC so removing the manifest from git can never destroy the data.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:31:07 +00:00
chemavxandClaude Opus 4.8 a3efd61e1e fix: remove duplicate home.chemavx.xyz from uptime-kuma ingress
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 10:13:50 +00:00
chemavxandClaude Opus 4.8 4a529fb0b9 feat(filebrowser): add Traefik basic-auth middleware
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 08:05:03 +00:00
chemavxandClaude Opus 4.8 da8a9293c8 feat: add filebrowser to browse and download imagefinder output
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 07:58:59 +00:00
chemavxandClaude Opus 4.7 9ab78d9bb6 feat: adopt ghost-en into GitOps with non-www → www redirect
Brings the existing manually-applied ghost-en (theexclusionzone.com)
into the GitOps repo. Adds redirect-to-www-https middleware to fix the
Google Search Console redirect issue: non-www now 301s to https://www
instead of serving duplicate content.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:59:34 +00:00
chemavx 97d7bcef60 fix: disable service env injection to avoid TRILIUM_PORT conflict
K8s injects TRILIUM_PORT=tcp://... from the service, but Trilium
expects an integer. enableServiceLinks: false prevents the collision.
2026-05-22 09:58:49 +00:00
chemavx 0d3da9856a feat: add Trilium Notes deployment
namespace, deployment, PVC (2Gi local-path), service, Traefik ingress
with letsencrypt-prod TLS at trilium.chemavx.xyz, ArgoCD Application.
2026-05-22 09:56:57 +00:00
chemavxandClaude Sonnet 4.6 177d9e0f9a fix: retry loop up to 60s in n8n smoke test healthz check
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:14:43 +00:00
chemavxandClaude Sonnet 4.6 f63051c0f5 chore: migrate renovate config from config.js to renovate.json
Eliminates JS migration warning; update RENOVATE_CONFIG_FILE accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:01:32 +00:00
chemavxandClaude Sonnet 4.6 e2d0173e43 chore: LOG_LEVEL info in renovate, document secret management in README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:58:58 +00:00
chemavxandClaude Sonnet 4.6 71437e8932 chore: ignore renovate-token secret diff in ArgoCD
Prevents ArgoCD from overwriting the real token with the placeholder.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:54:47 +00:00
chemavxandClaude Sonnet 4.6 1369b9b407 chore: set gitAuthor for renovate commits
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:51:52 +00:00
chemavx 0d6bd4dae2 fix: remove renovate secret from repo, managed manually 2026-05-20 13:46:51 +00:00
chemavxandClaude Sonnet 4.6 1a4f673115 chore: pin renovate image to 38.0.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:41:03 +00:00
chemavxandClaude Sonnet 4.6 b27b08c40a fix: trailing slash on endpoint, drop explicit token from config.js
Renovate reads RENOVATE_TOKEN from env automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:37:25 +00:00
chemavxandClaude Sonnet 4.6 f477f8a6d4 fix: revert renovate endpoint to base URL (Renovate appends API path internally)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:26:08 +00:00
chemavxandClaude Sonnet 4.6 e105a570aa chore: set LOG_LEVEL=debug in renovate CronJob
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:21:55 +00:00
chemavxandClaude Sonnet 4.6 b74252a451 fix: use full Gitea API URL in renovate endpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:19:46 +00:00
chemavxandClaude Sonnet 4.6 26b0472ec1 fix: explicit token from env and valid schedule syntax in renovate config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:14:54 +00:00
chemavxandClaude Sonnet 4.6 17741225ab feat: deploy Renovate Bot via CronJob for automatic dependency updates
- CronJob every 6h, concurrencyPolicy: Forbid
- Platform gitea at git.chemavx.xyz, repos: researchowl, polymarket-bot, n8n
- packageRules: major=PR only, patch=automerge, private registry disabled
- Secret placeholder for Gitea token (fill in before applying ArgoCD app)
- ArgoCD Application with automated sync

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:04:48 +00:00
chemavxandClaude Sonnet 4.6 ed01a0f95a fix: robust readiness check in researchowl smoke test
- Extract readyReplicas OR availableReplicas (k8s omits readyReplicas when 0)
- Also accept MinimumReplicasAvailable condition as ready signal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:01:38 +00:00
chemavxandClaude Sonnet 4.6 268de202c4 fix: replace sleep 15 with 60s retry loop in researchowl smoke test
Polls readyReplicas every 5s up to 12 attempts instead of a fixed wait.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 12:57:42 +00:00
chemavxandClaude Sonnet 4.6 ec3a8c3d55 fix: sleep 15 before k8s API check in researchowl smoke test
Pod takes a few seconds to become ready after PostSync fires.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 12:47:43 +00:00
chemavxandClaude Sonnet 4.6 eb46543150 feat: add Telegram notifications to PostSync smoke tests + new tests for researchowl/openclaw
- Create telegram-notify secret in n8n, portfolio, polymarket-bot, researchowl, openclaw
  namespaces (values mirrored from monitoring/grafana-telegram)
- Update existing smoke tests (n8n, portfolio, polymarket-bot) to send [OK]/[FAIL]
  Telegram notifications on success/failure
- Add postsync-smoke-test for openclaw (curl GET / on port 18789)
- Add postsync-smoke-test for researchowl (no HTTP port; checks readyReplicas via
  k8s API using a smoke-test-reader ServiceAccount + Role + RoleBinding)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 12:40:23 +00:00
chemavx 4e6703a721 docs: argocd post-install patches 2026-05-20 12:27:14 +00:00
chemavx acb2b869b0 fix: argocd-redis nodeSelector chemavx-k8 + resource limits 2026-05-20 12:26:42 +00:00
chemavxandClaude Sonnet 4.6 673e1c3388 feat: añadir Ghost EN (theexclusionzone.com) a ResearchOwl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 16:40:02 +00:00
chemavx 9508ddffee feat(portfolio): add ze manual page at /ze
- Add ze-manual-html ConfigMap serving ze-manual.html at /ze/index.html
- Mount ze-manual-html in nginx at /usr/share/nginx/html/ze
- Add Projects section in portfolio index with ze card linking to /ze
2026-05-16 11:21:44 +00:00
chemavxandClaude Sonnet 4.6 530177cd6e feat: add Umami analytics deployment
Deploys Umami with PostgreSQL backend, Traefik ingress, cert-manager
TLS, and ArgoCD GitOps pattern matching existing services.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 07:48:53 +00:00
chemavxandClaude Sonnet 4.6 09da22ea7b fix: eliminar Secret de deployment.yaml para gestión manual
ArgoCD sobreescribía zona-exclusion-secrets con REPLACE_ME.
El secret se gestiona manualmente con annotation Prune=false.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 17:48:20 +00:00
chemavxandClaude Sonnet 4.6 8ad6672c2f fix: ArgoCD no sobreescribe zona-exclusion-secrets
Añade ignoreDifferences para /data del Secret y
RespectIgnoreDifferences=true para que el sync no aplique
el recurso cuando la única diferencia es en los datos del secret.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 17:46:25 +00:00
chemavxandClaude Sonnet 4.6 6ac858858f feat: add Ghost CMS integration to ResearchOwl deployment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 10:13:21 +00:00
chemavxandClaude Sonnet 4.6 99a0dd0c23 feat: añadir zonadeexclusion.com a cloudflare-ddns DOMAINS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 21:04:32 +00:00
chemavxandClaude Sonnet 4.6 7ac9e637a5 fix: forzar SQLite en Ghost para evitar intento de conexión a MySQL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 20:49:35 +00:00
chemavxandClaude Sonnet 4.6 444fb1058e feat: add Ghost CMS deployment for Zona de Exclusión blog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 20:47:17 +00:00
chemavx cb5977862e fix: repoURL de vuelta a git.chemavx.xyz 2026-05-06 11:47:24 +00:00
chemavx df7b8dfcca fix: repoURL a ClusterIP interno de Gitea 2026-05-06 11:44:19 +00:00
chemavx 5c9b63938e fix: actualizar repoURL a gitea.chemavx.xyz en argocd-app.yaml 2026-05-06 09:07:25 +00:00
chemavx 06929c3008 test: webhook 2026-05-06 08:10:01 +00:00
chemavx 00c5bc2d37 fix: DinD memory request 1Gi→2Gi, limit 2Gi→4Gi 2026-05-05 09:15:14 +00:00
chemavx db0391d23f fix: searxng habilitar formato JSON, forward_url false, authentication desactivada 2026-05-04 19:57:24 +00:00
chemavx 73da4044be fix: searxng http_protocol_version 1.1 y botdetection desactivado 2026-05-04 19:52:55 +00:00
chemavx ca8ddb669f fix: searxng securityContext uid 977, env vars puerto, service renombrado a searxng-svc 2026-05-04 19:47:59 +00:00
chemavx 42251bf17c feat: deploy SearXNG en namespace researchowl 2026-05-04 19:44:21 +00:00
chemavxandClaude Sonnet 4.6 46bc4d0b28 feat(researchowl): add ANTHROPIC_API_KEY, fix OLLAMA_URL, remove Secret template
- Add ANTHROPIC_API_KEY from secret for Claude Haiku relevance scoring
- Fix OLLAMA_URL to internal k8s DNS (ollama.ollama.svc.cluster.local)
- Remove Secret resource (was causing ArgoCD to overwrite with REPLACE_ME)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:08:22 +00:00
chemavx 4e6569ab6c fix: use internal Ollama service URL 2026-04-27 20:22:05 +00:00
chemavx fa01987420 chore: remove Secret from manifest (managed imperatively outside ArgoCD) 2026-04-27 19:59:28 +00:00
chemavx 65f93b745d feat: add researchowl 2026-04-27 13:53:42 +00:00
chemavxandClaude Sonnet 4.6 859bed930f chore: remove Open WebUI and unused OpenClaw k8s resources
- Deleted open-webui namespace, deployment, service, ingress, and PVC
  from cluster (replaced by OpenClaw using Claude API)
- Removed openclaw PVC and RBAC manifests no longer needed
- Removed Uptime Kuma monitor for chat.chemavx.xyz

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 13:13:38 +00:00
chemavxandClaude Sonnet 4.6 4897ca3334 feat(grafana): custom emoji message templates per alert + resolve format
Each alert rule's summary annotation now renders a formatted Telegram
message with emoji and multiline context. The contact point passes the
pre-rendered summary through, adding " Resuelto" on resolution.
Also restores the == 1 filter on Pod Failed/Unknown lost in prior rebase.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 07:26:01 +00:00
chemavxandClaude Sonnet 4.6 48a1ce80f6 backup: add k3s SQLite backup to daily CronJob
- Add hostPath volume for /var/lib/rancher/k3s/server/db (readOnly)
- Script copies state.db + WAL files → k3s-db_<date>.tar.gz in /data/backups/backups/
- Rotation: keeps last 7 copies (same policy as other services)
- rclone-mega-backup picks it up automatically (syncs full /data/backups/backups/)
- Also tracks the CronJob manifest in git (was previously untracked)

Note: k3s uses SQLite/kine (not embedded etcd). etcd-snapshot is disabled.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 10:23:18 +00:00
chemavxandClaude Sonnet 4.6 cc8140760f argocd: configure Telegram notifications and add Application manifests
- Configure argocd-notifications-cm with Telegram service, templates and triggers
  for sync-succeeded, sync-failed, and app-degraded events
- Add application-polymarket-bot.yaml and application-n8n.yaml with notification
  subscription annotations (chat_id: 5138407666)

Note: requires kubectl patch of argocd-notifications-secret with telegram-token

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 09:56:35 +00:00
chemavxandClaude Sonnet 4.6 8bab07201a ollama: elimina GPU, fija imagen 0.20.7, reduce a qwen2.5:3b
- Imagen: ollama/ollama:latest → ollama/ollama:0.20.7
- Elimina NVIDIA_VISIBLE_DEVICES, NVIDIA_DRIVER_CAPABILITIES
- Elimina nvidia.com/gpu: "1" de resources limits
- Reduce memory: 8/20Gi → 4/8Gi (solo CPU, modelo 3b)
- Startup: auto-pull cambiado a qwen2.5:3b

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 15:34:37 +00:00
chemavxandClaude Sonnet 4.6 792b53dee7 openclaw: añade kubectl-ro via initContainer setup-kubectl
- initContainer bitnami/kubectl copia kubectl y crea wrapper kubectl-ro en emptyDir /opt/kube
- kubectl-ro deniega verbos destructivos (delete/apply/patch/edit/exec/scale/rollout/drain/...)
- Main container monta /opt/kube; SA token automontado para in-cluster auth
- Sin kubeconfig manual: kubectl detecta KUBERNETES_SERVICE_HOST/PORT automáticamente

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 14:33:17 +00:00
chemavxandClaude Sonnet 4.6 e176bb9810 openclaw: actualiza imagen a 2026.4.22
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 14:15:49 +00:00