Problem
PackageInspector.stripComments 用 <!--.*?-->(.dotMatchesLineSeparators)對每個 word/**/_rels/*.rels 與其 part 做註解剝除。part 內若有大量未閉合的 <!--,每個開頭都讓 lazy .*? 掃到檔尾:實測 40 / 80 / 160 KB 的 rels part → 4.4 / 16.7 / 62.3 s(二次);一個 5.3 KB 的 .docx(chart rels part 內塞未閉合 <!--,DocxReader 永遠不會 parse 它、但 inspector 每次都掃)展開後 62 s 牆鐘。inspector 明文「不是 parser、不驗 well-formedness」,所以這條輸入不會被擋在前面。
che-word-mcp 的 save gate 早就經 writeData(scratch 序列化)餵它,raw-channel parts 也會原樣搬運註解;che-word-mcp#199 的 list_images Direct Mode 是第一條把原始磁碟位元組直接餵進來的唯讀路徑,DA 實測卡住整個 actor server。che-word-mcp 端會先做線性預掃(<!-- 多於 --> 就拒絕檢查)當緩解,但根因在這裡。
Type
bug
Expected
註解剝除改成線性掃描(找 <!-- 後找下一個 -->,找不到即視為到檔尾一次結束),或對 part 大小/註解數設上限並在報告裡具名(與 #130 的 IO 上限同族)。
Actual
二次退化,可被小檔觸發。
Source: surfaced during /idd-verify che-word-mcp#199 (Step 5b follow-up triage). Verify report: PsychQuant/che-word-mcp#218 (comment)
Refs PsychQuant/che-word-mcp#199, #130
Current Status
Phase: needs-fix
Last updated: 2026-09-06 by idd-verify (R3 → fix round 3 landed; R4 running) — unattended /idd-all, cluster PR #141
Key Decisions
Blocking
Problem
PackageInspector.stripComments用<!--.*?-->(.dotMatchesLineSeparators)對每個word/**/_rels/*.rels與其 part 做註解剝除。part 內若有大量未閉合的<!--,每個開頭都讓 lazy.*?掃到檔尾:實測 40 / 80 / 160 KB 的 rels part → 4.4 / 16.7 / 62.3 s(二次);一個 5.3 KB 的 .docx(chart rels part 內塞未閉合<!--,DocxReader永遠不會 parse 它、但 inspector 每次都掃)展開後 62 s 牆鐘。inspector 明文「不是 parser、不驗 well-formedness」,所以這條輸入不會被擋在前面。che-word-mcp 的 save gate 早就經
writeData(scratch 序列化)餵它,raw-channel parts 也會原樣搬運註解;che-word-mcp#199 的list_imagesDirect Mode 是第一條把原始磁碟位元組直接餵進來的唯讀路徑,DA 實測卡住整個 actor server。che-word-mcp 端會先做線性預掃(<!--多於-->就拒絕檢查)當緩解,但根因在這裡。Type
bug
Expected
註解剝除改成線性掃描(找
<!--後找下一個-->,找不到即視為到檔尾一次結束),或對 part 大小/註解數設上限並在報告裡具名(與 #130 的 IO 上限同族)。Actual
二次退化,可被小檔觸發。
Source: surfaced during /idd-verify che-word-mcp#199 (Step 5b follow-up triage). Verify report: PsychQuant/che-word-mcp#218 (comment)
Refs PsychQuant/che-word-mcp#199, #130
Current Status
Phase: needs-fix
Last updated: 2026-09-06 by idd-verify (R3 → fix round 3 landed; R4 running) — unattended /idd-all, cluster PR #141
Key Decisions
nsWellFormed;守門測試把<zz:x/>放在根元素之後、revert 整個修法照綠);R2 用lowercased()索引模擬檔案系統本身是新的靜音開關(碰撞時依封裝順序選、APFS 摺 U+017F、./收合)。3807b6a,在隔離 worktree 完成、ff-merge 進 cluster branch):inspector 改走 reader 自己的ZipHelper.unzip、part 以 OPC 位址組字串交檔案系統查(不模擬);解壓失敗/無word/document.xml→invalidDocx;delegate 自判未宣告前綴(真實 writer 唯一會產生的那一類);撤回「reader 拒的 inspector 也拒」全稱宣稱(DA D1 裁決:走封閉列舉——拒絕理由四類、不模擬的 namespace 類別點名、isConsistent是關係陳述),以 leniency 測試釘住;預檢驗完整 UTF-8、自閉合算深度;writer 以 rels 檔存在判斷、拒非 UTF-8/零長度/含註解/CDATA/前綴<Relationship>的 rels、訊息依成因分句(DocxWriter把rId1–rId4寫死給 styles/settings/fontTable/numbering——真實封裝若把rId1用在圖片就無法存檔(sister concern from #139) #140 亦然)。1512 tests / 0 failures。hasNewTypedRelationships與RelationshipsOverlay.parseRels是 #137 的同一反模式(sister concern from #137) #142;固定槽 →DocxWriter把rId1–rId4寫死給 styles/settings/fontTable/numbering——真實封裝若把rId1用在圖片就無法存檔(sister concern from #139) #140。Blocking
3807b6a進行中;PASS → merge PR cluster: PackageInspector parses XML with the reader's parser, and no serialization path traps (#137, #138, #139) #141、tag v3.7.0、idd-close ×3;FAIL → fix round 4。