This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+12 more
Summary
AI summaryRuff config files are now correctly read and frontend bootstrap hints no longer repeat when a workspace has already bootstrapped it.
Full changelog
Added
- A standalone
ruff.toml/.ruff.tomlis now read for formatting conventions.
_read_python_formatonly mined[tool.ruff]frompyproject.toml, so the
large population of repos that keep ruff config in a standalone file (ruff's
own.ruff.toml>ruff.toml>pyproject.tomldiscovery order) had their
line-length,quote-style,indent-style, andindent-widthsilently
dropped —rules_extractedcame back 0 and the derived formatting convention
was blank. The reader now resolves the ruff config the way ruff does: a
standalone file takes precedence over[tool.ruff]and the two are never
merged (matching ruff's real behavior), with black still read independently
from[tool.black]and the flake8/pycodestyle line-length fallback intact.
Thepyproject.toml-only path is unchanged. Verified end-to-end: a repo with
a standaloneruff.toml(line-length = 120,[format] quote-style = single)
now derivespython_format {line_length: 120, quote_style: single, source: ruff.toml}intorules.json. Found by the from-scratch QA sweep against a
real Django fixture.
Fixed
-
A resolved profile no longer advises bootstrapping a frontend it already
bootstrapped. A Python or Rails repo with a JS/TS frontend emits a
language_hinttelling the user to runbootstrap_repo(.../frontend)for the
JS half. When that frontend is a declared workspace, the same run already
bootstrapped it, so that advice is stale. Bootstrap now drops the hint from
the envelope,profile.json, AND the renderedprofile.summary.mdwhen a
successfully bootstrapped workspace IS that frontend subdir or lives inside it.
It is careful to only fire on the frontend-subdir hints: the other hint shape
(TypeScript won at the root but a sibling Ruby/Python tree lives somewhere in
the repo) names the whole repo root, and a package workspace never covers that
separate-language tree, so those hints always survive; an unrelated or
merely-ancestor workspace never suppresses a still-valid frontend hint either.
The reconciliation rides the shared derivation path, so a stale hint on an
existing profile is cleaned up on the next/chameleon-refresh. -
initializenow reports the chameleon build asserverInfo.version. The
stdio server passed no version to FastMCP, soserverInfo.versiondefaulted
to the installedmcpSDK's own package version (1.27.1) — a client could
not correlate the running server to the installed plugin. It now reports the
plugin build (2.58.0), set on the wrapped low-level server and guarded so a
future SDK internals change can never crash startup over a cosmetic string. -
describe_codebasedocuments its unsupported-schema shape. The docstring
promisedfound: Falseon an unresolvable/untrusted repo but did not cover a
resolved profile whoseschema_versionis newer than the engine supports,
which returnsfound: Truewithdegraded: Trueand the profile-derived
fields nulled — an honest "a profile exists but is unusable under this engine"
signal (distinct from "no profile at all"), the same statedetect_repo
reports asprofile_unsupported_schema_version. Behavior was already correct;
the contract is now accurate. Consumers must checkdegradedbefore reading
the derived fields.
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]