Skip to content

kimera 0.1.2 gate, non-ASCII churn fix, release 0.10.1 - #6

Merged
giacope merged 4 commits into
mainfrom
claude/laughing-pascal-3vuexa
Sep 26, 2026
Merged

giacope merged 4 commits into
mainfrom
claude/laughing-pascal-3vuexa

Conversation

@giacope

@giacope giacope commented Sep 26, 2026

Copy link
Copy Markdown
Owner

This PR has four commits: two tighten the kimera gate, one fixes churn for non-ASCII file names, and one cuts 0.10.1.

1. kimera 0.1.2, with the gate workaround removed

  • Gemfile.lock: kimera 0.1.1 → 0.1.2, updated by bundle update kimera --conservative.
  • The CI mutation job no longer passes --no-fail-on-no-coverage or sets KIMERA=1. CONTRIBUTING's command changes to match.
    • The coverage flag was there because kimera 0.1.1 couldn't overlay methods in cli/flag.rb's Data.define block, so all of them were reported as uncovered. On that file, 0.1.1 reports 11/11 as no_coverage (gate exit 2), and 0.1.2 kills 11/11.
    • KIMERA=1 is no longer needed because 0.1.2 sets it in its own process before loading the suite. spec_helper's coverage floor still skips under it.
  • .kimera.yml: fail_on_no_coverage: true. A full run under 0.1.2 found 0 no_coverage mutants among 1,996.

2. fix(churn): count files whose names aren't ASCII

By default, git log --name-only quotes non-ASCII paths ("lib/caf\303\251.rb"), so churn never matched those files and scored them 0. GitLog now runs git with -c core.quotePath=false, which gives the raw bytes Churn already compares byte for byte (since #5).

The non-ASCII churn spec now runs with core.quotepath set to both true and false, under UTF-8 and US-ASCII default encodings. Before the fix it fails with churn 0 instead of 1; after the fix it passes. End to end, on a project with lib/café/menú.rb and git's default settings, churn goes from 0 to 1 under both locales.

3. Release 0.10.1

VERSION is now 0.10.1, the changelog heading ## [0.10.1] - 2026-09-26, and Gemfile.lock is regenerated by bundler. It's a patch release because the Unreleased section has only a "Fixed" heading. The format follows chore: release 0.10.0.

Verification (on this head)

  • bin/ci passes both with LANG=C.UTF-8 and with LANG/LC_ALL unset: rubocop, rubocop-kata doctor, 502 examples, the gate, and Ratchet OK: 16 edges, 0 findings, unchanged.
  • bundle exec kimera ci --since origin/main, run exactly as the new CI step (no KIMERA, no override flag), exits 0.
    • The only library line changed, the git log argument list, yields no mutants; the churn spec above covers it.
  • gem build hashira.gemspec produces hashira-0.10.1.gem.

Out of scope: 10 survivors already on main

A full kimera run has 10 surviving mutants, the same 10 under 0.1.1 and 0.1.2, so max_survivors: 0 already fails the full run on main. CI doesn't run the full suite, only changed lines per PR, so it never showed. Most are memoization guards (return @x if @x → if false). The others are fragment.mass >= PREFILTER → > in duplication/clusters.rb, a deleted walked in complexity/cognitive_score.rb, and an unless words.empty? → unless false in coupling/echo.rb. They need triage of their own.

After merge

Tag v0.10.1 on the merge commit, create the GitHub release, and gem push hashira-0.10.1.gem.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PcDfzLuRgjoSnfPLrTaA4h


Generated by Claude Code

kimera 0.1.2 overlays methods in a Data.define block, so cli/flag.rb's
mutants are judged (11 killed) instead of reported as no_coverage (11
under 0.1.1). The PR gate drops --no-fail-on-no-coverage: a changed
line no spec runs now fails it, as `kimera ci` intends.

0.1.2 also sets KIMERA=1 in its own process before loading the suite,
so the CI step and CONTRIBUTING no longer set it themselves;
spec_helper still skips the coverage floor under it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PcDfzLuRgjoSnfPLrTaA4h
A full run under kimera 0.1.2 reports no no_coverage mutants (1996
judged), so .kimera.yml gates on them like the PR gate now does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PcDfzLuRgjoSnfPLrTaA4h
git quotes non-ASCII paths in `log --name-only` by default
("lib/caf\303\251.rb"), so churn never matched those files and scored
them 0. GitLog runs git with -c core.quotePath=false, which yields the
raw bytes Churn already compares against.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PcDfzLuRgjoSnfPLrTaA4h
Fixes found by mutation-testing the suite with kimera, hashira no longer
crashing under a locale that isn't UTF-8, and churn for files whose
names aren't ASCII, since 0.10.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PcDfzLuRgjoSnfPLrTaA4h
@giacope
giacope merged commit 12f5055 into main Sep 26, 2026
4 checks passed
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.

2 participants