docs: align README, CHANGELOG and CONTRIBUTING with actual state - #18
Merged
Conversation
The README had drifted into narrating change ("is now the default",
"has broken before") where it should describe the current state, and
carried four claims that no longer matched the repo: jq credited to
three of six hooks, a CI description predating the shellcheck and
pytest steps, and a ruff scope line missing tests/.
CONTRIBUTING told contributors to verify with ruff alone while CI runs
four checks, so it was possible to be green locally and red in CI.
The CHANGELOG's Unreleased section restated README content at length,
which would silently go stale, listed its sections in an order matching
neither Keep a Changelog nor its own released sections, and described a
CI workflow without the pytest step added later in the same cycle.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A coherence pass over the documentation: each file checked against the filesystem, against the CI definition, and against its own stated scope — the README describing current state, the CHANGELOG recording change.
Already coherent, for the record: the agent (13), command (10), rule (10), skill (22) and hook (6) tables match the files on disk exactly — no orphans, no omissions.
A. Claims that no longer matched the repo
jqrequired by "enforce-uv, protect-main, auto-lint"session-start,guard-secretsandverifyci.yml= "Lint + configuration validation"pytest.claude/statusline.pyandscripts/pyproject.tomlalso includestests/**/*.pyCONTRIBUTING.mdwas the one that could actually cost someone a red build. Its verification command ran the linter alone, while CI runs four checks — a contributor could pass locally and fail in CI. Both the Submitting Changes step and the Development Setup block now run the same four, with a note that CI also runs shellcheck and that the hook tests needbashandjq(they skip without them, rather than fail).Deliberately not changed:
CLAUDE.md's verification command still omitsscripts/validate_config.py.CLAUDE.mdis copied into downstream projects where that script does not exist, so its generic command is correct as-is.B. README passages that narrated change instead of state
Five places read as release notes rather than documentation:
rm -rf /through" — that is this repo's history (fix(hooks): correct PreToolUse if-condition syntax and add explicit settings defaults #10, fix(hooks): fix rm -rf boundary matching in protect-main.sh #11)Rewritten to state the current situation. The rationale for the hook tests survives intact without the history: a script can be syntactically clean, correctly wired, and still reach the wrong decision — shellcheck sees none of that.
C. CHANGELOG
Added, Removed, Fixed, Changed— matching neither Keep a Changelog nor this file's own released sections. NowAdded, Changed, Removed, Fixed./code-reviewentry described what the built-in command does. A changelog is frozen; the README evolves — that prose was guaranteed to drift into being wrong with nobody noticing. Each now records what changed and why, and points at the README for what it is. Net −2,261 characters with no factual loss.include/known-first-partyextension, which happened in ci: add lint and configuration validation workflow #16 and test: cover hook decisions with 65 behavioural tests #17 but was never recorded.Verification
All four checks and the 65 hook tests pass. The README's JSON block still parses and its internal anchor still resolves.
Side note found while opening this PR
The
enforce-uvhook denied thegh pr createcall that carried this description, because the text contained a verification command after&&and the hook's pattern reads the whole command string. A false positive on quoted text rather than an executed command — worth a look separately.🤖 Generated with Claude Code