Skip to content
Hussein Jarrar edited this page Sep 12, 2026 · 2 revisions

v0.9.0

11 changes · 1 Bugfix, 10 New UI Features · 55 points.

Bugfix

  • RADD-757 Every browser proof is blind to hover-revealed UI testing web · 2 pts · 7aa882cf --headless=new Chrome reports (hover: none), (any-hover: none) and (pointer: none) — at baseline, before any emulation, and Emulation.setEmulatedMedia with hover/pointer features does not change it. Measured directly:

New UI Feature

  • RADD-755 Remove @milkdown/crepe web · 2 pts · 0bce7bc2 The gate. Delete the dependency, delete the last three imports, and prove nothing regressed.
  • RADD-754 Own the remaining chrome and the editor stylesheet web · 5 pts · a2004450 Why this exists. The small pieces that are individually trivial and collectively block removal: placeholder, link tooltip, image-block upload UI, virtual cursor, list-item rendering. Plus the theme: we import @milkdown/crepe/theme/common/style.css and classic-dark.css, and then rich-editor.css reads…
  • RADD-753 Own the AI selection surface web · 8 pts · e972f850 Why this exists. Spec 103's editor AI streams through Crepe's AI feature: its selection toolbar is where the entry point lives, and RunAI has to be dispatched BY NAME because importing the subpath binds a second, dead copy of the feature module. That workaround is a symptom — we do not control the surface we depend…
  • RADD-751 Resize images and attachments, in pages and comments web · 5 pts · ce6dd9dc An inserted image renders at whatever size it happens to be. There is no way to make a screenshot smaller, in either a page or a comment.
  • RADD-750 Own the table chrome, with a grid picker web · 8 pts · 15d838dc Crepe's table editing is unpleasant. Inserting should be TipTap's shape: a small grid you drag across to choose rows and columns, rather than a fixed default you then have to fix.
  • RADD-752 Own the code block: CodeMirror wiring, language picker, copy web · 5 pts · 9a5e7911 Why this exists. Crepe supplies the code-block node view — CodeMirror, the language picker and the copy button — and it is on in both the editor and the read-only viewer. It goes when Crepe goes, so we own it before then.
  • RADD-749 Own the toolbar web · 5 pts · eb97f1dd We already fight Crepe's top bar: we retinted it 18px/8:1 with an accent pill because it shipped no .active styling at all, we inject the AI button through buildTopBar, and its items act on mousedown rather than click — which silently broke a render proof and would break any keyboard-driven affordance.
  • RADD-748 The insert menu shows icons and follows the registry web · 2 pts · f7596666 The picker is a plain text dropdown. PageExtensionSpec.icon already exists, already holds a lucide name, and is already served — the picker just ignores it.
  • RADD-747 A config dialog for every extension, generated from its schema web · 5 pts · 3cf68397 Inserting a callout gives you {"kind": "info"} and nothing else. That it also accepts title and text is invisible — you found out by guessing. Every extension has this problem, and every plugin-contributed extension will inherit it.
  • RADD-746 Extension fences become a real editor node, not a code block web · 8 pts · a607feea In edit mode an extension is an opaque ```radd:callout fence full of JSON. You cannot see what it will look like until you save, and you cannot change it without editing raw parameters by hand.

Changes from v0.8.1 to v0.9.0.


Mirrored from project.radd-hq.com on 2026-09-12. Documentation is written there; this copy is regenerated by scripts/publish_wiki.py and hand edits do not survive it.

Clone this wiki locally