diff --git a/tasks/TASKS.md b/tasks/TASKS.md
index feb9c0a..6e6a7a4 100644
--- a/tasks/TASKS.md
+++ b/tasks/TASKS.md
@@ -237,7 +237,7 @@
- [~] R4.3 组件库:块扩展照 Typora 默认:GitHub 提示块(NOTE、TIP、IMPORTANT、WARNING、CAUTION);独占一段的 `[toc]` 画成可按的标题目录;front matter 去掉 `---` 显示在框里;HTML 块按 R4.2 的标签显示,GFM 标签过滤的九种(`script`、`style` 等)照原文显示(随 GitHub);分隔线可见;嵌套无序列表的标记随层级变化。R1 FAIL 六项已修:提示块标记改读解析后的纯文字;`script`、`style` 等过滤标签照 GitHub 显示原文(两项);块元素关闭时结束其内所开元素;目录按下在写回或待读时重新定位标题;按标签名计数,栈检查为常数时间。R2 FAIL 五项已修:目录按下随两份文字之差移动标题;欠下的空格只移其后所开元素;过滤标签里的短码;标签名止于空白或 `/`;块开始照 HTML5 结束 p、li、dd、dt。R3 FAIL 三项已修(三轮用尽,未再审):短码照 GitHub 按 DOM 文字节点定,首个 `:名:` 前为空白或空格则全转、否则全不转,过滤标签不分节点(GitHub Markdown API 实测 54 例,`.work/R4.3-fix3/github-*.log`;仅有不换行空格在前一例因限流未测);`fieldset`、`menu` 等照 HTML5 清单结束 p(`dialog`、`dir`、`form`、`hgroup`、`listing`、`search` 未在 GitHub 实测);目录按下改用 `CodeEditor` 锚点,随每次真实编辑移动,撤销即失效。各有回归测试,旧代码上失败(`.work/R4.3-fix3/red-*.log`)。组件库 8e5dad8 已推送
- [~] R4.4 ElyMark:导出 HTML、纯文本与富文本复制随 R4.2、R4.3,与可视所见一致(表情、提示块、目录、行内 HTML 的同一组标签)。组件 1251221 公开 `MarkdownReader`、`MarkdownBlock`,导出与可视同一读法。审查三轮未过(`tasks/reviews/R4.4-r1..r3.md`):r1 六项(自读行内状态与组件分歧、目录锚点缺、写出平方);r2 六项(空公式错位、链接里的脚注嵌套、脚注锚点、纯文本脚注标签、富文本复制失样式、长注释);r3 一项:每个脚注扫一遍已开格式查链接,深格式加多脚注为平方。r3 已修(随格式栈计数已开链接),回归测试在旧码失败(60 ms 到 912 ms),新码线性;轮数用尽,未再审。markdown-rs 对同一输入的解析仍随长度平方(上游,已记限制)
- [~] R4.5 组件库:可视模式按下块时插入点落在所按的字处;右键不开块,把插入点放到所点处,以事件告知属主所点的目标(块的种类、链接地址、图片地址、是否在表格或代码块里)。组件 5af11fe 至 c35fdac(已推送):每段画出的文字记其原文范围与解码方式,从段尾倒着对回原文;右键发 `DocumentEvent::Pointed`。审查三轮未过(`tasks/reviews/R4.5-r1..r3.md`):r1 九项(引用续行、转义、缩进代码、提示块、HTML 块、定义与 front matter、空文档右键自开、写回改块、长注释);r2 四项(解码换行崩溃、CRLF 与 CR、删去的语法错位、写回改了定义);r3 五项:保留的缩进与 `>` 被当成换行吃掉、自动链接里的引用被解码、表格代码的 `\|`、解码出的空白不参与合并、数字引用的控制字符未按 markdown-rs 换成 U+FFFD。r3 已修(先比相同字符,再把画出的空格对行尾,空白不论是否解码都可略过;自动链接按原文,表格单元格的代码读 `\|`,数字引用照 markdown-rs),审查者的 17 个探针转为回归测试,14 个在旧码失败;轮数用尽,未再审。已打开块的输入框里右键不发事件,不在本条。ElyMark 的组件 pin 随 R4.10 再升
-- [ ] R4.6 组件库:行内格式命令(粗体、斜体、行内代码、删除线、下划线、链接、图片、清除格式),照 Typora:有选区即包住或去掉,无选区取插入点所在的词,空处插一对标记、插入点在其中;代码、公式、HTML、front matter 里拒绝并说明;一步撤销;打开的块照常可续写
+- [~] R4.6 组件库:行内格式命令(粗体、斜体、行内代码、删除线、下划线、链接、图片、清除格式),照 Typora:有选区即包住或去掉,无选区取插入点所在的词,空处插一对标记、插入点在其中;代码、公式、HTML、front matter 里拒绝并说明;一步撤销;打开的块照常可续写。组件 68d33b4 至 1d03545(已推送):`MarkdownDocument::format` 照 Typora 的 `toggleStyle`,跨块、跨链接或别的标记的选区拒绝(窄于 Typora 的拆分);格式一律在后台读,一次一个(另一个以 `Busy` 拒绝),文字、选区未变且不在预览才落下,后到的拒绝经 `DocumentEvent::FormatRefused`。审查三轮未过(`tasks/reviews/R4.6-r1..r3.md`):r1 七项(端点落在标记或地址里、行尾空格与空单元格、清除漏公式脚注转义、下划线隔着标签、长文卡界面、CR 行、跨块报错);r2 六项(嵌套标记与地址、自动链接的反斜杠、平方增长与 128 KiB 卡顿、连按丢失、后台拒绝无事件、长注释);r3 三项:格式后的同步重读超 100 毫秒、16 KiB 阈值使可视打开不在顶上、测试用了 std 的 Instant。r3 已修:格式不再在界面线程解析,文档的即时读取回到 128 KiB,计时用 `web_time::Instant`,两项回归在旧码失败;轮数用尽,未再审。遗留:128 KiB 以内的块多的文字,文档自身的同步重读仍可超 100 毫秒(markdown-rs 随节点数平方增长);超过 128 KiB 的文件以可视打开,首次后台读取落定时不在顶上(实测 140 KB 落在第 2 行,非 R4.6 所改,未修)
- [ ] R4.7 组件库:块命令(标题 1–6、段落、标题升降一级;引用、有序、无序、任务列表的切换;插入分隔线、代码块、公式块、目录、front matter、脚注、链接定义、前后空段落;删除块),一步撤销,拒绝说明原因
- [ ] R4.8 组件库:表格行列上下左右移动、整理表格源码;代码块取代码内容;与已有的增删行列同一套拒绝
- [ ] R4.9 ElyMark:“段落”“格式”菜单与 Typora 同项同键(Ctrl+1–6、Ctrl+0、Ctrl+=/-、Ctrl+B/I/U、Ctrl+Shift+`、Alt+Shift+5、Ctrl+K、Ctrl+Shift+I、Ctrl+\、Ctrl+T、Ctrl+Shift+K/M/Q/[/]);源码模式 Ctrl+/;字号 Ctrl+Shift+=/-/0;专注 F8、打字机 F9;表格菜单加移动行列;复制为 Markdown Ctrl+Shift+C、粘贴为纯文本 Ctrl+Shift+V
diff --git a/tasks/reviews/R4.6-r1.md b/tasks/reviews/R4.6-r1.md
new file mode 100644
index 0000000..d6ed36e
--- /dev/null
+++ b/tasks/reviews/R4.6-r1.md
@@ -0,0 +1,15 @@
+FAIL
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:210`: The unwrap path returns before checking protected boundaries, and merging likewise loses the original endpoints. Strong at `a *‸*bold** z` removes bold, and Link at `[a](ht‸tps://example.com)` deletes the address; both must refuse as `Across`. Strong also accepts `a *⟨*b** c⟩` and the partial other-style selection `*a⟨b*⟩` (producing `*a**b***`). Validate the original endpoints against marks and addresses before unwrapping or expanding same-style nodes, and distinguish containment in a node's body from containment including its delimiters. Reproduced in `.work/R4.6-r1-review/confirmed-probes.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:219`: Block lookup uses only the first-to-last child's content span, excluding editable trailing whitespace and positions in empty cells. Strong at `alpha ‸` returns `Outside` instead of inserting `alpha **‸**`; the empty cell in `| h |\n| - |\n| ‸ |` also returns `Outside`. Both positions satisfy the empty-pair rule. Locate the owning paragraph, heading or cell independently of its children's text span, then include its editable whitespace while excluding structural marks. Both cases fail executable probes.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:402`: Clear only removes the node kinds handled by `marks` and HTML tags, leaving other inline `.md-meta` intact. Clear on `**a** $x‸+y$` produces `a $x+y$`, and on `a‸ [^n]\n\n[^n]: note` leaves the footnote reference unchanged. Typora's decorator explicitly marks the math and footnote delimiters as `.md-meta`; escaped punctuation's backslashes are another reproduced omission. Remove these inline marks too, retaining their content and untouched blocks, and cover them with exact-output tests.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:175`: Underline detection requires the nearest HTML tags on either side to be `` and ``, so an intervening tag hides the enclosing underline. Underline at `a
b‸c` produces `a
bc` instead of removing the enclosing pair to produce `a
bc`; nested `` reproduces the same failure. Find the enclosing matched underline pair through intervening and nested tags, rather than treating adjacent tags as the pair.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:192`: Every format command reparses the entire file synchronously from `MarkdownDocument::format`, bypassing the existing background-read threshold and source-only size limit. An optimized probe on `"word\n\n".repeat(64000)` (384,000 bytes), formatting the first word, took 4,735 ms; parsing alone took 3,873 ms (`.work/R4.6-r1-review/timing.log`). The UI thread therefore stalls for seconds even when the command touches one word, and larger source-only files still enter the parser. Reuse a current parse or perform command parsing off the UI thread, enforcing the existing large-file guard before applying the edit.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:225`: Blank-line detection splits only on LF. In a CR-only file, Strong at `a\r‸\rb` returns `Outside` instead of inserting `a\r**‸**\rb`. This rejects a real blank line that the Markdown parser recognizes. Detect LF, CRLF and CR consistently with the existing source-line reader, preserving the original separators; the CR case fails the probe.
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:233`: A selection spanning valid blocks reports `Outside`, contrary to the specified `Across` refusal. Strong on `⟨alpha\n\nbeta⟩` reproduces this, so the caller receives the wrong reason despite both endpoints being in paragraphs. Distinguish a selection crossing blocks from a caret outside an editable block, and assert the exact refusal in the tests.
diff --git a/tasks/reviews/R4.6-r2.md b/tasks/reviews/R4.6-r2.md
new file mode 100644
index 0000000..c2af717
--- /dev/null
+++ b/tasks/reviews/R4.6-r2.md
@@ -0,0 +1,13 @@
+FAIL
+
+- `Ely-GPUI-Components/src/documents/document/format.rs:241`: Unwrapping still checks only the requested style's own marks, then returns before validating nested boundaries; the underline return at line 286 has the same problem. Strong at `**[a](ht‸tps://x)**` or `**~~a~‸~**` removes the outer bold, and Underline at `[a](ht‸tps://x)` removes the underline, instead of returning `Across`. Thus round 1's boundary defect is only partly fixed. Validate the original selection against all protected marks and addresses before either unwrap path, including partial crossings of nested styles. Four full-library regressions fail in `.work/R4.6-r2-review/probes.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format/clear.rs:32`: Every text node is scanned for escapes, including autolink text where backslashes are literal. Clear on `a‸ ` produces `a https://x/*`, deleting a character that the parser retains in both the label and URL. Removing formatting must retain that literal backslash. Distinguish actual Markdown escapes from verbatim autolink contents before collecting removal ranges, and add an exact-output regression. The full-library failure and original AST are in `.work/R4.6-r2-review/clear-regression.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format/apply.rs:37`: The synchronous branch still blocks the UI well beyond PERF-02 below `AT_ONCE`. Formatting the first character of `"a\n\n".repeat(32000)` (96,000 bytes) takes 1,179 ms at P95 over 30 optimized runs of the unchanged toggle implementation on a Ryzen 9 9950X3D under WSL. This branch runs that entire parse and validation on the UI thread. Round 1's stall therefore remains for smaller documents with many paragraphs. Reuse a current parse or move expensive parsing and validation off the UI thread at these sizes too; cover this document shape rather than only one long word above the cutoff. Measurements and sample hash: `.work/R4.6-r2-review/timing.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format/apply.rs:48`: Assigning the next task to `_formatting` drops the preceding accepted command. With `"x".repeat(AT_ONCE + 1)` and the caret at byte 1, request Strong and then Emphasis before the background work finishes: both calls return `Ok(())`, but the result has only emphasis (`*xxx…*`), losing Strong. Serialize accepted commands, or explicitly refuse a new command while one is pending instead of silently replacing it. Add a regression asserting both formatting effects and their undo behavior. Reproduced by the failing two-command test in `.work/R4.6-r2-review/probes.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format/apply.rs:60`: Background refusals are logged without being delivered to the caller, so MARK-15's required explanation cannot be shown. In a source document consisting of an inline code span followed by more than `AT_ONCE` bytes of prose, Strong with the caret inside that code returns `Ok(())`; completion leaves the text unchanged and emits no document event. The same refusal is returned to the caller in a short document. Provide a completion result or event carrying `FormatRefusal`, including refusals from `apply`, so the host can explain the failure. The accepted result, empty event list and unchanged text are recorded in `.work/R4.6-r2-review/probes.log`.
+
+- `Ely-GPUI-Components/src/documents/document/format/apply.rs:18`: The new method documentation spans three comment lines, violating the explicit one-line comment rule. Also, the new comment at `format.rs:63` contains eleven words, exceeding the ten-word limit. Reduce these comments to single lines of at most ten words, or remove them.
diff --git a/tasks/reviews/R4.6-r3.md b/tasks/reviews/R4.6-r3.md
new file mode 100644
index 0000000..1df21b7
--- /dev/null
+++ b/tasks/reviews/R4.6-r3.md
@@ -0,0 +1,7 @@
+FAIL
+
+- `Ely-GPUI-Components/src/documents/document/format/apply.rs:39`: The 16 KiB cutoff still allows a format parse followed by the visual document's synchronous reparse (`document/mod.rs:308`) in one uninterrupted UI update, so round 2's PERF-02 defect remains. In Visual mode with no open block, put the caret at byte 3 of `format!("word\n\n{}", "~*a*~".repeat(3270))` (16,356 bytes) and toggle Strong. Thirty full-document calls measured 234 ms P95 with the component and parser optimized; all 30 emitted `Parsed` before yielding. A separate release build of the unchanged toggle plus just the subsequent parser call took 133–144 ms, excluding rendering and reader conversion. Budget the complete update, reusing a valid parse or moving expensive work off the UI thread, and cover this visual-mode case. Evidence: `.work/R4.6-r3-review/optimized-probes.log`, `timing-confirm.log`, and `review.log`.
+
+- `Ely-GPUI-Components/src/documents/document/mod.rs:44`: Lowering the shared cutoff makes previously synchronous initial reads preserve the rendered end placeholder's scroll anchor when `adopt` inserts the document's blocks. Opening `format!("alpha beta\n\n{}", "x".repeat(20000))` directly in Visual mode now finishes at line 2 near the bottom of the second block, with the first block offscreen. The same test passes at line 0 with the first block visible when only `AT_ONCE` is restored to its previous 128 KiB value. Preserve the initial or requested document position when the first asynchronous read replaces the placeholder, and add a visual-opening regression between the two cutoffs. Evidence: `.work/R4.6-r3-review/optimized-probes.log` and `previous-cutoff.log`.
+
+- `Ely-GPUI-Components/src/documents/document/tests/format.rs:3`: The new `std::time::Instant` import violates the component's explicit `web_time::Instant` rule and fails the mandatory time-source check in `scripts/check.sh`. Running that exact scan on the unmodified checkout identifies this line and returns the house-rule failure. Use `web_time::Instant` in the timing test. Evidence: `.work/R4.6-r3-review/house-rules.log`.