52 Commits

Author SHA1 Message Date
Hermes Agent
750dfa241f hermes: fail closed on kanban created-event producer drift
The sticky-block gate added in the previous commit classifies a task from
the `created` event payload that upstream `create_task` writes. That
producer is code we do not own, so trusting it silently was the gap: if
upstream renamed the key, dropped it, or stopped deriving it from
`initial_status`, the image would still build and ship a consumer that
mis-classifies every task it reads.

Anchor the producer contract at build time, before the regression suite
runs, with three assert-only preconditions: the `initial_status="blocked"`
park resolves `task_status` to `"blocked"`, every non-park creation
resolves it to something else, and the `created` event carries that same
variable under `"status"`. None of them rewrite the producer.

Textual anchors cannot see dataflow, so add the runtime net the reviewer
asked for. The suite now drives the real API: create + claim an ordinary
task, trip the circuit breaker once at failure_limit=1 so it parks with a
`gave_up` event (leaving its own `created` event as the most recent
create/block/unblock row), then recompute at failure_limit=2 and require
promotion to ready. That case is red under an unconditional-true created
predicate and red under producer drift that labels every created event
blocked, while the explicit block/unblock, dependency-promotion and
circuit-breaker-at-current-limit cases stay green. Non-blocked and
malformed created payloads are pinned as controls, and the gate now
rejects non-dict payloads rather than trusting `.get`.

Also make the live placement correction durable: titan-04 is cordoned
after repeated kernel undervoltage and kubelet failure and titan-19 was
probe/Longhorn unstable under worker load, so both join the hard NotIn
list; titan-05 is healthy but sits at 3592m/3600m requested CPU, so the
main hermes container gives back 50m (350m -> 300m) to schedule there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 22:42:18 +00:00
Hermes Agent
4f8dcfbbf7 hermes: harden worker isolation and blocked-task semantics
Three narrowly scoped Hermes reliability fixes backed by live evidence
from the Cassandra/titan-iac proof run.

Worker concurrency. Three simultaneous direct CLI workers on the 4-core
hermes-agent node drove load to ~45 and made the hermes and oauth2-proxy
containers fail their probes, leaving the pod 8/10 Ready; two workers
stayed at 10/10. Cap HERMES_CLI_LANE_CONCURRENCY at 2 and lower the
cli-lane-runner CPU limit from 3 to 2 so the dashboard and auth sidecars
keep a guaranteed share of the node. Requests are unchanged: the pod
still asks for 745m total, so placement does not move.

Service links. Kubernetes injects a service-link variable pair for every
service in the namespace, and hermes-claude-broker produces
HERMES_CLAUDE_BROKER_PORT=tcp://10.43.31.76:9006 — a value the broker
parses as an int. That contaminated worker and test environments even
though the deployment already addresses every service by DNS name. Set
enableServiceLinks: false on the hermes-agent pod spec.

Blocked-task scheduling. create_task(initial_status="blocked") records a
created event carrying status=blocked but never a blocked event, while
_has_sticky_block() only inspects blocked/unblocked events. recompute_ready()
considers blocked tasks, so an explicitly parked task with no incomplete
parent auto-promoted on the next dispatcher cycle. Teach _has_sticky_block()
to also recognize a created event whose payload status is blocked, which
covers tasks created before this image patch without adding a persisted
field. Dependency-driven promotion and the circuit-breaker failure-limit
guard are untouched; unblock_task() still releases either kind of block.

hermes-kanban-blocked-regression.py runs against the real upstream
kanban_db API during the image build, so the build fails if any of these
semantics regress.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 20:53:22 +00:00
jenkins
ba590c2518 hermes: retain native auth failure health 2026-08-16 13:47:19 -03:00
jenkins
2a103f9895 hermes: require findings in worker schema 2026-08-16 12:04:27 -03:00
jenkins
1ea8e16286 hermes: separate review findings from blockers 2026-08-16 11:54:26 -03:00
jenkins
42ac76fe67 hermes: carry goal-loop controller evidence 2026-08-16 11:27:24 -03:00
jenkins
1527fd1af0 hermes: enforce goal completion evidence 2026-08-16 11:11:38 -03:00
jenkins
2a94c7c74f hermes: isolate worker database lifetimes 2026-08-16 10:30:58 -03:00
jenkins
e758ee1059 hermes: survive transient Kanban storage faults 2026-08-16 09:33:30 -03:00
jenkins
18eeeabb62 hermes: avoid unavailable worker providers 2026-08-16 09:19:23 -03:00
jenkins
c0eda84fa1 hermes: recover stale Codex worker threads 2026-08-16 08:54:19 -03:00
jenkins
3b003b850d hermes: preserve Vault CLI credentials for workers 2026-08-16 08:39:45 -03:00
jenkins
bebd92212e hermes: install pinned Go toolchain 2026-08-16 05:38:01 -03:00
jenkins
56a254d7d1 monitoring(ai): allow Switchyard metric scraping 2026-08-16 05:24:52 -03:00
jenkins
9bc47f9ce3 hermes: keep durable worker activity visible 2026-08-16 01:20:08 -03:00
jenkins
e9efec4ddf hermes: keep provider lanes available under load 2026-08-15 22:15:40 -03:00
jenkins
89b9f1a4c7 hermes: isolate runtime access and expose activity 2026-08-15 22:15:40 -03:00
jenkins
07b64a0245 hermes: expose Vault SSH config to OpenSSH 2026-08-15 14:45:27 -03:00
jenkins
1ee766bc1e hermes: mount node access through Vault CSI 2026-08-15 14:34:49 -03:00
jenkins
d311df6c9b hermes: preserve node SSH account ownership 2026-08-15 14:27:11 -03:00
jenkins
6f459dfc63 hermes: fit node access on constrained workers 2026-08-15 14:17:38 -03:00
jenkins
d27a9649cf hermes: secure node access and expose live workers 2026-08-15 13:58:42 -03:00
jenkins
7dbde8e85d hermes: adaptively scale engineering routes 2026-08-15 13:28:47 -03:00
jenkins
2ae88973be hermes: add audited Atlas operator access 2026-08-15 13:22:01 -03:00
jenkins
e9b36181e4 hermes: isolate durable worker lifecycle 2026-08-15 06:31:16 -03:00
jenkins
846c890527 hermes: load tool credentials before s6 2026-08-15 03:44:00 -03:00
jenkins
046dd6fae4 hermes: activate Telegram and isolate corrupt boards 2026-08-13 12:24:35 -03:00
jenkins
3a1cfd5f12 test(hermes): align native provider contracts 2026-08-13 00:15:20 -03:00
jenkins
d8566f007f hermes: recover interrupted provider streams 2026-08-12 10:41:47 -03:00
jenkins
418b5913a2 hermes: enforce AUTO routing quality floors 2026-08-12 00:05:02 -03:00
jenkins
544bc01ac9 hermes: expose Switchyard worker health 2026-08-11 22:38:05 -03:00
jenkins
8e48272e44 hermes: relocate Switchyard state from wedged node 2026-08-11 22:30:33 -03:00
jenkins
23f068e3fd hermes: allow Switchyard Vault bootstrap 2026-08-11 21:42:25 -03:00
jenkins
422f001a93 hermes: make Switchyard the routing authority 2026-08-11 20:22:26 -03:00
jenkins
00e67b1482 hermes(agent): preflight protected socket auth 2026-08-11 04:05:46 -03:00
jenkins
c411018853 hermes(agent): recover stale dashboard sockets 2026-08-11 03:50:13 -03:00
jenkins
1e07d4c256 hermes: broker isolated chat through Codex 2026-08-11 03:15:34 -03:00
jenkins
436c9605bf hermes: stabilize oauth sessions and enable images 2026-08-11 01:51:30 -03:00
jenkins
8df3d3314c hermes: add private image generation and repair xhigh fallback 2026-08-11 01:14:46 -03:00
jenkins
e52dd92d84 hermes(agent): reuse Codex CLI auth for auxiliaries 2026-08-11 00:41:08 -03:00
jenkins
f48ac926ec hermes(agent): retry dashboard ticket acquisition 2026-08-10 23:57:32 -03:00
jenkins
6169b2c802 hermes(agent): reconnect stock dashboard feeds 2026-08-10 23:44:56 -03:00
jenkins
b8d9e44f93 hermes(agent): preserve Codex fallback context 2026-08-10 23:19:42 -03:00
jenkins
56ed8f6f69 hermes(agent): validate Codex owner runtime 2026-08-10 22:54:26 -03:00
jenkins
bbb926526e hermes(agent): route native Codex through CLI runtime 2026-08-10 22:39:51 -03:00
jenkins
a7295a992a hermes(agent): probe loopback stock dashboard 2026-08-10 21:38:39 -03:00
jenkins
377817606b flux(hermes): track owner oauth sidecar health 2026-08-10 21:29:41 -03:00
jenkins
07325b94be hermes(agent): supervise stock dashboard with gateway 2026-08-10 21:27:24 -03:00
jenkins
94ea0253c4 hermes(agent): restore stock dashboard reliability 2026-08-10 21:09:06 -03:00
jenkins
3f2f82b6ee hermes(agent): complete owner operator toolbox 2026-08-10 17:24:46 -03:00