Skip to content

v2.3.0-rc.2 — One contract, three runtimes

Pre-release
Pre-release

Choose a tag to compare

@Alan-TheGentleman Alan-TheGentleman released this 07 Aug 00:00
Immutable release. Only release title and notes can be modified.
d94dc00

Gentle AI v2.3.0-rc.2: One contract, three runtimes

rc.1's three known issues are fixed, the reviewer transport was rebuilt around one shared contract, and the first three fixes from the new root analysis landed. This build removes more machinery than it adds, again.

It is a prerelease for community testing. Please break it.

Fixed since rc.1

The three defects called out at the top of rc.1's notes:

  1. The documented negotiated invocation works. The preflight gate that refused the documented form was replaced by shared-contract capability admission (#2207), and CI re-runs the negotiated continuation journey on every build as evidence.
  2. OpenCode and Codex complete reviews. The transport gate that declared them eligible and then refused them is gone (#2657). OpenCode reviews run from your ordinary, already-running session: no restart, no special terminal, no OPENCODE_DISABLE_PROJECT_CONFIG/OPENCODE_DISABLE_EXTERNAL_SKILLS variables, and the plugin shrank from 793 to 350 lines. Codex is supported for the first time, activated on a real organic proof that ran a full review to a pre-push allow with a poisoned-worktree control.
  3. The protocol no longer tells your orchestrator to refuse prereleases. The "installed released fix" wording was corrected across all managed assets.

What is new

One advisory reviewer contract

Reviewer transport is now a single Go-owned contract: the provider derives the evidence from frozen authority, renders one canonical prompt per lens, and validates raw model output through native admission. Runtime adapters only carry the prompt and return text. A model can never mint a receipt, declare PASS, or open a gate, whatever it reads or returns. An adapter-minimality guard makes reintroducing business logic in an adapter a build failure.

The representation root, fixed at the source

Three fixes from the root analysis in #2471 (root 21: the system compared where your content lived instead of what it was):

  • Snapshot identity is content-addressed (#2659). Byte-identical candidates now carry the same identity regardless of Git representation.
  • Zero-delta candidates refuse on every route (#2586). A plain review start on a clean worktree can no longer mint an approved receipt that inspected nothing; the refusal names the --base-ref rerun for committed work.
  • Compatible base advance carries a per-gate policy (#2665), plus a latent pre-push freshness fix. If your approved base-diff receipt died because a teammate merged unrelated work, re-verify on this build: the disjoint-advance case recovers without a local merge (#2388 has the evidence).

Upgrade note: in-flight reviews start fresh

Identity purification is a clean break by design. Review lineages and receipts created by v2.2.4 or rc.1 that are still in flight will validate as outdated on this build: run a fresh review to mint new authority. Historical records remain readable; they simply no longer govern gates. Nothing in your Git history is touched.

Installing it

This prerelease does not update Homebrew, and the binaries are unsigned. Integrity comes only from SHA256SUMS.txt, so verify before running.

Linux and macOS

# pick your platform: linux_amd64, linux_arm64, darwin_amd64, darwin_arm64
PLATFORM=linux_amd64
VERSION=2.3.0-rc.2

curl -fsSLO "https://github.com/Gentleman-Programming/gentle-ai/releases/download/v${VERSION}/gentle-ai_${VERSION}_${PLATFORM}"
curl -fsSLO "https://github.com/Gentleman-Programming/gentle-ai/releases/download/v${VERSION}/SHA256SUMS.txt"

# verify before running it
sha256sum --ignore-missing -c SHA256SUMS.txt

chmod +x "gentle-ai_${VERSION}_${PLATFORM}"
sudo mv "gentle-ai_${VERSION}_${PLATFORM}" /usr/local/bin/gentle-ai
gentle-ai --version   # expect: gentle-ai 2.3.0-rc.2

On macOS, Gatekeeper will quarantine an unsigned binary. Clear it with xattr -d com.apple.quarantine /usr/local/bin/gentle-ai.

Then refresh your managed assets. This step is not optional.

gentle-ai sync

Replacing the binary does not update the runtime assets already installed for your agents, and a stale asset fails with messages from its own older vintage that no longer exist in this build. One community report already hit exactly that: an rc.1 OpenCode plugin under an rc.2 binary, rejecting reviewer launches with a message rc.2 cannot produce (#2442). Detecting that skew automatically is tracked in #2685.

Windows (PowerShell)

$Version = "2.3.0-rc.2"
Invoke-WebRequest -Uri "https://github.com/Gentleman-Programming/gentle-ai/releases/download/v$Version/gentle-ai_${Version}_windows_amd64.exe" -OutFile gentle-ai.exe
Invoke-WebRequest -Uri "https://github.com/Gentleman-Programming/gentle-ai/releases/download/v$Version/SHA256SUMS.txt" -OutFile SHA256SUMS.txt

# compare this against the windows line in SHA256SUMS.txt
Get-FileHash gentle-ai.exe -Algorithm SHA256 | Format-List

.\gentle-ai.exe --version
.\gentle-ai.exe sync   # refresh managed assets; see the note above

Going back

Keep your current binary before overwriting it, or reinstall the stable release with brew install gentleman-programming/tap/gentle-ai. Reviews completed on this build use the new identity format; a v2.2.4 binary treats them as it treats any receipt it cannot match, by failing closed.

What we want you to try

Ordered by how much we want the answer. If you only have time for one, do the first.

1. A full review from your ordinary OpenCode session. No restart, no environment variables, no special terminal. Take a real change through review and delivery. If anything asks you to restart or set an OPENCODE_DISABLE_* variable, that is a bug in this build's headline feature.

2. A full review on Codex. First supported build. Real change, full lifecycle, through a delivery gate. Tell us especially about refusals that name no next action.

3. Stage your reviewed untracked files. Get a review approved, then git add previously untracked reviewed files and commit. On rc.1 this could kill your receipt (#2361); on this build the receipt should survive the representation change. The reports there predate the fixes, so fresh evidence either way decides that issue.

4. Review after a teammate merges. Approve a base-diff review, let unrelated work land on the parent, then push. The disjoint case should recover without re-review. If you locally merged the advanced parent, a refusal is correct and expected; tell us if the message does not make that clear.

5. review start on a clean tree. Should refuse immediately, naming --base-ref for committed work, on every invocation form. If you find any route that freezes an empty candidate, we want it badly.

6. Delivery gates end to end. Commit, push, PR, with and without an approved receipt. Same receipt validated at every gate, review never reopened for unchanged content.

Known issues going in

Honesty section, same as rc.1. These are real, open, and being worked by root:

  • Native admission can reject reviewer results too aggressively: any non-empty findings on some candidates (#2482), two of four lenses on scope_changed successors (#2618). If a review that plainly found something real gets out_of_scope, it is these.
  • sdd-verify-validate rejects every requirements value against an Engram store (#2500).
  • The managed OpenCode permission profile can deny review.start itself (#2615) and references an undo-checkpoint operation that does not ship (#2595). A conformance guard that makes this class impossible is queued.
  • Windows: a NUL attributes-file quirk can block review start pre-mutation (#2358). Fix scoped, next build.
  • HIGH-tier corrections can dead-end after conflicting evidence (#2623); a designed disposition path is deliberately deferred rather than patched per case.

If you hit any of the above, the issue links carry current state. Everything reported on rc.1 was preserved: 3 fixed here, the rest tracked by root in #2471.