Skip to content

feat(validator): add dev dependency-group and close asf-coupling-lint known gap#538

Merged
potiuk merged 3 commits into
apache:mainfrom
justinmclean:asf-coupling-lint
Jun 27, 2026
Merged

feat(validator): add dev dependency-group and close asf-coupling-lint known gap#538
potiuk merged 3 commits into
apache:mainfrom
justinmclean:asf-coupling-lint

Conversation

@justinmclean

Copy link
Copy Markdown
Member

Summary

The asf_coupling lint (SOFT check #10) and its full TestValidateAsfCoupling
test class already shipped, but tools/skill-and-tool-validator/pyproject.toml
had no [dependency-groups] dev section. That broke the spec's documented
validation command (uv run --project ... --group dev pytest). This PR adds
the missing dev group and updates the spec to reflect that the lint now exists.

Changes

  • Add [dependency-groups] dev (pytest, ruff, mypy) to
    tools/skill-and-tool-validator/pyproject.toml so --group dev pytest runs.
  • Rewrite the "Known gaps" entry in 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.
  • Regenerate uv.lock for 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 advisory asf_coupling warnings (bare PMC, 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

  • Skill change (.claude/skills/<name>/) — eval fixtures updated below
  • Tool / bridge contract (tools/<system>/*.md)
  • Python package (tools/*/ with pyproject.toml)
  • Groovy reference impl
  • Cross-cutting (RFC, AGENTS.md, sandbox, privacy-LLM)
  • Documentation (docs/, README.md, CONTRIBUTING.md)
  • Project template (projects/_template/)
  • CI / dev loop (prek, workflows, validators)
  • Other:

Test plan

  • prek run --all-files passes
  • For Python packages touched: uv run pytest / ruff check / mypy passes
  • For Groovy bridges touched: command-line invocation tested end-to-end
  • For skill changes: eval suite passes for the affected skill
    (PYTHONPATH=tools/skill-evals/src python3 -m skill_evals.runner tools/skill-evals/evals/<skill>/)
  • For skill behaviour changes: a new or updated eval fixture is included in this PR
    (a regression test for the bug fixed / the behaviour added — see CONTRIBUTING.md)
  • Other: see above

… 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)
@justinmclean justinmclean self-assigned this Jun 20, 2026
@justinmclean

Copy link
Copy Markdown
Member Author

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.

Conventions

No 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.

@potiuk potiuk merged commit 764cdb8 into apache:main Jun 27, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants