LifeLab · lens

Lens — look & feel

Visual vocabulary for the lens system, distilled from the six exploration mocks. Companion to Lens Spec.md. One principle renders everything: text is the truth; chips, pills, badges, and menus are its costume — every affordance below is a macro over a text edit.

1 · anatomyone line, two faces — chip ↔ token, always 1:1

mcp page · referenced todo× when:-3w..Jun 21 →× linked:× sort:updated× ⋎ +
▲ rendered (cursor elsewhere) · ▼ source (cursor inside) ![[mcp]]{todo when:-3w.. linked: sort:updated}

Color = term kind, everywhere (chips, raw text, completion, reference docs): status brick · tags/homes olive-tag · dates olive · fields+shape amber · scopes slate. Date chips always carry their resolved range. Terms are text-like; only state pills (unsaved/pinned) and membership badges keep boxes — they are chrome, not language. Rendered terms sit one dotted underline away from the raw line below them.

2 · term chips — text-likerest = colored text · tint + × appear under the pointer · × deletes characters

states — the dotted underline is the only rest-state affordance; boxes exist only on hover
when:this-weekJul 6–12× rest when:this-weekJul 6–12× hover weight>80 ignored (brick dots)
status — bare closed vocab: task · todo · done · note (+ negations)
task× todo× done× note× -todo×
tags — self-delimiting; exclusion wears strikethrough
:project/lifelab:× -:someday:×
dates — words · arithmetic · anchors; resolved range always visible
when:this-weekJul 6–12× when:-3w..-1wJun 21–Jul 5× remind:overdue..Jul 11 + todo× when:2026-07whole month×
fields & shape — amber family; untyped comparison gets the dotted treatment
calories:*× author:raskin× calories>500× weight>80 render:table× limit:5×
scopes — slate; a scope starts a run until the next scope
page:× linked:× -subpages× depth:1×

3 · membership badges & state pillsthe badge says what × and drag will mean

page · referenced union · 2 pages tag · computed lens referenced · filtered

referenced = window onto a place (drag moves, × closes window) · computed = predicate result (drag marks, add is born-matching) · filtered = referenced with rows hidden, never removed.

lens state pills — the ladder: ephemeral → pinned → named
◎ unsaved · 3 of 9 ◎ pinned to page ◎ lens/lifelab-now

4 · page-header lensreplaces the filter line · pills activate into chips · / completes

before — passive counts
[all] · [page]· :project/lifelab:4 :mcp:3 :nested-pages:2
after — one pill clicked, one term typed; unsaved pill appears
[all] · [page]· :project/lifelab:× todo× · :mcp:3 ◎ unsaved · 3 of 9

Stacking: header ∧ region (intersection). [all]/[page] stays the source toggle (≡ depth:). State lives with day/week/month view state until pinned (lens: todo property) or named.

5 · region chromeleft rule + header; sections report shown-of-total; hidden rows can say why

referenced + lens — page order, write-home, dimmed row names the culprit
[-]mcp page · referenced todo× 2 of 3 ×
*TODOexpose query_open over mcp:mcp:Jul 8
*sketch auth handshake noteshidden by lens: todo
*TODOwrite mcp tool for lens summonJul 9
+ Add to mcp… born matching: TODO applied
computed (tag) — provenance groups, born-matching add, nested tint on deeper homes
[-]:project/lifelab: tag · computed 3 blocks · 2 pages ×
journal/2026-07-112
*TODOwire sql views for tags + links
*DONEdecide region badge copy
project/lifelab1
*TODOCRDT merge test on lens property▤ sync · nested
+ New block → journal/today · :project/lifelab: applied

nested tint = row lives in a nested/subpage — survives interleaved sorts, all render modes

6 · menusone completion engine: picker · funnel · raw {} · header line

picker — names only, kind badges, counts from index
![[lifelab
pages
project/lifelabpage31 blocks
tags
:project/lifelab:tag23 · 6 pages
combined · lenses
lives-there or taggedunion42
lens/lifelab-nowlens7
date completion — vocabulary, resolved ranges, live counts
when:-3w
arithmetic · d w m y · .. ranges
-3w..Jun 21 → now6
-3w..-1wJun 21 – Jul 53
words
this-weekJul 6 – 124
next-2wJul 13 – 262
save ladder — on the unsaved pill
keep todo when:-3w.. ?
just this visitview state · default
pin to this pageproperty: lens: todo when:-3w..
name it…lens/ · summonable
chip swap menu — last row is always the bridge to text
swap when:-3w..Jun 21 → now
this-weekJul 6–12 · 2
-3w..Jun 21 → now · 4
remove term= ×
edit as text…

7 · echo areaerrors are words + a fix — never a stack trace, never a broken region

weight>80 ignored weight is untyped, so > would guess. promote weight → number 41 of 44 values parse
DONEfix transclusion depth clamp → journal/2026-07-08 no longer matches — kept until rerun
savedlens/lifelab-now — the line is the lens; copy it to share. ![[:project/lifelab:]]{todo when:-3w..}