3.1 KiB
Task 4 report: persist and cache one rich vision read per page
RED evidence
Command:
npx vitest run src/lib/dn-pipeline/extract.test.ts src/lib/dn-pipeline/page-store.test.ts
Result before implementation: failed as expected. The new page-store suite
could not resolve ./page-store, and the rich parser assertions received
undefined for the new fields (2 failed tests, 1 failed suite).
GREEN evidence
Focused verification:
npx vitest run src/lib/dn-pipeline/extract.test.ts src/lib/dn-pipeline/page-store.test.ts
Result: Test Files 2 passed (2), Tests 11 passed (11).
Regression verification:
npx vitest run src/lib/dn-pipeline/extract.test.ts src/lib/dn-pipeline/page-store.test.ts src/lib/dn-pipeline/run.test.ts src/lib/dn-pipeline/segment.test.ts
Result: Test Files 4 passed (4), Tests 58 passed (58).
npm run typecheck
Result: passed (tsc --noEmit).
git diff --check
Result: passed.
Implementation
- Extended
PageReadand the extraction schema/prompt with supplier/site text, PO candidates, printed pagination, vehicle registration, raw text, and evidence while retaining all existing commercial fields. - Added defaults for absent rich fields and preserved parser failures as thrown errors.
- Added
readOrReusePage()with schema/prompt-version cache reuse, reading, successful extraction persistence, bounded failure persistence, and rethrowing of extraction errors. Persisted results are schema-validated before being stored. - The extractor continues to send canonical bytes as
data:image/png.
Self-review and concerns
- Only Task 4 files plus this report were changed; Clock/photo-app files were untouched.
- Rich
PageReadfields are required in the TypeScript interface; existing page fixtures/builders now provide explicit null/empty defaults. - Cache reuse trusts a stored extraction when status and schema/prompt versions match, as required; it does not invoke the vision extractor.
Commit
0bd344a80e536d807c75806947e8a343a53ca171 feat(dn): persist cached page vision reads
Fix round 1
- Failure-status persistence errors are surfaced with both the extraction and PocketBase persistence messages; they are no longer silently swallowed.
- Matching-version cached extractions are validated through
parsePageRead(); corrupt cache data is treated as a miss and re-extracted. - Added tests for corrupt cache recovery and failure-status write errors.
- Task 7 owns staged-runner integration; Task 4 intentionally does not wire
readOrReusePage()into legacyrun.ts.
Verification:
npx vitest run src/lib/dn-pipeline/extract.test.ts src/lib/dn-pipeline/page-store.test.ts src/lib/dn-pipeline/run.test.ts src/lib/dn-pipeline/segment.test.ts
Result: Test Files 4 passed (4), Tests 60 passed (60).
npm run typecheck passed (tsc --noEmit); git diff --check passed.
Fix round 1 commit: ea791d6720a1fa21a548c4517e2834790a2141c4 fix(dn): harden cached page read persistence.
Fix round 2
Report-only correction: this round updates commit provenance in this report only. No implementation or test files were changed.