Skip to content

Chameleon

v2.59.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ 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 rbac

Summary

AI summary

Added RECALL stage and adversarial verification loop to pr-review workflow.

Full changelog

Added

  • pr-review: RECALL stage (Step 3.9) — the pipeline's add-path. The review
    pipeline is now SCOPE → EVIDENCE → ATTACK → RECALL → VERIFY → REPORT. Every
    verification stage (hunk gate, refuter) could only REMOVE findings, so the
    review's recall ceiling was one context's first pass — the diagnosed reason
    users re-ran the skill 2-3 times ("- 2nd round") before trusting it, with
    round 2 twice flipping APPROVE → NEEDS CHANGES on real bugs in live usage.
    RECALL dispatches decorrelated fresh-context read-only lenses over the whole
    diff (correctness/delta + consequences: downstream consumers, blast radius,
    deploy safety), hands them (file:line, defect-class) anchor pairs instead of
    the draft findings (anti-anchoring), routes every candidate through the same
    hunk gate + refuter, and loops until a round adds zero surviving BLOCK/FIX
    (cap 2, disclosed). Depth is calibrated from the already-fetched
    get_autopass_verdict (easy/medium + low/elevated risk → one lens;
    hard/complex, high risk, security surface, or a ticket → both). A
    consequence finding anchors to the diff-side line with the out-of-diff
    consumer cited as corroboration, so the hunk gate composes instead of
    killing the class. An inline exclusion-set fallback covers no-dispatch
    sessions.
  • pr-review: "Unrun executable checks" disclosure. A finding whose truth
    depends on runtime/production state (a data-shape assumption, deploy order)
    is never sent to the refuter (which is commanded to refute on cannot-tell —
    sending is shredding); it converts to a named executable check the user can
    green-light in the same turn, with the conversion counted in the grounding
    banner.
  • pr-review: always-rendered pass-execution manifest. The lint ledger's
    "N/N" forcing function generalized to every pass: one row per pass, ran with
    evidence / skipped with a sanctioned reason / n/a with the empty input set
    named. A skipped pass and a clean pass no longer render identically. The 3c
    edge-case and 3e change-delta passes gain per-file output obligations, and
    the 3e line must quote one actual removed line — a token a skim cannot fake.
  • pr-review: same-HEAD prior-review comparison (Step 1b). A re-review of a
    commit get_review_history already pins treats the prior findings count as
    a bar to clear, not a cache to trust.
  • deep-work: adversarial verification + review-to-convergence (Step 6).
    The single-shot fresh reviewer became a bounded convergence loop: a NEW
    fresh-context reviewer per round over the current diff with a compact
    declined-findings log, blocking declines independently adjudicated via
    refute_finding, terminate when a round applies zero findings (cap 3,
    cap-hit disclosed, self-review fallback when dispatch is unavailable).
    Verification now demands a per-criterion evidence table (exact command,
    pasted output) and a git-level guard check that a new test FAILS with the
    source flipped (revert + re-materialize the test; empirically verified
    mechanics), scaled up to a hired bypass hunt on authz/money/deletion
    surfaces. The dig (Steps 2-3) now terminates on a fixpoint — a
    re-enumeration pass that adds zero new unknowns (cap 2) — instead of a
    self-authored list that only shrinks.
  • receiving: comment-enumeration completeness + verification records.
    Step 1 must fetch every comment source (all three GitHub endpoints with
    --paginate, Bitbucket next-until-exhausted, outdated/resolved included)
    and reconcile the count into checklist items (ask-free comments close as
    informational/NO ACTION). Each item gets a minimum-evidence verification
    record (enclosing-context read, concrete claim trace, tools, five
    confirmations) gating AGREE/PUSH BACK; the claim trace is passed verbatim to
    the refuter so a lazy trace gets refuted, not graded complete. Every PUSH
    BACK needs a steelman; convention-silent code-changing AGREEs need a
    repo-evidence probe. Step 8 fixes now carry a resolution check (prove the
    reviewer's original scenario no longer holds) and a contract re-check on
    signature changes, and the final whole-set pass has defined mechanics.

Fixed

  • pr-review fan-out slices reviewed blind. reviewer.md handed slices only
    file names and a repo id — no hunk map, and slice reviewers have no Bash —
    so they could not run the change-delta pass or hunk-gate anything. The
    template now carries a mandatory {SLICE_HUNKS} fill and returns
    {manifest, findings} so an unexplained per-pass gap in a slice is rejected
    at synthesis instead of silently merged.
  • Refuter cap starvation. Both review skills sent all model-judgment
    findings in ONE refute_finding call; the engine's per-invocation spawn cap
    (8) silently returned "unverified / cap reached" for finding 9 onward on big
    reviews. Sends are now severity-first batches of ≤8 under a shared 4-call
    review-wide budget, with any remainder labeled cap-reached.

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]