← ClaudeAtlas

test-assertion-effectiveness--pass-listed

テストは存在するがアサーションが実質何も検証しておらず、実装が壊れても落ちない(常に PASS する)構造を diff-time で検出する。Check 1 missing assertion(テスト本体にアサーションが無い)、Check 2 tautological assertion(定数同士・入力自身・mock の戻り値自身を assert し SUT に依存しない)、Check 3 nonexistent expected literal(assertDontSee / assertNotContains 等の期待文字列が対象ファイルに実在しない)、Check 4 stale expected value(同一 diff で対象の���力が変わったのに期待値が据え置き)、Check 5 unscoped expectation(汎用的な属性・クラスを応答全体に対して assert し対象要素にスコープされていない)、Check 6 swallowed failure(例外の握り潰しや到達しない位置のアサーションで判定が成立しない)、の 6 Check を対象とする report-only。テストの有無は test-existence、未テスト経路の量は coverage-gap、非決定性は flaky-test、命名は test-naming、JS/TS の un-awaited resolves / rejects は vitest-mock-isolation、tdd-ledger artifact ベースの RED/GREEN 検証は plangate-tdd-evidence、.only / .skip / xit / @ts-ignore と空の catch は heuristic-review.mjs の決定論検出器へ委譲する
s977043/river-review · ★ 3 · Testing & QA · score 75
Install: claude install-skill s977043/river-review
## Naming / 命名 `skills/README.md` の Naming Q0–Q5 に従って決定した。Q0 では外部プロジェクトの成果物を取り込んでいないため「概念の再実装」に分類され、リネーム(新規命名)が既定となる。Q1 は衝突なし(`assertion` を含む skill id は既存に無い)、Q2・Q3 は参照元の原語が存在しないため適用外、Q4 で既存の `test-*` 命名ファミリ(`test-existence` / `test-naming` / `test-plan-review`)に整合することを確認し、Q5 で「価値(アサーションが有効であること)を名指す」名として `test-assertion-effectiveness` を採用した。機構名(tautology 検出・grep 照合)ではなく価値を名指す点が Q5 の要件である。 ## Pattern declaration Primary pattern: Reviewer Secondary patterns: Inversion Why: アサーションの形はパターンとして拾えるが、「そのアサーションが SUT の挙動に依存しているか」の判定は意味的であり、期待値の照合先(テンプレート・コンポーネント)が discover できない差分では実行を止めるゲートが必要である。 ## Goal / 目的 テストの「有無」や「粒度」は既存 skill が見るが、**書かれたアサーションが実際に失敗しうるか**は誰も見ていない。アサーションが無効なテストは行を通過するためカバレッジ指標にも現れず、CI が緑であることも有効性の証明にならない(レビュー時点の CI が古い sha で緑だった実例が #1684 に記録されている)。この盲点を diff-time の静的観点として埋める。 次の 6 Check のいずれかに該当し、**そのテストが実装の退行を検知できない**と読み取れる場合に指摘する。report-only(ADR-005)であり、finding / question のみを出力して自動修正はしない。 ## Non-goals / 扱わないこと(委譲表) | 隣接領域 | 委譲先 | 分界 | | ---------------------------------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | テストが存在しない