Skip to content

診断の識別子の重複を試験で断つ - #260

Merged
routersys merged 1 commit into
mainfrom
dev/ComputeWeave.DiagnosticIdUniqueness
Sep 20, 2026
Merged

routersys merged 1 commit into
mainfrom
dev/ComputeWeave.DiagnosticIdUniqueness

Conversation

@routersys

@routersys routersys commented Sep 17, 2026 •

Copy link
Copy Markdown
Owner

Summary / 概要

生成器の記述子に同じ識別子を持つものが2つ在ることを、計算側と Direct2D 側のそれぞれで試験が断るようにしました。試験を1本ずつ足すだけで、製品の符号は動きません。

診断の識別子は、PR を書く時点で空いている次の番号を取ります。同じ時期に書かれた2本の PR は同じ番号を取り、しかも文字どおりには衝突せずに併合できます。開いている PR #257 と PR #258 がちょうどこの形で、どちらも Direct2D 側に CMPWD2D0102 を足していました。2本を併合した木を建てると、記述子は2つとも CMPWD2D0102 のまま誤りも警告も出ず、既存の試験は全て通ります。出荷の記録を見る解析器は識別子が記録に在ることしか確かめず、同梱する文書の件数の検査は重複を除いた識別子を数えるので、どちらも気付きません。

識別子を2つの記述子が共有すると、抑制、出荷の記録、利用者が読む説明のどれにとっても1つの規則になり、後に宣言された側は先の側の名前で報告されます。既存の試験が題名の重複を断っているのと同じ場所で、識別子の重複を断ちます。

Linked issue / 関連する課題

不要です。公開APIも診断も増えず、挙動も変わりません。

Kind / 種別

  • Analyzer or generator / アナライザーまたはジェネレーター

Behavior change / 挙動の変更

なしです。試験を2本足しただけで、製品の符号は1行も動いていません。

Verification / 検証

dotnet build tests/ComputeWeave.Tests.SourceGenerators/ComputeWeave.Tests.SourceGenerators.csproj -c Release -p:Platform=x64
dotnet tests/ComputeWeave.Tests.SourceGenerators/bin/x64/Release/net10.0/ComputeWeave.Tests.SourceGenerators.dll
dotnet build tests/ComputeWeave.D2D1.Tests.SourceGenerators/ComputeWeave.D2D1.Tests.SourceGenerators.csproj -c Release -p:Platform=x64
dotnet tests/ComputeWeave.D2D1.Tests.SourceGenerators/bin/x64/Release/net10.0/ComputeWeave.D2D1.Tests.SourceGenerators.dll

土台は fa7f369e、試験は 35622480 です。計算側の生成器は土台の616件に対して617件、Direct2D 側は240件に対して241件で、いずれも失敗0件です。

壊して落ちることを確かめました

試験をコミットしてから、識別子を重複させた木を3つ建てて同じスイートを走らせました。3つとも試験の注釈だけが違う ec334ea7 を土台にしています。3つとも構築は通り、出荷の記録を見る解析器の警告は0件で、落ちたのは足した試験1本だけです。既存の試験は全て通ります。

重複させ方 走らせたスイート 試験が名指したもの
計算側の記述子へ、既に在る CMPW0001 を持つ記述子を1つ足す 計算側 617件、失敗1 CMPW0001: Identifier taken twice / Invalid shader field
Direct2D 側の記述子へ、既に在る CMPWD2D0001 を持つ記述子を1つ足す Direct2D 側 241件、失敗1 CMPWD2D0001: Identifier taken twice / Invalid shader field
PR #257 と PR #258 を併合した木に、この試験を載せる Direct2D 側 249件、失敗1 CMPWD2D0102: Static field assigned by a static constructor / Thread synchronization intrinsic in a pixel shader

3つ目は、2本の PR をそのまま併合すれば既定ブランチに入っていた形そのもので、それを避けるために PR #257 は Direct2D 側の番号を CMPWD2D0103 へ移しました。この試験が先に入っていれば、同じ番号を取った2本目の PR は、既定ブランチを併合した時点の生成器の試験で落ち、併合してしまった場合も既定ブランチの CI で落ちます。

走らせていないもの

生成器の2本以外のスイートは手元では走らせていません。変更は生成器を試験する2つのプロジェクトにだけ在り、出荷する符号に触れないので、他のスイートへ届く経路がありません。

Checklist / 確認

  • The pull request is one logical change, with no unrelated refactoring or formatting. / 一つの論理的な変更にまとまっており、無関係な整理や整形を含まない。
  • Every commit builds on its own. / 各コミットが単独でビルドできる。
  • No commit already merged into the default branch or referenced by a release tag was rewritten. / 既定ブランチへ入った、またはリリースタグが指すコミットを書き換えていない。
  • The change follows the implementation pattern already established in the subsystem. / 変更は、その部分で既に確立された実装パターンに従っている。
  • Existing documentation comments were preserved. / 既存のドキュメントコメントを維持した。
  • No silent fallback behavior or compatibility shim was introduced. / 暗黙の代替動作や互換性のための繕いを持ち込んでいない。
  • No unrelated dependency was updated. / 無関係な依存関係を更新していない。

If this touches a guarded area / 慎重を要する箇所に触れる場合

  • Tests exercise the guarded behavior itself, and I confirmed they fail when that behavior is deliberately broken. / 試験が守るべき挙動そのものを動かしており、その挙動を意図的に壊すと落ちることを確認した。

Notes for the reviewer / 査読者への注記

件数の検査を変えなかった理由

同梱する文書の件数の検査は、記述子のファイルを文字列として読み、重複を除いた識別子を数えて README の数と突き合わせます。README が述べるのは規則の数なので、数える側は重複を除いたままにしました。重複そのものを断る場所は、記述子を反射で読む既存の試験の側に置きました。読む母集合が実際に出荷される記述子で、宣言を書き写した注釈や抑制を数に入れないためです。

前提が崩れたときの戻し方

試験は2本とも1つのメソッドで、他の試験や製品の符号から参照されません。消せば元に戻ります。

@routersys routersys added the analyzer or generator Analyzer or generator / アナライザーまたはジェネレーター label Sep 17, 2026
@github-actions

Copy link
Copy Markdown

PRレビュー / PR review

変更 2 ファイル、コミット 1 件。 / 2 files, 1 commits.

検証の要否 / Verification required

以下を走らせ、失敗した試験の名前と失敗の様子を変更前と突き合わせてください。総数だけで判断しないでください。
Run the following and compare the names and failure modes against the same suites before your change. Do not judge by totals alone.

dotnet build ComputeWeave.sln -c Release -p:Platform=x64

確認できた点 / Confirmed

  • 概要が書かれています。 / A summary is present.
  • 検証の結果が書かれています。 / Verification results are present.
  • 関連する課題が示されています。 / A linked issue is referenced.

これは自動の確認で、査読の代わりにはなりません。指摘は判断の材料であって、従う義務はありません。
This is an automated check, not a substitute for review. Findings are input to a decision, not obligations.

@routersys
routersys force-pushed the dev/ComputeWeave.DiagnosticIdUniqueness branch from ec334ea to 3562248 Compare September 17, 2026 00:54
@routersys
routersys merged commit dcfb38c into main Sep 20, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

analyzer or generator Analyzer or generator / アナライザーまたはジェネレーター

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant