Skip to content

Chameleon

v2.31.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ 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

Affected surfaces

auth rbac rce_ssrf

Summary

AI summary

Ruby cross-file blast radius added and autopass detection fixed.

Full changelog

Ruby cross-file blast radius, plus per-language gaps closed by a proactive
cross-matrix verification of every recent fix.

Added

  • Ruby constant-reference reverse index (cross-file blast radius). Ruby has
    no static named-export surface (require pulls a whole file by side effect),
    so it never got the TS/Python reverse index — the biggest cross-file blind
    spot on a Rails monolith. The new index inverts Ruby's class/constant graph:
    for each constant, the files that define it and the files that reference it
    (via a constant-receiver call site), built from parse data already collected.
    query_symbol_importers now returns the Ruby blast radius (editing the file
    that defines a widely-used service class lists its callers), and the autopass
    blast-radius gate consumes it. The index is built for Ruby at bootstrap/refresh
    and hashed into the trust SHA. Existing Ruby repos pick it up on their next
    /chameleon-refresh.
  • Ruby constant-existence break for PR review. get_crossfile_context and
    the turn-end advisory now flag a class/module that the index records as defined
    in an edited file but the file no longer defines, while other files still
    reference it — the Ruby analogue of a removed export still imported.
    High-confidence only (one defining file, bare top-level name, a referencer that
    still names it).
  • /chameleon-teach accepts an optional archetype to scope a free-form
    idiom (so it surfaces first on that archetype's edits); omitted, the idiom
    stays general and applies to every archetype.

Fixed

  • Autopass blast-radius now covers Ruby (it keyed on the reverse-index
    extensions and read 0 for .rb, inconsistent with the Stop judge-router that
    already counted Ruby fan-out).
  • Paren-less Kernel#eval is now detected (eval "..." / eval s /
    eval %(...)) — the rule only matched eval(, so the idiomatic Ruby form
    slipped enforcement entirely. Fires at error severity, no false positives on
    instance_eval/class_eval, member calls, assignments, or comment/string
    mentions.
  • Lint wording is language-correct for Python and Ruby. The node-kind
    humanizer had no Python (libcst) labels, so ClassDef/FunctionDef leaked
    raw; and the lint_file tool never passed the language through, so Ruby and
    Python output used the TypeScript "default export" framing. Both fixed.
  • The inline-override hint offers # chameleon-ignore to Python (it only
    special-cased Ruby; Python developers got the // token, a syntax error in
    their file).
  • Contract breaks now detect the canonical Ruby service-object. A class with
    both a class method and an instance method of the same name (def self.call +
    def call) was dropped as ambiguous, missing the very method that has callers;
    the singleton (the constant-receiver target) is now kept.

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]