npx claudepluginhub jamie-bitflight/claude_skills --plugin development-harnessThis skill uses the workspace's default tool permissions.
Stack-specific rules loaded by `dh:code-reviewer` when `pyproject.toml` or `*.py` files are detected.
Reviews Python code enforcing type hints, Pythonic patterns, naming clarity, imports, testing practices, and maintainability. Strict on existing code modifications.
Reviews Python code for type safety, error handling, security vulnerabilities, and performance issues. Reports findings by severity/location with fix examples.
Reviews Python code for type safety, error handling, security vulnerabilities, performance issues, and modern patterns. Use for code reviews, PRs, or quality assessments.
Share bugs, ideas, or general feedback.
Stack-specific rules loaded by dh:code-reviewer when pyproject.toml or *.py files are detected.
Any is only acceptable with an inline comment explaining why a specific type cannot be usedTypedDict is required for dicts that cross module boundaries; plain dict[str, ...] is only acceptable within a single functionOptional[X] is legacy — use X | None (Python 3.10+ union syntax)Union[X, Y] is legacy — use X | YNone must be explicit on functions that have no return value but have side effectsexcept: is a blocking finding — must be except ExceptionType:print() in library code (non-CLI, non-script) is a blocking finding (T201) — use logging instead% and .format() are legacy__all__ must be defined in modules that have public API surfaceuv add — fix the import, not the type checker# ty: ignore suppressions are prohibited — fix the code to satisfy tyty extra-paths in pyproject.toml must stay in sync with pytest pythonpathtest_<what>_when_<condition>_returns_<result> or test_<what>_when_<condition>_raises_<exception>assert result is not None is not a meaningful assertion — assert the actual expected value@pytest.mark.parametrizesrc/foo/bar.py → tests/foo/test_bar.pyuv run — bare python invocations are only acceptable in CI where the venv is pre-activateduv add — manual edits to pyproject.toml dependencies without running uv add leave the lockfile stale# /// script) and also add those deps via uv add --dev for IDE toolinguv run --script is used for standalone scripts with PEP 723 metadataexcept Exception: is a blocking finding unless immediately followed by a re-raise or very specific loggingexcept blocks are a blocking finding — they swallow all errors silentlyraise ValueError(f"Expected positive int, got {value!r}") not raise ValueError("invalid input")None or -1 on error without raising) require a documented contract — silence must be intentional and documentedmatch statements are preferred for multi-branch dispatch on type or value (over long if/elif chains)pathlib.Path is required for all file path operations — os.path is legacytomllib (stdlib in 3.11+) is used for reading TOML — do not add tomli as a dependencydatetime.UTC is used instead of datetime.timezone.utc (Python 3.11+)ExceptionGroup and except* are used for concurrent exception handling where appropriatestr.removeprefix() and str.removesuffix() replace manual slicing for prefix/suffix removal# WRONG: bare except
try:
do_thing()
except:
pass
# RIGHT: narrow except with action
try:
do_thing()
except ConnectionError as e:
logger.warning("Connection failed: %s", e)
raise
# WRONG: magic number
if status == 429:
...
# RIGHT: named constant
HTTP_TOO_MANY_REQUESTS = 429
if status == HTTP_TOO_MANY_REQUESTS:
...
# WRONG: os.path
import os
path = os.path.join(base, "config.toml")
# RIGHT: pathlib
from pathlib import Path
path = Path(base) / "config.toml"