Skip to content

Releases: IronAdamant/Chisel

chisel-test-impact 0.7.0

27 Mar 10:30

Choose a tag to compare

Highlights

  • Static test discovery: When DB test edges are missing, suggest_tests scans test files for require/import paths (merged with git/DB impact as hybrid when both agree).
  • Working tree: Untracked test files and git-untracked source paths participate in static resolution when working_tree=true.
  • Go: Import path resolution for static edges (with existing JS/TS/Python heuristics via import_graph).
  • diff_impact: Structured git_error with error, cwd, and hints when git is unavailable.
  • LLM contract: chisel/llm_contract.py, docs/LLM_CONTRACT.md, schema trust notes, improved next_steps for coupling (dict response) and suggest_tests.

Install: pip install chisel-test-impact==0.7.0

Stdlib-only core; see docs/ZERO_DEPS.md and docs/LLM_CONTRACT.md.

v0.6.5

27 Mar 07:59

Choose a tag to compare

[0.6.5] - 2026-03-27

Added

  • CHISEL_BOOTSTRAP: optional dotted import path loaded at ChiselEngine startup (chisel/bootstrap.py) so users can call register_extractor() without forking the CLI. Tree-sitter / other parsers remain user-installed — Chisel stays stdlib-only.
  • docs/CUSTOM_EXTRACTORS.md: full guide for register_extractor, bootstrap env, and optional third-party parsers.
  • examples/chisel_bootstrap_example.py: commented template for copy-paste.
  • tests/test_bootstrap.py for bootstrap loading.

Documentation

  • Cross-links from README, CONTRIBUTING, CLAUDE, docs/ZERO_DEPS.md, COMPLETE_PROJECT_DOCUMENTATION, ARCHITECTURE.

v0.6.4

27 Mar 03:15

Choose a tag to compare

[0.6.4] - 2026-03-27

Added

  • Import-graph test impact: get_impacted_tests / suggest_tests walk undirected static import edges to suggest tests that cover reachable modules (e.g. facade tests for inner modules). storage.py: get_importers(), get_imported_files().
  • tool_coupling: Numeric cochange_coupling, import_coupling, effective_coupling, plus breadth counts — import coupling stays visible in solo / low-commit repos.
  • Risk breakdown: coverage_fraction alongside quantized coverage_gap in compute_risk_score and get_risk_map.
  • diff_impact: On git failure, returns status: "git_error" with message, project_dir, and hint (never a silent empty list). CLI prints hint; next_steps suggests fixing project directory.

Changed

  • Docs: README, CLAUDE, ARCHITECTURE, COMPLETE_PROJECT_DOCUMENTATION, wiki-local/spec-project.md, CONTRIBUTING — agent-first, solo maintainer, multi-agent session positioning; MCP tool specs updated (22 tools, triage, locks, next_steps).
  • schemas.py: Tool descriptions for analyze, update, suggest_tests, coupling, diff_impact.

v0.6.2

22 Mar 06:47

Choose a tag to compare

Scale Fixes — Validated on Grafana (21k files, 62k code units)

Fixed

  • git_analyzer.py: Diff lines containing tabs were misidentified as numstat entries, causing ValueError crash on non-numeric fields like +. Now validates fields before parsing.

Changed

  • engine.py: Unit-level churn (git log -L per function) is now skipped when the repo exceeds 2,000 code files. Each function spawns a subprocess, making it O(n×m) — impractical for large monorepos. File-level churn is still computed for all files.

Stress Test Results (Grafana — 21,464 files)

Metric Value
Code files scanned 14,334
Code units extracted 62,379
Test files discovered 3,870
Test units parsed 5,389
Test edges built 22,155
Full analysis time ~3 minutes
risk_map (14k files) 0.8 seconds
test_gaps (48k results) 0.2 seconds

Full Changelog: v0.6.1...v0.6.2

v0.6.1

22 Mar 05:44

Choose a tag to compare

Fix Multi-Line Block Comments, Python 3.11+, Test Coverage

Fixed

  • _strip_strings_and_comments now tracks /* */ block comment state across lines — braces inside multi-line comments were being miscounted for C/C++/Java/Go/Rust/etc.
  • Removed dead Z-suffix workaround in _parse_iso_date (native since Python 3.11)

Changed

  • Minimum Python: 3.9 → 3.11 (3.9 is EOL, 3.10 EOL Oct 2026)
  • CI matrix: 3.11, 3.12, 3.13, 3.14

Added

  • Integration tests for tool_record_result and tool_stats
  • Tests for --limit CLI parameter and MCP limit pass-through
  • 6 tests for multi-line block comment handling
  • 553 tests total (up from 540)

Full Changelog: v0.6.0...v0.6.1

v0.6.0

22 Mar 05:29

Choose a tag to compare

Pluggable Extractors, Batch SQL, Cross-Platform Locks, Shared Reads

Four architectural improvements addressing scale, extensibility, and platform support.

Added

  • Pluggable AST extractors: register_extractor(language, fn) overrides built-in regex extractors with tree-sitter, LSP, or custom backends. Zero new dependencies.
  • Batch SQL queries: 5 new get_*_batch() methods eliminate N+1 pattern in risk_map computation (~5 queries instead of N×5)
  • Process-level read locks: All read tools acquire shared process locks for safe concurrent multi-process reads
  • Cross-platform ProcessLock: fcntl.flock on Unix, LockFileEx via ctypes on Windows — both support shared and exclusive locks
  • 18 new tests (540 total)

Changed

  • impact.get_risk_map() rewritten with batch queries
  • ProcessLock._acquire() uses platform-neutral exclusive: bool parameter

Full Changelog: v0.5.4...v0.6.0

v0.5.4

22 Mar 05:13

Choose a tag to compare

Codebase Audit — Simplify, Modernize, Fix Latent Bugs

Full audit via 7 parallel agents across all 12 source files.

Fixed

  • engine.py: Unhandled OSError when a file vanishes between scan and parse — now gracefully skips
  • schemas.py: Shared mutable _LIMIT_PROP dict across all tool schemas — now each gets its own copy
  • cli.py: record-result without --passed/--failed silently defaulted to "passed" — now required
  • glossary.md: Co-change coupling risk weight corrected (0.3 → 0.25), dispatch table location fixed

Changed

  • Simplified _detect_diff_base() with next(), removed dead getattr guards, set comprehensions
  • Walrus operator in get_changed_files(), dispatch dict replaces 11-branch if-chain in extract_test_dependencies()
  • test_mapper.py uses normalize_path() for cross-platform path consistency
  • Added Python 3.14 classifier
  • All documentation updated

Stats

  • 16 files changed, +117 / -55 lines
  • 522 tests pass, zero regressions

Full Changelog: v0.5.3...v0.5.4

v0.4.0 — Full audit, refactor, open-source readiness

18 Mar 02:13

Choose a tag to compare

What's New

Chisel v0.4.0 is the first release-quality version — a full codebase audit, architectural refactor, and open-source packaging in one release.

Highlights

  • PyPI readypip install chisel-test-impact (package name: chisel-test-impact)
  • MCP-first README — Claude Code and Cursor config snippets, 15-tool reference table
  • Architecture cleanup — 3 new modules (metrics.py, schemas.py), all modules under 510 LOC
  • Performance — failure rate caching eliminates N redundant DB scans in risk_map; co-change cap prevents O(k²) on bulk commits
  • 419 tests, zero lint errors, zero TODOs

Bug Fixes

  • TOCTOU race in cleanup_orphaned_test_results (now atomic)
  • Engine resource leak in mcp_stdio.create_server on failure
  • update() stats were incomplete vs analyze() (missing code_units_found)
  • None coercion bug in churn stat lookups

Breaking Changes

  • _test_instability() now accepts (test_ids, failure_rates) instead of (storage, test_ids)
  • compute_churn, compute_ownership, compute_co_changes moved from GitAnalyzer methods to standalone functions in chisel.metrics
  • _TOOL_SCHEMAS moved from mcp_server.py to schemas.py
  • Package name is chisel-test-impact (bare chisel is taken on PyPI)

Install

pip install chisel-test-impact

# With MCP support for Claude Code / Cursor:
pip install chisel-test-impact[mcp]

See README for MCP config snippets.

Full changelog: CHANGELOG.md