For AI agents: the complete documentation index is available at https://a3s-lab.github.io/Office/docs/0.299.0/en/llms.txt, the full documentation bundle is available at https://a3s-lab.github.io/Office/docs/0.299.0/en/llms-full.txt, and this page is available as Markdown at https://a3s-lab.github.io/Office/docs/0.299.0/en/changelog.md.

What's new

See the product outcome of each recent A3S Office release before opening its implementation details. This curated view complements the exhaustive repository changelog and follows the active documentation version.

History available in 0.299.0

Later releases are intentionally hidden in this frozen documentation view.

  1. v0.298.0
    • Improved
    • Spreadsheet

    External and structured refs guide agents in-process

    External-workbook and unsupported ListObject structured references fail closed with recovery suggestions, and MCP recalculate schema states the same contract.

    • External workbook reads stay closedFormulas such as '[Book.xlsx]Sheet1'!A1 suggest rewriting to in-workbook ranges or values and recalculating in-process.
    • Unsupported structured refs explain recoveryMissing table rows or out-of-table [@Column] forms point agents at supported ListObject shapes or sheet A1 ranges.
    • MCP schema carries the contractrecalculate-spreadsheet-formulas documents external and structured-reference recovery for hosts that cannot read Skill references.
  2. v0.297.0
    • Improved
    • Spreadsheet

    Qualified formula calls stay on bare names

    Sheet- or workbook-qualified function calls fail closed with a bare-name suggestion, and MCP recalculate schema states the same contract.

    • Agent-directed qualified-function errorsCalls such as Sheet1!SUM(...) suggest bare closed-registry names and in-process recalculation instead of shelling out.
    • Bare names only on recalculateNative calculation rejects sheet or workbook qualifiers on function calls so agents rewrite to bare SUM, IF, and peers.
    • MCP schema carries the contractrecalculate-spreadsheet-formulas documents that function calls must be bare names for hosts that cannot read Skill references.
  3. v0.296.0
    • Fixed
    • Spreadsheet

    Collab formula writes require cached values

    Collaboration Spreadsheet cells that write f without v/m fail closed, and MCP schema points agents at cached values instead of recalculate-spreadsheet-formulas.

    • Fail closed without cached v/mLive replica nextCell writes that include f must also supply cached v and m, or the mutation is rejected.
    • Agent-directed collab formula suggestionThe error suggests writing explicit cached v/m with f on spreadsheet-set-cell or spreadsheet-batch-cells.
    • MCP schema carries the contractspreadsheet-set-cell, spreadsheet-batch-cells, and office_collaboration_mutate state that collaboration replicas do not recalculate formulas.
  4. v0.295.0
    • Improved
    • Spreadsheet

    Conditional formulas stay on the native agent path

    *IF wildcard failures suggest exact criteria, Skill separates native verify from collab writes, and MCP named ranges resolve on recalculate.

    • Agent-directed *IF criteria errorsSUMIF, COUNTIF, and AVERAGEIF wildcard or shape failures suggest exact or numeric criteria and stay in-process instead of shelling out.
    • Native verify vs collaboration writesSkill guidance separates native OOXML recalculate and formulaCached checks from live collaboration spreadsheet cell writes.
    • Named ranges resolve on recalculateMCP named-range mutations state that referenced names resolve only during recalculate-spreadsheet-formulas in the same batch.
  5. v0.294.0
    • Improved
    • Spreadsheet

    Unsupported formulas stay on the native agent path

    Unsupported functions suggest the closed registry, MCP import marks inferred formulas as stored-only, and Skill verification names formulaCached for use workers.

    • Agent-directed unsupported-function errorsRecalculation failures for unknown functions suggest staying on the closed registry and recalculating in-process instead of shelling out.
    • Import formulas stay stored-onlyMCP import-spreadsheet-delimited states that inferred formulas need recalculate-spreadsheet-formulas in the same batch.
    • Skill verify loop for use workersSKILL.md names formula_not_evaluated and formulaCached so hosts that cannot read Skill references still close the write → recalculate loop.
  6. v0.293.0
    • Fixed
    • Spreadsheet

    Browser TRUE() and FALSE() fail closed

    Browser TRUE() and FALSE() now match the closed native registry. Boolean literals without parentheses still parse.

    • No browser-only functionsTRUE() and FALSE() fail closed instead of returning booleans only in the browser kernel.
    • Literals still workIF(TRUE,1,0) keeps working because TRUE without parentheses is a boolean literal.
    • Same agent pathNative CLI and MCP recalculation already rejected these functions. The browser kernel matches that contract.
  7. v0.292.0
    • Improved
    • Spreadsheet

    Browser ROW and COLUMN accept one cell

    Browser ROW and COLUMN match the native registry for a single cell. Ranges still fail closed because the browser kernel does not spill.

    • Current cell stays zero-argROW() and COLUMN() still return the current cell 1-based row or column.
    • Optional single cellROW(C4) is 4 and COLUMN($B$2) is 2, including absolute references.
    • Ranges fail closedROW(A1:B2) is rejected. Agents should not expect a spilled array from the browser kernel.
  8. v0.291.0
    • New
    • Spreadsheet

    Average numeric cells with AVERAGEIF

    AVERAGEIF averages the criteria range, or the same-shaped block anchored at the average range top-left. No numeric match is #DIV/0!. Wildcards fail closed.

    • Top-left alignmentAVERAGEIF(A1:A3,"apple",C1) reads C1:C3 and is 10, not only C1.
    • Empty average is #DIV/0!Text and blanks are ignored. Zero numeric matches is division by zero, not a partial average.
    • Wildcards fail closedUnescaped * and ? are rejected in both the native engine and the browser kernel.
  9. v0.290.0
    • New
    • Spreadsheet

    Count cells with COUNTIF

    COUNTIF counts matches in one rectangle. It uses the same comparison and fail-closed wildcard rules as SUMIF.

    • Same criteria contractComparisons, blanks, and case-insensitive text match SUMIF. There is no second range to realign.
    • Counts matchesCOUNTIF(A1:A3,"apple") counts apple and APPLE. COUNTIF(B1:B3,">2") counts only numbers above 2.
    • Wildcards fail closedUnescaped * and ? are rejected in both the native engine and the browser kernel.
  10. v0.289.0
    • New
    • Spreadsheet

    Calculate SUMIF from the criteria range shape

    SUMIF expands the sum window from the sum range top-left to match the criteria range. Wildcard criteria fail closed.

    • Top-left alignmentSUMIF(A1:A3,"apple",C1) reads C1:C3, not only C1.
    • Wildcards fail closedUnescaped * and ? criteria are rejected instead of returning a wrong total.
    • Both calculation enginesNative recalculation and the browser kernel use the same window. Omitting the sum range sums the criteria range.
  11. v0.288.0
    • New
    • Shared UX
    • Writer
    • Documentation

    Bind the live Document editor without clipping menus

    Hosts receive the mounted editor, keep their extensions, and floating menus escape a clipped host without leaving the office theme.

    • Live editor hookonEditorReady receives the mounted TipTap editor. defaultCommentsOpen opens the comment pane.
    • Menus keep the office themeRibbon and selection popovers escape a clipped host onto a theme-preserving root. Dialogs stay inside the office root.
    • Presence without a sessionA host may project presence without binding the CRDT session. Kind or artifact mismatches still fail closed.
  12. v0.287.0
    • New
    • Spreadsheet
    • Presentation
    • Documentation

    Locate Spreadsheet cells and Presentation text before editing

    collab find names the Spreadsheet cell for spreadsheet-set-cell and numbers Presentation matches for presentation-replace-text.

    • One hit per Spreadsheet cellHits return sheetId, row, and column. There is no spreadsheet text-replace mutation.
    • Replace one Presentation spanPass matchCount as expectedMatches and optional occurrence. presentation-replace-text writes only the scene-element text field.
    • Geometry stays a separate editpresentation-update-element still owns geometry and fields other than the matched text.
  13. v0.286.0
    • New
    • Markdown
    • Documentation

    Locate live Markdown text before replacing it

    collab find and office_collaboration_find work on Markdown replicas with the same walk as markdown-replace-text.

    • Same contract as DocumentPass matchCount as expectedMatches and optional occurrence to change one match.
    • UTF-16 source offsetsHits report indexUtf16 on the canonical Markdown Y.Text source.
    • Keep splice for known rangesmarkdown-splice remains for explicit UTF-16 ranges; markdown-replace still rewrites the whole source.
  14. v0.285.0
    • New
    • Writer
    • Documentation

    Locate live Writer text before replacing it

    collab find and office_collaboration_find list 1-based matches in the same walk as document-replace-text.

    • Same walk as replacePass matchCount as expectedMatches and optional occurrence to change one match.
    • Stable paragraph hintsHits include paragraphId, textId, and indexUtf16 when available.
    • No full projection scanAgents locate text without decoding the whole collaboration projection first.
  15. v0.284.0
    • New
    • Writer
    • Spreadsheet
    • Presentation
    • Documentation

    Locate one text match before replacing it

    File editors and live Writer can change one numbered match. The R0 corpus also closes complex first-page and even-page footer NUMPAGES.

    • Same walk, one occurrencefind and office_find number matches. --occurrence and replace-text.occurrence change only that match.
    • Fail closed before writeA missing occurrence or a shared string used by multiple selected cells does not write.
    • Footer NUMPAGES matrixComplex fldChar first-page and even-page footer NUMPAGES join the permanent no-clobber gate.
  16. v0.283.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers complex first-page header PAGE fields

    The permanent no-clobber gate adds complex (fldChar) first-page header PAGE live-field fixtures for Word-authored title-page chrome.

    • Complex first-page PAGE identityTitle-page header PAGE fields authored as fldChar stay live across import → export → reopen.
    • Continuing header staysDefault header text round-trips beside the complex first-page PAGE variant.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  17. v0.282.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers even-page footer NUMPAGES fields

    The permanent no-clobber gate adds even-page footer NUMPAGES live-field fixtures for Traditional Office facing-page page-of-total chrome.

    • Even-page NUMPAGES identityFacing-page footer NUMPAGES fields stay live across import → export → reopen.
    • Odd footer staysOdd/default footer text round-trips beside the even-page NUMPAGES variant.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  18. v0.281.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers first-page footer NUMPAGES fields

    The permanent no-clobber gate adds first-page footer NUMPAGES live-field fixtures for Traditional Office title-page page-of-total chrome.

    • First-page NUMPAGES identityTitle-page footer NUMPAGES fields stay live across import → export → reopen.
    • Continuing footer staysDefault footer text round-trips beside the first-page NUMPAGES variant.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  19. v0.280.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers even-page header PAGE fields

    The permanent no-clobber gate adds even-page header PAGE live-field fixtures for Traditional Office facing-page page numbers.

    • Even-page PAGE identityFacing-page header PAGE fields stay live across import → export → reopen.
    • Odd chrome staysOdd/default header text round-trips beside the even-page PAGE variant.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  20. v0.279.0
    • Improved
    • Writer
    • Spreadsheet
    • Documentation

    R0 corpus covers first-page header PAGE fields

    The permanent no-clobber gate adds first-page header PAGE live-field fixtures for Traditional Office title-page page numbers, and the spreadsheet in-cell editor matches canvas glyphs.

    • First-page PAGE identityTitle-page header PAGE fields stay live across import → export → reopen.
    • In-cell font matchSpreadsheet in-cell editor font stack matches Fortune canvas glyphs while editing.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  21. v0.278.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers even-page header and footer text

    The permanent no-clobber gate adds distinct even-page vs default header and footer text fixtures for Traditional Office facing-page chrome.

    • Even-page chrome identityEven-page header and footer text stay distinct from default chrome across import → export → reopen.
    • Default chrome staysOdd/default header and footer text round-trip beside the even-page variants.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  22. v0.277.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers first-page header and footer text

    The permanent no-clobber gate adds distinct first-page vs default header and footer text fixtures for Traditional Office title-page chrome.

    • First-page chrome identityTitle-page header and footer text stay distinct from default chrome across import → export → reopen.
    • Default chrome staysContinuing header and footer text round-trip beside the first-page variants.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  23. v0.276.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers complex header SECTION fields

    The permanent no-clobber gate adds complex fldChar header SECTION and footer SECTIONPAGES fixtures for Word-authored multi-section report chrome.

    • Complex SECTION chromeComplex header SECTION keeps kind and instruction across import → export → reopen.
    • Complex SECTIONPAGES chromeComplex footer SECTIONPAGES round-trips with the same page-chrome field spans.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  24. v0.275.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers header SECTION and SECTIONPAGES

    The permanent no-clobber gate adds header SECTION and footer SECTIONPAGES live-field fixtures for multi-section report chrome.

    • Header SECTION identityHeader SECTION keeps kind and instruction across import → export → reopen.
    • Footer SECTIONPAGES identityFooter SECTIONPAGES live fields round-trip with the same page-chrome field spans.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  25. v0.274.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers complex header DATE and TIME

    The permanent no-clobber gate adds complex fldChar header DATE (format switch) and footer TIME fixtures for Word-authored report chrome.

    • Complex DATE chromeComplex header DATE keeps kind and \@ instruction across import → export → reopen.
    • Complex TIME chromeComplex footer TIME round-trips with the same page-chrome field spans.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  26. v0.273.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers header DATE and footer TIME

    The permanent no-clobber gate adds header DATE (format switch) and footer TIME live-field fixtures for report print/date chrome.

    • Header DATE identityFormatted header DATE keeps kind and \@ instruction across import → export → reopen.
    • Footer TIME identityFooter TIME live fields round-trip with the same page-chrome field spans.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  27. v0.272.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers complex page-chrome PAGE fields

    Page chrome keeps complex fldChar PAGE and NUMPAGES fields, and the permanent no-clobber gate adds a complex header/footer fixture.

    • Complex page-chrome fieldsSupported fldChar PAGE/NUMPAGES in headers and footers import as editable field spans.
    • Round-trip identityComplex header PAGE and footer NUMPAGES keep kind and instruction across import → export → reopen.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  28. v0.271.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers header/footer PAGE fields

    Page chrome keeps live PAGE and NUMPAGES fields, and the permanent no-clobber gate adds header/footer fixtures.

    • Live page-chrome fieldsSupported fldSimple PAGE/NUMPAGES in headers and footers import as editable field spans.
    • Round-trip identityHeader PAGE and footer NUMPAGES keep kind and instruction across import → export → reopen.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  29. v0.270.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers rich-text content controls

    The permanent no-clobber gate adds representative fixtures for rich-text SDT alias/tag/type/text identity.

    • Rich-text SDT identityRich-text content controls keep alias, tag, type, and text across import → export → reopen.
    • Paired with plain-text SDTsComplements the plain-text content-control fixture already gated on main.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  30. v0.269.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers table SEQ captions

    The permanent no-clobber gate adds representative fixtures for table SEQ caption kind/id identity.

    • Table caption identityTable SEQ captions keep kind and a stable caption id across import → export → reopen.
    • Paired with figure captionsComplements the figure SEQ and caption REF fixtures already gated on main.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  31. v0.268.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers figure captions and caption REF

    The permanent no-clobber gate adds representative fixtures for figure SEQ caption kind/id and caption REF target identity.

    • Figure caption identityFigure SEQ captions keep kind and a stable caption id across import → export → reopen.
    • Caption REF targetsCaption REF fields keep the same target identity as the referenced caption.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  32. v0.267.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers TIME and DATE format fields

    The permanent no-clobber gate adds representative fixtures for body TIME and DATE \@ format-switch field kind/instruction identity.

    • TIME identityBody TIME fields keep kind and instruction across import → export → reopen.
    • DATE format switchDATE instructions with a bounded \@ format switch keep the same contract.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  33. v0.266.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers NUMCHARS and DATE fields

    The permanent no-clobber gate adds representative fixtures for body NUMCHARS and bare DATE field kind/instruction identity.

    • NUMCHARS identityBody NUMCHARS fields keep kind and instruction across import → export → reopen.
    • DATE identityBare DATE fields keep the same kind/instruction contract.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  34. v0.265.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers SECTIONPAGES and NUMWORDS fields

    The permanent no-clobber gate adds representative fixtures for body SECTIONPAGES and NUMWORDS field kind/instruction identity.

    • SECTIONPAGES identityBody SECTIONPAGES fields keep kind and instruction across import → export → reopen.
    • NUMWORDS identityBody NUMWORDS fields keep the same kind/instruction contract.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  35. v0.264.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers NUMPAGES and SECTION fields

    The permanent no-clobber gate adds representative fixtures for body NUMPAGES and SECTION field kind/instruction identity.

    • NUMPAGES identityBody NUMPAGES fields keep kind and instruction across import → export → reopen.
    • SECTION identityBody SECTION fields keep the same kind/instruction contract.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  36. v0.263.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers TOC field options and entries

    The permanent no-clobber gate adds representative fixtures for TOC min/max level, hyperlink options, and cached entry title identity.

    • TOC level optionsSDT-wrapped TOC fields keep min/max outline levels across import → export → reopen.
    • Cached entry titlesCached TOC entry titles and hyperlink options survive the same round trip.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  37. v0.262.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers XE index entries and INDEX fields

    The permanent no-clobber gate adds representative fixtures for XE main/sub-entry identity and INDEX field column identity.

    • XE entry identityNative XE markers keep main and sub-entry text across import → export → reopen.
    • INDEX column identitySDT-wrapped INDEX fields keep column options through the same round trip.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  38. v0.261.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers PAGE and bookmark-backed PAGEREF fields

    The permanent no-clobber gate adds representative fixtures for body PAGE field kind/instruction identity and bookmark-backed PAGEREF kind/instruction/target identity.

    • PAGE field identityBody PAGE fields keep kind and instruction across import → export → reopen.
    • PAGEREF target identityBookmark-backed PAGEREF fields keep instruction and target name through the same round trip.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  39. v0.260.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers endnotes and text content controls

    The permanent no-clobber gate adds representative fixtures for endnote reference/body identity and inline text content-control alias/tag/text.

    • Endnote identityEndnote references keep their note body text across import → export → reopen.
    • Text content controlsInline text control alias, tag, and visible text survive the same round-trip contract.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  40. v0.259.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers headers, footers, and footnotes

    The permanent no-clobber gate adds representative fixtures for default header/footer text and footnote reference/body identity.

    • Header and footer chromeDefault section header and footer text survive import → export → reopen.
    • Footnote identityFootnote references keep their note body text across the same round trip.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  41. v0.258.0
    • Improved
    • Writer
    • Documentation

    R0 corpus covers internal links and review comments

    The permanent no-clobber gate adds representative fixtures for bookmark-anchor hyperlinks and review comment author/text identity.

    • Internal navigation linksHyperlinks that target bookmarks keep anchor identity across import → export → reopen.
    • Review comment identityComment authors and text survive the same round-trip contract as track changes.
    • Same gate commandRun bun run test:corpus:r0. No art-border breadth growth.
  42. v0.257.0
    • New
    • Writer
    • Documentation

    R0 no-clobber corpus becomes a permanent gate

    Representative DOCX fixtures must round-trip without silent identity loss. Intentional normalizations are diagnosed, and active content stays fail-closed on export.

    • Identity round tripsBookmarks/links, review track-change authors and text, and contract table cells survive import → export → reopen.
    • Diagnosed normalizationsDuplicate bookmark names emit docx.bookmarks.identity instead of silently clobbering ranges.
    • Active content fail-closedVBA and package signatures are stripped on export while safe vendor parts may survive. Run bun run test:corpus:r0.
  43. v0.256.0
    • Fixed
    • Spreadsheet

    Spreadsheet row indexes stay readable

    Row and column header overlays stay translucent so Fortune canvas labels remain visible, and the in-cell editor defaults to vertical middle alignment matching Fortune vt 0.

    • Translucent header overlaysHover and selected fills use accent color-mix against transparent instead of opaque panel fills that read as black on dark themes.
    • In-cell editor vertical centerThe input-box inner container is flex with align-items center by default; data-cell-vt 1/2 switches to top/bottom.
    • Ribbon 垂直居中 matches defaultMissing vt treats the cell as middle-aligned so 垂直居中 stays active for unformatted cells.
  44. v0.255.0
    • Fixed
    • Markdown

    Markdown source scrolls inside the textarea

    Long Markdown source documents scroll inside the textarea instead of the pane shell, so proportional split sync with the preview fires again. Compact layouts keep the same scroll-ownership contract.

    • Pane shell no longer steals scrollSource pane uses overflow: hidden; the textarea uses min-height: 0 with overflow: auto so flex layout keeps scrolling on the control that owns onScroll.
    • Split sync works on long docsProportional progress mapping listens on the textarea again, so preview scroll follows source scroll for long documents.
    • Compact layouts keep ownershipPhone and container compact rules keep min-height: 0 on the source textarea instead of forcing min-height: 100%.
  45. v0.254.0
    • Fixed
    • Spreadsheet

    Data Validation Escape restores dirty drafts

    Data Validation restores dirty drafts on the first Escape and only closes on a second Escape when the form is clean. Cancel and the window close control still discard immediately, matching the Sort Options L2 dirty-restore pattern.

    • First Escape restores, second closesDirty allow-blank, type, formula, and alert draft fields snap back without dismissing the dialog.
    • Reuses Dialog onEscapeData Validation wires the shared Dialog onEscape hook used by Sort Options and Create Table.
    • Cancel still discards immediatelyCancel and the window close control keep one-shot discard semantics; only Escape uses the two-step dirty restore.
  46. v0.253.0
    • Fixed
    • Spreadsheet

    Sort Options Escape restores dirty drafts

    Sort Options restores dirty drafts on the first Escape and only closes on a second Escape when the form is clean. Cancel and the window close control still discard immediately, matching the Create Table L2 dirty-restore pattern.

    • First Escape restores, second closesDirty case-sensitivity, text-method, and orientation draft fields snap back without dismissing the dialog.
    • Reuses Dialog onEscapeSort Options wires the shared Dialog onEscape hook used by Create Table and Document proofing settings.
    • Cancel still discards immediatelyCancel and the window close control keep one-shot discard semantics; only Escape uses the two-step dirty restore.
  47. v0.252.0
    • Fixed
    • Spreadsheet

    Create Table Escape restores dirty drafts

    Create Table restores dirty drafts on the first Escape and only closes on a second Escape when the form is clean. Cancel and the window close control still discard immediately, matching the Document proofing L2 dirty-restore pattern.

    • First Escape restores, second closesDirty range, header-row, and totals-row draft fields snap back without dismissing the dialog.
    • Reuses Dialog onEscapeCreate Table wires the shared Dialog onEscape hook used by Font and proofing settings.
    • Cancel still discards immediatelyCancel and the window close control keep one-shot discard semantics; only Escape uses the two-step dirty restore.
  48. v0.251.0
    • Fixed
    • Writer

    Proofing dialog Escape restores dirty drafts

    Proofing language settings restores dirty drafts on the first Escape and only closes on a second Escape when the form is clean. Cancel and the window close control still discard immediately, matching the Font dialog L2 dirty-restore pattern.

    • First Escape restores, second closesDirty language and proofing-behavior draft fields snap back without dismissing the dialog, so L2 proofing edits survive an accidental Escape.
    • Reuses Dialog onEscapeProofing dialog wires the shared Dialog onEscape hook introduced for Font advanced settings.
    • Cancel still discards immediatelyCancel and the window close control keep one-shot discard semantics; only Escape uses the two-step dirty restore.
  49. v0.250.0
    • Fixed
    • Writer

    Insert and Page Layout page-break keep focus

    Document Insert and Page Layout page-break controls insert breaks without TipTap chain().focus(), so the caret stays in the document after the click. Ctrl+Enter still focuses intentionally because that chord is a keyboard path, not a stay-mounted ribbon click.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps the caret where the page-break was inserted.
    • Insert and Page Layout stay-mountedBoth Insert ribbon and Page Layout ribbon page-break buttons use editor.commands.insertContent plus mousedown preventDefault.
    • Ctrl+Enter still focusesThe keyboard page-break chord still uses chain().focus() so the editor receives the caret after the shortcut.
  50. v0.249.0
    • Fixed
    • Writer

    Font dialog Escape restores dirty drafts

    Font advanced settings restores dirty drafts on the first Escape and only closes on a second Escape when the form is clean. Cancel and the window close control still discard immediately. Shared Dialog now accepts an optional onEscape so modal drafts can match the L2 dirty-restore pattern already used by stay-mounted popovers.

    • First Escape restores, second closesDirty character-scale and other draft fields snap back without dismissing the dialog, so L2 font edits survive an accidental Escape.
    • Dialog onEscape hookModal Dialog Escape / cancel can restore drafts without changing Cancel or the window close control.
    • Cancel still discards immediatelyCancel and the window close control keep one-shot discard semantics; only Escape uses the two-step dirty restore.
  51. v0.248.0
    • Fixed
    • Writer

    Document QAT undo/redo and remove-link keep focus

    Document Quick Access undo/redo, Insert ribbon remove-link, and delete-bookmark apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 document editing loop off the QAT or ribbon trigger. Add-link and add-bookmark prompt dialogs still restore editor focus after apply because those surfaces go away.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the QAT or Insert ribbon trigger.
    • Stay-mounted Document controlsQuick Access undo/redo, remove-link, and delete-bookmark keep the chrome mounted, so L2 loops stay on the same trigger.
    • Prompts still restore the editorAdd-link and add-bookmark prompts continue to focus the editor after apply because those surfaces dismiss.
  52. v0.247.0
    • Fixed
    • Markdown

    Markdown ribbon stay-mounted formatting keeps focus

    Markdown ribbon stay-mounted formatting controls (undo/redo, paragraph style, bold/italic/strike/code, lists, blockquote, code block, horizontal rule, insert table, and remove-link) apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 Markdown editing loop off the ribbon trigger. Link and image dialogs still restore editor focus after apply because the dialog UI goes away.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the Markdown ribbon trigger.
    • Stay-mounted Markdown controlsUndo/redo, style, marks, lists, block inserts, and remove-link keep the ribbon mounted, so L2 loops stay on the same trigger.
    • Dialogs still restore the editorLink and image insert dialogs continue to focus the editor after apply because those surfaces dismiss.
  53. v0.246.0
    • Fixed
    • Writer

    Page-chrome undo/redo and remove-link keep ribbon focus

    Document page-chrome ribbon undo/redo and remove-link, plus the inline chrome toolbar undo/redo and remove-link, apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 header/footer editing loop off the trigger. Adding a link through the prompt dialog still restores chrome-editor focus after apply.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the page-chrome undo/redo or remove-link trigger.
    • Stay-mounted chrome controlsUndo, redo, and remove-link keep the header/footer ribbon mounted, so L2 loops stay on the same trigger. Add-link still focuses the chrome editor after the prompt.
    • L2 header/footer loops stay on the controlAfter undoing a chrome edit or removing a link, keyboard users can continue from the same ribbon or chrome button.
  54. v0.245.0
    • Fixed
    • Writer

    Table Layout structural controls keep ribbon focus

    Document table Layout row/column insert/delete, merge/split, cell alignment, distribute, dimension fields, header-row toggle, and the style gallery apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 table-editing loop off the ribbon trigger. Delete table still restores editor focus because the contextual ribbon goes away.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the table Layout ribbon trigger.
    • Structural table editsInsert/delete rows and columns, merge/split, alignment, distribute, and dimensions share the same focus contract as Home formatting. Delete table intentionally restores editor focus.
    • L2 table-editing loops stay on the controlAfter inserting a row or merging cells, keyboard users can continue from the same ribbon button.
  55. v0.244.0
    • Fixed
    • Writer

    Alignment and page-chrome formatting keep ribbon focus

    Document Home paragraph alignment and page-chrome bold/italic, sub/superscript, and alignment apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 formatting loop off the ribbon or chrome trigger.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the Home alignment or page-chrome trigger.
    • Home alignment and page chromeSame focus contract as bold/italic, underline/strike splits, and font selects.
    • L2 formatting loops stay on the controlAfter aligning or toggling page-chrome bold/italic, keyboard users can continue from the same control.
  56. v0.243.0
    • Fixed
    • Writer

    Bold, italic, and font-size steppers keep ribbon focus

    Document Home bold/italic, grow/shrink font steppers, and selection-toolbar bold/italic apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 formatting loop off the ribbon or floating toolbar trigger.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the ribbon or selection-toolbar trigger.
    • Home and selection toolbarSame focus contract as underline/strike splits, list primaries, and font selects.
    • L2 formatting loops stay on the controlAfter toggling bold/italic or stepping font size, keyboard users can continue from the same control.
  57. v0.242.0
    • Fixed
    • Writer

    Split primaries and table layout keep ribbon focus

    Document underline/strike and list split primaries, plus table layout mode, apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 formatting loop off the ribbon control.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the ribbon primary or layout select.
    • Home splits and table LayoutSame focus contract as color pickers, highlight toggles, and font selects.
    • L2 formatting loops stay on the controlAfter toggling underline, a list, or table autofit, keyboard users can continue from the same ribbon control.
  58. v0.241.0
    • Fixed
    • Writer

    Font and border selects keep ribbon combobox focus

    Document font family/size, paragraph-style, and table border-apply selects apply without TipTap chain().focus(), so Popover restores the ribbon combobox after an L2 pick.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps Popover trigger restore on the combobox.
    • Home, style gallery, and table DesignSame focus contract as color pickers and highlight toggles.
    • L2 formatting loops stay on the comboboxAfter picking a font, style, or border target, keyboard users can reopen the same combobox without re-focusing the ribbon.
  59. v0.240.0
    • Fixed
    • Writer

    Highlight toggle keeps ribbon trigger focus

    Document Home and selection-toolbar highlight toggles apply without TipTap chain().focus(), so deferred editor focus does not steal the L2 formatting loop off the trigger.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps focus on the ribbon or toolbar button.
    • Home and selection toolbarSame focus contract as color pickers and underline/strike style menus.
    • L2 formatting loops stay on the triggerAfter toggling highlight, keyboard users can continue from the same ribbon control.
  60. v0.239.0
    • Fixed
    • Writer

    Color picker L2 focus restore on swatch apply

    Document font, table fill, selection-toolbar, and page-chrome color pickers apply without TipTap chain().focus(), so Popover restores the ribbon trigger after a swatch pick.

    • No deferred editor focus stealTipTap chain().focus() schedules DOM focus on a later animation frame; omitting it keeps Popover trigger restore.
    • Home, table, selection, page chromeSame L2 contract as underline/strike style menus and list galleries.
    • L2 color loops stay on the triggerAfter picking a swatch, keyboard users can reopen the palette from the same ribbon control.
  61. v0.238.0
    • Fixed
    • Writer

    Spacing and margins panel Escape draft cancel

    Document paragraph spacing and table cell-margins restore dirty drafts on Escape from any focus inside each panel fieldset, with data-office-escape-consumer.

    • Panel-wide dirty EscapeA dirty spacing or margin draft restores when Escape is pressed from another control inside the same panel.
    • Clean Escape still closesA second Escape (or Escape with an unchanged draft) dismisses the popover and restores the trigger.
    • Matches numbering Escape contractSame dirty-only panel fieldset pattern as numbering start and OfficeColorPicker.
  62. v0.237.0
    • Fixed
    • Writer

    Numbering start panel Escape draft cancel

    Document numbering library restores dirty 起始编号 drafts on Escape from any focus inside the settings fieldset, including Apply, with data-office-escape-consumer.

    • Panel-wide dirty EscapeEditing 起始编号 then Tab to 应用起始值 and Escape restores the committed start without closing.
    • Clean Escape still closesA second Escape (or Escape with an unchanged draft) dismisses the library and restores the trigger.
    • Matches color-picker Escape contractSame dirty-only panel fieldset pattern as OfficeColorPicker so L2 Escape stays predictable.
  63. v0.236.0
    • Fixed
    • Shared UX

    Color picker panel Escape draft cancel

    OfficeColorPicker restores dirty custom-color drafts on Escape from any focus inside the palette, including Apply, with data-office-escape-consumer on the panel fieldset.

    • Panel-wide dirty EscapeEditing a custom hex then Tab to 应用 and Escape restores the committed color without closing.
    • Clean Escape still closesA second Escape (or Escape with an unchanged draft) dismisses the picker and restores the trigger.
    • Shared ribbon primitiveOne fix covers Document, Spreadsheet, Presentation, and PDF color disclosures that use OfficeColorPicker.
  64. v0.235.0
    • Fixed
    • Spreadsheet
    • Shared UX

    More-borders Escape draft cancel

    Spreadsheet 更多框线 restores dirty line-style and color session drafts on Escape, keeps the position radiogroup tab stop on the checked target, and Popover focusFirstOnOpen prefers in-tab-order controls.

    • Dirty Escape restores sessionChanging 线型 or 颜色 then Escape returns the open-time values without dismissing the dialog.
    • Checked target keeps tab stopThe position radiogroup puts tabindex=0 on the aria-checked radio so reopen focuses the current border target.
    • Open focus respects tabindexPopover focusFirstOnOpen prefers controls that are in the tab order, then falls back for menus that mark every item tabindex=-1.
  65. v0.234.0
    • Fixed
    • Shared UX
    • Writer
    • Presentation

    Compact table insert Escape draft cancel

    Compact insert-table 行数 / 列数 spinbuttons restore the focus baseline on Escape when dirty, with data-office-escape-consumer so the first Escape cancels without closing the picker.

    • Dirty Escape restores baselineChanging 行数 or 列数 then Escape returns the focus-time value without dismissing the dialog.
    • Clean Escape still closesA second Escape (or Escape on an unchanged field) dismisses the picker and restores the trigger.
    • Stepper keeps field focusPlus/minus mousedown preventDefault keeps keyboard focus in the spinbutton for another Escape.
  66. v0.233.0
    • Fixed
    • Spreadsheet

    Border position grid Left/Right focus

    Spreadsheet 更多框线 position radiogroup is a CSS 2-column grid; ArrowLeft / ArrowRight now move between adjacent targets via moveOfficeGridMenuFocus(..., 2).

    • 2-column grid focusBorder targets use moveOfficeGridMenuFocus with columns=2 so Left/Right match the visual layout.
    • Adjacent target pairsFrom 内部竖框线, Left reaches 内部横框线; from 下框线, Down reaches 右框线.
    • Row moves unchangedHome / End / Up / Down still traverse the radiogroup; only horizontal focus was broken under linear menu focus.
  67. v0.232.0
    • Fixed
    • Writer

    Underline and strike keep ribbon focus

    Document 更多下划线 / 更多删除线 style picks and underline color no longer steal focus into the editor; Popover restores the ribbon disclosure for L2 keyboard loops.

    • No chain().focus() after L2 pickUnderline and strike style menus call setDocumentUnderline / setDocumentStrike directly, then close so Popover restore wins.
    • Underline color tooUnderline color swatches and 自动颜色 use setDocumentUnderlineColor without focusing the editor.
    • L2 disclosure loopsKeyboard users can reopen underline / strike menus without an extra Tab out of the canvas.
  68. v0.231.0
    • Fixed
    • Writer
    • Spreadsheet

    Dialog option grids use radiogroup

    Document list galleries and Spreadsheet 更多框线 keep dialog panels for mixed controls, but style pickers inside them use radiogroup/radio instead of nested menu/menuitemradio.

    • Valid dialog childrenMenus may only host menuitem* / group / separator. Mixed panels with number fields and selects stay dialogs with radiogroups.
    • List gallery radiosBullet and numbering style grids expose role=radio under radiogroup while clear / start-number actions stay ordinary buttons.
    • Border target radiosSpreadsheet border position choices are radios; line style and color remain OfficeSelect / OfficeColorPicker L3 controls.
  69. v0.230.0
    • Fixed
    • Presentation
    • Writer

    Align name, list focus, and numbering-start drafts

    Presentation 对象对齐 accessible name matches the visible label. Document list galleries restore ribbon focus after a pick. Numbering 起始编号 Escape cancels / blur·Enter commits like other OfficeNumberField drafts.

    • Honest align nameVisible 对象对齐 is the button name; 元素对齐到幻灯片 / 对齐所选对象 remain in title and aria-description.
    • List gallery focusAfter choosing a bullet or numbering style, Popover restores the ribbon trigger instead of focusing the editor.
    • Numbering start draftsEscape restores the committed start; blur / Enter commits without requiring Apply; Apply confirms and closes even when already committed.
  70. v0.229.0
    • Fixed
    • Spreadsheet

    Spreadsheet L2 menus: role=group + sheet color Left/Right

    Worksheet options, cell-style, and table-style galleries use role=group instead of fieldset under role=menu. Sheet tab colors move focus with Left/Right; dividers keep native hr separators.

    • Valid menu groupsfieldset is not a valid child of role=menu; groups keep menuitemradio sets labeled.
    • Color row keyboardLeft/Right moves among sheet tab color swatches without leaving the row.
    • Native menu dividersWorksheet option menus keep native hr separators (no redundant role=separator).
  71. v0.228.0
    • Fixed
    • Spreadsheet
    • Shared UX
    • Writer
    • PDF

    Ribbon L2/L3 ARIA hygiene: no pressed+expanded, PDF menu groups

    Spreadsheet/Document popover menu triggers drop aria-pressed that conflicted with aria-expanded. Totals opens with focus on enable. PDF more-tools uses role=group for menuitemradio sets.

    • Totals focusfocusFirstOnOpen moves keyboard focus into the dialog.
    • No pressed+expandedMenu/dialog disclosures (totals, insert-table, freeze, orientation, text case, margins, spacing, pagination, find) no longer set both aria-pressed and aria-expanded.
    • PDF overflow groupsMore-tools menu scopes menuitemradio sets with role=group (valid menu children).
  72. v0.227.0
    • Fixed
    • Shared UX

    Outside Popover dismiss restores toolbar trigger focus

    Shared: outside pointer dismiss and disable-while-open restore focus to the L2/L3 toolbar trigger; Tab exit still keeps destination focus.

    • Outside pointerpointerdown outside uses the same close() path as Escape.
    • Non-focusable chromeFocusout with a null relatedTarget restores the trigger.
    • Tab exit preservedTabbing to another control does not steal focus back to the trigger.
  73. v0.226.0
    • Fixed
    • PDF
    • Spreadsheet

    PDF page and sheet-rename Escape consumers match nested surfaces

    PDF: dirty page-number drafts restore and consume Escape; clean fields bubble. Spreadsheet: inline sheet rename marks Escape consumer while open.

    • PDF page fieldDirty 页码 drafts restore current page and set data-office-escape-consumer.
    • Clean page bubbleClean page fields no longer always stop Escape.
    • Sheet renameRename input sets data-office-escape-consumer while rename is open.
  74. v0.225.0
    • Fixed
    • Spreadsheet

    Escape restores dirty Spreadsheet table-name drafts without leaking

    Spreadsheet: Escape on a dirty Table Design 表格名称 draft restores the committed name and marks the field as an Escape consumer so nested/task-pane surfaces stay open.

    • Table nameDirty name drafts restore and set data-office-escape-consumer.
    • No parent dismissFirst Escape cancels the draft without dismissing parent/task-pane surfaces.
    • Clean field bubbleClean table-name fields still let Escape bubble to close parent surfaces.
  75. v0.224.0
    • Fixed
    • Spreadsheet

    Escape restores dirty Spreadsheet totals-row drafts before closing

    Spreadsheet: Escape on dirty Table Design 汇总标签 and 汇总公式 drafts restores the committed value before dismissing the totals popover.

    • Totals labelDirty label drafts restore instead of blur-committing on Escape.
    • Custom formulaDirty formula drafts restore before the totals popover closes.
    • Shared committed text fieldTotals fields reuse CommittedOfficeTextField Escape consumers.
  76. v0.223.0
    • Fixed
    • Shared UX
    • Writer

    Escape restores dirty nested toolbar drafts before closing L2

    Shared/Document: Escape on dirty table cell-margin, numbering-start, and color-picker hex drafts restores the committed value before dismissing the nested surface.

    • Table cell marginsDirty centimeter drafts restore instead of blur-committing on Escape.
    • Numbering startDirty start values restore before the numbering library closes.
    • Custom color hexDirty hex drafts restore before the shared color palette closes.
  77. v0.222.0
    • Fixed
    • Writer

    Document heading font size and line spacing closed labels match paint

    Document: unmarked heading 字号 and 行距 closed labels follow CSS paint for h1–h3 / h1–h2 instead of dishonest body defaults.

    • Effective font sizeh1–h3 without textStyle.fontSize report 18 / 15 / 12.75 pt from CSS px.
    • Line height honestyh1–h2 without node lineHeight report 1.32 / 1.4 instead of 默认行距.
    • Grow from paint增大/减小字号 steps from the effective heading size, not silent 10.5.
  78. v0.221.0
    • Fixed
    • Spreadsheet

    Spreadsheet font-size closed label matches canvas default

    Spreadsheet: unformatted cells show 字号 11 on the ribbon and Format Cells dialog, matching FortuneSheet defaultFontSize instead of a dishonest 10.

    • Closed label is paintMissing cell.fs falls back to DEFAULT_SPREADSHEET_FONT_SIZE (11).
    • Format Cells alignedThe font tab default uses the same shared constant.
    • ContractsUnit, ribbon, and spreadsheet-font-size-border-shortcuts a3s-test cover the default closed value.
  79. v0.220.0
    • Fixed
    • Writer

    Paragraph style gallery stays compact with heading 4–6

    Document: 段落样式库 scrolls horizontally on one ribbon row after heading levels 4–6 were added, so desktop gallery height stays within the visual contract while closed labels remain honest.

    • One ribbon rowGallery chips use horizontal scroll instead of wrapping into a second grid row.
    • Honesty preservedHeading levels 4–6 remain available in the gallery and compact 段落样式 combobox.
    • ContractsDesktop visual coverage keeps gallery height ≤ 50px and width in the 250–270px band.
  80. v0.219.0
    • Fixed
    • Writer
    • Markdown

    Heading 4–6 paragraph-style closed labels stay honest

    Document and Markdown: paragraph-style gallery and 段落样式 OfficeSelect cover heading levels 1–6 so active h4–h6 show 标题 4 / 标题 5 / 标题 6 instead of falling through to 正文.

    • Closed label is stateImported or pasted heading levels 4–6 keep 标题 4 / 标题 5 / 标题 6 on the closed combobox and gallery radio.
    • Apply covers 1–6Options match the TipTap heading schema used for DOCX and Markdown import.
    • ContractsUnit coverage pins heading 4–6 closed labels on DocumentHomeRibbon and MarkdownToolbar.
  81. v0.218.0
    • Fixed
    • Spreadsheet

    Custom Sort orphan order closed label stays honest

    Spreadsheet: Custom Sort 次序 shows 自定义序列 when the active custom list is missing from customLists, instead of the command name 新建自定义序列…. 新建自定义序列… only opens list editing.

    • Closed label is stateOrphan custom-list keys keep 自定义序列 on the closed combobox, never 新建自定义序列….
    • 新建自定义序列… stays a commandChoosing 新建自定义序列… starts list editing and never becomes the closed value.
    • ContractsUnit coverage pins orphan-custom-list on SpreadsheetSortOrderControls.
  82. v0.217.0
    • Fixed
    • Writer

    Document page-layout columns closed label stays honest

    Document: page-layout 分栏 shows the current column count (四栏 / 五栏 / 六栏) as the closed label instead of the command name 更多分栏 when count > 3. Options cover 1–6; 更多分栏 only opens the columns panel.

    • Closed label is stateFour or more columns keep 四栏 / 五栏 / 六栏 on the closed combobox, never 更多分栏.
    • 更多分栏 stays a commandCount options cover 1–6; 更多分栏 opens the advanced columns panel and never becomes the closed value.
    • ContractsUnit, source-layout, and word-insert-page-layout a3s-test contracts cover the closed value while the panel is open.
  83. v0.216.0
    • Fixed
    • Documentation

    What's new SSG rejects unknown surfaces

    Documentation: Document field-insert notes use the Writer surface the changelog cards can label, and curated notes reject unknown keys so SSG no longer reads .en of an undefined surface label.

    • Writer, not documentThe 0.215.0 Document field-insert note uses surfaces: writer, matching ReleaseCard labels.
    • Typed surface unionOfficeReleaseSurface is an explicit union so a typo cannot compile as a changelog surface.
    • Unit contractRelease-note tests reject unknown surface keys before docs SSG.
  84. v0.215.0
    • Fixed
    • Writer
    • Documentation

    Document field insert is a command menu

    Document: Insert-ribbon field insert uses a Popover command menu instead of an OfficeSelect with a disabled empty closed value, so the closed label stays 插入域 while actions run without fake select state.

    • Command launcher, not selectField insert uses Popover + menuitem instead of OfficeSelect value="".
    • Closed label stays 插入域Choosing a field kind inserts immediately and does not persist a selected option.
    • a3s-test and Playwright contractsword-fields-phone.acl, document toolbar unit tests, and Playwright target the command button and menuitems.
  85. v0.214.0
    • Fixed
    • Presentation
    • Documentation

    Single-object align-to-slide stays enabled

    Presentation: canAlignElement allows one selection unit so the align command menu opens for align-to-slide, matching the ArrangementController single-element path and ribbon label.

    • One unit enables align-to-slidecanAlignElement uses selectionUnits.length >= 1 instead of requiring two units.
    • Playwright opens align on title clickRibbon visual contract asserts the align trigger is enabled after selecting one title.
    • Source contract for canExecuteLayout tests lock presentation-editor canAlignElement to >= 1.
  86. v0.213.0
    • Fixed
    • Presentation
    • Documentation

    Presentation align control is a command menu

    Presentation: object alignment uses a Popover command menu instead of an OfficeSelect with a disabled none closed value, so the closed label stays 对象对齐 while actions run without fake select state.

    • Command launcher, not selectAlign actions are menuitems; Escape closes the menu; no listbox value of none.
    • Closed-label fit checksPlaywright asserts Chinese closed labels on font and align triggers do not overflow.
    • Unit coverage for align actionsPresentation toolbar tests open the menu and assert alignElement receives the chosen alignment.
  87. v0.212.0
    • Fixed
    • Writer
    • Spreadsheet
    • Presentation
    • Markdown
    • Documentation

    Dialog menus stay unclipped for OfficeSelect

    Shared shell: dialog surfaces keep overflow visible so portaled OfficeSelect/Popover menus inside the modal focus scope are not clipped by the rounded dialog box; body scrolling is unchanged.

    • Visible dialog overflow.ds-dialog uses overflow: visible; .ds-dialog-body keeps overflow: auto and flex growth for tall forms.
    • Focus-scoped portals preservedMenus still portal into the dialog focus root so Tab trapping and inert isolation stay intact.
    • Layout contract coverageCSS contract tests lock the overflow split so clipping regressions fail closed.
  88. v0.211.0
    • Fixed
    • Writer
    • Spreadsheet
    • Presentation
    • Markdown
    • Documentation

    Escape closes OfficeSelect before parent dialogs

    Shared shell: Dialog Escape defers to an open OfficeSelect/Popover layer so Sort, AutoFilter, hyperlink, data validation, and other dialogs stay open until the listbox is dismissed.

    • Nested Escape ownershipCapture-phase dialog focus scopes skip Escape while openPopoverLayers is non-empty; native dialog cancel is guarded the same way.
    • OfficeSelect and color menusShared Popover layers own Escape first for listboxes and nested portal menus inside modal dialogs.
    • Regression coverageUnit tests assert Escape closes the select first, then a second Escape closes the parent dialog.
  89. v0.210.0
    • Fixed
    • Writer
    • Spreadsheet
    • Presentation
    • Documentation

    More ribbon/panel OfficeSelect widths for Chinese closed labels

    Shared shell: Document table layout and border-target OfficeSelect triggers widen; Presentation animation trigger fits 与上一动画同时 / 上一动画之后; Spreadsheet number-format stack and date-time trigger widen for 会计专用 / 科学计数 / 日期和时间; Custom Sort drops orphaned native select CSS.

    • Document table selectsLayout select 104px; border-target select 128px for Chinese closed labels.
    • Presentation animation triggerAnimation options trigger field widens to 168px.
    • Spreadsheet number stackNumber-format OfficeSelect and date-time trigger use 112px; Custom Sort level CSS no longer styles native select.
  90. v0.209.0
    • Fixed
    • Writer
    • Spreadsheet
    • Documentation

    Ribbon OfficeSelect closed labels fit Chinese chrome

    Shared shell: Document ribbon OfficeSelect triggers widen for connector/text-box widths, connector kind, line height, and table border targets; field insert closes as 插入域…. Spreadsheet ribbon drops the blanket 62px OfficeSelect crush default. Dead native select ribbon/editor CSS is removed after the OfficeSelect migration.

    • Document ribbon widthsConnector/text-box width selects move to 118px; line height 96px; table border targets 110px; field insert closed label shortens.
    • Spreadsheet defaultRibbon OfficeSelect defaults to width:auto; named font/size/number classes keep fixed widths.
    • Dead select CSSShared ribbon and editor chrome no longer style native select after OfficeSelect migration.
  91. v0.208.0
    • Fixed
    • Spreadsheet
    • Documentation

    Spreadsheet dialogs migrate native selects to OfficeSelect

    Shared shell: Custom Sort, data validation, AutoFilter condition, and hyperlink worksheet dialogs use OfficeSelect instead of native select. Field aria-required/invalid/describedby reach the combobox; options expose data-value for a3s-test. Custom Lists keeps its size=10 listbox; ribbon nested-portal contracts from 0.198.0 stay unchanged.

    • Custom Sort and appearance keysColumn/row, sort-on, order, appearance target, and position pickers use OfficeSelect with grouped custom-list options.
    • Validation, AutoFilter, hyperlinkAllow/operator/error-style, primary/secondary filter conditions, and worksheet targets leave native select.
    • Automation hooksTriggers keep data-selected-value; options add data-value; e2e ACLs click role=combobox then role=option.
  92. v0.207.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints checkered art borders

    Phase 0 fidelity: browser document PDF export paints Writer checkered art paragraph borders as repeating 2×2 tile grids with alternating diagonal fills along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • 2×2 tile gridscheckered draws repeating 2×2 tile grids with alternating diagonal fills along the measured edge.
    • Admitted into vector plancheckered is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  93. v0.206.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints checkedBarColor art borders

    Phase 0 fidelity: browser document PDF export paints Writer checkedBarColor art paragraph borders as repeating checkered bar segments with single-diagonal cell densify along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Light checkered barscheckedBarColor draws repeating checkered bar segments with single-diagonal cell densify along the measured edge.
    • Admitted into vector plancheckedBarColor is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  94. v0.205.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints checkedBarBlack art borders

    Phase 0 fidelity: browser document PDF export paints Writer checkedBarBlack art paragraph borders as repeating checkered bar segments along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Checkered bar segmentscheckedBarBlack draws repeating checkered bar segments along the measured edge.
    • Admitted into vector plancheckedBarBlack is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  95. v0.204.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints champagneBottle art borders

    Phase 0 fidelity: browser document PDF export paints Writer champagneBottle art paragraph borders as repeating bottle silhouettes with cork and label band along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Bottle silhouetteschampagneBottle draws repeating bottle silhouettes with cork and label band along the measured edge.
    • Admitted into vector planchampagneBottle is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  96. v0.203.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints chainLink art borders

    Phase 0 fidelity: browser document PDF export paints Writer chainLink art paragraph borders as repeating interlaced oval link motifs along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Interlaced oval linkschainLink draws repeating interlaced oval link motifs along the measured edge.
    • Admitted into vector planchainLink is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  97. v0.202.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints certificateBanner art borders

    Phase 0 fidelity: browser document PDF export paints Writer certificateBanner art paragraph borders as repeating notched ribbon motifs along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Notched ribbon motifscertificateBanner draws repeating notched ribbon motifs with end folds along the measured edge.
    • Admitted into vector plancertificateBanner is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  98. v0.201.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints celticKnotwork art borders

    Phase 0 fidelity: browser document PDF export paints Writer celticKnotwork art paragraph borders as repeating interlaced diamond motifs along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Interlaced diamond motifscelticKnotwork draws repeating interlaced diamond motifs with crossing bands along the measured edge.
    • Admitted into vector plancelticKnotwork is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  99. v0.200.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints candyCorn art borders

    Phase 0 fidelity: browser document PDF export paints Writer candyCorn art paragraph borders as repeating candy-corn triangles along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Candy-corn trianglescandyCorn draws repeating triangular candy motifs with two band dividers along the measured edge.
    • Admitted into vector plancandyCorn is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  100. v0.199.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints cakeSlice art borders

    Phase 0 fidelity: browser document PDF export paints Writer cakeSlice art paragraph borders as repeating cake-slice wedges along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Cake-slice wedgescakeSlice draws repeating wedge motifs with a frosting ridge and radial divider along the measured edge.
    • Admitted into vector plancakeSlice is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  101. v0.198.0
    • Fixed
    • Writer
    • Spreadsheet
    • Documentation

    Ribbon nested dropdowns and native selects repaired

    Shared shell: nested portal menus keep parent ribbon popovers open; Spreadsheet border/table totals use OfficeSelect and OfficeColorPicker; Document page-setup and contextual ribbon selects keep fixed widths at 24px; underline and table combobox heights match the ribbon row; select and color triggers expose data-selected-value for e2e.

    • Nested portal dismissPointer and focus outside-dismiss ignore higher open layers so border/style color menus stay usable inside ribbon popovers.
    • OfficeSelect migration in Spreadsheet panelsBorder style/color and table totals functions leave native select/color inputs for shared Office controls.
    • 24px contextual ribbon selectsPage-setup, table, connector, picture, text-box, field-insert, and underline controls keep readable fixed widths on the shared 24px row.
  102. v0.197.0
    • Fixed
    • Presentation
    • Spreadsheet
    • Markdown
    • Documentation

    Ribbon dropdown layout repaired

    Shared shell: Presentation no longer crushes the ribbon to 44px; Presentation, Spreadsheet, and Markdown OfficeSelect controls use fixed ribbon widths; ribbon color pickers and Spreadsheet border controls align to 24px; floating menus keep portal top/left. Unit and Playwright ribbon-select evidence cover the contract.

    • 74px Presentation ribbon rowRemove the 44px presentation-toolbar height pin so font and align selects fit the shared ribbon.
    • Fixed select and color widthsPresentation/Markdown/Spreadsheet selects use dedicated ribbon widths; chrome sizes select triggers and color tools at 24px.
    • Portal-safe menusFloating OfficeSelect menus keep portal top/left instead of trigger-relative offsets.
  103. v0.196.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints balloonsHotAir art borders

    Phase 0 fidelity: browser document PDF export paints Writer balloonsHotAir art paragraph borders as repeating hot-air balloon silhouettes along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Hot-air balloon silhouettesballoonsHotAir draws repeating envelope and basket motifs along the measured edge.
    • Admitted into vector planballoonsHotAir is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  104. v0.195.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints balloons3Colors art borders

    Phase 0 fidelity: browser document PDF export paints Writer balloons3Colors art paragraph borders as repeating balloon silhouettes along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Balloon silhouettesballoons3Colors draws repeating bulb, knot, and string motifs along the measured edge.
    • Admitted into vector planballoons3Colors is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  105. v0.194.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints babyRattle art borders

    Phase 0 fidelity: browser document PDF export paints Writer babyRattle art paragraph borders as repeating rattle silhouettes along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Rattle silhouettesbabyRattle draws repeating bulb, neck, and handle-ring motifs along the measured edge.
    • Admitted into vector planbabyRattle is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  106. v0.193.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints babyPacifier art borders

    Phase 0 fidelity: browser document PDF export paints Writer babyPacifier art paragraph borders as repeating pacifier silhouettes along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Pacifier silhouettesbabyPacifier draws repeating handle-ring, shield, and nipple motifs along the measured edge.
    • Admitted into vector planbabyPacifier is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  107. v0.192.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints archedScallops art borders

    Phase 0 fidelity: browser document PDF export paints Writer archedScallops art paragraph borders as repeating scallop arches along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Scallop archesarchedScallops draws repeating half-arch scallops along the measured edge.
    • Admitted into vector planarchedScallops is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  108. v0.191.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints vine art borders

    Phase 0 fidelity: browser document PDF export paints Writer vine art paragraph borders as curling vine silhouettes (stem with opposing leaves) along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Vine silhouettesvine draws a curling stem with opposing leaves along the measured edge.
    • Admitted into vector planvine is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedOther decorative art borders and full PDF/UA certification are not claimed.
  109. v0.190.0
    • Improved
    • Writer
    • Documentation

    Document PDF paints apples art borders

    Phase 0 fidelity: browser document PDF export paints Writer apples art paragraph borders as apple silhouettes (round body with stem and leaf) along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Apple silhouettesapples draws a round body with stem and leaf along the measured edge.
    • Admitted into vector planapples is admitted into the vector border plan; not a silent skip.
    • Scope kept boundedVines and other decorative art borders, plus full PDF/UA certification, are not claimed.
  110. v0.189.0
    • Improved
    • Writer
    • Documentation

    Attributed note-ref glyphs admitted in revision bodies

    Phase 0 fidelity: w:footnoteRef / w:endnoteRef / w:annotationRef glyphs with exactly one Word-ns numeric w:val import inside whole-paragraph mark, paragraph-break, and text-move revision bodies. Empty *Ref glyphs and *Reference with w:id remain admitted. Malformed attributed refs and attributed separators stay fail-closed.

    • Mark / break / moveEligible revision bodies admit attributed footnoteRef, endnoteRef, and annotationRef.
    • Required w:valExactly one Word-ns numeric val is required; extras fail closed.
    • Prior contracts keptEmpty *Ref and *Reference with numeric id stay admitted.
  111. v0.188.0
    • Improved
    • Writer
    • Documentation

    endnoteReference with id admitted in revision bodies

    Phase 0 fidelity: bounded empty w:endnoteReference glyphs with exactly one Word-ns numeric w:id import inside whole-paragraph mark, paragraph-break, and text-move revision bodies, mirroring footnoteReference from 0.187.0. Attributed footnoteRef/endnoteRef and malformed markers stay fail-closed.

    • Mark / break / moveEligible revision bodies admit endnoteReference with numeric id.
    • Mirrors footnoteReferenceSame bounded id contract as footnoteReference from 0.187.0.
    • Attributed refs closedAttributed footnoteRef/endnoteRef remain fail-closed.
  112. v0.187.0
    • Improved
    • Writer
    • Documentation

    footnoteReference with id admitted in revision bodies

    Phase 0 fidelity: bounded empty w:footnoteReference glyphs with exactly one Word-ns numeric w:id import inside whole-paragraph mark, paragraph-break, and text-move revision bodies. Attributed footnoteRef, endnoteReference, and malformed markers stay fail-closed.

    • Mark / break / moveEligible revision bodies admit footnoteReference with numeric id.
    • Required w:idExactly one Word-ns numeric id is required; extras fail closed.
    • Related markers closedAttributed footnoteRef and endnoteReference remain fail-closed.
  113. v0.186.0
    • Improved
    • Writer
    • Documentation

    Bullet numberingChange becomes reviewable

    Phase 0 fidelity: current-level bullet w:numberingChange originals (ST_NumberFormat nfc 23) import as atomic bullet-list review cards with accept/reject and native round-trip. Picture formats, missing numId, and malformed originals stay fail-closed.

    • nfc 23 admittedCurrent-level bullet originals become reviewable bullet-list changes.
    • Accept / rejectReject restores disc/circle/square from the prior bullet suffix.
    • Picture stays closedPicture numbering and malformed originals remain fail-closed.
  114. v0.185.0
    • Improved
    • Writer
    • Documentation

    Companion move-range admits two-level nested tables

    Phase 0 fidelity: companion w:move*Range* bookmarks now admit up to two nesting levels of move-path tables (three w:tbl ancestors), including under one simple w:sdt. Four or more move-path tables stay fail-closed. This closes the R0 move-range nesting family.

    • Two-level nestOuter + mid + inner move-path tables that all contain the move are admitted.
    • SDT wrap includedThe same depth works under one simple content control.
    • Four-deep stays closedFour or more move-path tables remain fail-closed.
  115. v0.184.0
    • Improved
    • Writer
    • Documentation

    Companion move-range admits SDT-wrapped nested tables

    Phase 0 fidelity: companion w:move*Range* bookmarks now admit when one simple w:sdt wraps a one-level nested move-path table. Deeper nesting and nested/sibling SDT stay fail-closed.

    • SDT + one-level nestOne simple content control may wrap outer + inner move-path tables.
    • Deeper nesting stays closedThree or more move-path tables remain fail-closed.
    • Nested SDT stays closedNested or sibling SDT wrappers stay rejected.
  116. v0.183.0
    • Improved
    • Writer
    • Documentation

    Companion move-range admits nested tables beside the move

    Phase 0 fidelity: companion w:move*Range* bookmarks now admit when a flat, untracked text-only nested w:tbl sits beside the move in the same cell. Deeper nesting, SDT+nested-table combinations, and tracked/rich content inside the beside nested table stay fail-closed.

    • Beside nested w:tblSame-cell text-only nested tables no longer block companion bookmarks.
    • Tracked beside content stays closedTracked or rich content inside the beside nested table remains fail-closed.
    • Deeper nesting still out of scopeDeeper nesting and SDT+nested-table combinations stay rejected.
  117. v0.182.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF copies title onto Document StructElem /Alt

    Phase 0 fidelity: browser document PDF export copies the document title onto Document StructElem /Alt alongside the Info dict title and DisplayDocTitle. Catalog / StructElem /Lang and Span BDC /Lang from 0.179.0–0.181.0 stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Document /Alt from titleStructTree Document carries the same title as the Info dict.
    • Language stack unchangedCatalog / StructElem /Lang and Span BDC /Lang stay as before.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  118. v0.181.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF writes /Lang on Span marked content

    Phase 0 fidelity: browser document PDF export seeds document language before vector paint and writes /Lang on Span BDC together with ActualText / MCID. Catalog and StructElem /Lang from 0.179.0–0.180.0 stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Span BDC /LangContent streams carry language when language is seeded before vector paint.
    • Catalog and StructElem unchangedputCatalog and StructElem /Lang from 0.179.0–0.180.0 stay as before.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  119. v0.180.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF writes catalog /Lang beyond jsPDF enum

    Phase 0 fidelity: browser document PDF export writes catalog /Lang via putCatalog for any normalized language tag, replacing jsPDF setLanguage which silently skips tags outside its enum (for example yue). StructElem /Lang from 0.179.0 stays unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Catalog /Lang via putCatalogNormalized tags are written once on the catalog, including beyond the jsPDF enum.
    • StructElem /Lang unchangedOutline, /P, Span, and Document language from 0.179.0 stay as before.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  120. v0.179.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF copies /Lang onto StructElems

    Phase 0 fidelity: browser document PDF export copies the document language onto outline, page /P, and Span StructElems as /Lang when set (Document already carried /Lang). H → P → Span nesting from 0.178.0 stays unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • /Lang on outline, /P, and SpanStructure elements inherit the document language tag for AT consumers.
    • Nesting unchangedH → P → Span under H1–H6 and unmatched page /P wrappers stay as before.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  121. v0.178.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF nests H1–H6 Spans under child /P

    Phase 0 fidelity: browser document PDF export nests page-matched vector-run Span MCIDs under H1–H6 outline roles through a child /P StructElem (H → P → Span with /Pg). Outline-level /P roles keep Spans as direct kids. Page-level /P wrappers for unmatched Spans from 0.177.0 stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • H → P → Span under H1–H6Heading outline roles wrap page-matched Spans in a child /P with /Pg.
    • Outline /P keeps direct SpansOutline-level /P roles and unmatched page /P wrappers stay as before.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  122. v0.177.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF wraps unmatched Spans under page /P

    Phase 0 fidelity: browser document PDF export nests unmatched vector-run Span MCIDs under a page-level /P StructElem (Document → P → Span with /Pg) when the page has no outline role. Page-matched Spans under H1–H6/P from 0.172.0 stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Page-level /P for unmatched SpansDocument kids are outline roots plus page /P wrappers, not bare Spans.
    • Outline Span nesting unchangedPage-matched Spans still nest under the last outline role on that page.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  123. v0.176.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF deepens MarkInfo, Tabs, and outline /Pg

    Phase 0 fidelity: browser document PDF export sets catalog /MarkInfo << /Marked true /Suspects false >>, catalog /Tabs /S for structure reading order, and outline H1–H6/P StructElem /Pg page refs when available. Layout Artifacts and Span nesting from 0.175.0 stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • MarkInfo Suspects falseCatalog /MarkInfo now includes /Suspects false alongside /Marked true.
    • Catalog Tabs /SCatalog /Tabs /S asks tagged-PDF consumers to follow structure order.
    • Outline StructElem /PgH1–H6/P outline roles carry /Pg page refs when page objects are available.
  124. v0.175.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF uses Layout Artifact BDC for decorations

    Phase 0 fidelity: browser document PDF export upgrades Writer highlight, underline, and paragraph-border Artifacts from bare /Artifact BMC to /Artifact << /Type /Layout >> BDC … EMC (still no MCID / StructElem). Span nesting and outline role nesting stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Layout Artifact BDCHighlights, underlines, and paragraph borders paint inside /Artifact << /Type /Layout >> BDC … EMC.
    • No MCID for ArtifactsDecorative Artifacts stay out of ParentTree / StructElem content links.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  125. v0.174.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF marks decorative paint as Artifacts

    Phase 0 fidelity: browser document PDF export wraps Writer highlight, underline, and paragraph-border vector paint in /Artifact BMC … EMC (no MCID / StructElem). Span nesting and outline role nesting stay unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Artifact BMC for decorationsHighlights, underlines, and paragraph borders paint inside /Artifact BMC … EMC.
    • No MCID for ArtifactsDecorative Artifacts stay out of ParentTree / StructElem content links.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  126. v0.173.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF nests outline roles by level

    Phase 0 fidelity: browser document PDF export nests outline-derived H1–H6/P StructElems by outline level under parent /K (same stack as bookmarks; Document kids are root roles only). Page-matched Span nesting from 0.172.0 is unchanged. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Outline role /K nestingH2 under H1 via /K using the bookmark level stack; Document /K lists root roles only.
    • Span nesting unchangedPage-matched Span MCIDs still attach to the last outline role on that page.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  127. v0.172.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF nests Span MCIDs under outline roles

    Phase 0 fidelity: browser document PDF export nests page-matched vector-run Span MCIDs under outline-derived H1–H6/P StructElem /K (last outline role on that page; unmatched Spans stay Document kids). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Outline /K nestingPage-matched Span StructElems become kids of the last outline role on that page via /K and /P.
    • Unmatched pages stay flatSpans on pages without an outline role remain Document kids.
    • PDF/UA certification stays out of scopeRemaining decorative art borders and full PDF/UA certification are not claimed.
  128. v0.171.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints cabins art borders

    Phase 0 fidelity: browser document PDF export paints Writer cabins art paragraph borders as house silhouettes (triangle roof + rectangular body with a door notch) along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • House silhouettescabins draws a triangle roof + rectangular body with a door notch along the measured edge.
    • Explicit art admissioncabins is admitted into the vector border plan; not a silent skip.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  129. v0.170.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints birds and birdsFlight art borders

    Phase 0 fidelity: browser document PDF export paints Writer birds / birdsFlight art paragraph borders as perched and swept-flight bird silhouettes along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Perched and flight silhouettesbirds draws a perched side-profile; birdsFlight draws a swept dual-wing flight pose.
    • Explicit art admissionbirds / birdsFlight are admitted into the vector border plan; not a silent skip.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  130. v0.169.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints bats art borders

    Phase 0 fidelity: browser document PDF export paints Writer bats art paragraph borders as winged silhouette motifs along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Winged silhouettesbats draws closed head + dual-wing polyline motifs along the measured edge.
    • Explicit art admissionbats is admitted into the vector border plan; not a silent skip.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  131. v0.168.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints basicWide art borders

    Phase 0 fidelity: browser document PDF export paints Writer basicWideInline / basicWideMidline / basicWideOutline art paragraph borders as thick geometric rails along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Wide geometric railsbasicWideOutline draws dual thick rails; basicWideMidline one thick rail; basicWideInline thick plus thin outer companion.
    • Explicit art admissionbasicWideInline / basicWideMidline / basicWideOutline are admitted into the vector border plan; not a silent skip.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  132. v0.167.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints basicThinLines art borders

    Phase 0 fidelity: browser document PDF export paints Writer basicThinLines art paragraph borders as three parallel hairlines along the measured edge. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Parallel hairlinesbasicThinLines draws three spaced hairlines along the measured edge.
    • Explicit art admissionbasicThinLines is admitted into the vector border plan; not a silent skip.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  133. v0.166.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints basicBlackDashes and basicWhiteDashes art borders

    Phase 0 fidelity: browser document PDF export paints Writer basicBlackDashes / basicWhiteDashes art paragraph borders as discrete dash stamps (black densifies with a parallel companion dash). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Discrete dash stampsbasicBlackDashes / basicWhiteDashes place spaced dashes along the measured edge.
    • Black densifies; white outlinesBlack adds a parallel companion dash; white stays outline-only with wider spacing.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  134. v0.165.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints basicBlackDots and basicWhiteDots art borders

    Phase 0 fidelity: browser document PDF export paints Writer basicBlackDots / basicWhiteDots art paragraph borders as discrete circular stamps (black densifies with a concentric inner circle). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Discrete circular stampsbasicBlackDots / basicWhiteDots place spaced circles along the measured edge.
    • Black densifies; white outlinesBlack adds a concentric inner circle; white stays outline-only with wider spacing.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  135. v0.164.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints basicBlackSquares and basicWhiteSquares art borders

    Phase 0 fidelity: browser document PDF export paints Writer basicBlackSquares / basicWhiteSquares art paragraph borders as discrete square stamps (black densifies with nested square + diagonals). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Discrete square stampsbasicBlackSquares / basicWhiteSquares place spaced squares along the measured edge.
    • Black densifies; white outlinesBlack adds a nested square and diagonals; white stays outline-only with wider spacing.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  136. v0.163.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints moons art borders

    Phase 0 fidelity: browser document PDF export paints Writer moons art paragraph borders as explicit crescent motifs. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Crescent moon motifsmoons strokes closed outer-arc + inner-arc polylines along the measured edge.
    • Alternating crescent phaseAdjacent moons flip cut direction along the edge for a phased look.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  137. v0.162.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints marquee and marqueeToothed art borders

    Phase 0 fidelity: browser document PDF export paints Writer marquee / marqueeToothed art paragraph borders as explicit rectangle motifs (marqueeToothed alternates perpendicular offset). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Marquee rectangle motifsmarquee strokes small rectangles along the measured edge.
    • Toothed marquee offsetmarqueeToothed alternates a perpendicular offset for a toothed look.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  138. v0.161.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints ovals and rings art borders

    Phase 0 fidelity: browser document PDF export paints Writer ovals / rings art paragraph borders as explicit ellipse motifs (rings nests denser inner ellipses). Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Oval ellipse motifsovals strokes ellipses along the measured edge.
    • Nested ring ellipsesrings densifies spacing and paints an inner nested ellipse.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  139. v0.160.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints triangles / triangle1 / triangle2 art borders

    Phase 0 fidelity: browser document PDF export paints Writer triangles / triangle1 / triangle2 art paragraph borders as explicit closed isosceles triangles. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • Closed isosceles trianglestriangles strokes closed isosceles triangles along the measured edge.
    • triangle1 denser, triangle2 invertedtriangle1 uses a denser period; triangle2 inverts amplitude.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  140. v0.159.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints sawtooth and sharksTeeth art borders

    Phase 0 fidelity: browser document PDF export paints Writer sawtooth / sharksTeeth art paragraph borders as explicit triangular teeth polylines. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • sawtooth triangular teethsawtooth strokes one-sided triangular teeth along the measured edge.
    • sharksTeeth denser teethsharksTeeth uses a denser period and flips amplitude on bottom/right edges.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  141. v0.158.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints zigZag art borders and DisplayDocTitle

    Phase 0 fidelity: browser document PDF export paints Writer zigZag / zigZagStitch art paragraph borders as explicit chevron polylines and sets catalog /ViewerPreferences << /DisplayDocTitle true >>. Remaining decorative art borders and full PDF/UA certification remain out of scope.

    • zigZag and zigZagStitch chevronsThose art styles stroke chevron polylines along the measured edge.
    • DisplayDocTitle preferenceTitled catalogs advertise /DisplayDocTitle true for viewer chrome.
    • Remaining art borders stay out of scopeApples, vines, and other decorative art borders, plus full PDF/UA certification, are not claimed.
  142. v0.157.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints 3D and inset/outset paragraph borders

    Phase 0 fidelity: browser document PDF export paints Writer threeDEmboss / threeDEngrave / inset / outset paragraph borders as explicit dual-tone highlight+shadow offsets (not silent single-line approximations). Art borders and full PDF/UA certification remain out of scope.

    • Dual-tone 3D emboss and engravethreeDEmboss and threeDEngrave paint highlight and shadow offsets along the measured edge.
    • inset and outset reliefinset follows the engrave lighting; outset follows emboss lighting.
    • Art borders stay out of scopeDecorative art borders and PDF/UA certification are not claimed.
  143. v0.156.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints wave and doubleWave paragraph borders

    Phase 0 fidelity: browser document PDF export paints Writer wave and doubleWave paragraph borders as explicit sine polylines (not silent straight-line approximations). Art and 3D borders and full PDF/UA certification remain out of scope.

    • Explicit wave polylineswave borders stroke a sine polyline along the measured edge.
    • doubleWave as parallel polylinesdoubleWave paints two offset sine polylines for the same edge.
    • Art and 3D borders stay out of scopeArt borders, 3D emboss/engrave, and PDF/UA certification are not claimed.
  144. v0.155.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF links vector text through ParentTree and MCID

    Phase 0 fidelity: browser document PDF export links vector-run /Span ActualText through page-local /MCID, page /StructParents, and StructTreeRoot /ParentTree Span kids. Outline role stubs keep empty /K. Full PDF/UA certification and art/wave/3D borders remain out of scope.

    • MCID on vector ActualText spansEach vector text run emits /Span with /ActualText and a page-local /MCID.
    • ParentTree and StructParentsPages set /StructParents; StructTreeRoot emits a /ParentTree number tree of Span kids.
    • Full PDF/UA certification stays out of scopeOutline role stubs keep empty /K; PDF/UA certification and art/wave/3D borders are not claimed.
  145. v0.154.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF adds a StructTreeRoot stub for outline roles

    Phase 0 fidelity: browser document PDF export adds a catalog-linked StructTreeRoot stub (Document plus outline-derived H1–H6/P kids with empty /K). ParentTree / MCID content links, full PDF/UA certification, and art/wave/3D borders remain out of scope.

    • Catalog-linked StructTreeRoot stubExported PDFs emit a StructTreeRoot with a Document parent and outline-derived heading or paragraph kids.
    • Outline levels map to structure rolesBookmark outline levels become H1–H6 or P roles in the stub tree.
    • Full PDF/UA content links stay out of scopeKids keep empty /K; ParentTree, MCIDs, and PDF/UA certification are not claimed.
  146. v0.153.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF adds MarkInfo and ActualText for vector text

    Phase 0 fidelity: browser document PDF export deepens the accessibility bootstrap with catalog /MarkInfo << /Marked true >> and /Span ActualText around vector text runs. A full PDF/UA structure tree and art/wave/3D borders remain out of scope.

    • Catalog MarkInfo marked flagExported PDFs set /MarkInfo << /Marked true >> on the catalog for tagged-PDF consumers.
    • ActualText on vector text runsVector text paints wrap each run in a /Span ActualText marked content sequence.
    • Full PDF/UA tree stays out of scopeThis slice deepens the tagged bootstrap only; a StructTreeRoot / full PDF/UA structure tree is not claimed.
  147. v0.152.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints Writer between and bar paragraph borders

    Phase 0 fidelity: browser document PDF export paints Writer between and bar paragraph border edges as vector strokes (same common styles as 0.151.0), mapping between→bottom and bar→left at measured paragraph geometry. Art/wave/3D borders and full PDF/UA structure trees remain out of scope.

    • Between and bar edges in PDF exportMeasured paragraph boxes stroke between and bar edges with the same common styles as top/left/bottom/right.
    • Geometry mapping for between and barBetween maps to the bottom edge and bar maps to the left edge at measured paragraph geometry.
    • Art borders and PDF/UA stay out of scopeThis slice deepens vector paint for between/bar only; art/wave/3D borders and full PDF/UA structure trees are not claimed.
  148. v0.151.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints Writer paragraph borders as vector strokes

    Phase 0 fidelity: browser document PDF export paints Writer paragraph borders as vector strokes (top/left/bottom/right; single/thick/double/dashed/dotted) from data-office-paragraph-borders or CSS after clearing border strips on the raster canvas. Art/wave/3D borders, between/bar edges, and full PDF/UA structure trees remain out of scope.

    • Paragraph border vector strokes in PDF exportMeasured paragraph boxes stroke top, left, bottom, and right PDF paths at the same page geometry as the vector text layer.
    • Common border styles admittedSingle, thick, double, dashed, and dotted edges resolve from data-office-paragraph-borders or CSS.
    • Art borders and PDF/UA stay out of scopeThis slice deepens vector paint for common paragraph edges only; art/wave/3D borders, between/bar edges, and full PDF/UA structure trees are not claimed.
  149. v0.150.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints Writer highlights as vector fills

    Phase 0 fidelity: browser document PDF export paints Writer text highlights as vector fill strips from data-office-highlight or matching CSS backgrounds in the portable highlight palette, under the searchable vector text layer. Paragraph borders and full PDF/UA structure trees remain out of scope.

    • Highlight vector fills in PDF exportMeasured highlighted runs fill PDF rectangles at the same page geometry as the vector text layer.
    • Writer and CSS highlight sourcesHighlight colors resolve from data-office-highlight or CSS backgrounds that match the portable palette.
    • Borders and PDF/UA stay out of scopeThis slice deepens vector paint for highlights only; paragraph borders and full PDF/UA structure trees are not claimed.
  150. v0.149.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF paints Writer underlines as vector paths

    Phase 0 fidelity: browser document PDF export paints Writer underlines as vector paths (single / double / thick) from data-office-underline-*, <u>, or CSS decoration after clearing a thin strip under measured runs. Broader borders and full PDF/UA structure trees remain out of scope.

    • Underline vector paths in PDF exportMeasured underlined runs stroke single, double, or thick PDF paths at the same page geometry as the vector text layer.
    • Writer and CSS underline sourcesUnderline plans resolve from data-office-underline-* attributes, <u> marks, or CSS text-decoration.
    • Borders and PDF/UA stay out of scopeThis slice deepens vector paint for underlines only; paragraph borders and full PDF/UA structure trees are not claimed.
  151. v0.148.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Document PDF bookmarks include Writer outline-level paragraphs

    Phase 0 fidelity: browser document PDF bookmarks now collect p[data-office-outline-level] paragraphs alongside h1–h6, with level nesting. Full PDF/UA structure trees remain out of scope.

    • Outline-level paragraphs in PDF bookmarksWriter outline-level paragraphs (p[data-office-outline-level]) join h1–h6 in the exported PDF outline.
    • Level nesting preservedOutline levels nest in the PDF bookmark tree the same way Writer outline levels nest in the editor.
    • Full PDF/UA structure stays out of scopeThis slice deepens the title/lang/heading outline bootstrap only; a full PDF/UA structure tree is not claimed.
  152. v0.147.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty separator glyphs in revision bodies

    Phase 0 fidelity: whole-paragraph mark, paragraph-break, and text-move revision bodies now admit attribute-free empty w:separator and w:continuationSeparator CT_Empty glyphs. The note-adjacent empty glyphs family is complete through 0.147.0; attributed separators and attributed note refs stay fail-closed.

    • Empty separator glyphs in revision bodiesAttribute-free empty w:separator and w:continuationSeparator glyphs are admitted across whole-paragraph mark, paragraph-break, and text-move bodies.
    • Note-adjacent empty glyphs family completeThe glyphs complete the attribute-free CT_Empty note-adjacent set with soft breaks, tabs, hyphens, field glyphs, footnoteRef, endnoteRef, and annotationRef through 0.147.0.
    • Attributed separators and note refs stay fail-closedAttributed separators and attributed footnoteRef / endnoteRef / annotationRef remain diagnostics-only.
  153. v0.146.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty annotationRef glyphs in revision bodies

    Phase 0 fidelity: whole-paragraph mark, paragraph-break, and text-move revision bodies now admit attribute-free empty w:annotationRef CT_Empty glyphs. Attributed annotationRef and separators stay fail-closed.

    • Empty annotationRef in revision bodiesAttribute-free empty w:annotationRef glyphs are admitted across whole-paragraph mark, paragraph-break, and text-move bodies.
    • Shared mark, break, and move admissionThe glyph joins the existing attribute-free CT_Empty admission set used by soft breaks, tabs, hyphens, field glyphs, footnoteRef, and endnoteRef.
    • Attributed annotationRef and separators stay fail-closedAttributed annotationRef and separators remain diagnostics-only.
  154. v0.145.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty endnoteRef glyphs in revision bodies

    Phase 0 fidelity: whole-paragraph mark, paragraph-break, and text-move revision bodies now admit attribute-free empty w:endnoteRef CT_Empty glyphs. Attributed endnoteRef, endnoteReference with id, annotationRef, and separators stay fail-closed.

    • Empty endnoteRef in revision bodiesAttribute-free empty w:endnoteRef glyphs are admitted across whole-paragraph mark, paragraph-break, and text-move bodies.
    • Shared mark, break, and move admissionThe glyph joins the existing attribute-free CT_Empty admission set used by soft breaks, tabs, hyphens, field glyphs, and footnoteRef.
    • Attributed and sibling note glyphs stay fail-closedAttributed endnoteRef, endnoteReference with id, annotationRef, and separators remain diagnostics-only.
  155. v0.144.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty footnoteRef glyphs in revision bodies

    Phase 0 fidelity: whole-paragraph mark, paragraph-break, and text-move revision bodies now admit attribute-free empty w:footnoteRef CT_Empty glyphs. Attributed footnoteRef, footnoteReference with id, endnoteRef, annotationRef, and separators stay fail-closed.

    • Empty footnoteRef in revision bodiesAttribute-free empty w:footnoteRef glyphs are admitted across whole-paragraph mark, paragraph-break, and text-move bodies.
    • Shared mark, break, and move admissionThe glyph joins the existing attribute-free CT_Empty admission set used by soft breaks, tabs, hyphens, and field glyphs.
    • Attributed and sibling note glyphs stay fail-closedAttributed footnoteRef, footnoteReference with id, endnoteRef, annotationRef, and separators remain diagnostics-only.
  156. v0.143.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits omitted w:ilvl as OOXML default level 0 on numbering revisions

    Phase 0 fidelity: numbering revisions admit omitted w:ilvl as OOXML default level 0 when w:numId and a supported w:numberingChange are present. Missing numId, current-level bullet/picture formats, and malformed originals stay fail-closed.

    • Omitted w:ilvl defaults to level 0CT_NumPr without an explicit w:ilvl imports as reviewable numbering at the OOXML default level.
    • Requires numId and supported numberingChangeAdmission still requires exactly one w:numId plus a supported w:numberingChange marker on the paragraph.
    • Missing numId and bullet/picture stay fail-closedMissing numId, current-level bullet/picture formats, and malformed originals remain diagnostics-only.
  157. v0.142.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits relationship-free attribute-only tblpPr table-formatting priors

    Phase 0 fidelity: reviewable w:tblPrChange now admits relationship-free attribute-only w:tblpPr priors (known anchors/specs, bounded twips, optional FromText). Invalid or relationship-bound tblpPr stays fail-closed.

    • Attribute-only float priorsKnown anchors/specs, bounded twips, and optional FromText distances round-trip as reviewable table-formatting float snapshots.
    • Live track-changesEditing table float under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Invalid tblpPr stays fail-closedMalformed, relationship-bound, or out-of-bound tblpPr priors stay diagnostics-only instead of inventing review UI.
  158. v0.141.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits opaque sibling ST_NumberFormat values in multi-level numbering originals

    Phase 0 fidelity: multi-level numberingChange w:original strings may carry opaque sibling ST_NumberFormat nfc values while the current w:ilvl stays common decimal, letter, or Roman (nfc 0–4). Current-level bullet and picture formats stay fail-closed.

    • Opaque sibling formats in w:originalSibling %[ilvl]:[start]:[nfc]:[suff] segments may round-trip non-common ST_NumberFormat values as opaque prior text.
    • Current ilvl stays common nfc 0–4The paragraph w:ilvl segment must remain decimal, letter, or Roman for the change to stay reviewable.
    • Current-level bullet/picture stay fail-closedBullet, picture, and other non-common formats at the current level remain diagnostics-only.
  159. v0.140.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits one-level nested-table companion move-range bookmarks

    Phase 0 fidelity: companion w:move*Range* bookmarks are admitted on import when move ancestry is at most two w:tbl elements that both contain the supported text-only move. Deeper nesting, a nested table beside the move, and SDT combined with nested tables stay fail-closed.

    • One-level nested-table companionsBody-level move*Range* Start/End around an outer table that contains one nested table with the supported move keep matching bookmarks.
    • Move ancestry ≤2 tablesBoth enclosing tables must contain the move; ancestry deeper than two tables stays closed.
    • Deeper, beside-move, and SDT+nested stay fail-closedDeeper nesting, nested tables beside the move, and SDT combined with nested tables stay diagnostics-only.
  160. v0.139.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits simple SDT-wrapped companion move-range bookmarks

    Phase 0 fidelity: companion w:move*Range* bookmarks are admitted on import when at most one w:sdt contains the supported text-only move (paragraph or table) and may carry w:sdtPr chrome. Nested SDT, SDT beside the move, nested tables, and section sandwiches stay fail-closed.

    • Simple SDT companionsBody-level move*Range* Start/End around one simple w:sdt keep matching bookmarks with the text move.
    • sdtPr chrome allowedThe admitted SDT may carry w:sdtPr property chrome beside w:sdtContent.
    • Nested SDT and nested tables stay fail-closedNested SDT, SDT beside the move, nested tables, and section sandwiches stay diagnostics-only.
  161. v0.138.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits multi-cell table companion move-range bookmarks

    Phase 0 fidelity: companion w:move*Range* bookmarks are admitted on import when one w:tbl encloses a supported text-only move in exactly one w:tc and sibling cells hold only untracked text-only content. Nested tables, SDT, section sandwiches, and tracked revisions in sibling cells stay fail-closed.

    • Multi-cell table companionsBody-level move*Range* Start/End around one multi-cell table keep matching bookmarks with the text move.
    • Untracked sibling-cell text onlySibling cells may hold only untracked text-only content beside the one supported move cell.
    • Nested, SDT, and tracked sibling paths stay fail-closedNested tables, SDT sandwiches, section sandwiches, and tracked revisions in sibling cells stay diagnostics-only.
  162. v0.137.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Compare generates companion move-range bookmarks for text-only moves

    Phase 0 fidelity: Compare / same-document text-only moves now emit companion w:move*Range* bookmarks on export with deterministic rangeId/rangeName on inferred move pairs. Section-crossing and table/complex Compare moves stay fail-closed. Multi-cell, nested-table, and SDT import sandwiches remain for a later slice.

    • Companion bookmarks on exportAdmitted Compare / same-document text-only inferred moves emit matching w:move*Range* Start/End bookmarks with the move wrappers.
    • Deterministic range identitiesInferred move pairs receive stable decimal rangeId values and Word-style rangeName values such as move0.
    • Complex Compare paths stay fail-closedSection-crossing and table/complex Compare moves stay diagnostics-only; multi-cell, nested, and SDT import sandwiches remain later work.
  163. v0.136.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits single-cell table companion move-range bookmarks

    Phase 0 fidelity: companion w:move*Range* bookmarks are admitted on import when body-level Start/End enclose one w:tbl containing a supported text-only move in exactly one w:tc. Multi-cell sibling-cell text, nested tables, SDT sandwiches, section sandwiches, and unpaired markers stay fail-closed. Compare move-range generation is not in this slice.

    • Single-cell table companionsBody-level move*Range* Start/End around one single-cell table keep matching bookmarks with the text move.
    • One supported cell onlyThe enclosed w:tbl must contain a supported text-only move in exactly one w:tc.
    • Broader sandwiches stay fail-closedMulti-cell sibling-cell text, nested tables, SDT, section sandwiches, unpaired markers, and Compare generation stay diagnostics-only.
  164. v0.135.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits picture-only paragraph bodies for mark and break revisions

    Phase 0 fidelity: whole-paragraph mark wrappers and paragraph-break neighbors now admit picture-only bodies when the only content is supported inline DrawingML pictures (wp:inline with a resolved image r:embed). Visible text is no longer required. Empty or malformed drawings, floating anchors, and unresolved embeds stay fail-closed.

    • Picture-only bodies admittedSupported wp:inline image embeds alone satisfy whole-paragraph mark and paragraph-break body admission without visible text.
    • Mark wrappers and break neighborsThe same picture-only rules apply to whole-paragraph mark wrappers and eligible paragraph-break merge/split neighbors.
    • Empty drawings stay fail-closedEmpty or malformed drawings, floating anchors, and unresolved embeds remain diagnostics-only.
  165. v0.134.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits untracked inline picture siblings beside mark wrappers

    Phase 0 fidelity: whole-paragraph mark revision bodies now admit untracked supported inline DrawingML picture siblings (wp:inline with a resolved image r:embed) beside matching w:ins / w:del wrappers, mirroring the 0.130 text-sibling path. Empty or malformed drawings, floating anchors, unresolved embeds, and picture-only mark bodies stay fail-closed. Paragraph-break bodies already admitted inline pictures through 0.133.0.

    • Untracked inline picture siblingsResolved wp:inline image embeds may sit beside matching mark wrappers as one atomic whole-paragraph revision.
    • Mirrors the 0.130 text-sibling pathSibling admission beside wrappers follows the same shape as untracked text-only runs from 0.130.
    • Picture-only bodies stay fail-closedEmpty or malformed drawings, floating anchors, unresolved embeds, and picture-only mark bodies remain diagnostics-only.
  166. v0.133.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits inline DrawingML pictures in paragraph-mark revisions

    Phase 0 fidelity: whole-paragraph mark and paragraph-break revision bodies now admit supported inline DrawingML pictures (wp:inline with a resolved image r:embed) alongside visible text. Untracked drawing siblings, floating anchors, empty or malformed drawings, unresolved embeds, and picture-only paragraphs stay fail-closed.

    • Inline DrawingML picture admissionResolved wp:inline image embeds import as reviewable revision content next to visible text.
    • Paragraph-break bodies includedThe same inline-picture rules apply to eligible paragraph-break merge/split neighbors.
    • Untracked siblings and anchors stay fail-closedUntracked drawing siblings, floating anchors, unresolved embeds, and picture-only paragraphs remain diagnostics-only.
  167. v0.132.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits safe external hyperlinks in paragraph-mark revisions

    Phase 0 fidelity: whole-paragraph mark and paragraph-break revision bodies now admit safe relationship-bound external hyperlinks (http/https/mailto with a resolved r:id) alongside relationship-free internal links. Unresolved or unsafe targets, drawings, and move-body relationship-bound links stay fail-closed.

    • Safe external hyperlink admissionResolved http/https/mailto relationship targets import as reviewable text-only revision content.
    • Paragraph-break bodies includedThe same external-link rules apply to eligible paragraph-break merge/split neighbors.
    • Unsafe targets stay fail-closedMissing r:id targets, javascript/file/ftp schemes, drawings, and move-body links remain diagnostics-only.
  168. v0.131.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits cross-section companion move-range bookmarks

    Phase 0 fidelity: companion w:move*Range* bookmarks for supported text-only moveFrom/moveTo pairs now admit when the destination lives across a section break. Sandwiches that enclose a section break with the move, table-spanning ranges, and unpaired markers stay fail-closed.

    • Cross-section companion bookmarksDestination sides in a later section keep matching move*Range* bookmarks with the text move.
    • Per-side sandwich rules unchangedExtra siblings, tables, and section breaks inside one sandwich remain fail-closed.
    • Unpaired markers stay diagnosedUnpaired and table-spanning range markers continue to report docx.revisions.move-range.
  169. v0.130.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits untracked text siblings in whole-paragraph mark revisions

    Phase 0 fidelity: whole-paragraph mark revision bodies now admit untracked text-only sibling runs beside matching w:ins / w:del wrappers, including soft breaks and the existing attribute-free empty glyph set. Empty/rPr-only untracked runs remain admitted. Drawings and relationship-bound hyperlinks stay fail-closed; accept/reject stays atomic for the whole paragraph.

    • Untracked text-only sibling runsVisible untracked text beside matching body wrappers imports and exports as one whole-paragraph review item.
    • Empty and rPr-only untracked runs keptThe prior empty/rPr-only untracked sibling admission remains covered by the same text-only run rules.
    • Drawings and relationship-bound links stay fail-closedDrawings and relationship-bound hyperlinks in mixed paragraph-mark bodies remain diagnostics-only.
  170. v0.129.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty short date-field glyphs in revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split, whole-paragraph mark, and text-move revision bodies now admit relationship-free empty w:dayShort, w:monthShort, and w:yearShort glyphs alongside soft breaks, tabs, carriage returns, last-rendered page breaks, page-number and long date-field glyphs, hyphens, hyperlinks, and bookmarks. Attributed or non-empty short date-field glyphs stay fail-closed.

    • Empty short date-field glyphs in revision bodiesEmpty relationship-free w:dayShort, w:monthShort, and w:yearShort glyphs are admitted across paragraph-break, paragraph-mark, and move bodies.
    • Shared admission with page-number and long date fieldsShort date-field glyphs join the existing soft-break, tab, carriage-return, last-rendered page break, page-number, long date-field, hyphen, hyperlink, and bookmark admission set.
    • Attributed short date-field glyphs stay fail-closedAttributed or non-empty short date-field glyphs and relationship-bound shapes stay diagnostics-only.
  171. v0.128.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty page-number and date-field glyphs in revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split, whole-paragraph mark, and text-move revision bodies now admit relationship-free empty w:pgNum, w:dayLong, w:monthLong, and w:yearLong glyphs alongside soft breaks, tabs, carriage returns, last-rendered page breaks, hyphens, hyperlinks, and bookmarks. Attributed or non-empty page-number and date-field glyphs stay fail-closed.

    • Empty page-number and date-field glyphs in revision bodiesEmpty relationship-free w:pgNum, w:dayLong, w:monthLong, and w:yearLong glyphs are admitted across paragraph-break, paragraph-mark, and move bodies.
    • Shared admission with last-rendered page breaksPage-number and date-field glyphs join the existing soft-break, tab, carriage-return, last-rendered page break, hyphen, hyperlink, and bookmark admission set.
    • Attributed page-number and date-field glyphs stay fail-closedAttributed or non-empty page-number and date-field glyphs and relationship-bound shapes stay diagnostics-only.
  172. v0.127.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty last-rendered page-break glyphs in revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split, whole-paragraph mark, and text-move revision bodies now admit relationship-free empty w:lastRenderedPageBreak glyphs alongside soft breaks, tabs, carriage returns, hyphens, hyperlinks, and bookmarks. Attributed or non-empty w:lastRenderedPageBreak stays fail-closed.

    • Empty w:lastRenderedPageBreak in revision bodiesEmpty relationship-free last-rendered page-break glyphs are admitted across paragraph-break, paragraph-mark, and move bodies.
    • Shared admission with carriage returnsLast-rendered page breaks join the existing soft-break, tab, carriage-return, hyphen, hyperlink, and bookmark admission set.
    • Attributed w:lastRenderedPageBreak stays fail-closedAttributed or non-empty w:lastRenderedPageBreak glyphs and relationship-bound shapes stay diagnostics-only.
  173. v0.126.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits empty carriage-return glyphs in revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split, whole-paragraph mark, and text-move revision bodies now admit relationship-free empty w:cr glyphs alongside soft breaks, tabs, hyphens, hyperlinks, and bookmarks. Attributed or non-empty w:cr stays fail-closed.

    • Empty w:cr in revision bodiesEmpty relationship-free carriage-return glyphs are admitted across paragraph-break, paragraph-mark, and move bodies.
    • Shared admission with tabs and hyphensCarriage returns join the existing soft-break, tab, hyphen, hyperlink, and bookmark admission set.
    • Attributed w:cr stays fail-closedAttributed or non-empty w:cr glyphs and relationship-bound shapes stay diagnostics-only.
  174. v0.125.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer admits tab and hyphen glyphs in revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split, whole-paragraph mark, and text-move revision bodies now admit relationship-free empty w:tab, w:noBreakHyphen, and w:softHyphen glyphs alongside soft breaks, hyperlinks, and bookmarks. Attributed or non-empty glyphs stay fail-closed.

    • Tabs and hyphens in revision bodiesEmpty relationship-free tab and hyphen glyphs are admitted across paragraph-break, paragraph-mark, and move bodies.
    • Shared admission with soft breaks and linksThe new glyphs join the existing soft-break, hyperlink, and bookmark admission set.
    • Attributed glyphs stay fail-closedAttributed or non-empty tab/hyphen glyphs and relationship-bound shapes stay diagnostics-only.
  175. v0.124.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer expands eligible paragraph-break revision bodies

    Phase 0 fidelity: eligible paragraph-break merge/split revisions now admit soft breaks, empty/rPr-only runs, relationship-free internal hyperlinks, and relationship-free bookmarks on both sides, matching whole-paragraph mark admission. Relationship-bound or spoofed shapes stay fail-closed.

    • Richer paragraph-break bodiesSoft breaks, bookmarks, and relationship-free internal hyperlinks are admitted for merge/split review.
    • Aligned with paragraph-mark admissionParagraph-break body rules now match the whole-paragraph mark text-only admission set.
    • Relationship-bound shapes stay fail-closedRelationship-bound or spoofed links/bookmarks, drawings, and tracked wrappers stay diagnostics-only.
  176. v0.123.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes bounded multi-level numbering revisions reviewable

    Phase 0 fidelity: relationship-free numberingChange originals with contiguous sibling %[ilvl]:[start]:[nfc]:[suff] segments (2-9 common decimal/letter/Roman levels including the paragraph ilvl) import as reviewable ordered-list numbering revisions with accept/reject, contiguous grouping, and native export/reopen.

    • Multi-level numbering originalsContiguous sibling-level originals round-trip as reviewable ordered-list numbering revisions.
    • Atomic accept/rejectContiguous multi-level numbering changes stay one atomic list-range review decision.
    • Unsupported forms stay fail-closedUnsupported formats, missing current-level segments, and malformed originals stay fail-closed.
  177. v0.122.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section docGrid charSpace revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded docGrid charSpace (signed OOXML integer pitch delta × 4096), alone or with type/linePitch, import as section-formatting via documentGrid with accept/reject, live track-changes, and native DOCX export.

    • Document-grid character spacingBounded charSpace priors round-trip as reviewable section-formatting snapshots on documentGrid.
    • Live track-changesEditing section documentGrid charSpace under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedOut-of-range/unknown attributes stay fail-closed; printerSettings remains permanently opaque.
  178. v0.121.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section pgNumType chapter fields reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded pgNumType chapStyle (1-9) and/or chapSep (hyphen/period/colon/emDash/enDash), alone or with fmt/start, import as section-formatting with accept/reject, live track-changes, and native DOCX export. printerSettings stays permanently opaque.

    • Chapter page-number fieldsBounded chapStyle/chapSep priors round-trip as reviewable section-formatting snapshots on pgNumType.
    • Live track-changesEditing section pgNumType chapter fields under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedprinterSettings remains permanently opaque (CT_Rel/r:id); unknown pgNumType attributes/values stay fail-closed.
  179. v0.120.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section pgBorders revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded pgBorders (optional display/offsetFrom/zOrder plus ordered top/left/bottom/right edges) import as section-formatting via pageBorders with accept/reject, live track-changes, and native DOCX export.

    • Section page bordersBounded pgBorders priors round-trip as reviewable section-formatting snapshots through pageBorders.
    • Live track-changesEditing section pageBorders under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes/values and nested track-change children stay fail-closed; opaque section fixtures stay on printerSettings.
  180. v0.119.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section type revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with known type (nextPage/nextColumn/continuous/evenPage/oddPage) import as section-formatting via breakAfter with accept/reject, live track-changes, and native DOCX export.

    • Section break typeKnown type priors round-trip as reviewable section-formatting snapshots through breakAfter.
    • Live track-changesEditing section breakAfter under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes/values stay fail-closed; opaque section fixtures stay on pgBorders.
  181. v0.118.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section endnotePr revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded empty or pos (sectEnd/docEnd)/numFmt/numStart/numRestart endnotePr import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section endnote propertiesBounded endnotePr priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section endnotePr under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown children/attributes stay fail-closed; opaque section fixtures stay on type.
  182. v0.117.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section footnotePr revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded empty or pos/numFmt/numStart/numRestart footnotePr import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section footnote propertiesBounded footnotePr priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section footnotePr under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown children/attributes stay fail-closed; opaque section fixtures stay on endnotePr.
  183. v0.116.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section bidi revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with empty or onOff bidi import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section bidirectional layoutEmpty or onOff bidi priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section bidi under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes stay fail-closed; opaque section fixtures stay on footnotePr.
  184. v0.115.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section textDirection revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with known textDirection (lrTb/tbRl/btLr/lrTbV/tbRlV/tbLrV) import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section text directionBounded textDirection priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section textDirection under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes/values stay fail-closed; opaque section fixtures stay on bidi.
  185. v0.114.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section noEndnote revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with empty or onOff noEndnote import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section endnote suppressionEmpty or onOff noEndnote priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section noEndnote under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes stay fail-closed; opaque section fixtures stay on textDirection.
  186. v0.113.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section vAlign revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with vAlign (top/center/both/bottom) import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section vertical alignBounded vAlign priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section vAlign under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes/values stay fail-closed; opaque section fixtures stay on noEndnote.
  187. v0.112.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section formProt revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with onOff formProt import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section form protectiononOff formProt priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section formProt under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes stay fail-closed; opaque section fixtures stay on vAlign.
  188. v0.111.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section pgNumType revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded pgNumType (fmt/start) import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section page numbersBounded pgNumType priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section pgNumType under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedchapStyle/chapSep stay fail-closed; opaque section fixtures stay on formProt.
  189. v0.110.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section lnNumType revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded lnNumType (countBy/start/distance/restart) import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Section line numbersBounded lnNumType priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section lnNumType under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown attributes stay fail-closed; opaque section fixtures stay on pgNumType.
  190. v0.109.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row tblCellSpacing revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with tblCellSpacing (CT_TblWidth) import as row-formatting with accept/reject, live track-changes, and native DOCX export. CT_TrPrBase coverage is complete.

    • Row cell spacingtblCellSpacing priors round-trip as reviewable row-formatting preferred-width snapshots.
    • Live track-changesEditing row tblCellSpacing under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedMalformed widths stay fail-closed; opaque row fixtures stay on nested ins. Remaining ins/del track-change identity stays opaque.
  191. v0.108.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row divId revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with bounded non-negative divId import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row div idBounded divId priors round-trip as reviewable row-formatting snapshots.
    • Live track-changesEditing row divId under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedMalformed divId stays fail-closed; opaque row fixtures stay on tblCellSpacing. Nested cellIns/cellDel stay opaque.
  192. v0.107.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell gridSpan revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with bounded positive gridSpan import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Grid spanBounded gridSpan priors round-trip as reviewable cell-formatting snapshots.
    • Live track-changesEditing cell gridSpan under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedMissing or non-positive values stay fail-closed; opaque cell fixtures stay on cellIns.
  193. v0.106.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell vMerge revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with bounded vMerge (restart / continue) import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Vertical mergeBounded vMerge priors round-trip as reviewable cell-formatting snapshots.
    • Live track-changesEditing cell vMerge under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown merge values stay fail-closed; opaque cell fixtures stay on gridSpan.
  194. v0.105.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell hMerge revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with bounded hMerge (restart / continue) import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Horizontal mergeBounded hMerge priors round-trip as reviewable cell-formatting snapshots.
    • Live track-changesEditing cell hMerge under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown merge values stay fail-closed; opaque cell fixtures stay on vMerge.
  195. v0.104.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section docGrid revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with bounded docGrid (type + linePitch) import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Document gridBounded docGrid priors round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing section docGrid under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedUnknown docGrid attributes stay fail-closed; opaque section fixtures stay on lnNumType.
  196. v0.103.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell tcBorders revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with direct-color tcBorders import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Cell bordersDirect-color tcBorders priors round-trip as reviewable cell-formatting border snapshots.
    • Live track-changesEditing cell borders under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedTheme-bound or malformed borders stay fail-closed or opaque; opaque cell fixtures stay on hMerge.
  197. v0.102.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell cnfStyle revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with relationship-free cnfStyle import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Cell conditional formatting bitmaskRelationship-free 12-bit cnfStyle priors round-trip as reviewable cell-formatting snapshots.
    • Live track-changesEditing cell cnfStyle under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell property sets remain opaque metadata or fail-closed; opaque cell fixtures stay on hMerge.
  198. v0.101.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row cnfStyle revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with relationship-free cnfStyle import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row conditional formatting bitmaskRelationship-free 12-bit cnfStyle priors round-trip as reviewable row-formatting snapshots.
    • Live track-changesEditing row cnfStyle under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader row property sets remain opaque metadata or fail-closed; opaque row fixtures stayed on divId. Cell cnfStyle became reviewable in 0.102.0.
  199. v0.100.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes unequal-width section cols revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with unequal-width cols import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • Unequal columnsUnequal-width cols priors with bounded col children round-trip as reviewable section-formatting snapshots.
    • Live track-changesEditing custom section columns under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader section property sets remain opaque metadata or fail-closed; opaque section fixtures stay on docGrid.
  200. v0.99.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblStyleRowBandSize revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with relationship-free tblStyleRowBandSize import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row band sizeRelationship-free tblStyleRowBandSize priors round-trip as reviewable table-formatting rowBandSize snapshots.
    • Live track-changesEditing table rowBandSize under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblPrException.
  201. v0.98.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblStyleColBandSize revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with relationship-free tblStyleColBandSize import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Column band sizeRelationship-free tblStyleColBandSize priors round-trip as reviewable table-formatting colBandSize snapshots.
    • Live track-changesEditing table colBandSize under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stayed on tblStyleRowBandSize (moved to tblPrException in 0.99.0).
  202. v0.97.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblDescription revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with relationship-free tblDescription import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table descriptionRelationship-free tblDescription priors round-trip as reviewable table-formatting description snapshots.
    • Live track-changesEditing table description under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stayed on tblStyleColBandSize (moved to tblStyleRowBandSize in 0.98.0).
  203. v0.96.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblCaption revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with relationship-free tblCaption import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table captionRelationship-free tblCaption priors round-trip as reviewable table-formatting caption snapshots.
    • Live track-changesEditing table caption under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stayed on tblDescription (moved to tblStyleColBandSize in 0.97.0).
  204. v0.95.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblBorders revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with direct-color tblBorders import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table bordersDirect-color tblBorders priors round-trip as reviewable table-formatting borders snapshots.
    • Live track-changesEditing table borders under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stayed on tblCaption (moved to tblDescription in 0.96.0).
  205. v0.94.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblCellSpacing revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with dxa tblCellSpacing import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table cell spacingdxa tblCellSpacing priors round-trip as reviewable table-formatting cellSpacing snapshots.
    • Live track-changesEditing table cellSpacing under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblCaption.
  206. v0.93.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblStyle revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with tblStyle import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table style idRelationship-free tblStyle priors round-trip as reviewable table-formatting styleId snapshots.
    • Live track-changesEditing table styleId under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblCellSpacing.
  207. v0.92.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblOverlap revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with tblOverlap import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table overlap policyRelationship-free tblOverlap priors (never/overlap) round-trip as reviewable table-formatting snapshots.
    • Live track-changesEditing table overlap under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblStyle.
  208. v0.91.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table tblLook revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with tblLook import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table look flagsRelationship-free tblLook priors round-trip as reviewable table-formatting look snapshots.
    • Live track-changesEditing table look under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblOverlap.
  209. v0.90.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section rtlGutter revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with rtlGutter import as section-formatting with accept/reject, live track-changes, and native DOCX export.

    • RTL gutterRelationship-free rtlGutter priors round-trip as reviewable section-formatting, mapped to page-margin gutterOnRight.
    • Live track-changesEditing pageMargins.gutterOnRight under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader section property sets remain opaque metadata or fail-closed; opaque section fixtures stay on unequal-width cols.
  210. v0.89.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table solid fill revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with solid shd import as table-formatting (fill) with accept/reject, live track-changes, and native DOCX export.

    • Table solid fillRelationship-free solid shd priors round-trip as reviewable table-formatting, including current-table export.
    • Live track-changesEditing data-office-table-fill under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table/cell/row property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblLook.
  211. v0.88.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes section titlePg revisions reviewable

    Phase 0 fidelity: relationship-free sectPrChange priors with titlePg import as section-formatting (differentFirstPage) with accept/reject, live track-changes, and native DOCX export.

    • Different first pageRelationship-free titlePg priors round-trip as reviewable section-formatting, including current-section export.
    • Live track-changesEditing pageChrome.differentFirstPage under track-changes creates a pending section-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader section property sets remain opaque metadata or fail-closed; opaque section fixtures stay on unequal-width cols.
  212. v0.87.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes table bidiVisual revisions reviewable

    Phase 0 fidelity: relationship-free tblPrChange priors with bidiVisual import as table-formatting with accept/reject, live track-changes, and native DOCX export.

    • Table bidi visualRelationship-free bidiVisual priors round-trip as reviewable table-formatting, including current-table export.
    • Live track-changesEditing data-office-table-bidi-visual under track-changes creates a pending table-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader table/cell/row property sets remain opaque metadata or fail-closed; opaque table fixtures stay on tblLook.
  213. v0.86.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row wAfter revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with wAfter import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row width afterRelationship-free wAfter priors round-trip as reviewable row-formatting, including current-row export.
    • Live track-changesEditing data-office-row-width-after under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque row fixtures moved off wAfter to cnfStyle.
  214. v0.85.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row wBefore revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with wBefore import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row width beforeRelationship-free wBefore priors round-trip as reviewable row-formatting, including current-row export.
    • Live track-changesEditing data-office-row-width-before under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque row fixtures moved off wBefore to wAfter.
  215. v0.84.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row gridAfter revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with gridAfter import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row grid afterRelationship-free gridAfter priors round-trip as reviewable row-formatting, including current-row export.
    • Live track-changesEditing data-office-row-grid-after under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque row fixtures moved off gridAfter to wBefore.
  216. v0.83.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes row gridBefore revisions reviewable

    Phase 0 fidelity: relationship-free trPrChange priors with gridBefore import as row-formatting with accept/reject, live track-changes, and native DOCX export.

    • Row grid beforeRelationship-free gridBefore priors round-trip as reviewable row-formatting, including current-row export.
    • Live track-changesEditing data-office-row-grid-before under track-changes creates a pending row-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque row fixtures moved off gridBefore to gridAfter.
  217. v0.82.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell hideMark revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with hideMark import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Cell hide markRelationship-free hideMark priors round-trip as reviewable cell-formatting, including current-cell export.
    • Live track-changesEditing data-office-cell-hide-mark under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque cell fixtures moved off hideMark to cnfStyle.
  218. v0.81.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell tcFitText revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with tcFitText import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Cell fit textRelationship-free tcFitText priors round-trip as reviewable cell-formatting, including current-cell export.
    • Live track-changesEditing data-office-cell-fit-text under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque cell fixtures moved off tcFitText to hideMark.
  219. v0.80.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer makes cell textDirection revisions reviewable

    Phase 0 fidelity: relationship-free tcPrChange priors with textDirection import as cell-formatting with accept/reject, live track-changes, and native DOCX export.

    • Cell text directionSupported ST_TextDirection values (lrTb, tbRl, btLr, lrTbV, tbRlV, tbLrV) round-trip as reviewable cell-formatting, including current-cell export.
    • Live track-changesEditing data-office-cell-text-direction under track-changes creates a pending cell-formatting revision that accept/reject can restore.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; opaque cell fixtures moved off textDirection to tcFitText.
  220. v0.79.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer deepens reviewable cell and row property revisions

    Phase 0 fidelity: reviewable tcW and noWrap cell-formatting plus hidden and jc row-formatting, with accept/reject, live track-changes, and native DOCX export.

    • Cell width and wrapRelationship-free tcPrChange priors with tcW (auto/dxa/pct) or noWrap import as cell-formatting; live colwidth and noWrap edits track and export natively.
    • Row hide and justifytrPrChange priors with hidden or jc (left/center/right) are reviewable as row-formatting, including current-row export of those properties.
    • Opaque keepers stay fail-closedBroader cell/row property sets remain opaque metadata or fail-closed; fixtures moved off admitted priors to textDirection and gridBefore.
  221. v0.78.0
    • Improved
    • Writer
    • PDF
    • Playground
    • Documentation

    Writer no-clobber revisions deepen with searchable PDF vectors

    Phase 0 fidelity: reviewable table/row/cell/section property revisions, richer paragraph-mark and move companions, opaque float/OMML preservation, and Latin (optional CJK) searchable PDF vector text with a tagged structure bootstrap.

    • Reviewable property revisionstblPrChange, trPrChange, tcPrChange, and sectPrChange subsets (including layout, cell margins, paper source, and equal-width columns) accept/reject with live track-changes.
    • Paragraph-mark and move fidelityMulti-wrapper mark bodies, soft breaks, internal hyperlinks, bookmarks, empty rPr siblings, move-range companions, and eligible paragraph-break merge/split stay reviewable.
    • Searchable PDF vectorsMeasured Latin clears to Helvetica vectors; hosts may register a CJK TrueType face; title/lang/heading outline bootstrap ships without claiming full PDF/UA.
  222. v0.77.0
    • Improved
    • Writer
    • Spreadsheet
    • Presentation
    • Markdown
    • PDF
    • Playground
    • Documentation

    Five editors share one WPS shortcut matrix (103 ACL / 78 visual)

    One release story across Writer, Spreadsheet, Presentation, Markdown, and PDF: WPS-aligned chords with ribbon ads plus dedicated ACL and responsive visual evidence on the shared operator matrix.

    • Writer paragraph and field chordsParagraph move, distribute align, bullets, indent families, double strikethrough, Normal style, case cycle, clear formatting, and field lock/unlink join the matrix.
    • Presentation and Spreadsheet chromeSlide new/duplicate/delete, notes toggle, group ads, ribbon collapse, workbook View toggles, and sheet PageUp/PageDown navigation are covered.
    • Markdown and PDF keyboard proofMarkdown bold/italic/link and PDF zoom, page navigation, and Ctrl+F search focus ship with ACL plus desktop/compact visuals.
  223. v0.76.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer WPS numeric fields gain responsive visual evidence

    The shared operator now inventories 61 ACL and 56 visual contracts, with focused Writer field results, instructions, labels, and focus evidence.

    • Live WPS field resultsPAGE, NUMPAGES, SECTION, and PAGEREF resolve to the expected Roman, alphabetic, and ordinal displays on the measured page.
    • Native instructions and labelsMERGEFORMAT instructions, bookmark targets, and localized ARIA labels remain inspectable in the Writer DOM projection.
    • Responsive focus proofDesktop and compact layouts keep the one-page projection stable, and F9 refresh returns focus to the document editor without browser errors.
  224. v0.75.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer WPS layout and font-grid parity gain visual evidence

    The shared operator now inventories 61 ACL and 55 visual contracts, with focused Writer pagination, font, grid, and mixed-script evidence.

    • WPS page layoutImported A4 portrait metadata, automatic line metrics, table flow, and one-page pagination are checked in desktop and compact layouts.
    • Font and document gridLatin/CJK line-height factors and the WPS document-grid line pitch remain inspectable through the Writer DOM projection.
    • Mixed-script fidelityRTL paragraphs, Arabic/Hebrew/CJK/Latin font slots, and bold/italic mixed runs keep their WPS-aligned metrics without browser errors.
  225. v0.74.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer WPS shortcuts gain desktop and compact visual evidence

    The shared operator now inventories 61 ACL and 54 visual contracts, with focused Writer formatting, review, menu, and focus evidence.

    • WPS formatting shortcutsFormat copy/paste, mutually exclusive text-case effects, one-step undo, paragraph alignment/spacing, and heading styles are covered in both layouts.
    • Accessible command discoveryText-case menu items expose their shortcuts, Escape restores the menu trigger, and spelling/review shortcuts preserve editor focus.
    • Local WPS and browser proofThe WPS Writer COM probe ran against build 12.1.0.21541, and A3S Test 1.0.1 passed the shortcut ACL with empty console and page-error evidence.
  226. v0.73.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet copy-from-above shortcuts gain WPS evidence

    The shared operator now inventories 61 ACL and 53 visual contracts, with focused copy-from-above, style, undo, and focus evidence.

    • WPS copy shortcutsCtrl+' copies the source formula, while Ctrl+Shift+' copies its calculated value from the active grid.
    • Style and undo parityCopy-from-above preserves the target style, supports one-step undo, and restores grid focus after each action.
    • Browser proofThe Commander-based visual gate passed desktop and compact layouts, and A3S Test 1.0.1 passed the ACL with empty console and page-error evidence.
  227. v0.72.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet WPS font aliases and color resets gain visual evidence

    The shared operator now inventories 60 ACL and 52 visual contracts, with focused font-alias, color-reset, and focus-restoration evidence.

    • WPS font aliasesCtrl+2, Ctrl+3, and Ctrl+4 remain discoverable through shared aria-keyshortcuts metadata and apply from the active grid.
    • Direct color resetsAutomatic Color and No Fill are explicit actions that clear direct styles, preserve selection, and return focus to the grid.
    • Browser proofThe Commander-based visual gate passed desktop and compact layouts, and A3S Test 1.0.1 passed both ACL scenarios with empty console and page-error evidence.
  228. v0.71.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet hyperlink safety and underline parity become explicit

    The shared operator now inventories 60 ACL and 51 visual contracts, with focused hyperlink, underline, and shell-asset evidence.

    • Hyperlink safetyThe dialog rejects javascript URLs, protects hidden worksheets, normalizes HTTPS addresses, and returns focus to the grid after removal.
    • Underline parityAdvanced underline styles stay aligned across the ribbon menu, cell-format dialog, keyboard shortcuts, and undo history.
    • Browser proofFour Spreadsheet visual cases passed at desktop and compact layouts, plus a live A3S Test 1.0.1 hyperlink session with no page errors or console messages; shared shell assets remove the logo 404.
  229. v0.70.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet phone Find and worksheet naming join the WPS evidence matrix

    The shared operator now inventories 58 ACL and 49 visual contracts, with focused phone Find and worksheet-naming evidence.

    • Phone FindTouch-sized Find controls report the match count, select the matching cell, and restore grid focus on Escape.
    • Worksheet namingInvalid worksheet names provide inline feedback; cancellation is safe and the options-menu invoker regains focus after dismissal.
    • Browser proofFour Spreadsheet phone visual cases passed at desktop and compact layouts, plus a live A3S Test 1.0.1 Find session with no page errors or console messages.
  230. v0.69.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet phone workflows join the WPS evidence matrix

    The shared operator now inventories 56 ACL and 47 visual contracts, with focused phone task-pane and context-menu evidence.

    • Phone task paneThe data-pivot pane keeps focus inside the modal, supports forward and reverse keyboard traversal, and restores the ribbon invoker on Escape.
    • Phone context menuThe touch-sized selection menu exposes a focused first action and returns focus to the Spreadsheet grid after dismissal.
    • Browser proofFour Spreadsheet phone visual cases passed at desktop and compact layouts, plus a live A3S Test 1.0.1 task-pane session with no page errors or console messages.
  231. v0.68.0
    • Improved
    • Presentation
    • Playground
    • Documentation

    Presentation phone review joins the WPS evidence matrix

    The shared operator now inventories 54 ACL and 45 visual contracts, with focused phone chart and comments evidence.

    • Phone chart paneChart editing keeps modal focus contained, rolls back invalid drafts, and restores the selected chart trigger on close.
    • Phone comments reviewComments review keeps the phone editor inert, cancels drafts cleanly, and restores the original invoker after closing.
    • Browser proofFour Presentation phone visual cases passed at desktop and compact layouts, plus a live A3S Test 1.0.1 review with no page errors.
  232. v0.67.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet appearance editing joins the WPS evidence matrix

    The shared operator now inventories 52 ACL and 43 visual contracts, with deep border and fill evidence.

    • Native border controlsDiagonal-up and diagonal-down borders remain editable, reversible, and responsive through Format Cells.
    • Gradient and pattern fillsLinear/path gradients and seventeen native pattern styles are explicit contracts with editable dialogs and Undo.
    • Browser proofTen Spreadsheet visual cases passed at desktop and compact layouts, plus a bounded live path-gradient edit with no page errors.
  233. v0.66.0
    • Improved
    • Spreadsheet
    • Playground
    • Documentation

    Spreadsheet sorting becomes a first-class WPS matrix slice

    The shared operator now inventories 49 ACL and 40 visual contracts, with deep sort and AutoFilter evidence.

    • Sort semanticsAppearance/color, custom-list, table-owned, left-to-right, partial-range, and Simplified Chinese text sorting are now explicit contracts.
    • Filter-safe rangesOwned-range sorting re-applies AutoFilter criteria and preserves Undo/focus behavior across responsive layouts.
    • Browser proofFourteen Spreadsheet visual cases passed at desktop and compact layouts, plus a bounded live A3S Test 1.0.1 sort session.
  234. v0.65.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer typography and review paths join the WPS matrix

    The shared operator now exposes 43 ACL and 34 visual contracts, with deep Writer font, hidden-text, content-control, and review evidence.

    • WPS typography pathsCharacter position, scale, spacing, emphasis, hidden text, and OpenType controls are now first-class Writer matrix contracts.
    • Review-safe authoringControlled review conflicts, content controls, paired move revisions, and phone track-changes paths are checked beside the existing WPS suites.
    • Live focus evidenceForty-one Writer visual cases passed across desktop and compact layouts, with one platform-conditional case skipped; a live typed font-dialog edit passed without page errors.
  235. v0.64.0
    • Improved
    • Spreadsheet
    • Presentation
    • PDF
    • Playground
    • Documentation

    The WPS evidence matrix gets deep Spreadsheet coverage

    A3S Test now inventories 33 ACL and 24 visual contracts across the five editors, with live Spreadsheet focus evidence.

    • Deeper Spreadsheet pathsAutoSum, Paste Special, conditional formatting, date/time, cell styles, rich text, table totals, orientation/visibility, and direct-color shortcuts are now matrix contracts.
    • Cross-surface regressionPresentation IME/large-window and PDF large-file ACLs join the Writer, Markdown, and existing Spreadsheet workflows.
    • Real browser evidenceSixteen Spreadsheet visual tests passed at desktop and compact layouts; a bounded A3S Test 1.0.1 session restored grid selection after a typed edit.
  236. v0.63.1
    • Improved
    • Writer
    • Spreadsheet
    • Presentation
    • PDF
    • Playground
    • Documentation

    Windows A3S Test dispatch stays native and typed

    The WPS-informed operator now runs the five-surface evidence matrix with a native Windows CDP adapter and a fail-closed capability check.

    • Cross-surface coverageSupplying `--cdp-port` compiles the native `.exe` adapter under `.a3s-test/office-ops`, keeping selectors and action JSON out of `.cmd` parsing.
    • Typed Windows dispatch`doctor --json` only reports CUA certification after a compatible A3S Test capability probe succeeds; stale 0.x binaries remain fail-closed.
    • Fail-closed browser gatesA live Writer session completed the bounded `start → observe → one action → observe → finish` lifecycle through the Office CLI.
  237. v0.62.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer WPS evidence becomes one complete matrix

    Existing WPS shortcut, layout-parity, and font/grid suites now flow through the same declarative operator as every other editor surface.

    • No hidden Writer contracts`check all`, `gate writer`, and `plan writer --json` now include shortcut, layout, and font/grid ACLs that were previously only reachable through standalone scripts.
    • Fixture inventory is explicitThe Writer plan reports every WPS layout and font-matrix DOCX fixture before an agent chooses an interaction path.
    • Metadata travels with the planMachine-readable plans now carry visual, ACL, fixture, and agent metadata while retaining the observe → one action → observe boundary.
  238. v0.61.0
    • New
    • Documentation
    • Playground
    • Writer
    • Spreadsheet
    • Presentation
    • Markdown
    • PDF

    One typed plan for every editor surface

    The Commander operator now emits a deterministic JSON workflow manifest so Codex can run UI/UX evidence without ad-hoc per-surface shell logic.

    • Matrix-driven commands`plan all --json` expands fixtures, ACL checks, A3S Test gates, visual projects, and bounded agent sessions for Writer, Spreadsheet, Presentation, Markdown, and PDF.
    • Desktop and compact evidenceEach visual command carries both desktop-1280 and compact-768 projects, while the primary interaction authority remains A3S Test.
    • WPS reference stays boundedWriter plans include the isolated WPS COM UI and field probes; Windows CUA remains fail-closed when the locked driver is unsupported.
  239. v0.60.0
    • New
    • Writer
    • Playground
    • Documentation

    WPS UI references become typed evidence

    A typed Commander probe now captures an isolated WPS Writer shell and field command inventory so UI decisions can be grounded in the installed build.

    • Three explicit profiles`shell`, `fields`, and `all` keep the receipt bounded for everyday UX review while preserving a complete inventory when needed.
    • Owned COM lifecycleEach probe starts one hidden WPS Writer instance, records version, window bounds, Ribbon/status bars, and native command IDs, then closes only that instance.
    • Evidence stays honestA3S Test Web/CDP remains the browser UI contract; the locked Windows CUA profile remains unsupported and the COM receipt is never a CI dependency.
  240. v0.59.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer gains typed field settings

    A bounded field-settings dialog now authors and edits WPS-compatible page, section, and bookmark page-reference formats with responsive A3S Test evidence.

    • One typed insert/edit pathNumeric page and section formats, date/time presets, bookmark targets, hyperlinks, and MERGEFORMAT retention share one controlled dialog and one undoable document update.
    • Native WPS formats stay honestUnknown imported clock formats remain source-preserved until changed, while unsupported switches remain cached and diagnosed instead of being approximated.
    • A3S Test covers desktop and phoneWeb/CDP scenarios cover the two-step compact ribbon discovery, preview, F9 refresh, focus recovery, screenshots, accessibility, and empty console/page-error evidence at 1280px and 390px.
  241. v0.58.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer fields gain bounded WPS numeric-switch parity

    Common PAGE, NUMPAGES, SECTION, and PAGEREF fields now preserve the WPS numeric switches that are safe to evaluate, with a typed COM probe and browser-editor evidence.

    • Switches stay typed and boundedROMAN, ALPHABETIC, Ordinal, hyperlink, and MERGEFORMAT combinations are parsed explicitly; unknown or malformed switches remain cached and diagnosed.
    • WPS COM output is inspectableThe Commander CLI captures the installed WPS field instructions and version into an exact DOCX artifact without making COM a runtime or CI dependency.
    • A3S Test proves the editor pathThe numeric-field ACL checks visible results, focus, screenshots, accessibility, and empty console/page-error diagnostics; Windows CUA remains fail-closed.
  242. v0.57.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer connectors gain typed WPS shape parity

    WPS connector shape types 32, 33, and 37 now share a bounded straight, elbow, and curved model across the Writer ribbon, live SVG, and DOCX round trip.

    • One connector-kind controlStraight, elbow, and curved values are edited through the contextual ribbon and retained by Undo/Redo and compact layouts.
    • Native geometry stays typedWPS VML imports by o:spt value; DOCX export uses line, routed custom geometry, or quadratic geometry without claiming arbitrary route editing.
    • A3S Test proves the boundaryThe WPS kind matrix retains screenshots, accessibility snapshots, empty console/page-error diagnostics, and distinct SVG checks; Windows CUA remains fail-closed.
  243. v0.56.1
    • Improved
    • Documentation
    • Spreadsheet
    • Presentation
    • Markdown
    • PDF
    • Playground

    A3S Test gates become the daily editor contract

    The five-surface local matrix now proves discoverable workflows at desktop and phone widths, with the browser/CDP evidence kept separate from the fail-closed Windows CUA capability.

    • Stable keyboard-first discoveryTemplate cards are focused before activation, so below-fold Spreadsheet, Presentation, Markdown, and phone workflows use the same visibility behavior as keyboard users.
    • PDF export survives slower observersBlob URLs remain alive long enough for Web/CDP download observers, while the PDF ACL proves every page operation stays enabled after extraction.
    • Evidence is typed and auditableA3S Test retains screenshots, accessibility snapshots, empty console/page-error diagnostics, and explicit standalone-driver classifications; exact PDF bytes stay in the supplemental Playwright contract.
  244. v0.56.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer connectors gain WPS arrow-style parity

    Straight connectors now preserve typed none, triangle, stealth, diamond, oval, and open endpoint-arrow intent through the responsive Writer ribbon and DOCX round trip.

    • One typed arrow-style modelThe Connector ribbon, live SVG markers, compact controls, Undo/Redo, VML import, and DrawingML headEnd/tailEnd export share six bounded values.
    • Windows COM 3/4 referenceThe installed WPS 12.0 probe emits VML startarrow=open and endarrow=classic for the bounded COM pair; classic reopens as the typed stealth arrow.
    • A3S Test evidence stays primaryReal Windows CDP runs cover authoring and WPS import with screenshots, accessibility snapshots, and empty console/page-error diagnostics; the locked CUA matrix remains fail-closed on Windows.
  245. v0.55.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer connectors gain WPS line-style parity

    Straight connectors now preserve native solid, dash, dot, and dash-dot intent from WPS through the responsive Writer ribbon and DOCX round trip.

    • One typed line-style modelThe Connector ribbon, live SVG, compact controls, Undo/Redo, VML import, and DrawingML a:prstDash export share solid, dash, dot, and dash-dot values.
    • WPS COM evidence is recordedThe installed WPS 12.0 probe records DashStyle=4 for a native dashed Shapes.AddConnector result; unsupported long-tail styles normalize fail-closed.
    • UI/UX evidence stays deepA3S Test ACLs cover authoring and WPS import with screenshots, accessibility snapshots, and empty console/page-error diagnostics; Playwright covers desktop and compact widths.
  246. v0.54.1
    • Fixed
    • Writer
    • Playground
    • Documentation

    Windows editor runs stay deterministic

    The local A3S Test loop now completes pinned CDP runs reliably and records responsive Writer discovery as part of the user-visible contract.

    • Direct CDP lifecycleThe Windows adapter invokes the standalone browser with the requested CDP port and resolves on process exit, avoiding detached-session port polling and inherited stdio hangs.
    • Responsive discovery is testedThe Writer text-box ACL observes the desktop toolbar overflow and phone template scrolling before semantic clicks, matching controls a user can actually reach.
    • Evidence stays boundedFour desktop/phone scenarios pass with screenshots, accessibility, console, and page-error evidence; Windows CUA remains honestly marked unsupported by the locked 0.10.0 matrix.
  247. v0.54.0
    • New
    • Writer
    • Playground
    • Documentation

    A3S Test becomes the primary editor interaction contract

    A bounded Commander operator now drives deterministic editor ACLs, exploratory agent sessions, WPS reference capture, and supplemental visual evidence from one matrix.

    • A declarative five-surface CLICommander subcommands route fixtures, ACL checks and runs, visual baselines, WPS COM probes, and bounded agent lifecycle actions without a switch-based parser.
    • Observed Writer connector editingThe A3S Test agent and ACL create a straight connector, open its contextual ribbon, change width from 120 mm to 150 mm, and retain screenshot, accessibility, console, and page-error evidence.
    • CUA capability is reported honestlyThe locked CUA Driver 0.10.0 matrix reports Windows GUI profiles as unsupported; browser/CDP evidence is kept separate from native WPS GUI claims, while the WPS COM probe remains an explicit reference workflow.
  248. v0.53.1
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer names the WPS connector boundary honestly

    Legacy VML connectors are diagnosed as compatibility records instead of being mistaken for editable text boxes or images.

    • COM evidence drives the boundaryThe installed WPS 12.0 probe records Shapes.AddConnector as a VML v:shape with o:spt="32" and #_x0000_t32, not as a text-bearing wps:wsp.
    • Fail-closed diagnosticsdocx.connectors reports endpoint, routing, arrowhead, and floating-anchor semantics that the editable Writer model does not yet own, while connector-only pict containers avoid the generic image warning.
    • A bounded UI contractA deterministic DOCX fixture, focused Rstest, and local A3S Test ACL prove that import keeps the Writer editor usable, creates no text-box node, and captures accessibility plus browser diagnostics.
  249. v0.53.0
    • Improved
    • Writer
    • Playground
    • Documentation

    Writer text boxes speak the same shape language as WPS

    Five bounded shape presets now survive WPS import, the structured editor model, responsive controls, Undo/Redo, and native DOCX export.

    • Five shapes, one typed stateRectangle, rounded rectangle, ellipse, diamond, and triangle share one bounded model. The contextual ribbon, live page, preview, PDF capture, and DOCX geometry stay aligned.
    • Real WPS import stays editableIsolated WPS mc:AlternateContent text-bearing shapes retain placement, fill, outline, padding, vertical anchor, text, and drawing identity. Mixed paragraphs and connectors remain diagnosed boundaries.
    • Deep UI/UX evidence, not feature countDesktop and compact browser flows exercise every preset, contextual discovery, focus, accessibility, viewport containment, clean diagnostics, and WPS import Undo/Redo. The local A3S Test ACL records the same contract.
  250. v0.52.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer whole-paragraph changes stay native and atomic

    Bounded text-only paragraph insertions and deletions now review as one complete block and round-trip through native paragraph-mark records.

    • One paragraph, one decisionMatching body and paragraph-mark insertions or deletions import as one review card. Accept, reject, Undo, export, and reopen preserve the complete block, author, date, and native tracked-change state.
    • Native identities stay truthfulThe bounded recognizer validates body and paragraph-mark IDs independently, matching the separate identities observed in the installed WPS reference while requiring the same author, timestamp, kind, and exact text-only structure.
    • Responsive review with explicit limitsIsolated paragraph-break merges or splits, mixed content, malformed metadata, and over-limit input remain diagnostics. Desktop and 390 px real-DOCX flows cover touch sizing, keyboard navigation, focus, accessibility, screenshots, and clean browser diagnostics.
  251. v0.51.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer Compare pairs same-section text moves

    Unique text ranges can now move between aligned simple paragraphs or headings in one section while remaining one atomic review decision.

    • Paragraph scopes stay intactCompare retains source and destination paragraph scopes instead of flattening the document tree. A unique lexical range with matching marks and carried separators becomes one paired move card across aligned simple text blocks in the same section.
    • One atomic decision and native reopenAccept, reject, Undo, DOCX export, and reopen keep both sides of a cross-paragraph move together, preserving exact original and revised text with native w:moveFrom/w:moveTo records.
    • Boundaries remain explicit and testedDuplicates, mark mismatches, section-boundary moves, rich or relationship-bound content, tables, and over-limit inputs stay ordinary revisions or diagnostics. Desktop and 390 px review flows verify containment, accessibility, and clean browser diagnostics; WPS COM/UIA evidence remains documented.
  252. v0.50.0
    • New
    • Writer
    • Playground
    • Documentation

    Writer Compare recognizes bounded text moves

    Same-paragraph lexical moves now appear as one deterministic review card while ambiguous or structurally rich edits remain safely explicit.

    • One aligned move, one decisionCompare pairs a unique lexical range found once in each aligned delete/insert chunk inside a simple paragraph or heading. Separators travel with the range, so one move card accepts, rejects, undoes, and reopens exactly.
    • Fail closed where identity is unclearDuplicate candidates, rich or relationship-bound runs, cross-paragraph ranges, and over-limit text remain ordinary revisions or diagnostics instead of guessed moves.
    • WPS-referenced responsive reviewThe installed WPS 12.0 COM/UIA probe exposed the tested reorder as delete/insert records; A3S documents that evidence and verifies the local paired enhancement in desktop and 390 px browser flows with clean diagnostics.
  253. v0.49.0
    • New
    • Writer
    • Shared UX
    • Playground
    • Documentation

    Writer move revisions stay paired and native

    Bounded text-only Word move pairs now form one review decision, round-trip as native move records, and keep unsupported structures explicitly diagnosed.

    • One move, one review itemStrict and transitional w:moveFrom/w:moveTo pairs with matching identity, author, date, and text import as one atomic move change. Accepting or rejecting it resolves both source and destination sides together.
    • Native output stays honestDOCX export rewrites transient wrappers into native moveFrom and moveTo elements, preserves review attribution, and reopens without private markers or negative IDs.
    • Unsupported shapes fail closedRich or relationship-bound content, range markers, malformed metadata, and unpaired moves remain compatibility diagnostics instead of being presented as editable semantics. The PDFium asset path is also stable for direct desktop and compact imports.
  254. v0.48.1
    • Fixed
    • Writer
    • Shared UX
    • Playground
    • Documentation

    Writer selection controls keep their compact visual contract

    The floating selection toolbar no longer exposes browser-native outset borders on its underline and strikethrough split controls.

    • Native defaults are resetThe two split controls now use the toolbar button baseline, including explicit appearance, border, background, spacing, and icon alignment rules.
    • One group, one dividerThe primary action and disclosure remain visually grouped with a single-pixel divider while hover, pressed, and focus states stay readable.
    • Formatting semantics are unchangedUnderline and strikethrough commands, accessible labels, keyboard behavior, and their advanced style menus continue to use the existing typed contract.
  255. v0.48.0
    • New
    • Writer
    • Shared UX
    • Playground
    • Documentation

    Writer content controls stay bounded and native

    Inline plain-text and rich-text content controls now share one typed editor node, one lock boundary, and a strict native DOCX contract without a remote service.

    • Author the whole intent in one dialogThe Insert ribbon and responsive dialog create or edit inline controls with aliases, program tags, plain or rich text, multiline behavior, border/tag/hidden appearance, and an optional color. Each accepted intent is one typed update and one Undo step.
    • Locks are enforced below the UIContent and shell locks reject accidental typing, paste, replacement, deletion, and generic metadata writes. Explicit typed commands are required for unlock-sensitive operations, while accessible names follow the control alias or tag.
    • Native DOCX stays honestDirect paragraph `w:sdt` controls round-trip through strict and transitional WordprocessingML with collision-free IDs, rich runs, locks, multiline text, and Word 2012 appearance/color. Bindings, placeholders, repeating regions, form controls, nested structures, and relationship-bound content remain diagnosed safe text.
  256. v0.47.0
    • New
    • Writer
    • Shared UX
    • Playground
    • Documentation

    Writer common fields stay live and referenceable

    Word counts, character counts, and bookmark page references now share one bounded field model, one measured pagination source, and an honest native DOCX boundary.

    • Statistics exclude generated resultsInsert exposes Word-compatible NUMWORDS and NUMCHARS fields. They count visible body text, preserve word boundaries around inline atoms, include spaces in character totals, and refresh with PAGE-family fields in one controlled update.
    • A bookmark can become a live target pageThe Cross-reference dialog offers Insert target page for bookmarks. PAGEREF stores the stable bookmark identity and current name, follows normalization, and changes to an explicit missing state when the target disappears.
    • Native round trips fail closedThe importer/exporter atomizes only complete inline common fields with the bounded switch grammar. Unsupported switches, missing targets, nested structures, and malformed fields remain cached text and receive compatibility diagnostics.
  257. v0.46.0
    • New
    • Writer
    • Shared UX
    • Playground

    Writer text boxes are editable and native

    A bounded text-box node connects familiar Writer controls, deterministic page rendering, and isolated WPS DrawingML round trips without a second document model.

    • Insert once, edit in contextThe Insert ribbon creates an isolated text box; its contextual ribbon edits inline or floating layout, millimeter geometry, offsets, fill, outline, padding, and vertical alignment with one Undo step per intent.
    • One projection for page, preview, and PDFThe same bounded dimensions and placement state drive live editing, read-only preview, PDF capture, and keep-together pagination behavior.
    • Native WPS shape with an honest boundaryIsolated `wps:wsp` shapes marked `txBox="1"` retain text, geometry, placement, fill, outline, body padding, vertical anchor, and drawing identity; mixed or malformed branches stay diagnosed on the normal compatibility path.
  258. v0.45.0
    • New
    • Writer
    • Shared UX
    • Playground

    Writer pictures can rotate and reflect locally

    A bounded picture-transform model brings quarter-turn rotation and reflection into the same controlled editor and native DOCX workflow.

    • One familiar Picture ribbonAccessible rotate-left, rotate-right, horizontal-flip, and vertical-flip actions sit beside existing wrap and alignment commands.
    • The dialog keeps the full intent togetherPicture Properties exposes the same quarter-turn and reflection controls in a phone-safe layout; Apply is one controlled update and one Undo step.
    • Native round trip with an honest boundaryDOCX `a:xfrm` rotation and reflection values reopen as editable state; arbitrary-angle or malformed transforms are diagnosed and normalized safely.
  259. v0.44.0
    • New
    • Spreadsheet
    • Shared UX
    • Playground

    Spreadsheet dropdowns can follow a local driver

    Bounded local INDIRECT sources bring dependent dropdowns into the same controlled Data Validation workflow without a remote service.

    • Author the dependency in the dialogThe list source field accepts a bounded =INDIRECT(...) grammar made from quoted text, single-cell references, and concatenation, with a formula note and Sigma affordance.
    • Each row gets the right optionsRelative drivers re-evaluate from each selected range anchor; named ranges and one-dimensional local areas resolve per cell, while an empty driver shows an empty list.
    • Native and fail-closedThe authored formula stays compact, runtime projection is capped at 1,024 source cells and 10,000 materialized cells, and native XLSX export/reopen keeps the list formula and names.
  260. v0.43.0
    • New
    • Spreadsheet
    • Shared UX
    • Playground

    Spreadsheet conditional formatting is now formula-editable

    A local, bounded formula rule closes the most common conditional-format gap while keeping precedence, blank ranges, and native XLSX semantics inspectable.

    • Author in one rule managerHome → Conditional Formatting exposes a first-class Custom formula editor with relative/absolute references, cross-sheet cells, independent text/fill colors, and Stop-if-true ordering.
    • Local and boundedOnly cached workbook values are read: formulas are capped at 255 Unicode characters and 1,024 referenced cells, with bounded blank-cell scans and fail-closed unsafe references.
    • Native round trip and a real templateXLSX expression records, differential styles, sqref, and priorities survive export and reopen; the public formula conditional-format template shows the workflow without a remote service.
  261. v0.42.0
    • New
    • Spreadsheet
    • Shared UX
    • Playground

    Spreadsheet rules can now be local custom formulas

    A bounded custom-formula rule brings dependent local checks into the same accessible Data Validation workflow without introducing a remote service.

    • Author where you validateThe shared dialog accepts an optional = prefix, hides irrelevant numeric operators, and keeps the authored formula visible as a first-class rule.
    • Relative and local by designThe proposed value is substituted before evaluation; references anchor to each selected range and common sheet-qualified cells or ranges stay inside the workbook.
    • Fail closed, round-trip nativeA 255-character formula and 1,024-cell read budget reject unsafe or uncached references, while native XLSX import/export and the public template retain the rule.
  262. v0.41.0
    • Improved
    • Spreadsheet
    • Shared UX
    • Playground

    Spreadsheet validation alerts now match Office decisions

    Invalid Spreadsheet edits now explain the rule and offer the same Stop, Warning, or Information decision instead of silently taking one browser path.

    • Stop means stopAn accessible notice discards the invalid draft and keeps the original cell selected, including after Enter from the formula bar.
    • Warning and Information are deliberateWarning offers Continue input or Cancel; Information offers Keep input or Return to edit, with authored copy and the current value in context.
    • One controlled commitA confirmed invalid value uses a typed, single-use bypass, so selection, focus, Undo, collaboration, and native XLSX errorStyle fidelity remain bounded.
  263. v0.40.0
    • New
    • Writer
    • Shared UX
    • Playground

    Writer numbering changes are now reviewable

    Ordered-list style and starting-number edits now form one atomic revision across review, collaboration, native DOCX, and Undo.

    • One list, one intentThe Numbering card accepts the current list or restores the complete original style and start without changing list text.
    • Native revision fidelityCommon single-level decimal, letter, and Roman w:numberingChange records import, export, and reopen with fail-closed diagnostics.
    • Protected collaborationYjs/Yrs retain live numbering metadata and immutable decisions across persistence while suggest mode rejects metadata tampering.
  264. v0.39.0
    • New
    • Presentation
    • Playground

    Presentation objects can now enter and exit

    A slide object can combine one entrance and one exit effect through the same ordered authoring, playback, collaboration, and native PPTX model.

    • Object-centric authoringThe Animation tab switches explicitly between Entrance and Exit, then keeps effects, directions, triggers, timing, ordering, and preview in context.
    • Composable playbackEight bounded effects share one cue model; sequential effects on the same object compose, while overlapping intervals fail closed.
    • Native PPTX evidenceEntrance and exit timing classes, in/out transitions, object targets, triggers, timing, and direction survive export, import, and a second reopen.
  265. v0.38.1
    • Improved
    • Documentation
    • Shared UX

    Release notes that explain the product change

    The documentation now turns recent releases into a version-aware, bilingual story instead of a flat list of implementation links.

    • Scannable hierarchyVersion, date, change type, editor surface, outcome, and evidence are visible before opening a deep reference.
    • Frozen historySelecting an older documentation version hides every release that did not exist at that point.
    • One complete archiveCurated release stories link back to the exhaustive repository changelog and immutable GitHub Releases.
  266. v0.38.0
    • New
    • Writer

    Native OpenType typography in Writer

    Ordinary text and structured equations now share one bounded Office 2010 typography model with exact DOCX reopen behavior.

    • Complete controlsAll 16 ligature combinations, numeral forms and spacing, stylistic sets 1–20, and contextual alternates are editable.
    • Mixed-selection safeThe advanced Font dialog changes only touched properties, restores the selection, and creates one Undo record.
    • Native fidelityBody, headers, footers, notes, comments, styles, Format Painter, and formatting revisions retain the same model.
  267. v0.37.5
    • Improved
    • Spreadsheet

    XLSX 1900 and 1904 dates stay exact

    Spreadsheet now owns the workbook date epoch, preserving exact native serials through filtering, collaboration, export, and reopen.

    • No timezone driftDate-typed scalar values and formula caches remain numeric instead of passing through JavaScript Date conversion.
    • One workbook epochDynamic filters, menu profiling, sort reconciliation, and current-date authoring consume the same 1900 or 1904 setting.
    • Real-package proofImport, export, reopen, 1904 serial zero, collaboration, and browser workflows are covered together.
  268. v0.37.4
    • Improved
    • Spreadsheet

    Custom Sort respects Tables and AutoFilter

    Sorting from inside a native table or worksheet filter now resolves the exact structural range and reconciles visibility after rows move.

    • Structural boundariesHeaders stay fixed, enabled totals rows stay outside the sort, and left-to-right movement is disabled for owned ranges.
    • Filter-safe movementTyped filters are reevaluated while opaque hidden-row ownership follows the stable sort permutation.
    • Bounded executionDense and sparse reads share explicit budgets, fail-closed fingerprints, one controlled update, and one-step Undo.
  269. v0.37.3
    • New
    • Spreadsheet

    Manage reusable Custom Lists

    Custom Sort gains a responsive preference manager for built-in and user-authored month, weekday, and domain-specific sequences.

    • Staged editingCreate, edit, delete, and reorder up to 32 user lists before one atomic confirmation.
    • Coherent sort keysActive sort levels follow edited lists and fall back safely when a referenced list is removed.
    • Host-owned preferencesOptional typed persistence never leaks personal list preferences into controlled workbook content.
  270. v0.37.2
    • Fixed
    • Writer
    • Markdown
    • Shared UX

    Controlled Chinese IME input commits once

    Pinyin and other pre-edit values remain local until composition settles, while authoritative host replacements wait for the same boundary.

    • No phonetic leakageDocument and visual Markdown publish only the committed Chinese value instead of intermediate composition text.
    • Controlled reconciliationA host update received mid-composition is applied only after the local input method finishes.
    • WebKit release gateA dedicated browser contract verifies zero pre-edit publications and exactly one final change.
  271. v0.37.1
    • Improved
    • Shared UX
    • Presentation
    • Spreadsheet

    Sharper File actions, Presentation IME, and local filters

    The shared shell gains clearer action semantics while Presentation composition and Spreadsheet filtering become dependable offline workflows.

    • Readable File menuExplicit icons, danger treatment, bounded scrolling, keyboard focus, and legible disabled states clarify host-owned actions.
    • Presentation compositionSlide text keeps pre-edit input local and editor shortcuts yield while an input method is active.
    • Native local filtersWildcard, Top/Bottom, compound custom, and typed AutoFilter criteria author and round-trip without a cloud dependency.
  272. v0.37.0
    • New
    • Spreadsheet

    Native Spreadsheet totals rows

    Table creation and Table Design can author filter-aware native totals functions, labels, or bounded custom formulas.

    • Common functionsSum, average, count, extrema, variance, standard deviation, labels, and custom formulas remain typed.
    • Filter-aware calculationGenerated native totals use SUBTOTAL semantics shared by Rust, WebAssembly, Worker, and JavaScript paths.
    • Exact XLSX round tripTotals functions, labels, formulas, dense/sparse ownership, and collaboration state survive export and reopen.
  273. v0.36.0
    • New
    • Spreadsheet

    Structured references calculate and fill

    Native table formulas now calculate through bounded Rust, WebAssembly, Worker, and JavaScript paths while inserted rows inherit safe calculated-column rules.

    • Native table syntaxTable columns, current-row formulas, worksheet qualifiers, and common row selections share one parser and dependency graph.
    • Safe calculated columnsOnly empty cells in newly inserted body rows receive an inferred formula; manual exceptions and existing values stay authoritative.
    • Explicit boundsTable count, materialization, unsupported references, collaboration validation, and XLSX metadata all fail closed.
  274. v0.35.0
    • Improved
    • Playground
    • Shared UX

    An immersive Playground with release context

    The public Playground becomes one full-viewport workspace with a typed, filterable release gallery and more reliable first-open editor focus.

    • One workspaceDuplicated global chrome is removed so the editor, recent files, and creation flows share the available viewport.
    • Typed release galleryEvery featured workflow owns one launch target, editor type, and release label in a responsive filterable grid.
    • Stable first interactionBlank Presentation titles and live Spreadsheet selections retain intentional focus instead of dropping the first action.
  275. v0.34.0
    • New
    • Presentation

    Presentation entrance animations

    Presentation can author, order, preview, play, collaborate on, and round-trip a bounded native entrance-animation subset.

    • Four effectsAppear, fade, fly-in, and zoom expose editable direction and timing where the effect supports them.
    • Three triggersOn-click, with-previous, and after-previous cues keep stable identities and deterministic playback order.
    • Native timing treesSupported cues survive collaboration, copy/delete remapping, slideshow playback, PPTX export, and reopen.
  276. v0.33.0
    • New
    • PDF

    PDF page organization

    PDF gains a responsive page organizer for structural edits while preserving Blob ownership, native history priority, and explicit safety limits.

    • Complete page planInsert, delete, rotate, reorder, extract, merge, and split share one previewable operation model.
    • Worker-owned mutationA lazy dedicated Worker returns one complete Blob and one page-history record per source mutation.
    • Fail-closed safetySource size, merge size, page count, encryption, signatures, catalog risk, and invalid plans are bounded before mutation.
  277. v0.32.0
    • New
    • Writer

    Document compare and combine

    Writer turns DOCX, HTML, or TXT differences into deterministic reviewable changes without replacing the current document.

    • Reviewable differencesInsertions, deletions, character formatting, and paragraph formatting arrive in one transaction and one Undo record.
    • Deterministic identityStable identities, author attribution, and bounded diff matrices make review decisions reproducible.
    • Safe combineCombining requires an exact reject-all baseline and refuses unsupported structures or unresolved current revisions.
  278. v0.31.0
    • New
    • Writer

    Native Writer indexes

    Writer can mark, edit, generate, customize, and refresh a bounded native document index with exact DOCX reopen behavior.

    • Typed index entriesPrimary and secondary entries, cross-references, page emphasis, and stable marker identities stay selectable.
    • Responsive authoringMarking, insertion, customization, and refresh restore focus and create one transaction plus one Undo record.
    • Native field fidelityXE entries, INDEX fields, cached rows, columns, leaders, and page styles survive export, reopen, and second export.
  279. v0.30.0
    • New
    • Writer
    • Spreadsheet

    Writer references and Spreadsheet validation

    Table of contents, character fidelity, and complete data-validation settings become first-class editable workflows with native round trips.

    • Updatable table of contentsHeading levels, links, page numbers, alignment, leaders, cached entries, and explicit refresh share one typed block.
    • Character fidelityNative shading patterns and Latin, East Asian, or bidirectional proofing languages author and round-trip explicitly.
    • Complete validation UXSpreadsheet data validation exposes dropdowns, input prompts, error alerts, formulas, ranges, and native XLSX semantics.