Repository navigation
fix: test-unity-tarball の Graphics 除外漏れと、setup-emsdk v16 への追随 - #73
Merged
Merged
Conversation
-testCategory '!Graphics' が無いまま -nographics で EditMode を走らせて いたため、GraphicsTests / GraphicsBenchmarkRunner が「スキップ」ではなく 「失敗」していた(graphicsDeviceType が Null になり、GL.Clear/ReadPixels が実際には描画しないまま 205,205,205 を返す。実測 2026-09-05)。 Test-UnityEditMode には M7a の 57212dc で同じ除外が入ったが、このレーンは 足し忘れた形で残った。CLAUDE.md が記録するとおり test-unity-tarball は どの workflow からも走らないため、誰も気づかないまま残っていた。 実測: - 修正前: 66 testcasecount, 60 passed, 6 failed (GraphicsTests.AGraphicsDeviceIsPresent / AsyncMatchesSync / SyncReadbackProducesTheExpectedPixels / TakingTheMatTwiceIsRejected / VerticalFlipIsApplied, GraphicsBenchmarkRunner.MeasureRenderTexturePaths) - 修正後: 59 testcasecount(Graphics カテゴリ 7 件を除外), 59 passed, 0 failed
Dependabot の PR #71 を人手で取り込む。GitHub は Dependabot 起動の run に repository secret を渡さないため、必須の Unity 2 レーンが `Missing Unity License File` で必ず落ちてボットの PR は green にならない (CLAUDE.md が記録する既定の扱い。#18-#26 と同じ形で処理する)。 4 ファイルとも同じ 1 行を上げるだけの変更(build-opencv.yml / ci-native.yml / ci-unity.yml / release.yml)。tools/tests/OpenCvConfig.Tests.ps1 が 「同じ action が全 workflow で単一の版に揃っていること」を見ているので、 実際に 3 ファイルだけ上げて FAIL を確認してから 4 つ目を直した: FAIL mymindstorm/setup-emsdk is referenced at one version across the workflows (saw: v14, v16) 4 ファイルとも揃えた後は PASS(`dev.ps1 test-tools`、exit 0)。 インストールされる Emscripten の版はこの action 自身の版とは別の `with: version:` パラメータで、`tools/emscripten-versions.psd1` から `steps.emver.outputs.version` 経由で渡る。今回はその解決ロジックにも 表にも触れていないので、Unity 同梱の Emscripten との対応は変わらない。
review-1(重要): Test-UnityTarball に直書きした '!Graphics' は、 OpenCvConfig.Tests.ps1 の突き合わせが Test-UnityEditMode しか見ていな かったため何にも縛られない第三のコピーだった。tools/dev.ps1 に $script:UnityGraphicsExclusionCategory を正本として 1 箇所定義し、 Test-UnityEditMode / Test-UnityTarball の両方をそこから読ませる。 検査側は (a) 定義がちょうど 1 回あること、(b) 両関数がその変数を 実際に -testCategory の引数として渡していること(コメント内の言及では 満たせない)、(c) 否定形の -testCategory をクォート文字列で直書きした 箇所が定義以外に無いこと、の 3 つを見るよう書き直した。 負の対照で確認: Test-UnityTarball の引数を再び '!Graphics' の直書きに 戻すと、(b) と (c) がそれぞれ独立に FAIL する(Test-UnityEditMode 側は PASS のまま)。戻すと 3 つとも PASS、dev.ps1 test も exit 0(116/116)。 途中で見つけた検査自体の欠陥: (b) の最初の版は関数本体の中に変数名の 「文字列」が現れるかだけを見ており、引数を直書きに戻してもコメントに 変数名を残せば PASS してしまった。コード上の引数の形 ('-testCategory', $script:UnityGraphicsExclusionCategory)そのものを 要求するよう直した。 review-3: tools/dev.ps1 のコメントが引用していた 57212dc は main から 辿れない未マージブランチの commit。squash 後の be5615f に差し替えた。 review-4: Test-UnityTarball 側のコメントを Test-UnityEditMode の定義へ のポインタに縮め、205,205,205 の説明と「どの workflow からも走らない」 という陳腐化しやすい記述を重複させるのをやめた。 review-2: CLAUDE.md の test-unity-tarball 行に Graphics カテゴリ除外の 記述が無かったので足した。test-unity-editmode 行の「58 件」は実測で 確かめると 59 件だった(unity-editmode.xml の testcasecount="59"、 tarball 側の 59 passed とも一致)ので実測値に直した。57 件からの 2 件分の由来は追っていない、と正直に書いた。tarball 行にも除外前後の 実測(66 passed/60 passed/6 failed → 59 passed/0 failed)を足した。 review-5: CiVisibilityTests.cs のコメントが「!Graphics 側は 1 レーン」 という前提で書かれていたのを、test-unity-tarball を含む 2 レーンに 直した。 review-6: unity-probe.yml は対象外(レビューで妥当と判定済み)。
… 59 件の由来 review-A: (b)($fnName が $script:UnityGraphicsExclusionCategory を渡し ているか)のメッセージが「コメントでは満たせない」と言い切っていたが、 実際には満たせる。負の対照で再現した: 引数を直書きの '!Graphics' に戻し、 コメントに同じ引数の形をそのまま書くと (b) は PASS のままだった。実際に 直書きへの回帰を捕まえるのは (c)(否定形リテラルの直書き検査)で、 (b)/(c) は対で初めて 1 つの門になる。両方のコメントとメッセージをその とおりに直した。 review-C: (c) は単一引用符の直書きしか見ておらず、`"-testCategory", "!Graphics"`(有効な PowerShell で挙動は同じ)を素通ししていた。負の 対照で確認済み(saw 0 のまま、(b) だけが落ちた)。クォート文字をクラス `['"]` に広げ、同じ入力で saw 1 になることを確認。splatting や文字列 連結はまだ素通りする——コメントにその限界を明記した。 review-D: (a)($script:UnityGraphicsExclusionCategory の定義がちょうど 1 回)の正規表現が `^` を列 0 に固定しており、関数内のインデントされた 再代入を数えていなかった。負の対照で確認済み(ダミーの再代入を関数内に 足しても saw 1 のまま緑だった)。`^\s*` に広げ、同じ入力で saw 2 になり 落ちることを確認。 3 つとも「負の対照を取り直す」よう指示されたとおり実施: 各々、直した 検査に対して壊れた入力を与えて落ちることを見てから、正しい入力に戻して 緑に戻ることを確認した(ログは report に貼ってある)。 review-B: CLAUDE.md の「57 件からの 2 件分の由来は未確認」を実際に確認 した。tests/UnityProject/Assets/Tests/EditMode/*.cs の [Test]/[UnityTest] 属性行を commit ごとに数えると、be5615f(M7 squash)で 65 件 (Graphics 7 件を除いて 58 件——旧記述はこの時点では正しかった)、 e1b0930(M7c、dnn プロファイル追加)で 66 件(除いて 59 件)。差の 1 件は ProfileGatingTests.cs に足された TheDnnPublicApiAssemblyIsAlsoAbsentWithoutItsDefine (同ファイル 5→6)で、この行を更新する commit がその後に続かなかった だけだと判明した。 review-E: tools/dev.ps1 内で「2026-09-10 に Test-UnityTarball が直書きの コピーを持っていた」という同じ経緯が定義側と Test-UnityTarball 側の 両方に書かれていたので、定義側(正本)だけに残し、Test-UnityTarball 側は 定義へのポインタに縮めた。
This was referenced Sep 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
2 件の独立した修正。どちらも CI からは見えない場所にある。
1.
test-unity-tarballが GPU に依るテストを-nographicsで走らせ、落としていたtools/dev.ps1のTest-UnityTarballは EditMode を-nographicsで起動するのに-testCategory '!Graphics'を渡していなかった。-nographicsの下ではgraphicsDeviceTypeがNullになり、RenderTexture.Create()は true を返すのにGL.Clearした色が読めない(205,205,205が返る)ので、[Category("Graphics")]のテストは skip されず fail する。実測(このマシン、2026-09-10):
除外されるのは 7 件(
GraphicsTestsの 6 件 +GraphicsBenchmarkRunnerの 1 件。カテゴリはクラス単位で付く)。うち 6 件が GPU を要して落ちており、7 件目のEveryCheckInTheSharedBodyIsWiredIntoThisEntryPointは配線を見るリフレクションのテストなので-nographicsでも通っていた。被覆の損失は無い。 その 7 件目は
test-unity-editmodeも!Graphicsで外しているので、もともとどのレーンからも見えていない。CiVisibilityTests自身とRenderTextureTests(GPU 非依存)はカテゴリ無しなので、このレーンで走り続ける。なぜ今まで誰も気づかなかったか: この抜けは M7a(
be5615f)で入った —— EditMode と Graphics の 2 レーンには足したが、このレーンには足し忘れた。CLAUDE.mdが記録しているとおりtest-unity-tarballはどの workflow からも走らないので、CI には映らない。2.
mymindstorm/setup-emsdkを v14 から v16 へ(#71 の内容)Dependabot の #71 と同じ 4 箇所(
build-opencv.yml/ci-native.yml/ci-unity.yml/release.yml)。blob ハッシュまで一致することを確認した。bot の PR は merge できない —— GitHub は Dependabot が起こした実行に secret を渡さないので、必須チェックである Unity の 2 レーンが
Missing Unity License Fileで必ず落ちる。#18〜#26 と同じく、差分を人の PR に取り込んで bot 側を閉じる。入れる Emscripten の版は動いていない。 action の版と
with: version:は別物で、後者は 4 本とも${{ steps.emver.outputs.version }}(tools/emscripten-versions.psd1由来)。EmscriptenVersion.Tests.ps1:100がリテラル直書きを禁じている。v16 のaction.ymlを取得して確認したところ、v14 の入力と既定値は据え置き、追加は任意のemsdk-version(既定"")のみで、実質の差はnode20 → node24。規律どおり 3 本だけ上げて検査が落ちるのを先に見た ——
tools/tests/OpenCvConfig.Tests.ps1がmymindstorm/setup-emsdk is referenced at one version... (saw: v14, v16)で FAIL し、4 本目を直して PASS。AI レビュー(PR 前、別エージェント 2 回)
1 回目: APPROVE WITH FINDINGS
'!Graphics'の 3 つ目の写しが何にも縛られていない。 版一致検査はTest-UnityEditModeを関数名で切り出すので、新しいリテラルは検査の外。その検査自身のコメントが「文字列を 2 度書くと片方だけ直して緑のまま残る —— このリポジトリが何度も踏んだ形」と警告している箇所dev.ps1に$script:UnityGraphicsExclusionCategoryを 1 つ定義し両レーンが参照。検査を 3 つの assertion に書き直したCLAUDE.md:82が除外に触れていない。併せて 79 行の「58 件」がずれている疑い57212dcが main から辿れない(squash 運用のため)be5615fに差し替え205,205,205は 8 箇所目で、後半はCLAUDE.mdの写しCiVisibilityTests.cs:29-31の「2 レーン」が 3 レーンになったunity-probe.ymlを触らない判断は妥当(手動のみ・結論済み・macOS leg はcontinue-on-error)2 回目(修正差分をスコープを絞って): APPROVE WITH FINDINGS
新規欠陥は無く、3 つの assertion が空振りしていないこと・旧検査の喪失が無いことをレビュアーが実測で確認。残った 5 件も直した。
CLAUDE.mdの「57→59 は追っていない」は 2 コマンドで解けるbe5615fで 65 件(65−7=58、当時の記載は正しかった)、e1b0930で 66 件(M7c がProfileGatingTestsに 1 件足した)。git diffで該当テスト名まで特定して記載^アンカーの範囲より広い(インデントされた再代入を数えない)^\s*に広げたdev.ps1の中で 2 回検査を足しただけでは足りなかったことが 2 度出た
どちらも壊して確かめたから分かったもので、確かめなければ「検査を足した」という記述だけが残っていた。
意図的に見送ったもの
.github/workflows/unity-probe.ymlにも同じ抜けがある。 EditMode を-nographicsで走らせるのにカテゴリを絞っていないので、いま起動すれば同じ 6 件が落ちる。触らなかった理由: このファイルは
workflow_dispatchのみの、結論を出すための一度きりの探査であって恒久レーンではない(CLAUDE.mdがそう記録している)。最終更新は 2026-09-01 で、Graphics カテゴリの機構(2026-09-05)より前。step のコメントが「何を走らせて何が分かったか」を記録しているので、引数を変えるとその記録と実物がずれる。レビュアーも妥当と裁定した。ここに書いてあるのは、この欠陥が消えないようにするためである —— 実装者の報告書は
.superpowers/にあり、.gitignoreで追跡外なので commit されない。確かめていないこと
testcasecount="59"と 66→59 の実測は実装者のもので、レビュアーは静的な件数(66−7)と git 履歴での整合までしか裏づけていないdev.ps1 testは私が独立に回して exit 0 / 196 passed を確認した