Skip to content

Chameleon

v2.36.2 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

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

Summary

AI summary

Refresh repairs damaged enforcement.json, Ruby constant_index.json, and Python exports/reverse indexes while fixing large file handling in the Python extractor.

Full changelog

Fixed

  • Refresh now repairs a damaged enforcement.json instead of preserving it.
    A corrupt enforcement file — or a valid object whose block_rules is not a
    dict — made active_block_rules fall open to an empty set, silently voiding
    all block-rule enforcement while mode=enforce still read as healthy, and a
    normal refresh noop-preserved the damage. The repair predicate now requires
    enforcement.json to parse to a dict whose block_rules is itself a dict, so
    /chameleon-refresh re-derives and restores it.
  • Refresh now repairs a corrupt Ruby constant_index.json. The Ruby
    cross-file constant graph (the analogue of the TypeScript/Python symbol
    indexes) was missing from the repair set, so a corrupt one silently killed the
    cross-file existence-break advisory, get_blast_radius, and
    get_contract_breaks with no recovery path. It is now validated and repaired.
  • Refresh now repairs corrupt Python exports_index.json /
    reverse_index.json and an empty profile.summary.md.
    The symbol-index
    repair check was TypeScript-only; Python writes these indexes too. The summary
    check was existence-only.
  • The Python extractor no longer drops large valid files. The libcst node
    ceiling counted dense CST nodes against a cap meant for sparser AST nodes, so a
    valid sub-1 MB file (≈3500 lines) was silently skipped. The cap is retuned to
    libcst density; MAX_FILE_SIZE remains the real bound.
  • The status line strips box-drawing characters from cached profile fields,
    so a poisoned cache name can no longer forge a -delimited trust segment.
  • get_callers documentation now credits Python import-grade callers (the
    docstrings said the import grade was TypeScript-only; Python emits it too).

Security Fixes

  • Status line now strips box-drawing characters from cached profile fields, preventing forged trust segments.

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]