Files
docview/docs/VALIDATION.md
T
2026-09-21 13:41:40 +09:00

56 KiB
Raw Blame History

実装・検証記録

2026-09-20追加:PDFium第2候補の統合検証。ICC変換指定・パターン状態継承・タイル線色を修正し、Arch・Ubuntu各972描画点、新ビルド各24試験群、上流1,979試験が成功した。旧パターン期待値の誤りと比較先の差は別に記録する。

対象日: 2026-09-20。対象はこのリポジトリーのLinux開発版であり、設計書一式の完成版受入は未完了である。Windows向けワーカー保護・通信・資源アクセス・フォント供給・renderer監視・配布コードはソース上で統合したが、Windows版は未ビルド・未実行。Windows 11での実行、製品としての配布、基準機の性能判定が残っている。外部の追加試験環境は提供されていないため、このPC内にUbuntu 24.04の専用KVM環境を作成し、X11・Waylandで追加検証した。

現在の修正版と検証範囲

起動先は build-context/docview。専用prefix .deps/pdfium-context を明示的に選択し、元の依存版・旧ビルド・旧パッケージは保持した。候補の由来、ライブラリ、ヘッダー、告知の固定値をCMake・配置・deb検証で照合する。配置の再検査は実行物のコピー前に行い、不正入力で既存配置が変わらない回帰を含む。ビルド手順

Ubuntu validation4は全24群と配布境界13試験が成功し、2回生成した123,417,928バイトのdebが完全一致した。ビルド環境のSDK等を隠した試験と、SDKのない既存VMで、それぞれX11・Wayland各6条件の起動、install/remove/purge、利用者データ保持が成功した。後者は過去の試験ツールが残る再利用環境である。参考色の計算用CMMは配布物に追加していない。

PDF性能4条件は、新規プロセス120回・同一プロセス内120回・750操作・960スクロール入力が成功した。約1GB・5,000ページPDFの3回open・100操作・末尾確認も成功した。測定した暫定予算の超過は0。Xvfb・software描画の参考値で、物理表示や基準機の受入ではない。今回の変更はPDFiumと配布対応であり、HTML・EPUBの性能を今回再測定したとはしない。

21組の比較画面を新ワーカーで再生成した。83枚の復号RGBAは前回と完全一致し、既知の比較差を保持している。人によるG-RENDER承認は未実施。現在の統合JSONは固定ビルドアンカーと最終成果物・結果を結び付け、以下の旧結果を履歴として参照する。

残る最終受入はWindows 11でのビルド・実行・配布、対象OSの物理GPU・表示・入力と基準機・長時間負荷、人による描画承認、公開配布に必要な対応ソース・告知・ライセンスの最終確認である。

第1候補の履歴:2026-09-20のPDFium色変換修正

固定ソースへの修正候補を隔離先でビルドし、元のCMYK試験48点と4種類のintent・継承・画像キャッシュ・Type3等の600点が一致した。許容差4を維持し、最大差はそれぞれ0と2。上流の単体1,104件・結合872件、既存DocViewの全22試験群も候補を使って成功した。パッチを元ソースへfuzzなしで再適用し、変更後の全51ファイルが一致することを確認した。

比較先Popplerにはshading patternのRI指定で18点の不一致が残るため、比較全体の受入は未合格のまま保存した。候補は既存依存ライブラリ・Ubuntu validation3パッケージへ未導入で、以下の製品の失敗記録を上書きしない。Ubuntuでの候補試験・梱包、SoftMask/tiling専用の画素試験、Windows、人による描画受入は残る。統合JSONは製品と候補の識別・結果を分けて保持する。

元の依存版の履歴:2026-09-20のICC CMYK追加比較

4次元ICC CLUTの比較で、文書の相対的測色指定に対してPDFiumが知覚的変換を使う差を確認した。Arch・Ubuntu各48測定点のうち30点が許容差を超え、最大channel差は74。独立Popplerは全点が数式の期待値に一致し、PDFiumの画素は固定ソースの知覚的変換と照合できた。原因が分かったことを描画受入の合格とはしない。

資料の構造・プロファイル16頂点・埋込バイト列・原本不変・3倍率の寸法を検証し、追加比較画面を用意した。製品ソースとバイナリーは不変で、全22群や配布試験の以前の結果と、今回の色一致の失敗は別の範囲である。ICCの変換指定への対応または明示的な互換性判断と、検出可能な制約の通知は未完了。現在の統合JSONにも失敗を記録した。

2026-09-20のQt告知補足

Ubuntu validation3に、SDKのSBOM生成器が省いたWebM/WebPのPatentファイル2件(同一本文)と元メタデータを追加した。Arch/Ubuntu各8件の梱包試験、2回のdeb生成一致、全2,016ファイルのarchive検証、SDKのない既存VMでのinstall・起動12条件・remove/purgeとデータ保持が成功した。元SBOMの不整合・全告知と対応ソースの未確定範囲は残る。

本体・ワーカー・同梱ランタイムと全コンパイル対象ソースはvalidation2から不変である。以下の全22群・性能・実portalは元の実行結果を保持し、今回の再実行とは数えない。告知補足時点の統合JSONとその直前のJSONも変更せず保存する。

2026-09-20のURL比較修正

実OSファイル選択の追加試験から、日本語・空白・予約文字を含むHTMLの読込みが停止する不具合を発見し、URLの表現をそろえて比較するよう修正した。追加記録に再現・変更・新しいビルドとの対応を保存する。修正後の全22試験群はArchで171.56秒、Ubuntuで184.71秒、いずれも失敗0だった。

この変更で本体バイナリーは変わった。以下のui-final等による性能・GPU・IME・重負荷・旧パッケージの記録は、各記録で固定した修正前の版の履歴である。「現行」と記した従来節の語も当時の版を指す。新しい本体へ実行結果を読み替えない。旧統合JSONも履歴として保存した。

新しい本体の性能10条件を再測定し、新規プロセス300回・同一プロセス内300回・移動2,500操作、操作負荷と約1GB/5,000ページPDFが成功した。open p95は条件間最大266.85ms、応答p95は最大23.74ms、群RSS最大830.83MiBで、測定した暫定予算の超過は0。開発機の仮想表示・software描画の値である。Ubuntu修正版debは、実portal選択10ケース、通常起動12条件、旧版からの更新・remove/purgeも成功した。現在の統合JSONと履歴・制約を併記する。

URL比較修正前のUI実装と検証

焦点復帰、Web倍率の表示・保存、開く操作の失敗対象と対処案内を修正した。詳細は最新の統合記録と変更前後の回帰へ保存する。ArchのX11全22試験群が166.00秒で成功し、WaylandではApp110・Web36と6条件起動が成功した。同行した旧Canvas21件は内部でoffscreenを強制していたため、Wayland描画の証拠から除外する。初回の見開き2件の失敗は、非同期resizeの確定前に次の要求を送った試験側の問題と診断し、サーバーとQt双方の確定寸法を待つ手順へ修正した。製品の描画処理は同一である。

AMD GPUのOpenGL経路でもApp110・Web36・Canvas22と本体6条件起動が成功した。Canvasは実platformの検査とQQuickWindowの取得画素によるページ表示・切替・画像消去の試験を追加し、Wayland/softwareとoffscreen/200%でも成功した。追加試験後も製品バイナリーは同一で、既存の全22群と後続の限定試験を別記録にしている。実モニターのscanout・物理入力・基準機の性能受入は未実施である。実IMEの追加範囲は以下に分けて記録する。

以下のcompletion-finalの20試験群・性能10条件・大容量PDFは、今回のUI修正前に固定した前回の結果である。PDF/Archive worker、core試験、実時間watchdogとcommon libraryの5バイナリーは今回も同一であり、変更されていない部品の対応記録に既存比較との一致を残した。全アプリ測定を新本体へ読み替えない。新しい561ファイルの開発パッケージは2回生成一致・6条件起動、部分告知台帳は2回一致を確認した。

URL比較修正前の性能10条件は、新規プロセス300回・同一プロセス300回、対応する移動系列の計2500操作を完了した。Xvfb 1100×760・100%・software描画で、起動p95は最大271.03ms、初期応答p95は最大23.82ms、群RSS最大831.23MiBとなり、測定した暫定予算の超過はなかった。別の操作負荷と約1GB・5,000ページの追加負荷も同じ修正前の本体で成功した。後者の3回open p95は92.31ms、独立標本の群RSS最大は721.07MiBだった。実GPU・基準機の判定ではない。初回にホストの画面設定を引き継いだ条件不一致の失敗は別保存し、採用していない。

600dpi相当画像と60,000個の半透明ベクターもArchとUbuntuで表示でき、実open処理中のEsc取消と実render処理中の文書切替が成功した。画像の独立復号hashと取得画素を検査し、原本不変、旧session回収、メモリ圧迫なしを確認した。既存の本番GUI部品・ライブラリ・ワーカーを使う独立試験で、通常の22群や本体の性能10条件とは別に記録する。単一試験のheartbeat最大間隔31/38msは視覚応答p95の代用ではない。

実IBus/MozcとUS pc105・JP jp106配列の追加試験もUbuntuのX11で成功した。検索・コマンド欄の日本語変換、Enter/Escの保護、物理キー番号からの記号操作、入力後のj/k復帰を確認し、原本と本体は不変だった。2ケース・setup/cleanupを含む4件が12.329秒で成功。合成IMEイベントの既存試験とは別であり、後続のWayland試験でもQt Wayland+IBusのD-Bus経路が1ケース・setup/cleanup込み3件、7.474秒で成功した。同一補助バイナリーのX11 US/JP回帰は4件・12.438秒で成功。物理入力・Windowsは未検証で、Waylandのkeysym入力を日英物理配列の証拠へ読み替えない。

Ubuntu 24.04の追加検証

専用KVM環境の記録で、X11全22試験群が177.63秒で成功した。WaylandでもApp110・Web36、6条件の本体起動が成功し、配置済み本体は別install prefixからX11の6条件でReadyとなった。Landlock ABI 4、seccomp、Chromium sandboxとUbuntuのuserns制限を維持した。公式Qt SDK 6.11.2とGCC 13.3.0によるUbuntu用ビルドであり、Archの実行ファイルを流用していない。

Canvas試験のplatform強制を除いた後、通常/200%の2群と実Waylandの22件も成功した。追加の実ウィンドウ画素検査を含み、本体・ワーカーのhashは全22群の実行時から同一である。

CMake 3.28の配置一時名の残留とPython 3.12のzstd非対応に対応した。provenanceの5件はUbuntuだけ明示skipし、30件が成功している。非埋込日本語PDFの試験は、RPCを待つ実イベントループへ変更した後、単独3回と全体実行で成功した。製品コードと15秒の期限は同じである。Archでも修正後の全22群が成功した。

配置の依存検査は1,740ファイル・85システムpackageで解決し、追加したSDK metadata上限の20試験も成功した。告知104件とmetadata44件は部分収集であり、Qt/Chromiumの告知と対応source全体は未完了。公式SDKを別配置した専用環境での検査であり、自己完結したUbuntu配布物や実GPU/IMEの受入を意味しない。

Ubuntuパッケージの追加検証

Ubuntu 24.04用debを約123 MBで作成し、2回生成のbyte一致、全2,009ファイルのarchive検証、配置後2,004ファイルと131 ELFの依存を確認した。元のSDK・依存・build/install先を私有マウント名前空間で隠し、呼出側のQt/LD環境変数なしでX11/Wayland各6条件がReadyとなった。install/reinstall/remove/purge、AppArmorの登録・解除、ユーザーデータ保持probeも成功した。本体・workerは既存のUbuntu配置済みバイナリーと一致し、全22群を今回再実行したものではない。さらに新しいUbuntu OSでも、SDKなしで宣言依存を導入し、131 ELF解決・12条件起動・remove/purgeが成功した。実GPU・native portalと公開配布条件は別の受入とする。使用手順

対応ソース収集の追加

Qt 6.11.2一式とtoml++ 3.4.0を固定した公開hashと照合して取得した。Qtの390,976通常ファイル・約4.74GBを検査し、告知等3,309件の所在を記録。固定WebEngine source 8件、現在のtoml++ヘッダー51件、Arch差分4件の適用とmkspec 2件の一致を確認した。本体・ワーカーは変更していない。実GN構成に対する全Chromium告知、独立PDFium等を含む全対応ソース、実配布条件の最終確認は残る。

独立PDFiumの固定Gitソースでは、本体と27依存、追加gitlink 1件を保管し、通常46,430ファイル・リンク4件を検査した。先行Gitiles原文31件、パッチ後の公開ヘッダー24件、同梱告知15件が一致し、Linux3件/Windows4件のパッチ適用を確認した。検査の再実行結果もbyte一致した。Windowsのコンパイル・実行、compiler/sysroot等の全入力、再現ビルドはこの結果に含まない。

Ubuntu用Qt SDKのChromium告知は、実ビルドのSBOMから129entry・105本文を取り出し、Qt sourceの原文と全件一致した。SBOM記載67ファイルとUbuntu実行時83ファイルが元SDK archiveと一致。外部package参照IDの不整合1件、本文を持たない2部品と生成器の除外処理を記録し、全告知の網羅性とは区別する。

環境と資料

Arch Linux x64、Linux 7.2.2-zen1-1-zen、AMD Ryzen 9 9955HX(16コア/32スレッド)、約62 GiB RAM。Qt 6.11.2、GCC 16.2.1、Fontconfig 2.18.3、固定PDFium 155.0.8057.0をReleaseビルドした。全体CTestと性能測定はXvfb上のX11、Qt Quick software backend、WebEngine GPU無効で実行し、Chromium・Linuxワーカーの隔離は有効のままとした。Waylandは専用Sway headless/pixmanとAMD OpenGLの2経路を別々に記録する。実ディスプレイの60 Hzと実IMEの試験は含めない。

文書は生成した。PDFの本文、MCID、注釈、リンク、回転、切り抜き座標を生成元で指定し、追加日本語PDFはOFLフォントをsubset埋込した。さらにフォント非埋込のUniJIS-UCS2-H/V資料と、変換Form・回転・跨ページ構造を持つtagged PDF資料を生成した。HTML/ZIP/EPUBはローカルCSS・SVG・見出し・spineを持つ資料、破損資料、隔離攻撃用資料を生成した。

前回ビルドの6系列の比較はすべて完了し、原本とバイナリーは前後で不変だった。TTCの初回は選択したPythonにfontToolsがなく失敗し、失敗ログを残してsystem Pythonで再実行した。旧比較の対応83画像とはRGBA画素が一致した。これは人による正解画像の承認ではない。

追加PDFは5文書・9ページ。独立したsystem Poppler 26.08.0とproduction PDFiumを144 DPIで比較し、全9ページの寸法、CropBox/Rotateの16色位置、透明合成3点を確認した。日本語の抽出・検索も成功し、全ページの比較画像を確認した。RGB平均絶対差は0.5207〜2.5135/255だが、校正済みの互換性合格閾値には使わない。基本PDFの保存外観のない標準リンク枠は補完し、比較領域8,448画素がPopplerと一致した。コメントアイコンと文字のアンチエイリアスには比較器間の差が残る。

フォント選択はMainの専用処理で行い、選択済みバイト列だけを既存IPCでPDFWorkerへ渡す。SFNT/TTC解析はWorker内に残し、Linuxのfontディレクトリー許可を撤去した。非埋込日本語資料ではIPAexMincho/BIZ UDPGothicを選択し、横/縦2ページと検索を確認した。Popplerとは代替書体が異なり、その差を記録した。任意フォント名・範囲・応答・時間・キャッシュ上限も試験した。実際の2書体TTCでも通常/太字のface 0/1を選択し、個別TTF条件と2資料・892,800画素が一致した。試験用フォントは保存・配布せず回収した。

自動試験の範囲

今回の追加修正より前の統合結果は 19試験群すべて成功(失敗0、未実行0)、所要162.00秒。記録は旧CTest JUnit、旧CTestログ、旧集計とバイナリーハッシュへ保存した。通常CTestのapp群で計測専用slotを1件意図的にskipし、別runnerで実行する運用は継続する。Windows固有試験はLinuxの成功件数に含めない。

その後、原本の同一性・目次待機・PDF見出し候補・Web操作取消・PDF情報省略通知・翻訳資源を修正した。独立したbuild-workerでは追加回帰と全GUIを実行し、core 111成功、GUI 96成功・0失敗・計測専用1skipを確認した。Web全36ケースも成功した。これらは最終の統合実行とは区別する。

前回ソースの統合実行は、translationsを加えた 20試験群すべて成功(失敗0、未実行0)、165.61秒。前回CTest JUnit、前回CTestログ、対象ビルドのhashを保存した。内訳はcore 111、PDF 75、Web 36、translations 4、app 96成功・計測専用1skipを含む。後から追加したpackaging境界2件は限定14件の再実行で成功し、全体CTest内の12件とは区別する。試験中も本番と同じLandlock・seccompの保護を使用した。

PDFiumのlibc++/libc++abi告知を追加した時点のpackaging 12件・provenance 23件と、553ファイルの整合・生成一致・6条件起動は修正前バイナリーの配布履歴である。告知追加時には主3実行ファイルのhashが不変だったが、今回の製品変更後まで同一と主張しない。前回版は553ファイルのアーカイブを独立に2回生成し、hash一致と別展開先6条件のReadyを確認した。配布物・6系列の描画比較・実時間watchdogは前回記録へ保存済みで、同じビルドの性能再測定も完了した。

試験群 主な確認
core 開いた原本identityと保存時の再照合、変更と履歴なしの区別、能力スキーマ、TOMLの一括適用、型・未知キー・衝突、論理キー正規化、数値G、期限・長押し・入力状態、XDG、位置・privacy・ロック・バックアップ
archive ZIP名・型・重複・展開上限・CRC、source実read量による膨張率制限、5codecのpadding攻撃と正規6方式、XML制限、入口選択、EPUB 2/3・NCX/nav/spine・nonlinear・固定レイアウト・RTL・難読化フォント
pdf コメント本文・ページ内件数・CBOR応答予算の省略通知とprefix保持、PDFium metadata・ラベル・タグ/RoleMap/MCID・リンク・注釈・フォーム外観・パスワード・検索・座標・タイル一致・破損・目次/ページ分割
security 資源の不在・安全拒否・権限・サイズ・読取/保存I/Oの分類、パス・シンボリックリンク・IPCフレーム・索引総量、展開途中の非公開、原本保護、一時領域回収、OSの読取/書込/通信/子プロセス/シグナル拒否、font grantなしで実fontファイル読取拒否
instance 同一ユーザーの二重起動、ロック、引渡し、ACK、異常要求、ソケット所有・リンク、読み取り専用時の回復
memory_pressure OSサンプルの有限解析、段階順序、閾値境界、回復ヒステリシス、無効値保持、1秒timerと注入
renderer_watchdog Chromium rendererの識別、親子関係とPID再利用防止、RSS上限、30秒の応答期限、保持pidfd/handleによる対象終了、取消・旧probe失効
worker_process 実IPCで成功・エラー、要求ID/世代/操作不一致、過大応答、異常終了、一度だけの失敗通知、キュー取消、展開ストリームの順序、font逆RPCの親・副ID・範囲・遅い応答・取消
benchmark_runner 起動失敗・timeoutで古い成功証跡を破棄、冷起動失敗と測定検査失敗を最終successへ反映
linux_package 相対パス・リンク・型・重複・未登録ファイル・サイズ/hashの境界、告知補完の版/hash、固定epochのtar/gzip再現性、失敗時の旧成功記録除去、Qt日本語資源の存在・hash検査(統合12件、追加後の限定実行14件)
runtime_manifest 合成MZファイルによる有限の依存一覧、名前・型・件数・サイズ、SHA-256、衝突拒否、コピー・配置後の改変検知。native PE解析の証拠ではない
runtime_staging 一覧の厳密なスキーマ、hash/size検証、未登録ファイルの除外、リンク拒否、原本不変、一時コピーの回収
font_contract font逆RPCの厳密な型・ID・上限、切断時の即時終了
font_broker OS索引の限定選択、16参照・256選択・512MiB累積転送、revoke、2thread上限、GUIで待たない破棄、文書間LRU回収と使用中参照保護
system_font_adapter SFNT/TTCの表・face境界、短いbuffer、hash、再利用、128MiB上限と使用中cacheの保持、エラー時の代替成功抑止
pdf_canvas 中央ページと保存用先頭位置の分離・余白同距離・ズーム中心保持、CropBox/回転の双方向変換、PDF座標の復元、古い移動の取消、先読みの優先度・件数・上限、メモリ圧迫での先読み停止・不可視cache回収・解像度抑制・回復、旧応答破棄、キャッシュ予算、先読み/旧倍率のfont致命エラー・旧文書応答の破棄
pdf_canvas_hidpi DPR 2で192条件の通常/抑制解像度の注釈の実描画画素とクリック・選択領域を照合
translations 英語localeで埋込QM・設定/コマンドの日本語案内・実Qt Quick Dialogの「開く」「キャンセル」。OSネイティブdialogの言語は対象外
app 全4形式の閲覧中原本置換と復元不能通知、DOM目次loadingパネル、内部宛先だけのPDF見出し代替、失敗したEPUB境界指示の破棄、WebリンクのEsc取消、本番QML/Controller、コメントのTab/Enter・CropBox外・極小ページ・解除・文書切替、検索完了/取消時の能力状態、実展開worker終了時の資源分類、初期パネル表示/480・1100px幅/表示切替、現在節と選択の分離・折りたたみ・IDなし見出しの履歴復元、PDFラベル/実ページ、明示closeと旧応答破棄、メモリ圧迫での処理停止・新open拒否・回復後の明示再open、能力境界、5,000ページの遠距離移動と取消、特殊キー、IMEイベント、パネル、全形式の文書切替、元資料ハッシュ、履歴消去・未提示位置、font失敗後の表示維持・新workerでの再open・警告の保存、文書切替の失敗/取消とRecoveringの整合
web リンク選択解除と作者outline復元、同一資源の見出し境界・新navigationによる旧指示失効、本番WebEngine、HTML/XHTMLのnative/ARIA見出し・名前空間付き目次・入れ子階層、章末重複移動先・内部scroll、MainWorldとApplicationWorldの分離、実通信拒否、meta refresh/フォーム拒否、CSS/SVG、縦書き/RTL、CFI・リフロー復元、遅延image/fontの横/縦・連続scroll・native anchoring・poll先行、生成見出しのbase解決、固定viewport、検索、実renderer SIGSTOPと取消・再open

5,000ページGUI試験は全ページ描画を待たず末尾へ移動し、異なる描画世代を連続要求して最後の緑色ページの画素を確認する。元の青いページの混入、置換後の旧画像、staging文書の取消、10ms周期のUI heartbeatも確認する。この試験の最大停止1.5秒という閾値は回帰検出用であり、T20のp95予算を緩和するものではない。

追加のGUI回帰では、最近使った文書の初期画面とEPUBの文書端移動・Web検索取消を確認した。Web位置はMainで型・上限・originを確認して論理位置だけを採用し、EPUBのpackage/spineを照合して復元する。履歴とバックアップに残る旧location.urlは、書込み可能な状態だけで原子的に除去する。CFI・進捗・本文引用を保持し、lock取得失敗やforceReadOnly()ではファイルを変更しない。

受入IDとの対応

「Linux限定」は記載した生成資料・開発環境の個別試験が成功した範囲を指す。対象OS全体の最終合格を意味しない。「一部」は記載以外の確認が残る。

ID 判定範囲 実結果・残る確認
T01 一部 文字・画像・ベクター・透明・回転・CropBox、埋込日本語を比較。非埋込UniJIS-UCS2-H/Vの横組・縦組も描画/検索/目視確認。保存appearanceなしの通常リンク枠を補完し、NoZoom/NoRotateは生成リンク枠・保存リンク/コメント外観・Textアイコンで検証。任意CID/CMap、校正済みICC/CMYK、特殊合成、両OS・全倍率の広いコーパスは未実施
T02 Linux限定 ページ移動・倍率・回転・保存座標・旧tile破棄を自動確認
T03 Linux限定 5,000ページの直接末尾移動・応答性・取消・文書置換をGUI確認。約1GB(0.940 GiB)の実画像ストリームを持つ5,000ページ資料でも100操作と末尾移動を確認
T04 Linux限定 ローカルHTMLのCSS/SVG/別HTML/アンカーを本番WebEngineで確認
T05 Linux限定 ZIP相対資源・別HTML・入口不在/複数、ストリーム展開を確認。手動入口を原本identityへ結び付け、別GUIプロセスで再利用。変更・消去・取消・privacyを検証
T06 一部 EPUB 2/3・spine/目次順相違・nonlinear・RTL・固定viewportを確認。gg/Gの通常読書対象の先頭/末尾と章内端を横書きLTR/RTL・縦書きで確認。見開き・package/item上書き・左右/RTL・中央単独・混在・resize・zoom・取消を生成資料で確認。実XHTMLの章内見出し、章末の重複移動先と次章/前章への往復、失敗した境界移動が後の通常章移動へ残らないことも検証。両OSは未判定
T07 Linux限定 開く・読む・数値ページ・目次・パネル・文書置換のキーイベント試験
T08 Linux限定 内容・パネル・入力欄の分岐、文字入力中の閲覧停止
T09 一部 IME preedit/commitイベントと論理キーは確認。Ubuntu X11では実IBus/Mozc・US/JP XKBの変換と取消も成功。Waylandも実Qt+IBus/MozcのD-Bus経路が成功。物理入力・Windowsは未実施
T10 Linux限定 期限・Esc・操作先変更・長押し・数値列・設定再読込時の取消
T11 一部 構造タグ/アウトライン、RoleMap、複数MCID、同一ページの異なる見出し、推測しないfallbackを確認。外部/禁止アクションのみと内部宛先混在の目次で能力・移動を検証。変換Form、回転CropBox、直接/子MCRの跨ページ順、vector衝突のfallbackを追加。FormだけのStructParentsは共有qpdfアダプターで取得し、実位置への移動もGUIで確認。annotation所有構造は明示的制約
T12 Linux限定 階層・現在位置印/選択の分離・折りたたみ・確定・不正宛先、更新後の選択保持、IDなし見出しの履歴と同HTML内復元、20,000件上限と分割目次、DOM索引のloadingと欠如の区別・表示要求の保持を確認
T13 Linux限定 3パネルの独立切替・隠した操作領域から本文への復帰
T14 一部 暗/明テーマとPDF原色保持をGUI確認。表示スケールの証跡は下記。両OSは未実施
T15 Linux限定 有効設定を一括適用、キー一覧更新、文字設定変更と論理位置維持
T16 Linux限定 型・範囲・未知キー・重複・接頭辞衝突・別表記衝突を拒否して前設定を保持
T17 一部 XDG・非ASCII/空白パス・状態書込ロック・設定失敗を確認。Windows Known Folders実行・対象OS初回起動は未実施
T18 一部 静的注釈・コメント・widget保存外観、欠損外観の通知、通常リンク枠の表示補完、入力不能・原本ハッシュ不変。NoZoom/NoRotateは生成リンク・保存AP・Textアイコンで確認。DPI、実画素とhit領域、Tab/Enterでのコメント閲覧を確認。APなしの他形式注釈はNoZoomの制約を通知。本文長・1,000件・512KiB情報予算での省略を明示し、取得済みprefixと注釈の存在を保持
T19 レビュー採用 接続契約のレビュー。解析をUIから分離し、能力・位置・ナビゲーション・取消しの既存経路と追加手順を追跡。全8能力・4状態・未対応理由を共通境界で検証。同名の抽象基底や動的登録は論理契約の必須条件としない
T20 一部 生成資料の新プロセス冷起動30回と同一プロセスopen30回、各系列125操作、29同条件開閉、連続scroll・操作集中時の開発機測定を実施。約1GB画像PDFでも3回open・100操作を追加。対象OS・基準機・GPU/60 Hzの受入は未実施
T21 Linux限定 破損・欠損資源・パスワード誤り・失敗時の旧文書維持・Esc・旧世代破棄。broker/interceptor/CSPの検出をURLなしで集計し、文書情報に分類と件数を保持。broker側も不在・安全拒否・アクセス拒否・CRC・上限・保存/読取失敗を有限分類で区別する
T-P01 Linux限定 PDF/HTMLの日本語/英語検索・n/N・文字情報なしを確認。04 §7の表示テキスト検索としてWebは現在の章/HTMLを対象にする。全spine一括検索は提供せず、入力欄とREADMEに範囲を表示
T-P02 Linux限定 入力モードの隔離、PDF/Webの検索revision取消、同文書内取消と文書切替後の旧callback破棄
T-P03 Linux限定 PDF表示済み座標、Web CFI/DOM位置、package/spine解決、受信位置の型・範囲・origin検証、font/幅変更と遅延image/fontの横/縦同一文字維持、連続scroll・native anchoring・poll先行、全形式のopen時identityを保存時にも照合し閲覧中の置換先へ旧位置を転用しない。通常openの同一性不一致も通知。近似復元通知。内部URLを新規保存せず、旧履歴/backupも移行
T-P04 Linux限定 初期画面の一覧・キーで再表示・保存上限・無効化・履歴消去・終了時に消去位置が復活しないことを確認。削除・変更・置換された原本は以前の項目から開かず、明示的な再選択を案内
T-S01 Linux限定 絶対/親/リンク/重複名・実展開量・CRC・一時ファイル公開の境界を確認。実readを各streamで計数し、paddingされた5圧縮方式を途中で停止(codec内部の先読み量を含む)
T-S02 Linux限定 実WebEngineで文書JS・外部通信・フォーム・meta/任意遷移・外部ファイル・ダウンロードを制限
T-S03 一部 OS隔離、資源上限、異常終了・不正返信・取消を確認。実時間でPDFの30秒通知/120秒停止、展開の10秒通知/30秒停止、途中応答で期限が延長されないことと取消を追加確認。Web rendererの実停止・応答期限・再open・取消も確認。Windows native攻撃試験は未実施
T-S04 Linux限定 現在/backup状態消去、原本不変、自分の未使用一時領域だけ回収
T-S05 未完了 Arch開発版tar.gzの依存/告知manifest、再現可能な生成、移動先からの6条件起動を確認。Ubuntu用debは同梱SDKで12条件起動・install/remove/purgeを確認。新しいUbuntu OSでも同じ12条件とremove/purgeが成功。Windows配布、対応sourceと全Chromium告知を含む公開パッケージは未完了

性能・表示・配置の証跡

前回ビルドでは 10条件の再測定が完了した。新プロセスopen計300回、同一プロセスopen計300回、各適用系列125操作、各240scroll入力で測定検査は成功し、10条件の暫定予算の参考超過はなかった。原本・バイナリーのhashも照合した。500章EPUBを含む群RSS最大は830.75 MiB。OSファイルキャッシュは保持した。

操作集中時の再測定は3成功、長押し120入力・24ジャンプ・10resize・4切替を確認した。最大heartbeat超過145.82 msは独立して報告し、各入力の視覚応答や物理scanoutと同一視しない。大容量PDFも3回open・100操作・5,000ページ目を確認した。原本不変・一時資料回収済みで、最終品質p95は24.40 ms、独立監視の群RSS最大は720.46 MiBだった。これらは対象OS・基準機の受入を代替しない。

前回の実時間watchdog試験では本番の待機時間を変更せず、隔離済みの試験用IPC peerが応答しない場合の停止を確認する。Mainのイベントループと別要求の取消も確認し、結果は通常CTestとは分けて記録する。PDFium/libzip自体を停止させた試験や、GUIフレーム性能の測定としては扱わない。前回実行は3成功・120.172秒、PDF通知/停止30,007/120,006ms、archive通知/停止10,008/30,008ms。実行ファイルとcommon libraryは統合ビルドのhashに一致する。旧結果と再現手順も保持する。

以下の数値とJSONは今回の原本同一性・翻訳等の修正前のビルドによる履歴である。前回版の再計測結果は別の集計へ記録しており、履歴値を前回版の測定と扱わない。履歴の性能JSONは小型資料、500ページ/500章資料、非埋込日本語PDFに保存する。記録したビルドの各条件を、新プロセス・空のXDG設定/状態/キャッシュで30回開く。OSファイルキャッシュとシステムフォントは保持するため、完全コールドとは呼ばない。計測の起点はアプリ起動後のファイルopenであり、プロセス起動時間は含めない。同一プロセスの計30回は、初回1回と明示的な再open29回に分けて集計する。

各資料で同条件のopen→最初の表示→closeを29回、close後1秒待ちで観測する。その後のナビゲーション/scrollを含む最後のcloseは別に記録する。対応するページ・見出し・章の系列は各125操作。PDFのページ系列は実ページ移動101回と倍率変更24回で、同じ位置へのno-opをcache hitへ算入しない。見出しがない原500ページPDFは対象不足を明示し、500件の著者outlineを持つ別資料で見出し系列を確認する。

Webの見出し系列は実DOMのhtml-heading索引だけを使い、EPUBの著者目次では代用しない。各系列には対象数・対象の種類・往復範囲を記録する。XHTMLのnative見出しが欠落していた修正前の測定は別記録へ保存し、最終版の見出し性能の証拠から除外した。

500章EPUBの測定資料は、章末の複数見出しが同じスクロール位置に収まらないよう最後の節に1画面分の最小高さを指定し、13見出しに異なる到達点を持たせた。元資料はstandard-500-clamped.epubとして同じバイト列で保持する。元資料で見つかった同位置の見出しを交互に再選択する不具合は製品側で修正し、横書き・縦書きの実DOMとEPUB章境界の回帰試験を追加した。資料の版と目的を区別する。

入力はフォーカス中の本番ウィンドウへの合成QKeyEvent。firstResponseFrameMsは操作成立後の最初のQtフレーム通知までの時間で、PDFでは可視tileの完成前にも記録する。Webのスクロールは操作ID付きACK、見出しはACKと論理位置変化、章移動は検証済みresourcePathの変化を成立条件とする。finalQualityFrameMsは2回以上の通知を待ち、PDFでは対象の可視tileがそろった後の通知に限定する。以前のフレームの遅延callbackは除外する。

QtのframeSwappedは提示キューの通知であり、物理的なscanoutの時刻ではない。WebはChromium compositorのframe IDと結合していないため、両値とも対象画素の提示時刻を直接検証した値ではない。successは要求回数・移動・close・原本不変等の計測検査の成功であり、暫定性能予算の合格ではない。50 msとの参考比較は全操作系列をまとめたfirstResponseFrameMsのp95を使い、原設計の視覚応答を直接測定した値とは区別する。

本体RSS、および本体+全子孫のRSS合計を100msごとに採取し、開始・最大・close後・反復差分を分ける。表の群ピークと1 GiBの参考比較は同一プロセスの開閉・操作系列を対象とし、新プロセス起動30回のRSSは各生JSONへ別に記録する。close後は1秒待ってEmptyと描画cacheゼロを確認するが、全補助プロセスの消滅を条件にはしない。RSS合計は共有ページの重複を含み、採取の間に生じたピークは捕捉できない。保持RSSが直ちに戻らないことだけでリークと断定しない。実QWindow/QScreenの寸法・DPR・報告refresh、pressure段階も保存し、メモリ圧迫中の測定を通常品質の成功値へ混ぜない。描画cacheの課金量はRSSとは別指標とする。

資料 形式 空のアプリcacheからopen p95 (ms) 入力→初回Qt通知 p95 (ms) 最終品質指標 p95 (ms) 連続scrollフレーム p95 (ms) 群ピーク RSS (MiB)
小型 pdf 63.34 7.95 13.12 19.14 174.45
小型 html 211.38 11.37 17.01 19.25 635.30
小型 zip 216.61 6.68 17.07 18.19 645.33
小型 epub 213.54 13.00 21.20 18.19 712.08
500ページ/章等 pdf 63.75 7.93 15.84 18.25 433.72
500ページ/章等 pdf-headings 66.44 8.04 16.67 20.33 451.60
500ページ/章等 html 259.46 6.50 12.82 17.06 701.00
500ページ/章等 zip 267.92 10.84 17.07 17.50 703.34
500ページ/章等 epub 270.86 22.75 31.07 19.91 826.52
非埋込日本語 pdf 87.28 7.80 12.93 18.56 211.64

10条件すべて冷起動30回・原本不変・測定条件検査が成功した。OSファイルキャッシュは保持する。上記は開発機上のQt通知時刻による参考値であり、両OS・基準機の性能合格ではない。

資料 PDF cache hit 件数 / p95 (ms) miss 件数 / p95 (ms) 同位置移動の除外件数
小型 pdf 101 / 13.02 0 / — 0
500ページ/章等 pdf 81 / 12.14 20 / 13.26 0
500ページ/章等 pdf-headings 81 / 15.87 20 / 28.13 0
非埋込日本語 pdf 101 / 12.93 0 / — 0

メモリは本体RSSと、本体+全子孫の群RSSを分けて記録する。以下の3値は開始 / 最大 / 最終close後(MiB)。反復差分は、同条件29開閉の最初と最後のclose後の差(MiB)である。

資料 形式 本体 開始 / 最大 / close後 群 開始 / 最大 / close後 29開閉の群差分
小型 pdf 103.38 / 141.95 / 125.04 103.38 / 174.45 / 125.04 +7.75
小型 html 101.76 / 352.82 / 349.98 101.76 / 635.30 / 501.49 +9.09
小型 zip 100.92 / 339.68 / 336.52 100.92 / 645.33 / 490.67 +9.69
小型 epub 101.75 / 342.21 / 339.50 101.75 / 712.08 / 491.68 +9.71
500ページ/章等 pdf 103.19 / 393.89 / 387.09 103.19 / 433.72 / 387.09 +5.79
500ページ/章等 pdf-headings 101.93 / 409.69 / 346.12 101.93 / 451.60 / 346.12 +2.02
500ページ/章等 html 102.21 / 373.73 / 353.61 102.21 / 701.00 / 513.59 +8.68
500ページ/章等 zip 101.51 / 363.29 / 343.16 101.51 / 703.34 / 493.57 +12.73
500ページ/章等 epub 101.55 / 359.94 / 343.18 101.55 / 826.52 / 504.09 +11.85
非埋込日本語 pdf 103.57 / 154.39 / 154.39 103.57 / 211.64 / 154.39 +18.98

暫定予算から外れた参考値: なし。予算値は変更していない。継続scrollの物理60 Hz判定、完全OS-cold、長期リーク判定はこの計測では行わない。

操作集中時の専用測定は長押し120入力、遠距離ジャンプ24回、resize10回、staging取消、異なる文書への4切替を含む。QtTestの本番Controller/QML/workerを使い、最後の5,000ページ目は緑色の実画素も検査する。各入力の移動有無、描画待ち/実破棄数、10ms heartbeatを記録する。通常CTestの計測専用slotのskipは、この独立実行結果と分けて報告する。

大容量PDFは5,000ページ・1,009,828,104 bytes(0.940 GiB)。1,280個の異なる画像を全て実際に使い、ページ間で再利用する。修正前の記録では3回openのp95は97.70 ms、100操作の最終品質p95は24.12 ms、50 ms間隔の独立監視によるプロセス群ピークRSSは約720 MiBだった。30回openの受入を置き換える値ではない。原本ハッシュ不変と5,000ページ目の画面を確認し、大容量一時資料は回収した。詳細と再現手順

前回の配置と記録の対応

前回のcmake --installと開発版tar.gzの別展開先で本体・ワーカー・PDFiumとライセンスを配置した。同じ開発機のシステムQtを使用し、クリーンOSへの独立配布の合格ではない。前回配布記録では2回のアーカイブ生成がbyte一致し、圧縮後6,367,967 bytes、553ファイル、SHA-256はe384c8c21da11343f845a5ca7310ee6ca944e51c9585de4b2b5c7c73ca352e0e。原本と別の一時展開先から、PDF・非埋込日本語PDF・HTML・ZIP・EPUB、100%/200%を含む6条件すべてReadyを確認して一時展開先を回収した。100%は1100×760、200%は550×380論理pxの仮想画面内に収まり、worker/Chromiumのsandboxは有効だった。配置後PDFWorkerはRPATH変更でbuild直後とhashが異なるため、それぞれを記録する。従来の配置結果と旧配布記録は履歴として保持する。

ソース、実行ファイル、試験、証跡のSHA-256と集計はvalidation-record.jsonに記録する。今回の追加修正前の集計はprior-validation-record.jsonに保存した。前回版の全試験・比較・配置・性能の結果はcompletion-finalにそろえ、旧結果を新しいバイナリーへ読み替えない。最終性能は10条件、PDF比較は6組を記録し、それぞれ対象バイナリーを照合する。前回の実時間watchdogは再実行済みで、専用試験実行ファイルとcommon libraryのhashを個別reportとbuild-recordで確認できる。最終集計のworkerDeadlinesBuildMatchesへも反映する。旧結果は従来の各フォルダーと旧集計へ保持する。記録のmatchesRecordedBuildとpdfComparisonBuildMatchesで対象を区別する。約1GBの負荷試験も最終ビルドで再実行し、主3実行ファイルの一致をstressPdfBuildMatchesに記録する。旧ビルドの測定はstressPdfPriorとして保持する。

Windows向けに追加したコード

LPAC・Job・明示したハンドルだけの継承、子側での実token検証、元文書のread-onlyハンドル入力、非同期pipe通信を本番ワーカー経路へ接続した。個別runtimeの一覧・ハッシュ照合、profileのfilesystem/registry書込拒否、handle相対の資源アクセス、rendererのプロセス識別・監視、volume+128bit file IDによる保存位置の照合を追加した。Windows PDFiumの固定アーカイブと公開ヘッダーも確認した。

Windows限定のwindows_pipe、windows_resources、windows_worker試験をCMakeへ登録した。これらは未実行であり、Linuxでの合成MZ試験やWineヘッダーによる構文確認では代用しない。Windows GUI試験は一時保存先を明示し、実利用の履歴を消去しない構成とした。準備手順・隔離の詳細とフォント代替の未確認点

リリースの残作業

追加で解消した実装上の不足

  • 全形式でopen時の原本identityを保存時に照合し、閲覧中の変更・置換へ旧位置を転用しない。復元不能と履歴なしを区別して案内する。DOM目次のloadingは欠如と区別し、表示要求を保持する。修正前6失敗と修正後のGUI/core。

  • PDFの構造見出しがない場合の代替候補は内部宛先だけを採用する。EPUBの見出し章境界は成立したnavigationへ結び付け、失敗した操作の指示を次の章移動へ残さない。WebリンクのEsc取消はDOMのフォーカスと選択表示も解除する。

  • PDFのコメント本文長・ページ内1,000件・512KiB情報応答予算の省略を明示し、取得できたprefixを保持する。本文が長すぎる注釈は固定代替文で存在を示す。安全上限を緩めず、原本も変更しない。

  • 日本語sourceをQtの翻訳contextで抽出し、TS/QMと起動時のQTranslatorを接続した。英語localeでの日本語案内とQt Quick標準ボタンの4ケースを確認した。Qtの日本語資源の配置は必要条件であり、OSネイティブdialogや多言語切替の完成は主張しない。翻訳・配置手順。

  • PDFのNoZoom/NoRotateは、保存APのバイト列を変更せず、描画中だけ矩形・回転を補正する。DPRを描画要求とキャッシュ識別へ渡し、Mainの選択枠・マウス判定も同じ表示座標へ合わせる。生成リンク枠、保存リンク/コメント外観、ネイティブTextアイコン、非表示指定、重なり、CropBox境界を生成資料で検証した。APなしの非Text注釈のNoZoomは制約を通知し、不正確なクリック補正を行わない。

  • 資源提供側の詳細原因を表示集計まで渡す。実在しない資源、安全検査拒否、権限、MIME、上限、CRC、容量不足、保存/読取I/O、Worker異常を区別し、取消は通知しない。追加契約。

  • FormだけにStructParentsを持つ構造見出しは、共有qpdfアダプターで取得する。所有元と呼出を検証できる文字だけをexactにし、複数呼出・曖昧な対応は理由付きpage precisionへ下げる。循環・破損・quota超過は制約を返す。

  • PDF検索の能力は、走査完了の実結果でsupported/unavailableへ更新する。取消・失敗・旧応答では未確認状態を保持する。

  • PDFのコメント本文はTab/Shift+Tab、Enterで開ける。CropBox外の注釈も対象とし、通常モードのEscで選択を解除する。Web文書への切替後はPDFの選択・画像を回収する。

これらの資料に対する成功を、任意のPDF・全OSの互換性合格としては扱わない。

対象環境・配布・性能の残作業

  1. 統合済みWindowsコードをMSVC・Windows Qtでビルドし、本番LPAC下のPDF/ZIP/EPUB、pipe・resource・worker試験を実行する。日本語を含む非埋込フォントの代替、profile回収、renderer監視、PE依存解析と配置を検証する。現状は利用可能と確認できたWindows版ではない。詳細
  2. Ubuntu 24.04ではXvfb/Sway・software描画の22試験群、100%/200%を含む起動と配置済みアプリを確認済み。X11の実IBus/Mozc・US/JP XKBは補助試験で確認済み。WaylandのQt+IBus D-Bus経路も確認済み。ローカルdebのinstall/remove/purgeは既存VMと新しいUbuntu OSで確認済み。物理入力、GPU、native desktop portalと公開配布条件を確認する。Windows 11ではnativeビルドとこれら一式が未検証。
  3. 基準機と拡張コーパスでT20のp95、継続scrollのフレーム間隔、長時間稼働、様々なスキャン文書の取消と上限を測定する。600dpi相当画像と高密度ベクターの単一生成資料はArch/Ubuntuで検証済みだが、長い実スキャン群を網羅していない。
  4. PDF互換性の未検証項目と既知の外観差を評価し、依存ライセンス・告知・配布方式を確定する。

以上が残るため、G-RENDER/G-HEADINGS/G-SANDBOX/G-WEBは確認済みの範囲だけを記録し、G-DISTRIBUTIONと全要件の完成判定を合格にしない。