Releases: IronAdamant/Chisel
Releases · IronAdamant/Chisel
v0.9.2 — CI lint fixes
Fixed
Resolved 29 ruff errors that were blocking the CI matrix. No behavior changes.
chisel/engine.py: MovedJobCancelledErrorclass andloggerassignment below the import block (was triggering 12× E402). Removed unusedStaticImportIndeximport (F401). Removed unusedlang = self.mapper.detect_framework(tf)local (F841).chisel/mcp_server.py: Removed unusedfrom socketserver import ThreadingMixIn(F401).examples/extractors/lsp_symbol_extractor.py: Removed unusedimport uuid(F401).examples/extractors/swift_syntax_extractor.py: Added# noqa: F403 / F405on the star import and the symbols it provides (intentional — optional third-party dep).tests/test_language_frameworks.py: Removed unusedimport 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
Fixed
- Silent exception swallowing:
engine._load_shard_confignow logs a warning when.chisel/shards.tomlfails to parse instead of silently returning an empty config.storage._execute/_executemanyemit a warning whenSQLITE_BUSYpersists past the retry cap (in addition to existing debug logs).static_test_imports.StaticImportIndexdebug-logs the path and error when an untracked test file can't be read, instead of silently skipping.
_try_auto_updaterace 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_updateskip reasons surfaced to agents: Whenauto_update=Trueis skipped (bg job running or >50 files changed), the response includes an explicitauto_update_skip_reasonfield and a reason-specific hint. Applied tosuggest_testsanddiff_impactstale-DB envelopes;test_gapslogs a warning.risk_mapandtriagealready exposed this via_meta.
Changed
- Documentation parity sweep: Tool count (
22/24→26= 20 functional + 6 file-lock), CLI subcommand count (17/18→28), and SQLite table count (10/13→17) corrected across CLAUDE.md, README.md, CONTRIBUTING.md, ARCHITECTURE.md, COMPLETE_PROJECT_DOCUMENTATION.md, andwiki-local/spec-project.md. ARCHITECTURE.md tool table gainedoptimize_storageandcancel_joband fixed the file-lock tool names (acquire_lock→acquire_file_lock, etc.) to matchschemas.py.
v0.9.0 — Monorepo SQLite sharding, auto-fallback, chisel run
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. analyzeauto-fallback to background job: Withforce=Trueon repos with >300 code files,analyzeautomatically queues a background job and returns{status: \"auto_queued\", job_id: ..., kind: \"analyze\"}to avoid MCP timeouts.exclude_new_file_boostparameter:risk_mapandtriageacceptexclude_new_file_boost=Trueto suppress the 0.5 new-file boost for stable long-term audits.auto_updateparameter for read-only tools:diff_impact,suggest_tests,risk_map,test_gaps, andtriageacceptauto_update=True— Chisel does a lightweight inlineupdate()if the DB is stale. Capped at 50 changed files; skipped when a bg job is running.chisel runCLI subcommand:chisel run -- <test-command>runs tests and callsrecord_resultfor 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, plusdocs/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
Fixed
- Version sync:
chisel.__version__was out of sync withpyproject.tomlin the 0.8.2 release, causing CI failures. Realigned to 0.8.3.
v0.8.2 — optimize_storage, job cancellation, framework fixtures
Highlights
Added
optimize_storageMCP tool: RunsPRAGMA optimizeand conditionalVACUUMwhen 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 adirectoryparameter and aggregates suggestions for all code files under that path. - Background job cancellation & events:
cancel_jobtool,cancel_requested_atflag,JobCancelledError, and ajob_eventstable.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_mapworking_treeparameter: includes untracked code files in risk scoring with anew_file_boostof 0.5 so new files surface.test_gapsworking-tree elevation: gaps from untracked files sort to the top of the list.suggest_tests/diff_impactdirectory-aware stem matching: same-directory tests strongly preferred over fuzzy substring matches.diff_impactstale-DB detection: returns{status: \"stale_db\", ...}when changed files aren't in the DB.suggest_testsauto-fallback: self-healing for newly tracked/created files with no edges.start_job/job_statusprogress tracking: jobs reportprogress_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_updaterecommendstart_jobfor 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_mapdefaults: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(restoredwith self._conn as conn:wrappers). risk_mapcrash withworking_tree=true(KeyError: 'heuristic').suggest_tests/diff_impacttimeouts under working-tree load (StaticImportIndexcaching).storage.pyread-only transaction error on SELECT queries.
See CHANGELOG.md for the full list.
v0.8.1 — working-tree output caps & diff_impact stem matching
Fixed
suggest_testsworking-tree output cap: Added_WORKING_TREE_SUGGEST_LIMIT = 30so results don't explode in large projects with many untracked files.diff_impactstem-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 withpyproject.toml.
v0.8.0 — Dynamic require detection & shadow graph
Highlights
- Variable taint tracking for JS/TS:
const/let/var X = './path'assignments resolverequire(variable)calls — known vars upgrade totainted_import(confidence=1.0); unknown staydynamic_import(confidence=0.3). shadow_graphinstats:tool_stats()returns totals for call/import/dynamic/eval/tainted edges plusunknown_shadow_ratio.- Per-file dynamic risk fields in
risk_map:shadow_edge_count,dynamic_edge_count,unknown_require_count,hidden_risk_factor. coverage_depthadded to risk formula (6th component):min(distinct_covering_tests/5, 1.0)with weight 0.10.test_instabilityweight 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_mapreweighting now correctly handles 6 components (was 5) when 3+ are uniform.
See CHANGELOG.md for the full list.
chisel-test-impact 0.7.0
Highlights
- Static test discovery: When DB test edges are missing,
suggest_testsscans test files forrequire/importpaths (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: Structuredgit_errorwitherror,cwd, and hints when git is unavailable.- LLM contract:
chisel/llm_contract.py,docs/LLM_CONTRACT.md, schema trust notes, improvednext_stepsforcoupling(dict response) andsuggest_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
[0.6.5] - 2026-03-27
Added
CHISEL_BOOTSTRAP: optional dotted import path loaded atChiselEnginestartup (chisel/bootstrap.py) so users can callregister_extractor()without forking the CLI. Tree-sitter / other parsers remain user-installed — Chisel stays stdlib-only.docs/CUSTOM_EXTRACTORS.md: full guide forregister_extractor, bootstrap env, and optional third-party parsers.examples/chisel_bootstrap_example.py: commented template for copy-paste.tests/test_bootstrap.pyfor bootstrap loading.
Documentation
- Cross-links from README, CONTRIBUTING, CLAUDE,
docs/ZERO_DEPS.md, COMPLETE_PROJECT_DOCUMENTATION, ARCHITECTURE.
v0.6.4
[0.6.4] - 2026-03-27
Added
- Import-graph test impact:
get_impacted_tests/suggest_testswalk 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: Numericcochange_coupling,import_coupling,effective_coupling, plus breadth counts — import coupling stays visible in solo / low-commit repos.- Risk breakdown:
coverage_fractionalongside quantizedcoverage_gapincompute_risk_scoreandget_risk_map. diff_impact: On git failure, returnsstatus: "git_error"withmessage,project_dir, andhint(never a silent empty list). CLI prints hint;next_stepssuggests 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 foranalyze,update,suggest_tests,coupling,diff_impact.