Repository navigation
chore(release): v0.80.0 - #918
Merged
Merged
Conversation
- Add --resolution [360p|720p] to video generation commands (t2v, i2v, r2v) and MCP tool gflow_generate_video, preventing unintended defaults on omni-flash. - Wire resolution selection into MigratedComposer._select_resolution and GenerateVideoRequest DTO. - Add nano2-lite model alias for image generation (t2i, i2i, batch) mapped to Google's HARBOR_SEAL wire model. - Update documentation (USAGE.md, MCP.md, CHANGELOG.md) and tests.
Bumps the github-actions group with 2 updates: [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action). Updates `SonarSource/sonarqube-scan-action` from 8.2.1 to 8.2.2 - [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases) - [Commits](SonarSource/sonarqube-scan-action@2291811...ba9859e) Updates `github/codeql-action/upload-sarif` from 4.38.0 to 4.38.1 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@b96794f...1c5b675) --- updated-dependencies: - dependency-name: SonarSource/sonarqube-scan-action dependency-version: 8.2.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action/upload-sarif dependency-version: 4.38.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the python-minor-patch group with 2 updates: [platformdirs](https://github.com/tox-dev/platformdirs) and [ruff](https://github.com/astral-sh/ruff). Updates `platformdirs` from 4.11.8 to 4.11.10 - [Release notes](https://github.com/tox-dev/platformdirs/releases) - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst) - [Commits](tox-dev/platformdirs@4.11.8...4.11.10) Updates `ruff` from 0.16.7 to 0.16.8 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.16.7...0.16.8) --- updated-dependencies: - dependency-name: platformdirs dependency-version: 4.11.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: python-minor-patch - dependency-name: ruff dependency-version: 0.16.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: python-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…a recovery (#903) * docs(spike): measure the /about CTA click — it leads to Google's identity re-check On denon82 the 'Create with Google Flow' CTA on flow.google.com/about lands on accounts.google.com/v3/signin/confirmidentifier ('Confirm it's you'), not the account chooser, while every cookie gflow checks is valid. gflow auth login reports verified in 0.4s and does not clear it; completing the re-verification by hand in real Chrome does (6/6 /about before, 0/2 after, project create succeeds). Refs #881, #888, #756 * docs(spike): answer the #903 council — verdict order, evidence on failure, KNOWN_ISSUES entry - spike: grade the click landing first (sign-in -> NEEDS A HUMAN), require aisandbox-root for RECOVERS (landing_kind None is not the app), write the record in a finally so an exception keeps the evidence, strip link hrefs to their path, reuse safe_page_url; pre-registered table left as registered with a dated amendment - doc: state the verdict the script actually printed, drop the claim that 'gflow auth login' is a correct remediation (measured: it cannot help), narrow 'cause' to 'clearing it cleared /about', UTC times, list all raw runs, name #902 as the scenario's home - KNOWN_ISSUES: operator workaround for /about with healthy cookies Refs #881, #888, #902
…about (#902) A pending Google "Confirm it's you" leaves the cookies valid, so the session probe answered in 0.4 s and the login closed Chrome before Flow's client-side hop to flow.google.com/about landed, then printed [OK] on a broken account. The shared login poll now watches a flow.google.com landing for up to 3 s before ending the wait. On /about it keeps Chrome open and tells the user to finish Google's check; closing or timing out there raises the new IdentityRecheckPendingError (exit 12), and RealChromeStrategy no longer lets the #849 on-disk check overrule it (that check reads the same healthy cookies). Labs-served logins are not watched and close as before.
fix(auth): stop auth login reporting success while Flow routes to /about (#902)
…ver) - Resolve docs/MCP.md onto develop's line plus the two resolution additions, so #792's run-unique-upload text survives; regenerate website/docs. - Blocker 1: drop the cookie-bar accept / first-button fallback; reject only, as the COOKIE_BAR_REJECT comment requires. - Blocker 2: stop logging the ogiZ0b reply body (text_head); length and parsed count still diagnose an unparsed reply. - Major 4: Nano Banana 2 Lite reference cap starts at 3, marked unmeasured. - New: the labs video driver refuses --resolution pre-submit instead of silently billing Flow's default (guard sits after host routing). - CHANGELOG entry moved under [Unreleased]; --resolution help names the failure mode. - e2e: nano2-lite t2i (client + MCP) and omni_flash --resolution t2v (client 720p + MCP 360p) on the migrated host.
# Conflicts: # CHANGELOG.md
…solution feat(video,image): add --resolution control and nano2-lite model support
The offline suite ran single-process (~390 s locally). With pytest-xdist at -n 8 it runs in ~150 s, 4658 passed twice in a row; coverage still combines (92%). CI now runs -n auto. Parallel scheduling exposed two real isolation bugs, fixed at the source rather than marked serial: - tests/mcp: run_stdio()/run_http() lazily import prompts/resources/tools, and three tests call them with gflow_cli.mcp.server.server patched to a MagicMock. When that was the first import, @server.prompt() returned a mock and TestMcpPrompts failed for the rest of the worker (5 failures). The conftest now imports them against the real server first. - test_every_shipped_skill_is_byte_identical_to_its_source walked every file on disk under skills/, while the generator ships only git-tracked files, so the sibling test's temporary untracked fixture failed it on another worker. It now iterates the generator's own _tracked_files(). AGENTS.md documents -n and xdist_group for genuinely exclusive resources.
chore(tests): run the offline suite in parallel with pytest-xdist
… context (#906) Measures what `Stealth().apply_stealth_async` changes on top of gflow's own generation context on flow.google.com ($0, nothing submitted). webdriver, automation globals, UA brands and sec-ch-ua headers are identical in both arms; only navigator.languages, a notifications permission state and the WebGL vendor move, and the last two become less consistent. So stealth cannot explain the pass/fail flip reported in #906 on this machine; the contributor's isolated-desktop launcher is the leading unmeasured confound. Memory: records #907 as the third reintroduction of the body-wide refusal-card text scan, and that "unusual activity" is not a content verdict and does not justify a stealth dependency. Refs #906, #907
, #873) flow.google.com answers a refused submit with HTTP 200 and a batchexecute error envelope: a null payload, the gRPC status in slot 5 and Google's ErrorInfo reason inside it. parse_frames kept only frames with a string payload, so every caller saw an empty reply: the video path waited out a retryable 60 s TransportTimeoutError and the image path raised WireFormatError("no ogiZ0b frame"), while Flow's grid showed "We noticed some unusual activity". batchexecute.rpc_errors now returns the envelopes parse_frames skips, and both submit observers map a REASON to a class: PUBLIC_ERROR_UNUSUAL_ACTIVITY to WafRejectionError (the labs path's class for the same reason, retryable flag preserved) and the content-safety reasons to ContentPolicyError. A bare status with no reason is not a refusal - the #723 queued entity submit replies [5] - so it keeps today's behaviour. Measured, not inferred: a submit with its reCAPTCHA token corrupted in flight is refused with that envelope; an aborted submit gets no reply but renders the identical <flow-error-tile>, which is why the grid card cannot be the signal. New e2e (opt-in GFLOW_CLI_E2E_RUN_REFUSAL=1) provokes a real refusal and passed on a probe profile. Diagnosed by @stgmt in #873 and #906. Supersedes #873 and the refusal-card half of #907.
#909 measured that the refusal is on the wire and rewrites this note in full, including the stealth finding added here. Dropping the append avoids a merge conflict between the two PRs.
- log migrated.submit_refused with rpc, code and reasons before raising - state that retryability is the class default, as on labs (no override) - feed the image scenario the 2026-09-27 capture byte for byte - docs: E2E_TESTING opt-in row, DEBUGGING exit-10 row aligned with ACCOUNT_SAFETY, DATA_LAYER waf-rejection wording, KNOWN_ISSUES date - memory: content-policy note points at the wire on flow.google.com; refusal note no longer links a spike that only exists on #908 - CHANGELOG: say the video refusal is covered offline, not observed live
docs(spike): playwright-stealth changes no automation tell on gflow's context (#906)
Bumps the github-actions group with 2 updates: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action). Updates `astral-sh/setup-uv` from 10.1.0 to 10.2.0 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](astral-sh/setup-uv@bec219d...c18668a) Updates `github/codeql-action/upload-sarif` from 4.38.1 to 4.38.2 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@1c5b675...2892aa5) --- updated-dependencies: - dependency-name: astral-sh/setup-uv dependency-version: 10.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action/upload-sarif dependency-version: 4.38.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the python-minor-patch group with 3 updates: [platformdirs](https://github.com/tox-dev/platformdirs), [ruff](https://github.com/astral-sh/ruff) and [s3fs](https://github.com/fsspec/s3fs). Updates `platformdirs` from 4.11.10 to 4.11.13 - [Release notes](https://github.com/tox-dev/platformdirs/releases) - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst) - [Commits](tox-dev/platformdirs@4.11.10...4.11.13) Updates `ruff` from 0.16.8 to 0.16.9 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.16.8...0.16.9) Updates `s3fs` from 2026.7.0 to 2026.9.0 - [Changelog](https://github.com/fsspec/s3fs/blob/main/release-procedure.md) - [Commits](fsspec/s3fs@2026.7.0...2026.9.0) --- updated-dependencies: - dependency-name: platformdirs dependency-version: 4.11.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: python-minor-patch - dependency-name: ruff dependency-version: 0.16.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: python-minor-patch - dependency-name: s3fs dependency-version: 2026.9.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: python-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…b-actions-95e07273bf chore(deps): bump the github-actions group with 2 updates
…h-7fc1046542 chore(deps): bump the python-minor-patch group with 3 updates
… asset status (#896, #898) Flow reports DONE and bills before the signed-media GET; when that GET fails the asset stayed 'pending' forever and the operation read as a failed generation. get_signed_media now raises MediaDownloadError (a NetworkError, exit 6, slug media-download), and record_failed_operation - the chokepoint every video caller and the MCP worker already route through - marks that media id MEDIA_GENERATION_STATUS_SUCCESSFUL via the previously dead update_asset_status. VideoRow carries status, so gflow data list videos (table and --json) can show it.
…A for the UI transport
The UI transport never reads request.recaptcha_token - Flow's page mints its own
on click, and git log -S shows the token was never consumed there. The client
pre-mint was dead weight that ran on whatever page the pool handed out; after a
successful migrated image that is about:blank, where the mint raised a
misleading RecaptchaError instead of exit 36.
uses_page_owned_image_recaptcha collapses to True, and the URL/latch logic that
only fed the mint decision is deleted with its write-only latch. The migrated
composer now refuses unported forms by name ('the IMAGEN_3_5 model is not
ported yet'), worded as the host Flow served. HTTP image transports still mint.
Baseline before/after on a live profile, $0: both t2i --model imagen4 arms exit
36; the refusal moved from the client mint guard to the composer. Three new e2e
tests (fresh client, warm client after a success, MCP twin) pass live.
Commits the two 2026-09-20 spike scripts and their verdict doc.
…le docs - _drive_images_generation calls uses_page_owned_image_recaptcha() rather than only testing it exists, so a transport answering False still gets a mint. - Docstring no longer claims the method always mints or is the only mint site. - Collapse the 8-case parametrize over a constant to one about:blank assertion. - migrated-host-driver-wire-lessons memory: replace the latch lesson (deleted by this PR) with #891's — the UI transport never consumed the token.
- Narrow the CHANGELOG to what the code covers (a dropped connection); an HTTP error answer on the signed URL still leaves the asset pending. Note the Problem Details type change under Changed. - docs/DATA_LAYER.md: media-download in the error_type list, the failure-recording rule, and the new STATUS column; website mirror regenerated. - Write the asset status after the operation status, so a busy store loses the less important write. - Pin the transport raising MediaDownloadError with its media_id, and the status field in data list videos --json.
…CVE-2026-102274 Both transitive (gcs extra; mcp[crypto]). pip-audit over the --all-extras export is clean; gcsfs, requests-oauthlib, google-auth-oauthlib and mcp import fine, and the MCP suite passes (234).
- Correct reachability everywhere: gflow run --config runs every prompt through one client with a per-prompt model. Measured on develop: [nano2, imagen4] -> item 2 RecaptchaError, whole run exit 1, results table lost. On this branch: exit 36, item 2 refused by name, '1/2 succeeded'. - Pin the labs.google kill switch for images (now its only exit-36 source) with an offline test asserting at=image_flow_host_kill_switch. - e2e: spy on FlowApiClient._mint_recaptcha_token instead of inferring from logs (a successful mint logs nothing); the MCP twin asserts it too. 3/3 live. - Stale 'sequential reCAPTCHA mints' in USAGE.md and the cli_run docstring.
chore(deps): lock oauthlib 4.0.0 and pyjwt 2.15.1 (CVE-2026-49265, CVE-2026-102274)
fix(data): record a clip whose download failed as generated, and show asset status (#896)
…ient-premint # Conflicts: # CHANGELOG.md
fix(image): stop pre-minting reCAPTCHA for the browser transport (#891)
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This branch was previously 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.
Release v0.80.0, cut from
develop@926a15d3. The signed tagv0.80.0is pushed, and the Release workflow is running.What's in it (see the CHANGELOG
[0.80.0]section):oauthlib4.0.0 andpyjwt2.15.1 (chore(deps): lock oauthlib 4.0.0 and pyjwt 2.15.1 (CVE-2026-49265, CVE-2026-102274) #917).--resolution 360p|720pand--model nano2-lite(feat(video,image): add --resolution control and nano2-lite model support #787).gflow runno longer crashes.STATUSis shown.auth loginstops on the/aboutidentity re-check.Release gates:
PROJECT_STATUSupdated andcheck_release_artifactspasses./gflow:check: green (4672 passed, 93% coverage).docs/LIVE_VERIFICATION_v0.80.0.md, 0 Veo credits./gflow:doc-review: three auditors. Completeness came back RED (nano2-litewas missing from the MCP docs) and is fixed; cross-reference and drift came back YELLOW and are fixed. The fixes are folded into this commit.Merge with a merge commit, never squash.