From b8e50e30ec0a01b81011756fac99c55403d0ba9a Mon Sep 17 00:00:00 2001 From: zk <> Date: Fri, 11 Sep 2026 02:09:25 +0800 Subject: [PATCH] chore(cli-version): verify agy against 1.2.0 First non-patch agy bump in this series, so the flag surface was checked before anything else: --help and models --help are byte-identical 1.1.28 -> 1.2.0, diffed against the captures stored with the previous record, and all nine flags build_argv emits are present. A minor version number that moves nothing we drive is the best shape this hop could have. Gate B: 7/7, 141.76s, against a manifest download whose sha512 was checked before it ran. The log reports only version=1.2.0, and the binary was byte-identical before and after (mtime 06:30:29, size 178935744). Gate C: CLEAR. Both sources cover 1.2.0 and agree. Everything on our surface is a fix: - content-safety-filtered prompts no longer fail with a spurious "no candidate found", end silently with an empty turn, or retry the rejected input; the CLI now surfaces a content-filter stop reason - older conversations no longer fail to resume with `unknown step type` - third-party MCP tools whose schemas omit additionalProperties no longer fail validation - the per-message filesystem customization walk is gone The new stop reason is the only thing added to the wire and it cannot break us: wire.rs is tolerant by construction, the state enum carries #[serde(other)] Unknown, and we do not consume a stop-reason field at all (grepped: no stop_reason / finish_reason anywhere under backend/antigravity/). The pinned older/newer pair moves to 1.1.29 / 1.2.1 rather than 1.1.27 / 1.1.29. That is deliberate: 1.1.29 vs 1.2.0 is exactly where a lexical compare gets the answer backwards, so the assertion now guards the component-wise comparison at the boundary that just became reachable. Record: ~/aion/protocols/samples/antigravity-cli/1.2.0/ --- crates/aionui-session/src/backend/cli_version.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/aionui-session/src/backend/cli_version.rs b/crates/aionui-session/src/backend/cli_version.rs index d2ef2dad2..728b0a388 100644 --- a/crates/aionui-session/src/backend/cli_version.rs +++ b/crates/aionui-session/src/backend/cli_version.rs @@ -38,7 +38,7 @@ use crate::event::{LocalizedText, NoticeLevel}; /// 0.147.0 and leaves it unverified rather than a floor anyone can install into. pub const VERIFIED_CLAUDE_VERSION: &str = "2.1.236"; pub const VERIFIED_CODEX_VERSION: &str = "0.151.0"; -pub const VERIFIED_AGY_VERSION: &str = "1.1.28"; +pub const VERIFIED_AGY_VERSION: &str = "1.2.0"; /// The verified release for a direct-CLI backend, keyed by the program name the /// backend spawns. `None` for anything not version-gated here. @@ -475,13 +475,15 @@ mod tests { // The literal the other two CLIs already pin, which agy was missing: a // user on exactly the verified release is told nothing, and a bump that // lands without re-verifying against that exact binary breaks here. - assert_eq!(classify("1.1.28", VERIFIED_AGY_VERSION), VersionVerdict::Verified); - assert!(drift_notice("agy", "1.1.28", VERIFIED_AGY_VERSION).is_none()); + assert_eq!(classify("1.2.0", VERIFIED_AGY_VERSION), VersionVerdict::Verified); + assert!(drift_notice("agy", "1.2.0", VERIFIED_AGY_VERSION).is_none()); // agy prints a bare version, so the older/newer paths are worth pinning // on that exact shape rather than only on a decorated one. - assert_eq!(classify("1.1.27", VERIFIED_AGY_VERSION), VersionVerdict::Older); - assert_eq!(classify("1.1.29", VERIFIED_AGY_VERSION), VersionVerdict::Newer); + // 1.1.29 is OLDER than 1.2.0: the minor component decides, and a + // lexical compare would get this backwards ("1.1.29" > "1.2.0"). + assert_eq!(classify("1.1.29", VERIFIED_AGY_VERSION), VersionVerdict::Older); + assert_eq!(classify("1.2.1", VERIFIED_AGY_VERSION), VersionVerdict::Newer); } /// Both drift directions are `Info` — the tier the frontend draws as a quiet