Why:
- Long benchmark and process runs block HTTP clients; task #20 required async execution.
Changes:
- SQLite jobs table + GET /jobs and GET /jobs/{id}
- POST /benchmarks?background=true and POST /documents/{id}/process?background=true return 202 + job_id
- FastAPI BackgroundTasks execute work in-process; sync paths unchanged
Impact:
- Jobs are lost on server restart (Option A, no external queue)
Co-authored-by: Cursor <cursoragent@cursor.com>
Why:
- Support Text PDFs in the same DocumentTree/markdown contract as DOCX.
Changes:
- PyMuPDF parser, text-layer gate, shared heading heuristics, upload dispatch for .pdf.
Impact:
- Scanned/image PDFs are rejected at upload; requires pymupdf installed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Why:
- Need to list documents to get document IDs for queries
- ProcessRequest should default to all 5 strategies
- paragraph_count should be optional (not always stored)
Changes:
- Added GET /documents endpoint with pagination
- Added DocumentListResponse model
- ProcessRequest now defaults to all 5 strategies
- DocumentResponse.paragraph_count now defaults to 0
Why:
- Need to parse .docx/.doc files into DocumentTree + markdown
- Need API endpoints for document upload, processing, and deletion
Changes:
- Parser: .doc→.docx conversion via LibreOffice, XML-level extraction for table-heavy docs, heuristic heading detection
- Service: upload, process (delegates to chunking), delete orchestration
- Routes: POST /documents, POST /documents/{id}/process, DELETE /documents/{id}, GET /strategies