D-161: zero coverage is not a clean pass — Clojure gap names + -require-project - #131
Merged
Merged
Conversation
…re-project The swytchdb live scan walked a Leiningen project whose project.clj declares a JDBC driver with three real advisories, and exited 0 with "nothing to scan" — under -fail-on-incomplete. Verification narrowed the diagnosis: the D-59 recognized-manifest machinery already handles this (a bare pom.xml gates at exit 3 today); project.clj and deps.edn were simply missing from the gap tables. The genuinely open shape was a directory with NO recognized manifest, whose clean exit is deliberate for sweeps but wrong for a CI job pointed at a repo that must contain a project. - gap tables: project.clj (leiningen) and deps.edn (clojure), exact-name per the OPU-18 dedication rule (.clj/.edn are general extensions). A jepsen-shaped repo now discloses as incomplete coverage, emits a real JSON verdict, and fails -fail-on-incomplete at exit 3. - -require-project (opt-in): zero discovered projects fails the run at exit 3 instead of the clean nothing-to-scan pass, in both discovery modes. Defaults unchanged: sweeps still cross empty repos clean. Validation: two-sided CLI tests (d161_zero_coverage_test.go), mutation- checked (reverting the fix files fails all three new tests), live-fired on the original repro directories. Full suite green, -race clean on touched packages, gofmt/vet silent. D-161 entry appended to docs/DECISIONS.md. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018d8nb38Prtn8dzwep6jaH9
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
Closes the D-161 candidate from the 2026-08-28 swytchdb live scan:
swytch.jepsen— a Leiningen project whoseproject.cljdeclaresorg.postgresql:postgresql@42.7.4(3 real advisories) — producedno supported projects found (nothing to scan)at exit 0, with-fail-on-incompleteset.Verification narrowed the diagnosis
The report framed this as "
-fail-on-incompletepasses the zero-coverage case." That's half right. Reproduced live before writing any code:pom.xml) is disclosed as incomplete coverage and exits 3 under-fail-on-incompletetoday. The jepsen miss was two absent table entries —project.cljanddeps.ednwere simply not ingapManifestByName.Fix — two parts matching the two shapes
project.clj(leiningen) anddeps.edn(clojure) join the exact-name table (.clj/.ednare general extensions, so name-only per the OPU-18 dedication rule). A jepsen-shaped repo now discloses as incomplete coverage, emits a real JSON verdict (previously: no output at all — the report's third ask, satisfied by flowing through the normal pipeline), and fails-fail-on-incompleteat exit 3.-require-project(opt-in): zero discovered projects fails the run at exit 3 instead of the clean nothing-to-scan pass, in both recursive and-no-recursivemodes. Defaults unchanged: sweeps still cross empty repos clean, and-fail-on-incompletealone still passes a genuinely empty directory, because nothing was expected there.Validation
d161_zero_coverage_test.go): jepsen shape ungated (disclosed, exit 0) and gated (exit 3); empty dir clean by default and under-fail-on-incomplete, exit 3 under-require-projectin both modes;-require-projectpasses on a real project.-raceclean on touched packages, gofmt/vet silent.docs/DECISIONS.md.Not included (deliberate)
.rbis any Ruby source, so this needs real formula parsing, not a name-table entry. Left as the narrower ask the report itself judged it.🤖 Generated with Claude Code
Generated by Claude Code