From 47ed9d267f75d630abe5ea53d77a081289d1487d Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Tue, 23 Jun 2026 15:52:05 -0500 Subject: [PATCH 1/9] spike(bd-sjb4pzx8): tiptap/ProseMirror markdown round-trip feasibility Throwaway Phase-0 spike proving qmd can round-trip through a ProseMirror document for a future rich-text block editor in q2-preview. Approach: keep all existing detection + commit machinery; replace only the EditTextarea UI. Seed the PM doc from the untransformed Pandoc AST (not markdown-it), lift opaque constructs (shortcodes, math, @crossref, [@cite], raw inline) into verbatim "chip" nodes, serialize PM -> markdown via prosemirror-markdown. Oracle: native pampa (-t json --json-source-location full), no WASM init. Result: 15/16 exact, 1 benign reformat (blockquote softwrap), 0 broken. Stock prosemirror-markdown serializer needed zero per-node overrides beyond the chip rule. tsc clean; full preview-renderer suite (473 tests) passes. Spike lives at ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/ (throwaway; quarantine/delete before non-experimental merge). Adds dev deps prosemirror-model + prosemirror-markdown. Plan + verdict: claude-notes/plans/2026-06-23-tiptap-rich-text-block-editor.md Co-Authored-By: Claude Opus 4.8 (1M context) --- ...026-06-23-tiptap-rich-text-block-editor.md | 395 ++++++++++++++++++ package-lock.json | 167 ++++++-- ts-packages/preview-renderer/package.json | 2 + .../tiptap-roundtrip-spike/README.md | 45 ++ .../tiptap-roundtrip-spike/RESULTS.md | 146 +++++++ .../tiptap-roundtrip-spike/astToPm.ts | 186 +++++++++ .../tiptap-roundtrip-spike/canonical.ts | 91 ++++ .../tiptap-roundtrip-spike/fixtures.ts | 87 ++++ .../tiptap-roundtrip-spike/pampa.ts | 86 ++++ .../tiptap-roundtrip-spike/pmToMarkdown.ts | 22 + .../tiptap-roundtrip-spike/roundtrip.test.ts | 108 +++++ .../tiptap-roundtrip-spike/schema.ts | 43 ++ 12 files changed, 1352 insertions(+), 26 deletions(-) create mode 100644 claude-notes/plans/2026-06-23-tiptap-rich-text-block-editor.md create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/README.md create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/RESULTS.md create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/astToPm.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/canonical.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/fixtures.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/pampa.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/pmToMarkdown.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/roundtrip.test.ts create mode 100644 ts-packages/preview-renderer/src/q2-preview/tiptap-roundtrip-spike/schema.ts diff --git a/claude-notes/plans/2026-06-23-tiptap-rich-text-block-editor.md b/claude-notes/plans/2026-06-23-tiptap-rich-text-block-editor.md new file mode 100644 index 000000000..31a6337f8 --- /dev/null +++ b/claude-notes/plans/2026-06-23-tiptap-rich-text-block-editor.md @@ -0,0 +1,395 @@ +# Rich-text (tiptap) block editor for q2-preview — feasibility plan + +**Date:** 2026-06-23 +**Strand:** bd-sjb4pzx8 +**Branch:** `braid/bd-sjb4pzx8-tiptap-rich-text-editor` +**Status:** Phase 0 (spike) in progress — go-ahead given 2026-06-23. +**Builds on / required reading:** `claude-notes/designs/2026-06-06-block-editing-design.md` +(the master spec for the current editor), plus the boundary-splice +(`2026-06-18/19`), track-me (`2026-06-13`), and glitch (`2026-06-15`→`18`) plans. + +--- + +## Overview + +Today, activating a block in `q2 preview` / quarto-hub replaces it with a +monospaced `