Files
wordcraft/ROADMAP.md
T
Saeed AzarehgarandClaude Opus 5.5 5d86dec250 Right-to-left and Persian text support (bidi, shaping, RTL paragraphs, DOCX) (#207)
* feat(doc,docx): complex-script run properties and RTL OOXML round-trip

Model the formatting Word applies to Persian, Arabic and Hebrew text:
cs, font_cs, size_cs, bold_cs, italic_cs and lang_bidi on CharProps,
resolved with Word's fallbacks (ResolvedChar::complex). Size, bold and
italic pair with their complex-script values so a run's size or bold
also covers its Persian characters. Add doc::bidi script helpers, and
keep ZWNJ and Arabic marks inside words for word selection.

DOCX: read and write w:rFonts/@w:cs, w:szCs, w:bCs, w:iCs, w:cs and
w:lang/@w:bidi in schema order; stop using the cs font as the Latin font.
Tests round-trip Persian text with ZWNJ, digits and mixed Latin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(fonts): directional shaping and Persian font fallback

Add shape_run to shape a run in a known bidi direction (Arabic joining,
mirrored brackets). Prefer Persian-capable fonts (Vazirmatn, Noto Naskh/
Sans Arabic…) for right-to-left fallback, pick bold/italic fallback faces,
and map common Persian document fonts (B Nazanin, B Lotus, B Titr,
IRANSans…) to open substitutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(layout): Unicode Bidirectional Algorithm and right-to-left paragraphs

Run UAX #9 per paragraph (unicode-bidi), shape each level run in its
direction, keep marks and ZWNJ with their letter and a word in one
fallback face. After line breaking, apply rules L1/L2 per line and give
each cluster a visual box; right-to-left paragraphs are laid out from
their start edge and mirrored, so indents, tabs, alignment, list labels,
drop caps, floats and borders sit on the right.

Caret, hit testing and selection use visual geometry (split selections,
caret at bidi boundaries, DocLayout::visual_step for arrow keys). Display
items carry glyph-to-text ranges, which the PDF writer now uses. Plain
left-to-right lines are unchanged. No hyphenation of RTL words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(engine,ui): paragraph direction commands and RTL editing

Add para.ltr / para.rtl (Word's text direction buttons) that change only
the reading order, and make the alignment buttons visual in right-to-left
paragraphs (para.align also takes start/end). Arrow keys move visually in
bidirectional text, Ctrl+arrows follow reading order, and Bold/Italic/
Size/Font cover complex-script text. Ribbon buttons with code-drawn
icons, a mirrored ruler for RTL paragraphs, translations, catalog,
parity and roadmap updates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(contributors): add Saeed Azarehgar to people.toml

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(engine): para.align with an explicit value sets it, without toggling

Only the alignment buttons toggle back to the start edge when pressed
again. para.align (used by the Paragraph dialog, scripts and agents) now
sets the requested alignment, as seen on the page, in each selected
paragraph's own direction. Previously pressing OK in the dialog with
Center or Right selected reset the paragraph to the start edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(ui): Direction option in the Paragraph dialog

Add Word's Direction (Right-to-left / Left-to-right) to the Paragraph
dialog's General section. The dialog now shows alignment and Left/Right
indents as seen on the page, mapping them to the paragraph's logical
start/end values on OK, so an unchanged OK no longer flips a
right-to-left paragraph. OK logic moved to apply_paragraph, with tests;
ja/zh translations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(layout): allow hanging trailing spaces in the RTL display test

A wrapped right-to-left line's trailing spaces hang past its end edge
(the left margin), as left-to-right lines hang them past the right. The
test failed whenever the loaded fallback fonts made a line end there;
it now checks only visible glyphs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:26:41 -04:00

9.4 KiB
Raw Blame History

WordCraft roadmap

WordCraft aims for complete feature parity with Microsoft Word, then goes further on speed, openness and agent control. This file tracks where we are honestly. Generated numbers come from cargo xtask parity (docs/parity.md).

Where we are (2026-10-09)

Measure Value
Commands (every action, scriptable by CLI/MCP/control channel) 422
Feature catalog coverage (Word ribbon/menu features with a command) 378 / 428 (88%)
Estimated real feature parity (depth and fidelity, not just a command) ~62%
Distance to alpha ~85% of the way; ≈20–25 h of Claude wall-clock work
Distance to 100% parity ≈120–150 h of Claude Opus 5.5 wall-clock work (with parallel agents)
Tests ~325 tests (unit, round-trip, fuzz/proptest, MCP acceptance)
Layout speed (188-page document) 61 ms cold, 1.4 ms relayout after an edit
Code ~44k lines of Rust in 12 crates and 3 apps

Catalog coverage overstates parity: many commands are first versions. The real-parity estimate weighs each area by how much of Word's behaviour it reproduces, and by how often people use it.

Alpha

What we mean by alpha: someone can write, format and review real documents every day, open the .docx files they receive and send back files Word opens cleanly, on every desktop platform from a signed download, without losing work.

Alpha requirement State
Editing, formatting, styles, lists, tables, headers/footers, references, review done (first versions, tested)
Pagination fidelity: wrap, row splitting, hyphenation, drop caps, line numbers, borders done this arc
Comments in margin balloons, track changes done
Never-crash standard (no panics, hostile-param fuzzing, panic guard) done
Autosave and crash recovery done; needs a soak test
DOCX fidelity against a corpus of real-world files (open, render, round-trip, fix) not started — the main alpha blocker (≈10 h)
Footnotes that continue onto the next page; column balancing missing (≈4 h)
Native printing (today printing goes through PDF) missing (≈4 h)
Signed builds for macOS, Windows, Linux, FreeBSD and web pipeline written; needs the GitHub remote and release secrets from the owner
Real app icon / mascot art placeholder; needs owner art

So: alpha is roughly 85% of the way, with about 20–25 hours of agent work left, plus two owner actions (push to github.com/storytold/wordcraft and enable the release secrets, and supply the icon art).

Parity by area

Area Status Parity
Typing, selection, clipboard, undo, find/replace Solid; IME, autocorrect, smart quotes, list autoformat 85%
Character & paragraph formatting Nearly all properties; Font/Paragraph dialogs 85%
Styles (gallery, pane, create/modify, style sets, themes) Good 75%
Lists (bullets, numbering, multilevel, restart, set value) Good 75%
Tables (insert, merge/split, styles, borders, header rows, sort, formula) Good; rows split across pages; no drawn tables, no nested-table polish 72%
Page layout (margins, size, orientation, columns, breaks, sections) Good; page borders, line numbers, vertical alignment, drop caps, hyphenation; columns don't balance 72%
Headers/footers, page numbers, fields Good; first/even/odd, link to previous 70%
Footnotes/endnotes Placed and editable; long notes don't continue onto the next page 60%
References (TOC, citations APA/MLA/Chicago/IEEE, bibliography, index, figures, cross-refs, TOA) Working first versions; Zotero/Mendeley ADDIN fields and custom properties round-trip; Zotero in the app (ui.zotero.*, wordcraft-cli zotero): citations, bibliography, refresh, unlink, document preferences, in-text ↔ footnote switching, Zotero ribbon tab, Move Past Citation; Read Aloud player (speed, previous/next sentence, skips citations and bibliography) 60%
Review (spelling, grammar, thesaurus, comments, track changes, compare, protect) Good; comment balloons in the margin; no track-changes balloons 75%
Mailings (mail merge, rules, preview, envelopes, labels) Working 70%
Pictures & shapes (insert, size, crop, recolour, effects, styles, float position) Text wraps around floats (rectangular); text boxes render and edit their text; select, drag to move, resize handles, arrow nudge on the canvas; no tight/contour wrap, no rotation handles 60%
Draw tab (ink), SmartArt, charts, 3D models, equations editor Equations: full OMML read/write, 2D layout (OpenType MATH) and in-place editing with an Equation tab; long display equations don't break across lines yet. Ink, SmartArt, charts, 3D not started 20%
File formats: DOCX read/write Good (Word opens our files); charts/SmartArt/OLE dropped; untested on a real-world corpus 75%
File formats: PDF, ODT, RTF, HTML, Markdown, LaTeX, TXT Working 70%
File formats: Word 97-2003 .doc/.dot import Text, formatting, styles, sections, headers/footers, tables, lists, notes, fields, bookmarks, pictures (spec-based reader; metafile images and Word 6/95 rejected) 60%
View modes (print, web, draft, read, focus, zoom, navigation pane) Working 70%
Backstage (new from templates, open, info, export, options) Working; printing goes through PDF 55%
Right-to-left and complex scripts (Persian, Arabic, Hebrew) Unicode Bidirectional Algorithm, Arabic shaping (joining, ZWNJ, lam-alef, mirrored brackets), mixed Persian/Latin/number lines, mirrored paragraphs (indents, tabs, list labels, ruler), visual caret movement and hit testing, complex-script fonts/sizes in DOCX; no kashida justification, RTL sections/tables or right-to-left UI yet 55%
Agent control (CLI, MCP, control channel, macros) Beyond Word 100%+

Estimate to 100%

About 120–150 hours of Claude Opus 5.5 wall-clock work (with parallel agents), in this order:

  1. Alpha blockers (≈20–25 h): DOCX fidelity corpus, footnote continuation, column balancing, native printing, autosave soak test, first signed release.
  2. Objects (≈12 h): tight/through (contour) wrap, rotation handles on the canvas, grouping, z-order polish, track-changes balloons and formatting revisions.
  3. Draw tab / ink (≈15 h).
  4. Charts (own renderer) and SmartArt-style diagrams (≈20 h).
  5. Equation editor — done: OMML read/write, 2D layout, in-place editing with Word's Equation tab (structures, symbols, built-ins, Unicode/LaTeX input, build-up, Math AutoCorrect, # numbers, structure commands). Remaining: line breaking of long display equations, ink equations (≈4 h).
  6. Dialog depth: every Word dialog with all its options (Font, Paragraph, Tabs, Borders and Shading, Page Setup, Styles, Columns, Index/TOC options, Mail Merge wizard, Options panes) (≈20 h).
  7. Accessibility (screen readers), localisation, and the rest of right-to-left (≈12 h): right-to-left sections and tables (w:bidi in w:sectPr, w:bidiVisual), kashida justification, a Persian UI translation and a mirrored interface, RTL in the HTML/ODT/RTF converters, Indic shaping checks.
  8. Long tail: kerning/ligature options, drawn tables, nested-table polish, more templates, Word's less-used commands still missing from the catalog (≈10 h).

Milestones

# Milestone State
M0 Skeleton + vertical slice (model, layout, render, engine, Word-style UI, CLI, MCP, web) done
M1 DOCX I/O done (first version; corpus testing next)
M2 Home tab complete done
M3 Insert tab mostly done (charts/SmartArt/icons/3D missing)
M4 Layout + Design tabs done except column balancing
M5 Tables done (row splitting landed)
M6 References first version done; footnote continuation missing
M7 Review done (margin balloons landed)
M8 View mostly done
M9 Mailings done (first version)
M10 File/Backstage mostly done; native printing missing
M11 Draw + objects text wrap and text boxes done; ink, rotation, grouping missing
M12 Formats breadth (PDF, ODT, RTF, HTML, MD, TXT) done (first versions)
M13 Performance budgets on track (1.4 ms relayout)
M14 1.0 polish, packaging, signing pipeline written; waiting on remote and secrets

Recently landed

  • Right-to-left and Persian text: bidi reordering (UAX #9), Arabic-script shaping, right-to-left paragraphs (Left-to-Right / Right-to-Left Text Direction), visual arrow keys, w:rtl/w:cs/w:szCs /w:bCs/w:iCs/w:rFonts w:cs/w:lang w:bidi round-trip, Persian font substitutes.
  • Ukrainian interface catalog: all existing 771 labels, Ukrainian locale detection and a persisted language choice (#85).
  • Brazilian Portuguese interface catalog: all existing 771 labels, pt-BR locale detection and a persisted language choice (#127).
  • Text wraps around floating pictures and shapes; text boxes lay out their own text.
  • Table rows split across pages between lines (Can't Split honoured, header rows repeat).
  • Drop caps; automatic hyphenation with Word's 0.25" hyphenation zone; soft hyphens.
  • Page borders measured from the page edge, line numbers, vertical alignment, column separators.
  • Comment balloons in a markup area beside each page, with leader lines to their anchors.

Next

The DOCX fidelity corpus, then footnote continuation, column balancing and native printing.