Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -413,8 +413,8 @@ CI が赤くて直した場合、その修正差分にもレビューが要る
| 設定 | 値 | 意味 |
| --- | --- | --- |
| main の branch protection | 有効 | 直接 push は `GH006` で拒否される |
| 必須チェック | **21 本。** `ci-native` の 3 job(`Windows x64 (L1 + L3)` / `macOS arm64 (L1 + L3)` / `Linux x64 (L1 + L3)`)、`ci-sanitizers` の 2 job(`Windows x64 AddressSanitizer (L2)` / `Linux x64 ASan+LSan (L2)`)、`ci-lint` の 4 job(`Workflows (actionlint)` / `Shell scripts (shellcheck)` / `PowerShell (PSScriptAnalyzer)` / `Documentation links`)、`codeql` の 2 job(`Analyze c-cpp` / `Analyze csharp`)、`ci-unity` の 2 job(`Unity EditMode (Linux)` / `Unity Standalone (Linux)`)、**`release` の 6 job(`Package windows-x64` / `macos-arm64` / `linux-x64` / `android-arm64` / `ios-arm64` と `Assemble the release assets`)、`ci-native` のモバイル 2 job(`Android arm64-v8a (cross-build)` / `iOS arm64 (cross-build)`)**。2 本 → 5 本(M3 完了時)→ 13 本(2026-08-29、PR #30 が 13 本すべてを緑にしたのを見てから拡張)→ **21 本(2026-08-31。`release.yml` を PR でも走らせるようにして 6 本、モバイルのクロスビルド 2 本を足した。どちらも main と PR の両方で安定して緑になったのを見てから拡張した)**。2026-08-31 に API で実測し、この表と一致 | 全部 pass しないと merge できない |
| 必須でないもの | **`ci-unity` の `Plugin <platform>` 5 本、`release` の `Publish the release` の 1 本、そして M6 が足した 3 本(`ci-native` の `Web wasm32 (cross-build)` / `ci-unity` の `Web browser E2E` / `release` の `Package web-wasm`)。** **M6 の 3 本を必須にしない理由として「緑の実績がまだ浅い」と書いていたが、その根拠は失効した。** 2026-09-10 に実測した実績は次のとおり: **`Web wasm32 (cross-build)` / `Web browser E2E` / `Package web-wasm` の 3 本とも、PR #63 / #69 / #70 / #72 / #73 の 5 本すべてで success**。加えて **main の直近 6 run でも `Web wasm32 (cross-build)` と `Web browser E2E` が success** である(`Package web-wasm` は `release.yml` が main の push で走らないので、実績は PR 側だけである)。**したがって「浅いから」はもう理由にならない。** それでも必須へ昇格させていないのは、**昇格が GitHub 側の設定変更であって文書修正ではなく、リポジトリ所有者の判断だからである** —— **これは未決の判断として開いている。** モバイルの 2 本が M4 の直後は必須外で 2026-08-31 に昇格したのと同じ手順を踏む。**帰結を直視すること: いま Web のレーンは赤くても merge を止めない。****`Plugin` が 4 本から 5 本になった**のは web-wasm が加わったためである。 `Plugin` は落ちると `unity` job が `if: !cancelled()` で走って材料が無いまま赤くなるので、必須チェックである Unity の 2 レーンがそのまま止める(**skip は required check を通す**ので `needs:` だけでは止まらない —— そこは workflow の構造で塞いである)。**モバイルの 2 本は 2026-08-31 に必須へ昇格した** —— 当初の理由(この構成の CI がまだ 1 度も緑になっていない)が失効し、M4 以降 PR と main で安定して緑になったためである。**`Publish the release` は必須にしない** —— PR では常に skip される job で、**GitHub は skip を合格として通す**ので、必須にしても何も止めない。「見ているが止めない」の典型である。`build-opencv` / `nightly` は PR では起動しない(構成変更・定期実行が trigger)ので、そもそも必須にできない | — |
| 必須チェック | **24 本。** `ci-native` の 3 job(`Windows x64 (L1 + L3)` / `macOS arm64 (L1 + L3)` / `Linux x64 (L1 + L3)`)、`ci-sanitizers` の 2 job(`Windows x64 AddressSanitizer (L2)` / `Linux x64 ASan+LSan (L2)`)、`ci-lint` の 4 job(`Workflows (actionlint)` / `Shell scripts (shellcheck)` / `PowerShell (PSScriptAnalyzer)` / `Documentation links`)、`codeql` の 2 job(`Analyze c-cpp` / `Analyze csharp`)、`ci-unity` の 2 job(`Unity EditMode (Linux)` / `Unity Standalone (Linux)`)、**`release` の 6 job(`Package windows-x64` / `macos-arm64` / `linux-x64` / `android-arm64` / `ios-arm64` と `Assemble the release assets`)、`ci-native` のモバイル 2 job(`Android arm64-v8a (cross-build)` / `iOS arm64 (cross-build)`)、M6 の Web 3 job(`ci-native` の `Web wasm32 (cross-build)` / `ci-unity` の `Web browser E2E` / `release` の `Package web-wasm`)**。2 本 → 5 本(M3 完了時)→ 13 本(2026-08-29、PR #30 が 13 本すべてを緑にしたのを見てから拡張)→ **21 本(2026-08-31。`release.yml` を PR でも走らせるようにして 6 本、モバイルのクロスビルド 2 本を足した。どちらも main と PR の両方で安定して緑になったのを見てから拡張した)** → **24 本(2026-09-10。M6 が足した Web の 3 本を昇格した —— #63 以降に merge された 11 本の PR(#63〜#70 と #72〜#74)すべてで 3 本とも success になり、「緑の実績が浅い」という当初の理由が失効したため)**。2026-09-10 に API で実測し、この表と一致 | 全部 pass しないと merge できない |
| 必須でないもの | **9 本**(PR #74 の 33 checks から必須 24 本を引いて実測)。**`ci-unity` の `Plugin <platform>` 5 本、`release` の `Publish the release` の 1 本、`codeql` の集約 check `CodeQL` の 1 本(言語ごとの `Analyze c-cpp` / `Analyze csharp` を個別に必須にしてあるので、集約を足しても止める力は増えない)、`ci-unity` の `EditMode results` / `Standalone results` の 2 本(PR では skip される)。** **M6 が足した Web の 3 本(`ci-native` の `Web wasm32 (cross-build)` / `ci-unity` の `Web browser E2E` / `release` の `Package web-wasm`)は 2026-09-10 に必須へ昇格した** —— モバイルの 2 本と同じ手順である(根拠は上の行に 1 度だけ書いてある)。**したがって Web のレーンは、いまは赤ければ merge を止める。****`Plugin` が 4 本から 5 本になった**のは web-wasm が加わったためである。 `Plugin` は落ちると `unity` job が `if: !cancelled()` で走って材料が無いまま赤くなるので、必須チェックである Unity の 2 レーンがそのまま止める(**skip は required check を通す**ので `needs:` だけでは止まらない —— そこは workflow の構造で塞いである)。**モバイルの 2 本は 2026-08-31 に必須へ昇格した** —— 当初の理由(この構成の CI がまだ 1 度も緑になっていない)が失効し、M4 以降 PR と main で安定して緑になったためである。**`Publish the release` は必須にしない** —— PR では常に skip される job で、**GitHub は skip を合格として通す**ので、必須にしても何も止めない。「見ているが止めない」の典型である。`build-opencv` / `nightly` は PR では起動しない(構成変更・定期実行が trigger)ので、そもそも必須にできない | — |
| strict | 有効 | ブランチが main より古いと merge できない(`allow_update_branch` で自動更新可) |
| 必須レビュー数 | **0** | PR は必須だが人間の承認は不要 |
| enforce_admins | **有効** | 管理者も例外ではない。抜け道は無い |
Expand Down
4 changes: 2 additions & 2 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ Unity のレーンは Linux で走り、Windows の IL2CPP Player はローカ

表の外では、すべての pull request が `actionlint` / `shellcheck` / `PSScriptAnalyzer` とリポジトリ内リンクの検査を走らせ、CodeQL が C++ と C# を解析します。nightly の workflow は Linux 成果物の glibc の下限を再確認し、Windows と macOS で速いレーンを走らせ、固定した OpenCV の artifact が期限切れでないことを確かめます —— **誰も push していない間に壊れるもの**です。**この nightly は 2026-08-29 から毎日 schedule で走っています** —— 2026-09-10 時点で 13 回、直近 8 回は緑です。(以前ここには「まだ schedule で起動したことがない」と書いてありました。1 週間以上のあいだ偽で、**この種の記述は真でなくなっても何も赤くなりません。**)

**pull request で走るレーンのほとんどが merge を止めます。** 必須チェックは 21 本です: desktop 3 platform の契約・P/Invoke・sanitizer、Android と iOS のクロスビルド、lint の 4 job、CodeQL の 2 つ、Unity の 2 レーン、そしてその 5 platform 分の配布物をビルド・組み立てる release の 6 job。9 本は意図的に必須にしていません。うち 5 本は Unity のレーンが消費する platform ごとのプラグインをビルドするもので、**どれかが失敗すると Unity のレーンは走ったうえで材料が無いことで赤くなり**、それが merge を止めます。3 本は Web / Wasm のもの(クロスビルド・ブラウザでの E2E・リリースの梱包)で、**昇格していないため、現時点では Web のレーンが赤くても merge を止めません。** 以前ここには「まだ昇格の実績を積んでいない」と書いていましたが、2026-09-10 の時点でそれは成立しません —— 3 本とも直近 5 本の pull request すべてで緑で、そのうち main でも走る 2 本は main の直近 6 run でも緑です。**昇格するかどうかは、測定待ちではなく未決の判断です。****skip された必須チェックは合格として通る**ので、その守りなしにそれらへ依存すると、壊れたビルドが通ってしまいます。**レーンは安定して緑になってから必須にします** —— ただし過去 2 回踏んだのは、その逆の形でした: **レーンを足したのに必須にしないまま置いたこと**が、「赤いのに merge できる」隙間そのものです。2026-08-29 までは Unity・lint・CodeQL の workflow がすべての pull request で走りながら必須ではなく、**赤いまま merge できました。CI が見ていることと CI が止めることは別で、ゲートなのは後者だけです。** 残る 3 つの workflow(`build-opencv`、`nightly`、`unity-probe`)は pull request では起動しないので、そもそも必須にできません。`release` は 2026-08-31 までその一覧にありました —— いまは pull request でも走ります。tag でしか走らなかった間に配布の経路に欠陥が 3 件たまり、**うち 1 件は「tag を打つとリリースが 1 件も作られない」というものでした。** その `Publish the release` job だけは必須にしません —— pull request では設計上 skip され、**skip は合格として通る**ので、必須にしても何も止まらないからです。
**pull request で走るレーンのほとんどが merge を止めます。** 必須チェックは 24 本です: desktop 3 platform の契約・P/Invoke・sanitizer、Android・iOS・Web / Wasm のクロスビルド、lint の 4 job、CodeQL の 2 つ、Unity の 2 レーン、ブラウザでの E2E、そして 6 platform 分の配布物をビルド・組み立てる release の 7 job。9 本は意図的に必須にしていません。うち 5 本は Unity のレーンが消費する platform ごとのプラグインをビルドするもので、**どれかが失敗すると Unity のレーンは走ったうえで材料が無いことで赤くなり**、それが merge を止めます。Web / Wasm の 3 本(クロスビルド・ブラウザでの E2E・リリースの梱包)は **2026-09-10 に必須へ昇格しました** —— #63 以降に merge された 11 本の pull request すべてで 3 本とも緑になり、そのうち main でも走る 2 本は main の直近 6 run でも緑だったのを見てからです。残る 4 本は、言語ごとの解析を個別に必須にしてある `CodeQL` の集約 check、pull request では skip される Unity の結果公開 job 2 本、そしてこの節の末尾で述べる `Publish the release` です。**したがって Web のレーンも、赤ければ merge を止めます。****昇格は証拠に従いますが、その証拠は誰かが見に行かないと出てきません。****skip された必須チェックは合格として通る**ので、その守りなしにそれらへ依存すると、壊れたビルドが通ってしまいます。**レーンは安定して緑になってから必須にします** —— ただし過去 2 回踏んだのは、その逆の形でした: **レーンを足したのに必須にしないまま置いたこと**が、「赤いのに merge できる」隙間そのものです。2026-08-29 までは Unity・lint・CodeQL の workflow がすべての pull request で走りながら必須ではなく、**赤いまま merge できました。CI が見ていることと CI が止めることは別で、ゲートなのは後者だけです。** 残る 3 つの workflow(`build-opencv`、`nightly`、`unity-probe`)は pull request では起動しないので、そもそも必須にできません。`release` は 2026-08-31 までその一覧にありました —— いまは pull request でも走ります。tag でしか走らなかった間に配布の経路に欠陥が 3 件たまり、**うち 1 件は「tag を打つとリリースが 1 件も作られない」というものでした。** その `Publish the release` job だけは必須にしません —— pull request では設計上 skip され、**skip は合格として通る**ので、必須にしても何も止まらないからです。

## 貢献とセキュリティ

Expand All @@ -258,7 +258,7 @@ Unity のレーンは Linux で走り、Windows の IL2CPP Player はローカ

このリポジトリ自身のソースは Apache License 2.0 です。**それだけでは、配布される binary にリンクされる third-party のコードの条件は決まりません** —— 固定した OpenCV のビルドが bundle するもののライセンスは [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) にあります。同ファイルは成果物が運ぶすべてのライセンスを列挙し、component ごとに **OpenCV 自身のどの静的ライブラリにコンパイルされているか**を述べます。SoftFloat・annoylib・MSCR の chi table・Rubik フォントが、zlib・libpng・libjpeg-turbo・libclapack と並んでリンクされています(**ライセンスファイルは入っているがリンクされていないもの**もいくつかあります)。**Rubik フォントは BSD 系ではなく SIL Open Font License なので、この集合は一様ではありません。** 依存は allowlist(`tools/verify-opencv-artifact.ps1`)で縛られ、ビルド profile ごとに文書化されています。

**そのうちどれが、あなたが再配布するプラグインに実際に届くかは、このプラグインがどの OpenCV module をリンクするかで決まり、それは何度か変わってきました。** いまは `core` / `imgproc` / `imgcodecs` / `objdetect` / `features` / `geometry` / `calib` / `stereo` をリンクしています(`imgcodecs` の前は `core` と `imgproc` だけでした)。**静的リンクは参照されたものしか引き込まない**ので、その module に入る関数が書かれるまで、その module のコードは配布ライブラリに 1 バイトも届きません。**書くことが引き込みます** —— Windows の debug ライブラリは encode / decode の関数が入ったときに 8,831,488 から 10,177,536 バイトへ(zlib / libpng / libjpeg-turbo が一緒に来ました)、QR と ORB が入ったときに 20,136,960 バイトへ(`annoylib` と MSCR の chi_table が `features` と一緒に来ました)増えました。いまは **22,283,264 バイト**です。**ここに記録してあった直前の値は 21,464,576 バイト**(`calibrateCamera` が入ったときの実測)ですが、**同じソースを M6 のあとで測り直すと 21,465,600 バイト**でした —— Web の作業がビルドを変えたのに誰も測り直していなかったので、差のうち 1,024 バイトはこの作業のものではありません。**2026-09 の API 拡張で入った 26 本(姿勢・ArUco・imgproc の実用関数・core の基本演算・特徴点マッチング・ステレオ視差)のぶんは 817,664 バイトです。****ビルドシステムに module を足すだけでは何も変わりません** —— `calib` をリンクしたときも `stereo` をリンクしたときも、実際にそこへ入る関数が書かれるまで、ライブラリの大きさはちょうど 0 バイトしか動きませんでした。
**そのうちどれが、あなたが再配布するプラグインに実際に届くかは、このプラグインがどの OpenCV module をリンクするかで決まり、それは何度か変わってきました。** いまは `core` / `imgproc` / `imgcodecs` / `objdetect` / `features` / `geometry` / `calib` / `stereo` / `dnn` をリンクしています(`imgcodecs` の前は `core` と `imgproc` だけでした)。**静的リンクは参照されたものしか引き込まない**ので、その module に入る関数が書かれるまで、その module のコードは配布ライブラリに 1 バイトも届きません。**書くことが引き込みます** —— Windows の debug ライブラリは encode / decode の関数が入ったときに 8,831,488 から 10,177,536 バイトへ(zlib / libpng / libjpeg-turbo が一緒に来ました)、QR と ORB が入ったときに 20,136,960 バイトへ(`annoylib` と MSCR の chi_table が `features` と一緒に来ました)増えました。いまは **22,283,264 バイト**です。**ここに記録してあった直前の値は 21,464,576 バイト**(`calibrateCamera` が入ったときの実測)ですが、**同じソースを M6 のあとで測り直すと 21,465,600 バイト**でした —— Web の作業がビルドを変えたのに誰も測り直していなかったので、差のうち 1,024 バイトはこの作業のものではありません。**2026-09 の API 拡張で入った 26 本(姿勢・ArUco・imgproc の実用関数・core の基本演算・特徴点マッチング・ステレオ視差)のぶんは 817,664 バイトです。****ビルドシステムに module を足すだけでは何も変わりません** —— `calib` をリンクしたときも `stereo` をリンクしたときも、実際にそこへ入る関数が書かれるまで、ライブラリの大きさはちょうど 0 バイトしか動きませんでした。

**この区別は失われやすく、このリポジトリも一時期それを失っていました。** 固定した OpenCV のビルドは最初から `imgcodecs` を含む構成で、`ocvu_get_build_information()` も「To be built」にそれを並べます —— **それは「OpenCV がその module を含めてビルドされた」であって「このプラグインがそれにリンクしている」ではありません。** リンクしていなかったのですが、決着をつけたのはリンカでした —— `cv::imencode` への最初の呼び出しが未解決の外部シンボルになったのです。

Expand Down
Loading
Loading