gflow-cli 0.62.1__tar.gz → 0.64.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.codex-plugin/plugin.json +1 -1
- gflow_cli-0.64.0/.github/FUNDING.yml +2 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/scorecard.yml +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/AGENTS.md +68 -5
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CHANGELOG.md +125 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CLAUDE.md +31 -5
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/KNOWN_ISSUES.md +52 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/PKG-INFO +12 -4
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/PLAN.md +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/README.md +10 -2
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CHARACTER.md +24 -4
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/INDEX.md +2 -1
- gflow_cli-0.64.0/docs/LIVE_VERIFICATION_v0.63.0.md +130 -0
- gflow_cli-0.64.0/docs/LIVE_VERIFICATION_v0.64.0.md +112 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MCP.md +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/PROJECT_STATUS.md +82 -20
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/USAGE.md +115 -10
- gflow_cli-0.64.0/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +361 -0
- gflow_cli-0.64.0/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +261 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/index.html +12 -3
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/llms.txt +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/pyproject.toml +3 -3
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/Dockerfile.triage +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/package-lock.json +36 -36
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/package.json +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/pr_triage_autopilot.py +40 -18
- gflow_cli-0.64.0/scripts/dev/spike_extend_model_recon.py +194 -0
- gflow_cli-0.64.0/scripts/dev/spike_extend_ourstack_verify.py +210 -0
- gflow_cli-0.64.0/scripts/dev/spike_extend_route_capture.py +194 -0
- gflow_cli-0.64.0/scripts/dev/spike_extend_submit_capture.py +194 -0
- gflow_cli-0.64.0/scripts/dev/spike_extend_ui_recon.py +205 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/check/SKILL.md +77 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/doc-review/SKILL.md +16 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/issue-assessment/SKILL.md +9 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/issue-resolve/SKILL.md +13 -2
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/live-verify/SKILL.md +8 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/plan/SKILL.md +9 -4
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/pr-council-review/SKILL.md +11 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/predict/SKILL.md +3 -2
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/scenario/SKILL.md +16 -5
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/_cli_helpers.py +52 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/client.py +168 -2
- gflow_cli-0.64.0/src/gflow_cli/api/extend_chain.py +201 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/routes.py +15 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/ui_automation_video.py +85 -52
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/video.py +4 -27
- gflow_cli-0.64.0/src/gflow_cli/api/video_extend.py +313 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/chain.py +7 -4
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_video.py +441 -22
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/models.py +1 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/recorder.py +58 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/redaction.py +5 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/errors.py +54 -14
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/tools.py +4 -3
- gflow_cli-0.64.0/tests/api/fixtures/project_initial_data_extend_models.json +2471 -0
- gflow_cli-0.64.0/tests/api/test_client_extend.py +200 -0
- gflow_cli-0.64.0/tests/api/test_extend_chain.py +174 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_video.py +11 -20
- gflow_cli-0.64.0/tests/api/test_video_extend.py +289 -0
- gflow_cli-0.64.0/tests/api/test_video_status_poll.py +143 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_video.py +116 -36
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/autopilot/test_pr_triage_autopilot.py +66 -14
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_video.py +51 -36
- gflow_cli-0.64.0/tests/cli/test_cli_video_extend.py +647 -0
- gflow_cli-0.64.0/tests/cli/test_run_with_handlers_interrupt.py +70 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/conftest.py +24 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_recorder.py +53 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_redaction.py +20 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_cli_parity.py +16 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_documentation_gate.py +5 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/uv.lock +37 -40
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/CHARACTER.md +24 -4
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/KNOWN_ISSUES.md +52 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MCP.md +1 -1
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/USAGE.md +115 -10
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/requirements.txt +6 -7
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.env.template +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitattributes +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitignore +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.secrets.baseline +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/LICENSE +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/RELEASE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/ROADMAP.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docker-compose.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/README.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/sonar-project.properties +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_config.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_media.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/index.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/requirements.in +0 -0
|
@@ -47,6 +47,6 @@ jobs:
|
|
|
47
47
|
retention-days: 5
|
|
48
48
|
|
|
49
49
|
- name: Upload to code-scanning
|
|
50
|
-
uses: github/codeql-action/upload-sarif@
|
|
50
|
+
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
|
|
51
51
|
with:
|
|
52
52
|
sarif_file: results.sarif
|
|
@@ -4,12 +4,47 @@
|
|
|
4
4
|
|
|
5
5
|
Supported tools that auto-discover this file: Cursor, Codex, Aider, Antigravity (`agy`), Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Claude Code reads [CLAUDE.md](CLAUDE.md), which cross-references this file.
|
|
6
6
|
|
|
7
|
+
## Skill Routing — the default workflow, not a menu
|
|
8
|
+
|
|
9
|
+
**The `/gflow:` skills ARE this project's development lifecycle.** They are not
|
|
10
|
+
optional tooling you may reach for; they are how work is done here. If a row below
|
|
11
|
+
matches your situation, load that skill **before acting** — before exploring the
|
|
12
|
+
codebase, before answering, before editing. A skill loaded after the work is a skill
|
|
13
|
+
that did not run.
|
|
14
|
+
|
|
15
|
+
| If you are about to… | Load first | Non-negotiable because |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Touch a GitHub issue | `/gflow:issue-assessment <N>` | Read-only triage precedes any fix; classification changes what "fixing" means |
|
|
18
|
+
| Propose a transport, auth, selector, or schema change | `/gflow:predict <proposal>` | Five adversarial personas return GO / CAUTION / STOP before code exists |
|
|
19
|
+
| Start a feature | `/gflow:scenario` → `/gflow:plan` | Edge cases before tasks; tasks before code |
|
|
20
|
+
| Resume work / ask "where are we?" | `/gflow:status` | The current plan's next unchecked task is the answer, not your guess |
|
|
21
|
+
| Commit **anything** | `/gflow:check` | It is the exact CI gate; skipping it is how a format failure shipped past an 8-agent council (PR #269) |
|
|
22
|
+
| Open or review a PR | `/gflow:pr-council-review <N>` (or `/gflow:branch-review`) | Standing-authorized. Run it — do not ask permission first |
|
|
23
|
+
| Claim a generation feature works | `/gflow:live-verify` | Offline-green is never done-done on a generation path |
|
|
24
|
+
| Cut a release | `/gflow:release` | It hard-gates on changelog → check → live-verify → doc-review; each is a STOP |
|
|
25
|
+
| Audit docs before shipping | `/gflow:doc-review` | Catches same-release errors a read-through cannot |
|
|
26
|
+
| See a red SonarCloud check | `/gflow:sonar <N>` | The gate measures *new* code; the fix is rarely where you would look |
|
|
27
|
+
| Touch auth or reCAPTCHA | `/gflow:known-issues` | Known-broken surfaces have documented workarounds; rediscovering them costs days |
|
|
28
|
+
|
|
29
|
+
**Canonical bodies live in `skills/<name>/SKILL.md`** — plain Markdown, agent-agnostic
|
|
30
|
+
by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code reads.
|
|
31
|
+
`.claude/commands/gflow/*.md` are thin Claude-Code wrappers that point at them.
|
|
32
|
+
|
|
33
|
+
> **This table exists because routing by memory failed.** On 2026-09-01 an agent worked
|
|
34
|
+
> a full session — recovering two interrupted sessions, merging five PRs — without ever
|
|
35
|
+
> loading this file, because `CLAUDE.md` only *asked* it to. It reached step 10 of a
|
|
36
|
+
> release before meeting the pipeline's own doc-review gate, and the required
|
|
37
|
+
> `LIVE_VERIFICATION_v0.63.0.md` had not been written despite the feature having been
|
|
38
|
+
> live-verified. `CLAUDE.md` now `@`-imports this file, so it is always in context. The
|
|
39
|
+
> table is the other half: being loaded is useless if the mapping from situation to skill
|
|
40
|
+
> is left to recall.
|
|
41
|
+
|
|
7
42
|
## Project at a glance
|
|
8
43
|
|
|
9
44
|
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
|
|
10
45
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
11
|
-
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
12
|
-
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
46
|
+
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `cli_doctor.py`, `composition.py`, `config.py`, `errors.py`, `file_integrity.py`, `flow_selectors/`, `update_check.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
47
|
+
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain/extend — `extend` continues an existing clip past Flow's 8s ceiling, server-seeded from the source so the join is continuous; no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
13
48
|
- Works with any Google account that has Flow access. All generations bill against the user's own Google account.
|
|
14
49
|
|
|
15
50
|
## Headed-browser dependency (architectural reality)
|
|
@@ -40,13 +75,21 @@ $env:PYTHONUTF8=1
|
|
|
40
75
|
uv run python scripts/ci/check_repo_hygiene.py
|
|
41
76
|
uv run python scripts/ci/check_doc_links.py
|
|
42
77
|
uv run python scripts/ci/check_website_docs_pii.py
|
|
78
|
+
uv run python scripts/ci/generate_website_docs.py --check
|
|
43
79
|
uv run ruff check src tests
|
|
44
80
|
uv run ruff format --check src tests
|
|
45
81
|
uv run pyright src
|
|
46
82
|
uv run python -m pytest -q --cov=gflow_cli
|
|
47
83
|
```
|
|
48
84
|
|
|
49
|
-
Or invoke the wrapper: `/gflow:check
|
|
85
|
+
Or invoke the wrapper: `/gflow:check` — **prefer it.** This list is the mechanical subset;
|
|
86
|
+
the skill additionally carries the **step 1b surface blast-radius sweep** (MCP↔CLI parity and
|
|
87
|
+
the five other mirror axes), which no command here can check and no CI gate can see.
|
|
88
|
+
|
|
89
|
+
> **Do not trim this list again.** It previously omitted
|
|
90
|
+
> `generate_website_docs.py --check`, so an agent following AGENTS.md instead of the skill
|
|
91
|
+
> shipped a stale `website/docs/` mirror to a green local run and a red CI (#626 session,
|
|
92
|
+
> 2026-09-02). Two lists that disagree means the shorter one is silently wrong.
|
|
50
93
|
|
|
51
94
|
- Use `pytest -m "not live and not e2e and not smoke"` locally; full suite OOMs on small dev machines. Scope to changed dirs; trust CI for the full sweep.
|
|
52
95
|
- TDD is non-negotiable. Coverage floor: 80% overall.
|
|
@@ -58,10 +101,30 @@ Or invoke the wrapper: `/gflow:check`.
|
|
|
58
101
|
|
|
59
102
|
- Type hints everywhere; `pyright` strict on `src/gflow_cli`.
|
|
60
103
|
- Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
|
|
61
|
-
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–
|
|
104
|
+
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–35, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
|
|
62
105
|
- 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
|
|
63
106
|
- **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
|
|
64
107
|
- **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
|
|
108
|
+
|
|
109
|
+
**That CI gate is command-level only** — it fires on a new *leaf*, and stays green while an
|
|
110
|
+
option goes unmirrored, a queued-payload key goes unread, or a tool docstring asserts a
|
|
111
|
+
restriction the CLI no longer has. So MCP is a responsibility of **every phase**, not a
|
|
112
|
+
post-hoc checklist item. Each skill owns its slice:
|
|
113
|
+
|
|
114
|
+
| Phase | Skill | Its MCP duty |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| 1 Triage | `issue-assessment` | Name which surfaces reproduce it — CLI, MCP, or both |
|
|
117
|
+
| 2 Pre-impl | `predict` | Persona 4 scopes the MCP blast radius before code exists |
|
|
118
|
+
| 3 BDD | `scenario` | **D13** — enumerate the MCP twin of every edge case |
|
|
119
|
+
| 4 Plan | `plan` | **Task 6 is not optional when task 5 exists** |
|
|
120
|
+
| 5 Review | `pr-council-review` | **D15** — surface parity, incl. the payload-key round trip |
|
|
121
|
+
| 7 Check | `check` | **Step 1b** — the canonical six mirror axes |
|
|
122
|
+
| 8 Live-verify | `live-verify` | The MCP queued path is *different code*; decide if it needs its own run |
|
|
123
|
+
| 10 Release | `doc-review` | Grade `docs/MCP.md` + tool docstrings; a **false** claim blocks |
|
|
124
|
+
|
|
125
|
+
The six mirror axes are written out **once**, in [`skills/check/SKILL.md`](skills/check/SKILL.md)
|
|
126
|
+
step 1b. Every other skill cites them. Do not copy the table around — a duplicated checklist
|
|
127
|
+
drifts, which is the exact failure this row exists to prevent.
|
|
65
128
|
- **Locale-Invariance Discipline for UI Automation**: **Never** write text-label string selectors (`has-text(...)` or multi-locale text lists) for DOM elements, overlays, announcements, menus, tabs, or buttons. All DOM selectors in `src/gflow_cli/api/transports/` must be 100% language-agnostic, anchoring exclusively on structural properties: **Tier 1 Anchors** — e.g. hyperlinks (`a[href*='changelog']`), icon ligatures (`button:has(i.google-symbols:text('close'))`), ARIA roles (`[role='banner']`, `button[data-dismiss]`), and hierarchical DOM relationships (`[role='dialog']:has(a[href*='changelog']) button`). Relying on translated display labels or maintaining multi-locale text cascades is strictly forbidden as an anti-pattern hack.
|
|
66
129
|
|
|
67
130
|
## PR instructions
|
|
@@ -97,7 +160,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
|
|
|
97
160
|
| 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
|
|
98
161
|
| 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
|
|
99
162
|
| 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
|
|
100
|
-
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
|
|
163
|
+
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish. **Internally gates on `/gflow:changelog` → `/gflow:check` → `/gflow:live-verify` → `/gflow:doc-review`; a failure at any of them is a STOP, not a warning.** | Shipped release & back-merge |
|
|
101
164
|
|
|
102
165
|
### Pipeline Continuation Mandate
|
|
103
166
|
|
|
@@ -7,6 +7,128 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.64.0] — 2026-09-02
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`gflow video i2v --model omni-flash --end-frame` now works** ([#626](https://github.com/ffroliva/gflow-cli/issues/626)).
|
|
15
|
+
Google shipped first-and-last-frame generation for Omni 1.1 Flash, so the
|
|
16
|
+
guard that rejected that combination with exit 17 is gone:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
gflow video i2v ./start.png "she turns toward the window" \
|
|
20
|
+
--model omni-flash --end-frame ./end.png --duration 10
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
omni-flash is the only model that also exposes `--duration`, so this is the
|
|
24
|
+
one route to a 10-second first+last interpolation.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **i2v end-frame safety moved from a static table to a post-submit route
|
|
29
|
+
check.** gflow used to decide which models could carry an end frame from a
|
|
30
|
+
hardcoded capability list, which silently went stale when Google shipped the
|
|
31
|
+
feature. It now verifies the route Flow *actually* used: a run that carried an
|
|
32
|
+
end frame but came back on `batchAsyncGenerateVideoStartImage` — Flow dropping
|
|
33
|
+
the frame at submit and billing a clip that was never interpolated — fails
|
|
34
|
+
with `WireFormatError` instead of being reported as a success. This also
|
|
35
|
+
catches a partial or staged rollback on any account, which the old table
|
|
36
|
+
could not.
|
|
37
|
+
|
|
38
|
+
**Breaking for scripts** that branched on exit 17 for `omni-flash` +
|
|
39
|
+
`--end-frame`: that combination now succeeds. Exit 17 is unchanged for
|
|
40
|
+
`gflow video chain --model omni-flash`, which is still rejected (chain-scale
|
|
41
|
+
seeded i2v remains unverified).
|
|
42
|
+
|
|
43
|
+
- **MCP↔CLI parity is now a duty of every pipeline phase** (contributor-facing).
|
|
44
|
+
`tests/mcp/test_cli_parity.py` is command-level: it fires when a new CLI *leaf*
|
|
45
|
+
lacks a mapped MCP tool, and stays green while an option goes unmirrored, a
|
|
46
|
+
queued-payload key goes unread, or a tool docstring asserts a restriction the
|
|
47
|
+
CLI no longer has. #626 shipped exactly that third case — `mcp/tools.py` and
|
|
48
|
+
`docs/MCP.md` kept telling agents `omni_flash` was rejected for i2v-with-frames
|
|
49
|
+
through a fully green pipeline. Each skill now owns a slice: `issue-assessment`
|
|
50
|
+
names affected surfaces, `predict` scopes the MCP blast radius, `scenario` adds
|
|
51
|
+
**D13**, `plan` makes the MCP mirror **task 6** (not optional when task 5
|
|
52
|
+
exists), `pr-council-review` adds **D15**, `check` adds **step 1b** (the
|
|
53
|
+
canonical six mirror axes), `live-verify` treats the MCP queued path as
|
|
54
|
+
separate code, and `doc-review` grades a *false* MCP claim as release-blocking.
|
|
55
|
+
Automating the mechanically checkable part is tracked in
|
|
56
|
+
[#628](https://github.com/ffroliva/gflow-cli/issues/628).
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
- **`AGENTS.md`'s Impeccable Routine was missing `generate_website_docs.py --check`**,
|
|
61
|
+
which `skills/check` already ran. Following the shorter list produced a green
|
|
62
|
+
local run against a stale `website/docs/` mirror and a red CI. The two lists now
|
|
63
|
+
agree.
|
|
64
|
+
|
|
65
|
+
## [0.63.0] — 2026-09-01
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- **`gflow video extend` — continue a clip past Flow's 8-second ceiling.** Veo's
|
|
70
|
+
extend route generates a new 8s segment seeded server-side from the source
|
|
71
|
+
clip, so motion and audio carry across the join instead of restarting from a
|
|
72
|
+
still (which is what `video chain` does, and why it needs a fade guard). Pass
|
|
73
|
+
one prompt per segment, or `--segments N` to reuse the last one:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
gflow video extend <media-id> "the wave recedes" --project <id>
|
|
77
|
+
gflow video extend <media-id> "drifts out to sea" --project <id> -n 4 -o long.mp4
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The result is a Flow Scene; `-o` renders it to a single mp4 through the
|
|
81
|
+
existing credit-free server-side concat.
|
|
82
|
+
|
|
83
|
+
> Known limitation, found in live verification: a segment carries ~7s of real
|
|
84
|
+
> content though Flow advertises and bills 8s, so each internal seam of a
|
|
85
|
+
> multi-segment render is preceded by ~1s of frozen frame and silence. Single
|
|
86
|
+
> segments are unaffected. Details and the open questions are in
|
|
87
|
+
> [KNOWN_ISSUES](KNOWN_ISSUES.md).
|
|
88
|
+
|
|
89
|
+
- **The model key is resolved per run, never hardcoded.** Flow's extend family
|
|
90
|
+
is tier-gated — `_ultra` variants are Advanced-only and read `UNAVAILABLE`
|
|
91
|
+
elsewhere — so the key comes from the account's own capability listing,
|
|
92
|
+
picking the cheapest orderable model exactly as Flow's own UI does. A pinned
|
|
93
|
+
key would 403 forever on the wrong tier.
|
|
94
|
+
- **Costs are shown before anything is submitted**, and a pre-flight balance
|
|
95
|
+
check refuses a run the balance cannot finish. `--dry-run` prints the plan
|
|
96
|
+
without opening a browser.
|
|
97
|
+
- **Serial by construction, and paced.** Segments submit one at a time with a
|
|
98
|
+
non-zero default jitter (`GFLOW_CLI_JITTER_RANGE`). A refusal aborts with
|
|
99
|
+
completed segments preserved and is never auto-retried.
|
|
100
|
+
- `1:1` is refused up front — Flow publishes no square extend model.
|
|
101
|
+
|
|
102
|
+
### Fixed
|
|
103
|
+
|
|
104
|
+
- **Ctrl+C during a billed run said nothing.** `run_with_handlers` exited 130
|
|
105
|
+
silently, so a user who interrupted a multi-segment run could not tell whether
|
|
106
|
+
anything had been charged or how to resume. It now reports credits spent,
|
|
107
|
+
segments completed and the resume handle. Fixed at the shared boundary, so
|
|
108
|
+
`video chain` and `movie run` gain it too.
|
|
109
|
+
- **`sessionId` was not redacted.** `redact_metadata` covered `token` and
|
|
110
|
+
`recaptchaToken` but not `sessionId`, which the extend request carries. Not a
|
|
111
|
+
credential, but account-correlatable, and it would otherwise reach any logged
|
|
112
|
+
request body or diagnostics bundle verbatim.
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
- **The offline test suite could `git checkout develop` in the developer's own
|
|
116
|
+
clone ([#605](https://github.com/ffroliva/gflow-cli/issues/605)).** git's
|
|
117
|
+
repository discovery walks *up* from `cwd`, and `--basetemp=tmp/pytest` puts
|
|
118
|
+
every `tmp_path` inside this repository, so an autopilot test whose temp `.git`
|
|
119
|
+
went missing had its `git checkout develop` silently resolved against the real
|
|
120
|
+
working tree — moving the developer off their branch mid-run (reflog-confirmed,
|
|
121
|
+
Windows-only, intermittent). Two independent guards now close it:
|
|
122
|
+
`scripts/autopilot/pr_triage_autopilot.py` pins every git call with
|
|
123
|
+
`--git-dir`/`--work-tree`, so a `repo_dir` that is not a repository fails loudly,
|
|
124
|
+
raising with git's own `fatal: not a git repository` text rather than
|
|
125
|
+
retargeting whatever clone encloses it (this also
|
|
126
|
+
hardens the VPS triage path against a mistyped `--repo-dir`), and
|
|
127
|
+
`tests/conftest.py` sets `GIT_CEILING_DIRECTORIES` to pytest's basetemp so no
|
|
128
|
+
test can walk out of its temp dir into this repo. What removed the temp `.git`
|
|
129
|
+
is still unexplained — it now surfaces as a plain "not a git repository" rather
|
|
130
|
+
than a silent branch switch.
|
|
131
|
+
|
|
10
132
|
## [0.62.1] — 2026-08-30
|
|
11
133
|
|
|
12
134
|
### Fixed
|
|
@@ -3448,7 +3570,9 @@ shell-script template that branches on these codes.
|
|
|
3448
3570
|
|
|
3449
3571
|
First skeleton. Not functional end-to-end yet.
|
|
3450
3572
|
|
|
3451
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
3573
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...HEAD
|
|
3574
|
+
[0.64.0]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...v0.64.0
|
|
3575
|
+
[0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
|
|
3452
3576
|
[0.62.1]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...v0.62.1
|
|
3453
3577
|
[0.62.0]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...v0.62.0
|
|
3454
3578
|
[0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
|
|
@@ -6,11 +6,30 @@
|
|
|
6
6
|
|
|
7
7
|
`gflow-cli` is an unofficial Python CLI that drives [Google Flow](https://labs.google/fx/tools/flow) (Veo image-to-video, Imagen text-to-image) from the terminal by reverse-engineering Flow's private REST API. See [README.md](README.md) for the user-facing overview.
|
|
8
8
|
|
|
9
|
+
## System rules — loaded, not requested
|
|
10
|
+
|
|
11
|
+
**[AGENTS.md](AGENTS.md) is imported below and is therefore already in context before
|
|
12
|
+
you read this line.** It is the system rule for this project: the `/gflow:` skills are
|
|
13
|
+
the default development lifecycle, and its Skill Routing table says which one to load
|
|
14
|
+
for the situation in front of you. Follow it — it is not advisory, and "I hadn't read
|
|
15
|
+
it yet" is not a reachable state.
|
|
16
|
+
|
|
17
|
+
> **Why an import and not a bullet that says "read AGENTS.md".** That bullet is what
|
|
18
|
+
> used to be here, and it failed exactly as written: an agent that skips it is not
|
|
19
|
+
> corrected by anything, and no gate notices. A session on 2026-09-01 went straight
|
|
20
|
+
> into work without it and reached step 10 of a release before discovering the
|
|
21
|
+
> pipeline's own doc-review and live-verification gates. `@AGENTS.md` removes the
|
|
22
|
+
> choice — the harness resolves the import and injects the file, with no agent
|
|
23
|
+
> cooperation required. Never downgrade this back to prose.
|
|
24
|
+
|
|
25
|
+
@AGENTS.md
|
|
26
|
+
|
|
9
27
|
## On every session start
|
|
10
28
|
|
|
11
|
-
1. Read **[
|
|
12
|
-
|
|
13
|
-
|
|
29
|
+
1. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and
|
|
30
|
+
commands. Deliberately *not* imported: at 36 KB it is a lookup table, not a rule set,
|
|
31
|
+
and AGENTS.md points into it. Read it when you need to find a doc.
|
|
32
|
+
2. Pull deeper context on demand:
|
|
14
33
|
- Current task / where we left off → `/gflow:status`
|
|
15
34
|
- Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
|
|
16
35
|
- Touching auth or reCAPTCHA → `/gflow:known-issues`
|
|
@@ -20,8 +39,15 @@
|
|
|
20
39
|
|
|
21
40
|
## Claude-Code-specific
|
|
22
41
|
|
|
23
|
-
- Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`).
|
|
24
|
-
|
|
42
|
+
- Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`). **These
|
|
43
|
+
are the invocable surface** — they appear in the session's skill list and may be called
|
|
44
|
+
with the `Skill` tool as `gflow:<name>`.
|
|
45
|
+
- **`skills/<name>/SKILL.md` are the canonical bodies, and are NOT `Skill`-tool-invocable.**
|
|
46
|
+
They are plain Markdown, agent-agnostic on purpose so Codex/Cursor/Aider can read the
|
|
47
|
+
same file. `Skill(skill="release")` fails with `Unknown skill: release`; each wrapper in
|
|
48
|
+
`.claude/commands/gflow/` says to read its `skills/<name>/SKILL.md` directly, and that is
|
|
49
|
+
the supported path. (This bullet previously claimed they were "auto-discoverable", which
|
|
50
|
+
is false and sends agents into a failing tool call.)
|
|
25
51
|
- Auto-memory at `~/.claude/projects/C--development-github-gflow-cli/memory/MEMORY.md` carries cross-session feedback and project state.
|
|
26
52
|
- **Worktrees:** the native `EnterWorktree` tool branches from `origin/main` (the default branch). Feature work integrates via `develop` — after entering a fresh worktree, immediately `git switch -c <type>/<name> origin/develop` and delete the auto-created `worktree-*` branch. On Windows, worktree removal can fail on a file lock (the worktree's `.venv`); `git worktree prune` + manual delete later is fine.
|
|
27
53
|
|
|
@@ -14,6 +14,58 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
+
### A Veo extend segment is 7 seconds, not the 8 Flow advertises — so concat pads a frozen second
|
|
18
|
+
|
|
19
|
+
- **Status:** Open · **Severity:** Medium (audible/visible on every internal seam of a chained extend) · **Affected:** `gflow video extend -n >1` with `-o`, and any scene mixing extend segments
|
|
20
|
+
- **Discovered:** 2026-09-01, by live verification of the extend feature. Offline tests could not have found it.
|
|
21
|
+
|
|
22
|
+
**What happens.** `gflow video extend ... -n 2 -o out.mp4` produces a file whose
|
|
23
|
+
audio drops to digital silence (−91 dB) for exactly one second before each
|
|
24
|
+
internal seam, over a **frozen video frame**. The seam itself is clean; the dead
|
|
25
|
+
second sits immediately before it.
|
|
26
|
+
|
|
27
|
+
**Measured.** In a 3-clip render (original + 2 extensions), per-second mean volume:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
7s -28.8 8s -26.4 <- original -> extension seam: continuous
|
|
31
|
+
14s -29.1 15s -75.1 16s -33.9 <- extension -> extension seam: 1s dropout
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Finer slices put the silence at 15.00–15.99s exactly. Reproduced independently on
|
|
35
|
+
a second render made days earlier from different prompts (14s −22.4, **15s −70.1**,
|
|
36
|
+
16s −23.9), so it is systematic, not a one-off.
|
|
37
|
+
|
|
38
|
+
**Root cause.** The extension media is **7.000000 seconds** — both video and audio
|
|
39
|
+
streams, confirmed by `ffprobe` on the downloaded clip. But:
|
|
40
|
+
|
|
41
|
+
- the capability listing advertises `videoLengthSeconds: 8` for
|
|
42
|
+
`veo_3_1_extension_lite`, and
|
|
43
|
+
- `getSceneWorkflows` reports `total_duration=8.0`, `end=8.0` for that clip.
|
|
44
|
+
|
|
45
|
+
`ConcatInput` passes those metadata values through verbatim, so Flow's
|
|
46
|
+
server-side concat stretches a 7s clip into an 8s slot by holding the last frame
|
|
47
|
+
and muting. The final segment escapes it only because the render ends before its
|
|
48
|
+
padding (23.02s for 3 clips, not 24s).
|
|
49
|
+
|
|
50
|
+
**Why it matters more than it looks.** A freeze-hold is the specific failure the
|
|
51
|
+
Compiled Growth parable runbook forbids — *"NEVER pad by freeze-holding a frame —
|
|
52
|
+
reads as 'video stuck'"* — and that pipeline is the named consumer for extend.
|
|
53
|
+
An N-segment chain has N−1 of these.
|
|
54
|
+
|
|
55
|
+
**Not yet established** (do not fix on a guess):
|
|
56
|
+
|
|
57
|
+
- whether 7.0s is constant across extend models, aspects and tiers, or specific
|
|
58
|
+
to `veo_3_1_extension_lite`;
|
|
59
|
+
- whether Flow's own UI renders the same padding (i.e. whether this is our
|
|
60
|
+
concat inputs or Flow's behaviour end-to-end);
|
|
61
|
+
- whether any API field reports the real media duration, which is what a clean
|
|
62
|
+
fix needs — clamping `ConcatInput.end` to a hardcoded 7.0 would be a guess
|
|
63
|
+
dressed as a fix.
|
|
64
|
+
|
|
65
|
+
**Workaround today.** Render without `-o` and trim in post, or accept the
|
|
66
|
+
freeze-hold. Single-segment extends are unaffected.
|
|
67
|
+
|
|
68
|
+
|
|
17
69
|
### An out-of-range Playwright silently wedges video generation
|
|
18
70
|
|
|
19
71
|
- **Status:** Mitigated (v0.49.0 — upper-bounded dependency + fail-fast watchdog)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.64.0
|
|
4
4
|
Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
|
|
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
|
58
58
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
59
59
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
60
60
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
61
|
-
Requires-Dist: ruff==0.16.
|
|
61
|
+
Requires-Dist: ruff==0.16.5; extra == 'dev'
|
|
62
62
|
Provides-Extra: gcs
|
|
63
63
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
64
64
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -83,6 +83,7 @@ Description-Content-Type: text/markdown
|
|
|
83
83
|
[](https://github.com/microsoft/pyright)
|
|
84
84
|
[](CONTRIBUTING.md)
|
|
85
85
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
86
|
+
[](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
|
|
86
87
|
[](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
|
|
87
88
|
|
|
88
89
|
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
@@ -97,7 +98,7 @@ Description-Content-Type: text/markdown
|
|
|
97
98
|
|
|
98
99
|
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
99
100
|
|
|
100
|
-
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
101
|
+
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
|
|
101
102
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
102
103
|
- **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
|
|
103
104
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
@@ -199,7 +200,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
199
200
|
|
|
200
201
|
## Project status
|
|
201
202
|
|
|
202
|
-
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP
|
|
203
|
+
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
|
|
203
204
|
|
|
204
205
|
Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
|
|
205
206
|
|
|
@@ -226,4 +227,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
226
227
|
[](https://github.com/ffroliva/gflow-cli)
|
|
227
228
|
[](https://pepy.tech/project/gflow-cli)
|
|
228
229
|
|
|
230
|
+
### Star history
|
|
231
|
+
|
|
232
|
+
<picture>
|
|
233
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
|
|
234
|
+
<img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
|
|
235
|
+
</picture>
|
|
236
|
+
|
|
229
237
|
If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
|
|
@@ -716,7 +716,7 @@ Today the CLI writes media to `$GFLOW_CLI_OUTPUT_DIR` on the local filesystem. P
|
|
|
716
716
|
| 11 | LF-only line endings via `.gitattributes` | Single repo source of truth; cross-platform contributors don't think about it |
|
|
717
717
|
| 12 | `Provider` indirection (legacy `providers/`) removed | Superseded by `api.FlowApiClient`. Re-introduce when we add `OfficialVeoProvider` (planned v0.5+) |
|
|
718
718
|
| 13 | CDP attach / stealth-engine alternatives deferred; **current stealth fix confirmed sufficient 2026-07-09** | Gate met: a 20-gen live baseline through the default stealth stack showed a **0.0% WAF 403 rate**, so the "confirm insufficient before implementing" bar is unmet — CDP-Attach and the Camoufox engine stay parked (Camoufox roadmap closed at Phase 2). Evidence: [superpowers/spikes/2026-07-09-camoufox-waf-403.md](superpowers/spikes/2026-07-09-camoufox-waf-403.md). |
|
|
719
|
-
| 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. |
|
|
719
|
+
| 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. **Scope note 2026-08-31:** "401-dead" was measured on `batchAsyncGenerateVideoText` in 2026-05 and has NOT been re-tested. It is not a property of `/v1/video:*` as a family — `batchAsyncGenerateVideoExtendVideo` returned **200** from our own transport with our own minted token on 2026-08-31 ([spike](docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md)). Do not cite this ADR as evidence that a direct-wire video route cannot work; re-measure the specific route. |
|
|
720
720
|
|
|
721
721
|
---
|
|
722
722
|
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
[](https://github.com/microsoft/pyright)
|
|
13
13
|
[](CONTRIBUTING.md)
|
|
14
14
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
15
|
+
[](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
|
|
15
16
|
[](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
|
|
16
17
|
|
|
17
18
|
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
|
|
27
28
|
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
28
29
|
|
|
29
|
-
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
30
|
+
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
|
|
30
31
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
31
32
|
- **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
|
|
32
33
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
@@ -128,7 +129,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
128
129
|
|
|
129
130
|
## Project status
|
|
130
131
|
|
|
131
|
-
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP
|
|
132
|
+
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
|
|
132
133
|
|
|
133
134
|
Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
|
|
134
135
|
|
|
@@ -155,4 +156,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
155
156
|
[](https://github.com/ffroliva/gflow-cli)
|
|
156
157
|
[](https://pepy.tech/project/gflow-cli)
|
|
157
158
|
|
|
159
|
+
### Star history
|
|
160
|
+
|
|
161
|
+
<picture>
|
|
162
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
|
|
163
|
+
<img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
|
|
164
|
+
</picture>
|
|
165
|
+
|
|
158
166
|
If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
|
|
@@ -209,7 +209,9 @@ sequenceDiagram
|
|
|
209
209
|
> bounds: (1) gflow's `generate_image` clicks "new project" + omits `entityContext` → workflow lands in the
|
|
210
210
|
> wrong project (`flowWorkflows` PATCH 404'd); (2) a self-assembled direct POST with our own minted reCAPTCHA
|
|
211
211
|
> token → **HTTP 403** (the reCAPTCHA wall — [[rest-path-capability-matrix]]; body shape matched the real HAR,
|
|
212
|
-
> only the token differed). **
|
|
212
|
+
> only the token differed). **Scope note (2026-08-31): this 403 is specific to `batchGenerateImages`, not to
|
|
213
|
+
> generation in general** — see §"the wall is route-specific" below. **Decision (§11): drive generation
|
|
214
|
+
> through the character editor UI** (existing
|
|
213
215
|
> project → Personagens → new character → generate) so Flow's JS sets `entityContext` + passes the WAF, and
|
|
214
216
|
> gflow passive-captures `media[]`/`workflows[]`. The structural ops below stay direct-REST.
|
|
215
217
|
|
|
@@ -377,9 +379,27 @@ convenience later.
|
|
|
377
379
|
self-assembled `batchGenerateImages` POST returned **HTTP 403** (createEntity ✅, reCAPTCHA mint ✅). Our
|
|
378
380
|
request body shape matched the real successful HAR exactly; the only difference is the reCAPTCHA token —
|
|
379
381
|
a `TokenMinter` token scores too low / wrong-context vs Flow's native page-JS token. This confirms
|
|
380
|
-
[[rest-path-capability-matrix]]:
|
|
381
|
-
wall.** No credit spent (403 before generation). **A retry won't
|
|
382
|
-
outside Flow's own JS.
|
|
382
|
+
[[rest-path-capability-matrix]]: ~~**generation is never browser-free**~~ — see the scope correction below;
|
|
383
|
+
**Bearer fixed the 401, not the reCAPTCHA wall.** No credit spent (403 before generation). **A retry won't
|
|
384
|
+
help** — for *this route*, the token can't be made WAF-valid outside Flow's own JS.
|
|
385
|
+
|
|
386
|
+
> #### ⚠️ Scope correction (2026-08-31) — the wall is route-specific, not universal
|
|
387
|
+
>
|
|
388
|
+
> "Generation is never browser-free" was generalised from a single 403 on `batchGenerateImages`. It is not
|
|
389
|
+
> true of every generative route, and reading it as a blanket rule has already cost real time — during the
|
|
390
|
+
> Veo-extend predict council it was cited as a blocking precedent against a path that then worked on the
|
|
391
|
+
> first try.
|
|
392
|
+
>
|
|
393
|
+
> | Route | Self-assembled POST + our minted token | Date |
|
|
394
|
+
> |---|---|---|
|
|
395
|
+
> | `batchGenerateImages` | **403** | 2026-06-02 |
|
|
396
|
+
> | `upsampleImage` | **200** (shipped, live) | — |
|
|
397
|
+
> | `batchAsyncGenerateVideoExtendVideo` | **200** | 2026-08-31 |
|
|
398
|
+
>
|
|
399
|
+
> Two of three generative routes accept a `TokenMinter` token. Treat the wall as a **per-route measurement**,
|
|
400
|
+
> never an inherited assumption — and re-measure before citing it. The `batchGenerateImages` 403 has not been
|
|
401
|
+
> re-tested since 2026-06-02 and may itself be stale.
|
|
402
|
+
> Evidence: [superpowers/spikes/2026-08-31-veo-extend-route-recon.md](superpowers/spikes/2026-08-31-veo-extend-route-recon.md).
|
|
383
403
|
- **✅ Decision = Option B (UI-driven generation; structural ops stay REST).** Generation (character image
|
|
384
404
|
create AND video reuse) **must** ride Flow's native UI so Flow's JS issues the WAF-valid request, which
|
|
385
405
|
gflow passive-captures — identical mechanism to the existing `generate_image`/`generate_video`. Revised
|
|
@@ -95,6 +95,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
95
95
|
**"How do I feed gflow outputs into ffmpeg / a pipeline?"** → [USER_GUIDE § Journey 11](USER_GUIDE.md#journey-11--wiring-gflow-outputs-into-a-downstream-pipeline)
|
|
96
96
|
**"How do I chain clips into one continuous video (initial-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
|
|
97
97
|
**"How do I stitch existing clips into one extended .mp4 (credit-free, no ffmpeg)?"** → [USAGE § `gflow scene`](USAGE.md#gflow-scene)
|
|
98
|
+
**"How do I make one clip longer than Flow's 8-second cap?"** → [USAGE § `gflow video extend`](USAGE.md#gflow-video-extend) (costs credits per segment; a segment carries ~7s of content though Flow bills 8s — see [KNOWN_ISSUES](../KNOWN_ISSUES.md))
|
|
98
99
|
**"How do I create a reusable character (face + body) I can reuse across generations?"** → [USAGE § `gflow character`](USAGE.md#gflow-character) · design: [CHARACTER](CHARACTER.md)
|
|
99
100
|
**"Should I use an `@mention`, `--reference-entity`, or `--ref` to tag an asset?"** → [REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md) — saved named identity → `@Name`/`--reference-entity`; one-off image → `--ref`
|
|
100
101
|
**"How does Flow's media library / picker actually behave (names, tabs, scrolling, listing)?"** → [MEDIA_LIBRARY](MEDIA_LIBRARY.md) — identity = UUID, names are async AI captions; grid is virtualized; full pitfall table
|
|
@@ -154,7 +155,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
154
155
|
**"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
|
|
155
156
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
156
157
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
157
|
-
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
|
|
158
|
+
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
|
|
158
159
|
**"Was the playwright upper bound raised, and on what evidence?"** → [LIVE_VERIFICATION_playwright_1.61](LIVE_VERIFICATION_playwright_1.61.md) (**`>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0` verified 2026-08-05, 1 Imagen + 1 Veo credit** — the 2026-08-03 regression that motivated the bound does NOT reproduce on 1.61.0: a live `i2v` drove the full chain with `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live `i2i` local-ref attach passed outright [96.7s]. **1.62.0 stays excluded** — never root-caused. Also found, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0: Flow dropped the duration-tab UI, so **`--duration` is currently broken for i2v** — `UiSelectorDriftError` fires correctly [refusing rather than silently accepting Flow's default, #288] but the selector needs re-deriving; that is why the i2v proof was driven via the CLI without `--duration`, and Flow's own server-side `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT` means no finished mp4 is claimed).
|
|
159
160
|
**"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
|
|
160
161
|
**"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
|