Summary
The Extract pipeline (PDF upload → run → CSV) check (workflow .github/workflows/frontend-e2e-extract.yml, spec frontend/tests/e2e/extract-pdf-workflow.spec.ts:86) fails intermittently. It is NOT live-LLM gated — the LLM call is replayed from a VCR cassette (OC_LLM_VCR_MODE=replay, fake OPENAI_API_KEY), so it should be deterministic and free. PDF parsing runs against the in-stack Docling microservice (real but local).
Actual failure mode (run 26676881595, PR #1836)
All three attempts failed with a document-processing timeout, not an LLM/assertion issue:
Error: Document "USC Title 1 …" still processing (data-processing="true")
- Timeout 480000ms exceeded while waiting on the predicate
> 1050 | }).toPass({ timeout: timeoutMs, intervals: [5_000, 10_000, 15_000] });
Error: Row "USC Title 1 …" has no non-empty extracted cell — extract may have failed
i.e. ingest → parse (Docling) → embed did not finish within the 8-minute wait, so the extract then ran against an unprocessed document and produced empty cells.
It is flaky, not universally broken
The same workflow has recent success runs — e.g. PR #1825 (claude/canonical-caml-description-refactor) at 2026-05-30 04:58 succeeded, plus feature/in-run-history-compaction and others on 05-28/05-29. Many other history entries are cancelled (concurrency cancel-in-progress), not failures. So the spec passes when document processing happens to finish under 8 min and times out when it doesn't.
Trigger
Runs on workflow_dispatch and on pull_request touching opencontractserver/llms/**, data_extract_tasks.py, the cassette dir, the spec/helpers, or the workflow. (This is why PRs #1825/#1835/#1836 — all touching llms/ — triggered it.) It does not run on main push, so there is no green baseline on main.
Likely causes / fix directions
- Docling parse + embedding throughput on the GH runner is variable and occasionally exceeds the 480s
waitForDocumentProcessed budget. Consider raising the timeout, or making the extract step wait for processing-complete deterministically rather than racing it.
- Confirm the extract VCR cassette still matches the request shape (a cassette miss could also yield empty cells).
- Add a
main (or nightly) run so there is a known-good baseline + reduce flakiness sensitivity.
Context
Surfaced while babysitting PRs #1825 #1835 #1836 #1838. Fix being investigated on branch claude/extract-pipeline-e2e-fix.
Summary
The
Extract pipeline (PDF upload → run → CSV)check (workflow.github/workflows/frontend-e2e-extract.yml, specfrontend/tests/e2e/extract-pdf-workflow.spec.ts:86) fails intermittently. It is NOT live-LLM gated — the LLM call is replayed from a VCR cassette (OC_LLM_VCR_MODE=replay, fakeOPENAI_API_KEY), so it should be deterministic and free. PDF parsing runs against the in-stack Docling microservice (real but local).Actual failure mode (run 26676881595, PR #1836)
All three attempts failed with a document-processing timeout, not an LLM/assertion issue:
i.e. ingest → parse (Docling) → embed did not finish within the 8-minute wait, so the extract then ran against an unprocessed document and produced empty cells.
It is flaky, not universally broken
The same workflow has recent success runs — e.g. PR #1825 (
claude/canonical-caml-description-refactor) at 2026-05-30 04:58 succeeded, plusfeature/in-run-history-compactionand others on 05-28/05-29. Many other history entries arecancelled(concurrencycancel-in-progress), not failures. So the spec passes when document processing happens to finish under 8 min and times out when it doesn't.Trigger
Runs on
workflow_dispatchand onpull_requesttouchingopencontractserver/llms/**,data_extract_tasks.py, the cassette dir, the spec/helpers, or the workflow. (This is why PRs #1825/#1835/#1836 — all touchingllms/— triggered it.) It does not run onmainpush, so there is no green baseline onmain.Likely causes / fix directions
waitForDocumentProcessedbudget. Consider raising the timeout, or making the extract step wait for processing-complete deterministically rather than racing it.main(or nightly) run so there is a known-good baseline + reduce flakiness sensitivity.Context
Surfaced while babysitting PRs #1825 #1835 #1836 #1838. Fix being investigated on branch
claude/extract-pipeline-e2e-fix.