Problem
對 DocxReader.read(…, wireTreeBackedViews: true) 開啟的文件,任何觸發 markTypedDirty("word/document.xml") 的操作(本例 insertImage(at: nil) 走 3.6.0 的 typed fallback;v3.5.0 上 insertParagraph(_:at: 0) 亦同)會讓 typed 重新序列化丟掉文件既有的 <w:drawing>:27 份含 media 的真實 docx 中 13 份低於預期(171→3、36→1、14→1)。
歸因
底層缺陷既有(tree-backed 視圖 + typed 序列化 = 丟 drawing),3.6.0 的 #128 未製造它,但把 append-image 從 op 快路徑改道進這條路徑,該情境的失敗從「丟 1 張新圖」變成「丟 N 張舊圖」。
可達性
che-word-mcp 全樹零 wireTreeBackedViews(一律預設 false)→ MCP 不受影響。production 中使用 tree-backed 的 word-builder-swift LensDocument / docx-workflow-swift / macdoc word reverse / SyncOrchestrator 今天都不呼叫 appendParagraph/insertImage,故無已知觸發路徑;但 appendParagraph 是 public API。
建議
- 找出 tree-backed → typed 序列化丟 drawing 的根因(
Paragraph.runs getter 對 tree-backed 回 text-only stub 是首要嫌疑);
- 在修好前,
Issue175AppendImageTests 補一個 tree-backed + 既有圖片的 RED 案例並於 3.6.0 release note 明寫限制(此兩項由 #175 fix round 處理)。
Source: surfaced during /idd-verify PsychQuant/macdoc#175 (Step 5b follow-up triage). Verify report: PsychQuant/macdoc#175 (comment)
Refs PsychQuant/macdoc#175
Problem
對
DocxReader.read(…, wireTreeBackedViews: true)開啟的文件,任何觸發markTypedDirty("word/document.xml")的操作(本例insertImage(at: nil)走 3.6.0 的 typed fallback;v3.5.0 上insertParagraph(_:at: 0)亦同)會讓 typed 重新序列化丟掉文件既有的<w:drawing>:27 份含 media 的真實 docx 中 13 份低於預期(171→3、36→1、14→1)。歸因
底層缺陷既有(tree-backed 視圖 + typed 序列化 = 丟 drawing),3.6.0 的 #128 未製造它,但把 append-image 從 op 快路徑改道進這條路徑,該情境的失敗從「丟 1 張新圖」變成「丟 N 張舊圖」。
可達性
che-word-mcp 全樹零
wireTreeBackedViews(一律預設 false)→ MCP 不受影響。production 中使用 tree-backed 的 word-builder-swift LensDocument / docx-workflow-swift / macdocword reverse/ SyncOrchestrator 今天都不呼叫appendParagraph/insertImage,故無已知觸發路徑;但appendParagraph是 public API。建議
Paragraph.runsgetter 對 tree-backed 回 text-only stub 是首要嫌疑);Issue175AppendImageTests補一個 tree-backed + 既有圖片的 RED 案例並於 3.6.0 release note 明寫限制(此兩項由 #175 fix round 處理)。Source: surfaced during /idd-verify PsychQuant/macdoc#175 (Step 5b follow-up triage). Verify report: PsychQuant/macdoc#175 (comment)
Refs PsychQuant/macdoc#175