diff --git a/Cargo.lock b/Cargo.lock index 2f62b036c..6aa2be432 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2338,7 +2338,7 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "indd" version = "0.1.0" -source = "git+https://github.com/aiongg/indd-utils?branch=main#7f3060e5bce78d21ea70e0d5eacb96edce15dfbe" +source = "git+https://github.com/storytold/indd-utils?branch=main#7f3060e5bce78d21ea70e0d5eacb96edce15dfbe" [[package]] name = "indexmap" diff --git a/Cargo.toml b/Cargo.toml index 041e5793a..64dd662a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,8 +66,9 @@ krilla = { version = "0.8", features = ["pdf"] } hayro = "0.7" quick-xml = "0.41" zip = { version = "3", default-features = false, features = ["deflate"] } -# INDD/INDT → IDML conversion for File › Open (indd-utils, tracking its main branch; MIT OR Apache-2.0, no dependencies). -indd = { git = "https://github.com/aiongg/indd-utils", branch = "main" } +# INDD/INDT → IDML conversion for File › Open: storytold/indd-utils, tracking its main branch +# (MIT OR Apache-2.0, no dependencies, builds for wasm). +indd = { git = "https://github.com/storytold/indd-utils", branch = "main" } # Atomic file replacement for saves and exports (craft-libs). craft-atomic = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "e9546e191dd62f2bc1d61eca45dbdc2f1b3c1d8e" } diff --git a/README.md b/README.md index f8d7a6317..53a623d8b 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ by its own renderer. Try it yourself with `File → New → Sample Document`, or - **Fast.** Multithreaded SIMD rendering (vello_cpu), copy-on-write documents with O(1) undo snapshots, and cached composition. - **Open.** A documented native format, IDML import and export, INDD import (through - [indd-utils](https://github.com/aiongg/indd-utils)), and PNG, PDF (PDF/X-4, PDF/A-2b) and EPUB export. + [indd-utils](https://github.com/storytold/indd-utils)), and PNG, PDF (PDF/X-4, PDF/A-2b) and EPUB export. No subscription, no licence server, no telemetry. - **Agent-native.** Every menu item, tool gesture, panel control and dialog can be driven over a JSON control channel and an **MCP server**, so Claude and other agents can lay out and edit diff --git a/ROADMAP.md b/ROADMAP.md index 75f5bc59f..02144cf3e 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ **Stage: pre-alpha** · next: alpha, ~5–7 h away; beta ~28 points and ~420–750 h beyond that (the core-workflow gate, not the percentage: ready for real work is already ~47%) -> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-13 · **Change:** minor (text threads by hand; the alpha gate waits on Primary Text Frame page fixes; Japanese print, import and table controls localized; Live corners (#186); Optical kerning from outlines (#181); window and menu quit confirmation; failed writes preserve live save and collection state; spring-loaded Zoom navigation; orderly native exit recovery; Pages panel parents; cancelable macOS Dock Quit; text stroke behind fill; Based on Parent; object styles carry effects; table anchors keep their own paragraphs; grouped HTML/EPUB reading order; Links source paths; XLSX cached cell values retain numeric precision and text) · **Target:** Adobe InDesign 2026 +> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-13 · **Change:** minor (.indd and .indt open through indd-utils; text threads by hand; the alpha gate waits on Primary Text Frame page fixes; Japanese print, import and table controls localized; Live corners (#186); Optical kerning from outlines (#181); window and menu quit confirmation; failed writes preserve live save and collection state; spring-loaded Zoom navigation; orderly native exit recovery; Pages panel parents; cancelable macOS Dock Quit; text stroke behind fill; Based on Parent; object styles carry effects; table anchors keep their own paragraphs; grouped HTML/EPUB reading order; Links source paths; XLSX cached cell values retain numeric precision and text) · **Target:** Adobe InDesign 2026 DesignCraft aims at full Adobe InDesign parity, and to be better: faster, open (documented JSON format + IDML), scriptable by agents (MCP), and available on the web. @@ -21,7 +21,7 @@ format + IDML), scriptable by agents (MCP), and available on the web. | Audience | Ready | Opus 5.5 agent-hours to ~95% | Work that dominates | |---|---|---|---| | Full target (ready for real work) | ~47% | 1,150–1,950 (~70% parallel) | depth across all areas, scripting compatibility, localization, typography fidelity, INDD/IDML | -| Mainstream practitioner | ~42% | 500–850 (~65% parallel) | INDD import and IDML corpus, composition fidelity, weekly-area depth, PDF/X-1a and printing | +| Mainstream practitioner | ~42% | 500–850 (~65% parallel) | INDD and IDML real-file corpus, composition fidelity, weekly-area depth, PDF/X-1a and printing | | Essentials user | ~54% | 135–250 (~50% parallel) | start-up robustness, context menus and copy/paste, threading, fonts, Windows printing | **Why pre-alpha:** it fails one of InDesign's core workflows, the alpha gate in @@ -30,7 +30,7 @@ draw a frame; thread and unthread commands), but Primary Text Frame autoflow add can't delete (#165). Everything else in the gate works end to end on macOS (document setup, styles, images, object editing, PDF export, save and reopen), and ready for real work (~47%) is above the alpha bar, so the Primary Text Frame page fixes are the whole distance to alpha. -Beyond that, beta needs INDD opening, IDML proven on real files, composition compared with +Beyond that, beta needs INDD and IDML proven on real files, composition compared with InDesign's, and basic editing fixed on Windows and Linux. Details: [docs/target-app-parity.md](docs/target-app-parity.md). @@ -40,7 +40,7 @@ InDesign's, and basic editing fixed on Windows and Linux. Details: |---|---|---|---| | Features (depth) | 55% | 250–400 | [target-app-parity.md](docs/target-app-parity.md) | | Typography and composition fidelity | 45% | 120–200 | [typography-parity.md](docs/typography-parity.md) | -| File formats | 40% | 150–250 + 20–60 (INDD) | [file-format-parity.md](docs/file-format-parity.md) | +| File formats | 40% | 150–250 + 10–30 (INDD corpus) | [file-format-parity.md](docs/file-format-parity.md) | | UI/UX fidelity | 45% | 120–180 | [ui-parity.md](docs/ui-parity.md) | | Stability | 45% | 60–100 | [gaps.md](docs/gaps.md) | | Performance | 65% | 40–80 | [gaps.md](docs/gaps.md) | @@ -108,7 +108,7 @@ Ranked; detail and estimates in [docs/roadmap.md](docs/roadmap.md), the full lis 1. **Alpha gate:** Primary Text Frame page fixes: autoflow adds pages users can't delete (#165) (5–7 h) 2. Basic editing on every platform: copy/paste, context menus, caret formatting (30–50 h) 3. CI running `cargo xtask ci` on pull requests (4–8 h) -4. Open INDD through a clean-room converter, owner decision on #114 (20–60 h) +4. INDD real-file corpus: measure what `.indd` files keep through indd-utils (10–30 h) 5. IDML real-file corpus and fixes (60–100 h) 6. Composition oracle against InDesign; optical kerning tuning; overset rule (70–125 h) 7. Start on any GPU; find every installed font (25–50 h) @@ -128,6 +128,7 @@ list) · [roadmap.md](docs/roadmap.md) (milestones, plan) · [parity-checklist.m Newest first. +- **2026-10-13** · `.indd` and `.indt` documents open through File › Open, drop, the web inbox, `file.open`, `file.openBytes`, `file.openIdml` and the CLI: [storytold/indd-utils](https://github.com/storytold/indd-utils) converts them to IDML in memory and the IDML importer reads the result, on desktop and web. Converter warnings come first in the open result; an unreadable file is an open error (#21, #114). No readiness percentage change until a real-file corpus measures it. - **2026-10-13** · macOS: a command chosen with the mouse in the menu bar runs at once. It used to wait for the next mouse move or key press over the window, so File › Open, Place and Save As seemed to take 10–20 seconds to open their dialogs. No readiness percentage change. - **2026-10-13** · An explicit recovery folder (`file.recovery.save` with `dir`) never overwrites or deletes another running app's checkpoints. Document uids start at 1 in every process, so two apps saving recovery to one chosen folder replaced or removed each other's `.designcraft`. A run replaces or removes only the entries it wrote or recovered there, refuses an occupied uid, and refuses a folder whose run lock another app holds. No readiness percentage change. - **2026-10-13** · PDF export leaves out form fields, buttons and video or sound that don't print: inside a hidden group, on a hidden or non-printing layer, or marked non-printing. Page content and interactive elements follow one inclusion rule. No readiness percentage change. diff --git a/docs/file-format-parity.md b/docs/file-format-parity.md index becddcc4d..c19df6b5c 100644 --- a/docs/file-format-parity.md +++ b/docs/file-format-parity.md @@ -1,6 +1,6 @@ # File format parity -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-12 · **Change:** minor (XLSX cached values preserve numeric precision and text; shared print spooler; Windows CI passes) · **Target:** Adobe InDesign 2026 (21.6) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (.indd and .indt open through indd-utils; XLSX cached values preserve numeric precision and text; shared print spooler; Windows CI passes) · **Target:** Adobe InDesign 2026 (21.6) Every format InDesign 2026 reads or writes, with DesignCraft's support, fidelity and tests. The InDesign list comes from its bundle's `Info.plist` (`CFBundleDocumentTypes`, @@ -8,8 +8,8 @@ InDesign list comes from its bundle's `Info.plist` (`CFBundleDocumentTypes`, the open/place/export filters in `apps/designcraft/src/main.rs` and the `file.*` commands. Overall numbers: [target-app-parity.md](target-app-parity.md); open problems: [gaps.md](gaps.md). -**Dimension score: ~40% ready (estimated), 150–250 h + 20–60 h for INDD integration.** The -single largest gap is that `.indd` can't be opened. +**Dimension score: ~40% ready (estimated), 150–250 h + 10–30 h for an INDD corpus.** The +largest gaps are that neither `.indd` opening nor IDML is measured on real files. Read/Write: **✓** supported · **~** partial · **✗** missing · **—** InDesign doesn't either. Weight: what share of an InDesign professional's file traffic the format carries (used for the @@ -19,8 +19,8 @@ score below). | Format | Ext | InDesign | DesignCraft read | DesignCraft write | Fidelity / tests | Weight | |---|---|---|---|---|---|---| -| InDesign document | `.indd` | read/write (native) | ✗ (#21; converters proposed in #98, #114) | ✗ | — | 30% | -| InDesign template | `.indt` | read/write | ✗ | ✗ | — | 2% | +| InDesign document | `.indd` | read/write (native) | ✓ (converted to IDML in memory by [storytold/indd-utils](https://github.com/storytold/indd-utils), then the IDML importer; #21, #114) | ✗ | Converter warnings join the open result; unreadable files are open errors. Synthetic-bytes tests only; indd-utils reports 96.9% of IDML values reproduced on ~650 pairs. No real-file corpus test | 30% | +| InDesign template | `.indt` | read/write | ✓ (as `.indd`) | ✗ | As `.indd` | 2% | | InDesign Markup | `.idml` | read/write | ✓ | ✓ | Synthetic fixtures in `crates/idml/src/tests.rs` (51 tests); exported files verified by opening in InDesign 2026 by hand; indd-utils' 98-document run imports 811 spreads / 2,866 stories / 5,812 items. Open: #193, #338, #339, #340, #211. No real-file corpus test | 20% | | DesignCraft native | `.designcraft` | — | ✓ | ✓ | zip + JSON, versioned; round-trip tests | — | | InDesign book | `.indb` | read/write | ✗ (own `.dcbook`) | ✗ | Books are shallow (see gaps.md) | 2% | @@ -86,26 +86,28 @@ score below). ## Score Weighted by the Weight column (documents, output and placed tables; resources unweighted), -counting ✓ = 1, ~ = 0.5, and IDML at 0.6 until a real-file corpus proves it: **~45% present**. -Taking fidelity into account (no INDD, IDML unproven, PDF/X-1a and presets missing), **~40% ready -for real work** (estimated). INDD alone moves this dimension by up to 30 points. +counting ✓ = 1, ~ = 0.5, IDML at 0.6 and INDD at 0 until a real-file corpus measures them: +**~45% present**. Taking fidelity into account (INDD and IDML unmeasured, PDF/X-1a and presets +missing), **~40% ready for real work** (estimated). A measured INDD corpus moves this dimension by +up to 30 points. ## Remaining effort | Work | Opus 5.5 h | |---|---| -| INDD import via a clean-room converter (owner decision, #114) | 20–60 | +| INDD real-file corpus, metric, fixes (#21, #114) | 10–30 | | IDML real-file corpus, metric, fixes (#193, #338, #339, #340) | 60–100 | | PDF/X-1a and X-3 (transparency flattener), PDF presets and `.joboptions`, external validator | 40–70 | | Print fidelity, PostScript level 3 output and print presets | 25–45 | -| ICML story import, IDMS snippets, INDT templates (once INDD reads) | 15–25 | +| ICML story import, IDMS snippets | 15–25 | | HTML / fixed-layout EPUB with live text | 20–35 | | JPEG export dialog, SVG export, EPS export | 10–20 | -| **Total** | **190–355** (150–250 excluding INDD and PostScript output) | +| **Total** | **180–325** (150–250 excluding INDD and PostScript output) | ## Revision history | Date | Change | Summary | |---|---|---| +| 2026-10-13 | minor | `.indd` and `.indt` read through storytold/indd-utils; INDD remaining work is a real-file corpus (10–30 h); score unchanged until it is measured | | 2026-10-12 | minor | XLSX table placement and data merge preserve small numeric values and cached formula strings; synthetic regressions in `textimport::xlsx::tests`. Scores unchanged. | | 2026-10-10 | major | Created from InDesign 2026's declared document types and filters, `plan/indesign/08-file-formats.md` and the code | diff --git a/docs/gaps.md b/docs/gaps.md index 49f82aefe..406609bac 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -1,6 +1,6 @@ # Where DesignCraft falls short of InDesign -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (gap 0 shrunk: text threads by hand; threading gaps added; Optical kerning from outlines (#181); gap 6: macOS lists fonts that font services and managers activate; shared print spooler; image clipping paths from IDML; Tabs panel listed as present (#343); book chapter update safety; gap 16: Based on Parent leftovers) · **Target:** Adobe InDesign 2026 (21.6) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (.indd and .indt open through indd-utils; gap 0 shrunk: text threads by hand; threading gaps added; Optical kerning from outlines (#181); gap 6: macOS lists fonts that font services and managers activate; shared print spooler; image clipping paths from IDML; Tabs panel listed as present (#343); book chapter update safety; gap 16: Based on Parent leftovers) · **Target:** Adobe InDesign 2026 (21.6) Every known shortfall against InDesign 2026, one entry each, ranked by how much it stops an InDesign professional from doing real work. This is the work list: agents pick from the top. @@ -37,14 +37,18 @@ Kind: **F** feature · **U** UI/UX · **T** typography · **FF** file format · - **Estimate:** 30–50 h (reproduce per platform through the control channel, regression tests). - **Doc:** [ui-parity.md](ui-parity.md) -### 2. InDesign documents (.indd) can't be opened (FF) -- **Missing:** INDD (and INDT, INDB, INDL) reading. Everything InDesign users receive is INDD. -- **Evidence:** #21. Two clean-room converters are proposed: PR #98 and `indd-utils` (#114), - which reports 96.9% of InDesign's IDML values reproduced on ~650 INDD/IDML pairs, 0 failures on - ~4,300 files, and output that DesignCraft's IDML importer already reads. -- **Impact:** without it, every job starts with "ask the client for an IDML". -- **Estimate:** 20–60 h to integrate indd-utils (INDD → IDML → existing importer), warnings UI, - corpus test; **owner decision** on provenance and where the crate lives. +### 2. INDD opening isn't measured on real files (FF) +- **Missing:** a real-file corpus test of opening `.indd` and `.indt`. They open through + [storytold/indd-utils](https://github.com/storytold/indd-utils), which converts them to IDML in + memory for the IDML importer, but DesignCraft's own tests use synthetic bytes only. INDB and + INDL are still not read. +- **Evidence:** #21, #114 (PR #98 proposed another converter). indd-utils reports 96.9% of + InDesign's IDML values reproduced on ~650 INDD/IDML pairs and 0 failures on ~4,300 files; what + DesignCraft draws from those files is unmeasured, and it inherits the IDML importer's open bugs + (gap 3). +- **Impact:** a client's `.indd` opens, but nobody knows how close it comes to the original. +- **Estimate:** 10–30 h (corpus pinned in a sibling of `storytold/photocraft-corpus`, metric, + fixes in indd-utils or the IDML importer). - **Doc:** [file-format-parity.md](file-format-parity.md) ### 3. IDML round-trip isn't proven on real files (FF) diff --git a/docs/roadmap.md b/docs/roadmap.md index 643d8b8f3..fa158f7da 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,6 +1,6 @@ # DesignCraft roadmap (detail) -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-12 · **Change:** minor (text threads by hand; the gate waits on the Primary Text Frame page fixes) · **Target:** Adobe InDesign 2026 (21.6) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (.indd and .indt open through indd-utils; text threads by hand; the gate waits on the Primary Text Frame page fixes) · **Target:** Adobe InDesign 2026 (21.6) Forward-looking plan. The one-page summary is [ROADMAP.md](../ROADMAP.md); numbers are in [target-app-parity.md](target-app-parity.md); the work list is [gaps.md](gaps.md). Hours are @@ -25,7 +25,8 @@ but are next in line. | Export a print-ready PDF (bleed, marks, CMYK and spot, PDF/X-4) | yes | krilla export with subset fonts, Separations, marks and bleed, PDF/X-4 with validator; 53 PDF tests | 0 | Exchanging files with InDesign users (open INDD, round-trip IDML) is a beta requirement, not part -of the alpha gate: IDML works both ways today and INDD is gap 2. +of the alpha gate: IDML works both ways today, INDD opens through indd-utils, and measuring both +on real files is gaps 2 and 3. **Distance to alpha:** ~5–7 h (the threading row: Primary Text Frame page fixes). Ready for real work (~47%) is already above the ~40% alpha bar. @@ -40,8 +41,9 @@ In order. Each closes a beta blocker from [gaps.md](gaps.md). macOS, Windows and Linux. 30–50 h. 2. **CI on pull requests** (gap 7): `cargo xtask ci` on every PR, at least macOS and Linux; Windows smoke start. 4–8 h. Needs the owner to make it a required check. -3. **Open INDD** (gap 2): decide with the owner how to bring in the clean-room converter - (#114 indd-utils, #98), then INDD → IDML → existing importer, warnings shown. 20–60 h. +3. **INDD real-file corpus** (gap 2): `.indd` and `.indt` open through storytold/indd-utils + (INDD → IDML in memory → existing importer, warnings in the open result); a pinned corpus and + a metric show what survives. 10–30 h. 4. **IDML real-file corpus** (gap 3): a pinned corpus, a survival metric, and fixes for #193, #338, #339, #340. 60–100 h. 5. **Composition oracle** (gap 4): synthetic stories set in InDesign 2026 vs DesignCraft; @@ -61,7 +63,7 @@ set exists; depth gaps are in gaps.md. | M3 | Styles (nested/GREP, bullets, keeps, span columns) | ✅; style editing reliability (#169) | | M4 | Color & effects | ✅ core; colour management depth | | M5 | Graphics & links | ✅ core; EPS preview only | -| M6 | Files & export (native, IDML, PDF, PNG/JPEG) | IDML ✅, PDF ✅ (X-4, A-2b, tagged); INDD ✗; PDF/X-1a/X-3 and presets ✗ | +| M6 | Files & export (native, IDML, PDF, PNG/JPEG) | IDML ✅, PDF ✅ (X-4, A-2b, tagged); INDD read ✅ (via indd-utils); PDF/X-1a/X-3 and presets ✗ | | M7 | Long documents (sections, TOC, index, footnotes, books) | ✅ except Books (shallow) | | M8 | Tables | ✅ core (table/cell styles, rotation); diagonal lines, anchored objects in cells (#163) | | M9 | Performance (MT composition, tiles) | in progress: parallel compose 6.7×, damage regions; incremental composition next | @@ -81,7 +83,7 @@ that is ~28 points and **420–750 h** (~120–200 wall-clock hours with four to | Work | Gap | Hours | |---|---|---| | Basic editing on every platform | 1 | 30–50 | -| INDD import | 2 | 20–60 | +| INDD real-file corpus | 2 | 10–30 | | IDML real-file corpus and fixes | 3 | 60–100 | | Composition oracle and fixes | 4, 13 | 80–140 | | Start-up robustness, fonts | 5, 6 | 25–50 | @@ -109,6 +111,7 @@ output intent · EPS place") is done except Books depth and EPS (preview only). | Date | Change | Summary | |---|---|---| +| 2026-10-13 | minor | INDD and INDT open through storytold/indd-utils; focus item 3 shrinks to a real-file corpus (10–30 h) | | 2026-10-12 | minor | Threading row: threading by hand works; the gate waits on the Primary Text Frame page fixes (#165), 5–7 h | | 2026-10-10 | trivial | Ready figure 42% → 47% (method aligned with the standard); beta distance 28 points | | 2026-10-10 | minor | Alpha gate table added (6 core workflows); gate fails on manual threading, stage pre-alpha; A1 milestone and focus item 0 | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 39ca49e7e..656e6e0b1 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -1,6 +1,6 @@ # DesignCraft parity with Adobe InDesign -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (text threads by hand; image clipping paths from IDML; anchored objects wrap text; Tabs panel listed as present (#343); spring-loaded Zoom navigation; recovery checkpoint retention; cancelable macOS Dock Quit; Based on Parent; object styles carry effects; colour management on craft-cms, Coated FOGRA39 default CMYK) · **Target:** Adobe InDesign 2026 (21.6.0.57, macOS) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (.indd and .indt open through indd-utils; text threads by hand; image clipping paths from IDML; anchored objects wrap text; Tabs panel listed as present (#343); spring-loaded Zoom navigation; recovery checkpoint retention; cancelable macOS Dock Quit; Based on Parent; object styles carry effects; colour management on craft-cms, Coated FOGRA39 default CMYK) · **Target:** Adobe InDesign 2026 (21.6.0.57, macOS) The authoritative assessment of how close DesignCraft is to Adobe InDesign. [ROADMAP.md](../ROADMAP.md) summarizes it; [gaps.md](gaps.md) lists every known shortfall one at a time; the feature-by-feature @@ -60,7 +60,7 @@ they receive, setting type exactly, and basic editing that never fails. |---|---|---|---|---|---| | Features (depth of each area) | 25% | 55% | 250–400 | 275 catalogue rows exist; many lack options (e.g. Books is 258 lines of engine code, Liquid Layout 329); see the area table | this file | | Typography and composition fidelity | 15% | 45% | 120–200 | Knuth–Plass composer, keeps, grids, CJK, Arabic all exist; no comparison with InDesign's line breaks; optical kerning falls back to metrics (#181); overset rule differs (#180); hyphenation patterns for English, Spanish, Portuguese and Norwegian only | [typography-parity.md](typography-parity.md) | -| File formats | 20% | 40% | 150–250 (+20–60 for INDD integration) | INDD cannot be opened (#21); IDML both ways and verified in InDesign 2026, but real-file bugs open (#193, #338, #339, #340); PDF export strong; PDF/X-4 only | [file-format-parity.md](file-format-parity.md) | +| File formats | 20% | 40% | 150–250 (+10–30 for an INDD corpus) | INDD and INDT open through indd-utils, measured on synthetic bytes only (#21); IDML both ways and verified in InDesign 2026, but real-file bugs open (#193, #338, #339, #340); PDF export strong; PDF/X-4 only | [file-format-parity.md](file-format-parity.md) | | UI/UX fidelity | 15% | 45% | 120–180 | Measured InDesign 2026 look; but users report object copy/paste (#351, #348, #185, #164), right-click menus (#238, #187, #160), out-port threading (#352, #194, #165), canvas IME (#322) failing | [ui-parity.md](ui-parity.md) | | Stability | 10% | 45% | 60–100 | Never-crash rules and last-resort guards; startup failures on some GPUs and machines (#334, #273, #220, #192, #167, #166); no CI runs the tests on pull requests | [gaps.md](gaps.md) | | Performance | 5% | 65% | 40–80 | 300k characters compose in ~38 ms warm; typing repaints in < 1 ms (damage regions); no incremental composition; nothing benchmarked against InDesign; no large real documents | [gaps.md](gaps.md) | @@ -127,7 +127,7 @@ Discounts (multiplicative): |---|---|---| | Interaction fidelity | ×0.88 | right-click menus fail for some macOS users (#160, #238) and on Linux (#354); Paste in Place lands on page 1 (#348); formatting at a caret discarded (#289); font search focus (#335, #86) | | Stability on real machines | ×0.92 | start-up failures on Intel Mac Metal (#334) and Windows drivers (#167, #273, #220, #192, #166); no CI on pull requests; macOS on Apple silicon is solid | -| File exchange with InDesign users | ×0.85 | `.indd` can't be opened (#21); IDML import/export bugs (#193, #338, #339, #340, #211); opened text reflows: optical kerning (#181), overset rule (#180). Harsher than VectorCraft's ×0.92 because InDesign pros receive and send native files daily | +| File exchange with InDesign users | ×0.85 | `.indd` opens through indd-utils but is unmeasured on real files (#21); IDML import/export bugs (#193, #338, #339, #340, #211); opened text reflows: optical kerning (#181), overset rule (#180). Harsher than VectorCraft's ×0.92 because InDesign pros receive and send native files daily | 60.7% × 0.88 × 0.92 × 0.85 = 41.8% → **~42%**. It is lower than the full number (47%) because the full number spreads weight over dimensions DesignCraft does relatively well @@ -237,7 +237,7 @@ cluster**, more when the oracle has to be built first. | Work | Opus 5.5 h | Parallelizes? | Needs a human | |---|---|---|---| -| Beta blockers (see [roadmap.md](roadmap.md)) | 420–750 | ~70% (per crate) | owner decision on INDD import (#114); InDesign oracle captures on the owner's Mac | +| Beta blockers (see [roadmap.md](roadmap.md)) | 420–750 | ~70% (per crate) | InDesign oracle captures on the owner's Mac | | Rest of full parity | 730–1,200 | ~70% | native-speaker review for 12 languages; owner decision on ExtendScript compatibility and AI models | | **Total to full parity** | **1,150–1,950** | | | @@ -459,6 +459,7 @@ Task notes that headed ROADMAP.md: | Date | Change | Summary | |---|---|---| +| 2026-10-13 | minor | `.indd` and `.indt` open through storytold/indd-utils; INDD remaining work 10–30 h (real-file corpus); readiness unchanged until it is measured | | 2026-10-12 | minor | Text threads by hand; stage note and distance to alpha follow the gate (5–7 h, #165); percentages unchanged | | 2026-10-11 | minor | Spring-loaded Zoom navigation added to the working feature inventory (DC-1); readiness estimates unchanged | | 2026-10-10 | minor | Full number 42% → 47%: method aligned with the standard (plain weighted sum, the ×0.9 discount dropped), no new evidence; readiness table with hours for full, mainstream and essentials; beta distance 33 → 28 points |