This release includes breaking changes for platform teams planning a safe upgrade.
Published 28d
Developer Productivity
✓ No known CVEs patched
✓ No known CVEs patched in this version
Topics
ai-coding-assistant
archetype
ast-analysis
claude-code
claude-plugin
code-conventions
+12 more
code-review
code-style
developer-tools
javascript
linter
mcp
mcp-server
prompt-engineering
python
ruby
rails
typescript
Summary
AI summaryFixed critical bugs affecting call graph generation, large index handling, merge driver misrouting, repo root detection, blast radius reporting, and code search behavior.
Full changelog
Fixed
- Cross-file call graph on src-layout Python repos. Absolute imports
(pkg.sub) are now resolved against a PyPAsrc/package root, not only the
repo root. A src-layout repo (package undersrc/, declared via pyproject)
previously dropped every absolute-import edge, building an empty
calls_index.json/reverse_index.jsonand silently zeroingget_callers,
get_blast_radius,query_symbol_importers, contract-break detection, and
cross-file duplication. The resolver probes the repo root first (flat-layout
unchanged), thensrc/. - Large valid calls index rejected by a too-small read cap. The builder caps
on edge count (CALLS_INDEX_MAX_TOTAL_EDGES) while the reader rejected any file
over a hardcoded 16MB, so a legitimately-built index on a large repo (~21MB on a
big monorepo) was refused andget_callers/get_callees/get_blast_radius
returnedno-calls-indexdespite a correct committed index. The read ceiling now
derives from the edge cap so the two can never drift. This loader is tool-time and
the turn-end judge only, never the per-edit hot path. - Merge driver silently rewrote an idiom-bearing
profile.summary.md. The
idioms-markdown detector matched any###header, so aprofile.summary.mdthat
lists idioms under a## Idiomssubsection was misrouted to the idioms union merge
on a conflict — rewriting the summary and exiting 0 (git staged a mangled file as
resolved), violating the.gitattributes-templatecontract that the non-idioms
companion files (profile.summary.md/principles.md/COMMITTED) must DECLINE
and leave a conflict. The detector now treats a document whose top-level title is not
an idioms title as non-idioms, so the summary declines cleanly (OURS preserved).
Fixed (skills + comprehension audit)
bootstrap_repoMCP wrapper now forwardsproduction_ref. The wrapper exposed
only(path, paths_glob, force), so the init/refresh skills' explicit
production-branch answer was silently dropped on the conflict and local-only paths.doctorwalks to the repo root instead of readingcwd/.chameleon/config.json
directly, which reported a configured repo as unconfigured from any subdirectory
(misleading/chameleon-status).get_blast_radiusreports honest truncation. The per-node fanout cap silently
dropped direct callers whiletruncatedstayed false (the shallow-but-wide case);
truncatednow also fires when the fanout cap clips a node.- receiving-code-review security grounding no longer no-ops on a null archetype
(pass a placeholder string solint_file's pre-archetype secret/sink scans run). - Deprecated-idiom writes strip the
## deprecated_(none)_placeholder. search_codebasereturnsfound: falseon an empty/blank query (per its
contract, so a caller can branch onfound).- Doc accuracy: the
doctorskill listshook_interpreter_deps(+ its error
remediation); the statusline update badge shows the apply instruction in the no-jq
fallback too; theget_crossfile_contextdocstring documents its Ruby
constant-graph fallback.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Chameleon
All releases →Beta — feedback welcome: [email protected]