todo/Search over ticket meta pairs (Sta: OPEN presence, Who: gritzko exact) backed by a store-resident LSM index that decides WHICH tickets the board opens — it never renders. Rulings 2026-08-03: the keyed kv64 lane (a re-put overwrites, so a pair is a mutable cell), wh64-shaped path-major rows, the value stored literally when it fits ron60, and an mtime sweep that reconciles per-ticket blocks. Consumers: the :todo board (TODO-001, BE-038); the arg/click/sort layer is TODO-004.
Key: value leaf, StrictMark §"Meta pairs"; ticket keys (Who: Due: For: …) registered in todo.kv64Z compares keys only, so a re-put of one key wins at get, range and seek alike (jab/test/index.js:112).abc.index("kv64", {dir, ext}) is a handle on a dog Pup stack — runs, memtable and the 1/8 ladder are all C (jab/pup.hpp, jab/INDEX.md §"pup.hpp").jab/API.md §"abc.index" is STALE: .runs, ._seq, .mem, .flush, .compact and the dir-less RAM backing are gone, and commit() is the seal verb.^([A-Z][a-z][a-z]): (.*)$ — the meta pair is line-local by design, so the regex IS the grammar.shared/metaidx.js: a LAZY indexing API over one kv64 lane in the store shard — the caller asks for a filtered ticket list and the index brings itself up to date to serve it. TODO-004 is built on this surface.
(path_hl:40 | key_code:20 | kind:4) -> val (kind:4 | value:60) — the wh64 field split (dog/WHIFF.h) that keeper and graf already ride.prefix(path_hl<<24n, 24, cb) reads a whole ticket's meta in one pass.key_code is the 3-char key VERBATIM at 6 bits/char (18 of the 20 bits), injective — a meta key never collides and a ticket's pairs sort stably.todo/, stat each ticket file, re-lex every one whose mtime is at or past the mark, reconcile its block, write the new mark row.path_hl back through the readdir walk — that list is the filtered tickets..mkd under todo/ whose name fits the ticket-code regex, PLUS any DIR whose name fits it and which holds a README.mkd/README.md (the fat layout, todo).README — one row block per ticket either way, and the attached files never index.[A-Z][a-z][a-z] shape being canonical already.shared/ingest.js idxWriter discipline.>= the mark: a redundant re-lex costs one read, a missed edit gives a wrong answer, and a file touched mid-scan lands past the mark and re-lexes next time.todo/'s .mkd files (ruling); the runs live in the store's shard dir alongside keeper.idx, ext .meta.idx — never in <wt>/.be, which is a FILE whenever the store is not colocated.shared/store.js (<store>/.be/<project>/, the opened store's .shard), never composed by hand.path_hl hashes the wt-qualified path and the mark row is per-wt (the sentinel key carries the wt code); a global mark would let wt A's sweep mark wt B's unindexed files as done.wh128 lane, key-hashlet-major rows, 40-bit key hashlets, the line field, and "filter-grade, never truth" — a keyed lane makes a pair a mutable cell, so the row IS the current value.Sta: OPEN is a full index scan under path-major ordering (a key column is not contiguous), which costs far less than the fs sweep that precedes it; a key-major twin lane is the fallback if it ever shows.Due: 2026-08-03 stored as the ron60 date 26803 sorts and ranges, free text hashes.Sta+Who+Due) intersect on path_hl before the board opens anything, per TODO-001.Sta: OPEN plus Sev: HIGH) or stays merged as the header has it — gritzko's call, and a todo spec edit.shared/metaidx.js: row pack/unpack + abc.index("kv64", {dir: shard, ext: ".meta.idx"}) open/closepath_hl -> path, the filtered ticket listDue: -> date, free text -> hash)path_hl -> exclude both, read them directlyDue\: escape; swap to DOG-026 kinds when they landtodo/**/*.mkd plus key registration in todo (human-owned spec edit):todo board (TODO-001, BE-038)kv64 lane landed 2026-08-02 and serves the overwrite collapse this index is built on.line field is gone.