diff --git a/ROADMAP.md b/ROADMAP.md
index 27aaec28..63a74063 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -35,7 +35,7 @@ Hours are for a single agent (low–high). "Done" is the estimated fraction of t
| M1 | COS: filters, crypt, parser, xref, writer | 120–200 | 72% | 35–60 | Done:
- filters and crypt: every standard-security revision R2–R6 (RC4, AES-128/256), SASLprep, permissions, creating encryption;
- cos: parse and repair, decrypt on load, re-encrypt on save, incremental and full writing.
Corpus: open/edit/save passes on 958 files, and all 7 password-protected files open.
Full saves now pack objects into compressed object streams. Fuzzing runs nightly (`xtask fuzz`). Missing: ≥ 250 tests, own image codecs |
| M2 | Model, render, text | 200–350 | 15% | 170–300 | hayro bootstrap renderer (vendored patches). Text extraction reaches word-F1 0.98 against pdftotext. Missing: model crate, fonts, DisplayList, renderer independent of hayro |
| M3 | Viewer app (native + web) | 80–150 | 72% | 22–42 | Acrobat-style shell, find, select, panels, tiles, web build, UI control channel for agents (opt-in). Missing: 60 fps test on a 500-page document, snapshot tests of every panel |
-| M4 | Engine, history, save, organize | 100–180 | 65% | 35–63 | Done:
- command registry (menus, shortcuts and palette all use it);
- undo/redo; incremental, atomic and encrypted saves;
- autosave and crash recovery;
- organize, combine, extract, split and insert-from-file, with identical fonts and images stored once;
- CLI `edit/combine/extract/split`.
Missing: bookmark and page-label editing, page boxes, CLI `run`, recovery on the web |
+| M4 | Engine, history, save, organize | 100–180 | 80% | 20–36 | Done:
- command registry (menus, shortcuts and palette all use it);
- undo/redo; incremental, atomic and encrypted saves;
- autosave and crash recovery;
- organize, combine, extract, split and insert-from-file, with identical fonts and images stored once;
- CLI `edit/combine/extract/split`.
Done since: bookmark editing, page labels (Number pages), CLI `run`. Missing: page boxes/crop, recovery on the web |
| M5 | Comments (all annotation types, XFDF) | 120–200 | 0% | 120–200 | Read-only comments panel exists |
| M6 | Forms + JavaScript | 160–320 | 0% | 160–320 | Fields are displayed, not filled |
| M7 | Content editing (text, images, header/footer, watermark) | 250–500 | 0% | 250–500 | Longest pole |
@@ -46,9 +46,9 @@ Hours are for a single agent (low–high). "Done" is the estimated fraction of t
| M12 | Accessibility, compare, measure, search, XFA | 200–380 | 0% | 200–380 | |
| M13 | Automation (MCP, Action Wizard, CLI) + AI providers | 60–120 | 15% | 50–100 | Done: headless tool table (20 tools), opt-in MCP server over stdio, CLI `run`/`tools`. Missing: Action Wizard, more tools as features land, AI providers |
| M14 | 1.0 polish: performance, localization, installers | 120–250 | 0% | 120–250 | |
-| | **Total** | **2,085–3,840** | **≈ 9.5%** | **≈ 1,870–3,465** | |
+| | **Total** | **2,085–3,840** | **≈ 10%** | **≈ 1,870–3,465** | |
-**Overall progress: about 9.5% of the effort.** The viewer and the core are far ahead of the editing features, because the viewer was built first so progress could be seen.
+**Overall progress: about 10% of the effort.** The viewer and the core are far ahead of the editing features, because the viewer was built first so progress could be seen.
## Critical path
@@ -67,6 +67,13 @@ M0 → M1 → M2 → M3 → M4 must happen in order. After M4, M5–M12 can run
Newest first. One line per session: the date, what moved, and the new overall percentage.
+- **2026-10-01 (session 7):**
+ - Bookmark editing and page numbering (Number pages), with undo, agent tools and UI.
+ - A render watchdog: pathological pages are skipped after 20 s instead of spinning forever.
+ - The agent control channel no longer reports success when the window is hidden.
+ - Community links: Discord button in the title bar, plus Home, About, Help menu, CLI and README.
+ - Overall ≈ 10%.
+
- **2026-10-01 (session 6):**
- UI control channel: agents can inspect the widget tree, click, type, press keys, run commands and take screenshots of the running app. Off unless the app is started with `--control`; loopback only, token-authenticated.
- Combine and insert store identical fonts, images and other resources once. 40 copies of the showcase: 130 MB → 3.9 MB, 3× faster, pixel-identical.
diff --git a/parity/acrobat-features.toml b/parity/acrobat-features.toml
index 70386d27..483fc474 100644
--- a/parity/acrobat-features.toml
+++ b/parity/acrobat-features.toml
@@ -3019,10 +3019,10 @@ title = "Edit page labels (style, prefix, start)"
area = "D"
tier = "P1"
milestone = "M4"
-status = "planned"
-commands = []
-tools = []
-evidence = []
+status = "shipped"
+commands = ["page.number"]
+tools = ["page_number"]
+evidence = ["crates/organize/src/tests.rs::number_pages_like_acrobat", "crates/engine/src/tests.rs::number_pages_shows_in_the_viewer_and_undoes", "crates/ui-egui/tests/bookmarks.rs::number_pages_dialog_labels_the_selected_pages", "crates/automation/tests/automation.rs::numbering_pages_through_tools"]
notes = ""
[[feature]]