Goldie Blocks

Library Search Is a Conversation

Rescued from the retired permissions-and-locking plan (R5) — searching the library is something you ask Goldie, never a modal; candidates render in place as spine-less sibling blocks; no search backend exists today

Consolidated 2026-09-25 into Libraries, the current statement. This record is kept as history.

Superseded in part 2026-09-30 by Goldie Finds a Clause and Stages It: S2 (several candidates in place) and S3a (Insert, Replace, Dismiss per candidate) no longer describe Goldie's path. She stages one best pick through the search card's own staged copy; Replace is not hers. S1, S4, S5's asymmetry and S6 stand.

Decision

Searching the library is a conversation with Goldie, never a modal. A Builder who wants an existing clause asks for it in the block panel; the candidates Goldie finds render in place as ordinary-looking sibling blocks with no left spine, and the Builder inserts, replaces or dismisses them from the candidate's own menu.

In plain terms: there is no search box and no pop-up window. You tell Goldie "find me a confidentiality clause" and she lays the options into the document exactly where they would go, drawn without the vertical bar that marks a block as part of the document. You keep the one you want.

Ruled in the permissions-and-locking plan (R5) and the inline-block-authoring plan, 2026-07-26 to 2026-07-29. The source-picker modal (New · Search tabs) that R5 was first specified as is rejected: it made "nothing suitable, draft one instead" a separate branch, and it put a second entry point beside the one Goldie already is.

The six rules (S1–S6)

  • S1. Conversational invocation. No dedicated search control; asking Goldie is the entry point, and her opening line advertises it.
  • S2. Candidates render in place, where they would land. Not a list below the panel and not inside the source block — they sit in document order at the position they would occupy, reading as ordinary blocks. No left spine: the spine marks an attached block, so its absence is the whole signal that a candidate is not yet part of the document. No badge, no label.
  • S3. Open Goldie works on a candidate too. Same gesture, same panel — bar, facets, closed padlock. Goldie speaks but declines: "Insert this block to chat about it." A candidate with no chat teaches nothing; a refusal states the condition and teaches the model in one line.
  • S3a. Insert / Replace live on the candidate's menu, beside Open Goldie, with Dismiss to drop it. The menu acts on the document; the bar acts on the candidate.
  • S4. Both actions are write-structure. Inserting from the library is Builder-only — authoring a block is not inserting one — so a Maker never sees the action panel, though they may still ask and get an answer about what exists.
  • S5. Replace is the destructive one. Insert is additive and reversible by deletion; Replace discards authored text, so it is the action any future protection refuses first. (The plan phrased this as "refuses on a locked block"; the per-block lock was since removed by Maker Fills, Builder Builds, so the surviving rule is the asymmetry, not the lock.)
  • S6. "Nothing suitable" routes to drafting. Asking Goldie to find a clause is also how a user discovers none exists, and the conversational shape gives a free path to "then draft me one."

Current vs Target

Current — no search backend exists today. The backend R5 recorded as done on 2026-07-29 (blocks.searchText, the search_text index, convex/blockSearch.ts and the searchLibrary query in convex/blockLibrary.ts) was deleted with the folio unification; the searchText field and index described in Blocks Schema → Library Search are a record of removed code. The UI half (S1–S6) was never built.

Target. A scoped library query over sealed editions, per A Library Is a Shelf, Not a Folio, with S1–S6 as the interaction contract. The rebuild is a Backlog task; this page is its authority.

Consequences

On this page