Repository navigation
Conversation
…ller argument cannot carry
lease.request took any non-empty exact osVersion, and a downloadable missing runtime handed it to the installer as the component, past componentVersionSchema's bound. An exact osVersion is now held to that schema, which also refuses ';' (sdkmanager's package path separator). Ranges keep their grammar. Protocol 54 -> 55.
Contributor
Author
Review (maintainer's agent, round 1)No blocking findings.
Note, no change needed: the one-off timing failures across |
V3RON
added this pull request to stack #897
October 23, 2026 06:19
… HEAD # Conflicts: # src/contract/AGENTS.md # src/contract/protocol.ts # src/daemon-protocol/index.test.ts # src/daemon/AGENTS.md
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
lease.requestaccepted any non-empty exactosVersion. When the driver answered a downloadable missing runtime and the request hadallowDownload: true, that raw string went to the installer as the component, skippingcomponentVersionSchema's bound. On iOS that let whitespace and trailing text intoxcodebuild -downloadPlatform iOS -buildVersion <raw>. On Android,;(sdkmanager's package path separator) could add extra segments tosystem-images;android-<raw>;....An exact
osVersionmust now passcomponentVersionSchema, and that schema now also refuses;. Ranges are parsed as before.Changes
src/contract/operations.ts:componentVersionSchemamoves above the lease request schema and its regex also refuses;.refuseBadOsVersionchecks an exact constraint againstcomponentVersionSchema. If it fails, the request gets a 400BAD_REQUEST: "an exact OS version is 1 to 64 characters, none of them whitespace, a control character or;, and does not start with-" (pathosVersion). Range parsing is unchanged.src/contract/protocol.ts:PROTOCOL_VERSION_RANGE57/57 -> 58/58. The manuals that state it are updated (src/contract/AGENTS.md,src/daemon/AGENTS.md), andsrc/contract/AGENTS.mdnow states the bound.website/.../using-devices/choosing-a-device.mdx: says "any other text is an exact version", so it now adds the bound in one sentence.reference/cli.mdxandprogrammatic-client.mdxonly say "an exact version or a range", so they are unchanged.src/daemon/server.test.ts: the test for a component name longer than the progress push's 64-character limit used to send a 65-characterosVersion, which is now refused. Now the fake driver names the long component itself (RuntimeMissingErrorwithcomponent: "9".repeat(65)), and the request sendsosVersion: "26.5". It is the same path through the server.src/daemon-protocol/index.test.ts: expects 58.Tests
src/contract/operations.test.ts(strict area): a new table test refuses the exact versions"17.0 -foo","-1","34;extras", a 65-character string, a string with a control character and" 17.4", each with the exact message and path. The accepted table adds"17.4","34","18.5.1"and a 64-character version. The range forms (>=18,>=18 <26,18 - 26) still pass. Thecomponent.installrefusal table adds"35;extras". All of these failed on the test commit and pass with the fix.src/mcp/server.test.ts,src/http/app.test.ts,src/http/errors.test.ts,src/http/openapi.test.ts,src/cli/lazy-loading.test.ts,src/cli/index.test.tspass.pnpm test:changed: 140-141 of 142 files pass. Each run had 1-2 timing failures, a different test each time, all in files this PR does not touch: the CLI 20 s startup deadline, usage reader ordering, and dispatcherdevice.execchunk delivery. Each of those files passes when run alone. The machine load average was 14-24 from other agents. The same 142 files passed twice on base3ca05c56b.pnpm test:console --project=chromium: 207 passed and 2 failed. The drain/Undo failure is the known flaky test Console e2e: a worker is drained from Fleet with no dialog, and Undo undrains it fails on the row's drained text #886. "Stop stops the capture" timed out under load and passed whenscreen.spec.tswas rerun.check-openapi.mjs: ok (30 operations).openapi.jsonis generated at build time, so it has no checked-in diff.Assumptions
minmoves to 58 along withmax. No compatibility path stays side by side: an older client only differs in that a malformed exactosVersionis no longer accepted.Written by an agent.