WIP: Replace #30 with durable two-worker CLI concurrency fix #31

Closed
hermes-automation wants to merge 1 commits from feature/hermes-durable-two-worker-cli-concurrency into main
4 changed files with 9 additions and 3 deletions

View File

@ -84,7 +84,9 @@ data:
failure_limit: 2
orchestrator_profile: default
default_assignee: cli-auto
max_in_progress_per_profile: 1
# Allow two in-progress tasks for each normal Hermes gateway profile.
# Direct cli-* runner concurrency is set in execution-coordinator-patch.yaml.
max_in_progress_per_profile: 2
auto_decompose: true
auto_decompose_per_tick: 2
# In-pod autonomous supervisor (kanban_supervisor.py). Default false so it

View File

@ -18,7 +18,9 @@ spec:
- name: cli-lane-runner
env:
- {name: HERMES_CLI_LANE_OWNED_WORKSPACES_ONLY, value: "true"}
- {name: HERMES_CLI_LANE_CONCURRENCY, value: "1"}
# Cap simultaneous direct cli-* Codex/Claude runner processes;
# normal Hermes profiles use kanban.max_in_progress_per_profile.
- {name: HERMES_CLI_LANE_CONCURRENCY, value: "2"}
- name: execution-pool-coordinator
image: registry.bstein.dev/bstein/hermes-agent@sha256:81970563e542f0720773e72297810b3a844b83e381e278f25c0916c78d930107
imagePullPolicy: IfNotPresent

View File

@ -107,8 +107,10 @@ def test_agent_uses_one_native_kanban_control_plane():
"default": "atlas/auto/balanced",
"model": "atlas/auto/balanced",
}
assert config["gateway"]["api_server"]["max_concurrent_runs"] == 4
assert config["kanban"]["dispatch_in_gateway"] is True
assert config["kanban"]["default_assignee"] == "cli-auto"
assert config["kanban"]["max_in_progress_per_profile"] == 2
assert config["plugins"]["enabled"] == ["auto-router"]
deployment = _agent_deployment()

View File

@ -124,7 +124,7 @@ def test_additive_patch_replaces_local_lane_without_touching_base_deployment():
environment = {item["name"]: item["value"] for item in local["env"]}
assert environment == {
"HERMES_CLI_LANE_OWNED_WORKSPACES_ONLY": "true",
"HERMES_CLI_LANE_CONCURRENCY": "1",
"HERMES_CLI_LANE_CONCURRENCY": "2",
}
assert pool["resources"]["requests"] == {"cpu": "50m", "memory": "128Mi"}
access = next(item for item in pool["volumeMounts"] if item["name"] == "runtime-access")