---
name: frb-categorize-code-diff
description: Use when classifying a flutter_rust_bridge branch or PR diff into test and non-test changes, including colocated Rust test modules.
---

# 1 When to use

- Use this skill to answer which changes in a branch or PR are tests and which are not.
- Use the repository script instead of classifying paths by hand. Rust tests are commonly colocated in production `.rs` files.

## 2 Run

- Fetch the PR base before relying on `origin/master`.
- Run from the repository root:

```bash
uv run --no-project .claude/skills/frb-categorize-code-diff/categorize_code_diff.py --base origin/master --head HEAD
```

- Add `--json` when another tool will consume the result.
- Pass the PR's actual base revision when it is not `origin/master`.

## 3 Interpret

- `test-only`: every changed line is in a dedicated test path or a recognized colocated Rust test region.
- `non-test-only`: every changed line is outside recognized test code.
- `mixed`: the file contains both test and non-test changed lines.
- `unclassified`: the diff cannot be mapped confidently, such as a binary patch.
- Treat the non-test list as conservative. Unknown code is non-test rather than silently counted as test.

## 4 Reliability

- The script compares `base...head`, matching GitHub pull request diff semantics.
- Dedicated test paths include `test/`, `tests/`, `test_fixtures/`, and conventional test filenames.
- Rust inline classification recognizes brace-delimited items preceded by `#[cfg(test)]` or `#[test]` in both the base and head revisions.
- Re-run after every PR update. Line identities and rename targets may change.
- Inspect `mixed` files manually before claiming that a PR contains no production changes.

## 5 Validation

- Run the script tests after changing its classification logic:

```bash
PYTHONDONTWRITEBYTECODE=1 uv run --no-project --with pytest --with typer pytest -q .claude/skills/frb-categorize-code-diff/test_categorize_code_diff.py
```

- Keep `PYTHONDONTWRITEBYTECODE=1`; otherwise pytest leaves an untracked `__pycache__/` inside the skill directory.
