Playground / Category F
← All scenariosF1 · Notion-style block editor
A workspace with a sidebar of pages, a block-based contenteditable doc, slash commands, @-mentions, and drag-handle reordering.
Live fixture · interact with it while the recorder is runningOpen in new tab ↗
Try this
- Click into the page title and rename the page.
- Click into an empty block, type `/` to open the slash menu, pick "Heading 1".
- Type the heading text. Press Cmd-Enter (or Ctrl-Enter) to insert a new block below.
- In the new block, type some text including `@al` to open the mention picker, pick Alex Chen.
- Click the toggle block "Engineering tasks" — child blocks lazy-mount.
- Hover over any block to reveal its drag handle on the left. Drag it to a new position.
- Drag any image file onto the cover area at the top of the page.
- Click one of the To-do checkboxes — done state toggles.
- Click a different sub-page in the sidebar — URL changes to `/page/<uuid>`.
- Copy text from anywhere and paste it into a block (Cmd-V).
Why this is hard
This is the canonical "every block is its own contenteditable" model — the recorder must coalesce typing into per-block change steps (D4), capture slash-menu and @-mention selections as combobox interactions (D6), follow drag-handle reordering as drag steps (D1), survive each block getting a fresh `block-${hash}` class on every render (A2), and tiebreak between the three identical-looking To-do rows by fingerprintIndex (A3).
On top of all that, the page title carries a `data-i18n-key` (A4), sub-pages switch via pushState without a real navigation (B1), the toggle block lazy-mounts its children 200ms after click (B3), and the URL is `/page/<uuid>` so the parameterizer should template the ID (E2).
Difficulty points covered
Each tag below links to the isolated demo for that single difficulty point — useful if the composite breaks somewhere and you want to bisect.
Replay log · claude code · stdoutsimulated · not live data
▸ Reading ~/.claude/skills/notion-rename-and-publish/SKILL.md ✓ 9 steps · 3 params · 1 precondition (workspace cookie) ▸ Step 1/9 · rename page title ({{title}}) ✓ matched [contenteditable] via fingerprintIndex ▸ Step 2/9 · open slash menu, pick "Heading 1" ✓ comboboxContext.optionText="Heading 1" (filtered list) ▸ Step 3/9 · type heading + Cmd-Enter ✓ chord captured · new block inserted ▸ Step 4/9 · @-mention "Alex Chen" ✓ debounced typeahead resolved by optionText ▸ Step 5/9 · toggle "Engineering tasks" (lazy 200ms) ✓ elementVisible polled · child blocks mounted ▸ Step 6/9 · drag block — reordered ✓ dragstart → drop · dataTransfer.types=["text/html"] ▸ Step 7/9 · click sub-page (pushState → /page/{{uuid}}) ✓ E2 parameter lifted · URL templated ▸ Step 8/9 · paste from clipboard ✓ navigator.clipboard.readText() restored ▸ Step 9/9 · save ✓ done in 6.4s · 0 retries