This release adds 2 notable features for engineering teams evaluating rollout.
Published 27d
Developer Productivity
✓ No known CVEs patched
✓ 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
Summary
AI summaryNext.js app‑router page/layout files now receive per‑edit guidance after clustering fixes.
Full changelog
Fixed
- Next.js app-router page/layout files got no per-edit guidance in small and
medium repos. Clustering bucketed TypeScript files by directory, so the
app-router role files that scatter one-per-route-dir (app/page.tsx,
app/dashboard/page.tsx, ...) each fell into their own below-threshold bucket
and the page archetype never formed; editing a page injected nothing. A new
nextjs_role_for_pathbucketspage/layout/loading/error/not-found/
template/defaultunder anapp/segment by their filename role — the same
waypython_role_for_pathgroups Djangomodels.pyacross apps — so they
cluster intoapp-page/app-layout/app-specialarchetypes. The monorepo
workspace prefix is preserved (apps/webpages do not merge withapps/admin
pages), androute.tsis left to directory bucketing (it already co-locates
underapp/api). Non-app-router files are bucketed unchanged. /chameleon-refreshleft a load-rejected profile damaged instead of
repairing it. A profile with a cross-artifactgenerationskew or an
artifact reset to{}(the shape a crashed write or a bad 3-way.chameleon
merge leaves) is rejected by the loader asprofile_corruptedwith the message
"/chameleon-refresh recommended" — but the noop refresh preserved it verbatim,
making that advice a dead end. The refresh re-derive gate now mirrors the
loader's exact cross-artifact generation check, so a plain refresh repairs
precisely what the loader rejects. Healthy profiles still noop.- Python profiles never repaired a missing
exports_index.json/
reverse_index.json. The Python pipeline always writes both, so a missing
one is unambiguous damage, but the refresh gate only forced a rebuild for
TypeScript or a corrupt-present file — a deleted index on a Python repo stayed
missing, silently voiding cross-file existence-break, phantom-import, and
query_symbol_importersadvisories until a forced re-derive. The gate now
treats Python like TypeScript for index presence. - A trust read could raise instead of failing open.
trust_state_for
checkedis_file()thenread_text()but caught only JSON errors, so a
concurrent rotation of the.trustfile between the two calls raised an
uncaughtOSErrorout of the gate. It now fails open to "untrusted" on any
read error. - Status line rendered a literal
Nonefor a JSON-nullproject_dir. The
payload-parse fallback used.get(..., ''), which returnsNonewhen the key
is present with a null value. Now coalesces to an empty string.
Changed
enforcement.multi_lens_reviewandenforcement.idiom_judgenow default
on. At turn end (shadow/enforce mode), the coordinated multi-lens pass
(correctness + duplication, merged) now runs by default in place of the
separate single-spawn correctness-judge and duplication gates, so duplication
is no longer starved by the one-spawn-per-turn defer; it is advisory only and
never blocks.idiom_judgedefault-on strengthens the once-per-session
idiom-review directive (no extra model spawn — the flag only hardens the
prompt). Because the defaults live in code, already-trusted repos pick up the
new behavior with no re-trust prompt (same ascorrectness_judgeshipped).
Opt out per repo withenforcement.multi_lens_review: false/
enforcement.idiom_judge: false, or globally withenforcement.mode: offor
CHAMELEON_DISABLE=1./chameleon-journeydocumented a stale act count and budget (19 acts / $33,
default cap $35) while the suite had grown to 21 acts / $38, so the documented
bare run command aborted on the budget pre-flight. Default cap raised to $40
and the figures synced.bump-version.sh --auditno longer flags the regeneratedpackage-lock.json
or the historical version references indocs/gap-log.md/
docs/verification-runbook.md; the lockfile is now excluded symmetrically with
uv.lock./chameleon-status,/chameleon-explain, andusing-chameleonskill docs:
render a null drift score as "no edits observed yet", a nullmatch_quality
as "n/a", and drop the unimplemented "value attribution" capability line.
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]