# Case 0148 — correct-for-the-right-reason graph dump (preserved evidence)

**Status**: Reference artifact — not a build, not landed on `main`. Preserved per the recalibration
(ADR-0251) after abandoning `feat/reader-inc2-caseband` (PR #80). See
`docs/research/reader-arc-recalibration-preserved-knowledge-2026-07-19.md` §2 for full context.

The abandoned branch committed this file **empty** (0 bytes) while its own session summary claimed a
graph dump had been committed here. That claim was false. This file replaces the empty placeholder with
the real artifact, generated fresh and independently re-verified — not copied from the branch's claims.

## Case

- **id**: `gsm8k-holdout-dev-v1-0148`
- **problem**: "At a people counting station, the number of people counted on the first day was twice
  the total number counted on the second day. If 500 people were counted on the second day, how many
  people were counted on the two days?"
- **expected_answer**: `1500.0`

## Provenance

Generated by running `generate.math_candidate_graph.parse_and_solve(text)` against
`origin/feat/reader-inc2-caseband @ e3da148d` (the abandoned branch's tip — the only place this surface
form parses; `main` correctly refuses this case, see below), in a throwaway detached worktree that has
since been removed. Command:

```
uv run python -c "
from dataclasses import asdict
from generate.math_candidate_graph import parse_and_solve
import json
text = 'At a people counting station, the number of people counted on the first day was twice the total number counted on the second day. If 500 people were counted on the second day, how many people were counted on the two days?'
r = parse_and_solve(text)
print('answer:', r.answer)
print('is_admitted:', r.is_admitted)
if r.selected_graph: print(json.dumps(asdict(r.selected_graph), indent=2, default=str))
"
```

## Result (branch code)

```json
{
  "answer": 1500.0,
  "is_admitted": true,
  "refusal_reason": null,
  "branches_enumerated": 1,
  "branches_admissible": 1,
  "selected_graph": {
    "entities": ["the first day", "the second day"],
    "initial_state": [
      {
        "entity": "the second day",
        "quantity": {"value": 500, "unit": "people"}
      }
    ],
    "operations": [
      {
        "actor": "the first day",
        "kind": "compare_multiplicative",
        "operand": {
          "reference_actor": "the second day",
          "delta": null,
          "factor": 2.0,
          "direction": "times"
        },
        "target": null
      }
    ],
    "unknown": {"entity": null, "unit": "people"}
  }
}
```

## Reading the graph — the 3-part correct-for-the-right-reason proof

1. **The conditional-seed bound the *named* reference.** `initial_state` seeds `"the second day" = 500`
   — the entity named in "If 500 people were counted **on the second day**" — not a nearest/other/
   unnamed entity.
2. **The compare op reads forward.** `operations[0]` binds `actor = "the first day"`,
   `reference_actor = "the second day"`, `factor = 2.0`, `direction = "times"` — i.e. *first day = 2 ×
   second day*, matching the source's "the number... on the first day **was twice**... on the second
   day" directly (not an inverted/guessed direction).
3. **The unknown resolves via summation over exactly these two registers.** `unknown.unit = "people"`
   with no entity restriction → sums both days: `500 + (2 × 500) = 1500`. This matches
   `expected_answer` because of the binding above, not by coincidence — swapping which day were seeded
   would still total 1500 under plain summation, so the answer alone never proves correctness; the
   graph's bindings (steps 1–2) are what's being verified here.

## Cross-check: `main` refuses this case (verified, current tip)

```
$ uv run python -c "
from generate.math_candidate_graph import parse_and_solve
text = 'At a people counting station, the number of people counted on the first day was twice the total number counted on the second day. If 500 people were counted on the second day, how many people were counted on the two days?'
r = parse_and_solve(text)
print(r.answer, r.is_admitted, r.refusal_reason)
"
None False recognizer matched but produced no injection for statement: 'At a people counting station, the number of people counted on the first day was twice the total number counted on the second day.' (category=descriptive_setup_no_quantity)
```

`main` has no mass-noun compare actor-binding, so it correctly refuses rather than guessing — consistent
with `wrong=0` discipline. This case remains an open, documented target for a future (non-bespoke)
increment; nothing here re-lands the branch's code.
