Skip to content

Chameleon

v4.4.22 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

Affected surfaces

auth rbac

Summary

AI summary

Fixed ESLint config parsing bug that silently corrupted globs and patterns.

Changes in this release

Bugfix Medium

Fixes corrupted glob patterns in JS/CJS ESLint configs due to flawed comment stripping.

Fixes corrupted glob patterns in JS/CJS ESLint configs due to flawed comment stripping.

Source: llm_adapter@2026-07-19

Confidence: low

Bugfix Medium

Corrects corrupted glob patterns caused by improper comment stripping in ESLint config parser.

Corrects corrupted glob patterns caused by improper comment stripping in ESLint config parser.

Source: granite4.1:30b@2026-07-19-audit

Confidence: low

Full changelog

Fixed

  • JS/CJS ESLint configs had their globs silently corrupted. _jsish_to_json
    stripped comments with a regex that had no string-literal awareness, so the
    /**/ inside an ordinary glob was read as a block comment:

    { files: ['tests/**/*.ts'] }              -> {"files": ["tests*.ts"]}
    { ignorePatterns: ['**/*.d.ts','src/**/gen'] } -> {"ignorePatterns": ["**gen"]}
    { url: 'https://x.test/a/**/b' }          -> {"url": "https://x.test/ab"}
    

    The second case is the worst: the strip opened at the /* in one array element
    and closed at the */ in the next, silently merging two entries into one.
    The line-comment pass had the same flaw with a narrower guard — it excluded only
    a preceding :, so https:// survived while any other doubled slash in a
    string ('a/b//c') was truncated.

    Nothing warned, so rules.json recorded the mangled globs as if parsed cleanly
    and a consumer would believe the test-only relaxations applied to a file set
    that matches essentially nothing. Comment stripping is now a single forward
    scan that tracks the active string delimiter: quotes are special only outside a
    comment, comment markers only outside a string, and a backslash escapes the next
    character. An unterminated comment consumes the remainder, leaving the payload
    unparseable so it takes the documented parse-fail path instead of yielding a
    corrupted config.

    Only the no-eval parser was affected; _parse_eslint_js_via_node (opt-in behind
    CHAMELEON_ALLOW_ESLINT_EVAL) always returned the correct value, which is how
    the defect was isolated to this path.

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]