MAX_WORDS=2900 was calibrated to the corpus median density and carried no
margin: at the densest observed 7.22 chars/word (~1.81 tokens/word) it permits
~5,240 tokens against the 5,000 it proxies for. 2770 holds the worst observed
density under the ceiling. The largest SKILL.md is 2,489 words, so the change
costs nothing today — 281 words of margin — and the header comment now argues
the new calibration rather than swapping the digits.
Both enforcement points move together, and a new test asserts they agree, since
a SKILL.md passing its own audit while the commit hook blocks it is the
disagreement this pair exists to prevent.
CONTEXT.md is deliberately left ungated: it is 2,816 words, and gating it would
block the build. Recorded here so the omission reads as a decision rather than
an oversight.
skill-audit's manual-fallback path listed only the line ceiling, so an agent
taking that path passed an oversized SKILL.md the hook then rejected. The word
ceiling is now named alongside it. agent-audit is deliberately unchanged: the
size hook scopes to SKILL.md only and agent-audit's validate.sh has no word
gate, so claiming it there would be false.
The Vale research doc still showed the MDX {/* vale off */} form under a
Markdown heading, contradicting CONTEXT.md and vale-run's troubleshooting
reference — that form suppresses nothing in plain .md. Fixed in both places it
appeared.
tests/run-tests.sh used mapfile (bash 4.0+) with unguarded array expansion,
though AGENTS.md tells contributors to run it and macOS ships bash 3.2. It now
collects via a while-read loop over process substitution and guards every
expansion. The newline-delimited find|sort pipeline is kept rather than -print0
with sort -z, whose BSD portability is the weaker link, and which matches
mapfile -t's previous behaviour exactly.
Refs: #85
ADR: 0013
docs/
Plugin documentation. Not read automatically by Claude Code or GitHub Copilot CLI — reference specific files from skill bodies or agent prompts as needed.
research/
Upstream reference material gathered during skill authoring. Not shipped with the plugin — used at development time only.
| Path | Purpose |
|---|---|
research/docs/vale/ |
Vale documentation (vale.sh), gathered while authoring vale-config/vale-run — see below |
research/docs/vale/
| File | Covers |
|---|---|
overview.md |
What Vale is; the style/rule/check configuration model; the built-in Vale style's four rules; styles directory layout |
installation.md |
Installing Vale via OS package managers (Homebrew, Snap, Chocolatey) and Docker |
configuration.md |
.vale.ini structure — global, [formats], and per-glob sections |
cli-reference.md |
Core invocation and key subcommands/flags (vale sync, vale ls-config, etc.) |
examples.md |
Walkthroughs — project initialization, typical .vale.ini configs |
troubleshooting.md |
Suppressing false positives via inline markup (format-specific vale off/vale on syntax, spelling ignore lists) |
sources.md |
Provenance record for this directory — source URL, description, and which files above were extracted from it |
Each file's frontmatter carries a source_keys entry keyed to the same provenance record. The plugin-level provenance file, plugins/lint/sources.md, cross-references this directory from the context7-websites-vale-sh entry and lists the agents/skills whose content drew on it.
vale-config and vale-run are the skills that consume this research — read the relevant file here before changing either skill's Vale-facing behavior.