You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This intentionally checks deterministic local readiness only:
profile exists
profile has config.yaml
It does not attempt provider-specific credential validation; bad/expired credentials can still fail during worker startup and are reported through the existing spawn-failure path.
Test Plan
venv/bin/python -m pytest tests/hermes_cli/test_kanban_boards.py::TestWorkerSpawnEnv::test_default_spawn_rejects_half_created_profile -q -o 'addopts=' — watched fail before implementation, then pass
Local verification completed before opening this fork PR:
venv/bin/python -m pytest tests/hermes_cli/test_kanban_boards.py::TestWorkerSpawnEnv::test_default_spawn_rejects_half_created_profile -q -o 'addopts=' → failed before implementation as expected, then passed
GitHub Actions are currently showing action_required for this fork PR, so CI appears to be waiting for maintainer approval rather than failing on code.
Closing in favor of #20165 (merged, commit f25d3ec), which fixes the same underlying issue #20054 at a tighter call site.
Your PR's readiness check ran inside _default_spawn (before the subprocess launch). The merged fix runs earlier — inside dispatch_once(), before the task is even claimed. That matters because claim-then-fail creates the crash loop (zombie worker, TTL reclaim, next tick re-spawn), whereas skip-before-claim is silent. The existence-only check also solves a broader real-world scenario (control-plane terminal lane names like orion-cc that never had a profile to begin with) rather than just the half-created-profile case.
On the config.yaml-specific check: we considered auto-materializing a default config for half-created profiles but rejected it. A profile without config.yaml has no model/provider/auth routing; synthesizing a default means the worker silently inherits the root ~/.hermes/config.yaml, which is almost certainly wrong (wrong model, wrong skills, missing provider creds → different failure mode, not a fix). Per the issue reporter's own expected behavior — "leave the task unclaimed and comment with the readiness failure" — fail-fast with a precise diagnostic is the right answer.
Thanks for the contribution — appreciate the clear scoping and test plan in the PR description.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
comp/pluginsPlugin system and bundled pluginsP3Low — cosmetic, nice to havetype/bugSomething isn't working
3 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
config.yaml_default_spawnfrom launchinghermes -p <profile>for half-created profile directoriesFixes #20054
Scope
This intentionally checks deterministic local readiness only:
config.yamlIt does not attempt provider-specific credential validation; bad/expired credentials can still fail during worker startup and are reported through the existing spawn-failure path.
Test Plan
venv/bin/python -m pytest tests/hermes_cli/test_kanban_boards.py::TestWorkerSpawnEnv::test_default_spawn_rejects_half_created_profile -q -o 'addopts='— watched fail before implementation, then passvenv/bin/python -m pytest tests/hermes_cli/test_kanban_boards.py::TestWorkerSpawnEnv -q -o 'addopts='→ 3 passedvenv/bin/python -m pytest tests/hermes_cli/test_kanban_boards.py tests/hermes_cli/test_kanban_db.py tests/hermes_cli/test_kanban_cli.py -q -o 'addopts='→ 124 passedvenv/bin/python -m pytest tests/tools/test_kanban_tools.py tests/plugins/test_kanban_dashboard_plugin.py -q -o 'addopts='→ 89 passed, 2 unrelated deprecation warningsvenv/bin/python -m py_compile hermes_cli/kanban_db.py tests/hermes_cli/test_kanban_boards.py tests/hermes_cli/test_kanban_db.py→ passed