mirror of
https://github.com/aphrody-labs/wordcraft.git
synced 2026-10-13 19:26:53 +00:00
Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#277)
Progress docs per craftrules standards/progress-docs.md: target-app parity, gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, and feature, format, layout, hardware, UI and localization parity docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a99dddcbdc
commit
eb31860917
18 files changed
+933
-129
No files matched your search
@@ -3,7 +3,7 @@
|
||||
WordCraft is a clean-room, open-source, Rust-native word processor targeting Microsoft Word parity — and going further on speed, openness and agent control. It runs natively on macOS, Windows, Linux and BSD, and on the web via WASM. Siblings with the same conventions: `../photocraft` (Photoshop), `../vectorcraft` (Illustrator), `../filmcraft` (Premiere), `../lightcraft` (Lightroom), `../pdfcraft` (Acrobat), `../effectcraft` (After Effects), `../designcraft` (InDesign). Shared rules and learnings: [`storytold/craftrules`](https://github.com/storytold/craftrules) (`../../craftrules`) — read its `AGENTS.md`.
|
||||
|
||||
## Start every session here
|
||||
1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` and the relevant `plan/architecture.md` section. `plan/` is gitignored (local only); if it's missing, start from `ROADMAP.md` and `docs/parity.md`.
|
||||
1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` and the relevant `plan/architecture.md` section. `plan/` is gitignored (local only); if it's missing, start from `ROADMAP.md`, `docs/gaps.md` and `docs/roadmap.md` (Current focus).
|
||||
2. Follow the autonomous operation protocol (`plan/execution-plan.md` §5). Don't stop to ask unless a decision is genuinely the owner's (licensing, publishing, pushing to new remotes, secrets).
|
||||
|
||||
## Never crash
|
||||
@@ -41,7 +41,7 @@ People trust WordCraft with their writing; a crash loses their work. **This outr
|
||||
| apps | `apps/wordcraft`, `apps/wordcraft-cli`, `apps/wordcraft-web` | binaries |
|
||||
|
||||
- **Everything is a command.** User-visible behaviour = a `CommandSpec` in `crates/engine/src/cmd/*.rs` (id, label, ribbon location, shortcut, params doc, `enabled`, `run`) + tests. UI-only commands (`ui.*`) live in `crates/ui-egui/src/lib.rs`. The ribbon, shortcuts, command search, CLI, control channel and MCP all dispatch by id. Programmatic calls never open dialogs.
|
||||
- **Parity is measured:** `crates/engine/src/catalog.rs` lists Word's ribbon/menu features with command ids. `cargo xtask parity` writes `docs/parity.md`; a test enforces a floor that only rises. Implement missing ids to raise it.
|
||||
- **Parity is measured:** `crates/engine/src/catalog.rs` lists Word's ribbon/menu features with command ids. `cargo xtask parity` writes `docs/parity-checklist.md`; a test enforces a floor that only rises. Implement missing ids to raise it.
|
||||
- **Layering** is enforced by `cargo xtask layers`. Nothing below L6 depends on egui/eframe/winit/rfd. The UI is thin and reads `Session` state; colours come from `theme::Tokens`.
|
||||
- **Rust only** (no handwritten JS/TS). **Never break wasm** (`cargo xtask wasm`).
|
||||
|
||||
@@ -62,7 +62,7 @@ Typing, Enter, Backspace, Tab, lists, AutoCorrect and AutoFormat follow Word's o
|
||||
- Parallel agents: separate `CARGO_TARGET_DIR` per agent; edit only the crates you own; delete your target dir when done (disk).
|
||||
|
||||
## Roadmap
|
||||
`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a milestone task lands.
|
||||
Progress docs follow [`craftrules/standards/progress-docs.md`](https://github.com/storytold/craftrules/blob/main/standards/progress-docs.md): `ROADMAP.md` (stage, headline numbers, progress log), `docs/target-app-parity.md` (the assessment), `docs/gaps.md` (ranked work list), `docs/roadmap.md` (milestones, Current focus), `docs/architecture.md`, and the parity checklists `docs/file-format-parity.md`, `docs/layout-parity.md`, `docs/typing-parity.md`, `docs/ui-parity.md`, `docs/hardware-parity.md`, `docs/localization-parity.md`. When work lands, update the gap, the parity doc and the progress log, and bump each touched doc's status line and revision history.
|
||||
|
||||
## Contributor credits (About window)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
WordCraft is a clean-room, open-source, Rust-native word processor targeting Microsoft Word parity — and going further on speed, openness and agent control. It runs natively on macOS, Windows, Linux and BSD, and on the web via WASM. Siblings with the same conventions: `../photocraft` (Photoshop), `../vectorcraft` (Illustrator), `../filmcraft` (Premiere), `../lightcraft` (Lightroom), `../pdfcraft` (Acrobat), `../effectcraft` (After Effects), `../designcraft` (InDesign). Shared rules and learnings: [`storytold/craftrules`](https://github.com/storytold/craftrules) (`../../craftrules`) — read its `AGENTS.md`.
|
||||
|
||||
## Start every session here
|
||||
1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` and the relevant `plan/architecture.md` section. `plan/` is gitignored (local only); if it's missing, start from `ROADMAP.md` and `docs/parity.md`.
|
||||
1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` and the relevant `plan/architecture.md` section. `plan/` is gitignored (local only); if it's missing, start from `ROADMAP.md`, `docs/gaps.md` and `docs/roadmap.md` (Current focus).
|
||||
2. Follow the autonomous operation protocol (`plan/execution-plan.md` §5). Don't stop to ask unless a decision is genuinely the owner's (licensing, publishing, pushing to new remotes, secrets).
|
||||
|
||||
## Never crash
|
||||
@@ -41,7 +41,7 @@ People trust WordCraft with their writing; a crash loses their work. **This outr
|
||||
| apps | `apps/wordcraft`, `apps/wordcraft-cli`, `apps/wordcraft-web` | binaries |
|
||||
|
||||
- **Everything is a command.** User-visible behaviour = a `CommandSpec` in `crates/engine/src/cmd/*.rs` (id, label, ribbon location, shortcut, params doc, `enabled`, `run`) + tests. UI-only commands (`ui.*`) live in `crates/ui-egui/src/lib.rs`. The ribbon, shortcuts, command search, CLI, control channel and MCP all dispatch by id. Programmatic calls never open dialogs.
|
||||
- **Parity is measured:** `crates/engine/src/catalog.rs` lists Word's ribbon/menu features with command ids. `cargo xtask parity` writes `docs/parity.md`; a test enforces a floor that only rises. Implement missing ids to raise it.
|
||||
- **Parity is measured:** `crates/engine/src/catalog.rs` lists Word's ribbon/menu features with command ids. `cargo xtask parity` writes `docs/parity-checklist.md`; a test enforces a floor that only rises. Implement missing ids to raise it.
|
||||
- **Layering** is enforced by `cargo xtask layers`. Nothing below L6 depends on egui/eframe/winit/rfd. The UI is thin and reads `Session` state; colours come from `theme::Tokens`.
|
||||
- **Rust only** (no handwritten JS/TS). **Never break wasm** (`cargo xtask wasm`).
|
||||
|
||||
@@ -62,4 +62,4 @@ Typing, Enter, Backspace, Tab, lists, AutoCorrect and AutoFormat follow Word's o
|
||||
- Parallel agents: separate `CARGO_TARGET_DIR` per agent; edit only the crates you own; delete your target dir when done (disk).
|
||||
|
||||
## Roadmap
|
||||
`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a milestone task lands.
|
||||
Progress docs follow [`craftrules/standards/progress-docs.md`](https://github.com/storytold/craftrules/blob/main/standards/progress-docs.md): `ROADMAP.md` (stage, headline numbers, progress log), `docs/target-app-parity.md` (the assessment), `docs/gaps.md` (ranked work list), `docs/roadmap.md` (milestones, Current focus), `docs/architecture.md`, and the parity checklists `docs/file-format-parity.md`, `docs/layout-parity.md`, `docs/typing-parity.md`, `docs/ui-parity.md`, `docs/hardware-parity.md`, `docs/localization-parity.md`. When work lands, update the gap, the parity doc and the progress log, and bump each touched doc's status line and revision history.
|
||||
@@ -95,7 +95,7 @@ Every screenshot below is WordCraft itself, rendered offscreen by its own UI tes
|
||||
1.4 ms; pages render on demand.
|
||||
- **Everywhere.** One Rust codebase for macOS, Windows, Linux, BSD and the web. No Electron, no
|
||||
Tauri: native [egui](https://github.com/emilk/egui) on the GPU.
|
||||
- **Built for agents.** Every action is a command with an id. The same 389 commands drive the
|
||||
- **Built for agents.** Every action is a command with an id. The same 422 commands drive the
|
||||
ribbon, keyboard shortcuts, the command search, a command-line tool, a JSON control channel and
|
||||
an MCP server.
|
||||
- **Private.** Spelling, grammar and everything else work offline.
|
||||
@@ -120,8 +120,9 @@ Every screenshot below is WordCraft itself, rendered offscreen by its own UI tes
|
||||
| **View** | Print layout, web layout, draft, read mode, focus, zoom, one/multiple pages, page width, Navigation pane, rulers, gridlines, dark mode; interface in English, 简体中文, 繁體中文, 日本語, Português (Brasil), Español or Українська (follows the system language by default) |
|
||||
| **Files** | .docx read/write (opens in Word), Word 97-2003 .doc import, PDF export, .odt, .rtf, .html, .md, .tex, .txt import/export, page images |
|
||||
|
||||
The honest picture, area by area, is in [ROADMAP.md](ROADMAP.md) and the generated
|
||||
[feature parity report](docs/parity.md).
|
||||
The honest picture, area by area, is in [ROADMAP.md](ROADMAP.md), the
|
||||
[parity assessment](docs/target-app-parity.md) and the generated
|
||||
[feature checklist](docs/parity-checklist.md).
|
||||
|
||||
## Quick start
|
||||
|
||||
@@ -187,21 +188,22 @@ covers every target starting with it (`wordcraft*=debug`). The logger is
|
||||
| L1 | `wordcraft-doc`, `wordcraft-fonts`, `wordcraft-proof` | document model and editing; fonts and shaping; spelling, grammar, hyphenation |
|
||||
| L2 | `wordcraft-layout`, `wordcraft-docx`, `wordcraft-formats` | line breaking, pagination, tables, notes, hit testing; OOXML; ODT/RTF/HTML/Markdown/TXT |
|
||||
| L3 | `wordcraft-render`, `wordcraft-pdf` | rasteriser (vello_cpu); PDF (krilla) |
|
||||
| L4 | `wordcraft-engine` | session, undo, 389 commands, Word feature catalog |
|
||||
| L4 | `wordcraft-engine` | session, undo, 422 commands, Word feature catalog |
|
||||
| L5 | `wordcraft-mcp` | MCP server |
|
||||
| L6 | `wordcraft-ui-egui` | the Word-style front end (swappable) |
|
||||
| apps | `wordcraft`, `wordcraft-cli`, `wordcraft-web` | desktop, command line, browser |
|
||||
|
||||
`cargo xtask ci` runs formatting, clippy, ~250 tests, the asset-attribution check, the layering
|
||||
`cargo xtask ci` runs formatting, clippy, ~800 tests, the asset-attribution check, the layering
|
||||
check and the wasm build. Contributor and agent instructions: [AGENTS.md](AGENTS.md).
|
||||
|
||||
## Roadmap
|
||||
|
||||
WordCraft covers 87% of Word's ribbon features with commands today; counting depth and
|
||||
fidelity, we estimate about 62% of real feature parity. An alpha for everyday writing is close:
|
||||
the remaining work is mostly testing against real-world .docx files, native printing and the
|
||||
first signed builds. Charts, SmartArt, the equation editor and the Draw tab come after.
|
||||
Details and estimates: [ROADMAP.md](ROADMAP.md).
|
||||
WordCraft is in **alpha**. It covers 88% of Word's ribbon features with commands today; counting
|
||||
depth, file fidelity, stability and the rest, we estimate it is about 60% of the way to replacing
|
||||
all of Word for real work, about 55% for a typical professional's weekly work and about 63% for
|
||||
everyday essentials. Beta needs testing against real-world .docx files, keeping charts and SmartArt
|
||||
through a round trip, pagination closer to Word's, a stability sweep and native printing. Details
|
||||
and estimates: [ROADMAP.md](ROADMAP.md) and [where we fall short](docs/gaps.md).
|
||||
|
||||
## Downloads
|
||||
|
||||
|
||||
+135
-108
@@ -1,123 +1,150 @@
|
||||
# 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`).
|
||||
**Stage: alpha** · next: beta, ~15 points (60% → 75% ready for real work) and ~150–230 h away
|
||||
|
||||
## Where we are (2026-10-09)
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (readiness table with hours per audience; full number back to the additive weighted sum, 60%; mainstream and essentials numbers added; alpha gate checked; previously major: full re-measure against Word for Mac 16.113.4; restructured to the craftrules progress-docs standard) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
| Measure | Value |
|
||||
|---|---|
|
||||
| Commands (every action, scriptable by CLI/MCP/control channel) | **431** |
|
||||
| Feature catalog coverage (Word ribbon/menu features with a command) | **384 / 430 (89%)** |
|
||||
| **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 |
|
||||
WordCraft aims for complete parity with Microsoft Word, then goes further on speed, openness and
|
||||
agent control. This page is the summary; the assessment is
|
||||
[`docs/target-app-parity.md`](docs/target-app-parity.md), the work list is
|
||||
[`docs/gaps.md`](docs/gaps.md), and milestones and the current focus are in
|
||||
[`docs/roadmap.md`](docs/roadmap.md).
|
||||
|
||||
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.
|
||||
## Headline numbers (2026-10-10)
|
||||
|
||||
## 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 |
|
||||
| Number | Value | Kind |
|
||||
|---|---|---|
|
||||
| Typing, selection, clipboard, undo, find/replace | Solid; IME, autocorrect, smart quotes, list autoformat, column (block) selection | 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%+ |
|
||||
| Ribbon/menu catalog coverage | **384 / 430 (89.3%)** | measured (`cargo xtask parity` → [`docs/parity-checklist.md`](docs/parity-checklist.md)) |
|
||||
| **Feature breadth** (weighted, incl. dialog options, styles, languages beyond the ribbon) | **~80%** | estimated |
|
||||
| **Ready for real work** (full target) | **~60%** (55–63%) | estimated, additive weighted sum over the dimensions |
|
||||
| **Mainstream practitioner** | **~55%** | estimated: weekly-work depth × discounts for interaction (×0.93), stability (×0.90), file exchange (×0.90) |
|
||||
| **Essentials user** | **~63%** | estimated: core-feature depth × discounts for launch (×0.90), discoverability (×0.95), opening received files (×0.92) |
|
||||
| Remaining to **beta** | **~150–230 h** of Opus 5.5 agent wall-clock (gaps #1–#7) | estimated |
|
||||
| Remaining to **full parity** with Word desktop | **~750–1,250 h** (70–80% parallelizable) | estimated |
|
||||
| Commands / tests / code | 431 commands · 852 tests + 10 property blocks · ~88,700 lines of Rust | measured (source) |
|
||||
| Releases | v0.4.0 (2026-10-10): signed macOS universal DMG, Windows MSI x64/x86/arm64, Linux AppImage/deb/rpm/Flatpak x86_64 + aarch64, FreeBSD, web | measured |
|
||||
|
||||
## Estimate to 100%
|
||||
Hours are calibrated from this repo's PRs (equations #191: ~9.7k lines in ~5 h; `.doc` reader
|
||||
#145: ~4.5k lines in ~10 h; layout fidelity PRs run 5–10× slower per line). The earlier "≈120–150 h
|
||||
to 100%" (2026-10-06) left out localization, multilingual proofing, ecosystem, hardware, PDF Reflow
|
||||
and `.doc` writing, and priced the DOCX corpus at 10 h; see
|
||||
[methodology](docs/target-app-parity.md#methodology). The three readiness numbers, their weights,
|
||||
discounts and the user evidence (120 issues from outside users, 4 praise, 0 "switched from Word",
|
||||
~21 open core-path bugs) are in
|
||||
[readiness numbers](docs/target-app-parity.md#readiness-numbers-full-mainstream-practitioner-essentials-user).
|
||||
|
||||
**About 120–150 hours of Claude Opus 5.5 wall-clock work** (with parallel agents), in this order:
|
||||
| Audience | Ready | Opus 5.5 agent wall-clock hours to ~95% | Work that dominates |
|
||||
|---|---|---|---|
|
||||
| Full target (ready for real work) | **~60%** | **~650–1,100 h** (70–80% parallelizes) | Breadth: charts/SmartArt/Draw, localization and proofing languages, East Asian and RTL typography, `.doc` writing, PDF Reflow, ecosystem; plus everything below |
|
||||
| Mainstream practitioner | **~55%** | **~300–500 h** (~65% parallelizes) | DOCX real-world fidelity and preserving charts/SmartArt, pagination fidelity, formatting revisions, dialog depth, objects, stability |
|
||||
| Essentials user | **~63%** | **~90–140 h** (~50% parallelizes) | Install/launch stability, opening files people send (corpus subset, chart fallbacks), native printing, picture handling, English spelling depth |
|
||||
|
||||
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).
|
||||
**Why alpha:** the core workflows (write, format, styles, lists, tables, references, review, mail
|
||||
merge, open and save .docx) work end to end and ship as signed builds on every desktop platform
|
||||
and the web. **Why not beta:** DOCX has never been tested on real-world files; charts, SmartArt and
|
||||
OLE objects are dropped silently; pagination differs from Word (no Aptos-metric font, no column
|
||||
balancing or footnote continuation); formatting revisions are lost; there is open field evidence of
|
||||
a startup crash and several hangs; no native printing. Gaps #1–#7 in [`docs/gaps.md`](docs/gaps.md)
|
||||
are the beta list. All six core workflows pass the
|
||||
[alpha gate](docs/roadmap.md#alpha-gate-core-workflows) end to end on macOS, with save and reopen;
|
||||
the two partial ones (real-world .docx, printing) complete, roughly.
|
||||
|
||||
## Milestones
|
||||
## By dimension
|
||||
|
||||
| # | Milestone | State |
|
||||
| Dimension | Parity | Hours to full | Doc |
|
||||
|---|---|---|---|
|
||||
| Features (depth) | 68% | 210–335 | [target-app-parity.md](docs/target-app-parity.md#feature-areas) |
|
||||
| UI/UX fidelity | 65% | 65–100 | [ui-parity.md](docs/ui-parity.md) · [typing-parity.md](docs/typing-parity.md) |
|
||||
| File formats | 60% | 185–300 | [file-format-parity.md](docs/file-format-parity.md) |
|
||||
| Layout and pagination fidelity | 55% | 90–145 | [layout-parity.md](docs/layout-parity.md) |
|
||||
| Hardware | 40% | 20–40 | [hardware-parity.md](docs/hardware-parity.md) |
|
||||
| Localization | 25% | 80–130 + native review | [localization-parity.md](docs/localization-parity.md) |
|
||||
| Performance | 75% | 10–20 | [layout-parity.md](docs/layout-parity.md#performance) |
|
||||
| Stability | 50% | 25–45 | [gaps.md](docs/gaps.md) (#3) |
|
||||
| Platforms | 95% (beyond Word on Linux, BSD, web) | 5–10 | this page |
|
||||
| Ecosystem and plugins | 15% | 40–80 + owner decisions | [gaps.md](docs/gaps.md) (#22) |
|
||||
| AI features | 40% (beyond Word for external agents; no in-app assistant) | 15–30 | [gaps.md](docs/gaps.md) (#25) |
|
||||
|
||||
## Features
|
||||
|
||||
| Area | Parity | Hours |
|
||||
|---|---|---|
|
||||
| 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 |
|
||||
| Typing, selection, clipboard, undo, find/replace | 85% | 8–12 |
|
||||
| Character and paragraph formatting | 82% | 8–12 |
|
||||
| Lists | 78% | 5–8 |
|
||||
| Equations | 75% | 4–8 |
|
||||
| Tables | 76% | 10–16 |
|
||||
| Styles and themes | 74% | 8–12 |
|
||||
| Review (comments, track changes, compare, protect) | 72% | 15–25 |
|
||||
| View | 72% | 6–10 |
|
||||
| Page layout and sections | 70% | 12–20 |
|
||||
| Mailings | 70% | 6–10 |
|
||||
| Headers, footers, page numbers, fields | 70% | 8–12 |
|
||||
| References (TOC, citations, bibliography, captions, index) | 65% | 12–20 |
|
||||
| Footnotes and endnotes | 60% | 5–8 |
|
||||
| Pictures, shapes, text boxes, WordArt | 60% | 20–30 |
|
||||
| Backstage, printing, options | 58% | 12–20 |
|
||||
| Right-to-left and complex scripts | 50% | 15–25 |
|
||||
| Proofing (spelling, grammar, thesaurus, languages) | 35% | 25–45 |
|
||||
| Accessibility | 35% | 15–25 |
|
||||
| East Asian typography | 15% | 20–30 |
|
||||
| Charts, SmartArt, Draw/ink, 3D models, icons | 3% | 70–110 |
|
||||
| Agent control (CLI, MCP, control channel, macros) | beyond Word | — |
|
||||
|
||||
## 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.
|
||||
Weights and evidence per area: [docs/target-app-parity.md](docs/target-app-parity.md#feature-areas).
|
||||
|
||||
## Next
|
||||
The DOCX fidelity corpus, then footnote continuation, column balancing and native printing.
|
||||
## Languages
|
||||
|
||||
| Language | Code | Status | UI strings |
|
||||
|---|---|---|---|
|
||||
| English | en | full | 100% |
|
||||
| Simplified Chinese | zh-hans | partial | ~95% |
|
||||
| Spanish | es | partial | ~95% |
|
||||
| Hindi | hi | none | 0% |
|
||||
| Arabic | ar | none (document shaping and bidi work; no mirrored UI) | 0% |
|
||||
| French | fr | none | 0% |
|
||||
| Portuguese | pt-br (pt-PT none) | partial | ~95% |
|
||||
| Indonesian | id | none | 0% |
|
||||
| Japanese | ja | partial | ~95% |
|
||||
| German | de | none (PR #203 open) | 0% |
|
||||
| Korean | ko | none | 0% |
|
||||
| Vietnamese | vi | none | 0% |
|
||||
|
||||
Also shipped: Traditional Chinese (`zh-hant`), Ukrainian (`uk`) and Serbian (`sr`, `sr-latn`, #250), all partial (~95%). Word ships
|
||||
30 interface languages and proofing for ~50. Detail: [docs/localization-parity.md](docs/localization-parity.md).
|
||||
|
||||
## Upcoming
|
||||
|
||||
Ranked, to beta (detail and remaining milestones in [docs/roadmap.md](docs/roadmap.md)):
|
||||
|
||||
1. Review and merge the ~45 open PRs that already close gaps (owner).
|
||||
2. DOCX real-world corpus: open, render, round-trip, compare with Word (30–50 h).
|
||||
3. Preserve charts, SmartArt, OLE and ink through a round trip with fallback pictures (10–15 h).
|
||||
4. Stability sweep of the open crash, hang and write-failure issues; autosave soak test (20–30 h).
|
||||
5. Pagination fidelity: column balancing, footnote continuation, compat options, comparison
|
||||
harness; an Aptos-metric font decision (30–50 h + owner).
|
||||
6. Formatting revisions and content controls (12–18 h); native printing (6–10 h); dialog depth
|
||||
(20–30 h).
|
||||
|
||||
## Progress log
|
||||
|
||||
| Date | What landed |
|
||||
|---|---|
|
||||
| 2026-10-10 | Full re-measure against Word for Mac 16.113.4 and progress docs to the craftrules standard (this page, `docs/target-app-parity.md`, `gaps.md`, `roadmap.md`, `architecture.md`, format/layout/UI/hardware/localization parity; `docs/parity.md` → `docs/parity-checklist.md`). Landed the same day (~80 PRs): equations with OMML and an Equation tab (#191); Word 97-2003 `.doc` import (#145); right-to-left and Persian text (#207); Zotero integration (#189); Read Aloud player (#190); text boxes and floating objects editable (#46) and placed like Word (#136); floating tables (#137); track-changes fixes (#125, #244); typing parity with Word (#204); hidden text (#173); save prompts and AutoSave rules (#151); LaTeX import/export (#11); keytips and mini-toolbar (#43); Spanish, Ukrainian and Brazilian Portuguese interfaces; system theme (#249); Linux file dialogs no longer freeze (#246); Chinese UI font on Windows (#248); every installed font weight (#239); cell text direction (#245); Paste Special (#235), Advanced Find (#234), Column Selection (#237), Style Inspector (#236), custom table styles (#256), View gridlines (#243), zoom buttons (#232), inertial touchpad scrolling (#252), File Info fields kept (#268), ¶ in mixed-direction paragraphs (#278), Serbian interface (#250); v0.4.0 released |
|
||||
| 2026-10-09 | Interface languages follow the system or Options (#12; zh-hans, zh-hant, ja); TOC page numbers as an updatable field (#52); rotating log file (#17); window geometry remembered (#38) |
|
||||
| 2026-10-08 | v0.2.0 and v0.3.0 released; Flatpak and AppImage auto-update (#22) |
|
||||
| 2026-10-07 | v0.1.0 released; contributor credits in About (#6) |
|
||||
| 2026-10-06 | Layout arc: wrap around floats, text boxes, page borders, line numbers, row splitting, drop caps, hyphenation, comment balloons; release pipeline for every platform; first estimate (~62% real feature parity, 120–150 h to 100%) |
|
||||
| 2026-10-05 | M0–M12 first versions: model, layout, render, engine with 200+ commands, Word-style UI, DOCX I/O, PDF and other formats, references, review, mailings, CLI, MCP, web |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Merged main: catalog 384/430 (89.3%), 431 commands; Paste Special, Advanced Find, Column Selection, Style Inspector, custom table styles, gridlines, zoom buttons, touchpad scrolling, File Info, Serbian landed; mainstream 54→55% |
|
||||
| 2026-10-10 | minor | Readiness table with hours per audience; full number restored to the additive weighted sum (~47% → ~60%): method aligned with the standard, no new evidence; beta distance back to ~15 points and ~150–230 h |
|
||||
| 2026-10-10 | minor | Mainstream practitioner (~54%) and essentials user (~63%) numbers added; full number recomputed 60% → ~47% with the standard's discounts; beta distance now ~28 points and ~450–700 h; stage stays alpha |
|
||||
| 2026-10-10 | minor | Alpha gate checked (six core workflows pass); stage stays alpha |
|
||||
| 2026-10-10 | major | Full re-measure; restructured to the progress-docs standard (stage banner, two numbers, dimensions, languages, upcoming, progress log); parity tables moved to `docs/target-app-parity.md`, milestones to `docs/roadmap.md` |
|
||||
| 2026-10-09 | minor | Recently landed: RTL, Ukrainian and Brazilian Portuguese |
|
||||
| 2026-10-06 | major | First honest estimate: 88% catalog, ~62% real parity, alpha ~85% of the way |
|
||||
@@ -1,6 +1,6 @@
|
||||
//! The word-processor feature catalog: the incumbent's ribbon and menu commands (feature names
|
||||
//! only) mapped to our command ids. `parity()` compares it with the registry; the gap is the
|
||||
//! work list (`cargo xtask parity` → docs/parity.md).
|
||||
//! work list (`cargo xtask parity` → docs/parity-checklist.md).
|
||||
|
||||
use serde_json::{Value, json};
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
# WordCraft architecture
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first committed version; `plan/architecture.md` is local-only) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
How WordCraft is built today (origin/main `40c5d51`). The longer design notes in
|
||||
`plan/architecture.md` are gitignored and local to the original author's machine; this file is the
|
||||
committed, current summary. Rules for working in the code are in [`AGENTS.md`](../AGENTS.md).
|
||||
|
||||
## Layers
|
||||
|
||||
~85,600 lines of Rust, 15 crates, 3 apps and `xtask`. Layering is enforced by `cargo xtask layers`:
|
||||
a crate may only depend on crates in lower layers, and nothing below L6 depends on egui, eframe,
|
||||
winit or rfd.
|
||||
|
||||
| Layer | Crate | Lines | Job |
|
||||
|---|---|---|---|
|
||||
| L0 | `geom` | 0.2k | Units (points, twips, EMU, inches, cm), rectangles, measurement parsing |
|
||||
| L1 | `doc` | 10.0k | Document model: stories, paragraphs, runs, tables, sections, styles, numbering, fields, notes, comments, revisions, equations (OMML-shaped math tree, linear/LaTeX input); edit primitives; bidi |
|
||||
| L1 | `fonts` | 2.3k | Font database (bundled OFL + system fonts), metrics, outlines, shaping with HarfRust, Word font substitution (`word.rs`: Carlito ↔ Calibri, Caladea ↔ Cambria, Liberation ↔ Arial/Times/Courier), OpenType MATH |
|
||||
| L1 | `proof` | 1.4k | Spelling (public-domain English word list), suggestions, rule-based grammar, hyphenation patterns |
|
||||
| L2 | `layout` | 9.6k | Shaping runs, line breaking, tabs, lists, tables (row splitting, floating tables), pagination, headers/footers, notes, floating objects and wrap, math layout, fields, hit testing; produces a display list |
|
||||
| L2 | `docx` | 8.4k | OOXML WordprocessingML reader and writer (Transitional and Strict namespaces, `.docx/.docm/.dotx/.dotm`), OMML, custom properties, VBA parts preserved |
|
||||
| L2 | `docbin` | 4.4k | Word 97-2003 `.doc` reader ([MS-DOC]: FIB, piece table, FKPs, SPRMs, stylesheet, lists, tables, notes, pictures) over a CFB container |
|
||||
| L2 | `formats` | 10.6k | TXT, Markdown, HTML, RTF, ODT and LaTeX import/export through a shared intermediate model |
|
||||
| L3 | `render` | 0.6k | vello_cpu rasteriser: pages and thumbnails from the display list; PNG/JPEG |
|
||||
| L3 | `pdf` | 1.6k | krilla PDF export: font subsets, selectable text, links, outline, tagging |
|
||||
| L4 | `engine` | 15.2k | `Session` (document, selection, undo, layout cache, view state), **command registry** (422 `CommandSpec`s in `cmd/*.rs`), Word feature catalog (`catalog.rs`), samples, file I/O dispatch (`io.rs`), Read Aloud sentence model |
|
||||
| L4 | `zotero` | 1.7k | Zotero's word-processor integration protocol answered against a `Session` |
|
||||
| L4 | `control-key` | 0.1k | Per-window control-port key files shared by the app and the MCP bridge |
|
||||
| L5 | `mcp` | 1.0k | MCP server: every command as a tool; headless or bridged to the running app |
|
||||
| L6 | `ui-egui` | 13.1k | Word-style front end: ribbon, keytips, mini-toolbar, Backstage, canvas, rulers, panes, dialogs, Equation tab, i18n catalogs, themes, control channel, headless `ui_shot` example |
|
||||
| apps | `wordcraft` | 1.6k | Desktop app (eframe + wgpu; logging, window geometry, file associations) |
|
||||
| apps | `wordcraft-cli` | 0.4k | `convert`, `text`, `inspect`, `run`, `commands`, `parity`, `mcp`, `zotero` |
|
||||
| apps | `wordcraft-web` | 0.3k | Browser build (eframe web runner, WebGPU with WebGL2 fallback) |
|
||||
|
||||
## Data flow
|
||||
|
||||
1. **Open:** `engine::io` picks a reader by extension (`docx`, `docbin`, `formats`, JSON) and
|
||||
produces a `doc::Document`.
|
||||
2. **Edit:** every user-visible action is a command id run through `Session::run` (ribbon,
|
||||
shortcuts, command search, CLI, control channel and MCP all dispatch by id). `Session::run`
|
||||
snapshots for undo (blocks are `Arc`-shared, so snapshots are cheap) and catches an escaped
|
||||
panic, restoring the document (never-crash standard).
|
||||
3. **Layout:** `layout` turns the document into pages of positioned glyphs, boxes and images
|
||||
(display list), incrementally: an edit relayouts only what changed (1.4 ms on a 188-page
|
||||
document, measured 2026-10-06).
|
||||
4. **Draw:** the UI paints pages through `render` (CPU raster, cached per page, pixel-aligned) on
|
||||
an egui/wgpu canvas; PDF export walks the same display list through `pdf`.
|
||||
5. **Save:** `engine::io` picks a writer by extension.
|
||||
|
||||
## Testing and gates
|
||||
|
||||
- 821 `#[test]` functions and 10 property-test blocks: model, layout, DOCX round-trip and hostile
|
||||
input, `.doc`, formats, typing parity (`engine/src/tests_typing.rs`), bidi, i18n catalogs, UI
|
||||
interaction (egui_kittest), MCP acceptance; `hostile_params_never_panic` runs every command with
|
||||
junk params.
|
||||
- `cargo xtask ci`: fmt, clippy `-D warnings`, tests, asset attribution, layering, wasm build.
|
||||
- `cargo xtask parity` regenerates [`parity-checklist.md`](parity-checklist.md); a test keeps the
|
||||
catalog percentage above a floor that only rises.
|
||||
- GitHub Actions on PRs: packaging lint, and FreeBSD / Windows ARM64 when build files change;
|
||||
release builds on pushes to `release`.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First committed architecture doc, from the crates' sources and `AGENTS.md` |
|
||||
@@ -0,0 +1,84 @@
|
||||
# File-format parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first version; every format Word reads or writes, measured from the readers and writers on origin/main) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4, plus Word for Windows' extra formats
|
||||
|
||||
Every format Word opens or saves, what WordCraft does with it, and how it's tested. Fidelity is the
|
||||
share of a typical real-world file's content and formatting that survives (read: shows correctly;
|
||||
write: Word opens it showing the same). Summary in [`target-app-parity.md`](target-app-parity.md);
|
||||
the work items are in [`gaps.md`](gaps.md).
|
||||
|
||||
**Dimension: ~60% (estimated), 185–300 h to full** (the sum of the rows below). The weighted table
|
||||
gives ~64%; we discount it to ~60% because DOCX fidelity has never been checked on real-world
|
||||
files. DOCX dominates the weight: a Word user sends and receives .docx; everything else is
|
||||
occasional.
|
||||
|
||||
## Formats
|
||||
|
||||
Weights are the share of a Word user's file traffic (estimate). Read/write: ✅ yes, 🟡 partial,
|
||||
❌ no, — Word doesn't either.
|
||||
|
||||
| Format | Weight | Word | WordCraft read | WordCraft write | Fidelity | Hours | How it's tested | Notes |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| `.docx` Word Document (ECMA-376 Transitional) | 70% | R/W | ✅ | ✅ | ~65% | 70–110 | `crates/docx/tests` (roundtrip 28, fixtures 21, malformed 8, bidi 4, citations 5); synthetic fixtures only | Word opens our files. Untested on a real-world corpus. Details below |
|
||||
| `.docx` Strict Open XML | 1% | R/W | ✅ (namespace mapping in `xml.rs`) | ❌ | ~60% | 2–4 | one fixture | Writing Strict is rare |
|
||||
| `.docm` / `.dotx` / `.dotm` | 3% | R/W | ✅ | ✅ | ~65% | incl. above | `macro_packages.rs` | Macros and signatures kept on save (#172); macros never run |
|
||||
| `.doc` Word 97-2003 (and `.dot`) | 8% | R/W | 🟡 | ❌ | ~55% | 25–40 | `crates/docbin/src/tests.rs` (50) | Spec-based reader ([MS-DOC]): text, formatting, styles, sections, headers/footers, tables, lists, notes, fields, bookmarks, pictures. Metafile (WMF/EMF) pictures, Word 6/95 files and encrypted files are refused or dropped. No writer |
|
||||
| PDF export | 8% | W | — | ✅ | ~80% | 6–10 | `crates/pdf/src/tests.rs` | krilla: embedded subsets, selectable text incl. field results (#133), links, outline, tagging. Fonts it can't subset become outlines (#132). No PDF/A option, no "best for printing/online" choice |
|
||||
| PDF open (PDF Reflow, Word for Windows) | 1% | R | ❌ | — | 0% | 30–50 | — | Converting a PDF into an editable document. A sibling app (PdfCraft) may supply the parser |
|
||||
| `.rtf` Rich Text Format | 3% | R/W | 🟡 | 🟡 | ~50% | 10–15 | `crates/formats/src/tests.rs` | ~1,500 lines: text, character/paragraph formatting, styles, lists, tables, pictures (`\shppict`, #154), fields, bookmarks. Thin: comments, notes, revisions, sections, RTL |
|
||||
| `.odt` OpenDocument Text | 2% | R/W | 🟡 | 🟡 | ~50% | 8–12 | `crates/formats/src/tests.rs` | Styles, lists (#87), tables, pictures, headers/footers, page breaks (#86). No footnotes, comments, tracked changes, fields or RTL |
|
||||
| `.txt` Plain text | 2% | R/W | ✅ | ✅ | ~95% | 1–2 | unit tests | Encoding detection; Word's encoding choice dialog and line-ending options missing |
|
||||
| `.htm/.html` Web Page and Web Page, Filtered | 1% | R/W | 🟡 | 🟡 | ~60% | 6–10 | `crates/formats/src/tests.rs` | Tables (#102), relative pictures embedded (#113), missing `</head>` tolerated (#154). No Word "Web Page" (with `_files` folder) round-trip |
|
||||
| `.mht/.mhtml` Single File Web Page | <1% | R/W | ❌ | ❌ | 0% | 3–5 | — | |
|
||||
| `.xml` Word XML Document (Flat OPC) | <1% | R/W | ❌ | ❌ | 0% | 3–5 | — | The DOCX parts in one XML file; cheap once the DOCX code is reused |
|
||||
| `.xml` Word 2003 XML (WordprocessingML 2003) | <1% | R/W | ❌ | ❌ | 0% | 5–8 | — | Legacy |
|
||||
| `.wps` Works 6–9, WordPerfect `.wpd` (Windows) | <1% | R | ❌ | — | 0% | 10–20 | — | Windows-only converters; low value |
|
||||
| Encrypted/password-protected `.docx`/`.doc` | 1% | R/W | ❌ | ❌ | 0% | 6–10 | — | ECMA-376 Agile Encryption; `.doc` RC4/XOR detected and refused (`docbin` fib). Issue #55 |
|
||||
| `.md` Markdown | — | (no) | ✅ | ✅ | — | — | `crates/formats/src/tests.rs` | Beyond Word |
|
||||
| `.tex` LaTeX | — | — | ✅ | ✅ | — | — | `crates/formats/src/tests.rs` | Beyond Word (#11), incl. math |
|
||||
| `.png` page images | — | (Save as picture, Mac) | — | ✅ | — | — | `io_ext.rs` | |
|
||||
| `.json` document model | — | — | ✅ | ✅ | — | — | engine tests | For agents |
|
||||
|
||||
## DOCX in depth
|
||||
|
||||
Measured by grepping `crates/docx/src/read` and `src/write` for the OOXML elements (2026-10-10).
|
||||
|
||||
| Feature | Read | Write | Notes |
|
||||
|---|---|---|---|
|
||||
| Text, runs, paragraph and character properties, styles, numbering, sections | ✅ | ✅ | Including complex-script props (`w:rtl`, `w:cs`, `w:szCs`, `w:bCs`…), East Asian fonts kept apart from Latin (#111) |
|
||||
| Tables incl. floating (`w:tblpPr`), table styles and conditional formatting | ✅ | ✅ | Custom table styles round-trip (#256) |
|
||||
| Headers/footers (first, even/odd), page borders, line numbers, gutter, mirror margins | ✅ | ✅ | |
|
||||
| Footnotes, endnotes, comments | ✅ | ✅ | `commentsExtended` written; `commentsIds`, modern threaded comments (`w16cex`) partly |
|
||||
| Tracked insertions and deletions (`w:ins`/`w:del`), paragraph-mark revisions | ✅ | ✅ | #125, #244 |
|
||||
| Formatting revisions (`w:rPrChange`, `w:pPrChange`, `w:sectPrChange`, `w:tblPrChange`) | ❌ | ❌ | Lost on open. Issue #41 |
|
||||
| Move tracking (`w:moveFrom`/`w:moveTo`) | 🟡 | ❌ | Read as plain insert/delete |
|
||||
| Fields (`w:fldChar`, `w:fldSimple`), TOC, cross-references, `ADDIN` citations | ✅ | ✅ | Field codes Word supports but we don't evaluate keep their cached result |
|
||||
| Content controls (`w:sdt`) | 🟡 | ❌ | Content kept, the control (type, binding, placeholder, lock) dropped |
|
||||
| Legacy form fields (`w:ffData`), check boxes, drop-downs | ❌ | ❌ | |
|
||||
| DrawingML pictures inline and anchored (`wp:anchor`), wrap square/tight/through/top-bottom | ✅ | ✅ | Tight/through read and written, laid out as square |
|
||||
| DrawingML shapes and text boxes (`wps:`) | ✅ | ✅ | Preset geometries subset |
|
||||
| Group shapes (`wpg:`), drawing canvas | ❌ | ❌ | Dropped |
|
||||
| VML (`w:pict`, `v:shape`, `v:textbox`) | 🟡 | ❌ | Pictures and text boxes, best effort (#242) |
|
||||
| Charts (`c:chart`), SmartArt (`dgm`), ink, 3D models, OLE objects (`w:object`) | ❌ | ❌ | Dropped on read, not preserved on save. A document with a chart loses it silently |
|
||||
| Equations (OMML `m:oMath`) | ✅ | ✅ | #191 |
|
||||
| Themes, font table, settings, compatibility mode | ✅ | ✅ | Embedded fonts (`w:embedRegular`) not read |
|
||||
| Custom XML parts, document properties, bibliography sources | 🟡 | 🟡 | Custom properties round-trip; bibliography sources pending (#169) |
|
||||
| Ruby, `w:eastAsianLayout`, `w:fitText`, document grid (`w:docGrid`) | ❌ | ❌ | East Asian layout |
|
||||
| Glossary document (building blocks), `w:altChunk`, sub-documents | ❌ | ❌ | |
|
||||
| Hostile input | ✅ | — | `malformed.rs`, capped allocations, never-crash standard |
|
||||
|
||||
## What decides beta for formats
|
||||
|
||||
1. A **real-world DOCX corpus** opened, rendered and round-tripped, compared page by page with
|
||||
Word (local only: Word output can't be committed; keep a manifest and our own renders).
|
||||
2. **Preserve what we can't render**: charts, SmartArt, OLE, ink and content controls survive a
|
||||
round trip (keep the parts and the run), and charts/SmartArt show their fallback picture.
|
||||
3. Formatting revisions and content controls read and written.
|
||||
4. Encrypted `.docx` opens with a password.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | trivial | Custom table styles round-trip (#256 merged) |
|
||||
| 2026-10-10 | major | First version: Word's full format list, read/write status, DOCX element coverage from the source, fidelity and hours |
|
||||
@@ -0,0 +1,69 @@
|
||||
# Where WordCraft falls short of Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (beta distance restated: ~15 points, ~150–230 h; previously: first version; every known shortfall from the 2026-10-10 re-measure, ranked) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
The work list. One entry per shortfall, ranked by how much it stops a Word user from switching
|
||||
(**B** = blocks beta). Each says what's missing, the evidence, who it hurts, an Opus 5.5 agent
|
||||
wall-clock estimate, and which parity document tracks it. Agents: pick from the top, check open PRs
|
||||
first (`gh pr list`), and update this file and the parity doc when a gap closes.
|
||||
|
||||
## Ranked
|
||||
|
||||
| # | Gap | B | Evidence | Impact | Hours | Doc |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | **DOCX never tested on real-world files.** No corpus of files from Word, Google Docs, LibreOffice and Pages has been opened, rendered and round-tripped and compared with Word page by page | B | No corpus in the repo; `crates/docx/tests` are synthetic fixtures; "DOCX fidelity corpus: not started" since 2026-10-06 | Everyone: the files people receive are the files that break | 30–50 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 2 | **Charts, SmartArt, OLE objects, ink and group shapes are dropped on open and lost on save, silently** | B | No `c:chart`, `dgm`, `wpg`, `w:object` handling in `crates/docx` | Business and academic documents lose content without warning | 10–15 to preserve and show fallback pictures; 45–70 to render and edit charts and SmartArt | [file-format-parity.md](file-format-parity.md) |
|
||||
| 3 | **Crashes and freezes in the field**: startup crash on Intel UHD Graphics (#170), freezes (#77, #59 Thai fonts, #31 font selector), no writes without admin on Windows 11 (#218), broken shape tool (#142), images can't be moved (#82) | B | 62 open issues, ~15 of them crashes, hangs or data-path failures | Anyone hit loses work or trust; the never-crash standard covers panics, not hangs or GPU driver faults | 20–30 | [target-app-parity.md](target-app-parity.md) (Stability) |
|
||||
| 4 | **Pagination differs from Word**: Aptos has no metric-matched substitute; columns don't balance; long footnotes don't continue; legacy compatibility options ignored; no page-by-page comparison harness | B | [layout-parity.md](layout-parity.md); [typing-parity.md](typing-parity.md) Known gaps | Page counts and line breaks differ, which matters for forms, legal and academic work | 30–50 + owner (font) | [layout-parity.md](layout-parity.md) |
|
||||
| 5 | **Formatting revisions, move tracking and content controls** are lost (`w:rPrChange`/`w:pPrChange` absent; `w:sdt` unwrapped) | B | Issue #41; source grep | Legal and editorial review workflows; templates with form controls | 12–18 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 6 | **No native printing** on desktop (PDF export only); web prints through the browser (#209) | B | `file.print` exports PDF; issue #15 | Everyone who prints | 6–10 | [hardware-parity.md](hardware-parity.md) |
|
||||
| 7 | **Dialog depth**: 16 modal dialogs vs Word's ~100 (Tabs, Borders and Shading, Columns, Symbol, Field, Define Multilevel List, Table Properties, Track Changes Options, Options panes…) | B | `Dialog` enum in `crates/ui-egui/src/dialogs.rs` | Power users reach for dialogs the ribbon alone doesn't cover | 20–30 | [ui-parity.md](ui-parity.md) |
|
||||
| 8 | **Proofing is English only**; no language per run, no dictionaries for other languages | | `crates/proof` has one dictionary; Word ships 120 proofing tools; issues #25, #40, #100 | Every non-English writer | 25–45 | [localization-parity.md](localization-parity.md) |
|
||||
| 9 | **Password-protected files** can't be opened or saved | | #55; `docbin` detects and refuses RC4/XOR | Corporate and legal users | 6–10 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 10 | **Objects**: no group (#267 open), rotation handle, contour (tight/through) wrap, shape effects, WordArt, connectors, Drawing Canvas, Icons | | [parity-checklist.md](parity-checklist.md) (Shape Format 2/6, Layout › Group) | Newsletters, flyers, reports with diagrams | 20–30 | [target-app-parity.md](target-app-parity.md) |
|
||||
| 11 | **Interface languages**: 8 of the 12 key languages missing (hi, ar, fr, id, de, ko, vi, pt-PT); no mirrored RTL interface; ~5% of strings still English in the six translated catalogs | | [localization-parity.md](localization-parity.md) | Most of the world's writers | 50–80 | [localization-parity.md](localization-parity.md) |
|
||||
| 12 | **Draw tab / ink**: all 11 commands missing | | [parity-checklist.md](parity-checklist.md) (Draw 0/11) | Pen and tablet users | 15–25 | [hardware-parity.md](hardware-parity.md) |
|
||||
| 13 | **Charts and SmartArt editing** (own renderer, chart data editing, SmartArt layouts) | | `insert.chart`, `insert.smartArt` missing | Reports and business documents | 45–70 | [target-app-parity.md](target-app-parity.md) |
|
||||
| 14 | **`.doc` can't be written; metafile pictures and Word 6/95 files refused** | | `crates/docbin` is read-only | Users exchanging files with old Word or legacy systems | 25–40 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 15 | **References depth**: 4 of Word's 12 bibliography styles; sources not saved in DOCX (#169 open); no EndNote/Mendeley desktop integration | | Word's `Resources/Style` lists 12 styles | Students and researchers | 10–15 | [target-app-parity.md](target-app-parity.md) |
|
||||
| 16 | **Right-to-left completeness**: RTL sections and tables, kashida, RTL in HTML/ODT/RTF; eight older RTL bug reports to re-verify after #207 (#215, #211, #199, #66, #63, #48, #19) | | [layout-parity.md](layout-parity.md) | Arabic, Persian, Hebrew writers | 10–15 | [layout-parity.md](layout-parity.md) |
|
||||
| 17 | **East Asian typography**: vertical text, ruby/Phonetic Guide, Enclose Characters, document grid, Asian Typography options | | Catalog misses `format.phonetic`, `format.enclose`, `para.asianTypography` | Chinese, Japanese and Korean documents | 20–30 | [layout-parity.md](layout-parity.md) |
|
||||
| 18 | **Screen-reader access** to the document canvas untested | | AccessKit enabled; no tests | Blind and low-vision users; public-sector procurement | 10–15 | [ui-parity.md](ui-parity.md) |
|
||||
| 19 | **RTF and ODT depth**: notes, comments, revisions, sections, RTL | | ~1,500 lines each in `crates/formats` | Users exchanging with LibreOffice or older tools | 18–27 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 20 | **Performance on large real-world documents** unmeasured (500+ pages, many pictures) | | Only the 188-page sample benchmark | Thesis and book authors | 10–20 | [layout-parity.md](layout-parity.md) |
|
||||
| 21 | **Mail merge data sources**: no Excel, Outlook/Contacts, email merge; CSV and typed lists only (#247) | | | Office administrators | 6–10 | [target-app-parity.md](target-app-parity.md) |
|
||||
| 22 | **Ecosystem**: no VBA execution (macros preserved only), no Office add-ins, no cloud storage, no real-time co-authoring | | `.docm` keeps macros (#172) | Enterprise users with macro templates; teams | 40–80 + owner decisions | [target-app-parity.md](target-app-parity.md) |
|
||||
| 23 | **PDF Reflow** (open a PDF as an editable document, Word for Windows) | | | Users who edit PDFs they receive | 30–50 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 24 | **Customize Ribbon / Keyboard**, Quick Access Toolbar customization; ~100 of Word's ~250 shortcuts | | [ui-parity.md](ui-parity.md) | Power users | 10–16 | [ui-parity.md](ui-parity.md) |
|
||||
| 25 | **In-app AI assistant** (Copilot-style draft, rewrite, summarize) | | Chat PR #178 open | Users expecting Copilot | 15–30 + owner (provider) | [target-app-parity.md](target-app-parity.md) |
|
||||
| 26 | **Minor formats**: Flat OPC XML, Word 2003 XML, MHT, Works/WordPerfect | | | Rare | 20–35 | [file-format-parity.md](file-format-parity.md) |
|
||||
| 27 | **View windows**: Side by Side, Synchronous Scrolling, Arrange All, Switch Windows | | [parity-checklist.md](parity-checklist.md) (View 25/29) | Comparing documents | 3–5 | [ui-parity.md](ui-parity.md) |
|
||||
| 28 | **Dictate** | | `tools.dictate` missing | Dictation users | 8–15 + owner (speech model) | [hardware-parity.md](hardware-parity.md) |
|
||||
| 29 | **Equations**: long display equations don't break across lines; ink equations | | #191 notes | Maths-heavy documents | 3–4 | [layout-parity.md](layout-parity.md) |
|
||||
|
||||
**Beta needs #1–#7** (~150–230 h with the stability and layout work they imply): they are the
|
||||
blocking gaps, and closing them lifts file formats, layout, stability and UI enough to take the
|
||||
full number from ~60% to ~75%. Everything else is depth on the way to full parity.
|
||||
|
||||
## By kind
|
||||
|
||||
The same gaps grouped the way the parity documents are, for agents working in one area.
|
||||
|
||||
- **Feature gaps:** #2 (preserve), #5, #10, #12, #13, #15, #17, #21, #25, #27, #28, #29; Clipboard
|
||||
pane, Manage Styles, Group, Draw Table (open PRs exist for the first three — review and merge
|
||||
before re-implementing). Paste Special, Advanced Find, Column Selection, Style Inspector and
|
||||
custom table styles landed on 2026-10-10.
|
||||
- **UI/UX gaps:** #7, #18, #24; rotation and crop handles on the canvas; table column drag on the
|
||||
ruler (#49, #217); context menus for objects and tables; Linux title bar theming (#78).
|
||||
- **File-format gaps:** #1, #2, #5, #9, #14, #19, #23, #26; embedded fonts; glossary/building blocks.
|
||||
- **Hardware gaps:** #6, #12, #28; scanner/Continuity Camera insert; KDE soft text (#140).
|
||||
- **Localization gaps:** #8, #11, #16, #17; native-speaker review of every catalog (human).
|
||||
- **Stability and performance gaps:** #3, #20.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | trivial | Merged main: landed features removed from the feature-gap list |
|
||||
| 2026-10-10 | minor | Beta note restated: full number back to the additive ~60% (method aligned with the standard, no new evidence) |
|
||||
| 2026-10-10 | major | First version, from the full re-measure: 29 ranked gaps with evidence, impact and hours |
|
||||
@@ -0,0 +1,27 @@
|
||||
# Hardware parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first version) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4 and Word for Windows
|
||||
|
||||
Word is not a hardware-heavy app, but a few devices matter to its users: printers above all, then
|
||||
pens, microphones (Dictate) and speakers (Read Aloud), and displays.
|
||||
|
||||
**Dimension: ~40% (estimated), 20–40 h to full** (pen/ink hours are counted with the Draw tab in
|
||||
[`target-app-parity.md`](target-app-parity.md)).
|
||||
|
||||
| Hardware | Word | WordCraft macOS | Windows | Linux / BSD | Web | Parity | Hours |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| Printers: native print dialog, printer choice, copies, duplex, page ranges, tray, scaling | ✅ (`WordPDE.plugin` print-dialog extension on Mac) | ❌ via PDF export | ❌ via PDF | ❌ via PDF | ✅ browser print dialog (#209) | 25% | 6–10 |
|
||||
| GPU rendering, HiDPI/Retina, pixel-aligned text | ✅ | ✅ wgpu + vello_cpu rasteriser, whole-pixel text (#110, #165) | ✅ DirectX 12 default (#50); startup crash on Intel UHD (#170) | ✅ (soft text on KDE at some zooms, #140) | ✅ | 80% | 3–5 (bugs) |
|
||||
| Multiple monitors, per-monitor DPI, remembered window position | ✅ | ✅ (#38, #76) | ✅ (winit DPI fix pending, #155) | ✅ | — | 85% | 1 |
|
||||
| Pen / stylus: ink, pressure, eraser, ink to shape/math | ✅ (Draw tab, `InkRender.bundle`) | ❌ | ❌ | ❌ | ❌ | 0% | (Draw tab, 15–25) |
|
||||
| Microphone: Dictate | ✅ (cloud speech service) | ❌ | ❌ | ❌ | ❌ | 0% | 8–15 + owner (speech model choice) |
|
||||
| Speakers: Read Aloud | ✅ | ✅ system speech, speed, sentence skip (#190) | ✅ | 🟡 | 🟡 | 75% | 1–2 |
|
||||
| Touch screens and touchpads: pinch zoom, inertial scroll | ✅ | ✅ pinch (#179) | ✅ | ✅ inertial scroll (#252) | ✅ | 85% | 0–1 |
|
||||
| Scanners/cameras (Insert from device / Continuity Camera on Mac) | ✅ | ❌ | ❌ | ❌ | ❌ | 0% | 2–4 |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | trivial | Inertial touchpad scrolling landed (#252) |
|
||||
| 2026-10-10 | major | First version |
|
||||
@@ -0,0 +1,71 @@
|
||||
# Layout and pagination parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first version; line breaking, pagination and object placement checked against Word's behaviour from the layout source on origin/main) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
A document only "opens correctly" if its pages break where Word breaks them: the same lines, the
|
||||
same page count, footnotes and pictures on the same pages. This checklist covers line breaking,
|
||||
pagination and object placement in `crates/layout`. Typing behaviour is in
|
||||
[`typing-parity.md`](typing-parity.md); the reading and writing of the properties is in
|
||||
[`file-format-parity.md`](file-format-parity.md).
|
||||
|
||||
**Dimension: ~55% (estimated), 90–145 h to full** (the sum of the rows below). The engine implements most of Word's layout
|
||||
rules, but nothing has been compared page-for-page with Word on real documents, and the default
|
||||
font can't match Word's metrics.
|
||||
|
||||
## Checklist
|
||||
|
||||
✅ matches Word as far as our tests show · 🟡 implemented, differs or untested against Word · ❌ missing
|
||||
|
||||
| Feature | State | Evidence / gap | Hours |
|
||||
|---|---|---|---|
|
||||
| Line breaking (UAX #14 with Word's exceptions: no break after `/`) | ✅ | `layout::tests::no_line_break_right_after_a_slash` | — |
|
||||
| Justification, Word 2013+ space shrinking (compat mode 15) | ✅ | #109 | — |
|
||||
| Kashida justification (Arabic) | ❌ | no kashida in `crates/layout` | 3–5 |
|
||||
| Distributed / Thai distributed alignment | 🟡 | read; layout untested | 1–2 |
|
||||
| Default font metrics (Aptos, Calibri, Cambria…) | 🟡 | Carlito/Caladea/Liberation are metric-compatible for Calibri/Cambria/Arial/Times/Courier; **Aptos (Word's default since 2024) has no metric-compatible open substitute**, so new Word documents wrap differently ([typing-parity.md](typing-parity.md) Known gaps). Needs an owner decision (commission or license a metric-matched font) | 6–10 + owner |
|
||||
| Line spacing (single, 1.5, double, at least, exactly, multiple), spacing before/after, contextual spacing | 🟡 | Word puts multiple-spacing extra below the text and collapses spacing differently (#135, #108 open) | 3–5 |
|
||||
| Widow/orphan control, keep with next, keep lines together, page break before | ✅ | `lib.rs` keep_next/keep_lines | — |
|
||||
| Tabs (left, center, right, decimal, bar), leaders | 🟡 | Bar tabs untested | 1–2 |
|
||||
| Hyphenation (automatic, 0.25" zone, soft hyphens, consecutive limit) | 🟡 | English patterns only; other languages hyphenate wrongly or not at all | in localization |
|
||||
| Drop caps | ✅ | 2026-10-06 | — |
|
||||
| Columns, column breaks, separators | 🟡 | **Columns don't balance** at a continuous section break or document end | 4–6 |
|
||||
| Section breaks (next page, continuous, even, odd), different first page, odd/even headers | ✅ | Section breaks don't show in Draft view (#42) | 1–2 |
|
||||
| Body top below a tall header, footer pushes body up | ✅ | #138 | — |
|
||||
| Footnotes at the page bottom, endnotes at the end, note numbering | 🟡 | **A long note doesn't continue onto the next page**; no continuation separator/notice; per-section restart partial | 4–6 |
|
||||
| Tables: row heights (at least/exact), rows split across pages, header rows repeat, Can't Split | ✅ | 2026-10-06, #138 | — |
|
||||
| Tables: autofit to contents/window, fixed widths, Word 2013 edge | 🟡 | #137; autofit algorithm differs from Word's on mixed widths | 4–6 |
|
||||
| Floating tables (`w:tblpPr`) | 🟡 | #137; overlap rules untested | 2–3 |
|
||||
| Nested tables | 🟡 | render; polish missing | 2–4 |
|
||||
| Floating pictures/shapes placement (relative to page/margin/column/paragraph/line/character) | ✅ | #136 | — |
|
||||
| Text wrap: square, top-and-bottom, behind, in front | ✅ | 2026-10-06 | — |
|
||||
| Text wrap: tight, through (contour, wrap polygon) | ❌ | laid out as square | 6–10 |
|
||||
| Text boxes, overflow, linked text boxes | 🟡 | #46; linked text boxes missing | 3–5 |
|
||||
| Rotated objects and text | ❌ | no rotation in layout | 4–6 |
|
||||
| Page borders (from page edge or text), page colour, watermark | ✅ | | — |
|
||||
| Line numbers (restart per page/section, count by) | ✅ | | — |
|
||||
| Vertical page alignment | ✅ | | — |
|
||||
| Gutter, mirror margins, book fold, 2 pages per sheet | 🟡 | gutter and mirror margins; book fold missing | 2–3 |
|
||||
| Document grid (`w:docGrid`, lines per page, characters per line) | ❌ | East Asian documents paginate differently without it | 4–6 |
|
||||
| Vertical text (`tbRl`) in sections and text boxes; cell text direction | 🟡 | cell text direction landed (#245); page-level and text-box vertical text missing | 8–12 |
|
||||
| Ruby / phonetic guide, enclose characters, combined characters | ❌ | | 4–6 |
|
||||
| Bidirectional paragraphs, mixed-direction lines | 🟡 | #207; RTL sections and tables (`w:bidiVisual`) missing | 4–6 |
|
||||
| Equations: display layout, numbering | 🟡 | #191; long display equations don't break across lines | 3–4 |
|
||||
| Hidden text excluded from breaking and hyphenation | ✅ | #173 | — |
|
||||
| Fields: PAGE, NUMPAGES, SECTIONPAGES, TOC page numbers | ✅ | #52 | — |
|
||||
| Compatibility modes (Word 2003/2007/2010 layout for old files: `w:compat` options) | 🟡 | mode 15 behaviour; the ~60 legacy compat options are mostly ignored | 10–20 |
|
||||
| Page-by-page comparison harness against Word | ❌ | Run Word locally on our own synthetic documents, export PDF, compare line breaks; Word output stays under `plan/` (never committed) | 8–12 |
|
||||
|
||||
## Performance
|
||||
|
||||
| Measure | WordCraft | Word | Kind |
|
||||
|---|---|---|---|
|
||||
| Cold layout, 188-page document | 61 ms | not measured | measured 2026-10-06 (not re-run this pass) |
|
||||
| Relayout after an edit | 1.4 ms | not measured | measured 2026-10-06 |
|
||||
| Font picker with many installed fonts | fixed freezes (#233) | instant | issue #31, #59 |
|
||||
| Large real-world documents (500+ pages, many pictures) | not measured | | gap |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First version: layout and pagination checklist with evidence from `crates/layout`, PRs and issues |
|
||||
@@ -0,0 +1,72 @@
|
||||
# Localization parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first version; catalogs measured from `crates/ui-egui/src/i18n`, Word's languages from its bundle listing) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
Interface languages, script support and proofing per language. How translation works (catalog
|
||||
format, adding a language, clean-room rule): `crates/ui-egui/src/i18n/mod.rs`.
|
||||
|
||||
**Dimension: ~25% (estimated), 80–130 h to full for the twelve key languages** plus ~50 h for the
|
||||
other ~18 languages Word ships, plus native-speaker review (human).
|
||||
|
||||
## What Word ships (measured by listing the bundle)
|
||||
|
||||
- **30 interface languages** (31 `.lproj` folders incl. Base): ar, cs, da, de, el, en, en-GB, es,
|
||||
es-MX, fi, fr, fr-CA, he, hu, id, it, ja, ko, nl, no, pl, pt (BR), pt-PT, ru, sk, sv, th, tr,
|
||||
zh-CN, zh-TW. Arabic and Hebrew get a mirrored interface. No Hindi or Vietnamese interface on Mac.
|
||||
- **120 proofing tools** (`SharedSupport/Proofing Tools`): spellers for ~50 languages, grammar
|
||||
checkers for ~20, hyphenators for ~16, thesauri for ~20.
|
||||
|
||||
## What WordCraft ships (measured)
|
||||
|
||||
- **9 interface languages**: English plus `zh-hans`, `zh-hant`, `ja`, `uk`, `es`, `pt-br`, and
|
||||
Serbian `sr`/`sr-latn` (#250) (catalogs of ~930–1,010 entries each). A test (`every_tab_and_command_is_translated`) enforces that every ribbon
|
||||
tab, command label and ribbon location is translated in every language.
|
||||
- Of the 675 English strings a scan extracts from `tl!(…)` calls and command labels/locations, each
|
||||
catalog covers **661 (98%)**. Some newer dialog and pane strings (Equation tab tooltips, Zotero,
|
||||
Read Aloud, Backstage greetings) aren't wrapped in `tl!` yet, so they show in English in every
|
||||
language: the true share of visible strings is **~93–95%** (estimated).
|
||||
- Pending PRs: German (#203), Norwegian Bokmål (#208) and Nynorsk (#210), Hebrew with RTL (#20).
|
||||
- **Proofing: English only** (one dictionary, rule-based grammar, English hyphenation patterns).
|
||||
- Document scripts: shaping via HarfRust (HarfBuzz port) for every script; bidi (UAX #9) and Arabic
|
||||
shaping tested (#207); IME on all desktop platforms (winit fixes pending, #155–#164).
|
||||
|
||||
## The twelve key languages
|
||||
|
||||
Status: `full` = every user-visible string translated and the script renders and edits correctly;
|
||||
`partial`; `menus only`; `none`. Hours are to `full`, Opus 5.5 agent wall-clock, excluding the
|
||||
shared items below.
|
||||
|
||||
| Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | Hours to full |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| English | en | source (100%) | ✅ | Latin ✅ | yes | **full** | 0 |
|
||||
| Simplified Chinese (Mandarin) | zh-hans | 929 entries; 98% of extracted, ~95% of visible | most; newer panes English | CJK ✅, IME ✅; Windows UI font fixed (#248); no vertical text | no | partial | 3–5 |
|
||||
| Spanish | es | ~930; 98% / ~95% | most | Latin ✅ | no | partial | 1–2 |
|
||||
| Hindi | hi | 0 | ❌ | Devanagari shaping via HarfRust, untested; no hyphenation | no | none | 4–6 |
|
||||
| Arabic | ar | 0 | ❌ | shaping, joining, lam-alef, bidi ✅ (#207); no kashida; **no mirrored UI** | no | none | 6–8 |
|
||||
| French | fr | 0 | ❌ | Latin ✅ | no | none | 3–4 |
|
||||
| Portuguese | pt-br (pt-PT none) | ~930; 98% / ~95% (pt-BR) | most | Latin ✅ | no | partial | 2–4 (pt-BR finish + pt-PT) |
|
||||
| Indonesian | id | 0 | ❌ | Latin ✅ | no | none | 3–4 |
|
||||
| Japanese | ja | ~930; 98% / ~95% | most | CJK ✅, IME ✅; no vertical text, ruby or document grid | no | partial | 3–5 |
|
||||
| German | de | 0 (PR #203 open) | ❌ | Latin ✅ | no | none | 1–2 |
|
||||
| Korean | ko | 0 | ❌ | Hangul ✅; macOS Korean IME fixes pending (#163, #164) | no | none | 3–5 |
|
||||
| Vietnamese | vi | 0 | ❌ | Latin with stacked diacritics, untested | no | none | 3–4 |
|
||||
|
||||
Other shipped languages: **4** — Traditional Chinese (`zh-hant`), Ukrainian (`uk`) and Serbian
|
||||
Cyrillic and Latin (`sr`, `sr-latn`, #250), all partial (~95%).
|
||||
|
||||
## Shared work (not in the per-language hours)
|
||||
|
||||
| Item | Hours | Notes |
|
||||
|---|---|---|
|
||||
| Wrap the remaining English literals in `tl!` and translate them in every catalog | 4–6 | Makes the six partial languages full except script items |
|
||||
| Mirrored (right-to-left) interface for Arabic and Hebrew | 15–25 | Ribbon, panes, dialogs, rulers |
|
||||
| Vertical text, ruby, document grid (Chinese, Japanese, Korean) | counted in [layout-parity.md](layout-parity.md) | |
|
||||
| Proofing dictionaries, grammar and hyphenation for the 11 non-English key languages | 25–45 | Open dictionaries only (licence check per dictionary); issues #25, #40, #100 |
|
||||
| Native-speaker review of every catalog | human | None reviewed yet |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Serbian (Cyrillic and Latin) interface merged (#250) |
|
||||
| 2026-10-10 | major | First version: twelve-language table, catalog coverage measured, Word's 30 UI languages and 120 proofing tools listed |
|
||||
File renamed without changes.
@@ -0,0 +1,77 @@
|
||||
# WordCraft roadmap: milestones and what's next
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (beta distance restated: ~15 points, ~150–230 h; previously: alpha gate checked: six core workflows pass; previously major: milestones moved here from ROADMAP.md; Current focus set from the re-measured gaps) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
Forward-looking plan. The summary is [`ROADMAP.md`](../ROADMAP.md); the ranked work list is
|
||||
[`gaps.md`](gaps.md); the numbers are in [`target-app-parity.md`](target-app-parity.md). Hours are
|
||||
Opus 5.5 agent wall-clock.
|
||||
|
||||
## Current focus (toward beta, ~150–230 h)
|
||||
|
||||
1. **Merge or close the ~45 open PRs** before starting overlapping work: many close catalog gaps
|
||||
(Clipboard pane #264, Manage Styles #270, Group #267), fix field bugs (Hebrew RTL #20, IME
|
||||
fixes #155–#164) or add languages (de, nb, nn, he). Owner review needed.
|
||||
2. **DOCX real-world corpus** (gap #1, 30–50 h): collect openly licensed real-world .docx files,
|
||||
open/render/round-trip them, compare with Word locally, fix what breaks.
|
||||
3. **Preserve what we can't render** (gap #2, 10–15 h): charts, SmartArt, OLE, ink, group shapes
|
||||
survive a round trip and show their fallback pictures.
|
||||
4. **Stability sweep** (gap #3, 20–30 h): the open crash, hang and write-failure issues, plus an
|
||||
autosave/recovery soak test.
|
||||
5. **Pagination fidelity** (gap #4, 30–50 h): column balancing, footnote continuation, compat
|
||||
options, a local page-by-page comparison harness; an owner decision on an Aptos-metric font.
|
||||
6. **Formatting revisions and content controls** (gap #5, 12–18 h), **native printing** (gap #6,
|
||||
6–10 h), **dialog depth** (gap #7, 20–30 h).
|
||||
|
||||
## Alpha gate (core workflows)
|
||||
|
||||
The core-workflow gate from the craftrules progress-docs standard: what a typical Word user does
|
||||
every day, checked end to end on the main platform (macOS desktop), including save and reopen.
|
||||
"Partial" here means rough but not blocking: the workflow completes.
|
||||
|
||||
| Core workflow | Works end to end? | Evidence | Hours to pass |
|
||||
|---|---|---|---|
|
||||
| Write and format a document: type, fonts, paragraph formatting, styles, lists, undo, find/replace; save as .docx and reopen | yes | 422 commands, typing parity pinned by `tests_typing.rs`, DOCX round-trip tests (`crates/docx/tests/roundtrip.rs`) | 0 |
|
||||
| Open a .docx someone sent, edit it, send back a .docx Word opens | partial (not blocking) | Word opens our files; typical text/table/picture documents work; never tested on a real-world corpus; charts, SmartArt and OLE dropped silently, formatting revisions lost (gaps #1, #2, #5) | 0 (beta work: 50–80) |
|
||||
| Build a structured document: tables, pictures, headers/footers, page numbers, sections, columns | yes | Tables with row splitting and floating tables (#137), floating pictures (#136), first/odd/even headers; columns don't balance (gap #4) | 0 |
|
||||
| Review with others: comments, track changes, accept/reject, compare | yes | Margin balloons, tracked insert/delete incl. paragraph marks (#125, #244), compare; formatting revisions missing (#41) | 0 |
|
||||
| References for reports and papers: TOC, footnotes, citations and bibliography, captions | yes | Updatable TOC field (#52), notes, APA/MLA/Chicago/IEEE, Zotero (#189); long footnotes don't continue (gap #4) | 0 |
|
||||
| Share or print: export PDF, print | partial (not blocking) | PDF export solid (krilla); desktop printing goes through a PDF, no native print dialog (gap #6) | 0 (beta work: 6–10) |
|
||||
|
||||
**Result: passes.** Every core workflow completes on macOS and the work saves and reopens; the
|
||||
partial rows are fidelity gaps (beta work), not broken workflows. WordCraft stays **alpha**.
|
||||
|
||||
## Milestones
|
||||
|
||||
| # | Milestone | State | Remaining |
|
||||
|---|---|---|---|
|
||||
| M0 | Skeleton and vertical slice (model, layout, render, engine, Word-style UI, CLI, MCP, web) | done | — |
|
||||
| M1 | DOCX I/O | done (first version); real-world corpus not started; charts/SmartArt/OLE dropped | 45–75 h |
|
||||
| M2 | Home tab | done except Paste Special, Clipboard pane, Style Inspector, Manage Styles, Asian typography (PRs open for four) | 5–10 h |
|
||||
| M3 | Insert tab | mostly done; equations done (#191); charts, SmartArt, icons, 3D, screenshot, online media missing | 50–80 h |
|
||||
| M4 | Layout and Design tabs | done except column balancing, group | 6–10 h |
|
||||
| M5 | Tables | done (row splitting, floating tables, style formatting); custom table styles (#256); Draw Table missing | 6–10 h |
|
||||
| M6 | References | first version done (TOC fields, cross-references, Zotero); footnote continuation, 8 more bibliography styles missing | 15–25 h |
|
||||
| M7 | Review | done (balloons, paragraph-mark revisions); formatting revisions, move tracking, multilingual proofing missing | 35–60 h |
|
||||
| M8 | View | mostly done; window commands missing | 3–5 h |
|
||||
| M9 | Mailings | done (first version); Excel/Outlook data sources and email merge missing | 6–10 h |
|
||||
| M10 | File/Backstage | mostly done; native printing, Options depth missing | 12–20 h |
|
||||
| M11 | Draw and objects | text wrap, text boxes, canvas handles done; ink, rotation, grouping, contour wrap missing | 35–55 h |
|
||||
| M12 | Formats breadth (PDF, ODT, RTF, HTML, MD, TXT, LaTeX, `.doc` import) | done (first versions); `.doc` write, encryption, minor formats missing | 60–100 h |
|
||||
| M13 | Performance budgets | on track (1.4 ms relayout); large real-world documents unmeasured | 10–20 h |
|
||||
| M14 | 1.0 polish, packaging, signing | releases v0.1.0–v0.4.0 published (signed macOS, Windows MSI x64/x86/arm64, Linux, FreeBSD, web) | — |
|
||||
| M15 | Localization (12 key languages, RTL interface, proofing languages) | 9 UI languages, English proofing | 80–130 h |
|
||||
| M16 | Right-to-left and East Asian typography | RTL paragraphs done (#207) | 30–45 h |
|
||||
|
||||
## Next after beta
|
||||
|
||||
Charts and SmartArt editing, the Draw tab, `.doc` writing, PDF Reflow, the remaining interface
|
||||
languages, screen-reader access, ecosystem decisions (VBA, add-ins, cloud), an in-app assistant.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | trivial | Merged main: PRs that landed removed from the Current focus list |
|
||||
| 2026-10-10 | minor | Current focus heading back to ~150–230 h to beta: full number restored to the additive weighted sum (~60%), method aligned with the standard, no new evidence |
|
||||
| 2026-10-10 | minor | Alpha gate table added (core-workflow gate from the progress-docs standard): all six workflows pass, stage stays alpha |
|
||||
| 2026-10-10 | major | Created: milestones moved from ROADMAP.md with remaining hours; Current focus from gaps.md; M15–M16 added |
|
||||
@@ -0,0 +1,257 @@
|
||||
# WordCraft parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (readiness table with hours per audience; full number back to the additive weighted sum, 60%; mainstream and essentials numbers added; alpha gate checked; previously major: full re-measure against Word for Mac 16.113.4; replaces the parity tables that lived in ROADMAP.md) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
The authoritative assessment of how close WordCraft is to Microsoft Word. [`ROADMAP.md`](../ROADMAP.md)
|
||||
summarizes it; [`gaps.md`](gaps.md) itemizes every shortfall; the deep checklists are
|
||||
[`file-format-parity.md`](file-format-parity.md), [`layout-parity.md`](layout-parity.md),
|
||||
[`typing-parity.md`](typing-parity.md), [`ui-parity.md`](ui-parity.md),
|
||||
[`hardware-parity.md`](hardware-parity.md) and [`localization-parity.md`](localization-parity.md).
|
||||
The generated ribbon checklist is [`parity-checklist.md`](parity-checklist.md).
|
||||
|
||||
## Headline (2026-10-10, origin/main `a99dddc`, v0.4.0 + ~90 merged PRs)
|
||||
|
||||
| Number | Value | Kind |
|
||||
|---|---|---|
|
||||
| Ribbon/menu catalog coverage | **384 / 430 (89.3%)** | **measured**: `cargo xtask parity` (re-derived this pass from `crates/engine/src/catalog.rs` against every `CommandSpec::new` id in the source; identical to the checked-in `parity-checklist.md`) |
|
||||
| Feature breadth (weighted, beyond the ribbon: dialog options, citation styles, proofing languages, chart types, UI languages) | **~80%** | estimated |
|
||||
| Feature depth (weighted by use, table below) | **~68%** | estimated |
|
||||
| **Ready for real work** (full target) | **~60%** (range 55–63%) | estimated: weighted sum over the dimension table ([By dimension](#by-dimension)) |
|
||||
| **Mainstream practitioner** | **~55%** | estimated, same method |
|
||||
| **Essentials user** | **~63%** | estimated, same method |
|
||||
| Remaining effort to beta | **~150–230 h** of Opus 5.5 agent wall-clock: the blocking beta list ([gaps.md](gaps.md) #1–#7), which lifts file formats, layout, stability and UI enough to reach ~75% | estimated |
|
||||
| Remaining effort to full parity with Word desktop | **~750–1,250 h** | estimated |
|
||||
| Commands | 431 engine commands (+ `ui.*` commands in the front end) | measured (source count) |
|
||||
| Tests | 852 `#[test]` functions + 10 `proptest!` blocks | measured (source count) |
|
||||
| Code | ~88,700 lines of Rust in 15 crates, 3 apps and xtask | measured (`wc -l`) |
|
||||
|
||||
**Stage: alpha.** All six core workflows pass the [alpha gate](roadmap.md#alpha-gate-core-workflows); see [`ROADMAP.md`](../ROADMAP.md) for why it isn't beta, and the distance.
|
||||
|
||||
## What we measured against
|
||||
|
||||
- **Microsoft Word for Mac 16.113.4** (Microsoft 365 subscription build, installed on the owner's Mac
|
||||
at `/Applications/Microsoft Word.app`; version read with `mdls`, bundle modified 2026-10-06).
|
||||
- Inspected black-box, by **file listing only**, as `AGENTS.md` § Clean room requires (no bundle file
|
||||
was opened or read): 31 `.lproj` folders (30 interface languages plus Base), 120 proofing tools
|
||||
under `SharedSupport/Proofing Tools` (spellers, grammars, hyphenators and thesauri for ~50
|
||||
languages), 12 bibliography styles under `Resources/Style` (APA 6th, Chicago, GB 7714, GOST name
|
||||
and title, Harvard Anglia, IEEE, ISO 690 author-date and numerical, MLA 7th, SIST02, Turabian),
|
||||
11 Quick Style sets plus Word 2010, Office themes, a PDF print-dialog extension (`WordPDE.plugin`),
|
||||
ink rendering (`InkRender.bundle`), a Copilot backstage bundle, and text converters (Excel 2.x–11,
|
||||
Recover Text).
|
||||
- Word's file formats, ribbon, dialogs and keyboard shortcuts from Microsoft's public documentation
|
||||
and our knowledge of Word for Windows and Mac (Microsoft 365). Windows-only features (PDF Reflow
|
||||
open, Works/WordPerfect import) are counted, because a Word user on Windows expects them.
|
||||
- WordCraft as it is on origin/main today: source (catalog, command registry, readers/writers,
|
||||
layout), tests, the i18n catalogs, open issues (62) and open PRs (~45), git history.
|
||||
- **Not done this pass:** opening real-world .docx files in both apps and comparing pages. There is
|
||||
no real-world corpus in the repo (Word-produced files can't be committed), and the disk budget
|
||||
ruled out building. That comparison is the first gap in [`gaps.md`](gaps.md).
|
||||
|
||||
## Feature areas
|
||||
|
||||
Percent is depth and fidelity against Word, not presence. Weight is our estimate of the share of a
|
||||
typical Word user's time spent in the area (sums to 100). Hours are Opus 5.5 agent wall-clock to
|
||||
full parity for the area.
|
||||
|
||||
| Area | Weight | Parity | Was (2026-10-06) | Hours | Evidence and what's missing |
|
||||
|---|---|---|---|---|---|
|
||||
| Typing, selection, clipboard, undo, find/replace | 12 | 85% | 85% | 8–12 | Typing parity pinned by `tests_typing.rs` ([typing-parity.md](typing-parity.md)). Paste Special (#235), Advanced Find (#234) and Column Selection (#237) landed; Clipboard pane still missing (PR #264 open). |
|
||||
| Character and paragraph formatting | 11 | 82% | 85% | 8–12 | Nearly every property, Font/Paragraph dialogs, character border. Missing: Phonetic Guide, Enclose Characters, Asian Typography, kerning/ligature/stylistic-set options in the Font dialog's Advanced tab. |
|
||||
| Styles and themes | 8 | 74% | 75% | 8–12 | Gallery, pane, create/modify, style sets, themes. Style Inspector landed (#236). Missing: Manage Styles (#270 open), style separators, linked-style edge cases; Word ships 11 Quick Style sets plus dozens of themes, we ship our own smaller set. |
|
||||
| Lists | 6 | 78% | 75% | 5–8 | Bullets, numbering, multilevel, restart, `w:lvlOverride` levels (#134), Word's list AutoFormat and Enter/Backspace behaviour. Missing: Define New Multilevel List dialog depth, list styles, legal numbering edge cases. |
|
||||
| Tables | 8 | 76% | 72% | 10–16 | Merge/split, styles (cell text takes style formatting, #104), custom table styles saved in the .docx (#256), Word 2013 edge, floating tables, rows split across pages, sort, formula, cell gridlines (#243). Missing: Draw Table/Eraser, nested-table polish, interactive column resize (#49 open, #217). Cell text direction landed (#245). |
|
||||
| Page layout and sections | 7 | 70% | 72% | 12–20 | Margins, size, columns, breaks, page borders, line numbers, vertical alignment, drop caps, hyphenation. Columns don't balance; no document grid; no vertical text; RTL sections missing. Detail: [layout-parity.md](layout-parity.md). |
|
||||
| Headers, footers, page numbers, fields | 5 | 70% | 70% | 8–12 | First/even/odd, link to previous, TOC as an updatable field (#52), cross-references to real bookmarks (#227). Field coverage is a subset of Word's ~90 field codes; Field dialog missing. |
|
||||
| Footnotes and endnotes | 3 | 60% | 60% | 5–8 | Placed and editable, numbers from Word files (#103). Long notes don't continue onto the next page; no continuation separator; no note options per section. |
|
||||
| References (TOC, citations, bibliography, captions, index, TOA) | 5 | 65% | 60% | 12–20 | Working first versions, Zotero integration (#189), Zotero/Mendeley `ADDIN` fields round-trip. 4 of Word's 12 bibliography styles (APA, MLA, Chicago, IEEE); source manager depth; bibliography sources not yet in DOCX (#169 open). |
|
||||
| Review (proofing UI, comments, track changes, compare, protect) | 8 | 72% | 75% | 15–25 | Comment balloons, tracked insert/delete incl. paragraph marks (#244, #125), compare, restrict editing. Missing: formatting revisions (`w:rPrChange`/`w:pPrChange`, issue #41), move tracking, track-changes balloons, Translate, Block Authors, modern comment threads/mentions. Lowered: these gaps are confirmed by source (no `rPrChange` anywhere). |
|
||||
| Proofing (spelling, grammar, thesaurus, languages) | 5 | 35% | (in Review) | 25–45 | English only: one dictionary, a rule-based grammar checker. Word ships 120 proofing tools for ~50 languages plus Editor (style refinements, similarity). Issues #25, #40, #100. |
|
||||
| Mailings | 2 | 70% | 70% | 6–10 | Mail merge from CSV, fields, rules, preview, envelopes, labels. Select Recipients takes a typed list or CSV (#247); no Excel/Outlook/Contacts data sources, no email merge. |
|
||||
| Pictures, shapes, text boxes, WordArt | 6 | 60% | 60% | 20–30 | Insert, crop, recolour, styles, floating placement like Word (#136), wrap (square/top-bottom/behind/front), text boxes edit and overflow (#46), VML text boxes (#242). Missing: tight/through contour wrap, rotation handle, group (#267 open), shape effects, WordArt, connectors, Drawing Canvas, Icons, online pictures, screenshot. |
|
||||
| Equations | 1 | 75% | 20% (with Draw) | 4–8 | OMML read/write, OpenType MATH layout, in-place editor with an Equation tab (#191). Missing: line breaking of long display equations, ink equations. |
|
||||
| Charts, SmartArt, Draw/ink, 3D models, icons | 4 | 3% | (20% with equations) | 70–110 | Nothing yet: all 11 Draw tab commands missing; charts and SmartArt are dropped on DOCX read (no `c:chart`/`dgm` handling in `crates/docx`). |
|
||||
| View (modes, zoom, panes, windows) | 3 | 72% | 70% | 6–10 | Print/web/draft/read/focus, dark page (#194), pages side by side when zoomed out (#251), navigation pane. Missing: View Side by Side, Synchronous Scrolling, Arrange All, Switch Windows, Outline view depth, Immersive Reader depth. |
|
||||
| Backstage, printing, options | 3 | 58% | 55% | 12–20 | New/Home pages (#254), save prompts (#151), web printing via the browser (#209). Desktop printing still goes through PDF; Options has a fraction of Word's panes. |
|
||||
| Right-to-left and complex scripts | 1 | 50% | 55% | 15–25 | UAX #9, Arabic shaping, RTL paragraphs (#207). No RTL sections/tables, kashida justification or mirrored UI; open bug reports (#215, #211, #199, #66, #63, #48, #19) need re-testing against #207. |
|
||||
| East Asian typography | 1 | 15% | not rated | 20–30 | IME input works (winit fixes pending, #155–#164). No vertical text, ruby/phonetic guide, document grid, `w:eastAsianLayout`, enclose characters, Asian line-break options. |
|
||||
| Accessibility | 1 | 35% | not rated | 15–25 | AccessKit enabled in eframe; an accessibility checker exists. Screen-reader access to the document canvas is untested; no alt-text workflow polish, no read-order tools. |
|
||||
| Agent control (CLI, MCP, control channel, macro record/playback) | 0 | beyond Word | 100%+ | — | Every action is a command id usable from CLI, MCP and a keyed control port. Word has VBA and Office.js instead (see Ecosystem). |
|
||||
|
||||
Weighted feature depth: **~68%** (Σ weight × parity / 100 over the table).
|
||||
|
||||
## Readiness numbers: full, mainstream practitioner, essentials user
|
||||
|
||||
Three numbers, each with its own hours (craftrules `standards/progress-docs.md`, "Numbers"). The
|
||||
**full** number is the additive weighted sum over the dimension table below. **Mainstream** and
|
||||
**essentials** average depth over the areas in scope, then multiply by written-down discounts for
|
||||
what still stops real work. The stage follows the full number and the core-workflow gate.
|
||||
|
||||
| Audience | Ready | Opus 5.5 agent wall-clock hours to ~95% | Work that dominates |
|
||||
|---|---|---|---|
|
||||
| Full target (ready for real work) | **~60%** | **~650–1,100 h** (70–80% parallelizes) | Breadth: charts/SmartArt/Draw, localization and proofing languages, East Asian and RTL typography, `.doc` writing, PDF Reflow, ecosystem; plus everything below |
|
||||
| Mainstream practitioner | **~55%** | **~300–500 h** (~65% parallelizes) | DOCX real-world fidelity and preserving charts/SmartArt, pagination fidelity, formatting revisions, dialog depth, objects, stability |
|
||||
| Essentials user | **~63%** | **~90–140 h** (~50% parallelizes) | Install/launch stability, opening files people send (corpus subset, chart fallbacks), native printing, picture handling, English spelling depth |
|
||||
|
||||
Hours are calibrated as in [Calibration](#calibration-of-hours-from-this-repos-history) and are
|
||||
subsets: essentials ⊂ mainstream ⊂ full. Mainstream to ~95%: its areas' depth (~180–280 h) plus
|
||||
the file-exchange, stability and interaction work behind the discounts (~135–225 h). Essentials to
|
||||
~95%: launch/install stability (15–25 h), opening received files (30–50 h), native printing (6–10
|
||||
h), pictures and tables (12–18 h), spelling depth (8–12 h), polish (10–20 h).
|
||||
|
||||
### The discounts (evidence)
|
||||
|
||||
| Discount | Mainstream | Essentials | Evidence |
|
||||
|---|---|---|---|
|
||||
| Interaction fidelity | ×0.93 | — | Typing pinned to Word (`tests_typing.rs`), ribbon, keytips, mini-toolbar; but 16 modal dialogs against Word's ~100, 101 of ~250 shortcuts, no table column drag on the canvas (#217, #49), picture/shape handling complaints (#82, #142), lines wrap differently without an Aptos-metric font |
|
||||
| Discoverability and UI clarity | — | ×0.95 | Word-style ribbon a Word user already knows, command search, keytips; some newer pane strings and tooltips terse or untranslated |
|
||||
| Stability on real machines | ×0.90 | ×0.90 (launch and install) | Never-crash standard, hostile-param fuzzing, panic guard; but open startup crash on Intel UHD (#170), freezes (#77, #59, #31), Windows writes fail without admin (#218), installer conflicts with other Crafting Apps (#64, #73, #106, #51); 5 days of field history |
|
||||
| Exchanging files with Word users | ×0.90 | ×0.92 (opening files people send) | Word opens our .docx; `.doc` import; but no real-world corpus test, charts/SmartArt/OLE dropped silently, formatting revisions lost (#41), pagination differs (Aptos, no column balancing or footnote continuation). Simple documents, which are most of what a casual user receives, come through well; double-click open on macOS is fixed on main but not yet released (#223, #279) |
|
||||
| Product | **×0.753** | **×0.787** | |
|
||||
|
||||
### Full target (ready for real work): ~60%
|
||||
|
||||
The additive weighted sum over the [dimension table](#by-dimension): **0.30·68 + 0.20·60 + 0.15·55 +
|
||||
0.10·65 + 0.10·50 + 0.05·75 + 0.04·25 + 0.03·95 + 0.01·40 + 0.02·15 ≈ 60%** (range 55–63%). No
|
||||
multiplicative discounts: stability, file formats, layout and UI are weighted dimensions here.
|
||||
|
||||
### Mainstream practitioner: ~55%
|
||||
|
||||
The typical professional Word user (office, legal, academic, writing) in their own language, weekly
|
||||
work only. Left out: equations, mail merge, Draw/ink, East Asian and right-to-left typography,
|
||||
accessibility tools, proofing in other languages, add-ins/VBA, Copilot, cloud and co-authoring,
|
||||
dictation and pens.
|
||||
|
||||
| Area | Weight | Depth |
|
||||
|---|---|---|
|
||||
| Typing, selection, clipboard, undo, find/replace | 17 | 85% |
|
||||
| Character and paragraph formatting | 16 | 82% |
|
||||
| Styles | 9 | 74% |
|
||||
| Tables | 9 | 76% |
|
||||
| Review (comments, track changes) | 9 | 72% |
|
||||
| Lists | 8 | 78% |
|
||||
| Page layout and sections | 6 | 70% |
|
||||
| Headers, footers, page numbers, fields | 5 | 70% |
|
||||
| Proofing in the user's language (English) | 5 | 55% |
|
||||
| Pictures, shapes, text boxes | 5 | 60% |
|
||||
| References (TOC, captions, citations) | 4 | 65% |
|
||||
| Footnotes | 2 | 60% |
|
||||
| Charts and SmartArt (pasted from Excel or received) | 2 | 3% |
|
||||
| Print and PDF | 2 | 65% |
|
||||
| View | 1 | 72% |
|
||||
|
||||
Base ≈ **73%**; **73% × 0.753 ≈ 55%**.
|
||||
|
||||
### Essentials user: ~63%
|
||||
|
||||
Someone who uses only the core of Word: create or open a document, type and format it, a list, a
|
||||
picture, a simple table, spelling, undo, save, PDF or print, default settings. Advanced options,
|
||||
professional workflows and file-exchange edge cases are left out, as is everything left out of
|
||||
mainstream.
|
||||
|
||||
| Feature | Weight | Depth |
|
||||
|---|---|---|
|
||||
| Typing, selection, copy/paste, undo | 20 | 85% |
|
||||
| Font, size, bold/italic/underline, colour, highlight | 15 | 88% |
|
||||
| New, open, save, AutoSave, templates | 12 | 80% |
|
||||
| Alignment, line spacing, indents | 8 | 85% |
|
||||
| Bullets and numbering | 8 | 85% |
|
||||
| Spelling (English) | 8 | 65% |
|
||||
| Insert, move and resize a picture | 7 | 65% |
|
||||
| Simple table | 6 | 78% |
|
||||
| Heading styles from the gallery | 5 | 78% |
|
||||
| Print and export PDF | 5 | 70% |
|
||||
| Find and replace | 3 | 85% |
|
||||
| Page numbers and a simple header | 3 | 75% |
|
||||
|
||||
Base ≈ **80%**; **80% × 0.787 ≈ 63%**.
|
||||
|
||||
### User evidence (GitHub, 2026-10-10; no issue was filed by a storytold org member)
|
||||
|
||||
- **120 issues** filed by 80+ outside users in 5 days; about 60 closed, most fixed within a day.
|
||||
- **Praise:** 4 issues or comments ("Awesome job guys!" #28, "amazing how much it advanced" #146,
|
||||
"appreciate the repo" #57, thanks in #73/#51). **"Switched from Word" reports: 0.**
|
||||
- **Open issues by kind** (hand-classified, ~56 open at classification): **~21 core-path bugs**
|
||||
(install/launch: #64, #73, #106, #51, #47, #170, #218; hangs: #77, #59, #31; editing: #82, #142,
|
||||
#44, #45, #217, #95; files and saving: #187, #195, #279, #18; printing #15; several may already
|
||||
be fixed on main), **~11 right-to-left and language** reports (#19, #48, #63, #66, #199, #211,
|
||||
#215, #25, #40, #56, #100), **~24 feature requests or minor bugs** (catalog parity, macros,
|
||||
passwords, cloud, theming).
|
||||
- Reading: people are trying WordCraft as a Word replacement and report core-path problems more
|
||||
than niche ones; the install and stability discount is earned.
|
||||
|
||||
## By dimension
|
||||
|
||||
Weights are our estimate of how much each dimension decides whether a professional can switch from
|
||||
Word. Their weighted sum is the **full ready for real work** number.
|
||||
|
||||
| Dimension | Weight | Parity | Hours to full | Doc | Evidence |
|
||||
|---|---|---|---|---|---|
|
||||
| Features (depth, table above) | 30% | 68% | 210–335 | this file | Weighted table above. Hours: the area table sums to 290–460 h; the Page layout, Footnotes, RTL and East Asian rows (~50–85 h) are counted under Layout and the Proofing row (25–45 h) under Localization, so they aren't counted twice |
|
||||
| File formats (DOCX fidelity first) | 20% | 60% | 185–300 | [file-format-parity.md](file-format-parity.md) | DOCX opens in Word and round-trips our own tests, but no real-world corpus test yet; charts, SmartArt, OLE, content controls (unwrapped), formatting revisions and encrypted files are lost or refused |
|
||||
| Layout and pagination fidelity | 15% | 55% | 90–145 | [layout-parity.md](layout-parity.md) | Aptos has no metric-matched substitute so lines break differently from Word; no column balancing, footnote continuation or document grid; compatibility modes beyond 15 partial |
|
||||
| UI/UX fidelity | 10% | 65% | 65–100 | [ui-parity.md](ui-parity.md) | Ribbon, keytips, mini-toolbar, Backstage, 101 shortcuts; 16 modal dialogs against Word's ~100; no ribbon/keyboard customization |
|
||||
| Stability | 10% | 50% | 25–45 | [gaps.md](gaps.md) | Never-crash standard and hostile-param fuzzing in place, but open reports of a startup crash on Intel UHD (#170), freezes (#77, #59, #31) and Windows write failure without admin (#218); no soak test; 5 days of field history |
|
||||
| Performance | 5% | 75% | 10–20 | [layout-parity.md](layout-parity.md) | 61 ms cold layout and 1.4 ms relayout on a 188-page document (measured 2026-10-06, not re-run); font picker freezes fixed in #233; no large real-world documents measured |
|
||||
| Localization | 4% | 25% | 80–130 + native review | [localization-parity.md](localization-parity.md) | 9 UI languages (Word 30); 4 of the 12 key languages partly done; English-only proofing |
|
||||
| Platforms | 3% | 95% | 5–10 | [ROADMAP.md](../ROADMAP.md) | macOS (universal, signed), Windows x64/x86/arm64, Linux (AppImage/deb/rpm/Flatpak), FreeBSD, web. Beyond Word on Linux, BSD and the web; Word's iPad/iPhone/Android apps are out of scope |
|
||||
| Hardware | 1% | 40% | 20–40 | [hardware-parity.md](hardware-parity.md) | No native printing on desktop, no pen/ink, no dictation; GPU drawing and HiDPI fine. Ink hours are in the Features row (Draw tab) |
|
||||
| Ecosystem and plugins | 2% | 15% | 40–80 | [gaps.md](gaps.md) | Zotero built in, macros record/play commands, `.docm` macros preserved (#172). No VBA execution, no Office add-ins, no EndNote/Mendeley plugins, no cloud storage or co-authoring |
|
||||
| AI features | 0% | 40% | 15–30 | [gaps.md](gaps.md) | Beyond Word for external agents (MCP, CLI). No in-app writing assistant like Copilot yet (chat PR #178 open). Weight 0: Copilot is a paid add-on and not what decides a switch |
|
||||
|
||||
**Ready for real work ≈ 0.30·68 + 0.20·60 + 0.15·55 + 0.10·65 + 0.10·50 + 0.05·75 + 0.04·25 +
|
||||
0.03·95 + 0.01·40 + 0.02·15 ≈ 60%.**
|
||||
|
||||
## Methodology
|
||||
|
||||
- **Measured** numbers come from the source on origin/main: the catalog/registry diff (the same
|
||||
computation as `cargo xtask parity`), `#[test]` counts, i18n catalog rows, reader/writer element
|
||||
coverage (`grep` over `crates/docx`, `crates/docbin`, `crates/formats`) and the Word bundle
|
||||
listing. Nothing was built or run this pass (disk budget).
|
||||
- **Estimated** numbers are judgements from that evidence plus Word's documented feature set. The
|
||||
previous estimate (~62% "real feature parity", 2026-10-06) measured feature depth only. This pass
|
||||
splits it into feature depth (67%, up: equations, .doc import, RTL, text boxes, Zotero landed) and
|
||||
ready-for-real-work (60%, additive weighted sum), which adds file fidelity, stability,
|
||||
localization and the rest. A multiplicative version (~47%) was briefly used the same day and
|
||||
reverted to align with the standard; no new evidence.
|
||||
- **Why the hours went up** from "120–150 h to 100%" (2026-10-06): that figure left out
|
||||
localization, multilingual proofing, ecosystem, hardware, PDF Reflow and `.doc` writing, and
|
||||
priced DOCX corpus fidelity at 10 h. The new evidence is the Word bundle inventory (30 UI
|
||||
languages, 120 proofing tools, 12 bibliography styles), the 62 open issues (crashes, freezes,
|
||||
RTL reports) and the size of comparable work actually done (below).
|
||||
|
||||
### Calibration of hours (from this repo's history)
|
||||
|
||||
The repo is five days old (first commit 2026-10-05 20:23, `40c5d51` 2026-10-10): 124
|
||||
commits, 95 merged PRs, ~85,600 lines of Rust. PRs are written by agents, so their size and
|
||||
open-to-merge time bound the agent time:
|
||||
|
||||
| PR | Work | Lines added | PR open → merged |
|
||||
|---|---|---|---|
|
||||
| #191 | Equations: OMML import/export, math layout, editor and Equation tab | 9,666 | 5.2 h |
|
||||
| #145 | Word 97-2003 `.doc` reader (spec-based) | 4,488 | 10.2 h |
|
||||
| #189 | Zotero integration with a ribbon tab | 3,043 | 4.7 h |
|
||||
| #207 | Right-to-left and Persian text (bidi, shaping, DOCX) | 2,048 | 4.2 h |
|
||||
| #46 | Text boxes and floating objects (edit, drag, wrap, overflow) | 2,628 | 36.1 h (incl. review wait) |
|
||||
| #136 | Place floating objects the way Word does (fidelity work) | 574 | 10.8 h |
|
||||
|
||||
Rule of thumb used: **a new, self-contained subsystem runs ~600–1,000 tested lines per agent hour**
|
||||
(equations, Zotero, RTL: 4–10 h each); **fidelity work against Word's observed behaviour runs
|
||||
~5–10× slower per line** (#136, #138, #104: 0.5–1 h per 100 lines, mostly comparing and testing).
|
||||
Most of the remaining gap is the second kind, which is why the hours are high relative to the
|
||||
code already written. About 70–80% of the hours parallelize across agents by area (formats, layout,
|
||||
objects, localization, proofing are independent crates). Human time is needed for: native-speaker
|
||||
review of translations, owner decisions (cloud/co-authoring scope, AI provider, VBA scope), a
|
||||
licensed or commissioned metric-compatible Aptos substitute, and a real-world DOCX corpus that
|
||||
can be used without committing Word output.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Merged main (12 PRs): Paste Special, Advanced Find, Column Selection, Style Inspector, custom table styles, gridlines, zoom buttons, touchpad scrolling, File Info fields, Serbian. Catalog 378/428 → 384/430 (89.3%); typing 82→85%, styles 72→74%, tables 74→76%; feature depth 67→68%; mainstream 54→55%; full stays ~60%, essentials ~63% |
|
||||
| 2026-10-10 | minor | Readiness table: hours to ~95% per audience (full ~650–1,100 h, mainstream ~300–500 h, essentials ~90–140 h). Full number restored to the additive weighted sum, ~47% → ~60%: method aligned with the standard, no new evidence; beta distance back to ~15 points and ~150–230 h |
|
||||
| 2026-10-10 | minor | Added mainstream practitioner (~54%) and essentials user (~63%) numbers with written weights and discounts; full ready-for-real-work recomputed with the same multiplicative discounts: 60% → ~47% (method change, not new product evidence; stage stays alpha: above 40% and the gate passes); beta now ~450–700 h to the 75% bar; user-evidence counts from GitHub |
|
||||
| 2026-10-10 | minor | Stage checked against the core-workflow alpha gate: passes, stays alpha |
|
||||
| 2026-10-10 | major | Created from ROADMAP.md's "Parity by area" and "Estimate to 100%" sections; full re-measure against Word for Mac 16.113.4 (bundle listing, catalog diff from source, issue tracker); split into feature depth (67%) and ready for real work (60%); added proofing, East Asian, accessibility areas and the dimension table; hours re-calibrated from PR history |
|
||||
| 2026-10-06 | major | First estimate in ROADMAP.md: ~62% real feature parity, 120–150 h to 100% |
|
||||
+12
-1
@@ -1,9 +1,12 @@
|
||||
# Typing parity with Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** trivial (status line, revision history and links to the other parity docs added; behaviour unchanged) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
What Word does when you type, observed black-box (same keystrokes typed into Word and
|
||||
WordCraft, results read back paragraph by paragraph) and pinned by tests in
|
||||
`crates/engine/src/tests_typing.rs`. When typing behaviour changes, change it here and in the
|
||||
tests together.
|
||||
tests together. Line breaking and pagination are in [`layout-parity.md`](layout-parity.md); the
|
||||
overall picture is in [`target-app-parity.md`](target-app-parity.md).
|
||||
|
||||
## Lists
|
||||
|
||||
@@ -64,3 +67,11 @@ Applied when a word is finished by a space, punctuation **or Enter** (`enter_fin
|
||||
paragraphs, export PDF). Keystroke runs steal focus and race the person at the keyboard: keep
|
||||
them short, read the document back to verify, and ask first. Screenshots of Word's window only,
|
||||
under `plan/word/screenshots/`.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | trivial | Status line, revision history and cross-links added (progress-docs standard) |
|
||||
| 2026-10-10 | minor | Track Changes rows: tracked Enter, Backspace and Delete on paragraph marks (#244) |
|
||||
| 2026-10-10 | major | First version: lists, AutoCorrect and AutoFormat as you type, observed against Word (#204) |
|
||||
@@ -0,0 +1,40 @@
|
||||
# UI parity with Microsoft Word
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first version; ribbon, dialogs, shortcuts and on-canvas interaction measured from `crates/ui-egui` and the command registry) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4
|
||||
|
||||
How WordCraft looks and feels next to Word: ribbon, dialogs, panes, keyboard, mouse and touch.
|
||||
Typing behaviour has its own checklist ([`typing-parity.md`](typing-parity.md)). All assets are our
|
||||
own (`AGENTS.md`: no Microsoft iconography, ever).
|
||||
|
||||
**Dimension: ~65% (estimated), 65–100 h to full** (the sum of the rows below; dialog depth is counted here, not under features).
|
||||
|
||||
| Area | WordCraft | Word | Parity | Hours |
|
||||
|---|---|---|---|---|
|
||||
| Ribbon tabs and groups | All Word tabs including contextual Table Design/Layout, Picture Format, Shape Format, Header & Footer, Equation; ribbon overflow (#43, #129). Missing: Draw tab content | Same plus Draw | 85% | (Draw in features) |
|
||||
| Keytips (Alt / ⌃⌥ letters) | ✅ (#43) | ✅ | 85% | 1–2 |
|
||||
| Mini-toolbar on selection | ✅ (#43) | ✅ | 80% | 1–2 |
|
||||
| Quick Access Toolbar | Undo, Redo, Repeat, AutoSave | customizable | 50% | 2–3 |
|
||||
| Customize Ribbon / Customize Keyboard | ❌ | ✅ | 0% | 6–10 |
|
||||
| Keyboard shortcuts | **101** bound in `CommandSpec::key` (measured) | ~250 default shortcuts | ~60% | 4–6 |
|
||||
| Modal dialogs | **16** (`Dialog` enum: Font, Paragraph, Find, Go To, Insert Table, Page Setup, Link, Bookmark, Word Count, Zoom, Watermark, New/Modify Style, Commands, About, Save Changes) plus panes and menus for the rest | ~100 (Tabs, Borders and Shading, Columns, Symbol, Field, Caption, Index, TOC options, Citation, Define Multilevel List, Table Properties, Track Changes Options, Compare, Protect, Language, Hyphenation, Line Numbers, Envelopes, Labels, Mail Merge, AutoCorrect, Options panes…) | ~40% | 20–30 |
|
||||
| Task panes (Navigation, Styles, Comments, Reviewing, Format Picture/Shape, Thesaurus, Accessibility, Clipboard, Selection) | Navigation, Styles, Comments, Thesaurus, Accessibility, Read Aloud, Zotero; Style Inspector (#236); Clipboard pane (#264) open | all | 70% | 4–6 |
|
||||
| Context menus (right-click) | text, spelling suggestions; objects and tables partial | rich per context | 55% | 3–5 |
|
||||
| Backstage (Home, New, Open, Info, Save As, Print, Share, Export, Options) | Home and New separate (#254), Info properties kept (#268) | | 68% | 4–6 |
|
||||
| Rulers: indents, tabs, margins, table columns | indents draggable (one undo, #62); tabs; table column drag pending (#49) | ✅ | 70% | 2–3 |
|
||||
| On-canvas objects: select, drag, resize handles, nudge | ✅ tested (#228) | ✅ | 75% | — |
|
||||
| Rotation handle, crop handles on canvas, alignment guides, smart guides | ❌ | ✅ | 0% | 4–6 |
|
||||
| Selection: word/sentence/paragraph clicks, Shift extend, F8 extend mode, column (Alt+drag, #237) | ✅ | ✅ | 85% | 1 |
|
||||
| Zoom: Ctrl+scroll, pinch (#179), zoom buttons (#232), pages side by side when zoomed out (#251) | ✅ | ✅ | 85% | — |
|
||||
| Touchpad smooth/inertial scroll | ✅ (#252) | ✅ | 90% | — |
|
||||
| Status bar (page x of y, words, language, view buttons, zoom slider) | ✅ | ✅ | 80% | — |
|
||||
| Interface themes (light, dark, system #249), dark page (#194) | ✅ | ✅ | 90% | — |
|
||||
| Platform conventions (macOS menus/traffic lights #255, Windows title bar, Linux CSD on Wayland #78) | partial | native | 70% | 3–5 |
|
||||
| Screen readers (VoiceOver, Narrator, Orca) | AccessKit on, document canvas exposure untested | full | 25% | 10–15 |
|
||||
| Right-to-left (mirrored) interface | ❌ | ✅ (Arabic, Hebrew Word) | 0% | in localization |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Merged main: Style Inspector, Column Selection, zoom buttons, inertial scrolling, File Info landed |
|
||||
| 2026-10-10 | major | First version: ribbon, dialog, shortcut and interaction inventory |
|
||||
+1
-1
@@ -24,7 +24,7 @@ commands:
|
||||
corpus [--download]
|
||||
show where test corpora live; --download fetches PngSuite into corpus/pngsuite
|
||||
stats [--exact] count tests and lines per crate (--exact: ask the test harness via `-- --list`)
|
||||
parity recompute the Word feature-parity summary in docs/parity.md
|
||||
parity recompute the Word feature-parity summary in docs/parity-checklist.md
|
||||
ico <out.ico> <in.png>...
|
||||
pack square PNGs (<= 256 px) into a Windows .ico (see packaging/icons.sh)
|
||||
";
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
//! `cargo xtask parity`: write docs/parity.md from the live command registry compared with the
|
||||
//! `cargo xtask parity`: write docs/parity-checklist.md from the live command registry compared with the
|
||||
//! word-processor feature catalog (via `wordcraft-cli parity --markdown`).
|
||||
|
||||
use std::path::Path;
|
||||
@@ -12,7 +12,7 @@ pub fn run(root: &Path) -> Result<(), String> {
|
||||
return Err(format!("wordcraft-cli parity failed:\n{}", String::from_utf8_lossy(&out.stderr)));
|
||||
}
|
||||
let md = String::from_utf8_lossy(&out.stdout).to_string();
|
||||
let path = root.join("docs/parity.md");
|
||||
let path = root.join("docs/parity-checklist.md");
|
||||
std::fs::write(&path, &md).map_err(|e| format!("{}: {e}", path.display()))?;
|
||||
if let Some(line) = md.lines().find(|l| l.starts_with("**")) {
|
||||
println!("{line}");
|
||||
|
||||
Reference in new issue
Block a user