Harden phase-2 modules and web from code review
Address 15 max-effort code-review findings (accuracy first, then cleanup).
Accuracy:
- Preserve OCR provenance flags (OCR_APPLIED) in canonical page quality flags
- Token-based keyword matching so short ASCII keys (ai/api/ui/dr/db) no longer false-match inside email/domain/available; Korean substring kept (m03/04/05)
- Reflect real step status in run-all/run-drafting badges and overall job status
- Default reranker per-source cap off (None) so single-source top-K isn't truncated
- Stop dropping requirements in m04 component / m05 section mapping
- Surface a bad explicit --strategy/--architecture path as a failed result
Cleanup / performance:
- Unify web cache to no-store (drop ?v= rewrite; 404 instead of 500 on missing index)
- Pre-tokenize MMR pool once (O(P^2) -> O(P))
- Cut list_runs I/O: one registry read per run, no duplicate artifact sweeps
- Move run title to run_meta.json with legacy upload_registry fallback
- Keep selection of runs that failed to bulk-delete
- Normalize solution-catalog override keywords to a list
- Rename OCR min_word_confidence -> min_avg_confidence (it is a page-average)
- Centralize default LLM-JSON metadata in _shared (dedupe across 5 services)
Tests: 153 passed (+33 regression tests). Docs: CHANGELOG/RELEASE_NOTES updated.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com