LifeLab · outline model · build reference

Implementation reference

Every specimen below is at real scale with its values stated, keyed to a section of docs/Outline Model Spec.md. This is the sheet to build from — the argument for each decision lives in the spec and in the exploration docs it cites. Palette is the warm-paper theme; the lavender theme is the same structure with the accent family swapped, so every value here is a token.

§1node kindsone struct · one field decides · same render at every depth

*conference/acl2026{todo}page — has a name · root node
**booked flightsblock — has content

San Jose (SJC) to San Diego (SAN)

**![[:urgent:]]{todo}lens — content is an expression
***Verify the Windows installermounted · lives in journal/2026-07-22
**acl2026/future-of-workpage and block — name + content

node = { parent_id, order, name?, content?, properties } page ⟺ name != null block ⟺ content != null lens ⟺ parse(content) is a lens expression kinds are NOT exclusive · a promoted block keeps its body · no badge — the name in the rail is the signal

§6.1the four channelswhat each pixel is paid to say — do not reassign

owned

gutter
solid, 2px, --sel-line
×
destroys the block
drag
move / reorder
tab
on

border-left:2px solid var(--sel-line)

referenced

gutter
dashed, 2px, --olive-soft
×
closes the window
drag
re-home to that page
tab
on — faithful mount

border-left:2px dashed var(--olive-soft)

computed

gutter
dotted, 2px, --amber @ .7
×
closes the window
drag
make it match
tab
off — flat mount

border-left:2px dotted var(--amber); opacity:.7

contract → gutter rule STYLE focus → ink CONTRAST home → right RAIL depth → INDENT only depth gets no colour. if a fill is used, it goes LIGHTER with depth (--lift on --tint), never darker. structural verbs (tab · × · add · reorder) all derive from ONE predicate: render parent == real parent?

§4.3two mount shapesthe source decides · this is where the felt rules come from

faithful — source is a page · depth preserved · verbs on

*![[acl2026/future-of-work]]
**Formalizing the landscape
***collaboration gapreal child
**NLP Technical challenges

flat — source is a predicate · forest levelled · verbs off

*![[:urgent:]]{todo}
**Verify the installerjournal/07-22 · was depth 3
**Renew renter insurancehome · was depth 1

faithful: render_parent == real_parent → tab / reorder / × destroy / add-writes-here flat: render_parent != real_parent → content edit + drag-to-rehome only; sort: owns the order invariant: deleting a lens changes ZERO blocks. never say "copy" — say mount / project / borrow.

§5the riverno origin sections · measure capped · counts are the controls

conference /

acl2026{todosort:source⋎ +}
5 results· 2 here· 3 from elsewhere· 1 subpage· no drafts g group · s sort · z unfold
*Future of work with AI agents tutorial

Using task completion time as proxy.

2 more lines

structure

** Formalizing the landscape

– list  – list

:urgent:
*booked flights

San Jose (SJC) to San Diego (SAN)

7 more lines

:travel:
*TODOprint the poster
:urgent:journal/2026-07-22
not placed1exists · findable · not shown here
acl2026/receipts+ place · open
measure70–74chrail140px

row = grid-template-columns: 1fr 140px; gap: 0 18px body indent = 23px rail shows home ONLY when block.page != this page; foreign rows also get border-left:2px solid --line, padding-left:9px body folds by default → headline + 1 line + "⌄ n more lines" · z toggles all composition line: every fragment is a filter. zero facets are a grey token, never a header. tray absent when empty. REMOVED: PAGE / SUBPAGES / LINKED headers. old behaviour survives as group:origin. default group:none.

§3promote in placen · slug pre-filled from the headline · nothing moves

the field

*Future of work with AI agents tutorial
conference/acl2026/future-of-work-with-ai-agents name · esc cancel

slug charset [a-z0-9-] · collision within parent → -2 prefix = parent path, not editable · demote = strip name references to a demoted node render VISIBLY UNRESOLVED

the ladder

rungcostgains
anonymousfreeFull-text search only. The outliner failure mode.
namedone keygo, autocomplete, [[…]], ![[…]], own backlinks.
placeda lensAll the above plus a position inside another page's outline.

The name is the path, so naming inherits context — no globally-unique titles to invent. Rank go by recency and depth-from-current-root, never alphabetically.

§4.4 · §7.1persistence grades and drop targetsa question becomes text only if it earns it

flashdies on esc
acl2026/future-of-work. keep
*Formalizing the landscape
made by
. on any reference
written
never — not file, not session
writtenone line
acl2026/future-of-work{todo}× removes
*NLP Technical challenges
made by
. again, or typing it
written
one line of markup — the whole object
framethe view
future-of-work{todo}
*Formalizing the landscape
made by
zoom on any node
written
URL / history. Nothing touches the file.
TODOprint the poster
▾ body of a referenced lensre-home the block to that page
▾ onto the filter chips :urgent:make it match — tags it, leaves it home
▾ onto a folded headerre-home without opening

in every case the change lands on THE BLOCK and the lens re-runs. the lens is never a destination. §8 content is per NODE · view state (fold / cursor / selection / scroll) is per OCCURRENCE — key off render path, never node id, never persist.

§6.4flat mode vs styled rootsame tree, two renderers, zero bytes changed

styled root — ship as default

conference

acl2026
*booked flights
*Thursday, July 2nd Tutorials

One anchor per page. The root is unmistakably not a peer of its children.

flat — ship as a mode

*conference/acl2026{filter}+ :PROPERTIES:
**booked flights
**Thursday, July 2nd Tutorials
***Morning session

Honest view of the model. Costs the anchor; cap the indent unit at 16–20px and don't let star runs past depth 4 carry meaning alone.

tokens and geometryswap the accent family for the lavender theme; structure is identical

colour

tokenwarmrole
--appf6f5eepage surface
--liftfbfaf5nested / plate — lighter, never darker
--ink-b2b2922headlines
--body4a463bblock body
--faintb4afa0rails, counts, bullets
--olive6c7138names, dates, owned gutter
--tag8a8c4dtags, provenance
--amber8a6a2flens expressions, shape terms, computed gutter
--brick9a4a32status terms, TODO

geometry

valueapplies to
70–74chresult measure — hard cap
140pxprovenance rail column
18pxgap between measure and rail
23pxbody indent under a headline
17px + 5pxmount indent (padding + margin), gutter at left:0
16–20pxflat-mode indent unit
2pxevery gutter rule, all three styles
14px / 1.5block body — do not go below

keys

nname this node (promote)
.summon flash lens · again to keep
⏎ / esczoom (re-root) / drop back
z · g · s · punfold all · group · sort · pin

Build order (spec §6.2): cap the measure → collapse empty sections → fold bodies → add the contract gutter → make the page header a lens. First four are self-contained; the fifth is the one that removes the reason for tabs. Nail view-state-per-occurrence (§8) before any of them.