Using task completion time as proxy.
⌄ 2 more lines
structure
** Formalizing the landscape
– list – list
LifeLab · outline model · build 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.
San Jose (SJC) to San Diego (SAN)
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
--sel-lineborder-left:2px solid var(--sel-line)
--olive-softborder-left:2px dashed var(--olive-soft)
--amber @ .7border-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?
faithful — source is a page · depth preserved · verbs on
flat — source is a predicate · forest levelled · verbs off
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.
conference /
Using task completion time as proxy.
⌄ 2 more lines
structure
** Formalizing the landscape
– list – list
San Jose (SJC) to San Diego (SAN)
⌄ 7 more lines
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.
the field
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
| rung | cost | gains |
|---|---|---|
| anonymous | free | Full-text search only. The outliner failure mode. |
| named | one key | go, autocomplete, [[…]], ![[…]], own backlinks. |
| placed | a lens | All 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.
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.
styled root — ship as default
conference
One anchor per page. The root is unmistakably not a peer of its children.
flat — ship as a mode
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.
colour
| token | warm | role |
|---|---|---|
| --app | f6f5ee | page surface |
| --lift | fbfaf5 | nested / plate — lighter, never darker |
| --ink-b | 2b2922 | headlines |
| --body | 4a463b | block body |
| --faint | b4afa0 | rails, counts, bullets |
| --olive | 6c7138 | names, dates, owned gutter |
| --tag | 8a8c4d | tags, provenance |
| --amber | 8a6a2f | lens expressions, shape terms, computed gutter |
| --brick | 9a4a32 | status terms, TODO |
geometry
| value | applies to |
|---|---|
| 70–74ch | result measure — hard cap |
| 140px | provenance rail column |
| 18px | gap between measure and rail |
| 23px | body indent under a headline |
| 17px + 5px | mount indent (padding + margin), gutter at left:0 |
| 16–20px | flat-mode indent unit |
| 2px | every gutter rule, all three styles |
| 14px / 1.5 | block body — do not go below |
keys
| n | name this node (promote) |
| . | summon flash lens · again to keep |
| ⏎ / esc | zoom (re-root) / drop back |
| z · g · s · p | unfold 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.