# T-102 ローカル試作の第三者コード

2026-09-22。これは合成データを用いるローカル比較試作です。以下のライセンス原文を `licenses/` に保持し、buildにも同梱します。通信codecの変更はせず、T-102側で入力制限・復元後検証・UIを追加しています。

| 対象 | 固定版 | 表記原文 |
|---|---|---|
| ymuichiro/animated_data_qr_js | 2d0b2e1d467cc6b3e3185c187dd9a721f82807da | licenses/animated-MIT.txt |
| tongatron/decimen-optical-transfer（MIT派生版） | 9c4facaa21336da80e95d70343c0f5f3ced8805b | licenses/decimen-MIT.txt |
| qrcode | 1.5.4 | licenses/qrcode-MIT.txt |
| dijkstrajs | 1.0.3 | licenses/dijkstrajs-MIT.txt |
| zxing-wasm JS | 3.0.1 / 2.2.4 | licenses/zxing-wasm-MIT.txt |
| zxing-cpp | 下記2commit | licenses/zxing-cpp-Apache-2.0.txt |
| ZXingWasm.cpp wrapper | zxing-wasm v3.0.1 / v2.2.4 | licenses/zxing-wrapper-Apache-2.0.txt |

Decimen本家の現在のAGPL版は組み込んでいません。MIT派生版の権利表記はBashAlarmistの原文を保持します。T-102 buildは派生版UI/Umami scriptを含まず、ローカルJS・reader WASMのみ使います。各node_modulesの原文もvendor内に保持します。

zxing-wasm 3.0.1のzxing-cpp commitは `eb8c15ef7827ee277bd8a9b093fa1d97bd98cf67`、2.2.4は `fba4e9503fee4518ca2e89510baeea9bcc36dc8d`。両版のApache原文は同一SHA-256 `c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08`。wrapper原文も両tagで同一SHA-256 `80caa1dd3fca8e626335ca3b936c97b71463241718f77d51589727a8cfd9b41b` でした。

## 配布表記の追加確認（2026-09-22）

固定した比較候補・配布WASM・原文資料を以下に対応付けます。参考資料の同梱は、実WASMの全リンク入力を特定したという意味ではありません。**公開配布のholdは維持**します。

| 配布ファイル | bytes / SHA-256 | 固定wrapper source / zxing-cpp source |
|---|---|---|
| zxing-3.0.1.wasm | 988964 / `8f2a99b0c9fdf8123d0152ba4761fc7dbf58c7de7e4937d1e134aae17e2ad795` | `144731d56413013358248ef2327090a216c006f4` / `eb8c15ef7827ee277bd8a9b093fa1d97bd98cf67` |
| zxing-2.2.4.wasm | 940931 / `85d46f55d7c86a4d09bb04273367408b19c324f582d040d018aecb25a9a82942` | `43d6fdd4c967b96e46f7028dce5b2d43cfd99a56` / `fba4e9503fee4518ca2e89510baeea9bcc36dc8d` |

| 論点 | 確認できたこと | 未確定・確認範囲の限界 |
|---|---|---|
| source対応 | npm lockのintegrityと公開npm metadataを照合。公開SLSA statementのroot commitは上表wrapperと一致 | statementの暗号署名/透明性log検証は未実施。root commitだけでは推移依存の実入力を示さない |
| stb | 両固定wrapperのREADER節はSTB_IMAGE_IMPLEMENTATION、stb_image.h、stbi_load_from_memoryを使用。zxing.cmakeはlocal pkg-configまたは未pinの取得経路を持つ | npm reader WASMで使用したstbのexact revision/取得経路は未特定。下記参考commitを実入力へ置き換えない |
| Emscripten | 両固定wrapperのsetup actionはEMSDK 4.0.19を指定。対応sourceは `08e2de1031913e4ba7963b1c56f35f036a7d4d56` | 公開workflow設定と、配布binaryに実際にリンクしたruntime object一覧は別。WASM custom sectionは0で追加の版証拠なし |
| musl / libc++ | 上記Emscripten sourceにCOPYRIGHT/LICENSE原文が存在。下記に原文を補足収録 | どのobjectが最終readerに含まれるかは未立証。toolchain内の全コードを同梱したとは主張しない |
| Apache NOTICE | 上表wrapper/zxing-cppの4つの固定treeをrecursive APIで確認（全件truncated=false）、NOTICEまたはNOTICE.*という独立ファイルは0 | source内のcopyrightや、tree外の依存まで免除する証拠ではない |
| zint | wrapperのreader CMakeはZXING_WRITERS OFF。npmの一般依存説明にはzintがある | writer側の依存説明をreaderへの実包含証拠へ読み替えない |

### 補足収録する原文

以下は原文を変更せず同梱する表記候補資料です。stbはMIT選択肢を採る場合のcopyright/許諾文を保全し、元の二者択一原文をそのまま収録します。Emscriptenの上位LICENSEだけでmusl/libc++を包括したとせず、別の原文も収録します。各原文の条件・例外を、無関係な依存への包括免除と解釈しません。

| local path | 原資料 | bytes / SHA-256 |
|---|---|---|
| licenses/stb-reference-LICENSE.txt | [stb参考commit 2c980bb](https://github.com/nothings/stb/blob/2c980bb59875b0d32144a71867fbdebb2f77cd20/LICENSE) | 2510 / `bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63` |
| licenses/emscripten-4_0_19-LICENSE.txt | [Emscripten固定source LICENSE](https://github.com/emscripten-core/emscripten/blob/08e2de1031913e4ba7963b1c56f35f036a7d4d56/LICENSE) | 5093 / `620a78084fc7ca97c0b5dea9abf891f3ffcadfdbf305276f099c9c4e12fc1d86` |
| licenses/emscripten-4_0_19-musl-COPYRIGHT.txt | [musl COPYRIGHT](https://github.com/emscripten-core/emscripten/blob/08e2de1031913e4ba7963b1c56f35f036a7d4d56/system/lib/libc/musl/COPYRIGHT) | 6204 / `f9bc4423732350eb0b3f7ed7e91d530298476f8fec0c6c427a1c04ade22655af` |
| licenses/emscripten-4_0_19-libcxx-LICENSE.txt | [libc++ LICENSE](https://github.com/emscripten-core/emscripten/blob/08e2de1031913e4ba7963b1c56f35f036a7d4d56/system/lib/libcxx/LICENSE.TXT) | 16703 / `539dd7aed86e8a4f12cbdd0e6c50c189c7d74847e4fecc64ce2c6ee3a01da38b` |

stb参考commitのstb_image.hはv2.30表記で、末尾の許諾文は上記原文と対応します。このreference commitは原文を固定するための値で、実WASMで使われた版の証明ではありません。参考資料を増やしても、存在を知らない同梱物の必要表記が全て揃ったとは断言できません。

### 公開前に残る判断

P01の固定候補・ライセンス原文・依存記録は上記の範囲で確認済みです。「全推移依存のexact commitから再現できること」は元要件の明文ではなく、完全なSBOMを既得の成果にも要求達成にも数えません。一方、必要表記の完結性は残るため、今ある資料だけで公開適合と宣言しません。

既存artifactを継続する場合は、上流が保持する当該npm buildのstb取得元・最終リンク入力またはnotice bundleを照会する案が最小です。外部連絡は未承認・未実施で、質問文と公開範囲を具体化して総司令へ確認します。別案はstbを含む全入力をpinしたreader WASMを新candidateとしてbuildする方法ですが、新toolchain取得と比較条件変更を具体化して確認し、既存artifactと同じ成果物だったとは主張しません。判明しない場合はunknownを残して公開・採用判断へ渡し、同じ403を再試行しません。

## 初回調査時の未解決事項（履歴）

この表は公開配布の表記照合完了を意味しません。上流 `src/cpp/CMakeLists.txt` はreaderで `ZXING_WRITERS OFF` とする一方、stbをlinkしています。zxing-cppの `zxing.cmake` はstbを固定revなしで取得できるため、npm同梱WASMに使われたstbのexact commitとEmscripten runtime/toolchain由来の表記を、この調査では特定できていません。zintは上流の一般ライセンス一覧にありますが、readerへの組込み有無は最終配布物で追加照合します。未特定の版を推測して完全なSBOMと称しません。

外部配布前にWASM buildの来歴・内部依存表記・NOTICEの有無を照合してください。現段階の受入はローカル技術検証に限定します。

## 原資料

- https://github.com/ymuichiro/animated_data_qr_js/tree/2d0b2e1d467cc6b3e3185c187dd9a721f82807da
- https://github.com/tongatron/decimen-optical-transfer/tree/9c4facaa21336da80e95d70343c0f5f3ced8805b
- https://github.com/Sec-ant/zxing-wasm/blob/v3.0.1/src/cpp/CMakeLists.txt
- https://github.com/Sec-ant/zxing-wasm/blob/v2.2.4/src/cpp/CMakeLists.txt
- https://github.com/zxing-cpp/zxing-cpp/blob/eb8c15ef7827ee277bd8a9b093fa1d97bd98cf67/zxing.cmake

buildの `build-inputs.json` はJS実入力の一覧、`asset-manifest.json` は同梱資源の実byte数/SHA-256です。現在のJS実行bundleの外部packageはqrcode、dijkstrajs、zxing-wasmです。fflate等の取得済み開発・候補依存を実行bundleと混同しません。
