Nullability Contract Review SKILL.md skillA
Nullability Contract Review from s977043/river-review is an agent skill: a SKILL.md folder an AI agent loads when a task calls for it.
mdr add s977043/river-review/Nullability Contract Review@v0.1.0Pins v0.1.0 in mdr.lock. Pin the fingerprint instead.
- Audit grade
- A, 17 of 17 checks passed
- Kind
- SKILL.md skill
- Repository
- s977043/river-review
- Path
skills/midstream/nullability-contract/SKILL.md- Versions recorded
- 4
- Latest version
- v0.1.0, committed Jul 11, 2026
- First version recorded
- Jun 29, 2026
- Size
- 6,015 bytes
- Repository stars
- 7
- License
- MIT
Detect null/undefined/empty handling gaps where callers or consumers may receive unexpected nullish values.
Collected from public GitHub. Every version is saved exactly as it was and never changes. Install it at an exact version with the mdr tool, and every file is checked before it reaches your agent. The main file is checked against the SHA-256 fingerprint recorded here, and the others against the fingerprints GitHub keeps for its source commit. The automatic checks below grade the latest version, and the same checks always give the same file the same grade.
What the file says
## Pattern declaration
Primary pattern: Reviewer
Secondary patterns: Inversion
Why: null/undefined/emptyの処理漏れはランタイムエラーの主要因。差分内の関数・API境界でnullability契約が明示・遵守されているかをレビューする。
## Rule / ルール
- 関数の戻り値がnull/undefinedを返す可能性がある場合、型シグネチャに明示する(`T | null`、`T | undefined`、`T | null | undefined`)。
- 呼び出し元でnull/undefinedチェックを省略しないこと。
- 配列・オブジェクトの空ケース(空配列`[]`、空オブジェクト`{}`)もnullと同様に考慮する。
- Optional chainingのみでは不十分な場合(次の処理でnullが伝播する場合)は明示的なearly returnを使用する。
## Heuristics / 判定の手がかり
- 戻り値型に`null`/`undefined`を含む関数の呼び出しで、nullチェックなしにプロパティアクセスや関数呼び出しが行われている。
- `Array.find()` / `Array.at()` など`undefined`を返しうる配列メソッドの結果を直接使用している。
- `Map.get()` の結果をノーチェックで使用している。
- オブジェクトのプロパティアクセスが深くネストされており、中間のnull可能性がケアされていない。
- `as string` / `!` などで型システムをバイパスしてnull可能性を握りつぶしている。
- `parseInt` / `parseFloat` / `Number()` / 暗黙の数値・文字列変換の結果を`NaN`チェックなしに使用しており、変換失敗が下流へ伝播する(型変換によるデータ損失)。
## Good / Bad Examples
- Good: `const item = map.get(key); if (!item) return null; return item.value;`
- Bad: `return map.get(key)!.value;`
- Good: `const found = items.find(x => x.id === id); if (!found) throw new Error(\`Item ${id} not found\`);`
- Bad: `return items.find(x => x.id === id).name;`
…Read the whole file at its exact version.
How to install
mdr add s977043/river-review/Nullability Contract Review@sha256:9f431abda97e5e8dThe line at the top of this page pins the label v0.1.0, which is what most people want. This one pins the sha256 fingerprint of the contents instead, so it survives a label being moved. Either way the exact version is written to mdr.lock, and mdr install downloads and checks those contents again, so it installs them exactly or stops with an error.
[](https://markdownregistry.com/a/art_pwodiimrovpad46n)
4 badge image fetches in 30 days. What the badge shows.
Versions
The registry has recorded 4 versions of this file, between Jun 29, 2026 and Jul 11, 2026, about one every 4 days.
| version | committed | commit | size | audit | |
|---|---|---|---|---|---|
| v0.1.0 latest | 2026-07-11 | ebf9f33 | 6,015 B | A | view · diff |
| v0.1.0 | 2026-07-10 | ba5b9db | 5,000 B | A | view · diff |
| v0.1.0 | 2026-06-29 | 45e66bc | 4,786 B | A | view · diff |
| v0.1.0 | 2026-06-29 | b988700 | 4,803 B | A | view |
Audit of the latest version
- pass: Frontmatter block present
- pass: Frontmatter declares a name
- pass: Frontmatter declares a description
- pass: Size between 200 bytes and 200 KB (6015 bytes)
- pass: No zero-width or bidi control characters
- pass: No instruction hidden inside an HTML comment
- pass: No link to an exfiltration or paste host
- pass: No credential-shaped string
- pass: No instruction to send local credentials anywhere
- pass: No text hidden with inline styles
- pass: No prompt-injection phrasing
- pass: No curl or wget piped into a shell
- pass: No recursive delete of root, home or parent
- pass: No instruction to read or print local credentials
- pass: No base64 blob over 200 characters
- pass: No link to a raw IP address
- pass: No script tag
Source
s977043/river-review · 7 stars · license MIT · pushed 2026-11-08 · branch main
API
GET https://markdownregistry.com/api/v1/artifacts/art_pwodiimrovpad46n GET https://markdownregistry.com/api/v1/resolve?ref=s977043/river-review/Nullability Contract Review GET https://markdownregistry.com/api/v1/blob/9f431abda97e5e8d70021602128465c55418e69aec2b830ae917401fd14571e9
Your AI assistant does the legwork. You hear about the deals worth your word. Hand yours the standing instructions at modelranch.com and it joins the network that reads files like this one.
Guides: the SKILL.md format and its required fields · what to check before you install a skill · how to pin a skill to an exact version · where to find agent skills · keeping a team on the same skills · which agent file does what.
More from s977043/river-review
Every file in s977043/river-review