aboutsummaryrefslogtreecommitdiff
path: root/languages/elisp
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-18 20:08:49 -0500
committerCraig Jennings <c@cjennings.net>2026-07-18 20:08:49 -0500
commit2cb7c1b3957193f74b1ecd1b5e0f437e13092eb1 (patch)
tree592422ceae292000e23e4266fd344dff12f6f4dd /languages/elisp
parent8197feaae53afea17ac96a72b5a1ad9f67d1ae59 (diff)
downloadrulesets-2cb7c1b3957193f74b1ecd1b5e0f437e13092eb1.tar.gz
rulesets-2cb7c1b3957193f74b1ecd1b5e0f437e13092eb1.zip
docs(elisp): mark coverage-summary.el as a local-only helper
The elisp bundle installs coverage-summary.el into .claude/scripts/, which is gitignored in code projects, so CI can't run make coverage-summary against it. That's intentional (Craig, 2026-06-28): it stays a developer-run check, not a CI gate. Stated the local-only status in the script's commentary header and in elisp-testing.md's coverage section so the gitignored install reads as by-design rather than a gap.
Diffstat (limited to 'languages/elisp')
-rw-r--r--languages/elisp/claude/rules/elisp-testing.md2
-rw-r--r--languages/elisp/claude/scripts/coverage-summary.el11
2 files changed, 11 insertions, 2 deletions
diff --git a/languages/elisp/claude/rules/elisp-testing.md b/languages/elisp/claude/rules/elisp-testing.md
index 7c3a9ef..1ac76a0 100644
--- a/languages/elisp/claude/rules/elisp-testing.md
+++ b/languages/elisp/claude/rules/elisp-testing.md
@@ -43,6 +43,8 @@ The bundle ships a coverage summary at `.claude/scripts/coverage-summary.el` and
The number to watch is the missing-file count. A module no test loads never appears in the SimpleCov report, so a line-weighted total skips it silently — the suite looks healthier than it is. The summary counts every `modules/*.el` on disk that's absent from the report as 0%, so an untested module drags the project number down where you can see it. Copy the fragment's targets into your own Makefile to adopt it; the bundle never edits your Makefile.
+This is a local-only helper by design. `.claude/scripts/` is gitignored in code projects, so `coverage-summary.el` is untracked and CI never runs `make coverage-summary` against it — it's a developer-run check, not a CI gate. A gitignored install is intentional, not a coverage gap; don't move the script to a tracked `scripts/` dir to make CI pick it up.
+
## TDD Workflow
Write the failing test first. A failing test proves you understand the change. Assume the bug is in production code until the test proves otherwise — never fix the test before proving the test is wrong.
diff --git a/languages/elisp/claude/scripts/coverage-summary.el b/languages/elisp/claude/scripts/coverage-summary.el
index 4b7f5c9..ed7ecfc 100644
--- a/languages/elisp/claude/scripts/coverage-summary.el
+++ b/languages/elisp/claude/scripts/coverage-summary.el
@@ -11,8 +11,15 @@
;; by file rather than by line, so untested modules are visible.
;;
;; Self-contained on purpose — it ships into a project's =.claude/scripts/= and
-;; must run with nothing but stock Emacs (`json' is built in). The SimpleCov
-;; JSON shape it parses is:
+;; must run with nothing but stock Emacs (`json' is built in).
+;;
+;; Local-only helper (Craig, 2026-06-28). =.claude/scripts/= is gitignored in
+;; code projects, so this file is not tracked and CI cannot run
+;; `make coverage-summary' against it. That is intentional: it stays a
+;; developer-run helper, not shipped to a tracked =scripts/= dir and not a CI
+;; gate. A gitignored install here is the design, not a coverage gap.
+;;
+;; The SimpleCov JSON shape it parses is:
;; { <suite>: { "coverage": { <abs-path>: [null | 0 | int, ...] } } }
;; where a null entry is a non-executable line, 0 is executable-but-unhit, and
;; any positive integer is a hit. Data unions across multiple suite keys.