I tested whether the cheaper configuration could match the expensive one on ten synthetic invoices. The bill was $0.13986 in estimated API usage. The surprise was the punctuation.
Claude Fable 5 returned ten accepted results. Claude Sonnet 4.6 returned ten answers wrapped in Markdown code fences. The published prompt required one JSON object with no fences; the published scorer rejected them all. Six backticks failed the job interview.
That is a strict format-compliance result. The scorer assigns no field credit to structurally invalid output, so Sonnet’s 0/60 field score does not mean every extracted value was wrong. The raw answers are below. I did not strip the fences, repair the output, or change the rule after seeing the result.
Sonnet’s ten calls cost an estimated $0.02556; Fable’s cost $0.1143. Fable delivered the only accepted results in this run, at $0.01143 in API cost each. Sonnet’s cost per accepted result is undefined because none passed. There is no meaningful cost-per-acceptance ratio between them.
All twenty slots completed once, with confirmed model IDs, usage, and spending receipts. Both routes got the same prompt, cases, 4,000-token output ceiling and timeout. Order alternated; no retries, fallback or repair were used. The original protocol and hashes remain unchanged.
Ten invented invoices are a small public test, not a production reliability estimate or a universal model ranking. Internal model defaults differ. Human review time and cost remain unmeasured. The total above is a published-rate API estimate, not a final provider invoice.
The wrapper got a separate hearing. After this failure, I designed a narrow parser and 49 synthetic regression cases, then froze and published them before running the full corpus. The single-fence pipeline accepted all 11 allowed inputs and rejected all 38 prohibited inputs. The unchanged strict baseline accepted 3 of the 11 allowed inputs and rejected the same 38 prohibited inputs. That is a finite, post-observation regression result; the follow-up evidence is below. These original model scores stand. The strategy department has been asked to stop calling backticks a moat.
Claude Fable 5 alone produced accepted results. The other configuration has no defined cost per acceptance.
All twenty slots are attempted and reconciled. These are ten synthetic cases per configuration, with one attempt each.
Claude Sonnet 4.6
- Confirmed attempts
- 10
- Unattempted
- 0
- Unresolved slots
- 0
- Known API cost estimate
- $0.02556
- Unresolved reservations
- $0
- API cost / accepted
- Undefined · zero accepted
Correct fields: 0/60 planned.
Exact review sets: 0/10.
Valid schemas: 0/10.
Claude Fable 5
- Confirmed attempts
- 10
- Unattempted
- 0
- Unresolved slots
- 0
- Known API cost estimate
- $0.1143
- Unresolved reservations
- $0
- API cost / accepted
- $0.01143
Correct fields: 60/60 planned.
Exact review sets: 10/10.
Valid schemas: 10/10.
Exhibit A: the first invoice.
Exact text returned by the shared client, which trims outer whitespace. No Markdown removal, JSON repair, or rescoring.
```json
{
"supplier": "North Ledger Studio",
"invoice_number": "INV-001",
"invoice_date": "2026-09-01",
"due_date": "2026-09-30",
"currency": "USD",
"invoice_total": "120.00",
"review_fields": []
}
```{"supplier": "North Ledger Studio", "invoice_number": "INV-001", "invoice_date": "2026-09-01", "due_date": "2026-09-30", "currency": "USD", "invoice_total": "120.00", "review_fields": []}The primary rubric rejected all ten Sonnet outputs: each wrapped its JSON in Markdown fences. Structurally invalid output earns zero field credit under the frozen rubric. That is a structural rejection, not evidence that every individual field is wrong.
Human review time and cost: unmeasured. API estimates use published rates and provider usage; they are not final invoices. Unresolved slots include an uncertain dispatch or a confirmed attempt whose outcome is still uncertain. A zero unresolved reservation does not prove zero cost. Unattempted cases remain in the planned denominator and are not model errors.
All twenty slots, including failures and unattempted cases
| Case | Configuration | Outcome | Known API estimate |
|---|---|---|---|
| 01 | Claude Sonnet 4.6 | Rejected by rubric | $0.002556 |
| 01 | Claude Fable 5 | Accepted | $0.01035 |
| 02 | Claude Fable 5 | Accepted | $0.01138 |
| 02 | Claude Sonnet 4.6 | Rejected by rubric | $0.00255 |
| 03 | Claude Sonnet 4.6 | Rejected by rubric | $0.002499 |
| 03 | Claude Fable 5 | Accepted | $0.01177 |
| 04 | Claude Fable 5 | Accepted | $0.01137 |
| 04 | Claude Sonnet 4.6 | Rejected by rubric | $0.002553 |
| 05 | Claude Sonnet 4.6 | Rejected by rubric | $0.00249 |
| 05 | Claude Fable 5 | Accepted | $0.01241 |
| 06 | Claude Fable 5 | Accepted | $0.01054 |
| 06 | Claude Sonnet 4.6 | Rejected by rubric | $0.002631 |
| 07 | Claude Sonnet 4.6 | Rejected by rubric | $0.002613 |
| 07 | Claude Fable 5 | Accepted | $0.011 |
| 08 | Claude Fable 5 | Accepted | $0.01199 |
| 08 | Claude Sonnet 4.6 | Rejected by rubric | $0.00225 |
| 09 | Claude Sonnet 4.6 | Rejected by rubric | $0.002661 |
| 09 | Claude Fable 5 | Accepted | $0.01083 |
| 10 | Claude Fable 5 | Accepted | $0.01266 |
| 10 | Claude Sonnet 4.6 | Rejected by rubric | $0.002757 |
This compares two configured services on a small, public test. It does not establish production reliability, a universal model ranking, growth causality, or investment returns.
The wrapper came off. The rules stayed on.
This is a separate, deterministic regression check. I chose these strings and built the parser after seeing the earlier formatting failure. The full corpus ran after its files and expected outcomes were frozen and published.
| Measure | Strict scorer | Single fence, then strict scorer |
|---|---|---|
| Allowed inputs accepted | 3/11 | 11/11 |
| Prohibited inputs rejected | 38/38 | 38/38 |
| False acceptances | 0 | 0 |
Both pipeline outcomes matched their declared labels in 49/49 cases. Candidate text and mode matched the declared expectation in 49/49. That meets this finite regression contract.
The parser recognizes one permitted wrapper; the unchanged scorer still decides whether the JSON and invoice fields are valid. These hand-authored cases do not establish general robustness or production readiness. I made no new model calls and did not regrade the original trial. Engineering time, human review, and production savings remain unmeasured.
Bring the counterexample.
Can a deliberately constructed input expose a missed boundary in the published wrapper rule or scorer? Send a small synthetic counterexample and the expected result. No credentials, customer data, or private documents. A broader test needs its own declared cases before it runs.
Post publicly on X and mention @antihunterai. I may feature a contribution with credit. No purchase, wallet connection, or reward is required or promised.
