Skip to content

chore: drop the unproduced coverage badge, ignore .DS_Store - #324

Open
OmarAlJarrah wants to merge 1 commit into
mainfrom
chore/coverage-badge-and-gitignore
Open

chore: drop the unproduced coverage badge, ignore .DS_Store#324
OmarAlJarrah wants to merge 1 commit into
mainfrom
chore/coverage-badge-and-gitignore

Conversation

@OmarAlJarrah

@OmarAlJarrah OmarAlJarrah commented Aug 9, 2026

Copy link
Copy Markdown
Member

Summary

Two README/.gitignore hygiene problems, both cases of the shared files carrying a claim or an
entry that nothing in this project backs.

The coverage badge is removed rather than generated. README.md:16 was a literal
img.shields.io/badge/coverage-100%25-success.svg with the value baked into the URL path. Nothing
computes it: .github/ contains exactly one file, workflows/gate.yml, and it has no coverage
upload, gist write, or badge action — its coverage step runs scripts/check-coverage.sh, which
prints and exits. So the badge asserted 100% unconditionally and could not go red, which is the
worst property a badge can have.

Of the two honest options — publish the number from CI, or drop it — dropping it is the better
trade here:

  • The live workflow badge on the line above (README.md:13) already carries the signal.
    coverage is a required step of the single gate job, so a coverage regression fails the job
    and turns that badge red. A generated shields badge would report the same one bit through extra
    machinery (a gist plus a token, or a third-party action) that the repo does not have today.
  • There is no interesting number to publish. Coverage here is a binary gate at exactly 100%, not a
    trend line — check-coverage.sh fails the build on one uncovered statement. A badge reading
    "100%" is only ever restating "the build passed".
  • CLAUDE.md already settles the general case: derive counts, never maintain them, and if a claim
    about code must be written down, name the revision it was true at
    . A hardcoded badge is a
    maintained count with no revision attached.

The MIT and Go-version badges stay. MIT is immutable; the go-1.26 badge is a version claim that
floats with the toolchain pin and is being handled under #61, so it is deliberately untouched here.

.gitignore now lists only what this project produces. Removed four per-contributor tooling
paths — .superpowers/, docs/superpowers/, .claude/, .crush/. None has ever appeared in a
commit (git log --all -- <path> is empty for all four), and docs/superpowers/ was explicitly
untracked in 0b69247 chore: stop tracking local SDD planning docs precisely because those files
are local, which is the argument for keeping the rule per-clone rather than shared. Contributors
who run any of that tooling should put these in .git/info/exclude or a global
core.excludesFile:

printf '%s\n' .superpowers/ docs/superpowers/ .claude/ .crush/ >> .git/info/exclude

Added .DS_Store, which was untracked and unmatched by any rule in a repo developed on macOS —
it sits in the working copy right now and would be committed by accident before any of the entries
above caused trouble. .idea/ and .vscode/ were already ignored, so the omission was an
inconsistency rather than a policy. Nothing else is missing: cover.out is covered by *.out, the
CLI binary by /morphic, verify-atomic-output.sh works in mktemp -d outside the tree, and
go build ./... leaves no binaries behind (verified). No speculative entries were added for
platforms or tools this repo shows no evidence of.

/out.json, /logs.txt and /pets.json are kept. They are repo-root scratch outputs of real CLI
runs and #11 settled that they belong in the shared file.

Ordering. README.md is also being rewritten by #315, which reworks the Building and Testing
sections. This change touches only the badge block at the top, which #315 does not, so the two
merge cleanly in either order. The related "overall and per package" coverage claim further down
the README is already corrected by #315 and is left alone here to avoid a conflict. gate.yml is
untouched for the same reason — that file has other changes in flight, and dropping the badge needs
nothing from CI.

Test plan

  • git check-ignore -v .DS_Store exits 0 (.gitignore:36) where it exited 1 before, and
    git status --porcelain no longer lists ?? .DS_Store. Deleting just that one line restores
    both failures, confirming the rule is what does the work.
  • git check-ignore on the four removed paths reports not-ignored from the tracked file, and
    resolves from .git/info/exclude once migrated there.
  • grep -rn 'badge\|shields' README.md docs/ returns only the gate, MIT and Go badges — no
    remaining reference to the coverage badge anywhere in the docs.
  • Full gate green: gofmt, go vet, golangci-lint run, go build ./...,
    scripts/check-coverage.sh (all 4942 statements covered). No Go code changed.

Closes #91

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.

repo: static coverage badge and internal gitignore entries

1 participant