[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-8035":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},8035,"mutant","mbj\u002Fmutant","mbj","Mutation testing for Ruby. AI writes your code. AI writes your tests. But who tests the tests?","",null,"Ruby",2160,160,29,116,0,1,8,22,66.82,"Other",false,"main",[25,26,27,28,29,5,30,31,32,33],"code-quality-analyzer","code-review","coverage","dynamic-analysis","minitest","mutation-testing","rspec","ruby","static-analysis","2026-06-12 04:00:37","mutant\n======\n\n[![Build Status](https:\u002F\u002Fgithub.com\u002Fmbj\u002Fmutant\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg?branch=main)](https:\u002F\u002Fgithub.com\u002Fmbj\u002Fmutant\u002Factions\u002Fworkflows\u002Fci.yml)\n[![Gem Version](https:\u002F\u002Fimg.shields.io\u002Fgem\u002Fv\u002Fmutant.svg)](https:\u002F\u002Frubygems.org\u002Fgems\u002Fmutant)\n[![Gem Downloads](https:\u002F\u002Fimg.shields.io\u002Fgem\u002Fdt\u002Fmutant.svg)](https:\u002F\u002Frubygems.org\u002Fgems\u002Fmutant)\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fmbj\u002Fmutant.svg)](https:\u002F\u002Fgithub.com\u002Fmbj\u002Fmutant)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F767914934016802818.svg)](https:\u002F\u002Fdiscord.gg\u002FBSr62b4RkV)\n\n## What is Mutant?\n\n**AI writes your code. AI writes your tests. But who tests the tests?**\n\nCopilot, Claude, and ChatGPT generate code faster than humans can review it. They'll even\nwrite tests that pass. But passing tests aren't the same as *meaningful* tests.\n\nMutant is mutation testing for Ruby. It systematically modifies your code and verifies your\ntests actually catch each change.\n\nThe more code AI writes for you, the more you need verification you can trust.\n\n## What is an Alive Mutation?\n\nEach surviving (alive) mutation is a call to action with exactly one of two options:\n\n- **Keep the mutated code** - your tests already specify the correct semantics, and the\n  original code is redundant. Accept the mutation as a simplification.\n- **Add the missing test** - the original code is correct, but the tests don't verify the\n  behavior the mutation removed.\n\n## Author\n\nMutant was created and is developed by [Markus Schirp](https:\u002F\u002Fschirp-dso.com).\nIt is the subject of [IEEE-published research](https:\u002F\u002Fieeexplore.ieee.org\u002Fdocument\u002F7107453\u002F)\nand is included in the [Trail of Bits Ruby Security Field Guide](https:\u002F\u002Ftrailofbits.github.io\u002Frubysec\u002Fmutant\u002Findex.html).\n\n## Quick Start\n\n```ruby\n# lib\u002Fperson.rb\nclass Person\n  def initialize(age:)\n    @age = age\n  end\n\n  def adult?\n    @age >= 18\n  end\nend\n```\n\n```ruby\n# spec\u002Fperson_spec.rb\nRSpec.describe Person do\n  describe '#adult?' do\n    it 'returns true for age 19' do\n      expect(Person.new(age: 19).adult?).to be(true)\n    end\n\n    it 'returns false for age 17' do\n      expect(Person.new(age: 17).adult?).to be(false)\n    end\n  end\nend\n```\n\nTests pass. But run mutant:\n\n```bash\ngem install mutant-rspec\nmutant run --use rspec --usage opensource --require .\u002Flib\u002Fperson 'Person#adult?'\n```\n\nMutant finds a surviving mutation indicating a shallow test:\n\n```diff\n def adult?\n-  @age >= 18\n+  @age > 18\n end\n```\n\nYour tests don't cover `age == 18`. The mutation from `>=` to `>` doesn't break them.\n\nThis is just one of many mutation operators. Mutant also mutates arithmetic, logical,\nbitwise operators, removes statements, modifies return values, and more.\n\nA full working example is available in the [quick_start](quick_start\u002F) directory.\n\n## Session History\n\nMutant records every run to `.mutant\u002Fresults\u002F`. You can recall past results\nwithout re-running mutation testing:\n\n```bash\n# List past sessions (most recent first)\nmutant session list\n\n# Show full report from the latest session\nmutant session show\n\n# Show full report from a specific session\nmutant session show --session-id 019cf6f1-77e8-74b6-82db-f8b5faf570cd\n\n# List subjects with alive\u002Ftotal mutation counts\nmutant session subject\n\n# Show alive mutations for a specific subject\nmutant session subject 'Foo::Bar#baz'\n\n# Remove old or incompatible session files\nmutant session gc --keep 50\n```\n\n## Next Steps\n\n1. Learn the [nomenclature](\u002Fdocs\u002Fnomenclature.md) (subjects, mutations, operators)\n2. Set up your [integration](\u002Fdocs\u002Fnomenclature.md#integration): [RSpec](\u002Fdocs\u002Fmutant-rspec.md) or [Minitest](\u002Fdocs\u002Fmutant-minitest.md)\n3. Run mutant on CI in [incremental](\u002Fdocs\u002Fincremental.md) mode\n\n## Ruby Versions\n\nMutant is supported on Linux and macOS.\n\n| Version | Runtime | Syntax | Mutations |\n| ------- | ------- | ------ | --------- |\n| 3.2     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| 3.3     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| 3.4     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| 4.0     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n\n## Licensing\n\n**Free for open source.** Use `--usage opensource` for public repositories.\n\n**Commercial use** requires a subscription ($30\u002Fmonth or $250\u002Fyear per developer).\n**Enterprise** — [reach out directly](mailto:info@schirp-dso.com?subject=Mutant%20Enterprise).\nSee [commercial licensing](\u002Fdocs\u002Fcommercial.md) for pricing and details.\n\n## Documentation\n\n* [Configuration](\u002Fdocs\u002Fconfiguration.md)\n* [RSpec Integration](\u002Fdocs\u002Fmutant-rspec.md)\n* [Minitest Integration](\u002Fdocs\u002Fmutant-minitest.md)\n* [Rails Integration](\u002Fdocs\u002Frails.md)\n* [Incremental Mode](\u002Fdocs\u002Fincremental.md)\n* [Reading Reports](\u002Fdocs\u002Freading-reports.md)\n* [Concurrency](\u002Fdocs\u002Fconcurrency.md)\n* [AST Pattern Matching](\u002Fdocs\u002Fast-pattern.md)\n* [Session JSON Schema](\u002Fdocs\u002Fsession-json-schema.yml)\n* [Hooks](\u002Fdocs\u002Fhooks.md)\n* [Sorbet](\u002Fdocs\u002Fsorbet.md)\n* [Nomenclature](\u002Fdocs\u002Fnomenclature.md)\n* [Limitations](\u002Fdocs\u002Flimitations.md)\n* [Mutant in the Wild](\u002Fdocs\u002Fin-the-wild.md)\n\n## Communication\n\n* [Discord](https:\u002F\u002Fdiscord.gg\u002FBSr62b4RkV)\n* [GitHub Issues](https:\u002F\u002Fgithub.com\u002Fmbj\u002Fmutant\u002Fissues)\n* [Release Announcements](https:\u002F\u002Fannounce.mutant.dev\u002Fsignup)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.\n\n## Acknowledgments\n\n* [Contributors](https:\u002F\u002Fgithub.com\u002Fmbj\u002Fmutant\u002Fgraphs\u002Fcontributors)\n* The `mutant-minitest` integration was sponsored by [Arkency](https:\u002F\u002Farkency.com\u002F)\n","Mutant 是一个用于 Ruby 代码的变异测试工具，旨在通过系统地修改代码来验证测试用例的有效性。其核心功能包括自动对代码进行微小变更（如改变运算符、删除语句等），并检查现有测试是否能够检测到这些变化，从而确保测试的全面性和准确性。Mutant 支持多种测试框架，如 Minitest 和 RSpec，并且提供详细的报告和历史记录功能，便于开发者追踪和分析测试结果。适用于任何希望提高代码质量、增强测试覆盖率的 Ruby 项目场景中，特别是在大量使用 AI 生成代码的情况下，确保测试不仅通过而且有效。",2,"2026-06-11 03:15:44","top_language"]