You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-`tests/test_search_index_concurrency.py` (#139): concurrent rebuild and query, background refresh under load, lock-order assertions, `index_locked` live-scan fallback
15
-
- Dual-path parity oracles (#140): `tests/test_dual_path_parity_oracle.py` and `static/js/render/tool_result/dual_path_parity_oracle.test.js` run the same XSS payload through Python (`utils/md_exporter.py`, `utils/tool_dispatch.py`) and JS `renderToolResult`; malformed-input cases for truncated JSONL, broken parent UUIDs, and NUL bytes
13
+
-`KNOWN_TOOL_TYPES` registry in `utils/tool_dispatch.py`; sync test keeps dispatch, file activity, Markdown export, and frontend renderers in step (#104)
14
+
-`static/tool_types.json` generated from the registry and loaded at SPA boot; warns in the console when renderers drift; unknown tools show their type name and JSON payload (#105)
15
+
-`GET /api/schema-report` and an amber banner on the session list when upstream JSONL fields appear or go missing (#108)
16
+
- Disk summary cache at `~/.claude-code-chat-browser/session_summary_cache.sqlite` plus a display-name cache so project and session lists load faster after restart (#111)
17
+
- FTS5 search index in `utils/search_index.py` with background rebuild; `/api/search` hits the index first and falls back to live scan; default window is 30 days (`all_history`, `since_days` for wider ranges) (#120)
18
+
-`/api/search` returns proper error codes for empty queries, overlong queries, bad `since_days`, and locked indexes; search page gets an all-history checkbox, a 50-result cap warning, snippet highlighting, and separate empty vs error UI (#121)
19
+
- Lock order and threading model for the search index in `docs/architecture.md` (#138)
20
+
-`tests/test_search_index_concurrency.py` for rebuild/query concurrency and lock-order checks (#139)
21
+
- Python and Vitest parity oracles in `tests/test_dual_path_parity_oracle.py` and `static/js/render/tool_result/dual_path_parity_oracle.test.js` (#140)
22
+
23
+
### Changed
24
+
25
+
- Session, stats, and export routes share `api/_session_handlers.py` and one `SESSION_LOAD_ERRORS` tuple (#125)
26
+
- Tool result dispatch picks winners by explicit priority instead of tuple order (`plan` over `file_write`, `task_message` over narrower task shapes) (#127)
27
+
- CLI bulk export prints the same `ErrorCode` values and messages as the HTTP API (#134)
28
+
29
+
### Fixed
30
+
31
+
- YAML frontmatter in Markdown export now quotes values that contain colons, `#`, tabs, newlines, or boolean literals; `models_used` and `service_tiers` export as sequences (#107)
32
+
-`SEARCH_INDEX_UNAVAILABLE` (503) when the FTS index is locked and live scan also fails (#122)
0 commit comments