# Original CJK and table evaluation corpus

Prepared 10 September 2026. These four brief synthetic documents contain original text and a table, created for this evaluation without customer or copied document content. Original prose, table, raster artwork and generator are dedicated to CC0-1.0. The raster glyphs come from Noto Sans CJK Japanese Regular, redistributed with the SIL Open Font License in `assets/OFL.txt`. Chinese text uses that font's glyph forms; this is not a font or typography coverage benchmark.

`input-manifest.json` pins every source PDF, raster and ground truth before output collection. `generate.py` is an offline deterministic generator; run it only in a separate directory when checking reproducibility so it cannot overwrite retained inputs or metadata. Copy the generator and assets into that directory first. PDF text extraction is empty and there are no text-showing operators. Each selected page is `[0]`.

`collect.py` is a bounded public-demo collector, not the deployment acceptance runner. Each invocation can dispatch one request and requires a hash-linked independent `review.json`. The allocation is at most 12 attempts, three per case, no purchase and $0 customer payment. The nominal provider cost ceiling is $0.048 at $0.004 per attempted page; that is not an observed bill. Do not rerun collection after the allocation closes.

Input and ground-truth review must precede every conversion. The portable protocol is the sibling [`protocol.md`](protocol.md). Preserve every full sanitized capture and failure. Model evidence comes from the public `response.raw.model` because the service removes internal model/cache headers. `include_raw=true` and noncanonical original bytes make these requests ineligible for the service sample cache under inspected code; provider-internal caching remains unknown.

Do not treat this tiny single-provider corpus as a competitor comparison, a language-wide accuracy estimate or proof of table-layout preservation. Table cells and explicit spans are separate from normalized text CER. For three repetitions, nearest-rank p95 is simply the largest observation.

## Collection outcome

Collection stopped on the first attempt: the public route returned HTTP 403 with body `error code: 1010`. No OCR Markdown or observed model was returned. This is a public-route access failure, not a measured OCR-quality failure. One of 12 conversion attempts was consumed; 11 were not attempted. Customer payment was $0. The nominal provider upper bound for the dispatched attempt is $0.004, but actual provider execution and billing are unknown.

`ja-prose/capture-1.json` preserves the complete sanitized failure response. `attempt-ledger.json` preserves the single dispatch and stop; `review.json` records independent precollection review. `summary.json` is a failed/unmeasured capture record, deliberately not a successful publication report. All text, table-quality and aggregate timing metrics remain null. The captured request elapsed time is an access-error duration, not OCR latency. There are no successful reports to pass to the publication verifier; the unchanged verifier must reject this unavailable evidence.

`protocol.md` is the frozen pre-execution snapshot: its then-pending status and local review-render paths are historical, not current prerequisites. Use `review.json`, `attempt-ledger.json` and `summary.json` for the completed review and stopped outcome. Portable input PNGs are retained beside each PDF; no workspace-only path is required to inspect or reproduce this corpus. No output exists for the three unattempted cases. The original invoice and July historical captures remain separate and unchanged.

## Operational follow-up before a future run

The retained body is `error code: 1010`. [Cloudflare's official error documentation](https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1010/) (checked September 10, 2026) identifies this code as browser-signature access denial. This is an access-path limitation for this client, not proof that every client fails or that the OCR provider failed. The operator should inspect the matching edge event/rule and verify intended developer-client access before proposing a separately reviewed future run. No security configuration was changed and no blanket WAF disable is proposed.

## Reproduce the inputs offline

Prerequisites used for the retained generator: Python 3.12.14, Pillow 12.3.0, ReportLab 4.4.9 and pypdf 6.10.0. Install these packages before going offline. Download `generate.py` and both `assets/NotoSansCJKjp-Regular.otf` and `assets/OFL.txt`. In a **new empty directory**, arrange them as follows, then invoke Python:

```text
reproduction/
  generate.py
  assets/
    NotoSansCJKjp-Regular.otf
    OFL.txt
```

```sh
cd reproduction
python3.12 generate.py
```

This offline command produces the four case directories and a new `input-manifest.json`; compare its file hashes with the retained manifest. It does not run OCR. Do not execute it inside the retained capture directory. An independent scratch-directory regeneration during this implementation reproduced the complete manifest and every source/raster/ground-truth hash exactly.
