LifeLab · lens · killing the three sections

PAGE / SUBPAGES / LINKED is a join, not a view.

Those three headers describe how a row got into the result set — a fact about the query plan. And it's a per-row fact, already carried by the home path in the rail, so grouping by it says everything twice and fragments one answer into three lists. A view has a point of view: an order and an arrangement chosen for the question being asked. Origin is never the question.

why they read wrongand what each one was actually carrying

01

Nobody asks "show me the linked ones". They ask "what's open", "what's mine", "what's due". Origin is plumbing — it belongs in the rail, at row scale, not as a top-level partition.

02

Always three, whether or not any help. A fixed taxonomy can't respond to content. subpages 0 is a header that exists to report its own emptiness.

03

It pre-empts the interesting axis. Grouping is the most powerful thing a view has, and it's spent before you arrive. You can't group by day, tag, or status because origin already took the slot.

04

Subpages aren't rows at all. They're pages. Listing them as a section of blocks flattens a page into its contents; they should appear as nested lenses, foldable, where the author placed them.

But they were carrying three real things, and the replacement has to keep all of them: (a) the counts — how much of this answer is from elsewhere; (b) the toggles-linked, -subpages, [page]/[all]; (c) the ghost-add's target — "+ Add" needs to know which page it writes to. Below, all three move into one line and one gesture.

the riverone continuous view · origin in the rail · subpages as nested lenses · counts as controls

tag /

:tags:{todosort:when-desc⋎ +}
5 results· 2 here· 3 from elsewhere· 1 subpage· no drafts g group · s sort · z unfold all
*this is new headline

it shoudl be kinda aligned

edited should go

structure

** subtask

– list  – list  – list

1. a  2. 2  3. 3

links · tags

:tags:
*hello

adada

:tags:
*hello

ayyy

3 more lines

:tags: :aass:person/Ada
*ayyy is this the rect version
:tags:journal/2026-07-24
*empty block
:tags:journal/2026-07-22
[−]tags/inbox{todo}1 of 7⋎ ×
*TODOtriage the July dump
:tags:

+ Add to tags/inbox — TODO applied

+ Add to tags — :tags: applied

one river
Every result in one list, ordered by the lens's sort:. No partitions. The answer is one shape you can scan, not three you have to reconcile.
origin in the rail
A home path appears only when the block lives somewhere else — so the common case is silent and foreign rows announce themselves. A hairline on the left of the row seconds it. That's the whole of LINKED, at row scale, for free.
counts as controls
The old section counts collapse into one sentence — 2 here · 3 from elsewhere · 1 subpage — and each fragment is a filter you can click. Reading and scoping are the same gesture; -linked is just clicking "here".
subpages are lenses
A subpage renders as a nested lens with its own header, filter, count, and ghost-add — foldable, deletable, and positioned by the author rather than pinned to the bottom. Each one owns its own write target, so "+ Add" is never ambiguous.
zero is one word
Empty facets appear as a grey token in the composition line (no drafts) or not at all. Never a header, never a rule.

grouping becomes yourssame five results · origin was occupying the slot arrangement should have

group:daywhen
today2
*this is new headline
*hello
jul 241
*ayyy is this the…journal
jul 222
*helloperson/Ada
*empty blockjournal
group:tagwhat
:tags:5
*this is new headline
*hello
*ayyy is this the…
:aass:1
*helloperson/Ada

rows can appear twice — the count says so

group:nonedefault
*this is new headline
*hello
*helloperson/Ada
*ayyy is this the…journal
*empty blockjournal

one river · origin in the rail · this is the default

The old behaviour is still reachable — it's just demoted to one value among several: PAGE / SUBPAGES / LINKED becomes group:origin, for the rare moment you genuinely want to audit provenance. Everything else in the grammar stays exactly as drafted; this only changes what group: defaults to.

the tradewhat you give up by merging

You lose the guarantee that "my page's own blocks come first". With one river under sort:when-desc, a journal block from someone else's page can sit above your own top-level content — which for a page you're authoring (rather than querying) is disorienting. Two ways out, and I'd pick the first: default a page lens to sort:source, where authored order naturally puts owned blocks in their authored positions and foreign rows land where their references occur; or keep a soft two-tier river — owned above, foreign below, separated by nothing but a 24px gap and the hairlines, no header and no label.

The second thing you lose is the subpage index — the flat list of child pages you could scan even when none of them matched. That's a real affordance and it shouldn't die with the section: it belongs in the header, as one line of names under the title (docs · frontend · inbox), where it reads as the page's table of contents rather than as part of the answer.