Call w/ Dana 8/12 — she's worried about the Q3 churn number and honestly so am I. 61% CM is real but it's flattered by the infra renegotiation, which is one-time. Normalized we're nearer 54%. Don't lead with 61.
What a .flave holds
the source-material trinity
Clearance
Content, data, and assets each carry a visibility level — private, team, lp, public. It is monotonic and machine-checkable, so "nothing above public appears in the public artifact" is a claim a scanner settles rather than a promise someone keeps.
specifiedRegisters
Redaction only subtracts, which cannot express "concise and punchy for the public." So a block carries variants — verbatim, full, brief — and an audience is a point on both axes. Derived variants go stale visibly rather than drifting silently.
specifiedSyntax triggers
Extensible authoring was always a good idea and always developer-only, because a new syntax meant writing a remark plugin. That cost is now a thirty-second agent task. Define a trigger, watch it render as you type.
v0 scopeThe bundle
A .flave is a folder — manifest, content, data, assets — that macOS draws as a single file. No proprietary container, no parser required. An agent opening one is already at home; a zip is only the shipping crate.
specifiedFigures
One dataset, many displays. A figure is a query plus a spec plus a clearance plus captions per register — so a public chart over private rows materializes only the aggregates it actually draws, never the source table.
specifiedProvenance
Six months later, someone asks where the number came from. The row is still in data/, its source URL and fetch date still in _sources.yaml, and the asset still carries its licence. The workings travel with the document.
specified
Where this actually is
build order
The spec runs to about twenty-four thousand words. Most of it is designed and parked — a section being detailed there is evidence a question was thought through, not that the thing is scheduled.
The editor
Markdown in one pane, rendered output beside it, and the ability to define your own syntax triggers. CodeMirror, lfm for parsing, a Svelte renderer. No Tauri, no frames, no embedded agent — you run Claude Code beside it.
Clearance and audiences
Block-level clearance, named audiences, publish per audience, and the scan that proves nothing leaked. Small once v0 exists — a remark plugin and an output filter over a renderer that already works.
Designed, parked
The layout and frame system, deck and paged surfaces, the theme registry, Jujutsu integration, DuckDB and sql fences, figures, HTMX. All specified in full. None scheduled.
Latest
Milestone: flave has docs — getting started on Linux, Ubuntu, and Nix flakes
It worked on one NixOS laptop. Now there is a page that takes a collaborator from a clean Ubuntu install to the desktop app open on their screen, a direnv hook that makes the flake automatic, and docs rendered through LFM rather than around it.
flave is a desktop app now, and the theme is a file you can open
It opens a folder. You see your files. You click themes/lossless.css, change a value, and the document you are reading restyles under your hands — then it is still there tomorrow, because it lives in the workspace and not inside any one document. Tauri on NixOS, in about an hour.
The demo document got worse, so we made it the test
A demo that shows three features tells you three things work. The one that shipped yesterday had quietly shrunk to a welcome note — and building a real one immediately exposed four features the renderer had been silently dropping, including citations, which vanished entirely.