(( escalates an add into an inline block reference, the same cite trigger used everywhere. Tab stays bound to tag-jump; the marker (* / ⌕) always shows the mode. The line only exists under your cursor — no persistent “+ include.”LifeLab · nonlinear workspace
The quiet gutter affordance you liked, built out around the hard part: every block is summonable, so the page stays calm and the search does the work. No provenance chrome — a summoned block already carries its :tags:, so it just lands native. Keyboard-first throughout: an Emacs × TiddlyWiki hybrid, not a web app — every verb is a chord.
No "+ include" line. A gutter + appears only under the cursor — the page reads as empty as your Home.
Search the small page namespace first, then › drills into that page's headlines. page › headline keeps a huge set pickable.
Across everything: semantic + headline rank, recency and current-page proximity — a short list, not 1,000 rows.
No "from Y" marker. The block keeps its tags; tags are the context. Nothing fences it off from your own captures.
Hover the empty line and the gutter wakes. It opens in add — type and it's a new block. Mod+K s flips the same line to summon (it's in the Mod+K family, so Tab stays free for tag-jump); the marker switches * → ⌕ so the mode is always visible. Alongside your Mod+K j and Mod+K x.
(( escalates an add into an inline block reference, the same cite trigger used everywhere. Tab stays bound to tag-jump; the marker (* / ⌕) always shows the mode. The line only exists under your cursor — no persistent “+ include.”Free text searches every block — ranked by meaning, headline match, recency and proximity. Each row shows its :tags: (the context) and its page#headline address. Page hits offer › to scope in.
Hitting › on a page turns it into a scope chip — now you're searching only that page's handful of headlines, not all 1,240 blocks. The two-stage resolve that makes a giant namespace feel small.
The summoned block drops into the stream identical to your own captures — same star, headline, logbook and its own :tags:. No "from" chip, no border, no fence. A brief tint on arrival is the only cue; then it's indistinguishable.
+ Click to add text…
:study:habit:. Its tags are its context and its home is one tap away on any tag — so a separate "from Y" marker would just be noise.Summon from inside the stream and the block drops in directly under the line you triggered from — next to the thought that called it — then scrolls just enough to reveal it. Appending to the end would scatter the context you were assembling.
Sits with the block that summoned it; surrounding flow is untouched.
Always at the bottom — separates the new block from its context.
If a block is already on the surface, summoning it again won't add a copy — the existing instance pulses and the view scrolls to it, and the search row reads already here ↑. The river is a set, not a log.
C-c - takes it off the surfacePoint on a summoned block and C-c - dismisses it — it leaves the view but never its home, and C-/ brings it back. No dialog, just the echo area. Delete is deliberately a different chord.
C-c C-k asks before it destroysOn a native jot with no other home, dismissing would orphan it — so the same close instinct maps to delete-block, which stops for a y/n in the minibuffer. Provenance picks the verb; the destructive one is rare and visibly distinct.
C-c - (dismiss) with no prompt instead.A block is a single CodeMirror that renders its title and content differently. The summon line is that same widget with one extra completion source — the block index. So :tags:, [[pages]] and ((blocks)) aren't special cases; summon is one more. Structured tokens parse inline, exactly as in a title.
:, [[ and ((. The scope chip in ·3 is literally a parsed page# token.Accept a completion and the block paints its title row instantly from the index hit — headline, tags and address are already in hand. The body shimmers while one round trip fetches it, then fills in. The search line is already gone; it only emitted the intent.
apply() emits summon(id) and clears the line — the body fetch belongs to the new block, which owns its own loading state. A request token drops stale responses; a re-summon of an id already on the surface short-circuits to a pulse + scroll instead of inserting.