5603 Commits

Author SHA1 Message Date
flux-bot
049c39b339 chore(maintenance): automated image update 2026-08-23 01:54:50 +00:00
jenkins
8acb99d100 hermes: make Claude setup-token access durable 2026-08-22 22:52:28 -03:00
flux-bot
5e0b0d9cd6 chore(maintenance): automated image update 2026-08-23 01:49:36 +00:00
jenkins
b8294f8e90 longhorn: reduce Jellyfin policy churn 2026-08-22 22:18:03 -03:00
jenkins
eec373dd56 jellyfin: run media service on titan-22 2026-08-22 22:10:46 -03:00
jenkins
5430c9ac01 jellyfin: prepare titan-22 media host 2026-08-22 22:06:39 -03:00
jenkins
76fe550871 node(titan-22): remove completed canaries 2026-08-22 21:22:33 -03:00
jenkins
21264a71c8 node(titan-22): return worker to service 2026-08-22 21:21:03 -03:00
jenkins
091a787fc7 node(titan-22): persist Realtek firmware 2026-08-22 20:55:47 -03:00
jenkins
074f988731 node(titan-22): migrate k3s to USB ethernet 2026-08-22 20:42:51 -03:00
jenkins
db0cb86ca6 hermes: stabilize Claude access health probes 2026-08-22 18:07:58 -03:00
jenkins
9bffc077e8 hermes: avoid recursive home ownership rollout
Some checks failed
Tests / Declarative: Post Actions failed: 40, skipped: 19, passed: 2746
2026-08-22 17:38:42 -03:00
jenkins
bd50a7e4ad hermes: persist Claude subscription access 2026-08-22 17:32:30 -03:00
jenkins
9bf41dc0de hermes: decouple node maintenance health 2026-08-22 16:39:44 -03:00
jenkins
fd42e892f7 hermes: avoid flapping worker node 2026-08-22 16:17:33 -03:00
jenkins
fdf53b264b hermes: fit owner pod on healthy workers 2026-08-22 15:55:30 -03:00
jenkins
45a7a4dded platform: right-size Vault sidecar requests 2026-08-22 15:48:41 -03:00
jenkins
46a44241c1 hermes: reclaim healthy worker capacity 2026-08-22 15:42:56 -03:00
jenkins
8a8df5ee4f hermes: add stateful accelerator fallback 2026-08-22 15:32:21 -03:00
jenkins
9b7adc3826 mailu: allow Dovecot storage failover 2026-08-22 15:09:54 -03:00
jenkins
41658393a4 mailu: remount Dovecot storage after lock failure 2026-08-22 14:50:16 -03:00
flux-bot
a48322c5ee chore(maintenance): automated image update 2026-08-22 14:00:17 +00:00
flux-bot
821e27e845 chore(maintenance): automated image update 2026-08-22 13:54:16 +00:00
flux-bot
121daf9145 chore(maintenance): automated image update
Some checks failed
Tests / Declarative: Post Actions failed: 45, skipped: 19, passed: 2738
2026-08-22 01:54:06 +00:00
flux-bot
c19e9d77bf chore(maintenance): automated image update 2026-08-22 01:54:00 +00:00
flux-bot
5826c6054d chore(maintenance): automated image update 2026-08-22 01:49:59 +00:00
flux-bot
69f9ec99f2 chore(maintenance): automated image update 2026-08-22 01:43:57 +00:00
66c1c11d06 Merge pull request 'Rename the owner agent host to worker.bstein.dev (supersedes #41)' (#42) from feature/hermes-domain-rename-agent-worker-v2 into main
Reviewed-on: atlas/titan-iac#42
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 23:16:04 +00:00
ed98278981 Merge branch 'main' into feature/hermes-domain-rename-agent-worker-v2
Some checks failed
Tests / Declarative: Post Actions failed: 40, skipped: 19, passed: 2743
2026-08-21 23:15:16 +00:00
4c9f48cbbc Merge pull request 'docs(hermes): add multi-user chat capacity assessment' (#45) from hermes/t_65356568-multiuser-capacity-assessment into main
Reviewed-on: atlas/titan-iac#45
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 23:14:47 +00:00
8ce45159de Merge branch 'main' into hermes/t_65356568-multiuser-capacity-assessment
Some checks failed
Tests / Declarative: Post Actions failed: 41, skipped: 19, passed: 2740
2026-08-21 23:14:33 +00:00
0841681a06 Merge pull request 'fix(hermes): cli-auto capacity failover uses automatic Switchyard reclassification' (#32) from fix/cli-auto-failover-effort into main
Reviewed-on: atlas/titan-iac#32
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 23:13:08 +00:00
77905ff1db Merge branch 'main' into fix/cli-auto-failover-effort
Some checks failed
Tests / Declarative: Post Actions failed: 40, skipped: 19, passed: 2737
2026-08-21 23:12:12 +00:00
fcef884699 Merge pull request 'Hermes: combine multilingual Piper with Whisper language routing (after #43)' (#46) from feature/hermes-pr44-after-pr43 into main
Reviewed-on: atlas/titan-iac#46
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 21:30:06 +00:00
Hermes Agent
820872e117 feat(hermes-voice): route Whisper language to multilingual Piper
Port the original #27 detected-language pipeline onto the verified PR #39 prerequisite while preserving the current-main conversation instrument and host continuity changes.

Keep voice selection server-side with no user selector or client voice field. Reuse 207c16ab only for its stricter exact-code trust boundary, omitting malformed or absent language so Piper defaults to Amy.
2026-08-21 13:58:50 +00:00
Hermes Agent
724656d841 feat(hermes-tts): prepare fixed multilingual voice policy
Supersede draft PR #26 with a merge-safe prerequisite: bake and preload the amy, irina, and claude Piper models, route only validated server-side language to fixed voices, and leave the live voice deployment manifest unchanged.

Remove the pinned WebUI speaker selector and its persisted preference, omit client voice fields from every outbound TTS path, and keep hands-free Voice Mode and the conversation instrument intact. Hostile or legacy voice fields remain ignored by the Piper server.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 13:45:31 +00:00
431533dfce Merge pull request 'Fix hands-free STT WebM conversion' (#43) from fix/hermes-handsfree-stt-webm into main
Some checks failed
Tests / Declarative: Post Actions failed: 40, skipped: 7, passed: 2612
Reviewed-on: atlas/titan-iac#43
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 13:38:58 +00:00
Hermes Agent
d8ccf4a6fa docs(hermes): add multi-user chat capacity assessment
Read-only investigation of the chat request path, replica/resource
manifests, and live node metrics. Documents the confirmed 4-user
tenant-slot ceiling, a TENANT_SLOTS=8 vs replicas=4 configuration
drift, the shared Claude-broker concurrency=2 bottleneck, missing
HPA/PDB/staging environment, and a proposed SLO/load-test and staged
scaling plan pending human approval. No production manifests changed.

Co-Authored-By: Hermes Agent <hermes-automation@bstein.dev>
2026-08-21 12:38:02 +00:00
Hermes Agent
cfd8a75e95 fix(hermes-voice): preserve MediaRecorder container headers 2026-08-21 11:12:15 +00:00
Hermes Agent
94106bf252 refactor(hermes): rename the owner agent host to worker.bstein.dev
Introduce worker.bstein.dev as the canonical hostname for the owner-only
Hermes coordinator, previously agent.hermes.bstein.dev.

The rename is additive, matching the shape #38 restored for chat and triage.
CoreDNS, both agent Ingresses and the hermes-sites certificate now serve BOTH
names, so merging this cannot take away the endpoint the operator uses to
reach the coordinator. Retiring agent.hermes.bstein.dev is a separate,
separately scheduled change. No redirect middleware is added.

What switches to the new host:
- HERMES_DASHBOARD_PUBLIC_URL and the oauth2-proxy --redirect-url
- the Keycloak agent proxy rootUrl
- operator docs, skills, the ZAP baseline target and the triage monitor default

What stays dual-homed until retirement:
- CoreDNS hosts entry, both agent Ingress rules, certificate SANs
- API_SERVER_CORS_ORIGINS (now a comma-separated pair)
- the Keycloak redirect URIs, web origins and post-logout origins, so a
  rollback only needs the oauth2-proxy --redirect-url reverted and does not
  require re-running the ensure job

The agent client passes its legacy origin through the optional fourth argument
#38 added to ensure_proxy_client, so no second mechanism is introduced. The
immutable ensure Job goes -11 -> -12 because #38 already consumed -11 and that
run has completed; without a further bump this change would never be applied.
Login on the new host fails until the -12 Job completes.

Because the session and CSRF cookies use the __Host- prefix they are bound to
one origin, so a fresh login must start on worker.bstein.dev and existing
sessions do not carry over -- re-login is required after rollout.

#38's public-host continuity test now covers the agent proxy's dual origins
rather than asserting the agent surface was untouched by the rename.

Knowledge catalogs and diagrams regenerated with `make knowledge`.
2026-08-21 10:29:46 +00:00
Hermes Agent
004c41629e chore(knowledge): regenerate stale Atlas catalogs
`make knowledge` output on main no longer matched the manifests it renders
from. The legacy chat/triage hosts restored by #38 were missing from the
committed HTTP catalogs and diagrams, along with Flux kustomizations and
Grafana panels added since the last regeneration.

Pure `make knowledge` run against unmodified main, separated into its own
commit so the hostname rename that follows reviews as a hostname rename and
nothing else. No hand edits.
2026-08-21 10:24:46 +00:00
5f9c600f6e Merge pull request 'hermes: restore legacy chat/triage hosts alongside the renamed ones' (#38) from fix/hermes-restore-legacy-chat-triage-hosts-v2 into main
Reviewed-on: atlas/titan-iac#38
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 10:17:49 +00:00
4d072f32ce Merge branch 'main' into fix/hermes-restore-legacy-chat-triage-hosts-v2 2026-08-21 10:17:25 +00:00
flux-bot
ab33b582c8 chore(bstein-dev-home): automated image update 2026-08-21 10:06:01 +00:00
flux-bot
678698c44b chore(bstein-dev-home): automated image update 2026-08-21 10:04:01 +00:00
Hermes Agent
fd4bf69007 test(hermes): pin public chat/triage host continuity across every layer
The #34 rename dropped the legacy chat/triage names from the certificate
SANs, the hermes-sites Ingress, the CoreDNS overrides and the Keycloak
ensure script at the same time, so nothing failed loudly: DNS and TLS
still looked healthy while the legacy hosts served 404 and the renamed
hosts could not finish a login.

Pin the invariant that makes that silent: a public host is either served
by all four layers or by none. The table of hosts is the contract, so
retiring a name stays a deliberate edit rather than a side effect.

Verified to catch the regression: against the pre-fix tree these fail for
both legacy hosts on all four layers (9 failures); against this branch
the suite is green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 08:57:50 +00:00
Hermes Agent
f4f51323f6 hermes: restore legacy chat/triage hosts alongside the renamed ones
PR #34 renamed the public chat/triage hosts in place rather than adding
the new names, so chat.hermes.bstein.dev and triage.hermes.bstein.dev
were dropped from the certificate SANs, the hermes-sites Ingress rules
and the CoreDNS overrides at once. Both legacy hosts now answer 404 with
Traefik's default self-signed certificate, and the renamed hosts cannot
complete a login because the Keycloak clients still carry the old
redirect URIs, so chat and triage are unreachable on every hostname.

Make the rename additive, which is the rollback path the post-merge
runbook asks for when the OIDC step fails:

- put the legacy names back on hermes-sites-tls and on the Ingress,
  pointing at the same oauth2-proxy backends
- restore both CoreDNS host overrides for in-cluster resolution
- teach ensure_proxy_client to register an optional legacy origin, so
  hermes-chat-proxy and hermes-triage-proxy accept the old and new
  redirect URIs, web origins and post-logout origins at the same time
  while rootUrl stays on the canonical new host
- bump the immutable ensure Job so Flux reruns the script

Serving both names is deliberate: oauth2-proxy cookies are host-bound,
so redirecting the legacy hosts would silently drop live sessions.
Retiring them stays a separate, explicit change.

Supersedes #36, which only bumped the Job and would have left the
legacy hosts dark.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 08:49:09 +00:00
e3de466ad1 Merge pull request 'Complete direct CLI lane concurrency omitted by #30 (supersedes #31)' (#35) from feature/hermes-direct-cli-lane-concurrency-2-replacement into main
Some checks failed
Tests / Declarative: Post Actions failed: 36, skipped: 7, passed: 2591
Reviewed-on: atlas/titan-iac#35
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 07:58:17 +00:00
66a537ddbe Merge branch 'main' into feature/hermes-direct-cli-lane-concurrency-2-replacement 2026-08-21 07:57:35 +00:00
8ace4d47e1 Merge pull request 'refactor(hermes): rename chat and triage public hostnames' (#34) from feature/hermes-domain-rename-chat-bstein-triage into main
Reviewed-on: atlas/titan-iac#34
Reviewed-by: bstein <bstein@noreply.scm.bstein.dev>
2026-08-21 07:48:55 +00:00