Research review / frameworks

Framework Watch: Gemini CLI Retires a startsWith Home Check, Fixes Folder Trust in Its Sandbox, and ADK Stops Scoring Half-Labelled Answers

The Gemini CLI v0.69.0-preview.0 prerelease replaces a raw string-prefix home-directory check that a sibling folder could pass, and resolves folder trust before entering the macOS sandbox, which could not read trust decisions. An unreleased ADK Python change marks a hallucination check as not evaluated when the judge labels only some sentences, instead of scoring the rest.

By Sandeep Belgavi · Published 2026-11-12

This week's changes are about checks that answered a slightly different question from the one they were meant to answer. We read the pull requests and commits and ran none of the code.

Gemini CLI v0.69.0-preview.0

Published on November 10, 2026 as a prerelease, this version carries several path fixes.

  • A prefix is not a parent. Pull request #30160 replaces canonicalPath.startsWith(homeDir) in the custom theme loader, which is meant to accept only theme files inside the home directory. With home at /home/al, a file at /home/albert/theme.json passed, because the string starts the same way. The opposite also failed: on Windows and macOS, valid paths with different letter case were rejected. The fix uses the existing isSubpath() helper, which compares path segments.
  • The same mistake in display. Pull request #30124 fixes tildeifyPath(), which turned /Users/albert/proj into ~bert/proj when the home directory was /Users/al. It now replaces the home prefix only at a path-separator boundary, and leaves filesystem roots alone.
  • Trust and the sandbox. Pull request #30164 notes that the macOS Seatbelt profiles deny the sandboxed process access to ~/.gemini/trustedFolders.json, so the trust dialog "could neither see existing trust decisions nor save new ones". Every launch asked again and any answer failed with exit code 52. Trust is now decided in the parent process before the sandbox starts and passed in, while the sandbox still cannot read or write the file. The pull request says Docker and Podman may need a similar change.
  • Empty is not unset. Pull request #30250, merged on November 11 after the prerelease, makes ${VAR:-default} use the default when a variable is set but empty, as in a CI file with API_BASE=, matching shell behaviour.

ADK Python: no score beats a partial score

A November 11 commit to ADK Python changes the hallucinations_v1 evaluator. When the sentence validator's reply does not give exactly one usable label per sentence, in order, "the response now gets no score". Before, "it got a score over the labelled subset". An invocation or eval case with any unscored response is now NOT_EVALUATED instead of passing on its remaining responses. The change is after the v2.14.0 release, so it is not yet released.

What remains uncertain. None of the pull requests describe real-world misuse, and the theme check guards a low-risk feature. Prerelease and unreleased changes may change before a stable release.

Analysis: Search your own code for startsWith on paths, especially in allow checks, and use a segment-aware comparison that handles case on Windows and macOS. If Dinky's evaluation suite at Belgavi's Book Store grades refund answers sentence by sentence, treat a judge that skipped sentences as a failed measurement, not a smaller passing sample, and count those cases separately so they are not hidden in the average.

Sources and evidence

Gemini CLI v0.69.0-preview.0 replaces a startsWith home-directory check that a sibling folder like /home/albert could pass, fixes the same prefix bug in path display, and decides folder trust before the macOS sandbox starts. An unreleased ADK Python change marks half-labelled hallucination checks as NOT_EVALUATED. Compare paths by segment and treat incomplete judgments as failures.

Views are my own and do not represent any employer, past or present.