Downshift

Static analysis vs Bob

Config-driven code blinds static analysis

The ast scanner found 7 call sites and resolved 6 of their models. It cannot see through shared helpers or config lookups.

The Bob auditor started from the scan, read only the unresolved and shared call sites, and returned 8 logical call sites with every model resolved. It split the shared llm.py::ask helper into the two features that use it and found the hidden model in lang_of.

After Bob moved every model name into models.yaml, a fresh ast scan resolves 0 of 7 models. Config-driven code is normal in production, which is exactly why the auditor exists.

MetricastBobast after refactor
Call sites787
Models resolved680
Prompts resolved585
Enriched080
Found by Bob030
Split from helpers020

Changes

What the auditor changed

Call sites

Side by side

ast scan · 7 sites

  • supportdesk/agent_assist.py::summarize_for_agent
    qwen2.5:7b · prompt resolved
  • supportdesk/agent_assist.py::draft_reply
    qwen2.5:7b · prompt resolved
  • supportdesk/extract.py::extract_order_info
    qwen2.5:7b · prompt resolved
  • supportdesk/llm.py::ask
    qwen2.5:7b · prompt not resolved
  • supportdesk/misc_utils.py::lang_of
    model unresolved · prompt not resolved
  • supportdesk/policy.py::decide_refund
    qwen2.5:7b · prompt resolved
  • supportdesk/triage.py::classify_category
    qwen2.5:7b · prompt resolved

Bob audit · 8 sites

  • supportdesk/agent_assist.py::draft_reply
    qwen2.5:7b
  • supportdesk/agent_assist.py::summarize_for_agent
    qwen2.5:7b
  • supportdesk/extract.py::extract_order_info
    qwen2.5:7b
  • supportdesk/misc_utils.py::lang_offound by Bob
    qwen2.5:7b
  • supportdesk/policy.py::decide_refund
    qwen2.5:7b
  • supportdesk/triage.py::classify_category
    qwen2.5:7b
  • supportdesk/triage.py::detect_sentimentfound by Bob
    via supportdesk/llm.py::ask · qwen2.5:7b
  • supportdesk/triage.py::tag_urgencyfound by Bob
    via supportdesk/llm.py::ask · qwen2.5:7b