mcpField
O
ooxml-integrity

ooxml-integrity

ローカル
github.com生産性01 日前に更新

ooxml-integrity について

ooxml-integrityは、自動編集後の.docxと.pptxをローカルで検査するツールです。文書変更を確認するチーム向けに、内部参照の検査や原本との比較、プレゼンテーションのテキストあふれの測定を、レンダリングやネットワーク接続なしで行います。

主な機能

  1. 01コメント、脚注、スタイル、関連付け、変更履歴の検査
  2. 02編集後のファイルと原本の比較
  3. 03PowerPointのテキスト収まりとあふれの測定
  4. 04結果が一意な3種類のパッケージ不具合を修復
  5. 05CLI、JSON出力、CI連携

活用シーン

  1. 01自動編集でコメントや変更履歴が失われたか確認
  2. 02編集後の契約書を原本と比較
  3. 03PowerPointスライドのテキストあふれを検出
  4. 04CIでしきい値を超える整合性問題を検出

MCP 対応

MCPサーバーとして分類されていますが、提供されたREADMEはチェッカーとCLIを説明しており、MCPツールやクライアント向け機能には触れていません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"dmitry-kov-ooxml-integrity": {
"command": "uvx",
"args": [
"ooxml-integrity"
]
}
}
}
起動コマンドuvx ooxml-integrity

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiooxml-integrity0.10.0

ツール

2

掲載時のツール一覧 · 3 日前に更新

パラメーター型必須説明
pathstringはいこのマシン上のパス。絶対パス、またはサーバーの作業ディレクトリからの相対パスを指定します。URL は拒否されます。

詳細

ooxml-integrity

CI PyPI Python License: MIT

ooxml-integrity は、自動編集後の .docx ファイルと .pptx ファイルをチェックします。 壊れたコメントアンカー、失われた変更履歴、孤立した脚注、ボックスからはみ出す可能性の高いプレゼンテーションのテキストを検出します。

チェッカーは、ドキュメントパッケージとローカルのフォントファイルを読み取ります。レンダリング、モデルの呼び出し、ネットワークアクセスを行わずにローカルで実行されるため、ドキュメントをお使いのマシン内に保てます。

ブラウザデモはインストール不要で実行できます。ファイルはタブ内にとどまり、Pythonは起動時に一度だけダウンロードされます。デモでは公開済みのリリースを固定しており、リリースごとに更新され、バージョンはフッターに表示されます。実際のブラウザチェックにより、Pagesへのデプロイ前に変更が検証されます。リリースはPyPIで公開され、各リリースのアップグレードノートに変更された検出項目と互換性について記載されています。

pip install ooxml-integrity
ooxml-integrity check edited.docx --against original.docx
edited.docx: 2 error(s), 0 warning(s), 0 info
  [ERROR] CMT005  comment id=1 is orphaned - present in comments.xml but
                  anchored to nothing - the reviewer's note is invisible in Word
  [ERROR] FID001  comment anchors: 2 -> 1 (1 lost)

この例では、編集済みのファイルは警告なしでWordで開き、単語数とページ数も変わりません。レビュー担当者のメモ 「配布前に、この図を元の表と照合してください」 はパッケージ内に残っていますが、アンカーが失われているため、Wordでは図の横に表示されなくなっています。

これが必要な理由

レビュー担当者のコメントと変更履歴がすでに含まれている契約書をエージェントに編集させる、小規模な実験から始めました。2回の実行では、同じ表にある3つの図を更新するタスクを行いました。careful とラベル付けされた実行ではコメントが保持され、別の作成者による編集として記録されました。fast の実行では python-docx が使用され、コメントアンカーが失われました。

fast エージェントcareful エージェント
余白のレビュー担当者コメントなしあり。図にアンカーされています
表の編集追跡されていない(w:ins 0件、w:del 0件)追跡済み(w:ins 9件、w:del 2件)
Wordで開いたときの警告なしなし
単語数118118

原因は段落の置き換えです。python-docx で paragraph.text を設定すると、段落の内容が新しいランに置き換えられます。その結果、そこに保存されていたコメントアンカー、脚注参照、ランの書式、変更履歴マークアップも削除されます。これらが失われても、ファイル自体は通常どおり開けることがあります。

別途、意図的に作成した6種類の欠陥ケースを使ったテストでは、チェッカーは6つすべてを検出しました。そのうち5つは編集済みファイルだけをチェックして検出し、ファイル内部の整合性を保つMarkdownの往復変換で生じた欠陥は、元のファイルと比較する(--against)ことでのみ検出しました。XMLの解析、名前空間とルート要素のチェック、LibreOfficeによるPDF変換の成功では、これらのケースを対照ケースと区別できませんでした。この実験では、完全なXSDバリデーターによる検証や体系的な目視確認は行っていません。実際のエージェントによる8回の実行では、チェッカーによる誤検出はありませんでした。

調査ノートでは、実験、保存された出力、レンダラーの測定値、制約について説明しています。

レビュー履歴のあるドキュメントでのツールとエージェント

8 回の実行だけでは、パターンを示すにとどまりました。 レビュー履歴ベンチマーク では、レビュー履歴が残る 2 つの契約書を対象に、通常の依頼 30 件(語句の置き換え、コメントへの返信、変更履歴を 1 件承認、脚注の修正)を、6 種類のドキュメントツール、2 通りのコードパスでの python-docx、そして隔離されたコンテナ内の 3 つのコーディングエージェントに実行させました。チェッカーを一度もインポートしないオラクルが各出力を元の文書と比較し、損傷の種類ごとに 1 つの出力を Word for Mac で開きました。

  • Claude Code(Opus 5.5)と Codex(gpt-6.1-sol)は、それぞれ 150 回の試行すべてを完了し、維持しました。それぞれ 5 回のキャプチャすべてで、Codex が 1 つ目の契約書のコメントに返信した内容には文書内のアンカーがなく、Word for Mac ではそのような返信は表示されません。 ローカルの Qwen3.8 27B を使った OpenCode は、別のレビュアーの挿入を一度削除したため、そのレビュアーの保留中の文が承認済みテキストとして表示されました。
  • python-docx で Paragraph.text または _Cell.text を割り当てると、28 件中 14 件の出力が損傷しました。docx-cli では 56 件中 38 件が損傷し、箇条書きはリテラルテキスト • に変わり、新しい語句は別のレビュアーによるものとして記録されました。2 つのツールは、依頼されたヘッダーではなく、文書のタイトルを編集しました。
  • 損傷した出力 69 件のうち、凍結版チェッカー(0.4.6)が報告したのは 41 件で、正しい出力 537 件中 145 件にもフラグを付けました。そのほとんどは依頼された変更そのものが原因でした。各タスクで依頼された変更を期待される変更として宣言した 0.4.9 では、65 件を報告し、12 件にフラグを付けました。いずれも、Word で表示されない返信など、ベンチマークの対象範囲外で実際に問題が報告されたものでした。

件数は 2 つの文書での試行回数であり、独立した文書の数ではありません。 エビデンスには、固定されたプロトコル、その改訂内容、およびすべてのキャプチャが記載されています。

他のプロジェクトへの適用

コーパスとベンチマークから得られた知見は、それぞれ単独で再現できる手順を添えて、上流に報告しました。adeu は 2 件、docx-cli は 3 件を修正し、残りは未解決です。

プロジェクト発見事項ステータス
adeuコメント参照の実行時に rStyle="CommentReference" が付与されましたが、そのスタイルは定義されていませんでした3.0.3 で修正済み。このコーパスの参照ドキュメントが上流のフィクスチャとして採用されました
python-docxparagraph.text セッターにより、1.2 のコメント API で作成したコメントアンカーと既存の脚注参照が切り離されます未解決。PR #1605 でコメントアンカーは復元されましたが、2026-11-09 に作成者がマージされないままクローズしました。脚注と変更履歴は対象外でした
python-docxadd_comment() は CommentReference スタイルを参照しますが、定義していません未解決
anthropics/skillsdocx スキルの validate.py は、コメントが comments.xml に存在するものの、どこにもアンカーされていないファイルを通過させます。マーカーからコメントへの対応は確認しますが、逆方向は確認しません未解決。PR #1734 はメンテナーのレビュー待ちです
sontanon/docx-mcpラベル付きペアの提供、および変更履歴を含む入力を拒否する方針についての質問未解決
docx-cli書き込みを行うと、• のような数値文字参照がすべてリテラルテキストになり、Word で箇条書きではなく • と表示されます0.27.0 で修正済み(PR #14)。リリース後の再確認では、S1 の出力にリテラルの箇条書き記号はありません(0.26.0:28 件すべて)
docx-cli別の作成者による未確定の挿入の中で replace --track を実行すると、新しいテキストがその作成者の変更として記録され、入れ子になった削除の隣にある対象を見落とします0.27.0 で修正済み(PR #19、#20)。再確認では、追跡対象の K4 編集が両方とも保持されています
docx-cli入れ子になった削除を含む別の作成者による未確定の挿入の中で、追跡なしの replace を実行すると、誤った範囲が置換されます0.28.0 で修正済み(PR #21)。再確認では、S2 の追跡なし K4 編集が完了し、保持されています(0.27.0:未完了かつ破損)
docxengine新しいコメントによって、w14 を宣言していない comments パートに w14:paraId が書き込まれ、Word が読み取り不能なコンテンツを報告します未解決
docxengine、SecurityRonin/docx-mcp返信にドキュメント内のアンカーがなく、Word に表示されません未解決
Codexコメントへの返信時に、モデルが生成したコードは Word が拒否するコンテンツタイプで commentsExtended を宣言し(PKG010)、返信をどこにもアンカーしません(CMT005)未解決

上流にマージされたフィクスチャの提供:adeu #138 (LibreOffice、Word for Mac、Word for Windows 間のコメント投影)および adeu #140(変更履歴の投影と 承認/却下)。これらの準備により、adeu 独自の整合性テストスイートで Python/TypeScript 間の名前空間シリアライズの不一致が明らかになりました (#139、3.0.4 で修正済み)。 上流での採用状況: adeu #156(2026-09-29 にマージ)以降、adeu のテストスイートでは ooxml-integrity をインストールしています。adeu #161(2026-10-05 にマージ)以降、バージョンは 0.4.8 に固定されています。共有するクロスプラットフォームの各シナリオで編集を適用し、出力に対して check() を実行し、入力と compare() で比較して、エラーレベルの検出事項があれば失敗します。2 つの承認/拒否シナリオでは、要求するリビジョン数の変更を expect() で期待値として宣言します。

2 つの問い

ドキュメントは、すべてのスタイル、脚注、リビジョンが失われても、内部整合性を保っている場合があります。そのため、このチェッカーは 2 種類の検査に対応しています。

内部参照は維持されていますか? 1 つのファイル内でコメント、脚注、スタイル、番号付け、リレーションシップ、変更履歴を確認します。

ooxml-integrity check report.docx

編集によって何が失われましたか? 構造要素の数とテキストをソースと比較します。編集後のファイルに参照の破損がなくても、失われた内容を検出できます。

ooxml-integrity check edited.docx --against original.docx

エージェントにユーザーがアップロードしたドキュメントのように、元のファイルがすでに破損している可能性がある場合は、--introduced(0.10.0)を追加すると、編集によって生じた問題のみを対象に失敗します。元のファイルにもすでにある検出事項は、抑制されたものとして一覧表示されます。失われた内容は常に対象になります。同じ検出事項とみなされる条件。

終了コードは、--fail-on(デフォルトは error)以上の検出事項がない場合は 0、該当する検出事項がある場合は 1、使用方法に誤りがある場合は 2 です。機械可読な出力には --json を、実行を失敗させる検出事項のみを表示するには --quiet を使用します。

3 つの修復。それ以上はありません

ほとんどの検出事項は、ファイルから修復できません。失われたコメント、スタイル、変更履歴を戻すには、元の内容を推測する必要があるためです。fix が行うのは、結果が一意に決まる 3 つの修復だけです。また、書き込む前にコピーを再確認します。

ooxml-integrity fix edited.docx -o repaired.docx
  • anchor-replies(CMT005):親コメントにアンカーがある返信には、Word がスレッドを書き込む順序で、親コメントの範囲が設定されます。Word for Mac では、修復後にのみ返信がスレッド内に表示されます。
  • renumber-revisions(REV001):重複するリビジョン ID のうち、最初のもの以降には、それぞれ新しい ID が割り当てられます。
  • content-type(PKG010):関連パーツの [Content_Types].xml 内の Override に、そのリレーションシップの種類で必要なコンテンツタイプが設定されます。Word for Mac は、fix がこの方法で修復した Codex の出力 5 件すべてを拒否しました。また、そのうち 1 件から fix が書き込んだコピーを開いたところ、返信がスレッド内に表示されました。

それ以外の検出事項はすべて、修復されなかった理由とともに一覧表示されます。入力は変更されません。コピーでは、修復されたバイトのみが異なり、それ以外の ZIP メンバーはすべて保存された状態のままコピーされます。終了コード 0 は検証済みのコピーが書き込まれたこと、1 は修復対象がないこと、2 は使用方法に誤りがあるか、パッケージの fix が書き換えを行わないこと、3 は再確認に失敗したことを示します。修復する内容、拒否する内容、保証する内容。

デッキ:テキストはボックスに収まっていますか?

ooxml-integrity check deck.pptx
deck.pptx: 6 error(s), 4 warning(s), 1 info
  [ERROR] PPT001  text needs 144pt in a 40pt box - 104pt too tall (260% over), 3 line(s)
            -> slide1/OVER_huge_type_tiny_box
  [ERROR] PPT003  word wrap is off and the longest line is 304pt in a 182pt box
                  - 122pt runs outside the shape
            -> slide2/OVER_nowrap_single_line
  [WARN ] PPT004  shape extends 142pt past the right edge - content will be cut off
            -> slide3/OFFCANVAS_right
  [WARN ] PPT006  overlaps 'OVERLAP_upper_right' over 23% of the smaller shape
            -> slide3/OVERLAP_lower_left

テキストを収めるには、有効なフォントとサイズが必要です。これらは、ラン、段落、リストスタイル、レイアウトやマスタープレースホルダー、プレゼンテーションの既定値、テーマを通じて継承される場合があります。チェッカーはこれらの値を解決し、fontTools を使ってフォントの hmtx/cmap テーブルから幅を読み取ります。関連する python-pptx の議論 では、テキストを収める際にテキストの測定が必要なことが説明されています。

PowerPoint for Mac と参照用デッキのチェックを行ったところ、確認可能な21個のシェイプすべてで、予測された判定と行数が一致しました。他のレンダラーでは、幅の上限に近いシェイプの判定が異なりました。チェッカーは、予測される縦方向のオーバーフローが最大5%の場合は PPT002 borderline、フォントが見つからない場合は PPT007 を報告します。検証記録 には、この比較の方法と限界が記載されています。

0.4.0 以降のチェックでは、長い基本ラテン文字列、TTC/OTC フォントのメンバー、プレゼンテーションのスライド順、各スライドマスターのラテン文字テーマフォントも対象になりました。専用の4つのデッキには、PowerPoint のスライドに関する記録済みの観察結果がさらに29件追加されています。 長いトークン、 フォントコレクション、 スライド順 およびテーマ に関するメモには、ケースと残された制限が記載されています。

CI で

- uses: Dmitry-Kov/[email protected]
  with:
    files: "out/**/*.docx"
    against: templates/master.docx   # optional, enables the fidelity check
    fail-on: error

生成スクリプトの実行後、エージェントによる編集後、またはテンプレートのマージ後に、ソースファイルと編集済みファイルを比較できる状態のままチェックを実行してください。

このアクションはジョブページに概要を書き込み、JSON および SARIF レポートを生成できます。SARIF の検出結果は、プルリクエストにコードスキャンの注釈として表示できます。設定ガイド では、重大度の上書き、必須の reason を指定するパス単位の無視設定、すでに検出結果があるリポジトリ用の件数ベースのベースラインについて説明しています。

エージェントから

claude mcp add ooxml-integrity -- ooxml-integrity mcp

エージェントは、編集したばかりのドキュメントを、ファイルを返す前に同じチェックにかけることができます。ooxml-integrity mcp は、2つのツール check と compare を備えたローカル MCP サーバーです。標準入力と標準出力を介して通信し、ソケットは開きません。呼び出しは check --json --coverage のレポートと、1行の判定を返します。MCP ガイドには、Claude Code、Codex、OpenCode 向けの設定が記載されています。

Python から

from ooxml_integrity import check, compare

for f in check("edited.docx"):
    print(f.code, f.severity.value, f.message, f.where)

for f in compare("original.docx", "edited.docx"):
    print(f.code, f.message)

Python 3.9 以降が必要です。依存関係は2つあります:lxml、fonttools(さらに3.10以前では、設定ファイルの読み込みにのみ tomli が必要です)。コンソールスクリプトが PATH にない場合は、python -m ooxml_integrity check report.docx をどこからでも実行できます。

報告内容とカバー範囲

各検出結果には、安定したコードと重大度に加えて、特定可能な場合はパーツ、シェイプ、または XPath が含まれます。コンテンツや監査証跡を隠す損失はエラーです。外観にのみ影響する損失は警告です。 段落スタイルと表スタイルの未定義は、番号付けや構造に影響する可能性があるため、引き続きエラーとして扱われます。文字スタイルの未定義は警告です。 これらの表は0.10.0 の内容を説明しています。バージョン 0.4.0 では、未定義の文字スタイルもエラーとして扱われていました。アップグレード後もエラーとして扱うには、--fail-on warn を使用してください。

.docx:

codeチェック
PKG001-008OPC パッケージの整合性、コンテンツタイプ、アーカイブの予算、安全でないパーツ名
PKG0090.4.4:Strict Open XML はサポートされていないため、Word のチェックは実行されず、エラーとして報告されます
PKG0100.7.0、ERROR:メイン文書が関連付けているパーツが、そのリレーションシップタイプで必要とされるものとは異なるコンテンツタイプで宣言されています。たとえば、Word for Mac が拒否する Codex の commentsExtended パーツが該当します。対象範囲とコーパスでの実行結果
PKG0110.8.3、ERROR:[Content_Types].xml 内に、拡張子に対する 2 つ目の Default、またはパーツ名に対する 2 つ目の Override があります。OPC の比較方法に従って比較します。2 つ目が 1 つ目と同じ内容でも、Word for Mac はパッケージを拒否します。Word のチェック
PKG0120.8.4、ERROR:予約されていない文字、スラッシュ、バックスラッシュ、または非 ASCII 文字をエスケープしたパーツ名を持つ Override、あるいはエスケープを開始しない % を含む Override があり、Word for Mac はこれを拒否します。Word のチェック
XML001すべての XML パーツの整形式性
REL001-003r:id/r:embed/r:link の参照先が解決されること、ターゲットが存在すること、参照されていないリレーションシップ
REL0040.8.3、ERROR:同じリレーションシップパーツ内の 2 つのリレーションシップに同一の Id があり、Word for Mac はこれを拒否します。Word のチェック
STY001未定義の段落/表スタイル:エラー。未定義の文字スタイル:警告
STY002未定義の basedOn/next/link スタイル参照:警告。0.4.5:next/link は情報
NUM001-004numId → w:num → abstractNumId → w:abstractNum。ilvl が定義されていること
FTN001-002脚注参照が解決されること、孤立した脚注
CMT001-006コメント範囲/参照 ↔ 関連するコメントパーツ。未解決または読み取れないコメントパーツ
CMT0070.10.0、ERROR:コメントの 1 つの ID に対して、ストーリー内に commentRangeStart、commentRangeEnd、または commentReference が 2 つ目に存在します。これは、コメントの最初の段落のテキストを 2 回に分けて設定した際、クローズ済みの python-docx PR #1605 が書き込んだものです。テキストボックス内の mc:Fallback にある複製は該当しません
REV001-003検証済みの段落記号/コンテンツのペア以外でのリビジョン ID の衝突。w:del が w:delText を持つこと。許可されている w:ins > w:del の入れ子を考慮します
TBL001-002tblGrid が存在すること。gridSpan を考慮した、行ごとのセル数とグリッド列数の比較
SDT001-002コンテンツコントロールの整合性
TXT001有効な xml:space="preserve" がないラン内の XML 端の空白
TXT002WARN:XML デコード後に、数値の句読点/記号がリテラル表記で残っています。二重エスケープの可能性を示します。対象範囲と意図の曖昧さ
FID000要求されたソース比較を実行できませんでした
FID001-003構成要素の数による、ソースに対する消失と追加(0.10.0:文末脚注参照とセクション区切りも対象)。テキスト量の減少
FID004-006ID の変更を考慮したうえで、編集後のファイルからコメント、脚注、または文末脚注のテキストが欠落しています。0.4.6:追跡された編集は消失として扱われません
FID007-008ヘッダー/フッターのストーリーが欠落している、または追跡されずに変更されています(0.4.6)。ヘッダー/フッターから追跡対象の構成要素が失われています
FID0090.4.2:サポート対象のメイン文書プロファイルで、ラッパーの数が同じなのにリテラルの挿入/削除テキストが欠落しています。制限事項
FID0100.4.2:同じ要素数の脚注/文末脚注テキストグループ間で、挿入/削除のマークアップを保持する注が減っています。制限事項
FID011WARN:ソースの挿入テキストが保持されている一方、別個の新しい挿入コンテキストがないまま、元の作成者/日付コンテキストの下に文字が追加されています。対象範囲と意図の曖昧さ
FID0120.4.9、INFO:編集によって追加された変更履歴を、ストーリー(本文、ヘッダー/フッターのスロット、注)、種類、作成者ごとに示します。これにより、期待値で、適切な場所に追跡対象の編集を必須にできます
FID0130.5.1、WARN:編集によって追加された追跡対象の置換で、変更した単語よりも多くの未変更の単語(4 語以上)が削除され、再挿入されています。そのため、レビュー担当者には未変更のテキストが取り消し線付きで表示され、再度追加されます。対象範囲
FID0140.8.0、INFO:編集によってテキストが変更された段落と、その変更前後のテキストを、変更履歴の承認後と却下後の両方で示します。これにより、期待値で、編集に求められたテキストが生成されたことを必須にできます
FID0150.10.0:ソースのブックマークが失われています。編集後のファイルの REF、PAGEREF、または NOTEREF フィールドが引き続きそのブックマークを参照している場合は ERROR となり、フィールドの更新時に Word は「Error! Reference source not found.」または「Error! Bookmark not defined.」と表示します。内部リンクのみが参照している場合、または参照がない場合は WARN となります。何も参照していない非表示のブックマーク(_GoBack、_Hlk…)は報告されません。対象範囲とコーパスでの実行結果
FID0160.10.0:ソースのフィールドがストーリーと種類(REF、TOC、PAGE、…)ごとに失われています。REF、PAGEREF、または NOTEREF が失われた場合、およびある種類のフィールドが 1 つも残っていない場合は ERROR、それ以外は WARN です。フィールドはその種類と参照先のブックマークで定義されます。スイッチ、単純形式と複合形式、別のフィールドの結果内にあるフィールド(目次の項目)は比較されません。対象範囲とコーパスでの実行結果
INT001チェックで例外が発生し、完了しませんでした:エラー。他のチェックは引き続き実行され、カバレッジではそのチェックの範囲が skipped と報告されます
EXP0010.4.8:宣言された期待値(--expect または [[expect]])に一致する検出結果がありませんでした。要求された変更は実行されていません。期待される変更
.pptx:
codecheck
PPT000テキストの測定ができませんでした。エラーとして報告されます
PKG0090.4.4:Strict Open XML はサポートされていないため、レイアウトチェックは実行されませんでした。エラーとして報告されます
XML001, PKG003-005, PKG011, PKG012, REL001, REL002, REL0040.9.0:PowerPoint for Mac の動作を示す .docx のパッケージルールです。サムネイルまたは SmartArt 描画がない場合は REL002 WARN となります。PowerPoint のチェック
PPT001テキストの高さが、測定許容誤差を超えてボックスより大きい
PPT002予測されるテキストの高さがボックスを最大 5% 超過しています。境界的なはみ出しです
PPT003行が使用可能な幅からはみ出しています。折り返しが無効か、単一の字形が幅を超えています
PPT004図形がスライドの端を越えているか、完全にスライドの外側にあります
PPT005縮小して枠内に収める設定が要求されていますが、fontScale が保存されていないため、結果はレンダラーによって異なります
PPT006テキストを含む 2 つの図形が重なっています
PPT007宣言されたフォントを利用できません。該当する図形の測定値は推定値です
INT001チェックで例外が発生し、完了しませんでした。エラーです。他のチェックは引き続き実行され、カバレッジではこのチェックの対象範囲が skipped と報告されます

--coverage を使用すると、結果の対象範囲を確認できます。ファイルごとの対象範囲を checked、not-present、estimated、skipped、unsupported に分類します。また、 対象範囲に欠落がある場合、結果は clean ではなく no findings in checked surfaces と表示されます。ooxml-integrity doctor は、現在のマシンで利用できる測定項目を報告します。 サポートマトリックスと カバレッジと doctorを参照してください。

制限事項

  • DOCX のエビデンスコーパスは、5 種類の作成ツール(Word for Windows、Word for Mac、Word Online、LibreOffice、 python-docx)で作成した 50 個の合成ソースと、220 組のラベル付きペアで構成されています。 内訳は、問題のない対照ペアが 120 組、欠陥を意図的に埋め込んだペアが 100 組です。 記録された結果では、エラーレベルの真陽性が 111 件、 偽陽性が 0 件、偽陰性が 0 件でした。適合率と再現率が 100% という結果は、 このコーパスとラベル付けされた 14 のルールに適用されます。それ以外のルールは ここでは測定されていません。顧客の文書に対する精度は測定されていません。
  • 別途用意された既存の変更履歴の一群 は 30 組で構成されています。内訳は、adeu、Word Online、 Word for Windows でレビュー内容を保持する対照ペアが 15 組、欠陥を意図的に埋め込んだペアが 9 組 (過去のチェッカーのリビジョンでは 7 件を検出し、2 件を見逃しました。0.4.2 の FID009/FID010 の追跡調査では 9 件を検出)、 保持に関する指標の対象外とした承認/却下の特性評価が 6 組です。作成ツールのグループは 個別に報告されています。Windows で保存した 3 件は変更履歴を保持しますが、表の幅は変わります。 レイアウトが変わらないこと、および Office のレビュー操作全般については測定されていません。
  • レビュー履歴のベンチマークでは、このベンチマーク用に作成した 2 件の契約書、各ツールと エージェントの 1 つのバージョン、および各種の損傷を確認するための Word for Mac の 1 つのビルドを 使用しました。比較対象はレビュー内容であり、書式やレイアウトではありません。
  • PPTX のエビデンスは、PowerPoint for Mac の編集ビューでのチェックと、 後続の回帰テスト用デッキをネイティブ形式でエクスポートした結果に基づいています。 Windows とスライドショーモードではテストしていません。GPOS のカーニングとシェーピングは 適用されないため、複雑な文字体系や合字の多い書体は推定値となります。
  • デッキ内のグループ化された図形、表、SmartArt、グラフはモデル化されていません。 回転した図形のジオメトリは部分的にしかチェックされません。
  • 測定済みなのは、メトリクス互換の組み合わせである Carlito/Calibri のみです。

各項目の詳細と、それぞれの根拠となる数値を含む全一覧は docs/research.mdにあります。

今後の展望

ベンチマークでは、同じリクエストを受けたツールやエージェントが、同じ文書のレビュー情報を保持する場合と失う場合があり、どの変更が求められたかを知らされたチェッカーは両者を見分けられることが示されました。ベンチマーク用の文書は、その目的に合わせて作成されたものです。次に問われるのは、実際にレビューされた文書や、実際のパイプラインが文書に加える編集に対して、チェッカーがどのように機能するかです。

ワークフローに、自動化された DOCX の編集とそれに続く人間によるレビューが含まれる場合は、ローカルの編集前後のペアを 1 組使って30 分間のパイロットをお試しください。有用な検出、誤検知、見逃した欠陥、セットアップ上の問題について、フィードバックを共有してください。ジェネレーターとチェッカーのバージョン、検出コード、期待される動作と実際の動作を記載してください。GitHub への報告は公開されますが、文書の添付は任意です。

機密情報を含むペアを添付する場合は、まず匿名化してください。コピーでは構造を保ちながら、テキスト、作成者、日付、プロパティ、画像が取り除かれます。また、このコマンドはすべての検出結果が残っていることを確認します。

ooxml-integrity anonymize original.docx edited.docx -o share/

置き換えられる内容、読者が引き続き把握できる情報、測定方法。

コントリビューションと互換性

再現可能な報告、開発環境のセットアップ、エビデンスの要件、PR に関連するチェックについては、CONTRIBUTING.mdを参照してください。互換性とアップグレードでは、ルールコード、重大度、JSON/カバレッジのバージョン、ベースラインの移行、パッチリリースであっても CI ゲートに影響する可能性のある変更について説明しています。機密性の高い脆弱性の報告には、SECURITY.mdに記載された非公開の連絡手段を使用してください。

リポジトリ構成

src/ooxml_integrity/   inspector, fidelity, fonts, pptx layout and checks,
                       coverage, doctor, policy, sarif, cli, MCP server
tests/                 labelled-corpus, story-fidelity and false-positive regressions
research/              corpus builders, mutators, calibration, renderer comparison
docs/                  research notes, configuration, support matrix, validation records
demo/                  browser checker, landing page, bundled fonts and examples
corpus/                reference .docx and .pptx, byte-reproducible
evidence/docx-beta/    50 producer sources and 220 labelled DOCX pairs
evidence/docx-revisions/  30 pairs with existing revisions and explicit known misses
evidence/review-history-benchmark/  frozen protocol, tool and agent captures, evaluation
runs/                  the first eight agent outputs, used as fixtures
action.yml             the GitHub Action

ライセンス

MIT。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。