Skip to content

Latest commit

 

History

History
433 lines (303 loc) · 42.8 KB

PROJECT_STATUS.md

File metadata and controls

433 lines (303 loc) · 42.8 KB

Project Status

Where gflow-cli is in its lifecycle, by release. Updated on every signed tag.

Current release

v0.59.0 — alpha. Catalog freshness becomes a first-class concern: gflow doctor (#542), gflow data sync --names (#543), and rename self-healing (#546). gflow doctor is a read-only pre-flight diagnostic — 10 checks over the catalog, DB integrity, stuck work, and environment via a provably non-migrating mode=ro connection (byte-identical-DB test), severities pass/info/warn/fail, exit 33 = findings-present, experimental --json, per-profile attribution, redaction-safe output. gflow data sync --names reconciles catalog display names against Flow's projectInitialData listing by direct authenticated GET (~0.5 s/project, zero credits): write-by-default with --dry-run preview, atomic json_set provenance stamps, ghost tombstones gated on provably-complete non-empty listings (mass-tombstone guard), un-ghosting on reappearance, WAF/auth fail-fast, retryable exit 34, redacted-history refusal. Refresh-on-miss makes a stale cached name self-heal mid-generation: one listing fetch on a picker miss, retry-once, write-through (sync.source="refresh"). Live-verified end to end: the sync e2e (zero credits), a real-catalog backfill (117 projects, 398 nameless rows → 338 named / 57 tombstoned, zero failures), and a stale-name heal e2e (~2 Imagen credits). Two live-caught bugs (sqlite cross-thread store open; a pagination depth-ceiling failing toward the destructive branch) fixed with red-first regression tests. See LIVE_VERIFICATION_v0.59.0.md.

v0.58.0 — catalog-name picker contract (#529) + r2v named-reference fixes

v0.58.0 — alpha. Catalog UUIDs resolve through Flow display names (#529) + r2v named references un-broken after Flow's picker redesign. The picker contract is now catalog UUID → workflows[].metadata.displayName → picker name search → exact UUID-in-thumbnail tile: the UI response collector preserves the sibling workflow name so generated-image catalog rows retain the search key (store-mode history only), image --ref <uuid> and I2V frame UUIDs are enriched with it, and UUID/UUID-stem/prompt-hint/grid-scroll fallbacks are gone from that path — a missing name falls through to the SHA-verified local-file upload or a typed error, never an unfiltered click. Live-verifying the r2v surface caught two silent UI drifts and fixed them: the picker dialog exposes no accessible tree (tiles are now text-matched with an anchored, locale-badge-tolerant regex), and clicking a result now attaches directly (include button demoted to legacy fallback). Four committed e2e tests pin all of it against real Flow, including a real r2v video generated from a catalog name. See LIVE_VERIFICATION_v0.58.0.md.

v0.57.1 — two long-open UI bugs root-caused from live evidence (#493, #451/#288)

v0.57.1 — alpha. Two long-open UI bugs root-caused from live evidence (#493, #451/#288). #493 was reported as an unrecognized "third editor variant"; it is not. Flow's expanded chat sidebar removes the classic composer entirely — no crop_* settings trigger and no Agent pill — which is one state producing both reported symptoms, and why the failure surfaced as UiSelectorDriftError (exit 23) rather than the retryable agentic error: with no agentic indicator on screen, the cohort detector matched nothing. Recovery hinged on a close button scoped to the sidebar's edit_square affordance, so a cohort lacking that ligature could never recover; ensure_media_mode now falls back to an unscoped close from the demonstrably stuck state, A/B-proven live. #451/#288 were never selector drift either: Flow's settings popover is model-conditional — only omni-flash renders a duration row — so --duration on a Veo model hunted a control that is never drawn. It now fails at the CLI edge with exit 2 before any browser work. Also: --reference-entity no longer advertised on video i2v (its DTO always rejected it), a typed ReferenceNotFoundError (exit 32) replaces a bare Playwright timeout, and gflow models stops advertising a duration users cannot set. Everything verified at zero credits. See LIVE_VERIFICATION_v0.57.1.md.

v0.57.0 — video joins the UI-mode policy + MCP truthfulness wave

v0.57.0 — alpha. Video joins the UI-mode policy (#299) + an MCP truthfulness wave (#496–#501). gflow video t2v/i2v and MCP gflow_generate_video now take --ui-mode/ui_mode and bind their driver through get_ui_driver after editor mount instead of a hardcoded classic bind; video has only a classic driver, so auto ≡ classic, an env-sourced agentic degrades with a warning, and an explicit --ui-mode agentic is refused with exit 2 before any browser work. When Flow serves the agentic editor and classic cannot be recovered, video now fails fast pre-submit (UiModeUnavailableError, exit 28, zero credits) instead of burning 30–40 s of doomed selector timeouts. The agentic direction was hardened to match the classic one: mode_control.ensure_agent_mode replaces _force_agent_mode (deleted) with real-click-first + aria-pressed verification, no tune-ligature check, unknown editor variants no-op with a warning, and the sanctioned reload carries an explicit 15 s timeout. On the MCP side: gflow mcp run --no-spend (#496) unregisters both generate tools so an agent cannot even see them; gflow_auth_status (#497) gives agents a credit-free pre-flight session probe; gflow_list_projects paginates honestly with offset/has_more/next_offset (#498); the stub gflow_list_characters — which always answered "no characters", an active lie — is gone (#499); and gflow://docs/known-issues is bounded to a small index plus a per-issue templated read (#501) instead of injecting ~70 KB on every read. On the supply-chain side the release finishes the Scorecard hardening tail: every workflow now runs with a least-privilege token and every uses: action is pinned to a full commit SHA, the remaining in-workflow package installs are hash- or digest-pinned (website/requirements.txt, Dockerfile.triage, pip-audit), CI enforces a test-count floor so "a green build that ran nothing" cannot pass, check_repo_hygiene.py fails on version disagreement between pyproject.toml/__init__.py/plugin.json, and a self-run OpenSSF Scorecard workflow publishes the score as a README/website badge with a SECURITY.md section explaining it. Everything in this release was verified at zero credits. See LIVE_VERIFICATION_v0.57.0.md.

Develop (unreleased, post-v0.59.0): nothing queued yet — see CHANGELOG.md [Unreleased] for the authoritative list. develop is the staging branch for the next release; this line is not a substitute for the changelog.

v0.56.0 — ops-hardening batch + honest mode-switch evidence (#477/#478/#479, #493)

v0.56.0 — alpha. Ops-hardening batch (#477/#478/#479) + honest mode-switch evidence (#493). A Chromium major-version downgrade guard refuses to open a persisted profile with an older bundled engine than last wrote it (ProfileEngineDowngradeError, exit 11 — pre-auth, pre-credits) instead of letting Chromium's downgrade cleanup shred the session store; GFLOW_CLI_LEASE_WAIT_SECONDS=N adds an opt-in bounded wait on same-profile lease contention (default keeps the historical fail-fast); a once-a-day cache-served PyPI check prints a one-line stderr notice when a newer gflow-cli exists; and the exit-23 mode-switch fall-through now states that no known Flow cohort matched (the third, unrecognized editor layout from #493) while the drift remediation names the artifacts runs actually produce (diag_mode_switch_miss.json, the referenced screenshot, the incident bundle) instead of a phantom "debug screenshot from this message". Guard, lease wait, and the mode-switch path were live-verified; #479's notice is deferred-with-reason to a post-release check (it needs a published newer version on PyPI). See LIVE_VERIFICATION_v0.56.0.md.

v0.55.0 — Tier-1 hardening batch + docs truth sweep (#471–#476)

v0.55.0 — alpha. Tier-1 hardening batch (#471–#476) + docs truth sweep. gflow auth status now proves the Flow session (cookie-jar probe of the live session endpoint, no browser, no credits) and exits 0/1 with remediation hints; gflow mcp setup is implemented (claude-desktop / cursor / vscode, non-destructive merge with a pristine one-time backup); incident bundles stage a pre-filled report.md bug-report template built from allowlisted manifest fields only; Windows profile dirs get a real restrict-to-current-user DACL at login plus a marker-gated upgrade sweep at browser launch; all 11 MCP tools route through one error funnel that masks raw exception text from clients; llm_api_key/daemon_token are SecretStr so a Settings dump cannot leak them. The false "requires a Google AI Ultra or Pro subscription" claim was removed everywhere — any Google account with Flow access works; only feature gates (4K upscale) are tier-bound. See LIVE_VERIFICATION_v0.55.0.md.

v0.54.0 — login close-guidance + supply-chain guards (#465, #470)

v0.54.0 — alpha. Clearer close-the-browser guidance in gflow auth login (#470); overlay/watermark detection hardened to pure structural selectors; Dependabot now ignores playwright minors and all patchright bumps after PR #465 proved a pyproject.toml bound does not gate the uv ecosystem (it rewrites it); timing-jitter entropy moved to secrets.SystemRandom (SonarCloud S2245). First mainline release after the orphaned v0.53.x tags. See LIVE_VERIFICATION_v0.54.0.md.

v0.53.0 / v0.53.1 — interaction humanization + release-modal detection (#315, #403)

v0.53.0 — alpha. Driver interaction delay humanization (_jitter_ms, #315) and locale-invariant Flow release-overlay detection for the watermark-toggle modal (#403). v0.53.1 is a version-bump re-release recording headed live-verification evidence. Both tags were published without reaching mainline at the time; their content and honest CHANGELOG sections were reconciled during the v0.54.0 cut.

v0.52.0 — intra-batch references + entity provenance parity (#317, #402, #451)

v0.52.0 — alpha. Intra-batch reference support for gflow image batch (ref="batch:0" DAG ordering, #317); --reference-entity/--reference-entity-name parity on the video commands with provenance recording (#402); video duration selector cascade fix (#451). See LIVE_VERIFICATION_v0.52.0.md.

v0.51.0 — dependency & audit hygiene release

v0.51.0 — alpha. pip-audit now covers every optional extra; the full Dependabot backlog cleared in one lock update; the playwright bound raised >=1.59.0,<1.60.0 → >=1.61.0,<1.62.0 after live A/B evidence (1.62.0 stays excluded — it hangs i2v at frame upload). See LIVE_VERIFICATION_v0.51.0.md.

v0.49.0 / v0.50.0 — omni-flash I2V + MCP Tasks extension (#125, #409)

v0.49.0 — alpha. omni-flash start-frame I2V (#125), playwright upper-bound pin, submission-stage watchdog, count-tab fail-closed logic (#404). v0.50.0 — alpha. MCP 2026-07-28 Tasks extension (SEP-2663, #409) with non-blocking task handles, -o/--output path hardening (#414/#415), PR-triage alert resilience (#428). See LIVE_VERIFICATION_v0.49.0.md / LIVE_VERIFICATION_v0.50.0.md.

v0.48.0 — predictable output paths (#411)

v0.48.0 — alpha. Predictable output paths (#411). Adds an explicit -o / --output flag to image t2i/i2i and video t2v/i2v: the asset lands at the exact local path you name (parents auto-created, -o beats --out/--out-dir), with deterministic _1, _2, … suffixes for multi-count image runs. Cloud (s3:///gs://) targets, r2v/chain, video multi-count suffixes, and an MCP-tool output param are tracked follow-ups (#414, #415 — the MCP param was cut pre-release when the audit showed the worker queue never reads it). See LIVE_VERIFICATION_v0.48.0.md.

v0.47.0 — MCP SDK 2.0.0 migration + entity provenance (#402, #407, #408)

v0.47.0 — alpha. MCP SDK 2.0.0 migration + dual-era protocol + entity provenance (#402, #407, #408). Bounds mcp dependency to >=2.0.0,<3, migrates server to MCPServer, supports both 2026-07-28 and legacy protocol eras via SDK, defaults gflow serve to Streamable HTTP at /mcp, adds resolve-drift CI job, and records entity_ids / entity_names in operations.metadata_json on generation operations. See LIVE_VERIFICATION_v0.47.0.md.

v0.46.0 — prompt tools on any OpenAI-compatible endpoint (#387)

v0.46.0 — alpha. BREAKING — the prompt tools drive any OpenAI-compatible endpoint (#387). --tool creative-director / reverse-engineer / storyboard now speak OpenAI Chat Completions instead of being hardwired to Google's native Gemini API, so OpenAI, gateways/proxies (OpenRouter, LiteLLM), local runtimes (Ollama, LM Studio), and Google's own compatibility endpoint all work. New config: GFLOW_CLI_LLM_BASE_URL, GFLOW_CLI_LLM_API_KEY (optional — omitted when unset so keyless local gateways work), GFLOW_CLI_LLM_MODEL. The removed GFLOW_CLI_GEMINI_API_KEY / GFLOW_CLI_GEMINI_MODEL trigger a loud one-time notice, never a silent no-op. The user-supplied endpoint is treated as a trust boundary: redirects declined, https (or loopback http) enforced, error bodies redacted. reverse-engineer degrades to the original input instead of expanding a file path as a prompt. See LIVE_VERIFICATION_v0.46.0.md.

v0.45.0 — reference + character binding fixes (#393/#395)

v0.45.0 — alpha. Reference + character binding fixes (#393/#395). gflow image i2i --ref <UUID> now attaches the catalog's recorded file when Flow's per-project media picker cannot reach the tile, instead of failing the run — the fail-loud contract (never generate without a requested reference) is unchanged and pinned by a live e2e. gflow character create binds portraits to the character again: overlay dismissal was pressing Escape on Flow's own composer ([role='dialog']/[role='alert'] matched the app itself), and the character route could bounce to the project page, sending the prompt to the project composer — both produced generations with no entityContext, which Flow filed as plain project images. Also: a Flow web-app crash on the character route is now the typed retryable FlowAppError (exit 31), character binding failures say what actually happened, and --format-prompt (#383) is live-verified. 2810 tests pass. See LIVE_VERIFICATION_v0.45.0.md.

v0.44.0 — dual-side project naming & management (#381)

v0.44.0 — alpha. Dual-side project naming & management (#381). Feature set includes gflow project subcommand family (list, show, rename, create), --project-name / --project-title options across gflow image (t2i, i2i) and gflow video (t2v, i2v, r2v) generation commands, prompt slugging for scratch projects, dual-side title sync updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep, HTTP 429 adaptive backoff / RateLimitError recovery (#384), character body prompt composer fixes (#378), and a repo-local Codex plugin ($gflow:* skills). Verified via full test suite and live Playwright Chromium E2E transport test. See LIVE_VERIFICATION_v0.44.0.md.

v0.42.0 — content-safety classification + Antigravity coding agent (#359/#360/#361)

v0.42.0 — alpha. Content-safety classification + Antigravity migration (#359/#360/#361). Content-safety 400 responses from Flow are now classified as ContentPolicyError (exit 5) instead of the misleading WireFormatError, so callers can branch deterministically on a policy rejection. Corrected a false flow_operation_id invariant (veo-lite can emit a remote_started checkpoint with operation_id unset; media_id is the canonical handle used by polling, download, and lookup). Replaced the retired Gemini CLI with Antigravity (agy) as the supported Google coding agent across skills and docs — Antigravity auto-discovers AGENTS.md, so the dedicated GEMINI.md hub is removed and agy is the pinned high-tier llm-council external reviewer. See LIVE_VERIFICATION_v0.42.0.md.

v0.41.0 — production-readiness hardening (#357)

v0.41.0 — alpha. Production-readiness hardening ([#357]): queue safety (versioned payloads, atomic claims, checkpointed execution phases), cross-process profile lease (ProfileLockedError exit 11), cancellation-safe browser teardown, driver honesty (typed SupportsSendPrompt injection, frozen TransportSetup), mention-index fail-closed (MentionIndexUnavailableError exit 29), and external-CDP lifecycle removal. Removed nonfunctional manifest-driven video batch command (never worked end-to-end; loop gflow video t2v/i2v from the shell instead). Also: /gflow:live-verify skill for per-feature live-verification enforcement. 2513 tests pass; live-verified against real Flow (stale-session fail-fast, free image gen, paid veo-lite T2V). See LIVE_VERIFICATION_v0.40.0-production-readiness.md.

v0.40.0 — prompt @-mention resolution for asset tagging (#344)

v0.40.0 — alpha. Prompt @-mention resolution for asset tagging (#344). @Name in a t2i/i2i/video prompt resolves to a staged, taggable character entity via services/mentions.py's resolve_and_apply, shared by the image/video CLI paths, the async worker, and MCP tools. Media-asset (non-character) @-mentions also work, but on the image path only — video-path media mentions are Phase 3. A bare character with no reference images is rejected early with a clear error instead of failing deep in the UI attach. De-tagged prompts are persisted to the catalog. See REFERENCE_STRATEGIES for @-mention vs --reference-entity vs --ref. Verification: LIVE_VERIFICATION_v0.40.0 (gflow character create + @Zoro t2i passed live end-to-end against unmodified develop, ~2 Imagen credits; also records a same-cycle investigation dead end where a stale local WIP branch was mistaken for develop's real state).

v0.39.0 — failed-generation persistence + gflow data list errors

v0.39.0 — alpha. Failed generations are now persisted to the local catalog (#341). Every paid-generation path (video t2v/i2v/r2v, video chain, image t2i/i2i, multi-prompt t2i, gflow run, movie run, and the async worker) now records a terminal status="failed" operation row — with a stable error_type derived from the exception's RFC 9457 problem_type and a redacted error_detail — before the error propagates, so WAF-403 block onset, duration, and recovery windows are measurable instead of reconstructed from memory. The new gflow data list errors subcommand browses failed operations newest-first, and videos whose poll returns succeeded=false are now recorded as failed (previously mis-recorded as succeeded). Bounded retention + export deferred to #345. Verification: LIVE_VERIFICATION_v0.39.0 (a real image t2i HTTP-400 wire failure produced the first failed row in the production catalog, $0).

v0.38.1 — agentic-pin recovery (opt-in reload after a real toggle-off)

v0.38.1 — alpha. Agentic-pin recovery (#338). When a real, unforced Agent-toggle click lands but the classic media panel never mounts in place (the 2026-07-17 both-accounts pin), ensure_media_mode can now reload the page once — opt-in and sanctioned only from the pre-bind classic path — to re-roll the server's per-load cohort and mount the persisted isAgentModeToggled=false preference; a composer-render race that made the toggle unreachable was also fixed. Verification: LIVE_VERIFICATION_v0.38.1 (classic recovered on denon82 after ~2h of active server pin).

v0.38.0 — robust agentic↔classic mode control + i2i ref dedup

v0.38.0 — alpha. Robust agentic↔classic mode control + i2i reference dedup (#332, #314). --ui-mode is now driven by a state-aware mode controller reading Flow's Agent toggle aria-pressed state (locale-invariant), ending spurious "forced agentic — not recoverable" aborts caused by an icon heuristic that matched both modes; --ui-mode classic reliably reaches the classic editor. Repeated local --ref images in gflow image i2i are now attached by selecting the already-uploaded library tile via exact-filename picker search (with a virtualised-grid scroll fallback, #335) instead of re-uploading duplicates. Also ships the PR-triage autopilot implementation (#238/#333, host deployment staged separately) and a behavior-preserving cognitive-complexity refactor (#331). Verification: LIVE_VERIFICATION_v0.38.0 (agentic→classic recovery observed in a real run; dedup contract proven with an upload-then-dedup run pair; veo-fast t2v successful).

v0.37.0 — viewport 1920×1080 + agentic count enforcement

v0.37.0 — alpha. Viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH (#313, #315, #329). UI-automation and auth-login viewports harmonized to 1920×1080 to blend with the most common desktop resolution; the agentic cohort's requested image count (-n) is reliably enforced via the Agent settings panel; the protocol-mandated SHA-1 in SAPISIDHASH is marked usedforsecurity=False so it works under FIPS-mode Python. Also bumps mcp to 1.28.1 (CVE-2026-59950). Verification: LIVE_VERIFICATION_v0.37.0.

v0.36.0 — diagnostic tooling + reference-entity-smuggling fix

v0.36.0 — alpha. Diagnostic tooling (GFLOW_CLI_HAR_PATH + GFLOW_CLI_DEBUG_TRACEBACK) + reference-entity-smuggling fix (#312/#316). Two opt-in, env-var-only debug knobs: GFLOW_CLI_HAR_PATH captures full Playwright network traffic to a HAR file (0600-hardened on POSIX); GFLOW_CLI_DEBUG_TRACEBACK prints the real exception + traceback for unhandled errors (console and --json) instead of the generic placeholder, while structured telemetry stays hashed unconditionally either way. Also fixes a poisoned character entity leaking referenceEntities into unrelated image i2i calls in the same project workspace. Also ships the llm-council skill (/gflow:llm-council), adding external CLI reviewers (codex/gemini, opt-in agy) alongside the internal council for high-stakes reviews. Verification: LIVE_VERIFICATION_v0.36.0 (live HAR capture against real Flow traffic; typed-error scoping confirmed live; unhandled path covered by 6 new tests, 30 total across both files).

v0.35.0 — multimodal reverse-engineering + storyboard tool

v0.35.0 — alpha. Multimodal reverse-engineering + Storyboard tool + Dynamic Token Budgeting (#305-follow-up). Adds gflow tools run storyboard to generate sequential visual prompts from single ideas, and integrates gflow tools run reverse-engineer with claude-video's watch.py script for frame extraction and multimodal deconstruction of video/URL references using Gemini. Token budgets now scale dynamically with character limits. Verification: LIVE_VERIFICATION_v0.35.0 (proven live storyboard expansion + frame extraction).

v0.34.0 — bidirectional UI cohort switching

v0.34.0 — alpha. Bidirectional UI cohort switching (#299). Introduces --ui-mode / GFLOW_CLI_UI_MODE to force classic or agentic Flow UI cohort layouts on the fly, with verification and an exit-28 fail-fast when a required layout cannot be reached. Verification: LIVE_VERIFICATION_v0.34.0.

v0.33.0 — anti-bot jitter and video i2v project name overrides

v0.33.0 — alpha. Anti-bot jitter and video i2v project name overrides (#241, #287). Configurable anti-bot jitter range via --jitter / GFLOW_CLI_JITTER_RANGE, lower default batch jitter (0.5–1.5 s), and --project-name overrides for resolving in-project assets on localized or virtualized project dropdowns. Verification: LIVE_VERIFICATION_v0.33.0.

v0.32.1 — browser teardown hardening

v0.32.1 — alpha. Browser teardown hardening and profile lock translation (#293, #283). Fixed Chrome process leaks on aborted context teardowns, translated launch failures to ProfileLockedError (exit 11), and fixed picker grid off-by-one scroll bounds. Verification: LIVE_VERIFICATION_v0.32.1.

v0.32.0 — in-project asset i2v frame selection

v0.32.0 — alpha. In-project asset i2v frame selection by UUID (#287, #288). Select existing assets for video initial/end frames by UUID in place without re-uploading, and add fail-fast for duration settings control presence. Verification: LIVE_VERIFICATION_v0.32.0.

v0.31.0 — wrong-media attribution defenses

v0.31.0 — alpha. Wrong-media attribution defenses and multi-ref picker scrolling (#281, #282). Added pre-download verification guards against ambiguous agentic-cohort image downloads (MediaAttributionError exit 26), and added viewport-scrolling fallback to resolve multiple sequential --ref selections in the virtualized picker grid. Verification: LIVE_VERIFICATION_v0.31.0.

v0.30.0 — agentic-cohort image path support

v0.30.0 — alpha. Agentic-cohort image path support and MCP video parameters (#258). Supported native 768x1376 still generations in the agentic cohort, added character-creation integrity guards, and mapped model/duration/count video parameters on the MCP server. Verification: LIVE_VERIFICATION_v0.30.0.

v0.29.0 — persistent gflow instructions CRUD

v0.29.0 — alpha. Persistent gflow instructions CRUD — see LIVE_VERIFICATION_v0.29.0.md and the CHANGELOG entry.

v0.28.0 — agent instructions (-i) steer agentic generation

v0.28.0 — alpha. Agent instructions (-i / --instruction) now actually steer agentic image generation (PR #263). Instruction cards sync to the project's Agent brief via PATCH …/agentInfo and the agent folds every enabled card into generation. Root causes fixed: conversational (not imperative) composer directive + the project_brief.enabled master switch. Verification: LIVE_VERIFICATION_v0.28.0 (crayon e2e GREEN).

v0.27.1 — v0.27.0 follow-up fixes + documentation sync

v0.27.1 — alpha. v0.27.0 release follow-up fixes and documentation sync (#239). Patch release wiring package version dynamically to build_handoff() and FastMCP server, escaping brackets in Rich console planning output, updating MCP agent guide, and adding gflow movie usage documentation. Verification: LIVE_VERIFICATION_v0.27.1 (credit-free baseline verification).

v0.27.0 — Global [style] block with named variants + prompt-aware resume for gflow movie

v0.27.0 — alpha. Global [style] block with named variants + prompt-aware resume for gflow movie (#239). A movie.toml can now express a visual style system once — prefix/suffix on [style] plus [style.variants.*] sub-tables — and select it per-scene via style_variant / style_suffix (deterministic composition, none reserved as the opt-out keyword). The handoff manifest records style_applied (variant/prefix/suffix/scene_suffix) per clip. Resume is now prompt-aware: completed scenes persist a style_hash; a scene whose composed prompt changed is regenerated instead of silently skipped, and dry-run marks it re-run (style changed). Carries forward v0.26.0 (i2i select-in-place by UUID). Verification: LIVE_VERIFICATION_v0.27.0 (credit-free CLI ledger).

v0.26.0 — image i2i references a generated image by UUID (select in place)

v0.26.0 — alpha. Reference a generated image in image i2i by its Flow UUID. A reference_images entry that is a media UUID is attached by selecting the already-existing asset in Flow's reference picker (located by UUID in the thumbnail URL, surfaced by display-name search when hidden) — no duplicate upload; local upload remains the fallback. Generated images also record their Flow display_name (credited @C1ph3r404). Verification: LIVE_VERIFICATION_v0.26.0 (live e2e GREEN).

v0.25.0 — remote-UUID i2v + silent-failure guards

v0.25.0 — alpha. video i2v from a generated image's UUID proven live (#237) — the picker-search attach was reworked to a local-upload path, producing a real 8s interpolation from a catalogued UUID. Home-.env config matrix (#240) verified live. Two silent failures made loud: video-as-image download rejection and rejected-upload fail-fast. Verification: LIVE_VERIFICATION_v0.25.0.

v0.24.0 — `--project` parity across CLI + MCP

v0.24.0 — alpha. --project parity across CLI + MCP. The video commands (video t2v/i2v/r2v) gain --project <id> to generate into an existing Flow project instead of a scratch one (#233/#234), matching image t2i/i2i; and the MCP gflow_generate_image / gflow_generate_video tools gain a matching project parameter (#235), so agent callers get the same capability. Both surface an already-wired worker capability (payload["project_id"]) and validate the id identically. Carries forward v0.23.0 (MCP generation live + macOS 401 fix). Verification: LIVE_VERIFICATION_v0.24.0.

v0.23.0 — MCP generation live + macOS 401 fixed

v0.23.0 — alpha. MCP generation goes live + macOS 401 fixed. The MCP server's gflow_generate_image / gflow_generate_video tools — previously non-functional stubs — are now wired end-to-end to the FlowWorker queue (background worker owns download + history recording), the tools prompt-expansion parameter is actually applied, and i2v/r2v require their frame/reference inputs at the tool boundary. The long-standing macOS generation 401 (#222) is resolved (#230, @gunalak): Flow cookies are read from the full jar by domain instead of a path-/ filter that dropped the /fx-scoped session token, and the headed context is seeded from a pre-launch snapshot when macOS can't decrypt the store. Carries forward v0.22.0 (Tools framework) + v0.21.0 (MCP server). Verification: LIVE_VERIFICATION_v0.23.0 (MCP wiring proven live; #222 reporter-verified e2e on macOS).

v0.22.0 — Tools framework ("Creative Director")

v0.22.0 — alpha. Tools framework ("Creative Director"). A TOML-defined prompt-tool system: creative-director rewrites a terse prompt into a vivid one via Google's five-component formula (public Gemini API, never-fatal), with 15 category-gated domain styles and deterministic banned-keyword stripping. Invoke it via the new gflow tools list/show/run group or the uniform -t/--tool option on every generation command (image t2i/i2i/batch, video t2v/i2v/r2v/chain), replacing the never-released -e/--expand. History records the original prompt, the submitted expanded_prompt, and metadata_json.tool provenance (redaction-honoring). "My Tools": user-authored TOMLs in <GFLOW_CLI_HOME>/tools/*.toml load automatically. MCP parity via gflow_list_tools + a tools array param; the legacy expand_prompt MCP prompt is deprecated. The Gemini expander gained an overall wall-clock budget. Carries forward v0.21.0 (MCP server over stdio + HTTP/SSE). Verification: LIVE_VERIFICATION_v0.22.0 (CI/automated complete; live owner-run pending).

Milestone history

Milestone Status
Repo scaffold, CI, license, README, disclaimer ✅ done
Auth login flow (one-time browser capture) ✅ done
Video: t2v / i2v / batch (Veo 3.1) ✅ done (v0.2.0a1)
Image generation (T2I/I2I, 1–4 per call, 5 ratios, 3 models) ✅ done (v0.3.0a1)
End-to-end smoke test against live Flow ✅ done
First public alpha release on PyPI ✅ done (v0.2.0a1)
Batch concurrency / per-worker Page pool (GFLOW_CLI_CONCURRENCY=N) ✅ done (v0.4.0a2)
Typed errors (RFC 9457 Problem Details) + per-class exit codes 3–7 ✅ done (v0.4.0a2)
Retry / backoff + reCAPTCHA re-mint inside the retry loop ✅ done (v0.4.0a2)
Structured logs (structlog, JSON on pipe) ✅ done (v0.4.0a2)
Pluggable image transport + ui_automation default strategy ✅ done (v0.5.0a1)
gflow run --config <file> sequential JSON batches ✅ done (v0.5.0a1)
examples/ directory with runnable single-image + batch scripts ✅ done (v0.5.0a1)
Shell multi-prompt gflow image t2i (PROMPT..., --prompts-file, --stdin) ✅ done (v0.6.0a1)
Downstream-worker ergonomics (out_dir, health_check(), optional project_id, BrowserSessionClosedError) ✅ done (v0.7.0)
Signed-tag release verification + first stable (v0.7.0) ✅ done (v0.7.0)
gflow video t2v restored on ui_automation with first-class video download ✅ done (v0.7.0 unreleased → v0.8.0)
Image/video mode-switch symmetry + live verify on ffroliva (PR #40) ✅ done (v0.8.0)
README + AGENTS.md + llms.txt refresh, docs governance ✅ done (v0.8.1)
gflow video t2v model picker (5 Veo models) + --duration / --count ✅ done (v0.9.1)
gflow video i2v (start + optional end frame) on ui_automation ✅ done (v0.9.1)
gflow video r2v (reference-to-video, model-aware ref cap omni≤7 / veo≤3) ✅ done (v0.9.1)
gflow image t2i/i2i --model actually selects the model (was a no-op) ✅ done (v0.9.0)
Local SQLite catalog (data layer) recording every project / image / video / operation ✅ done (v0.9.0)
gflow data list {projects,images,videos,profiles} read CLI over the catalog ✅ done (v0.9.0)
ROADMAP.md published (themed milestones through v1.0) ✅ done (v0.9.0)
Locale-agnostic media-dialog upload selectors (fixes non-English Chrome profiles) ✅ done (v0.9.0)
Wheel-build fix (removed redundant force-include causing duplicate ZIP entries) ✅ done (v0.9.0 hotfix, PR #74)
--json machine-readable output across image t2i/i2i, video t2v/i2v/r2v, auth list + gflow models catalog ✅ done (v0.10.0)
Per-model reference-image caps for i2i / r2v (Veo 3.1 Quality rejects R2V) ✅ done (v0.10.0)
Google-account identity persisted per profile + auto-rename of first-run default (issue #92) ✅ done (v0.10.0)
External cloud storage (S3 / MinIO / GCS) via GFLOW_CLI_STORAGE_URI ✅ done (v0.10.0)
gflow data prune + aggregated asset listing (--all-copies) + cross-profile count fixes (#111, #113) ✅ done (v0.10.0)
Layered cost-stratified e2e test strategy (e2e_auth/e2e_image/e2e_video/e2e_batch/e2e_data/smoke) ✅ done (v0.10.0)
gflow video i2v routes to the Veo i2v endpoint (no silent T2V fallback) + veo-lite default (issue #125) ✅ done (v0.11.0)
Create-project generation works under Flow's "Agent" composer mode ✅ done (v0.11.0)
Image-model selection hardened for non-English Flow UIs (selector cascade, #94) ✅ done (v0.11.0)
gflow character rm — free character deletion (#150) ✅ done (v0.13.0)
Align I2V CLI flags with Flow UI Labels (--initial-frame) (#122) ✅ done (v0.13.0)
In-project governance (ruff T20, materiality Classifier) ✅ done (v0.13.0)
gflow movie — multi-scene, character-consistent video from a TOML manifest (entity reuse, resumable, handoff manifest) ✅ done (v0.14.0)
gflow image t2i/i2i — reference locked CHARACTER entities (--reference-entity) + --project for character-consistent stills ✅ done (v0.15.0)
gflow character — reusable Flow Character entities (create/list/show/voices), persist-before-spend saga (#145) ✅ done (v0.12.0)
gflow scene — Add Clip / Scenes compose + credit-free server-side extended video (runVideoFxConcatenation) ✅ done (v0.12.0)
gflow video chain — last-frame I2V chaining from a JSONL manifest (--dry-run/--max-links/--resume-from) ✅ done (v0.12.0)
Create-project generation works under Flow's Agent docked chat panel ✅ done (v0.12.0)
Video status poll raises AuthExpiredError (exit 3) on mid-workflow 401 (#156) + Docker /dev/shm hardening ✅ done (v0.15.1)
Locale-free resource-picker include selectors — entity attach works on every account language (#170) ✅ done (v0.16.0)
gflow image upscale <mediaId> --scale 2k|4k — credit-free download-menu upscale, 4K Ultra-gated (#171) ✅ done (v0.16.0)
Cookie-store session verification fast path (verify_flow_profile, PR #168) + Playwright fallback ✅ done (v0.17.0)
Entity-attach exit-7 remediation hint + entity_attach_context drift telemetry (#174 interim) ✅ done (v0.17.0)
Agentic-UI exit-23 UiSelectorDriftError + out_dir wiring (#183) ✅ done (v0.18.0)
Patchright opt-in browser engine (GFLOW_CLI_BROWSER_ENGINE=patchright) ✅ done (v0.19.0)
Aspect-ratio overrides under Agentic & Classic cohorts + GFLOW_CLI_PREFER_CLASSIC (#193) ✅ done (v0.20.0 / v0.20.1)
MCP server (gflow mcp run stdio + gflow serve HTTP/SSE) + daemon/queue scaffolding ✅ done (v0.21.0)
Tools framework: gflow tools group + --tool + creative-director + "My Tools" + MCP parity ✅ done (v0.22.0)
MCP generation wired to FlowWorker (tool→queue→download→record) + tools applied + i2v/r2v boundary validation ✅ done (v0.23.0)
macOS generation 401 fixed — /fx cookie-path read + headed-context seed (#222/#230) ✅ done (v0.23.0)
--project <id> on video t2v/i2v/r2v + MCP project parameter (#233/#234/#235) ✅ done (v0.24.0)
video i2v from a generated image's UUID (#237) + home-.env matrix (#240) + silent-failure guards ✅ done (v0.25.0)
image i2i references a generated image by UUID — select in place, no duplicate upload + display_name capture ✅ done (v0.26.0)
movie.toml [style] block with named variants + prompt-aware resume (style_hash) (#239) ✅ done (v0.27.0)
Agent instructions (-i/--instruction) steer agentic generation — conversational directive + brief master switch (PR #263) ✅ done (v0.28.0)
Persistent gflow instructions CRUD + movie.toml instructions brief-sync + gflow_instructions_* MCP tools + CI-enforced MCP↔CLI parity (#192) ✅ done (v0.29.0)
Diagnostic tooling (GFLOW_CLI_HAR_PATH + GFLOW_CLI_DEBUG_TRACEBACK) + reference-entity-smuggling fix (#312/#316) ✅ done (v0.36.0)
Viewports 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH (#313/#315/#329) ✅ done (v0.37.0)
Robust aria-pressed agentic↔classic mode control (#332) + i2i ref dedup via picker filename search (#314) ✅ done (v0.38.0)
Agentic-pin recovery: opt-in reload after a real Agent-toggle click (#338) ✅ done (v0.38.1)
Failed generations persisted to the local catalog + gflow data list errors (#341) ✅ done (v0.39.0)
Prompt @-mention resolution for asset tagging (#344) ✅ done (v0.40.0)
Production-readiness hardening: queue safety, profile lease, cancellation-safe teardown (#357) ✅ done (v0.41.0)
Content-safety ContentPolicyError classification + Antigravity coding agent (#359/#360/#361) ✅ done (v0.42.0)
Private incident diagnostics (GFLOW_CLI_INCIDENT_CAPTURE) ✅ done (v0.43.0)
Dual-side project naming & management (gflow project family, --project-name/--project-title) (#381) ✅ done (v0.44.0)
--ref catalog-backed upload fallback + character-entity binding fixes (#393/#395) ✅ done (v0.45.0)
Prompt tools on any OpenAI-compatible endpoint (GFLOW_CLI_LLM_*) (#387) ✅ done (v0.46.0)
Classic count-setter: digit-keyed tab selection + typed drift error (#404) ✅ done (v0.46.1)
Predictable output paths: -o/--output on t2i/i2i/t2v/i2v (#411; MCP + cloud follow-ups #414/#415) ✅ done (v0.48.0)
Manifest-driven video batch runner on ui_automation ❌ removed — never worked end-to-end, shipped as a nonfunctional stub; see v0.41.0 changelog. For multi-clip video, loop gflow video t2v/i2v from the shell; gflow image batch remains supported for images.
Persistence layer (stay-mounted batch sessions across project boundaries) ⏳ Phase B
Provider abstraction for official Veo 3.1 API ⏳ planned
Signed-tag CI verification automation (no manual signing in CI yet) ⏳ planned

What's new in each release

For per-release deltas see CHANGELOG.md. Per-release evidence files (live verification, screenshots, smoke logs) live under docs/LIVE_VERIFICATION_*.md.

Lifecycle policy

  • Alpha (0.x.y) — current. APIs may change between minor versions; breaking changes are noted in the changelog.
  • 1.0.0 — stable surface. Breaking changes require MAJOR bump + migration notes.
  • Patch releases — bug fixes, doc refreshes (like v0.8.1), and other backward-compatible changes.

See RELEASE.md for the full release protocol and the prerelease vs full-release policy.