Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/toolchain/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "toolchain",
"version": "0.10.0",
"version": "0.10.1",
"description": "Repo-agnostic polyglot verification toolchain: build + test + lint for changed files across .NET, Python, TypeScript, Bash, PowerShell, Markdown, Go, YAML, and cross-cutting surfaces (`/toolchain:check`, `/toolchain:lint`), plus a re-runnable `/toolchain:setup` with check (report the configured ecosystems and their command surface) and apply (interview, infer, and write the tracked per-ecosystem command config those skills resolve first).",
"author": {
"name": "Melodic Software",
Expand Down
19 changes: 19 additions & 0 deletions plugins/toolchain/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,25 @@
All notable changes to the `toolchain` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.10.1]

### Fixed

- **`pyrightconfig.json` added to the python ecosystem detection `globs`.** A standalone
pyright-config-only change (`reference/ecosystems/python.yaml` `globs` previously covered only
`*.py`/`pyproject.toml`/`uv.lock`) is now auto-detected as python-affecting by `/toolchain:check`
and `/toolchain:lint` local runs, closing a coverage gap versus CI.
- **python `opt-in` reduced to its single gating condition.** The trailing semicolon-separated
pyright-mode clause structurally resembled the multi-clause per-tool `opt-in` form (per the
ecosystem-commands contract), risking a misread of python's single-condition (ruff config) gate as
multi-condition. The descriptive pyright-mode note is unchanged and already lives in the check
skill's `context/python.md` gotchas (single source of truth).
- **pyright documented as a hard prerequisite of the python default once ruff opts the ecosystem
in.** `context/python.md` now states that pyright shares the compound `check-cmd` with ruff and
tool presence is evaluated per ecosystem, so a ruff-configured project with pyright absent reports
a whole-ecosystem missing-tool `skip` (dropping ruff coverage) rather than skipping pyright alone —
install pyright alongside ruff. Follow-ups from PR #859 review, batched via #657 sweep; closes #1017.

## [0.10.0]

### Added
Expand Down
4 changes: 2 additions & 2 deletions plugins/toolchain/reference/ecosystems/python.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Bundled portable default — python. Rung-4 fallback ONLY (consumer
# .claude/ecosystems/python.yaml overrides key-by-key). Contract + schema:
# https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/ecosystem-commands/README.md
globs: ["*.py", "pyproject.toml", "uv.lock"]
globs: ["*.py", "pyproject.toml", "uv.lock", "pyrightconfig.json"]
project-discovery: ["pyproject.toml"]
build-cmd: null # no separate build step; lint/test cover verification
test-cmd: "uv run pytest -x -q" # plain pytest when the project doesn't use uv
check-cmd: "uv run ruff check . --no-fix && uv run ruff format . --check && uv run pyright"
fix-cmd: "uv run ruff check . --fix && uv run ruff format ." # pyright has no fix mode
opt-in: "ruff config (ruff.toml, .ruff.toml, or pyproject.toml [tool.ruff]); pyright runs in its default standard mode absent a pyrightconfig.json or pyproject.toml [tool.pyright]"
opt-in: "ruff config (ruff.toml, .ruff.toml, or pyproject.toml [tool.ruff])"
install-hint: "pip install ruff pyright uv | brew install uv ruff pyright | winget install astral-sh.uv"
2 changes: 2 additions & 0 deletions plugins/toolchain/skills/check/context/python.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Part of `check-cmd` (no fix mode — `fix-cmd` only runs the two ruff commands):
cd "$PROJECT_DIR" && uv run pyright
```

pyright is a **hard prerequisite** of the python default once ruff config opts the ecosystem in — it shares the single compound `check-cmd` with ruff, and tool presence is evaluated per ecosystem, not per tool. On a ruff-configured project with pyright absent, the whole ecosystem reports a missing-tool `skip` (dropping ruff coverage too) rather than skipping pyright alone. Install pyright alongside ruff (see the ecosystem's `install-hint`).
Comment thread
kyle-sexton marked this conversation as resolved.

## Gotchas

- **Use `uv run` prefix in uv-managed projects** (a `uv.lock` is the signal) — it ensures the managed virtualenv is used. In pip/poetry projects, use that project's documented invocation instead
Expand Down