LifeLab · query buffers

Ephemeral query buffer — agenda as a temporary page

Run a query from the palette and the results open as a buffer — actionable like a page, saved like nothing. The starred name (*query: …*) is the Emacs temp-buffer convention: no path, no backlinks, no place in the pages tree, gone on q. Prior art: org-agenda, M-x occur, dired. This gives computed collections an entry point that doesn't require authoring a page first.

A buffer, not a page

Starred name, no path, no backlinks. q dismisses; nothing persists unless you say so. Zero commitment to just look at a query.

A window, not a copy

Every row is its source block. Cycling TODO, editing text — writes through instantly. Same contract as a transclusion region.

Honest membership

An edit that stops matching dims the row in place with a note — dropped on rerun, never yanked away mid-keystroke. org-agenda behavior.

Pin to make it real

Pin = a normal page whose first block is the query, pinned + run-on-load; results render as a computed region. Virtual pages from existing primitives.

1SUMMON A QUERY

Mod+K q — a filter, not a command

The palette gains a query mode: type the same filter syntax used everywhere else (todo :project/lifelab:), watch the match count live. inserts nothing into your page — it opens the result set as a buffer. ⌥↵ skips straight to a pinned page if you already know you'll keep it.

2026-07-11

[all] · [page] 2 · :project/lifelab: 4 · :nested-pages: 4

*hello
testing

+ Add to journal/2026-07-11…

query › todo :project/lifelab: 23 blocks · 6 pages
MATCHES
*TODO wire sql views for tags + links journal/2026-07-11
*TODO decide region badge copy journal/2026-07-11
*TODO expose query_open over mcp project/lifelab/mcp
*TODO fix transclusion depth clamp journal/2026-07-08
open as buffer ⌥↵pin as page esccancel +19 more
qjournal/2026-07-11 query mode · 23 match
2THE BUFFER

*query: …* — a starred name, not a path

Results take over the buffer, org-agenda style. Real blocks, grouped by home page — the group header is the same provenance chrome as a LINKED section. Selection and keys act on the source block; the buffer itself owns nothing.

no path · not in pages tree

*query: todo :project/lifelab:* ephemeral — not saved

23 blocks·6 pages·ran just now

tcycle todo eedit in place visit page ppin as page grerun qdismiss
[-]journal/2026-07-11[open page]2
*TODO wire sql views for tags + links:sql:
*TODO decide region badge copy
[-]project/lifelab/mcp[open page]1
*TODO expose query_open over mcp:mcp:
[-]journal/2026-07-08[open page]2
*TODO fix transclusion depth clamp:nested-pages: t cycle · e edit · → visit
*TODO chrome for computed regions

+18 more · show all

q*query: todo :project/lifelab:* ephemeral · 23 blocks · write-through
opened *query* — temporary buffer. edits write through to source pages · q dismisses, nothing saved
3WRITE-THROUGH

t cycles the source block — membership stays honest

The buffer is a window, not a copy: t writes DONE to journal/2026-07-08 immediately. Because the row no longer matches todo, it dims in place with a note — dropped on the next rerun, never yanked away mid-keystroke.

no path · not in pages tree

*query: todo :project/lifelab:* ephemeral — not saved

22 blocks·6 pages·1 edited out

tcycle todo eedit in place visit page ppin as page grerun qdismiss
[-]journal/2026-07-11[open page]2
*TODO wire sql views for tags + links:sql:
*TODO decide region badge copy
[-]project/lifelab/mcp[open page]1
*TODO expose query_open over mcp:mcp:
[-]journal/2026-07-08[open page]2 → 1
*DONE fix transclusion depth clamp:nested-pages: CLOSED: [2026-07-11] no longer matches · drops on rerun
*TODO chrome for computed regions

+18 more · show all

q*query: todo :project/lifelab:* ephemeral · 22 blocks · 1 stale
DONEfix transclusion depth clamp → journal/2026-07-08 no longer matches — kept until rerun
4PIN = REAL PAGE

p — the buffer promotes to a page with a pinned query block

Pinning creates queries/lifelab-todos: a normal page whose first block is the query — pinned, run on load, render mode on the block chrome. Results are a computed region (same left-rule family as a transcluded page, different membership badge). Virtual pages fall out of existing primitives: page + pinned block + region.

queries/

lifelab-todos pinned query · runs on load

23 blocks·6 pages·refreshed on load

#+begin_query run › auto list · table · transclude
todo :project/lifelab:
#+end_query
[-] results computed · 23 blocks · membership derived, not authored
[-]journal/2026-07-11[open page]2
*TODO wire sql views for tags + links:sql:
*TODO decide region badge copy
[-]project/lifelab/mcp[open page]1
*TODO expose query_open over mcp:mcp:

+20 more · show all

qqueries/lifelab-todos pinned · runs on load
saved queries/lifelab-todos — buffer promoted. same query, now a pinned block on a real page

Precedent: org-agenda and M-x occur — temporary buffers over live data, keybound edits that write to source. Relation to ![[page]]: a pinned query renders a computed region; a transcluded page renders a referenced region — same left-rule chrome family, different membership badge, same write-through contract. The buffer is the third entry point: computed, unsaved, disposable. Nothing here is a new block type — the query block is a code block with a declarative payload, and the buffer is chrome.