Live Preview Completion

The page editor's live preview mode edits plain Markdown while hiding the markup and drawing what it means — the way Obsidian edits. This design finished it so it can be the editor most people use, and made the mode a per-user choice. Status: implemented on main (2026-11-01); full design in the repo at docs/superpowers/specs/2026-11-01-live-preview-completion-design.md. Related: ObsidianBlockReferencesDesign.

The invariant

Both modes edit the same text, so switching is free and lossless. Nothing in live preview may change the document except an explicit user edit — not toggling, not mounting, not moving the caret, not drawing a widget. A round-trip test enforces this and was mutation-tested to confirm it goes red when a widget dispatches a change.

What was added

ConstructLive-preview rendering (off the caret's line)
GFM tables (top-level)a real table; cells use a text-only inline renderer (no HTML from page text); clicking a row puts the caret on that row's source line
[{…}]() plugins, variables, access ruleslabelled chips — ⚙ TableOfContents, a lock chip view: Admin, Editors, $username
Autolinks and bare URLsstyled as links, < > hidden
Reference links [t][r]styled as links only when a matching definition exists (CommonMark label rules)
Footnotes [^1] / [^1]: …superscript and definition chips (both readers render footnotes)
Backslash escapes, setext headings, HTML blocksescape hidden; heading styling; HTML shown as muted markup, never rendered

The line under the caret always shows its raw source, so editing a table, chip or diagram means clicking into it.

Editor mode as a preference

Lessons

Not done (deliberately)

A ProseMirror rich-text mode (the preference is a string enum to leave room for it), table-editing UI, and rendering raw HTML. Phase 2–4 Obsidian syntax (==highlight==, %% %%, inline #tags) will add its own live-preview support.