feat(validator): add dev dependency-group and close asf-coupling-lint known gap#538
Conversation
… known gap Add the missing [dependency-groups] dev section to tools/skill-and-tool-validator/pyproject.toml so that the spec's validation command (uv run --project ... --group dev pytest) works. The validate_asf_coupling check (SOFT check apache#10), its patterns, and the full TestValidateAsfCoupling test class were already present in the source; 258 tests pass, and skill-and-tool-validate surfaces 86 advisory asf-coupling warnings on the live repo with no hard failures. Update specs/project-agnosticism.md Known-gaps to replace "No automated ASF-coupling lint exists" with the current state: the lint is live and advisory, and the remaining work is acting on the flagged coupling hits. Generated-by: Claude (Opus 4.7)
…irflow-steward into asf-coupling-lint
Correctness[advisory] tools/spec-loop/specs/project-agnosticism.md:127-133: the rewrite hardcodes an exact count ("The 86 advisory hits in the current catalogue"). surfaces coupled tokens automatically on every validator run. The 86 Rule: a frozen exact number drifts as the skill catalogue changes, re-introducing the doc/reality mismatch this PR exists to close. Prefer "~86 today" or describe the token categories without pinning a count. [advisory] tools/skill-and-tool-validator/pyproject.toml:84-89: the dev group adds ruff and mypy, but the spec's documented validation command only invokes pytest. They are declared but not wired into any gate, so they won't actually run unless CI or the spec calls them. "ruff>=0.6", Rule: dependencies that no command invokes are dead config until referenced. The actual validate_asf_coupling check already lives on main; this branch adds no logic, so there's no new code path to test beyond confirming the --group dev pytest invocation now resolves. Security[advisory] tools/skill-and-tool-validator/pyproject.toml:85-88: dev deps use floating >= lower bounds. "pytest>=8.0", Rule: floating specifiers are a supply-chain consideration, but uv.lock pins exact versions here, so reproducibility holds. No action required; noted for completeness. ConventionsNo findings. All three changed files are modifications (no new files, so SPDX headers are not required), no unsubstituted placeholders were introduced, and uv.lock was regenerated consistently with the new dev group. |
Summary
The
asf_couplinglint (SOFT check #10) and its fullTestValidateAsfCouplingtest class already shipped, but
tools/skill-and-tool-validator/pyproject.tomlhad no
[dependency-groups]dev section. That broke the spec's documentedvalidation command (
uv run --project ... --group dev pytest). This PR addsthe missing dev group and updates the spec to reflect that the lint now exists.
Changes
[dependency-groups]dev (pytest,ruff,mypy) totools/skill-and-tool-validator/pyproject.tomlso--group dev pytestruns.specs/project-agnosticism.md: replace"No automated ASF-coupling lint exists" with the current state. The check is
live and advisory; the remaining work is judging which of the flagged hits
warrant a placeholder or capability-flag change.
uv.lockfor the new dev dependencies.Testing
uv run --directory tools/skill-and-tool-validator --group dev pytest— 258 tests pass.uv run --directory tools/skill-and-tool-validator skill-and-tool-validate— surfaces 86 advisoryasf_couplingwarnings (barePMC,announce@apache.org,dist/dev/tokens) with no hard failures.Note
No production lint logic changes here; this only unblocks the test invocation
and corrects the spec's gap-tracking. The 86 advisory hits remain open as
follow-up candidates for generalisation.
Type of change
.claude/skills/<name>/) — eval fixtures updated belowtools/<system>/*.md)tools/*/withpyproject.toml)docs/,README.md,CONTRIBUTING.md)projects/_template/)prek, workflows, validators)Test plan
prek run --all-filespassesuv run pytest/ruff check/mypypasses(
PYTHONPATH=tools/skill-evals/src python3 -m skill_evals.runner tools/skill-evals/evals/<skill>/)(a regression test for the bug fixed / the behaviour added — see CONTRIBUTING.md)