Sub-issue of #146 — layer 3 of 6.
Goal
Prove the ingestion-to-answer pipeline works end to end on real documents, and degrades honestly when it cannot.
Why this layer matters most
Unit tests cover the pieces; this is the only layer that proves they compose. The pipeline spans a Python service, a Node service, a queue, a vector store and a database — every integration point between them is untested by unit tests, and the pipeline is the product.
Happy path
Fixtures
Failure paths
Each must produce an actionable error and leave the document in a coherent state — never stuck in processing forever.
Degradation
Acceptance criteria
- Full pipeline verified on all three formats with stage-by-stage assertions
- Every failure path leaves a coherent, inspectable state
- No degradation scenario produces an opaque error or an infinite
processing state
- Fixtures committed and documented
Note
The "stuck in processing forever" case is already known — the README troubleshooting table lists it. It should be a test, not a documented workaround.
Sub-issue of #146 — layer 3 of 6.
Goal
Prove the ingestion-to-answer pipeline works end to end on real documents, and degrades honestly when it cannot.
Why this layer matters most
Unit tests cover the pieces; this is the only layer that proves they compose. The pipeline spans a Python service, a Node service, a queue, a vector store and a database — every integration point between them is untested by unit tests, and the pipeline is the product.
Happy path
Fixtures
Failure paths
Each must produce an actionable error and leave the document in a coherent state — never stuck in
processingforever.Degradation
QVAC_LLM_ENABLED=false→ retrieval-only mode returns passages for every actionAcceptance criteria
processingstateNote
The "stuck in processing forever" case is already known — the README troubleshooting table lists it. It should be a test, not a documented workaround.