Skip to content

docs: align README, CHANGELOG and CONTRIBUTING with actual state - #18

Merged
skateddu merged 1 commit into
mainfrom
docs/coherence-pass
Aug 13, 2026
Merged

docs: align README, CHANGELOG and CONTRIBUTING with actual state#18
skateddu merged 1 commit into
mainfrom
docs/coherence-pass

Conversation

@skateddu

Copy link
Copy Markdown
Owner

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

Where Was Is
Optional dependencies jq required by "enforce-uv, protect-main, auto-lint" All six hooks parse their payload with it — a partial install silently breaks session-start, guard-secrets and verify
Project tree ci.yml = "Lint + configuration validation" Also shellcheck and the hook tests
CI section intro "lints with ruff and validates configuration" The table below it already listed pytest
CI ruff row scope .claude/statusline.py and scripts/ pyproject.toml also includes tests/**/*.py

CONTRIBUTING.md was 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 need bash and jq (they skip without them, rather than fail).

Deliberately not changed: CLAUDE.md's verification command still omits scripts/validate_config.py. CLAUDE.md is 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:

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

  • Internal inconsistency fixed: the CI entry described a workflow of linting + shellcheck + validator, but the test step was added to that same workflow later in this unreleased cycle. Unreleased entries should describe where the cycle landed.
  • Section order: was Added, Removed, Fixed, Changed — matching neither Keep a Changelog nor this file's own released sections. Now Added, Changed, Removed, Fixed.
  • Bullet spacing normalised to match the released sections (contiguous, not blank-separated).
  • State duplication removed. Several entries restated README content rather than recording the change: the sandbox entry summarised the whole section including its footguns, the tuning-variables entry repeated semantics already in the README table, the /code-review entry 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.
  • One genuinely missing entry added: the linter's include/known-first-party extension, 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-uv hook denied the gh pr create call 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

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>
@skateddu
skateddu merged commit f340c8a into main Aug 13, 2026
1 check passed
@skateddu
skateddu deleted the docs/coherence-pass branch August 13, 2026 13:56
@skateddu
skateddu restored the docs/coherence-pass branch August 13, 2026 13:57
@skateddu
skateddu deleted the docs/coherence-pass branch August 13, 2026 13:58
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.

1 participant