Skip to content

Chameleon

v2.13.1 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 breaking_upgrade

Summary

AI summary

Fixed production-ref derivation failure on symlinked paths, apply_archetype_renames deleting calls_index.json, OAuth/subscription correctness judge deadlock, duplication gate starvation, repo unsafe-root guard bypasses, and doctor false‑passing dead installs.

Full changelog

Remediation of the qa28 real-user campaign: ~80 live claude -p sessions drove every tool, command, and hook from scratch on never-profiled GitHub clones (vercel/swr, thoughtbot/administrate), plus an A/B effectiveness battery and a v2.12.0 upgrade simulation. The campaign confirmed the upgrade path loses nothing for existing users, and found five P1s that no scripted test layer had caught; all ship fixed here, each regression-verified from its original repro. Full unit suite 3,544 passing.

Fixed

  • Production-ref derivation silently died behind symlinked paths. Extractors emit symlink-resolved file paths while the prodtree scan root was used unresolved, so any symlinked data-dir component (macOS /tmp, relocated ~/.local/share) made every relative_to fail: archetype buckets became absolute-path garbage, per-edit advisories never fired, and bootstrap, doctor, and status all reported healthy. The prodtree root is now resolved before derivation, and a pinned test asserts no committed artifact may ever carry a prodtree path fragment.
  • apply_archetype_renames deleted calls_index.json. The rename transaction re-emitted every artifact except the calls index, and the protocol-file posture drops whatever is not re-emitted - so /chameleon-init's auto-rename shipped fresh profiles without caller facts. The transaction now carries the artifact forward verbatim, like the partial-refresh path.
  • The correctness judge was dead on OAuth/subscription installs. claude --bare no longer inherits OAuth credentials, so every reviewer spawn exited "Not logged in" with only the attestation file aware. The first bare spawn now doubles as a functional auth probe (cached 24h); on failure the judge retries without --bare, and because that spawn pays the session primer and cannot fit the 45s sync budget, known bare-auth failure auto-routes the spawn through the detached async path (new CORRECTNESS_JUDGE_FALLBACK_TIMEOUT_SECONDS, default 180) with findings delivered at the next prompt. CHAMELEON_JUDGE_ASYNC=0 still forces sync.
  • A failing judge starved the duplication gate forever. Deferral now requires a spawn that actually produced a reviewable result; degraded spawns run the duplication review in the same turn.
  • bootstrap_repo and refresh_repo bypassed the unsafe-root guard. Both now refuse temp/world-writable roots with the same policy as the hooks and name the CHAMELEON_ALLOW_TMP_REPO=1 opt-out; detect_repo carries the refusal reason instead of a bare no_repo.
  • Doctor passed dead installs. Three new checks, each failing open: generated-artifact completeness for the profile's language, judge-spawn health from recent attestations, and advisory-emission sanity (trusted edits resolving no archetype). A failed reviewer spawn also surfaces as a one-line SessionStart banner instead of living only in the attestation ledger.
  • Every edit wrote two drift rows (preflight and verify both recorded), doubling drift statistics and banner pressure; only the verify-side row remains.

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]