WIP: refactor(hermes): rename chat and triage public hostnames #28
Closed
hermes-automation
wants to merge 1 commits from
feature/hermes-domain-rename-chat-triage into main
pull from: feature/hermes-domain-rename-chat-triage
merge into: titan:main
titan:main
titan:feature/hermes-agent-build-mirrors
titan:feature/hermes-agent-multiarch
titan:feature/hermes-next-hux
titan:feature/hermes-hux-contracts
titan:feature/t_39cf1905-webui-build-token
titan:feature/t_26da4c88-titan-capacity-guardrails-v4
titan:feature/t_26da4c88-titan-capacity-guardrails-v3
titan:feature/t_26da4c88-titan-capacity-guardrails-v2
titan:feature/t_26da4c88-titan-capacity-guardrails
titan:fix/t_39cf1905-jenkins-controller-priority
titan:feature/t_8cbe6a55-hermes-webui-release-v2
titan:feature/t_8cbe6a55-hermes-webui-release
titan:feature/hermes-domain-rename-agent-worker-v2
titan:hermes/t_65356568-multiuser-capacity-assessment
titan:fix/cli-auto-failover-effort
titan:feature/hermes-pr44-after-pr43
titan:fix/hermes-heartbeat-dead-reclaim-replacement
titan:handoff/t_1a2c627b
titan:feature/hermes-combined-multilingual-voice-v2
titan:fix/hermes-handsfree-stt-webm
titan:fix/hermes-restore-legacy-chat-triage-hosts-v2
titan:feature/hermes-domain-rename-agent-worker-bstein
titan:fix/hermes-restore-legacy-chat-triage-hosts-v3
titan:hermes/tts-voice-multilingual-prerequisite
titan:fix/hermes-restore-legacy-chat-triage-hosts
titan:fix/hermes-oidc-ensure-rerun-hostname-rollout
titan:feature/hermes-direct-cli-lane-concurrency-2-replacement
titan:feature/hermes-domain-rename-chat-bstein-triage
titan:feature/hermes-kanban-profile-concurrency-2
titan:feature/hermes-zombie-lane-heartbeat-reclaim
titan:hermes/repair-pr26-voice-split
titan:feature/hermes-durable-two-worker-cli-concurrency
titan:hermes/chat-voice-conversation-instrument
titan:hermes/voice-stt-tts-language-routing
titan:hermes/voice-stt-language-routing
titan:hermes/tts-voice-multilingual
titan:fix/hermes-chat-session-continuity-contract
titan:hermes/tts-voice-hfc-female
titan:hermes/fix-grafana-no-data-vm-storage
titan:feature/ci-gitops
titan:fix/jenkins-quality-gate-discovery
titan:feature/hermes-inpod-supervisor
titan:feature/hermes-chat-smoothness
titan:wt/t_1e95ea6d
titan:feature/hermes-full-handoff-acceptance
titan:feature/hermes-distributed-worker-pool
titan:feature/hermes-review-goal-semantics
titan:feature/hermes-cli-auto-quota-routing
titan:fix/hermes-result-decomposition-reliability
titan:feature/hermes-safe-gitea-pr-client
titan:feature/hermes-unprivileged-image-builder
titan:feature/hermes-cli-process-reaping
titan:feature/hermes-three-lane-placement
titan:wt/t_cca008de
titan:codex/cassandra-generator-08105
titan:cassandra-0851-rollout
titan:cassandra-0821-deploy
titan:codex/testing-dashboard-health-20260604
titan:feature/ariadne
titan:feature/pi-usb-scratch-rollout
titan:feature/sso-hardening
titan:codex/titan-iac-work-quality-gate
titan:codex/titan-iac-main-platform-metrics
titan:codex/titan-iac-platform-metrics
titan:feature/atlas-jobs-schedule-observability
titan:lane2/jenkins-cleanup-activate
titan:lane2/jenkins-cleanup-wiring-split
titan:codex-ananke-fixes
titan:feature/atlasbot-ananke-recovery
titan:feature/atlasbot
titan:deploy
titan:feature/vault-consumption
titan:feature/postgres-migration
titan:feature/bstein-dev-home
titan:feature/mailu
titan:feature/sso
titan:feature/atlas-monitoring
titan:restructure/hybrid-clusters
titan:fea/titan24-gpu
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.
No description provided.
Delete Branch "feature/hermes-domain-rename-chat-triage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Renames two public Hermes hostnames across titan-iac:
chat.hermes.bstein.dev→hermes.bstein.devtriage.hermes.bstein.dev→triage.bstein.devagent.hermes.bstein.devis deliberately not touched here. That rename is aseparate task/PR and must be mergeable last, because it is the coordinator's own
access point.
This is a repo-only change. Nothing takes effect until this merges and Flux
reconciles. See Rollout below — this rename is not self-contained; it needs a
Keycloak script re-run and certificate issuance to land cleanly.
Pre-flight collision check
Both target hostnames were unused before this change. Verified against
origin/mainacross tracked files:hermes.bstein.dev(exact host, excluding any*.hermes.bstein.dev) — no matchestriage.bstein.dev— no matchesNo ingress rule, certificate SAN, CoreDNS entry, or knowledge-catalog entry
claimed either name.
What changed
24 files, 122 insertions / 122 deletions — a symmetric rename with no
incidental edits.
Network and TLS
infrastructure/core/coredns-custom.yaml— both host entries at 192.168.22.9, kept in the file's alphabetical orderservices/hermes/agent-certificate.yaml— SANs on the sharedhermes-sites-tlscertificateservices/hermes/agent-ingress.yaml—hermes-sitesingress TLS hosts and both rule hostsIdentity and session
services/keycloak/scripts/hermes_access_oidc_ensure.sh— OIDC redirect URI, web origin, root URL and post-logout URI for the chat and triage proxy clientsservices/hermes/oauth2-proxy.yaml— the chat and triage redirect URLsThe oauth2-proxy deployments use
__Host-prefixed cookies with no explicitcookie domain and no whitelist domain, so no cookie-domain edits were needed.
Application config
services/hermes/chat-statefulset.yaml— API server CORS origins and WebUI allowed originsservices/hermes/chat-configmap.yaml,services/hermes/configmap.yaml— dashboard public URLsservices/hermes/deployment.yaml— triage dashboard public URL, CORS origins, WebUI allowed originsservices/maintenance/apps/ariadne-deployment.yaml— the Hermes UI URL printed into proposalsservices/quality/zap-baseline-configmap.yaml— baseline scan targetsOperator- and agent-facing text
services/hermes/configmap.yaml,services/hermes/agent-configmap.yaml— instructions that tell each instance which surface it isservices/hermes/NOTES.md,services/hermes/skills/master-hermes-on-atlas/references/architecture.md— operator guide and surface table, both mounted into ConfigMapsservices/hermes/router/telegram.go— the two sign-in prompts sent to usersdockerfiles/Dockerfile.hermes-agent— the Telegram setup link in the UIdockerfiles/hermes-public-extract/provider.py— outbound User-Agentdockerfiles/hermes-webui-atlas-voice.js— header commentGenerated artifacts — regenerated, not hand-edited
knowledge/catalog/atlas.{json,yaml},knowledge/diagrams/atlas-http.mmdandtheir
services/comms/knowledge/mirrors were produced by the repo's ownrenderer (
make knowledge, i.e.scripts/render/knowledge_render_atlas.py --write --sync-comms), which also re-sorted the affected entries into their newalphabetical positions and renamed the diagram node IDs.
One caveat worth knowing: the committed catalogs on
mainare stale. Runningthe renderer on an unmodified
mainalready produces about 1,650 lines of diffin
atlas.json,atlas.yaml,atlas-summary.jsonandmetrics.jsonthat havenothing to do with this rename. Shipping that here would have buried the rename,
so this PR carries only the rename delta: I rendered both with and without
the hostname change, took the difference between those two renders, and applied
that to the committed files. Each generated file was then checked line-by-line to
confirm every removed line maps to an added line under the hostname substitution
alone.
atlas-summary.jsonandmetrics.jsonare untouched because the renamedoes not affect them.
The pre-existing catalog staleness is left for a separate cleanup — it is
unrelated to this change and deserves its own review.
Remaining old-hostname occurrences
One occurrence is intentionally left in place:
testing/tests/data/hermes_kanban_card_corpus.jsonl:60— a frozen corpus ofhistorical Kanban cards used as test data. The text records what a past task
card actually said; rewriting it would falsify a historical record for no
functional gain.
Nothing else in the repo references either old hostname.
Rollout
Ordering matters — this change is not self-contained.
new names and cert-manager reissues
hermes-sites-tlswith the new SANs. Thecertificate is shared with
agent.hermes.bstein.dev; that SAN is preserved,so the agent host is unaffected. Until issuance completes, the new hosts will
serve a certificate that does not cover them. Wait for the new certificate to
be Ready before announcing the new URLs.
hermes_access_oidc_ensure.shmust runagainst Keycloak to update the redirect URI, web origins, root URL and
post-logout redirect URI for the
hermes-chat-proxyandhermes-triage-proxyclients. Until it does, login at the new hosts fails at the OIDC redirect —
the manifests will already be pointing at URLs Keycloak does not yet accept.
__Host-prefixedand therefore bound to the exact origin, so existing sessions on the old hosts
do not carry over. Everyone re-logins once at the new hostnames.
CoreDNS, from the ingress rules, and from the certificate SANs.
Old-host redirects: proposed, not included
I have not added redirects from the old hostnames — that is a decision to
make deliberately, not something to slip into a rename.
If you want them, the shape would be a Traefik
redirectRegexmiddleware plusretained ingress rules for
chat.hermes.bstein.devandtriage.hermes.bstein.devpointing at the new hosts. The cost is that the oldnames must stay in CoreDNS and stay as SANs on the certificate for as long as
the redirects live, which is exactly the state this PR is retiring. My
suggestion, if you want a soft landing: merge as-is, and if the broken
bookmarks turn out to be annoying, add a time-boxed redirect in a follow-up that
also sets the date the old names get dropped. Say the word and I will open that
PR.
Validation
kustomize buildpasses for every touched service:infrastructure/core,services/comms,services/hermes,services/keycloak,services/maintenance,services/maintenance/apps,services/quality.No old hostname survives in any rendered manifest;
agent.hermes.bstein.devstill renders 16 times in the Hermes output, unchanged.
Full gate (
make test) run on this branch and, for comparison, on anunmodified
origin/mainworktree. Identical results — 4 failed, 2614 passed,4 skipped on both. After rebasing onto current
origin/main(which picked upthe two new tests from #25) this branch is 4 failed, 2616 passed, 4 skipped,
with the same 4 failures. They are pre-existing and unrelated to this
change:
test_hermes_agent_layout.pytest_http_error_path_redacts_tokenintest_hermes_gitea_pr_integration.pytest_auto_supervise_flag_defaults_false_in_configmapintest_hermes_kanban_supervisor.pyRuff also reports the same 3 pre-existing errors on both, in files this PR does
not touch.
sh -nclean on the Keycloak script. The repo has no shellcheck target andshellcheck is not installed in this image, so syntax checking is the available
level of static verification there.
gofmt -lclean on the router, and the router still builds with the sameGO111MODULE=offinvocation the Dockerfile uses.Draft PR — not merging. Over to you.
Wrong hostnames
Pull request closed