The myorg-assistant Deployment's Settings() requires WEB_SECRET_KEY (and the
GIT_* set for git-sync/deadline-checker). The cronjobs only carried a subset,
so every run crashed at import with:
pydantic_core._pydantic_core.ValidationError: 1 validation error for Settings
web_secret_key [type=missing]
myorg-git-sync was crash-looping (4.19 restarts/15m, pod 29731995-wbdnx).
deadline-checker/evening-summary/morning-briefing/waiting-followup were also
missing the full env set (git-sync already had GIT_*, but lacked WEB_SECRET_KEY;
the others lacked both GIT_* and WEB_SECRET_KEY).
Mirror the Deployment's full required env (GIT_REPO_URL/USERNAME/TOKEN/BRANCH
from secret/configmap, WEB_SECRET_KEY from secret) into every cronjob so
import-time Settings() validation passes for all. Supersedes the incomplete
PRs #19/#20/#21 (which added only WEB_SECRET_KEY and left the GIT_* gap).
Roger: merge -> ArgoCD self-heals, loop stops.
CronJob pods were stuck in ImagePullBackOff because they referenced
the local-only image 'myorg-assistant:latest' which is not present
on the node. Switch all 5 cronjobs to the Gitea registry image
git.rogi.casa/roger/myorg-assistant/myorg-assistant:fcf79bf
(matching the Deployment), set imagePullPolicy: Always, and add
imagePullSecrets: gitea-registry so they can authenticate to the
private registry.
The ingresses referenced a Cloudflare OriginIssuer 'prod-issuer' whose CRD
and controller are not installed in the cluster, so cert-manager could not
issue certs and Traefik served a default cert (invalid SSL). Switch to the
existing letsencrypt-prod ClusterIssuer with specific hostnames + per-app
secrets, matching the working ingresses (http-01 cannot issue wildcards).