hermes-bsd/hermes_cli
Teknium 3b122cc1ac
feat(kanban): stranded_in_ready diagnostic for unclaimed tasks (#23578)
Surface ready tasks that nobody claims within a threshold (default
30 min) regardless of why. One identity-agnostic signal that catches:

- Operator typo'd the assignee
- Profile was deleted, leaving its tasks stranded
- External worker pool (Codex CLI lane, custom daemon) is down
- Dispatcher misconfigured (wrong board / wrong HERMES_HOME)

Today the dispatcher correctly skips these (no respawn loop, good)
but nothing surfaces the fact that operator-actionable work is
accumulating. The new `stranded_in_ready` rule does that without
requiring a manual lane registry — it reads the most recent ready-
transition event (`created` / `promoted` / `reclaimed` / `unblocked`)
and fires when (now - last_ready_ts) > threshold.

Severity escalates with age: warning at threshold, error at 2x,
critical at 6x. The cli_hint and reassign actions point operators
at the right next step.

Out of scope deliberately:
- Lane registry (#20157 closed) — this signal supersedes it.
- Pushing the diagnostic into messaging gateways — diagnostics
  are pull-only via 'hermes kanban diagnostics' for now; gateway
  push is a separate UX decision.

Tests: 10 new + 461 existing kanban tests pass. E2E verified end-
to-end via 'hermes kanban diagnostics --json' against a 2h-old
stranded task — surfaces as error severity with correct actions.
2026-05-10 21:58:44 -07:00
..
__init__.py
_parser.py
_subprocess_compat.py feat(windows): close remaining POSIX-only landmines — TUI crash, kanban waitpid, AF_UNIX sandbox, /bin/bash, npm .cmd shims, cwd tracking, detach flags 2026-05-08 14:27:40 -07:00
auth.py feat(cross-platform): psutil for PID/process management + Windows footgun checker 2026-05-08 14:27:40 -07:00
auth_commands.py auth: use get_default_hermes_root() for shared nous_auth.json path 2026-05-08 14:27:40 -07:00
azure_detect.py
backup.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
banner.py fix(banner): resolve update-check repo from running code, not profile-scoped path 2026-05-09 04:10:35 -07:00
browser_connect.py
callbacks.py
checkpoints.py
claw.py Merge origin/main and resolve conflict in nix/tui.nix 2026-05-07 22:56:19 +00:00
cli_output.py
clipboard.py
codex_models.py docs(codex-spark): document ChatGPT Pro entitlement gating 2026-05-09 23:17:25 -07:00
colors.py
commands.py feat(goals): /goal checklist + /subgoal user controls (#23456) 2026-05-10 16:56:51 -07:00
completion.py fix(completion): use valid zsh _arguments exclusion-group syntax 2026-05-09 13:36:44 -07:00
config.py fix(terminal): bridge docker_env config to TERMINAL_DOCKER_ENV 2026-05-09 17:53:35 -07:00
copilot_auth.py
cron.py
curator.py feat(curator): show rename map in user-visible summary (#22910) 2026-05-09 18:43:40 -07:00
curses_ui.py
debug.py
default_soul.py
dingtalk_auth.py
doctor.py fix(doctor): normalize provider name and aliases before dedicated-skip check 2026-05-09 13:36:33 -07:00
dump.py
env_loader.py feat(cross-platform): psutil for PID/process management + Windows footgun checker 2026-05-08 14:27:40 -07:00
fallback_cmd.py
gateway.py fix(gateway): detect gateway process via /proc in Docker without procps 2026-05-09 17:54:17 -07:00
gateway_windows.py fix(gateway): preserve Ctrl+C for Windows foreground runs 2026-05-09 14:34:18 -07:00
goals.py fix(goals): force judge to use tool calls instead of JSON-text replies (#23547) 2026-05-10 20:51:40 -07:00
hooks.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
kanban.py fix(kanban): keep '--created-by' default as 'user' 2026-05-10 20:04:53 -07:00
kanban_db.py fix(gateway): route kanban notifications to creator profile 2026-05-10 20:04:53 -07:00
kanban_diagnostics.py feat(kanban): stranded_in_ready diagnostic for unclaimed tasks (#23578) 2026-05-10 21:58:44 -07:00
kanban_specify.py feat(kanban): add specify — auxiliary LLM fleshes out triage tasks (#21435) 2026-05-07 13:04:41 -07:00
logs.py
main.py fix(windows): unbreak install + update on Windows (#23394) 2026-05-10 13:07:08 -07:00
mcp_config.py feat(mcp): add codex preset for built-in MCP server discovery 2026-05-09 11:11:28 -07:00
memory_setup.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
model_catalog.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
model_normalize.py
model_switch.py docs(codex-spark): document ChatGPT Pro entitlement gating 2026-05-09 23:17:25 -07:00
models.py fix(xai): drop models being retired May 15, 2026 from pickers (#23291) 2026-05-10 12:12:55 -07:00
nous_subscription.py
oneshot.py fix: make session search initialize session db 2026-05-09 14:36:58 -07:00
pairing.py
platforms.py
plugins.py feat(plugins): run any LLM call from inside a plugin via ctx.llm (#23194) 2026-05-10 07:09:28 -07:00
plugins_cmd.py fix(plugins): resolve Git binary for installs under minimal PATH 2026-05-09 11:10:04 -07:00
profile_distribution.py feat(profile): shareable profile distributions via git (#20831) 2026-05-08 10:04:32 -07:00
profiles.py fix(profiles): exclude infrastructure artifacts when cloning with --clone-all 2026-05-09 04:10:35 -07:00
providers.py
pt_input_extras.py fix(cli): make Ctrl+Enter insert newline on WSL/SSH/Windows Terminal (#22777) 2026-05-09 12:48:14 -07:00
pty_bridge.py feat(cross-platform): psutil for PID/process management + Windows footgun checker 2026-05-08 14:27:40 -07:00
relaunch.py fix(windows): prefer npm.cmd over npm.ps1, skip .py argv0 in relaunch 2026-05-08 14:27:40 -07:00
runtime_provider.py fix: use credential_pool for custom endpoint model listing probes 2026-05-09 17:54:58 -07:00
setup.py fix(xai): drop models being retired May 15, 2026 from pickers (#23291) 2026-05-10 12:12:55 -07:00
skills_config.py
skills_hub.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
skin_engine.py
slack_cli.py fix(slack): enable writable app home DMs in manifest 2026-05-08 17:01:12 -07:00
status.py
stdio.py fix(windows): quote cache paths in bash + augment PATH so rg/bash resolve on first launch 2026-05-08 14:27:40 -07:00
timeouts.py
tips.py feat: Ctrl+Enter inserts newline on Windows Terminal 2026-05-08 14:27:40 -07:00
tools_config.py fix(windows): unbreak install + update on Windows (#23394) 2026-05-10 13:07:08 -07:00
uninstall.py feat(windows uninstall): clean up User env, PATH, Scheduled Task, and portable tooling 2026-05-08 14:27:40 -07:00
vercel_auth.py
voice.py
web_server.py fix(security): require dashboard auth for plugin API routes 2026-05-10 07:04:18 -07:00
webhook.py