# Evaluation of the streaming and adapter paths (I-4, round 5)

Generated by `code/tests/eval/run_eval_paths.py` on 2026-10-16 01:52 CST.

| field | value |
| --- | --- |
| corpus | `eval-2`, 1200 cases |
| corpus fingerprint | `c528375a0d996a78c68cf54d541033e69f245adcafa5cbf8c36e24fc7ec40aac` |
| random chunk seed | `20261016` |
| candidates rejected by the generator | 1203 |
| one-shot baseline hits | 1200 / 1200 |

## Every path against the same truth

| path | recovered truth | rate |
| --- | --- | --- |
| chunk=1 | 1200 / 1200 | 100.00% |
| chunk=3 | 1200 / 1200 | 100.00% |
| chunk=7 | 1200 / 1200 | 100.00% |
| chunk=random | 1200 / 1200 | 100.00% |
| llm/anthropic (tool args) | 1200 / 1200 | 100.00% |
| llm/openai (tool args) | 1200 / 1200 | 100.00% |
| llm/anthropic (text) | 1200 / 1200 | 100.00% |
| llm/openai (text) | 1200 / 1200 | 100.00% |

`chunk=random` uses a pseudo-random chunk size per case drawn from 1, 2, 4, 5, 11, 13, 16 bytes, so token boundaries, escapes, surrogate pairs and multi-byte sequences are split at a different place in every case. `llm/* (tool args)` wraps the same fragments in provider tool call events (`input_json_delta` / `delta.tool_calls`) and reads them back through the adapter. `llm/* (text)` wraps them in text deltas (`delta.text` / `delta.content`) instead, which is the path a structured output request takes; the prose family is the one that needs `--skip-prose` there.

## Disagreements with the one-shot path

None: every chunking and both adapters recover exactly the value the one-shot path recovers, on every case.

## Ambiguity census (FR-27)

| family | cases | flagged ambiguous |
| --- | --- | --- |
| bom | 60 | 0 |
| clean | 60 | 0 |
| comment | 60 | 0 |
| control_char | 60 | 0 |
| delete_colon | 60 | 0 |
| delete_comma | 60 | 3 |
| double_comma | 60 | 0 |
| dup_key | 60 | 0 |
| ellipsis | 60 | 0 |
| extra_closer | 60 | 0 |
| fence | 60 | 0 |
| literal_case | 60 | 0 |
| mismatched_closer | 60 | 0 |
| missing_value | 60 | 0 |
| prose | 60 | 0 |
| quotes | 60 | 0 |
| trailing_comma | 60 | 0 |
| truncate_child | 60 | 0 |
| truncate_string | 60 | 0 |
| ws | 60 | 0 |

The flag is informational by default; `--for-execution` turns a flagged case into `E011`. A family with no flagged cases repairs without a second reading, which is what the exactness labels assume.
