Goal
Add a committed, deterministic vision-path integration fixture for the typed digital-export workflow (a real input shape per the plan's Context: "a digital form is filled in and exported to PDF"), plus the pytest -m integration harness that scores vision output against its golden — and iterate on fixes/changes to the extraction pipeline until those tests pass.
This is a new tier alongside the three in 0001 §Test data acquisition. It complements — does not replace — Tier 2 (real handwritten scans + REMS goldens, local) and Tier 3 (pseudonymized realistic scans, deferred). It is explicitly easier than handwriting; its job is baseline-quality stabilization and regression-catching for straightforward cases, not handwriting robustness.
Scope
docs/design/0002-synthetic-vision-fixtures.md — amends "Test data acquisition" to add the typed-scan tier and records why a clean typed scan is a legitimate production shape rather than the cautioned-against easy fake.
- Generator: render the Faker-seeded form to a flattened (no-widget) image-only PDF, fill the currently-blank fields (
times_worked_position, mentor, level, successful) with a deterministic mix incl. signed-off / crossed-out / blank rows, and emit an exact golden JSON.
- Harness:
pytest -m integration scores vision output on the documented (official, position, successful) tuple contract (modulo position-name normalization), skipped unless Ollama is present; self-manages the daemon via OllamaDaemon; --vision-model / --pull-models CLI options.
- Iterate until green. The accuracy bar for this easy typed input is 100% (humans clear even the hardest handwritten forms at ~99%, so tolerance here is essentially zero). The harness is expected to fail on first run — that is its job. This issue stays open and tracks the prompt/pipeline/model fixes needed to make it pass honestly. Do not lower the floor to go green. If a fix turns out to need a major design change, spin that out into its own issue + design doc.
Acceptance
pytest -m integration passes at ACCURACY_FLOOR = 1.0 on the committed synthetic scan, with the daemon auto-managed and no manual setup beyond an installed Ollama + pulled vision model.
Relationship to #16
Re-scopes #16's harness onto a committable synthetic golden instead of the rems-sync-dependent real-scan path. #16 stays open for the Tier-2 real-scan path.
Goal
Add a committed, deterministic vision-path integration fixture for the typed digital-export workflow (a real input shape per the plan's Context: "a digital form is filled in and exported to PDF"), plus the
pytest -m integrationharness that scores vision output against its golden — and iterate on fixes/changes to the extraction pipeline until those tests pass.This is a new tier alongside the three in 0001 §Test data acquisition. It complements — does not replace — Tier 2 (real handwritten scans + REMS goldens, local) and Tier 3 (pseudonymized realistic scans, deferred). It is explicitly easier than handwriting; its job is baseline-quality stabilization and regression-catching for straightforward cases, not handwriting robustness.
Scope
docs/design/0002-synthetic-vision-fixtures.md— amends "Test data acquisition" to add the typed-scan tier and records why a clean typed scan is a legitimate production shape rather than the cautioned-against easy fake.times_worked_position,mentor,level,successful) with a deterministic mix incl. signed-off / crossed-out / blank rows, and emit an exact golden JSON.pytest -m integrationscores vision output on the documented(official, position, successful)tuple contract (modulo position-name normalization), skipped unless Ollama is present; self-manages the daemon viaOllamaDaemon;--vision-model/--pull-modelsCLI options.Acceptance
pytest -m integrationpasses atACCURACY_FLOOR = 1.0on the committed synthetic scan, with the daemon auto-managed and no manual setup beyond an installed Ollama + pulled vision model.Relationship to #16
Re-scopes #16's harness onto a committable synthetic golden instead of the rems-sync-dependent real-scan path. #16 stays open for the Tier-2 real-scan path.