Skip to content

Chameleon

v2.38.13 Bugfix

This release fixes issues for SREs watching stability and regressions.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ 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 summary

Fixed false positive where non‑import Python calls were incorrectly flagged as off‑pattern imports.

Full changelog

Counterexample correctness pass: kill a Python-only false positive in the
off-pattern capture parser. Verified end to end against real profiled repos
(bulletproof-react, forem, py-django-readthedocs, py-flask-flaskbb) through the
real PreToolUse hook, the real teach/unteach/refresh/rename tools, and the real
MCP stdio transport.

Fixed

  • The counterexample capture parser flagged non-import Python calls as
    off-patterns.
    _import_of builds the regex that detects a real import of a
    taught discouraged (over) module. It has two forms: a QUOTED form for TS/Ruby
    (from|import|require|require_relative|load immediately before a quoted
    specifier) and an UNQUOTED form for Python (from x / import x). The unquoted
    form was correctly gated to Python, but the quoted form was never gated away
    from Python, so it also ran against .py files — where load and require are
    ordinary function names, not import keywords. A plain call like
    data = load("requests"), require("axios"), or yield from "csv" therefore
    matched and was captured as a phantom "do NOT write it this way" off-pattern,
    and (since capture keeps the first match in repo scan order) could even shadow a
    genuine import requests elsewhere. The forms are now gated by language so
    neither fires where it does not belong: python uses the unquoted form only,
    known non-Python (TS/Ruby/JS, or any recognized non-Python extension) uses the
    quoted form only, and the unspecified (None) path — the render-time
    witness-suppression check for an unknown language — keeps both, which is
    fail-safe because suppression only ever removes a counterexample. The real
    Python import shapes (import x, from x import y, submodule and boundary
    cases) still capture, and the TS default-import alias guard is unchanged.

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

Track Chameleon

Get notified when new releases ship.

Sign up free

About Chameleon

All releases →

Related context

Earlier breaking changes

  • v3.0.0 MCP surface folded from 48 tools to 19; remaining 32 operator tools become actions on three dispatchers.

Beta — feedback welcome: [email protected]