Joseph Doherty
3f1a284acb
merge: T108 scene-close-on-cancel strengthen test + rationale
2026-04-27 04:48:00 -04:00
Joseph Doherty
87f93f00b5
merge: T107 embeddings.py fallback warning
2026-04-27 04:48:00 -04:00
Joseph Doherty
d1e2902655
merge: T106 search.py N+1 batching + k constant
2026-04-27 04:48:00 -04:00
Joseph Doherty
54dfa8d611
merge: T105 snapshots.py polish
2026-04-27 04:48:00 -04:00
Joseph Doherty
5d36d3456f
merge: T104 memory.py DRY MAX(id) + fts_rank doc
2026-04-27 04:48:00 -04:00
Joseph Doherty
0e9421dcf7
merge: T103 branches polish (global-leak doc + unknown-name warning)
2026-04-27 04:48:00 -04:00
Joseph Doherty
baffeb3a44
chore: scene-close-on-cancel — strengthen regression test + document rationale (T108)
...
Investigation surfaced a transactional bug in the cancel path: when the
primary stream raises asyncio.CancelledError mid-stream, post_turn
re-raises at end-of-function, and open_db's dependency teardown skips
conn.commit() — rolling back ALL post-cancel writes including the
scene_closed event. The existing T74.3 regression test only passes
because asyncio is not imported at module scope, so CancelledError
becomes NameError (caught by except Exception, leaves cancelled=False).
Documented in turns.py + test docstring; deferred for triage.
2026-04-27 04:47:26 -04:00
Joseph Doherty
29b7c90b29
chore: embeddings.py warns on fallback for non-default models (T107)
2026-04-27 04:47:17 -04:00
Joseph Doherty
64c9ca634a
chore: snapshots.py polish — hoisted imports + strict kind + mtime doc (T105)
2026-04-27 04:47:14 -04:00
Joseph Doherty
374a76c867
chore: branches polish — global-leak docs + unknown-name warning (T103)
2026-04-27 04:34:32 -04:00
Joseph Doherty
b65e1e1098
chore: memory.py DRY MAX(id) helper + document fts_rank=None contract (T104)
2026-04-27 04:34:28 -04:00
Joseph Doherty
996a16cfb5
perf: search.py N+1 batching + k constant extraction (T106)
2026-04-27 04:34:18 -04:00
Joseph Doherty
a06f90a164
docs: add Phase 4.5 cleanup plan (all 24 backlog items)
...
16 tasks across 9 waves consolidating all 24 items in CLAUDE.md
Phase 4.5/5 backlog. Mix of:
- Wave 1 (parallel 6-way): trivial polish across 6 different files
- Wave 2 (single): schema migration 0014 (FK CASCADE + memories.event_id)
- Wave 3 (single): drawer bundle (event_id guard + html.escape + modal
partial + bulk significance re-rate)
- Wave 4 (single): search UX (FTS snippet highlight + deep-link)
- Wave 5 (single): real embedding model swap (LLMClient.embed protocol)
- Wave 6 (single): branching read-side filter (riskiest — cross-cutting)
- Wave 7 (single): regenerate lifecycle rollback
- Wave 8 (single): sqlite-vec swap [ENVIRONMENTAL — may defer to Phase 5
if Python rebuild / apsw not feasible]
- Wave 9 (parallel 3-way): structured fixture builder + integration tests + docs
Schema baseline 13 -> 14 (or 15 with T115). Big tasks (T112 real embed,
T113 branching filter, T114 lifecycle rollback) advance the engine
beyond Phase 4's metadata-only state. T115 environmental decision
captured in pre-flight; the other 13 tasks ship without it.
Uses task ids T103-T118 to avoid collision with prior phases.
2026-04-27 04:22:08 -04:00
dohertj2
df977fc985
Merge pull request 'Phase 4: vector retrieval, branching, drawer polish' ( #6 ) from phase-4 into main
2026-04-27 04:10:25 -04:00
Joseph Doherty
51a12afbec
merge: T102 phase 4 documentation update
2026-04-27 04:09:09 -04:00
Joseph Doherty
fc3020a0ee
merge: T101 phase 4 cross-feature integration tests
2026-04-27 04:09:09 -04:00
Joseph Doherty
228f9abb19
test: phase 4 cross-feature integration coverage (T101)
2026-04-27 04:08:25 -04:00
Joseph Doherty
b6119879e5
docs: phase 4 status, behavioral defaults, deferred items (T102)
2026-04-27 03:56:45 -04:00
Joseph Doherty
3b4c7b9cef
merge: T100 cross-chat search UX (top-bar + results page)
2026-04-27 03:48:06 -04:00
Joseph Doherty
36d75fa6e7
merge: T99 snapshot UX (manual trigger + list + restore + preview)
2026-04-27 03:48:06 -04:00
Joseph Doherty
0a2c5924f9
feat: cross-chat search UX (top-bar + results page) (T100)
...
Wires T93's `search_all_memories` service into a small read-only HTML
surface so users can find a memory across every chat in the database.
* `chat/web/search.py` (new): GET `/search?q=...` runs the FTS service
with k=50, hydrates each row with bot name + scene timestamp, and
renders `search.html`. Empty `q` short-circuits to no results so the
top-bar form can submit even with an empty input.
* `chat/templates/search.html` (new): empty-state placeholder, results
list with chat-level "Open chat" links (`/chats/{chat_id}` — memories
don't carry an event_id today, so no per-turn anchor).
* `chat/templates/layout.html`: append a small `<form>` to the rail
nav, additive only.
* `chat/app.py`: register `search_router` (additive import + include).
* `tests/test_search_ux.py`: 3 tests — multi-chat results, empty-query
placeholder, chat link.
2026-04-27 03:46:52 -04:00
Joseph Doherty
a5f0e69d44
feat: snapshot UX (manual trigger + list + restore + preview) (T99)
2026-04-27 03:46:49 -04:00
Joseph Doherty
3dbe1a01ff
merge: T98 drawer Phase 4 bundle (branching + sig review + hide + delete + remaining edits)
2026-04-27 03:38:15 -04:00
Joseph Doherty
4546bc0d9c
feat: drawer remaining v1 field edits (T98.5)
...
Audit of chat/state/manual_edit.py target_kind dispatch found two §6.4
fields without drawer affordances despite being already-projected text
columns: chat_state.narrative_anchor and chat_state.weather. Both land
via new manual_edit branches (target_kind chat_narrative_anchor and
chat_weather) plus paired drawer routes and Scene-section text inputs.
The container properties_json blob is intentionally deferred — bounded
JSON edits aren't wired through manual_edit and the drawer never
surfaces multiple containers at once, so v1 leaves it out.
2026-04-27 03:35:54 -04:00
Joseph Doherty
c4fa11fe78
feat: drawer surgical delete with cascade preview (T98.4)
2026-04-27 03:29:07 -04:00
Joseph Doherty
461d441078
feat: drawer hide-from-view toggle + turn_hidden manual_edit branch (T98.3)
2026-04-27 03:27:59 -04:00
Joseph Doherty
b25007eb44
feat: drawer significance review panel (T98.2)
2026-04-27 03:25:40 -04:00
Joseph Doherty
d39d31479d
feat: drawer branching UI (T98.1)
2026-04-27 03:24:02 -04:00
Joseph Doherty
7899c50b6c
merge: T97 memory write hook + embedding worker + backfill + call-site wiring
2026-04-27 03:09:14 -04:00
Joseph Doherty
177e39d59c
feat: wire embedding worker call sites in turns/meanwhile/skip/regenerate (T97.5)
2026-04-27 03:08:36 -04:00
Joseph Doherty
d85ed8aaa6
feat: backfill_embeddings script for existing memories (T97.4)
2026-04-27 02:51:48 -04:00
Joseph Doherty
9c63d6b24c
feat: app lifespan starts/stops EmbeddingWorker (T97.3)
2026-04-27 02:51:44 -04:00
Joseph Doherty
64a07aa87f
feat: memory_write enqueues embedding job after each memory_written (T97.2)
2026-04-27 02:51:40 -04:00
Joseph Doherty
6674f9475c
feat: embedding worker drains queue and emits embedding_indexed events (T97.1)
2026-04-27 02:51:36 -04:00
Joseph Doherty
50448b72f8
merge: T96 combined FTS + vector retrieval ranking via RRF
2026-04-27 02:44:03 -04:00
Joseph Doherty
b8b4aed6d9
feat: combined FTS + vector retrieval ranking via RRF (T96)
2026-04-27 02:42:38 -04:00
Joseph Doherty
5ff107574c
merge: T95 delete-impact computation service
2026-04-27 02:37:28 -04:00
Joseph Doherty
915d625d7f
merge: T94 branching service
2026-04-27 02:37:28 -04:00
Joseph Doherty
28e13d416f
feat: delete-impact computation service (preview without mutation) (T95)
2026-04-27 02:36:30 -04:00
Joseph Doherty
296e8fdddd
feat: branching service (branch_from_event + switch + metadata) (T94)
2026-04-27 02:35:58 -04:00
Joseph Doherty
013b563f21
merge: T93 cross-chat search service
2026-04-27 02:32:53 -04:00
Joseph Doherty
62d5cdd826
merge: T92 pure-Python cosine vector search service
2026-04-27 02:32:53 -04:00
Joseph Doherty
a25c166174
merge: T91 embedding generation service (pseudo-embedding)
2026-04-27 02:32:53 -04:00
Joseph Doherty
8f66e1123a
feat: cross-chat search service (T93)
2026-04-27 02:31:31 -04:00
Joseph Doherty
caa17b4174
feat: embedding generation service (Phase 4 pseudo-embedding) (T91)
2026-04-27 02:31:07 -04:00
Joseph Doherty
c7cb0eb01e
feat: pure-Python cosine vector search service (T92)
2026-04-27 02:31:06 -04:00
Joseph Doherty
1d6768e980
test: bump schema_version assertion to 13 (0012 embeddings + 0013 branches)
2026-04-27 02:28:11 -04:00
Joseph Doherty
8b086d4bb8
merge: T90 phase 3.6 carry-overs trio
2026-04-27 02:27:48 -04:00
Joseph Doherty
6c7ac8f69f
merge: T89 branches table + projector handlers
2026-04-27 02:27:48 -04:00
Joseph Doherty
fe34d4f4c0
merge: T88 embeddings table + projector handlers
2026-04-27 02:27:48 -04:00