fix(kanban): surface unusable triage auxiliary model (auto-decompose aware) (#27871)

Adds a 'triage_aux_unavailable' diagnostic for tasks stuck in triage when
neither the active aux helper slot nor the main-model auto fallback is usable.

Auto-decompose aware:
- kanban.auto_decompose=True (default): primary is auxiliary.kanban_decomposer,
  triage_specifier is the fanout=false fallback.
- kanban.auto_decompose=False: primary is auxiliary.triage_specifier (manual
  'hermes kanban specify' path).

Default aux slots use 'provider: auto' which falls back to the main model, so
this rule only fires when both the explicit slot config AND the main-model
auto fallback are absent. Quiet by default; informative when there is a real
config gap.

Also adds kd.config_from_runtime_config() that carries kanban + auxiliary +
model keys through to diagnostics, and updates CLI/dashboard call sites to
use it. config_from_kanban_config() is preserved for back-compat.

Reworks the original PR #25640 idea (@qWaitCrypto) to align with the new
auto-decompose dispatcher path landed in #27572. The original PR pointed only
at auxiliary.triage_specifier, which is now the fallback rather than the
primary helper.

Co-authored-by: qWaitCrypto <axmaiqiu@gmail.com>
This commit is contained in:
Teknium 2026-05-18 01:27:06 -07:00 committed by GitHub
parent d9fef0c8ab
commit dadc8aa255
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 355 additions and 6 deletions

View file

@ -226,9 +226,7 @@ def _compute_task_diagnostics(
from hermes_cli import kanban_diagnostics as kd
from hermes_cli.config import load_config
diag_config = kd.config_from_kanban_config(
(load_config().get("kanban") or {})
)
diag_config = kd.config_from_runtime_config(load_config())
# Build the candidate task list. We need each task's row + its
# events + its runs. Doing N separate queries works but scales