# Develop Changelog ## 2026-06-12 — Visual editor: full-width editing column ### Changed - Made the Visual (WYSIWYG) editing column fill the full editor pane width: dropped the max-width cap entirely (now `width: 100%`, margin 0, with 3rem horizontal padding) — 70rem was still too narrow. `static/editor.css` (`.visual-pane .ProseMirror`). CSS only; no bundle rebuild. ## 2026-06-12 — Visual editor: wider editing column ### Changed - Widened the Visual (WYSIWYG) editing column from the reader's 42rem reading width to 70rem with more horizontal padding — the reading width was comfortable to read but too narrow to edit in. `static/editor.css` (`.visual-pane .ProseMirror`). CSS only; no bundle rebuild. ## 2026-06-12 — Visual editor: broaden schema & fidelity check against real library content ### Changed - Tested the round-trip safety gate against every chapter of the actual DB library and broadened the visual editor so Visual mode is available for the overwhelming majority of real content instead of being refused on common, lossless markup. Across the sampled DB books (~185 chapters) Visual mode now opens for 100% of chapters; only genuinely lossy or malformed markup is still blocked. - **Schema broadened** to cover conventions that real chapters actually use (all now round-trip losslessly): the **block** variants of subheading and chat (`
`, `
` — previously only the inline `` marks were modelled), **block indent** (`
`), all **heading levels** h1–h6 (was h2/h3 only; the Book Info page uses `

`, and some books use `

` separators), plain **`
`** rules (re-enabled alongside the `
` scene break), **links** (``, with rel/target injection disabled so links stay byte-identical), and preservation of arbitrary **`class`** attributes on paragraphs/headings (e.g. the generated `

`). - **Round-trip comparison made tolerant of the editor's lossless normalisations**, so they no longer read as "unsafe": inline formatting is now compared as an unordered **mark set** per text run (so `x` and `x` are equal, empty marks like `` are ignored, and adjacent identical marks merge), and loose inline content sitting directly under `` is compared as if wrapped in a paragraph (matching how the editor wraps it). Genuine loss is still blocked — verified by guardrail tests that unknown tags (``, ``), standalone ``, unknown `
` wrappers, and whole-xhtml EPUB documents all remain "unsafe". - Files: `containers/novela/editor-src/extensions.js` (added `SubheadingBlock`, `ChatBlock`, `IndentBlock`, `ClassPreserve`); `containers/novela/editor-src/index.js` (extension list, heading levels, Link, mark-set canonicaliser with body-level loose-inline wrapping, `roundtripDebug` diagnostic export); `containers/novela/editor-src/package.json` (+`@tiptap/extension-link`); rebuilt `static/editor-bundle.js`; new dev harnesses `editor-src/{diagnose.mjs,test-commands.mjs}` and expanded `editor-src/test.mjs`. No backend or `editor.js`/`editor.html`/`editor.css` changes in this round. ## 2026-06-12 — Chapter editor: optional visual (WYSIWYG) mode alongside Monaco ### Added - The chapter editor now has an optional **Visual (WYSIWYG) mode** next to the existing Monaco HTML-source editor, ported from the Tiptap editor built in novela-ng and adapted to Novela's own markup conventions. A **Visual / HTML** toggle button in the toolbar switches between the two; Monaco remains the default and the backing source of truth. - **Tiptap is bundled, not CDN-loaded.** A new `containers/novela/editor-src/` npm project bundles Tiptap + the custom extensions into a single committed file, `static/editor-bundle.js` (`window.NovelaVisual`), loaded by the editor page with a plain `