This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+12 more
Affected surfaces
Summary
AI summarySecurity deny now unconditionally blocks credential/eval even with zero witnesses, and cross‑file damage is correctly reported for Python indexes.
Full changelog
Two effectiveness fixes from the verified roadmap: the credential/eval deny no
longer depends on witness-count calibration, and the cross-file tools stopped
mislabeling a damaged Python index as a TypeScript-only feature.
Fixed
- Security deny un-gated from the witness floor.
active_block_rulesnow
seeds the two calibration-exempt security rules (secret-detected-in-content
hard kinds, error-severityeval-call) unconditionally. Calibration never
measures them (the committed-corpus pass runs no content scans), so their
persisted verdict carried only then > 0witness floor — which disarmed the
PreToolUse credential/eval deny on exactly the repos most exposed: fresh,
small, or sparse zero-witness profiles, legacy artifacts, and missing/torn
enforcement.json. A planted zero-witness profile could switch the
credential deny off; it no longer can. Trust,enforcement.mode,
CHAMELEON_ENFORCE=0, and the rule-namedchameleon-ignoreoverride are
unchanged and still gate actual blocking.calibrate_block_ruleswrites the
two entries withexempt_reason: "security-rule"for artifact provenance;
get_statuslists them active on any profiled repo (never on unprofiled
ones) and never as demoted; the torn-artifact banner now says the
credential/eval deny stays armed. Note: repos with committed fixture keys
that previously slipped the zero-witness gate now get the deny — the
rule-named ignore directive is the escape, and comment-less formats (JSON)
need the fixture moved orenforcement.mode: "shadow". - Cross-file damage no longer reads as "typescript-only".
query_symbol_importers/get_crossfile_contextreportedtypescript-only
for every non-TS profile, mislabeling a damaged or missing Python
reverse_index.json(built for Python since the Python program landed) as
by-design absence and suppressing the repair suggestion. New contract:
index-unavailable= the profile's language should have the index, run
/chameleon-refresh;unsupported-language= by-design absence (e.g. a
stray.tsfile in a Ruby profile, a stray.rbin a Python profile — the
latter previously got a dead-end "re-run refresh" loop from the constant-index
path). The build gate, the refresh-repair check, and the read tools now share
symbol_index.REVERSE_INDEXED_LANGUAGESso they cannot drift; Ruby damage in
get_crossfile_context(missing constant index) reads as repairable damage.
Added
- Comprehension routing in
using-chameleon. The skill now tells the main
loop when to reach forsearch_codebase/get_callers/get_blast_radius
/query_symbol_importers/describe_codebase(before renames, signature
changes, side-effect assumptions), with an honesty note keyed to the
index-unavailable/no-calls-index/unsupported-languagereasons. The
MCP-visible docstrings of both crossfile tools drop their stale
"TypeScript-only" headlines.
Security Fixes
- `active_block_rules` now seeds the two calibration‑exempt security rules (`secret-detected-in-content`, `eval-call`) unconditionally, removing the zero‑witness disarm of credential/eval deny.
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
About Chameleon
All releases →Beta — feedback welcome: [email protected]