LifeLab · transclusion picker

Polymorphic ![[ — one gesture, an escalation ladder

No second trigger, no new syntax to memorize. ![[ stays the only summoning gesture; what you type inside the picker decides what you get. A name transcludes a page. A comma stitches two. A facet token morphs the picker into query mode. A page plus a predicate filters a transclusion. The fork is visible inside the modal itself — the first time you type todo instead of a title, the feature teaches itself.

Rung 1 · name

![[Projects]] — exactly today's behavior. One page, referenced region. Untouched.

Rung 2 · comma

![[Projects, Reading]] — stitched union. Each sub-river keeps its page order and write-home.

Rung 3 · facet

![[todo :project/lifelab:]] — picker morphs into query mode; result is an anonymous smart view pill.

Rung 4 · page + facet

![[Projects: todo]] — filtered transclusion. Still referenced; predicate only hides rows.

1RUNG 1→2 · NAME, THEN COMMA

Today's picker, plus one teaching row

Typing Proj matches pages as always — transcludes exactly one. The only new chrome: a footer hint and a live view row pinned at top-of-list when your text could be a facet. Here it stays dormant; Proj is clearly a name. , is a keystroke, not syntax: it commits the highlighted page as a chip and starts a new search — recipient-field style.

2026-07-12

[all] · [page] 2 · :project/lifelab: 4

*planning sunday
reviewing the week. ![[Proj
![[ Proj 4 pages
pages↵ transcludes · , adds another
Projects 14 blocks · 3 subpages
project/lifelab 31 blocks
project/lifelab/mcp 6 blocks
project-tracking/ui 9 blocks
transclude ,add another page esccancel tip: type todo or :tag: to make a view
ijournal/2026-07-12 picker · pages mode
names pick pages — facet tokens switch the picker to query mode
2RUNG 2 · RESULT

![[Projects, Reading]] — one region, two rivers stitched

Still referenced — no predicate anywhere. Each sub-river keeps its own page order, and adding inside a sub-river writes to that page. The × removes the window, never content. The block stores page IDsProjects, Reading is display serialization, so a page literally named Projects, Reading is just one candidate row, one chip.

2026-07-12

[all] · [page] 3 · :project/lifelab: 4

*planning sunday
reviewing the week.
[-] Projects, Reading referenced · 2 pages 19 blocks ×
Projects14 blocks · page order
*TODO ship smart view spec:project/lifelab:
* lifelab max — python runtime notes
+ Add to Projects
Reading5 blocks · page order
* the humane interface — raskin:reading:
* tiddlywiki filter grammar deep dive
+ Add to Reading
*hello:testing:
njournal/2026-07-12 2 rivers · write-home per sub-river
stitched Projects, Reading — one window, two homes. × removes the window; both pages untouched
3RUNG 3 · FACET TOKEN

Type todo — the picker morphs into query mode

The moment a token parses as a facet, a live VIEW row pins to the top with a match count, and PAGES demotes below it (your text still might be a page name — both readings stay one arrow-key apart). drops an anonymous smart view pill into the block — no save dialog, name it later or never.

2026-07-12

[all] · [page] 2 · :project/lifelab: 4

*planning sunday
reviewing the week. ![[todo :project/lifelab:
![[ todo :project/lifelab: 23 blocks · 6 pages
view↵ inserts as smart view
🔎 todo :project/lifelab: 23 blocks · live
pagesin case you meant a name
todo-someday-maybe 8 blocks
project/lifelab 31 blocks
insert view tabadd facet esccancel facets: todo · :tag: · -:tag: · page: · when:
ijournal/2026-07-12 picker · query mode · 23 match
query mode— your text parses as facets, not a name. ↑ back to pages list if you meant the page
4RUNG 3+4 · RESULTS SIDE BY SIDE

Anonymous view pill vs filtered transclusion

Top: rung 3's result — a collapsed query pill, computed badge, provenance headers, explicit write-home. Bottom: rung 4, ![[Projects: todo]]still a transclusion: page order, page write-home, and the predicate is just a chip that hides rows (2 hidden, one shown struck for honesty). Strip the chip, get the whole page back.

2026-07-12

[all] · [page] 4 · :project/lifelab: 4

[-] 🔎todo :project/lifelab:23 computed name it · edit query ×
journal/2026-07-112
*TODO wire sql views for tags + links:sql:
*TODO decide region badge copy
project/lifelab/mcp1
*TODO expose query_open over mcp:mcp:
+ New block → journal/today · born matching
[-] Projects : todo× referenced · filtered 3 shown · 11 hidden ×
*TODO ship smart view spec:project/lifelab:
* lifelab max — python runtime notes hidden by filter
*TODO benchmark wasm sqlite on mobile
+ Add to Projects(page order, page home — filter only hides)
njournal/2026-07-12 computed + filtered regions
two badges, two contracts. computed: membership from predicate · filtered: membership from page, rows hidden

The ladder in one line: ![[Projects]]![[Projects, Reading]]![[todo :project/lifelab:]]![[Projects: todo]] — name, union, predicate, name+predicate. One gesture, no new trigger; the picker morphs based on what parses. Commas never parse: , is a commit keystroke on the highlighted item, picks are stored as page IDs, and pasted text is searched literally — so comma-bearing page names stay unambiguous. Rungs 1–2 and 4 are referenced (page owns blocks, × removes window); rung 3 is computed (pill = anonymous smart view, promotable to views/… later via name it). Grammar stays the same five facets as the smart view editor — the pill's edit query opens exactly that editor.