fix(kanban): diagnose unavailable triage automation#25640
Conversation
4d33cc7 to
4652b19
Compare
After NousResearch#27572, triage automation defaults to the kanban decomposer path instead of only the specify path. Update the diagnostic to check the active triage automation backend: kanban_decomposer when auto-decompose is enabled, triage_specifier in manual mode.
4652b19 to
74b25c2
Compare
|
Updated this PR after #27572 landed. The underlying gap still exists on current main: triage tasks can remain stuck without a clear diagnostic when the active triage automation backend is unavailable. The shape of the issue changed after #27572:
So I updated the diagnostic from the narrower
I also updated the tests to cover both modes. |
…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>
|
Reworked and merged via #27871 onto current main. The original PR pointed only at auxiliary.triage_specifier — after #27572 added the auto-decompose dispatcher, the primary path is now auxiliary.kanban_decomposer (with the specifier as the fanout=false fallback). The new diagnostic is auto_decompose-aware and points at the right slot for both modes. You are credited via Co-authored-by on the merge commit. Thanks for surfacing this gap! |
…aware) (NousResearch#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 NousResearch#25640 idea (@qWaitCrypto) to align with the new auto-decompose dispatcher path landed in NousResearch#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>
…aware) (NousResearch#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 NousResearch#25640 idea (@qWaitCrypto) to align with the new auto-decompose dispatcher path landed in NousResearch#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>
What does this PR do?
Surfaces a Kanban diagnostic when a task is stuck in
triageand diagnostics can see that the active triage automation backend is not configured.After #27572, triage can advance through two paths:
kanban.auto_decompose=true) usesauxiliary.kanban_decomposer.kanban.auto_decompose=false) usesauxiliary.triage_specifier.Without this, a rough triage card can sit indefinitely with no operator-facing reason.
hermes kanban decompose/hermes kanban specifyalready returnno auxiliary client configuredwhen they cannot resolve the helper model, but board/task diagnostics did not expose that configuration gap.Related Issue
#25641
Follow-up to #27572.
Type of Change
Changes Made
triage_automation_unavailablediagnostic for triage tasks when config clearly lacks the backend for the active triage automation path.auxiliary.kanban_decomposerwhenkanban.auto_decompose=true.auxiliary.triage_specifierwhenkanban.auto_decompose=false.provider: autohermes kanban decompose <task_id>/hermes kanban specify <task_id>command.Reproduction
Before the fix, a triage task with missing auto-decompose auxiliary config produced no diagnostic:
After the fix, the same state surfaces the unavailable triage automation backend:
Manual mode checks the single-task specifier path instead:
How to Test
Result:
Result: passed.
Result:
8 passed.Result: passed.
Result: passed.
Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AScreenshots / Logs
See reproduction and test logs above.