test(cli): kill the surviving mutants of the kernel and the runtime - #819
Merged
Conversation
2 tasks
Contributor
Author
This was referenced Sep 10, 2026
blafourcade
changed the base branch from
fix/telemetry-off-keeps-hook-executable
to
next
September 10, 2026 20:12
Every error class now has its exact name and message pinned, and the pure kernel helpers that had no test of their own (jsonc stripping, confined file names, the JSON narrowers, describeError, isMergeContentEmpty, removeRedundantGitkeeps) get one. The frontmatter parser, semver precedence, plugin-source messages and the built-cache path parsers are asserted structure by structure, so a dropped anchor, a swapped join or a missing branch turns a test red. Kernel scope, every mutant replayed: 75.2 to 97.1 (killed 1449, timeout 32, survived 45, uncovered 0 of 1526). The 45 left are documented equivalents plus seven stryker records as survived although the hand-applied mutation turns the named test red. Floor raised from 71 to 95. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb AIDD-Session-Id: 4acc9a1c-19bc-4468-b8b6-e86644bcba60
GitAdapter gets its first test, against a real temporary repository: hook install and removal under this CLI and under lefthook or husky, core.hooksPath, the trailer count and every answer of readCommitTrailerSetup. The auth adapters, the self-updater, the file adapter, the prompter, the HTTP client, the update check, the release resolver, the project-root and git-environment helpers and the composition root (createDeps, wireTools, the build registry) are asserted on their exact commands, messages, headers and shapes. The removal test found a defect rather than a mutant: prepare-commit-msg lost its executable bit. The fix ships on its own in #818, which this branch sits on. Runtime scope, every mutant replayed: 69.8 to 92.2 (killed 1182, timeout 16, survived 88, uncovered 13 of 1299). Floor raised from 67 to 90. Two POSIX-only checks skip where the platform cannot show them: a mode bit on Windows, and a read-only directory on Windows or as root. Refs #799 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb AIDD-Session-Id: 4acc9a1c-19bc-4468-b8b6-e86644bcba60
Windows CI failed two readCommitTrailerSetup tests that expect a hook or a delegate to read as not executable: there `access(X_OK)` answers like `F_OK`, so every existing file reads as executable, and git needs no mode bit to run a hook. They skip on Windows, as the removal test already does. Refs #799 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb AIDD-Session-Id: 4acc9a1c-19bc-4468-b8b6-e86644bcba60
The same Windows explanation sat above three skips. Stacked with the telemetry tests, the repetition pushed tests/ past its comment baseline (2989 against 2987); one named predicate says it once. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb AIDD-Session-Id: 4acc9a1c-19bc-4468-b8b6-e86644bcba60
blafourcade
force-pushed
the
test/kernel-runtime-survivors-2
branch
from
September 10, 2026 20:16
2c33f9e to
1ff666a
Compare
This was referenced Sep 11, 2026
blafourcade
added a commit
that referenced
this pull request
Sep 11, 2026
GitHub closes a pull request whose base branch is deleted, unless the merge itself deletes it. Deleting the base of #819 through the API after #818 merged closed #819 instead of retargeting it. `vcs.md` now says to retarget first, and how to replay a dependent branch after its base was squashed. Fixes #843 Claude-Session: https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb AIDD-Session-Id: 4acc9a1c-19bc-4468-b8b6-e86644bcba60 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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 & why
Fourth and fifth lots of #799. The
kernelandruntimemutation scopes held floors of 71 and 67.GitAdapterhad no test at all. This PR adds the tests their survivors named. It changes no source.Stacked on #818. The runtime lot found a real defect:
telemetry offdropped the executable bit of a person's own commit hook. Its fix ships on its own in #818, and this branch sits on it. Review #818 first. Once it merges, this PR's diff againstnextis tests only.🛠️ How it works
kernelruntimenameandmessage, plus the markdown, semver, source, file, merge, paths, and JSON/JSONC reading helpers.GitAdaptertest, on a real temporary repository. The auth adapters, self-updater, file adapter, prompter, HTTP client, update check and release resolver are asserted on exact commands, messages and headers, and so is the composition root.🧪 How to verify
kernelandruntimemutation gates on this PR.file-adapter-edgesare not skipped on Windows. The Windows job decides whether they need to be.jsonc.tsare killed by stryker's timeout, not by an assertion.🔗 Linked issue
Refs #799. Only the profile pockets remain after this.
✅ I certify
🤖 Generated with Claude Code
https://claude.ai/code/session_011x4ms5qcGuZgYhCxfdHMUb