This release fixes issues for SREs watching stability and regressions.
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
deps
Summary
AI summaryFixed bug where /chameleon-refresh left profiles missing the COMMITTED sentinel causing recovery dead‑ends.
Full changelog
Fixed
/chameleon-refreshleft a profile missing itsCOMMITTEDsentinel
unrepaired — a recovery dead-end. The loader rejects an uncommitted profile
(profile_corrupted, "run /chameleon-refresh"), but the re-derive gate only
mirrored the loader's later generation/schema checks, not its first one (the
sentinel), so a plain refresh noop-preserved it and the advice looped. The
gate now re-derives an uncommitted profile (a re-derive rewritesCOMMITTED),
like every other shape the loader rejects.- A non-UTF8
config.jsoncrasheddetect_repoandget_pattern_context
on a no-remote repo instead of failing open._persisted_repo_uuidguarded
the read withexcept OSErroronly, but a binary/corrupt config raises
UnicodeDecodeError(aValueErrorsubclass), which escaped and propagated
out of two public tools (one of them the hot-path tool). Now fails open to the
path-hash identity. The hooks already wrapped this and were unaffected. - The Next.js app-router role bucketer mis-classified Rails
app/javascript
files. Theapp-ancestor guard matched any path with a dir literally named
app, so a Rails TS/JS file stem-namedpage/layout/errornested under
app/javascriptwas bucketed as a Next.js app-router role. The bucketer now
excludes a file only when a Rails JS source root (javascript/javascripts)
is an ancestor of its route segment — distinguishing the deep Rails
app/javascript/...tree from a Next.js route literally named/javascript
(e.g.app/docs/javascript/page.tsx), which is preserved. edit_observations.rel_pathwas stored as an absolute path, contradicting
the drift schema (which documents it repo-relative) and thedecision_log
writer (which stored relative). Claude Code passes an absolute
tool_input.file_path; it is now relativized against the repo root before
recording. A path already relative is kept verbatim.- The merge driver resurrected the "no idioms yet" placeholder on the first
idioms.mdunion merge — the long bootstrap placeholder string was absent
from the placeholder set, so a 3-way merge re-added it into a file that now
holds real idioms. Added it to the set. scan_dependency_changessilently passed a minified single-line
package.json. The per-key supply-chain scanners parse+ "key": value
lines, so a one-line manifest object (which could hide apostinstallscript
or a non-registry dependency) returned zero findings, indistinguishable from a
clean change. A minified manifest now raises one FIX flagging that the
structural checks were skipped and the raw diff needs a manual read.- Corrected the
daemon_clientmodule docstring:call()returns the full
response envelope, not just thedatapayload (callers unwrapdata). get_archetypenow resolves a repo-relativefile_pathagainst therepo
argument, matching the call-graph tools — a relative path previously resolved
against the server CWD and silently returnedarchetype: null.
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]