Skip to content

Releases: IronAdamant/Chisel

v0.9.2 — CI lint fixes

17 Apr 01:58

Choose a tag to compare

Fixed

Resolved 29 ruff errors that were blocking the CI matrix. No behavior changes.

  • chisel/engine.py: Moved JobCancelledError class and logger assignment below the import block (was triggering 12× E402). Removed unused StaticImportIndex import (F401). Removed unused lang = self.mapper.detect_framework(tf) local (F841).
  • chisel/mcp_server.py: Removed unused from socketserver import ThreadingMixIn (F401).
  • examples/extractors/lsp_symbol_extractor.py: Removed unused import uuid (F401).
  • examples/extractors/swift_syntax_extractor.py: Added # noqa: F403 / F405 on the star import and the symbols it provides (intentional — optional third-party dep).
  • tests/test_language_frameworks.py: Removed unused import os (F401).

ruff check . now passes; 777 tests pass locally.

Install

```bash
pip install chisel-test-impact==0.9.2
```

v0.9.1 — silent-swallow logging, auto_update hints, doc parity

17 Apr 01:58

Choose a tag to compare

Fixed

  • Silent exception swallowing:
    • engine._load_shard_config now logs a warning when .chisel/shards.toml fails to parse instead of silently returning an empty config.
    • storage._execute / _executemany emit a warning when SQLITE_BUSY persists past the retry cap (in addition to existing debug logs).
    • static_test_imports.StaticImportIndex debug-logs the path and error when an untracked test file can't be read, instead of silently skipping.
  • _try_auto_update race window: _scan_code_files() now runs inside the exclusive lock held by _try_auto_update, so concurrent writers can't add files between the scan and the hash-based change check.
  • auto_update skip reasons surfaced to agents: When auto_update=True is skipped (bg job running or >50 files changed), the response includes an explicit auto_update_skip_reason field and a reason-specific hint. Applied to suggest_tests and diff_impact stale-DB envelopes; test_gaps logs a warning. risk_map and triage already exposed this via _meta.

Changed

  • Documentation parity sweep: Tool count (22/2426 = 20 functional + 6 file-lock), CLI subcommand count (17/1828), and SQLite table count (10/1317) corrected across CLAUDE.md, README.md, CONTRIBUTING.md, ARCHITECTURE.md, COMPLETE_PROJECT_DOCUMENTATION.md, and wiki-local/spec-project.md. ARCHITECTURE.md tool table gained optimize_storage and cancel_job and fixed the file-lock tool names (acquire_lockacquire_file_lock, etc.) to match schemas.py.

v0.9.0 — Monorepo SQLite sharding, auto-fallback, chisel run

17 Apr 01:58

Choose a tag to compare

Highlights

Added

  • Monorepo SQLite sharding: Large repos can shard analysis data across multiple SQLite databases. Set CHISEL_SHARDS=frontend,backend (or create .chisel/shards.toml) to split data by top-level directory. All query tools auto-aggregate; write tools route to the correct shard by file path.
  • analyze auto-fallback to background job: With force=True on repos with >300 code files, analyze automatically queues a background job and returns {status: \"auto_queued\", job_id: ..., kind: \"analyze\"} to avoid MCP timeouts.
  • exclude_new_file_boost parameter: risk_map and triage accept exclude_new_file_boost=True to suppress the 0.5 new-file boost for stable long-term audits.
  • auto_update parameter for read-only tools: diff_impact, suggest_tests, risk_map, test_gaps, and triage accept auto_update=True — Chisel does a lightweight inline update() if the DB is stale. Capped at 50 changed files; skipped when a bg job is running.
  • chisel run CLI subcommand: chisel run -- <test-command> runs tests and calls record_result for each detected test. Supports pytest and Jest out of the box; Go and Rust scaffolded.
  • Extractor plugin examples: examples/extractors/tree_sitter_js_extractor.py, swift_syntax_extractor.py, lsp_symbol_extractor.py, plus docs/EXTRACTOR_ECOSYSTEM.md.

Changed

  • Documentation: README, docs/LLM_CONTRACT.md, docs/AGENT_PLAYBOOK.md, docs/CUSTOM_EXTRACTORS.md, and ARCHITECTURE updated for sharding, auto-fallback, and the extractor ecosystem.

See CHANGELOG.md for the full list.

v0.8.3 — version sync fix

17 Apr 01:57

Choose a tag to compare

Fixed

  • Version sync: chisel.__version__ was out of sync with pyproject.toml in the 0.8.2 release, causing CI failures. Realigned to 0.8.3.

v0.8.2 — optimize_storage, job cancellation, framework fixtures

17 Apr 01:57

Choose a tag to compare

Highlights

Added

  • optimize_storage MCP tool: Runs PRAGMA optimize and conditional VACUUM when the WAL grows large.
  • Incremental import graph rebuilds: _rebuild_import_edges() now only rebuilds edges for changed files — O(all_files)O(changed_files). Keeps 1k+ file monorepo updates under 3 seconds.
  • Directory-scoped suggest_tests: accepts a directory parameter and aggregates suggestions for all code files under that path.
  • Background job cancellation & events: cancel_job tool, cancel_requested_at flag, JobCancelledError, and a job_events table. analyze()/update() check for cancellation at phase boundaries.
  • Framework fixture test suite (tests/test_language_frameworks.py): C#, Java, Rust, Swift, and Go module-aware import resolution.
  • risk_map working_tree parameter: includes untracked code files in risk scoring with a new_file_boost of 0.5 so new files surface.
  • test_gaps working-tree elevation: gaps from untracked files sort to the top of the list.
  • suggest_tests/diff_impact directory-aware stem matching: same-directory tests strongly preferred over fuzzy substring matches.
  • diff_impact stale-DB detection: returns {status: \"stale_db\", ...} when changed files aren't in the DB.
  • suggest_tests auto-fallback: self-healing for newly tracked/created files with no edges.
  • start_job/job_status progress tracking: jobs report progress_pct (0–100).
  • Heuristic edge backfill during analyze/update: filename-based edges auto-created for test files with no DB edges.
  • Project fingerprint: stored in meta.project_fingerprint; warns on cross-project DB reuse.
  • MCP timeout hints: tool_analyze/tool_update recommend start_job for large repos.

Changed

  • Risk formula: new_file_boost (0.0/0.5) added. Files with no history and no tests score ~0.75 instead of ~0.25.
  • Coupling formula: import-graph coupling is now first-class — max(cochange, import, 0.5*cochange + 0.5*import).
  • risk_map defaults: coverage_mode=\"line\", proximity_adjustment=True.
  • Single-author co-change threshold halving: solo-dev commit patterns now surface coupling signal.
  • Coverage gap granularity: 4 → 20 quantization steps (0.05 increments).
  • Risk reweighting threshold: triggers on 2+ uniform components or any zero-valued uniform component.

Fixed

  • SQLite concurrency stability in storage.py (restored with self._conn as conn: wrappers).
  • risk_map crash with working_tree=true (KeyError: 'heuristic').
  • suggest_tests/diff_impact timeouts under working-tree load (StaticImportIndex caching).
  • storage.py read-only transaction error on SELECT queries.

See CHANGELOG.md for the full list.

v0.8.1 — working-tree output caps & diff_impact stem matching

17 Apr 01:57

Choose a tag to compare

Fixed

  • suggest_tests working-tree output cap: Added _WORKING_TREE_SUGGEST_LIMIT = 30 so results don't explode in large projects with many untracked files.
  • diff_impact stem-matching fallback: Untracked/changed files with no DB edges now fall back to stem-matching instead of returning empty results.
  • Version sync: chisel.__version__ realigned with pyproject.toml.

v0.8.0 — Dynamic require detection & shadow graph

17 Apr 01:57

Choose a tag to compare

Highlights

  • Variable taint tracking for JS/TS: const/let/var X = './path' assignments resolve require(variable) calls — known vars upgrade to tainted_import (confidence=1.0); unknown stay dynamic_import (confidence=0.3).
  • shadow_graph in stats: tool_stats() returns totals for call/import/dynamic/eval/tainted edges plus unknown_shadow_ratio.
  • Per-file dynamic risk fields in risk_map: shadow_edge_count, dynamic_edge_count, unknown_require_count, hidden_risk_factor.
  • coverage_depth added to risk formula (6th component): min(distinct_covering_tests/5, 1.0) with weight 0.10. test_instability weight reduced 0.10 → 0.05.
  • hidden_risk_factor: additive 0–0.15 from dynamic/eval edge density, computed separately from the 6-component reweighting.
  • Confidence-weighted edges: weight = proximity * sqrt(confidence) so low-confidence requires contribute proportionally less to impact scores.

Fixed

  • risk_map reweighting now correctly handles 6 components (was 5) when 3+ are uniform.

See CHANGELOG.md for the full list.

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.