Repository navigation
chore: promote CLI v5.8.0 - #228
Merged
Merged
Conversation
The dcd cloud poll loop fetched every result row in full, including result_files and its main_log, every 20-60s, even when nothing had changed. It now asks for ?view=summary, which an older API ignores (returning the full rows, a superset), and revalidates with the last ETag so an unchanged poll is an empty 304. The conditional request also sends Cache-Control: max-age=0. Without it undici appends Cache-Control: no-cache, and Express then never answers 304. Only a non-empty result set with an ETag is cached; the 200 error envelope and empty sets are not.
chore: merge production into dev after 5.7.1
feat(cloud): add --priority flag for within-org run ordering (dcd#1581) --priority low|normal|high (default normal) reorders only the org's own queued runs across its concurrency pool, for every flow in the upload. It never moves the org ahead of other customers. Runs queued longer than 6 hours are promoted first, so low runs are not starved, and retries keep the run's priority. Sent as a top-level submission field (not inside config), and only when it is not normal, so the default path and older APIs see no change. Also exposed on the dcd_run_cloud_test MCP tool.
Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 76.0.0 to 77.0.0. - [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases) - [Commits](sindresorhus/eslint-plugin-unicorn@v76.0.0...v77.0.0) --- updated-dependencies: - dependency-name: eslint-plugin-unicorn dependency-version: 77.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the minor-and-patch group with 6 updates: | Package | From | To | | --- | --- | --- | | [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) | `1.32.0` | `1.32.1` | | [@supabase/supabase-js](https://github.com/supabase/supabase-js/tree/HEAD/packages/core/supabase-js) | `2.117.2` | `2.117.3` | | [js-yaml](https://github.com/nodeca/js-yaml) | `5.4.2` | `5.4.3` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.6.4` | `26.6.5` | | [prettier](https://github.com/prettier/prettier) | `3.9.9` | `3.9.10` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.71.0` | `8.71.1` | Updates `@modelcontextprotocol/sdk` from 1.32.0 to 1.32.1 - [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases) - [Commits](modelcontextprotocol/typescript-sdk@1.32.0...1.32.1) Updates `@supabase/supabase-js` from 2.117.2 to 2.117.3 - [Release notes](https://github.com/supabase/supabase-js/releases) - [Changelog](https://github.com/supabase/supabase-js/blob/master/packages/core/supabase-js/CHANGELOG.md) - [Commits](https://github.com/supabase/supabase-js/commits/v2.117.3/packages/core/supabase-js) Updates `js-yaml` from 5.4.2 to 5.4.3 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](nodeca/js-yaml@5.4.2...5.4.3) Updates `@types/node` from 26.6.4 to 26.6.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `prettier` from 3.9.9 to 3.9.10 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.9.9...3.9.10) Updates `typescript-eslint` from 8.71.0 to 8.71.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@modelcontextprotocol/sdk" dependency-version: 1.32.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@supabase/supabase-js" dependency-version: 2.117.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: js-yaml dependency-version: 5.4.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@types/node" dependency-version: 26.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: prettier dependency-version: 3.9.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: typescript-eslint dependency-version: 8.71.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ci(claude-review): keep the review in the foreground and fail if nothing is posted Headless runs can background the bug-review subagents and end the turn to 'wait' for them. In -p mode that ends the session, so no comment is posted and the job still goes green. Port of devicecloud-dev/dcd#1536. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: finalerock44 <77282157+finalerock44@users.noreply.github.com>
) The API's default Android API level moves from 34 to 36 on 19 October 2026 (the device stays Pixel 7), so a device-only request is now checked against 36. `--android-device pixel-10` on its own is accepted, as the API accepts it. pixel-7 / API 36 has no Google Play image, and the API does not apply the global default to a Play request that omits one half: it picks the value that makes the pair a Play cell. The check now fills the omitted half the same way, so `--google-play --android-device pixel-8` or `--google-play --android-api-level 36` is no longer refused here when the API would run it. A device with no Play image, or a level no Play device offers, is still refused with the same messages.
* fix(cloud): re-send a flow submit whose response was lost When the API stalls, a `dcd cloud` submit can wait 300 s and then get a 502 from Railway's edge. The CLI can't tell whether the run was created, so it failed the command even when the run went ahead (dcd#1617). The API now answers a repeat of the same submit (same body, same upload id) with the run it already created, or a 409 while that run is still being created, and never creates a second run or charge. So the CLI sends a submit again while its outcome is unknown: - submitWithRetry (services/flow-submit.service.ts) re-sends the same body on a 409/500/502/503/504 or on any transport failure (network error, timeout, a body cut off), waiting 2 s and then up to 30 s between attempts, about three minutes in all. The flow zip is not uploaded again. - Each attempt has a 90 s timeout, well under the 300 s at which Railway's edge cuts it with a 502. - The multipart fallback for an API without the client-direct endpoint runs only when the first attempt 404s or 405s. A 404 after a retry comes from an API that took an earlier attempt. - `dcd cloud` prints one warning per retry (not in --json); dcd-mcp logs to stderr. Both record `submit_attempts` on the lifecycle telemetry event. - enhanceFetchError keeps the undici cause, so a timeout, a reset and a DNS failure no longer all read as "fetch failed". No new flags: `--retry` already means re-running failed tests. * fix(cloud): refresh auth between submit retries, and count failed attempts Review on #226: - Every retry reused the auth resolved at the start of the command, and the retries can outlast a `dcd login` access token. The next attempt then got a non-retryable 401, possibly after an earlier attempt had already created the run. Each attempt now calls refreshAuth first, as the poll loops do. A session that can't be refreshed (definitive SessionRefreshError, or no stored session) is not retried. - `submit_attempts` was only recorded on success, so `command failed` never carried it. That is the worst-stall case it exists to measure. submitWithRetry now calls onAttempt before each attempt, and both `dcd cloud` and dcd-mcp record the count there. Also bounds the worst case. No attempt starts more than 5 minutes after the first. With every attempt timing out at 90 s the retries could otherwise hold the command for about 16 minutes; now the worst case is about 6.5.
…#227) The API stops accepting API levels 29, 30 and 31 on 19 October 2026 (they were only ever offered on pixel-6, which keeps 32-37). Validation already comes from the compatibility endpoint at run time, so this enum only feeds the flag's help text; it no longer advertises levels that are rejected. src/types/generated/schema.types.ts is left for the next full regeneration: regenerating now would also pull in unrelated API drift, including a device slug that is still gated to dev. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. 🤖 Generated with Claude Code |
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.
What & why
Type of change
fix— bug fixfeat— new featureperf— performance improvementrefactor— code change that's neither a fix nor a featuredocs— documentation onlychore/ci/build/test— tooling, no user-facing change!or PR notes aBREAKING CHANGE:)Checklist
pnpm lintpassespnpm typecheckpassespnpm buildpassesCHANGELOG.md(release-please handles this)README.md/STYLE_GUIDE.mdupdated if behaviour or output changedHow to test