LintLang 0.3.8 adds a relational static check for a failure that per-tool validation cannot see: two individually valid tool definitions that do not explain how they differ.
The new capability: H1.6 pairwise differentia
H1.6 compares tool definitions within one parsed input. Under LintLang's curated synonym model, it reports a pair when one or both descriptions contain no distinguishing analysed term—a differentia that tells a reader when to choose one tool rather than the other.
It distinguishes two cases:
- Mutual: neither description distinguishes its tool.
- Domination: every analysed term in the less-specific description is covered by the other, so the finding identifies which description to repair.
Findings expose the precise H1.6 sub-code in terminal, Markdown, and JSON output while retaining H1 as the stable pattern family.
What is different about it
Schema validation assesses whether each tool is valid on its own. H1.6 examines the relationship between tools. That lets it surface some collisions that near-duplicate wording cannot—for example, descriptions whose meaningful terms differ only through synonyms even when ordinary word overlap is low.
The detector remains deterministic, local, and zero-LLM. It adds no API, telemetry, or network calls to scanning.
Release behavior
H1.6 findings are MEDIUM, producing REVIEW. Existing integrations using --fail-on fail continue to block only HIGH and CRITICAL findings. Teams that want H1.6 to gate CI can opt into --fail-on review after inspecting their baseline.
H1.6 includes regression guards for short tokens, singular/plural cardinality, non-Latin descriptions, explicit cross-references, and declared aliases. Human-readable reports now print the H1 sub-code that JSON already carries.
Upgrade
PyPI or pipx:
python -m pip install --upgrade lintlang==0.3.8
# or
pipx upgrade lintlangGitHub Actions:
- uses: hermes-labs-ai/lintlang@v0.3.8
with:
path: AGENTS.mdPre-commit:
repos:
- repo: https://github.com/hermes-labs-ai/lintlang
rev: v0.3.8
hooks:
- id: lintlang
args: [AGENTS.md]Evidence boundary
- Comparison scope is one parsed input. Directory scans do not aggregate tool definitions across files or infer a shared namespace.
- Matching uses a finite English synonym lexicon. A clean scan is not evidence that no ambiguous pair exists.
- Findings are static review signals; they do not demonstrate runtime tool-selection failure, certify safety, or replace evaluation and human review.
- H2, H4, and H5 still treat quoted antipattern examples as directives in some documentation. Use intentional scan paths or
.lintlangignorefor reference prose.
Citation-ready summary
LintLang 0.3.8 adds deterministic H1.6 pairwise differentia detection within one parsed input, identifying tool-description pairs that lack distinguishing analysed terms under a bounded synonym model.
Verification
At merge commit b90f3f6, all required hosted checks passed: Python 3.10, 3.11, 3.12, and 3.13, plus the GitHub Action smoke test. The local release gate passed 276 tests and 76 subtests, Ruff, staged-file hooks, package-boundary checks, and exact-snapshot sdist/wheel builds.
See the README for usage and scope, or the full changelog for the complete release record.