467 Commits

Author SHA1 Message Date
jenkins
9cc49dedeb hermes: sign recovery attestations for the target worker 2026-09-13 18:07:04 -05:00
jenkins
743014ca33 hermes: pin the legacy publication terminal outcome 2026-09-13 18:01:18 -05:00
jenkins
37bd860a47 hermes: recognize retained blocked publication runs 2026-09-13 17:59:26 -05:00
jenkins
bf2a1ab528 hermes: resume preserved PR publications without model retries 2026-09-13 17:54:54 -05:00
jenkins
36209965b4 hermes: clarify routine implementation routing effort 2026-09-13 17:04:34 -05:00
jenkins
8f2359b635 hermes: preserve legacy provider session directories 2026-09-13 16:52:44 -05:00
jenkins
13c3891996 hermes: align classifier examples with capability routes 2026-09-13 16:52:44 -05:00
jenkins
bd5f261402 hermes: use native task links throughout PR follow-ups 2026-09-13 16:42:49 -05:00
jenkins
38a794c2a9 hermes: resolve PR follow-ups from their trusted root 2026-09-13 16:27:01 -05:00
jenkins
4d7087d394 hermes: move chat tenants off the failing node runtime 2026-09-13 16:23:55 -05:00
jenkins
13a7dbab46 hermes: reserve PR follow-ups for mediated workers 2026-09-13 16:15:50 -05:00
jenkins
74d8485f6a hermes: isolate PR state and recover the Soteria board 2026-09-13 15:46:39 -05:00
jenkins
e040102121 hermes: route by capability and continue existing pull requests 2026-09-13 15:04:01 -05:00
jenkins
46f9995fe5 hermes: roll out the resumed transcript patch 2026-09-13 14:27:29 -05:00
jenkins
17d70759e0 hermes: show recorded tool activity in resumed chats 2026-09-13 14:25:25 -05:00
jenkins
364d1b3503 hermes: recover interrupted provider CLI installs 2026-09-13 14:11:40 -05:00
jenkins
0192ef8ee8 hermes: mount routing catalog for execution workers 2026-09-13 14:02:20 -05:00
jenkins
969febe7e4 hermes: keep chat on verified worker hosts 2026-09-13 02:29:44 -05:00
jenkins
69022366ff hermes: avoid stalled titan-04 for chat tenants 2026-09-13 02:06:08 -05:00
jenkins
d141b33a7d hermes: resolve difficulty routes from live model catalogs 2026-09-13 01:48:05 -05:00
jenkins
2ab737f8f8 fix(hermes): hide the worker overlay on dashboard pages 2026-09-12 22:37:23 -05:00
jenkins
8d1302765f gitea: migrate sources to titan/atlas-iac 2026-09-01 20:43:50 -03:00
jenkins
391a7f2f1f hermes(agent): make titan-22 the strong primary home
Now that both the agent image (a68d1c4d, via the kustomize images: override)
and the hux sidecar (build-39) are multi-arch with amd64 leaves, move the worker
onto the amd64 accelerator titan-22:
- Add an OR'd nodeSelectorTerm for amd64 + node-role.kubernetes.io/accelerator +
  hostname titan-22, with NO worker=true requirement. Keep the arm64 pi-fleet
  term as an OR'd fallback so the worker is never stranded.
- Strong primary preference: hostname=titan-22 at weight 100 (scheduler max),
  pi-fleet rpi5 nudge lowered to 50, so hermes actually lives on titan-22.
- Tolerate node-role.kubernetes.io/accelerator=true:NoSchedule (harmless where
  absent) and the soft atlas.bstein.dev/media-primary:PreferNoSchedule that
  titan-22 currently carries, so the weight-100 preference is not offset and
  placement is deterministic.

Completes the titan-22 effort the flip branches missed; the earlier branches
never repointed to multi-arch images, which is why the worker never landed here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 20:17:28 -03:00
flux-bot
6c35930f0b chore(hermes): promote validated image release 2026-08-25 23:05:30 +00:00
jenkins
db446c9244 monitoring(ai): alert before Claude quota auth expires 2026-08-25 19:16:01 -03:00
jenkins
e7d6759140 fix(hermes-agent): reinstall codex when this arch's native dep is missing
The arch-specific CLI stamp assumed the shared node_modules keeps both arches'
codex native deps, but a sibling-arch npm install removes this arch's binary from
the shared volume. So after running on the other arch, the stamp exists yet the
native codex dep is gone -> configure-agent-clients fails -> churn. Gate the
install on the current arch's native codex package being present, so it self-heals.
2026-08-25 18:23:13 -03:00
jenkins
70002aeff7 Revert "Reapply "hermes(agent): make titan-22 the strong primary home (no worker label)""
This reverts commit 9e4fbf4e0df364230588749f80710a8369a3108f.
2026-08-25 17:49:44 -03:00
jenkins
a01eac5059 Revert "Reapply "hermes(agent): also tolerate titan-22's media-primary taint (flip applied pre-classification)""
This reverts commit 2e38422478b0d569441176431f104faae0dd1703.
2026-08-25 17:49:44 -03:00
jenkins
2e38422478 Reapply "hermes(agent): also tolerate titan-22's media-primary taint (flip applied pre-classification)"
Some checks failed
Tests / Declarative: Post Actions failed: 49, skipped: 81, passed: 3753
This reverts commit 1c495a6e2c0a525b9e16608b16bc09c645e3c337.
2026-08-25 17:40:36 -03:00
jenkins
9e4fbf4e0d Reapply "hermes(agent): make titan-22 the strong primary home (no worker label)"
This reverts commit f8628e6ee0d2c33d287ec9086ff5328d982e88c3.
2026-08-25 17:40:36 -03:00
jenkins
12a6d2c4f5 hermes(agent): make runtime tooling install architecture-aware
The hermes-agent installs its CLI toolchain at runtime into the shared
/opt/data/tools Longhorn volume, but every download hardcoded arm64. On
the amd64 node titan-22 that left configure-agent-clients failing with
"Missing optional dependency @openai/codex-linux-x64" and the operator
toolchain fetching arm64 binaries, so the pod churned.

Detect the running node's arch (uname -m; fail closed on anything but
aarch64/x86_64) and resolve every asset per-arch:

- install-agent-tools init script (agent-deployment.yaml): ttyd and
  kubectl download the arch-correct asset with the arch-correct sha256
  (real ttyd 1.7.7 x86_64 and kubectl v1.33.3 amd64 checksums added; the
  arm64 ones kept). The npm CLI stamp is now arch-specific
  (.cli-versions-<vers>-${arch}) so a fresh arch re-runs npm install and
  pulls its own native optional deps; npm keeps both arches' packages.

- install_agent_tools.sh: flux/helm/kustomize/jq/yq/gh/vault/sops/age/
  k9s/terraform/go URLs, tarball subdirs (helm linux-${arch}, gh dir),
  and checksums are all arch-resolved with both arches pinned. Stamps
  and the Go tree are arch-specific, and an active-arch marker forces a
  republish of the single-arch ${bin} binaries when the pod moves
  between arches on the shared volume. Single fetch/verify helper kept.

Tests updated to assert the arch-aware form (both arches' Go checksums,
${dl_arch} templating) instead of the arm64-only literal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 17:37:57 -03:00
jenkins
f8628e6ee0 Revert "hermes(agent): make titan-22 the strong primary home (no worker label)"
This reverts commit 2de52ec3e2e42696ae411482cb16f27ff1f5d273.
2026-08-25 16:54:04 -03:00
jenkins
1c495a6e2c Revert "hermes(agent): also tolerate titan-22's media-primary taint (flip applied pre-classification)"
This reverts commit aa5898f9e33b371451c94af803cda1e0ed714591.
2026-08-25 16:54:04 -03:00
jenkins
aa5898f9e3 hermes(agent): also tolerate titan-22's media-primary taint (flip applied pre-classification)
Applying the titan-22 flip ahead of the full accelerator classification, so
titan-22 still carries its soft media-primary taint. Tolerate it too so the
strong titan-22 preference isn't penalised. Harmless once media-primary is gone.
2026-08-25 16:43:32 -03:00
jenkins
5631366c4e hermes(agent): make titan-22 the strong primary home (no worker label)
APPLY ONLY AFTER the multi-arch hermes-agent image is built + validated
(both arch leaves + promoted index). Supersedes the earlier titan-22
flip on feature/hermes-agent-multiarch (dfa50b75), which required
worker=true and tolerated the old media-primary taint.

Rewrites the runtime node affinity so hermes-agent runs on titan-22:
- Adds a second, OR'd nodeSelectorTerm matching amd64 + hostname
  titan-22 + node-role.kubernetes.io/accelerator=true. It does NOT
  require node-role.kubernetes.io/worker (titan-22 is no longer a
  generic worker).
- Keeps the arm64 pi-fleet term untouched as an OR'd fallback so the
  worker is never stranded if titan-22 is unavailable.
- Makes titan-22 the STRONG/primary preference: a hostname=titan-22
  preference at weight 100 (the scheduler maximum) outranks the pi-fleet
  rpi5 nudge, lowered to weight 50, so hermes actually lives on titan-22.
- Tolerates node-role.kubernetes.io/accelerator=true:NoSchedule so it
  can consider titan-22; this does not change jellyfin's media-core
  priority or preemption.

Updates test_hermes_agent_layout.py to the two-term topology, the
[100, 50] preference weights, the titan-22 primary preference, the
absence of a worker requirement on the titan-22 term, and the toleration.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 16:43:32 -03:00
flux-bot
aae22ea798 chore(hermes): promote validated image release 2026-08-25 19:28:55 +00:00
jenkins
500741020a fix(hermes): revert hard rpi5 requirement (it stranded worker)
Requiring rpi5 while the historical hostname exclusion list removes the very rpi5
nodes that currently have headroom (titan-04/06) left only loaded rpi5s
(titan-05/07/11), so the agent could not schedule and worker went down. Revert to
rpi5-PREFERRED (soft) so it schedules again; proper rpi5 placement needs the
exclusion list refreshed against current node health/capacity, tracked separately.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 10:25:54 -03:00
jenkins
c44f16e4ac fix(hermes): require rpi5 for worker (keep the heavy agent off rpi4)
Un-pinning let the scheduler land worker on titan-12 (rpi4). The agent is heavy
enough that an rpi4 risks the /api/status slowness that trips its liveness probe
- the exact flap we are avoiding. Make hardware=rpi5 a hard requirement so it
runs only on rpi5 storage workers (excluding the saturated/known-flaky ones);
the scheduler places it on a roomy rpi5 (titan-05).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 10:10:24 -03:00
jenkins
e54d581ef5 fix(hermes): un-pin worker from titan-08; spread across arm64 storage workers
Worker (hermes-agent) was hard-pinned to titan-08 (a workaround after an earlier
attempt to place it on the amd64 titan-22 failed on architecture). That single-
node pin is exactly what makes it fragile: a titan-08 blip (as just happened when
the node's Longhorn CSI went down) strands worker, and the Recreate strategy then
deadlocks because the replacement can't schedule on the one tight node.

Restore the intended multi-node design: run on any arm64 storage worker except the
known-bad/weak ones (matching the repo's own affinity test, which was red). Its
Longhorn volumes have data-locality disabled with replicas on titan-15/17/19, so
there is no locality penalty to running on another node; the scheduler now places
it on a roomier Pi (e.g. titan-05) and a node blip simply reschedules it.

Also relax the gateway /api/status liveness probe (timeout 10s->15s,
failureThreshold 3->5) so a transient slowness (e.g. a brief storage hiccup) no
longer trips a kill-and-restart cascade.

Follow-up (separate): multi-arch agent image to enable the amd64 titan-22 target.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-25 09:30:06 -03:00
flux-bot
5888850eba chore(hermes): promote validated image release
Some checks failed
Tests / Declarative: Post Actions failed: 49, skipped: 81, passed: 3727
2026-08-25 04:43:23 +00:00
flux-bot
9f49a1ba2c chore(hermes): promote validated image release 2026-08-25 03:37:13 +00:00
flux-bot
a59590be79 chore(hermes): promote validated image release 2026-08-25 02:56:09 +00:00
flux-bot
b59f754f5a chore(hermes): promote validated image release 2026-08-25 01:53:50 +00:00
flux-bot
63bd63c283 chore(hermes): promote validated image release 2026-08-25 01:35:01 +00:00
flux-bot
700301d554 chore(hermes): promote validated image release 2026-08-25 00:35:53 +00:00
flux-bot
77380bfc25 chore(hermes): promote validated image release 2026-08-25 00:11:52 +00:00
flux-bot
f96070f6d9 chore(hermes): promote validated image release 2026-08-24 23:48:49 +00:00
jenkins
b99952f16c hermes(stt): greedy single-temperature final decode for fast startup
Beam-2 with a temperature-fallback ladder made the final-model warmup
run all three temperature retries under beam search before the server
bound its port, so /health was refused for ~8 min and STT was down that
whole time on every roll (and hinted at slow per-utterance decodes).
Production now runs the accurate large-v3-turbo model greedily at a
single temperature, keeping the proper-noun priming prompt that fixes
names like Amy/Córdoba - fast startup, fast decodes, accuracy intact.
Beam stays env-tunable (HERMES_STT_FINAL_BEAM_SIZE) for a future pass;
serve-before-warmup is a recommended follow-up so cold start never
blocks readiness.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-24 20:20:28 -03:00
jenkins
546e960185 hermes(stt-client): retry a brief STT outage, never dump a traceback
A transcription that landed while the private Whisper service was
restarting (an image roll) crashed hermes_stt_client.py with a raw
urllib ConnectionRefused traceback that got dumped into the
conversation. The client now retries the request with backoff (up to 5
attempts, ~10s - long enough to ride an STT pod restart) and, on a
persistent outage, exits with one concise line ('speech transcription
unavailable...') instead of a stack trace. Delivered via the coordinator
ConfigMap; the next reconcile picks it up.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-24 20:16:57 -03:00
flux-bot
c54eeada1b chore(hermes): promote validated image release 2026-08-24 23:08:35 +00:00