From Symptom to Hypotheses
Part VIII β Building the AI Debugger
The clever hypothesis that missed the boring cause
Chapter 46 can reject single-story reports β but it needs a defined space of competitors to judge plurality against. Here is the failure that space prevents. A RAG answer fabricates a citation. The assistant proposes one elegant hypothesis β “the reranker demoted the gold chunk” β with a sophisticated test involving score analysis. The team spends a week on reranker tuning. The actual cause is mundane: a stale index snapshot meant the gold chunk was never retrieved at all. Nobody listed it because nobody enumerated; cleverness covered one branch while coverage would have covered all of them.
OBSERVATION: the fabricated answer, the retrieval log showing the gold chunk absent from the ranked list, and the index version pinned one release behind the corpus. HYPOTHESIS H1 (reranker demotion): gold retrieved, scored low. H2 (retrieval absence): gold never retrieved (stale snapshot). H3 (prompt override): instruction text told the model to answer without citing. INFERENCE: none yet β H1/H2 predict different ranked-list signatures (present-low vs. absent-entirely) and H3 predicts insensitivity to evidence swaps; the ranked list plus an evidence-swap probe separates them.
This chapter’s question: how do we turn a symptom into an explicit, enumerable hypothesis space β where coverage matters more than brilliance?
Why “brainstorm likely causes” fails first
The obvious move β asking the assistant (or the room) for likely causes β fails because likelihood-ranked brainstorming optimizes for plausibility, not separability. Five defects hide behind cleverness:
- Single-candidate anchoring. The first plausible story captures all attention; alternatives are never generated, let alone tested. One hypothesis is a guess with formatting. In medicine this failure has a name and a body count: Graber and colleagues reviewed 100 diagnostic errors and found premature closure β “failure to continue considering reasonable alternatives after an initial diagnosis was reached” β to be the single most common cognitive cause, while faulty knowledge was uncommon (Graber, Franklin & Gordon, 2005). Debugging weeks are lost the same way: not to hard causes, to unconsidered ones.
- Unfalsifiable framings. “The model misunderstood” predicts every outcome and forbids none. Hypotheses without distinct predicted observables are decoration.
- Layer skipping. Jumping to exotic causes (attention failure, emergent deception) before exhausting mundane ones (stale snapshot, wrong file, dropped field). Exotic-first wastes runs.
- Score-based hypotheses. “The reranker scored it 0.31” offered as a cause. Scores describe ranking; the causal question is what intervention changes the outcome.
- Non-enumerated spaces. Causes held in heads, never listed, so nobody can see which branch of the space went untested. Unlisted branches fail silently.
OPINION: most debugging weeks are lost not to hard causes but to unlisted ones β the branch nobody wrote down, tested by nobody, containing the bug.
The mental model: the hypothesis space is a map, and diagnosis is search. A good space partitions the possible causes into mutually testable branches (retrieval vs. ranking vs. generation vs. prompt vs. version), each with a distinct predicted signature. This is a differential diagnosis, and the layer map is its fishbone diagram β categorized cause enumeration so that no whole category is skipped. Coverage β every branch named with its deciding observation β beats cleverness, because the bug lives wherever it lives regardless of which branch flatters the investigator.
There is a specific reason not to outsource this to the assistant unstructured. Recent work on LLM hypothesis generation reports diversity collapse: when generation is driven by an optimization or selection pressure, models converge on a few preferred templates rather than exploring the space (Wang et al., 2026). A free “list the possible causes” prompt inherits the same bias, returning near-duplicates; the layer-ordered enumeration is the structural counter that forces one branch per category.
The method: enumerate by layer, discriminate by signature
Build the space mechanically from the crash-dump slots, in layer order (mundane first), with each hypothesis carrying its deciding signature:
- Version layer. Model/index/tool/environment revisions wrong or drifted? Signature: hash/version mismatch against the known-good manifest; re-pinning changes the outcome.
- Retrieval/context layer. Evidence missing, stale, or misordered? Signature: ranked-list presence/absence; adding/removing a chunk flips the outcome.
- Prompt/instruction layer. Wording, preamble, or tool description steering behavior? Signature: wording swaps with evidence frozen change the outcome (or do not).
- Generation layer. Decoding params, seed sensitivity, stop conditions? Signature: outcome varies across seeds/temperatures with all inputs frozen.
- Consumption/trajectory layer. Tool outputs valid but misused downstream (Ch43’s H2 pattern)? Signature: valid inputs with deviant consumption records.
flowchart TD
S["symptom + frozen bundle + first-divergence pointer"] --> L["enumerate one branch per layer, mundane first"]
L --> V["version: model / index / tool / env drifted?"]
L --> RT["retrieval / context: evidence missing, stale, misordered?"]
L --> PR["prompt / instruction: wording or preamble steering behavior?"]
L --> GN["generation: decoding params, seed sensitivity, stop conditions?"]
L --> CN["consumption / trajectory: valid tool output misused downstream?"]
V --> SIG["attach a distinct deciding signature to each branch"]
RT --> SIG
PR --> SIG
GN --> SIG
CN --> SIG
SIG --> F{"any branch unfalsifiable or score-based?"}
F -->|yes| RW["rewrite it or strike it β not a hypothesis"]
F -->|no| ORD["order cheapest-discriminating-first; every crash-dump slot covered"]
HYPOTHESIS SPACE (worked sketch; constructed, not a measured run):
Symptom: fabricated citation in RAG answer (bundle refund-quote-041).
H1 stale-snapshot ... predicts: gold chunk ABSENT from ranked list;
re-index + rerun restores citation (Γ3).
H2 reranker-demotion . predicts: gold PRESENT but ranked below k;
k-expansion restores citation without re-indexing.
H3 prompt-override ... predicts: citation absent under BOTH evidence
states; wording-swap alone restores it.
COVERAGE: retrieval(H1/H2) vs. instruction(H3) β no branch unlisted.
RULE: H1/H2 split on one observable (presence in list) before any run.
OBSERVATION (constructed illustration, not a measured run): the ranked list shows the gold chunk absent entirely, and the index version trails the corpus by one release. UPDATED BELIEF: H1 supported for this instance; H2 exonerated here (nothing to demote what was never retrieved); H3 live pending the wording-swap probe β mundane layer convicted before exotic layers were opened.
No assistant’s plausibility ranking, no confidence token, no agreement across brainstormers, no single confirming anecdote, and no downstream relief promotes an unlisted branch into consideration or demotes a listed one without its deciding observation. Spaces, signatures, and runs decide.
Example: exhausting the space before spending the week
The practitioner writes all five layers with signatures before any intervention, then executes cheapest-discriminating-first: check versions (minutes), inspect the ranked list (minutes), evidence-swap (one run series), wording-swap (one run series), seed sweep (last, Γ3+). In the constructed case the second step ends the investigation β absent chunk, stale index β and the reranker week never happens. The discipline is ordering: mundane layers with cheap signatures clear before expensive layers open. Enumeration makes the ordering visible; visibility makes it enforceable.
Research lineage: differential diagnosis, not brilliant diagnosis
The layer map is a fishbone diagram. Ishikawa’s cause-and-effect diagram was designed to make quality-control teams enumerate causes by category β materials, method, machine, measurement β so that no whole category is overlooked in the rush to a favored explanation (Ishikawa, 1985). The version/retrieval/prompt/generation/consumption layers are the bones of that diagram for an AI failure, and the discipline is identical: fill every branch before running anything.
Premature closure is defeated by an explicit differential, and by evidence, not by more thinking. Graber’s finding that faulty knowledge is uncommon while premature closure is common means the fix is procedural, not educational: force the alternatives onto the page, and then β the crucial second step β resolve each with a test, because clinicians who “consider” alternatives without ordering the discriminating test close prematurely anyway. The signature column is that test. Alaboudi and LaToza’s debugging study (Chapter 6) is the software-side evidence: developers form only about two hypotheses per defect unprompted, and supplying candidate hypotheses helped roughly six times as much as supplying candidate fault locations (Alaboudi & LaToza, 2020) β the enumerated space is the intervention that worked.
Cheapest-discriminating-first is the “horses, not zebras” rule, quantified. The instruction to test mundane causes before exotic ones is the medical heuristic “when you hear hoofbeats, think horses”; the addition here is that the ordering is set by run cost times discriminating power, written down before the first intervention, so it cannot be reordered to favor the interesting hypothesis after the fact.
Lab 47: enumerate before intervening, then score coverage (proposed)
PROPOSED, not executed: no author-measured results are reported. The evidence this chapter requires is the reader’s own workspace record.
Setup. Take one AI symptom with a frozen bundle. The generation regime (free brainstorm vs. this chapter’s layer-enumerated workspace) is the independent variable; symptom, bundle, and investigator are controlled. A second reader scores coverage blind.
Task.
- Before generating, write H1/H2/H3 about the regimes with distinct predicted coverage outcomes: H1: “enumerated workspace lists β₯5 branches across β₯3 layers with distinct signatures”; H2: “brainstorm lists equal branches (enumeration adds nothing)”; H3: “brainstorm lists fewer branches and misses the deciding one.”
- Produce both lists (order randomized, β₯3 trials if an assistant generates them).
- The blind scorer marks per-branch: listed/unlisted, signature distinct/overlapping, layer mundane/exotic.
| Hypothesis | Predicted coverage signature | FORECAST | OBSERVATION (Γ3) | UPDATED BELIEF |
|---|---|---|---|---|
| H1 enumeration wins | β₯5 branches, β₯3 layers, distinct | ___ | ___ ___ ___ | live/exonerated |
| H2 regime-neutral | equal branch counts | ___ | ___ ___ ___ | live/exonerated |
| H3 brainstorm gaps | deciding branch unlisted | ___ | ___ ___ ___ | live/exonerated |
Success criterion. Two hypothesis lists with per-branch signatures, a blind coverage score, and a written statement of which branches were untested in each regime. An intervention run before enumeration is explicitly not completion.
Companion tool: Symptom-to-Hypothesis Workspace
What it accepts: the symptom statement, the bundle manifest reference, and the written intent/first-divergence pointer. What it performs: it forces layer-ordered enumeration (version β retrieval β prompt β generation β consumption), requires a distinct predicted signature per hypothesis, flags unfalsifiable framings and score-citations for rewrite, checks that no crash-dump slot went unconsidered, and emits the space table above. What it can establish: whether a hypothesis space covers the symptom’s layers with discriminating signatures β for the examined symptom only. What it cannot establish: the true cause, cross-symptom completeness, or which hypothesis is correct. It never treats plausibility, confidence, agreement, single anecdotes, or symptom relief as coverage. How its output changes your next action: space complete with distinct signatures β cheapest-discriminating-first execution (Ch48); unfalsifiable entries β rewrite before any run; uncovered slots β enumerate further, never intervene into the gap.
Paper form, sufficient for this chapter:
Symptom: ___ Bundle: ___ Divergence: ___
LAYERS (version/retrieval/prompt/generation/consumption):
H1 ___ predicts ___ (deciding obs ___) | H2 ___ predicts ___ (obs ___)
H3 ___ predicts ___ (obs ___) | uncovered slots: ___
CHEAPEST FIRST: ___ β ___ β ___ TRIALS: β₯3 where nondeterministic
Where a software implementation does not yet exist in the reader’s stack, this record is the tool. Map before march.
Reusable procedure: cover the space, then search it
- State symptom + intent β measurable expectation, first-divergence pointer or UNKNOWN.
- Enumerate by layer β mundane first; every crash-dump slot considered.
- Attach signatures β each H predicts a distinct observable; rewrite the rest.
- Order cheap-first β version checks and list inspections before sweeps.
- One space, one search β no interventions until the space is written; no new branches mid-search without re-dating predictions.
Failure modes
- Clever-first search. Opening with the exotic hypothesis. Mundane layers clear first, always.
- Plausibility ranking. Treating “most likely” as “test first.” Cheap-and-discriminating orders runs, not likelihood.
- Unfalsifiable hypotheses. “The model misunderstood.” If nothing observable differs, it is not a hypothesis.
- Score-as-cause. Citing reranker scores or confidences as the defect. Scores are ranked-list symptoms; interventions are causes.
- Hidden branches. Causes discussed verbally, never listed. Unlisted means untested means possibly-guilty.
- Mid-search reinvention. Adding hypotheses after seeing outcomes without re-dating predictions. New branches restart prediction-first discipline.
Limits, per contract: one space covers one symptom under one bundle; it warrants coverage, not correctness; version rolls or re-indexing after enumeration void the version/retrieval branches until re-enumerated. UNKNOWN wherever a slot is ABSENT or the divergence pointer is missing.
References
- Mark L. Graber, Nancy Franklin, and Ruthanna Gordon. Diagnostic Error in Internal Medicine. Archives of Internal Medicine 165(13), 2005, pp. 1493β1499. https://doi.org/10.1001/archinte.165.13.1493
- Kaoru Ishikawa. What Is Total Quality Control? The Japanese Way (introduces the cause-and-effect / “fishbone” diagram). Prentice-Hall, 1985.
- Haorui Wang, Parshin Shojaee, Kazem Meidani, Kunyang Sun, JosΓ© Miguel HernΓ‘ndez-Lobato, Teresa Head-Gordon, Jiajun He, Chandan K. Reddy, Chao Zhang, and Yuanqi Du. Towards Diverse Scientific Hypothesis Search with Large Language Models. International Conference on Machine Learning (ICML), 2026 (arXiv:2606.10587). https://arxiv.org/abs/2606.10587
- Abdulaziz Alaboudi and Thomas D. LaToza. Using Hypotheses as a Debugging Aid. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2020. https://doi.org/10.1109/VL/HCC50065.2020.9127273
Debugging Checklist
- Symptom stated with measurable intent and divergence pointer?
- Branches enumerated layer-by-layer, mundane first?
- Every crash-dump slot considered (none silently skipped)?
- Each hypothesis carries a distinct predicted signature?
- No unfalsifiable framings or score-citations remaining?
- Run order set cheapest-discriminating-first with trial counts?
- No intervention executed before the space was written?
- Coverage scored (branches Γ layers Γ distinctness) and recorded?
What This Chapter Established
- Hypothesis generation as enumerable procedure: layer-ordered spaces (version β retrieval β prompt β generation β consumption) with distinct predicted signatures per branch, cheapest-discriminating-first ordering β demonstrated on the constructed stale-snapshot case, no measured runs claimed.
- The coverage-over-cleverness principle with the map-and-search mental model.
- Lab 47 as a proposed enumeration-vs-brainstorm coverage record the reader executes; the Symptom-to-Hypothesis Workspace contract (accepts/performs/can-establish/cannot-establish/next-action).
- What was NOT proved: any cause, any cross-symptom completeness claim, or any correctness verdict on a hypothesis. One space built; nothing searched.
- Research grounding: “the clever hypothesis that missed the boring cause” is premature closure, the leading cognitive cause of medical diagnostic error, and faulty knowledge is rarely the problem (Graber et al.) β so the fix is procedural (an explicit differential + a discriminating test per branch); developers form ~2 hypotheses per defect unprompted and candidate hypotheses helped ~6x where candidate locations did not (Alaboudi & LaToza); the layer map is Ishikawa’s fishbone diagram; and enumeration must be structured because LLM hypothesis search collapses toward a few templates under optimization pressure, a bias a free brainstorm inherits (Wang et al.).
Next
The space is mapped β but maps do not run themselves. Each branch now needs a deciding observation, and observations cost runs: compute, time, attention. Spending one run per branch naively is affordable for three branches and ruinous for ten. Chapter 48, “Discriminating Experiments,” designs each run for maximum information β splitting the space fastest with the fewest interventions.