commit b7f42f325b433ad0c3535b864c3aad43194d266d
parent a2ad64ea0aa38bd9877d2c8b6d0cc8eed6ebd27c
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Wed, 30 Sep 2026 16:03:36 -0400
plans: release 16 — what a search reads; slice CK's ruling (a Search in row: Transcripts, Posts, Live chat; the first two on by default)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 42 insertions(+), 0 deletions(-)
diff --git a/plans/release-16.md b/plans/release-16.md
@@ -0,0 +1,42 @@
+# Release 16 — what a search reads
+
+`main` at `9a259787` (releases 14 and 15 merged and rolled out). No plan file of its own: each
+slice's prompt carries its ruling, and this record carries what was built. Rules:
+`plans/tools/implementer-rules.md`, with the commit trailer this release's prompts give.
+
+**The standing choices** (not re-opened):
+- **A search reads transcripts and posts unless the visitor says otherwise; live chat is read only
+ when asked.** Today a plain query already reads the transcript cues and the posts corpus, and
+ reads live chat only through a query-builder leaf whose scope is "Live chat". That stays the
+ default; the three become one row of toggles.
+- **The toggles say what a query reads, not which records list.** "Type: Videos, Livestreams"
+ keeps saying which records are shown; an empty query with Transcripts off still lists videos.
+- **A slice that needs another slice's file stops and says so**; it does not edit it.
+- **Nothing is edited in the primary checkout**; each slice has its own worktree, and the parent
+ merges with `git merge --no-ff` only on a clean tree.
+
+## The slices
+
+| Slice | Branch | What | Owns |
+|---|---|---|---|
+| CK | `r16/search-in` | A "Search in" row — Transcripts, Posts, Live chat — on the export and hub search, Transcripts and Posts on by default | `common/components/{FiltersPanel,SearchSessionContext,SearchResults,SearchBar,exportFilterStorage}.tsx/.ts`, `common/lib/searchQuery.ts` and `common/lib/search/*` as its prompt names, `export/e2e/search-in.spec.ts` (new) and the specs its prompt names, `export/e2e/helpers.ts`; records: `plans/FACTS.md` |
+
+## Slice CK — the ruling (2026-09-30)
+
+- One row, **"Search in"**, beside the Type row of the Filters panel: **Transcripts** (on),
+ **Posts** (on; the Posts box moves here from the Type row, same storage key `nop`, same
+ accessible name), **Live chat** (off; offered only when the site's subs manifest reports live
+ chat, as Posts is offered only when the site ships posts).
+- The row governs every query leaf whose scope is "transcripts" (the default leaf): it reads the
+ cues of the kinds ticked. A leaf whose scope is "Live chat" or "Posts" was asked for by name and
+ is not changed by the row.
+- With all three off the Search button does nothing and the panel says which row to fix; the
+ visitor cannot commit a query that reads nothing.
+- A live-chat hit inside a video's row wears the "live chat" track badge whenever the visitor could
+ also be seeing transcript hits — the suppression at `SearchResults.tsx` for that one track ends.
+- Stored like the other toggles (the working snapshot and the profiles, `ytdlp-tb:export-filters`),
+ only when off the default. Share links do not carry the row this release (they do not carry
+ `nop` either); a `qt=` link a visitor opens reads with the visitor's own row.
+- The hub's search gets the row through the shared components; nothing hub-specific.
+
+## Record