Semantic search over a Markdown knowledge base, served over MCP.
ADR-0028 lets an existing index
catch up with a change to how .docx files are read, once, on an ordinary run:
while a policy key in index_meta is not at its value, every unchanged .docx
is re-read and each row is settled. The pass was .docx only: the key, the
predicate that picks the rows to re-read (rereads_unchanged_docx), the
awaiting-reparse mark and the final transaction all named "docx".
v1.19.0 changes how .pptx slides are read: each table row becomes one line,
its cells tab-separated, and <a:br> a line break. An unchanged .pptx keeps
the chunks the earlier version cut for as long as the index exists, the same
problem ADR-0028 solved for .docx. This is ADR-0028’s revisit condition: “a
later change needs the same catch-up for another format”. This ADR replaces
ADR-0028’s sentence that names the per-row column (its option 1) as the general
form.
.docx keys, their values, their notices and the tests that pin them do
not change..docx tests pin the key values and
that dropping a key reopens the pass. Rejected for those two reasons..docx pass for .pptx. No change to the .docx path, but two
implementations of the same question (“does this run re-read this row”),
which AGENTS.md rules out.index_meta:
.docx keeps its three (ADR-0028), .pptx gets
pptx_table_break_policy (tab-joined-rows-kept-breaks).rereads_unchanged_as(extension, stale, …), decides whether a
row is re-read: that format’s pass is running, the row was written by that
format’s parser, and its hash is the scan’s. rereads_unchanged_docx is its
.docx case.stale_row, decides whether a row the run did not settle gets
awaiting-reparse: it belongs to a format whose pass is running..docx keys in their order, then the .pptx key. A run that is cancelled
or returns an error writes none.groove index announces each running pass before the loop, the .docx line
first. The file watcher runs no pass..pptx key never re-reads a .docx, nor the other way round; an
index upgraded from v1.18.0 re-reads its .pptx files once and leaves its
.docx files on the fast path..pptx files the old way after the key
is recorded, which only --force undoes..docx, carried over), or a third format needs a catch-up.
(2026-10-17, v1.20.0) .docx needed a fourth key and met this condition; the
keys stay per format, for the reasons in
ADR-0030.grooveseek/src/indexer.rs (the predicates and the
notice), grooveseek/src/db.rs (the key) and
grooveseek/tests/index_pptx_table_policy.rs (the runs, the cross-format
cases, the failed write, the callback, the watcher).