# Mandelbrot Deep Zoom v23 実装報告 ## 結論 `IMPROVEMENT_PROPOSAL.md`で定義したv23の実装、ローカル数値検証、WASM再現build、Hosted/Standalone成果物の生成まで完了した。実ブラウザでのみ測定できる性能・表示・操作・download検証は、今回の環境にin-app browser bindingがないため未実行である。したがって、実装と非ブラウザgateは合格、browser acceptance gateは保留として扱う。 ## 実装済み - 常時RAFを廃止し、invalidate時だけ動くevent-driven schedulerへ変更した。 - wheel/pinch/pan中は再投影だけを行い、settle後に計算を1回開始する。 - Preview時間予算を110msへ下げ、cold deep Previewは幅48px以下から開始する。以後は実測MPPでPreview寸法を決める。 - 標準deepのCoveredは実測MPPから約1.4秒のpixel budgetを算出する。未計測・再投影のみの場合は保守的MPPを使い、DPR下限は固定比率ではなく長辺64pxとするため4Kでも予算が効く。精細・精度優先ではこの時間適応を行わない。 - 処理モードの自動到達点を固定し、省電力はPreview、標準はCovered、精細はRefined、精度優先はValidatedで停止する。標準では境界AAと未確定追加反復を既定で実行しない。 - 精細の未確定追加反復は全未確定pixelではなくescape境界候補に限定し、1 viewあたりdeep 384点/shallow 4,096点を上限にする。 - `Reprojected → Preview → Covered → Refined → Validated/検証未完了`を分離した。 - Coveredはeffective DPRの表示Canvas全域をpixel中心`(x + 0.5, y + 0.5)`で計算する。 - escape field、分類、confidenceと彩色を分離し、palette変更時の反復再計算を廃止した。 - fieldへ各sampleの実escape iterationを保持し、再着色・未確定継続・Export監査で近似値ではなく同じ数値結果を使う。 - adaptive 2×/4× AA、linear-light resolve、byte-budget detail cacheを実装した。 - 深部Worker、deep/BLA/color WASM、reference資産を遅延生成し、Worker数を実測とmemory budgetで増減する。 - deep/BLA/colorはmainで各1回だけcompileし、compile済み`WebAssembly.Module`をWorkerへstructured cloneする。Worker sourceから埋込payload、palette LUT、RGBA生成の重複を除き、Workerは数値fieldだけを返す。 - 通常jobから学習したstrip時間とWorker数をkernel version・端末特性keyで永続化し、次回起動で再利用する。 - fixed-point direct、perturbation、rebase、BLA、局所guarded directを共通tile schedulerへ接続した。 - deep切替を固定zoom閾値ではなくpixel stepとULPの比、hysteresisで決める。 - deep切替とguard bitsへ直近orbitのglitch/未確定/補修率を加え、精度昇格時は低精度で作った基準軌道を破棄して再構築する。 - 高精度directを約6msでyieldする非同期処理へ変更し、取消可能にした。 - f64解析・収縮判定は`INTERIOR_LIKELY`のまま保持し、ValidatedではP/P+64双方の固定小数点整数不等式で主カージオイド/周期2球を証明できたsampleだけを`INTERIOR_PROVEN`へ昇格する。 - 精度優先のdeep描画では、基準軌道もP/P+64で独立再計算して疎なcheckpointとescape位置を照合し、不一致時はglobal reference全体を32 bit昇格して作り直す。 - 1×/2×/4×/custom、1×/2×2 AA、Balanced/Validated、進捗、取消に対応する独立tile exportを実装した。 - Export sidecarへViewSpec、precision/iteration policy、未確定sample数、backend、全kernel SHA-256、色空間、encoder、paletteを記録する。 - version付きURL、戻る/進む、座標・spanの正確値入力/copy、Undo/Redoを実装した。 - 初回UI、一般statusと診断status、mobile compact status、keyboard操作、live region、visible focus、44px target、reduced motion/transparencyを実装した。 - Hosted版はcontent-hashed外部WASMとstreaming compile、Standalone版は3ファイル直開きを維持した。 - cacheは件数ではなくmobile 96 MiB/desktop 192 MiBのlogical byte ledgerで管理する。 ## 再現buildと配布 - `src/shallow_kernel.c`、`src/deep_kernel.c`、`src/bla_kernel_v18.c`、`src/color_kernel.c`、`src/abi.json`を配置した。 - `toolchain.lock.json`でclang 17.0.6、target、SIMD/scalar flagsを固定した。 - 公式SHA-256を照合したclang 17.0.6とNode.js v22.18.0で8 WASMを再buildした。 - shallow、deep、BLA、colorのgoldenとSIMD/scalar同値gateに合格後、payloadと`kernels.js`を昇格した。 - `scripts/build-kernels.ps1`は同一payloadだけを自動deduplicateし、異なるCOLOR variantsも正しく保持する。 - `scripts/build-hosted.ps1`は現manifest以外の古いcontent-hashed WASMを削除する。 生成先: - Hosted: `dist/hosted/`と`dist/wasm/` - Standalone: `dist/standalone/` - 再現build: `build/wasm-v23/` 現在の非圧縮基準値は、Hosted first view 142,046 bytes、Standalone 170,593 bytesである。詳細なfile hashは`audit/v23-source-baseline.json`に記録した。 ## 合格済みgate - source contract: pass - kernel source/ABI contract: pass - fixed-point precision 256/320 bit: pass - 基準軌道P/P+64 checkpoint一致と故意の不一致検出: pass - analytic interior integer proof 256/320 bit: pass - pixel mapping 851 samples、shallow/deep/BLA、2×/4× tile seam: pass - 配布shallow WASM pixel contract 1,440 samples、mismatch 0: pass - generated-WASM shallow/color/deep/BLA golden: pass - SIMD/scalar結果比較: pass - 本体、shallow Worker、deep WorkerのJavaScript構文: pass - mock DOM初期化とv23 diagnostics: pass - compile済みdeep/BLA/color Moduleのstructured clone・instantiate: pass - Node固定scene性能基準と処理量契約: pass(`audit/v23-node-performance.json`) - Hosted/Standalone buildと全payload SHA-256: pass toolchainを利用できる環境では次で省略なしに再実行できる。 ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/test-all.ps1 -RequireToolchain ``` ## Browser acceptance gate `tests/browser-benchmark.html`は`tests/scenes.json`のmobile/desktop/4K profileと6 sceneを走査し、Preview、Covered、Refined、idle scheduler/write、long task、logical memory、canvas SHA-256をJSON化する。desktop/z0ではwheel連打、省電力がPreviewで停止すること、標準がCovered後にAA・追加反復を開始しないこと、即時再着色、64px Export、Validated Export取消、機械判定できるaccessibilityも実行し、結果へacceptance判定を付ける。今回の環境ではbrowser bindingがなかったため、`audit/v23-browser-baseline.json`は意図的に`not-run`のままである。 残る実機確認: - mobile/desktop/4Kの表示画像とnative coverage - 操作反映p95、Preview/Covered/Refined所要時間 - idle時の予約RAF/timer/background job/Canvas・DOM write 0 - browser/GPUを含むobserved peak memory - Export寸法、完了前downloadなし、取消、PNG/JSON内容 - keyboard-only、focus、44px target、live status、page zoomとcanvas pinchの操作確認 このgateが合格するまで、v23の実装完了と数値gate合格は主張できるが、固定実機に対する性能目標の達成は主張しない。