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.8.0",
"version": "0.9.0",
"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
13 changes: 13 additions & 0 deletions plugins/toolchain/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@
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.9.0]

### Added

- **`lychee-offline` added to the `cross-cutting` ecosystem default.** The bundled
`reference/ecosystems/cross-cutting.yaml` `check-cmd` now runs `lychee --offline --no-progress
'./**/*.md'` alongside `typos`/`gitleaks`/editorconfig-checker — on-disk link/anchor integrity,
network-free (`--offline` skips external URLs; only local file and fragment targets are verified).
Opt-in follows the same per-tool-config pattern as the existing cross-cutting tools: an optional
`lychee.toml` at repo root customizes the ruleset (exclusions, fragment-check mode), absent means
lychee's own defaults. `install-hint` gains the `lycheeverse.lychee` winget package / `lychee`
brew formula. Per Brief item 3, `docs/topics/lint-static-analysis-gaps/PLAN.md`. Closes #833.

## [0.8.0]

### Added
Expand Down
5 changes: 4 additions & 1 deletion plugins/toolchain/reference/ecosystems/cross-cutting.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ check-cmd: |
gitleaks detect --source . --redact --no-banner --no-git
# editorconfig-checker — binary name varies by install method (ec / editorconfig-checker / ec-windows-amd64)
"$EC_BIN"
# lychee-offline — on-disk link/anchor integrity; --offline = no network (external URLs skipped)
lychee --offline --no-progress './**/*.md'
Comment thread
kyle-sexton marked this conversation as resolved.
fix-cmd: null
opt-in: "each tool's own config at repo root (_typos.toml, .gitleaks.toml, .editorconfig-checker.json / .editorconfig)"
opt-in: "each tool's own config at repo root (_typos.toml, .gitleaks.toml, .editorconfig-checker.json / .editorconfig, lychee.toml)"
install-hint: |
typos: winget install Crate-CI.Typos | brew install typos-cli
gitleaks: winget install Gitleaks.Gitleaks | brew install gitleaks
editorconfig-checker: winget install EditorConfig-Checker.EditorConfig-Checker | brew install editorconfig-checker
lychee: winget install lycheeverse.lychee | brew install lychee
notes: "Lint-only — owned by /toolchain:lint. /toolchain:check does not run this ecosystem."
2 changes: 1 addition & 1 deletion plugins/toolchain/skills/lint/evals/evals.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"id": 3,
"name": "owns-yaml-and-cross-cutting-surfaces",
"prompt": "/toolchain:lint all — the change set includes a GitHub Actions workflow YAML and touches several text files across the repo.",
"expected_output": "Runs the lint-only `yaml` and `cross-cutting` surfaces that /toolchain:check does not — yaml for the workflow file, and cross-cutting (typos/gitleaks/editorconfig-checker) when any text file changed and the repo opts into those tools — resolving the editorconfig-checker binary-name variant before substituting it in.",
"expected_output": "Runs the lint-only `yaml` and `cross-cutting` surfaces that /toolchain:check does not — yaml for the workflow file, and cross-cutting (typos/gitleaks/editorconfig-checker/lychee-offline) when any text file changed and the repo opts into those tools — resolving the editorconfig-checker binary-name variant before substituting it in.",
"files": [],
"expectations": [
"Runs the `yaml` surface for the workflow file (a `/toolchain:lint`-only surface not covered by `/toolchain:check`)",
Expand Down
2 changes: 1 addition & 1 deletion plugins/toolchain/skills/setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ then specialize it to the repo:
- **markdown** — a markdownlint config present.
- **yaml** — `.github/workflows/` present (lint-only surface — `/toolchain:lint` runs it,
`/toolchain:check` does not).
- **cross-cutting** — repo-root config for `typos`/`gitleaks`/editorconfig-checker present (lint-only).
- **cross-cutting** — repo-root config for `typos`/`gitleaks`/`editorconfig-checker`/`lychee-offline` present (lint-only).

Repo-specific CI-parity gates beyond plain build/test/lint (lockfile drift, generated-artifact
freshness, schema regeneration) belong in the ecosystem file's `gates` array — draft one when the
Expand Down