Pulled 2026-06-01 from https://github.com/esaruoho/PDFWorkshop and the local clone at /Users/esaruoho/work/PDFWorkshop.
Authored on /Users/esaruoho/work/PDFWorkshop. Some commits are squashed into the PRs above when they land upstream.
| Date | SHA | Message |
|---|---|---|
| 2026-06-01 | c33d15e | ocr: stamp host in heartbeats so the fleet attributes OCR to this machine |
| 2026-06-01 | b1485bf | ocr-worker: self-heal fuzzy-matches sanitized upload names (fix download_failed) |
| 2026-05-29 | d002b6b | start-ocr: single-instance guard (daemon mode) so boot re-runs don't stack OCR supervisors |
| 2026-05-29 | b8c2be1 | ocr-submit: REMOTE_HOST=cloudcitymacmini not dead .local mDNS hostname |
| 2026-05-29 | 36dd6e1 | ocr-worker: self-heal missing uploads from merlib archive |
| 2026-05-27 | dcf5f51 | fix(ocr-worker): self-heal queue subdirs + visible mv failures |
| 2026-05-01 | ed00c00 | fix(ocr): preserve OCR text on encrypted PDFs and assembly failures |
| 2026-04-28 | 2149af3 | fix(ocr-worker): clean up uploads/, capture failure logs, fix base_name bug |
| 2026-04-27 | 865d1a2 | Fix detached ArrayBuffer crash in autosave |
| 2026-04-14 | 95b5e12 | Disable MLX auto-start: mlx-vlm sampler produces repetition loops on GLM-OCR |
| 2026-04-14 | 25ac06e | Fix MLX GLM-OCR bootstrap: install torch/torchvision + auto-start on Apple Silicon |
| 2026-04-13 | 832ba02 | batch-ocr: per-page heartbeat writes to comms/queue/ocr-heartbeat.json |
| 2026-04-13 | d71f66b | Add priority queue: queue/priority/ runs before queue/pending/ |
| 2026-04-12 | 7339dce | ocr-submit: add --scrape flag for batch PDF submission from HTML pages |
| 2026-04-09 | 034a822 | Add Syncthing inbox: drop PDFs into comms/queue/ocr-inbox/ |
| 2026-04-09 | 3a114aa | Add PYTHONPATH to execSync env for user site-packages |
| 2026-04-09 | 4f49e37 | Fix PATH for PyMuPDF detection in nohup worker environment |
| 2026-04-09 | 2b6ae1a | Add PyMuPDF fallback for page rendering when pdfjs canvas fails |
| 2026-04-09 | a64c7c5 | Add ocr-prepare for downscaling large PDFs before OCR |
| 2026-04-09 | 6288498 | Guard against browser OOM on large PDFs (>100MB) |
| 2026-04-09 | a037abd | Handle large PDFs: skip .pdfws for >50MB, re-read for pdf-lib, always emit .txt |
| 2026-04-09 | 0583b5e | Fix ArrayBuffer detachment: keep separate copy for pdf-lib |
| 2026-04-09 | aff4834 | Fix PDF byte handling for Node v25 Buffer/Uint8Array compatibility |
| 2026-04-09 | 8039290 | Fix pdfjs worker path resolution using createRequire |
| 2026-04-09 | 3215e6e | Fix pdfjs worker source for Node.js v25 |
| 2026-04-09 | b056a16 | Fix batch-ocr backend detection: use health check instead of broken test image |
| 2026-04-09 | 0eaa5a5 | Fix download_pdf: redirect log to stderr so path is not contaminated |
| 2026-04-09 | e15d6c2 | Fix bash compatibility: replace ${,,} with tr for lowercase |
| 2026-04-09 | b20d7a7 | Fix OCR backend detection to use lightweight health checks |
| 2026-04-09 | 89f2794 | Add OCR worker daemon for remote headless OCR via Mac Mini |
| 2026-04-08 | e9fbde0 | Auto-save to IndexedDB, responsive layout, fix Cleanup arrow |
| 2026-04-08 | 599e367 | Add Cmd+F search across pages, Export TXT, fix copy button width |
| 2026-04-08 | 35a9f5e | Show copy feedback on button text instead of separate label |
| 2026-04-08 | 93ea89c | Fix garbled text in exported PDFs: disable font subsetting |
| 2026-04-08 | d7bc9b0 | Fix allPages undefined crash and hydration mismatch |
| 2026-04-08 | 742e33a | Fix garbled PDF export, add Stop button and clipboard copy |
| 2026-04-07 | 116e2d3 | Fix fallback order: GLM-OCR → Gemini → Tesseract |
| 2026-04-07 | c205ba0 | Auto-fallback through OCR engines when one returns empty |
| 2026-04-07 | 023ceae | Fix startup order: Next.js first, then browser, then MLX |
| 2026-04-07 | c917045 | Press Q to quit in start.sh |
| 2026-04-07 | 2930f00 | Auto-restart MLX server on crash, client-side retry for GLM-OCR |
| 2026-04-07 | e35bdc8 | GLM-OCR: detect crashed server, give actionable error message |
| 2026-04-07 | f94be16 | Replace all alert/prompt with in-app result banner, fix MLX retry, fix capitalization |
| 2026-04-07 | 6c7f595 | Add First/Last page navigation buttons |
| 2026-04-07 | c80e989 | Add auto-retry for suspicious empty pages after batch OCR |
| 2026-04-07 | f97f251 | Add post-OCR sanity check and fix page number padding |
| 2026-04-07 | e984376 | Show actual GLM-OCR error message instead of generic 500 |
| 2026-04-07 | 8cdb3f3 | Update README and ARCHITECTURE for GLM-OCR, Unicode export, all new features |
| 2026-04-07 | eac60db | Add batch OCR CLI, fix Unicode export, improve UX |
| 2026-04-06 | ba4ba43 | Show MLX model download/loading progress in terminal |
| 2026-04-06 | 66a19b9 | Improve GLM-OCR progress: show model loading hint on first page |
| 2026-04-06 | 9eb1f26 | Fix GLM-OCR dropdown label: say 'local' not 'API' |
| 2026-04-06 | eb1061b | start.sh auto-launches GLM-OCR MLX server on Apple Silicon |
| 2026-04-06 | 9c0804d | GLM-OCR runs locally: MLX (Apple Silicon) or Ollama, no API key needed |
| 2026-04-06 | 7f94496 | Add GLM-OCR as third OCR engine via Zhipu MaaS API |
| 2026-04-05 | c16684d | Fix start.bat: window no longer vanishes on error |
| 2026-04-04 | ae4d780 | Zero-install: bundle Node.js in release, auto-download if missing |
| 2026-04-04 | 5223461 | Add Windows support and GitHub release workflow |
| 2026-04-03 | 092dc0a | Fix canvas render collision when changing pages quickly |
| 2026-04-03 | fd95a52 | Add language selection, save/load, diff view, batch cleanup, keyboard nav, tests |
| 2026-04-03 | 4c8559f | PDF Workshop — split-screen PDF OCR workbench |
| 2026-04-03 | 58c3a0d | Initial commit from Create Next App |