# ═══════════════════════════════════════════════════════════════════════════════════════════════ # Expected routing for the AI assistant, one case per line, checked by ai_explain_check.sh. # # Every line here is a bug that was found by reading an answer and noticing it was wrong. That is # the expensive way to find them and it does not scale: the operator is the test suite, and the # operator is busy. Written down, each one costs a second to re-check forever. # # These assert ROUTING, never wording. What a profile is allowed, which script a question names, # which gates fire and what evidence gets attached are all decided before the model is involved, # so they are identical every run. The prose is not and is deliberately not asserted — a test that # depends on how the model phrases something fails for reasons nobody wants to read about. # # FORMAT # question | profile | scope | kind | assertions # # Blank fields are allowed. Assertions are space-separated: # profile=X the profile that ends up answering, after any handoff # target=X resolved run target, or 'none' # run=yes|no the run-outcome gate # diag=yes|no the diagnostic gate # caps=none the profile holds no capabilities at all # caps=only:a,b it holds exactly these and nothing else # caps=a it holds at least this # has=a,b every one of these must be attached # hasnt=a,b none of these may be attached # # Attachment keys: health warnings run_record log_tail log_missing incidents conf_keys # ═══════════════════════════════════════════════════════════════════════════════════════════════ # ── Run-outcome questions must arrive with the run, not with directions to the log panel ─────── # The phrasing that started it. "went last" matched; "the run went" did not, one word order apart. lets check the daily orch log and see how the run went | varaverk | Scheduler | | target=Orchestrators/daily_sync_maintenance run=yes has=run_record,log_tail lets look at daily orch log and see how it went last run | varaverk | Scheduler | | run=yes has=run_record,log_tail # Confirmed good in the WebGUI dock. Plural "logs", and "how it went" rather than "how the run # went" — neither exact string was covered, and both are how the question actually gets typed. lets check the daily orch logs and see how it went | varaverk | Scheduler | | target=Orchestrators/daily_sync_maintenance run=yes has=run_record,log_tail how did the daily orch go | varaverk | | | target=Orchestrators/daily_sync_maintenance run=yes has=run_record,log_tail how did the weekly orch go last run | varaverk | | | target=Orchestrators/weekly_sync_maintenance run=yes has=run_record did the watchdog orchestrator run | varaverk | | | target=Orchestrators/watchdog_orchestrator run=yes give me a rundown of the daily orch | varaverk | | | run=yes has=run_record how long did the daily orch take | varaverk | | | run=yes has=run_record # Works from the AI tab, which sends no scope at all — resolution is from the question, not the page. how did the daily orch go last run | varaverk | | | target=Orchestrators/daily_sync_maintenance has=run_record # ── A clean run earns the record and the log, and nothing else ───────────────────────────────── # The health sweep and the recent-warning lines are ~660 tokens that answer nothing when the run # exited 0, taken straight out of the passages' budget. They come back the moment it did not. lets check the daily orch logs and see how it went | varaverk | Scheduler | | diag=no hasnt=health,warnings has=run_record,log_tail how did the daily orch go | varaverk | | | diag=no hasnt=health,warnings why did the daily orch fail | varaverk | | | diag=yes has=health,warnings,log_tail why did the weekly orch fail | varaverk | | | diag=yes has=health,warnings # ── Definitional questions must NOT be answered with last night's log ────────────────────────── what does the daily orchestrator do | varaverk | | | target=Orchestrators/daily_sync_maintenance run=no hasnt=run_record,log_tail how does the daily orch work | varaverk | | | run=no hasnt=run_record,log_tail what is the daily orchestrator | varaverk | | | run=no hasnt=run_record # ── Ambiguity resolves to nothing rather than guessing a script ──────────────────────────────── # A scored match here attaches the wrong log and answers confidently about a run nobody asked # about, which is indistinguishable from a right answer unless you already knew. how did sync go | varaverk | | | target=none run=no what does RSYNC_ENABLED do | varaverk | | | target=none run=no has=conf_keys # Whole words only. "fail" contains "ai", and ai.log is a real log id — a substring match here # attached the AI's own log to questions about everything else. why did this run fail | varaverk | | | target=none is the mail relay working again | varaverk | | | target=none # ── The Recent Activity buttons: one click from a row to an answer about that run ────────────── # Both open the log first, so the dock is scoped to troubleshoot against that script's log id. Why did this run fail? | troubleshoot | Orchestrators/daily_sync_maintenance | | diag=yes has=log_tail,run_record How did this run go? | troubleshoot | Orchestrators/weekly_sync_maintenance | | has=log_tail,run_record # ── General Chat holds nothing, and hands Varaverk questions up rather than deferring ────────── how was your day | chat | | | profile=chat caps=only:web_search hasnt=health,log_tail,incidents,conf_keys what does arr_sync.sh do | chat | | | profile=varaverk is RSYNC_ENABLED on right now | chat | | | profile=varaverk has=conf_keys how did the daily orch go | chat | | | profile=varaverk run=yes has=run_record # Chat opened against a script must not be handed the operator's own incident notes about it. how was your day | chat | Orchestrators/daily_sync_maintenance | | profile=chat hasnt=incidents # ── Troubleshoot gets the log for whatever is open, plus the right to file a bug ─────────────── why did the weekly orch fail | troubleshoot | Orchestrators/weekly_sync_maintenance | | diag=yes has=log_tail,run_record what is going on here | troubleshoot | Orchestrators/daily_sync_maintenance | | diag=yes has=log_tail # ── The code profile answers from the model alone: no passages, no live state ────────────────── write me a script that copies a folder | code | | | hasnt=health,log_tail,incidents,conf_keys # ── General Chat routes to the profile that fits, not always to the Assistant ────────────────── # Chat had one escalation target, so a fault report and a request for code both landed on the # documentation assistant. Both were answered adequately; neither was answered well. Order is the # policy — code is checked first because it is the only intent about a thing that does not exist # yet, and troubleshoot requires diagnostic phrasing AND something here to diagnose. why did the daily orch fail | chat | | | profile=troubleshoot diag=yes target=Orchestrators/daily_sync_maintenance the daily orch is broken | chat | | | profile=troubleshoot diag=yes why did arr_sync.sh error out | chat | | | profile=troubleshoot diag=yes create a script to prune old logs | chat | | | profile=code hasnt=health,log_tail,incidents make me a one-liner that counts files | chat | | | profile=code write me a bash script for backups | chat | | | profile=code # Diagnostic phrasing about nothing here stays in chat — "why" is not a Varaverk question on its # own, and escalating adds capability, so a wrong escalation costs more than a missed one. why is the sky blue | chat | | | profile=chat caps=only:web_search hasnt=health,log_tail,incidents,conf_keys what is wrong with my car | chat | | | profile=chat caps=only:web_search # Naming a script and asking what it does is documentation, not a request to write one. The code # router is anchored on the verb for exactly this pair. what does arr_sync.sh do | chat | | | profile=varaverk