| title | Plugin checklist |
|---|---|
| created | 2026-07-25 |
| updated | 2026-07-30 |
Pre-release and quality checklist. Complete all items before tagging a release.
- Changes use Conventional Commit messages (release-please infers the bump)
- release-please's release PR is reviewed before merge (it bumps
pyproject.toml,.claude-plugin/plugin.json,.codex-plugin/plugin.json,gemini-extension.json, andCHANGELOG.md) - Do NOT hand-edit version strings (
server.jsonstays a0.0.0placeholder)
-
uv run ruff check src/passes (no lint errors) -
uv run ruff format --check src/passes (no format drift) -
uv run ty check src/passes (no type errors) -
uv run pytest -m "not slow and not integration"passes (all unit tests green) -
uv run pytest tests/safety/passes (destructive action guards verified) -
uv run pytest tests/schema/passes (GraphQL query validation)
- No credentials in code, docs, or commit history
-
~/.unraid-mcp/.envhaschmod 600permissions -
~/.unraid-mcp/directory haschmod 700permissions - Bearer token uses constant-time comparison (
hmac.compare_digest) - No sensitive values logged (even at DEBUG level)
-
UNRAID_MCP_BEARER_TOKENremoved fromos.environafter startup
-
.claude-plugin/plugin.jsonhas correctmcpServersconfig -
.codex-plugin/plugin.jsonhas correct interface metadata -
gemini-extension.jsonhas correctmcpServersandsettings -
server.jsonhas correct MCP registry schema and PyPI package info -
skills/unraid/SKILL.mdis up to date with all actions and subactions
-
Dockerfileuses multi-stage build (builder + runtime) - Runtime image runs as non-root user (
mcp:1000) -
HEALTHCHECKconfigured in Dockerfile -
docker-compose.yamlhealthcheck works for both HTTP and stdio transports - Resource limits set (1024M memory, 1.0 CPU)
- Credentials volume mount is named volume (not bind mount)
-
ci.ymllint, typecheck, test, version-sync, audit, gitleaks jobs pass -
docker-publish.ymlbuilds the release-onlylinux/amd64image on GitHub-hosted runners -
publish-pypi.ymltag-version check, PyPI publish, GitHub release, MCP registry publish all configured - Trivy vulnerability scan runs on published images
- No
hooks/directory exists underagents/unraid-py/(Claude Code hooks retired 2026-07-27) - Neither plugin manifest declares a
"hooks"key
-
CLAUDE.mdreflects current architecture and tool counts -
README.mdhas correct tool table and quick start examples -
skills/unraid/SKILL.mddocuments all 19 actions -
docs/directory is complete and has no template placeholders