gflow-cli 0.79.0__tar.gz → 0.80.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.79.0 → gflow_cli-0.80.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/ci.yml +9 -7
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/deps-watch.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/governance-advisory.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/governance-benchmark.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/release.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/scorecard.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/selector-probe.yml +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/AGENTS.md +3 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/CHANGELOG.md +184 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/KNOWN_ISSUES.md +39 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/PKG-INFO +3 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker/Dockerfile +1 -1
- {gflow_cli-0.79.0/website → gflow_cli-0.80.0}/docs/CONFIGURATION.md +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/DATA_LAYER.md +12 -2
- {gflow_cli-0.79.0/website → gflow_cli-0.80.0}/docs/DEBUGGING.md +2 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/E2E_TESTING.md +52 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/INDEX.md +1 -1
- gflow_cli-0.80.0/docs/LIVE_VERIFICATION_v0.79.1.md +127 -0
- gflow_cli-0.80.0/docs/LIVE_VERIFICATION_v0.80.0.md +105 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/MCP.md +3 -3
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/PROJECT_STATUS.md +88 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/USAGE.md +31 -10
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/content-policy-text-scan-false-positives-on-page-chrome.md +10 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +11 -7
- gflow_cli-0.80.0/docs/superpowers/memory/migrated-refusal-is-a-dom-card-not-a-wire-record.md +48 -0
- gflow_cli-0.80.0/docs/superpowers/spikes/2026-09-20-warm-client-premint-on-about-blank.md +65 -0
- gflow_cli-0.80.0/docs/superpowers/spikes/2026-09-22-playwright-max-retries-econnreset.md +97 -0
- gflow_cli-0.80.0/docs/superpowers/spikes/2026-09-23-about-cta-leads-to-google-reauth.md +129 -0
- gflow_cli-0.80.0/docs/superpowers/spikes/2026-09-27-migrated-refusal-is-on-the-wire.md +47 -0
- gflow_cli-0.80.0/docs/superpowers/spikes/2026-09-27-stealth-fingerprint-delta.md +51 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/llms.txt +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/.claude-plugin/plugin.json +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0/plugins/gflow}/skills/gflow-cli/SKILL.md +2 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/pyproject.toml +5 -3
- gflow_cli-0.80.0/scripts/dev/spike_about_cta_recovery.py +277 -0
- gflow_cli-0.80.0/scripts/dev/spike_migrated_refusal_envelope.py +202 -0
- gflow_cli-0.80.0/scripts/dev/spike_mint_on_about_blank.py +89 -0
- gflow_cli-0.80.0/scripts/dev/spike_playwright_max_retries.py +185 -0
- gflow_cli-0.80.0/scripts/dev/spike_stealth_fingerprint_delta.py +162 -0
- gflow_cli-0.80.0/scripts/dev/spike_warm_client_unported_form.py +125 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/server.json +2 -2
- {gflow_cli-0.79.0/plugins/gflow → gflow_cli-0.80.0}/skills/gflow-cli/SKILL.md +2 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/client.py +51 -11
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/image.py +16 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/_common.py +114 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/batchexecute.py +64 -13
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/migrated_composer.py +439 -28
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/migrated_recover.py +15 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/ui_automation.py +17 -39
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/ui_automation_video.py +45 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/video.py +8 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/internal_chromium.py +75 -7
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/real_chrome.py +14 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_data.py +2 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_run.py +2 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_video.py +25 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/queries.py +4 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/recorder.py +9 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/errors.py +37 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/image_batch.py +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/tools.py +18 -3
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/worker/codec.py +2 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/worker/daemon.py +8 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_errors.py +53 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_image.py +6 -0
- gflow_cli-0.80.0/tests/api/test_image_capability_and_cookie_bar.py +338 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_video.py +10 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_batchexecute.py +41 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_composer.py +56 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_images.py +34 -54
- gflow_cli-0.80.0/tests/api/transports/test_signed_media_retry.py +258 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ui_automation.py +3 -3
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ui_automation_video.py +53 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/strategies/test_strategies.py +145 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/test_real_chrome.py +35 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_failure_recording.py +55 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/conftest.py +54 -0
- gflow_cli-0.80.0/tests/e2e/test_login_identity_recheck_e2e.py +75 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_migrated_host_e2e.py +233 -1
- gflow_cli-0.80.0/tests/e2e/test_migrated_refusal_live_bdd.py +112 -0
- gflow_cli-0.80.0/tests/e2e/test_retired_labs_route_diagnosis_e2e.py +91 -0
- gflow_cli-0.80.0/tests/features/migrated_refusal_envelope.feature +26 -0
- gflow_cli-0.80.0/tests/features/migrated_refusal_live.feature +11 -0
- gflow_cli-0.80.0/tests/features/test_migrated_refusal_envelope_steps.py +114 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/test_model_governance.py +1 -6
- gflow_cli-0.80.0/tests/mcp/conftest.py +25 -0
- gflow_cli-0.80.0/tests/mcp/test_download_error_envelope.py +131 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_spike_profile_lease.py +11 -1
- gflow_cli-0.80.0/tests/test_about_landing_guard.py +59 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_cli_data.py +1 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_data_queries.py +8 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_plugin_manifests.py +7 -4
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_daemon.py +65 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/uv.lock +68 -40
- {gflow_cli-0.79.0 → gflow_cli-0.80.0/website}/docs/CONFIGURATION.md +1 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/DATA_LAYER.md +12 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0/website}/docs/DEBUGGING.md +2 -1
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/E2E_TESTING.md +52 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/KNOWN_ISSUES.md +39 -2
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/MCP.md +3 -3
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/USAGE.md +31 -10
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/requirements.txt +3 -3
- gflow_cli-0.79.0/docs/superpowers/memory/migrated-refusal-is-a-dom-card-not-a-wire-record.md +0 -50
- gflow_cli-0.79.0/tests/mcp/conftest.py +0 -15
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/spike.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.claude-plugin/marketplace.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.env.template +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.gitattributes +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/mcp-registry.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/sponsors.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.gitignore +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/.secrets.baseline +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/CLAUDE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/LICENSE +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/RELEASE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/ROADMAP.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/conftest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker/Dockerfile.test +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker/docker-compose.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker/dockerignore.example +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docker-compose.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/CONTAINER.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/DISTRIBUTION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.71.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.71.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.72.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.73.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.73.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.73.2.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.74.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.75.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.76.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.77.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.77.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.78.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.79.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/MARKETPLACES.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/SPONSORS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/ligature-carrier-differs-by-host.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/release-signing.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-14-community-feedback-uplift/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-17-gflow-docs-command/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-17-gflow-docs-command/SCENARIO.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/plans/2026-09-17-project-create-bundle/PLAN.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-08-migrated-composer-agent-mode-hides-settings.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-08-migrated-queue-is-readable-on-zzl0ze.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-08-migrated-upload-fails-two-ways.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-10-about-redirect-stability.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-10-migrated-click-blocked.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-decided-client-side.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-stable-for-an-account.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-11-migrated-cookie-bar-blocks-the-composer.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-11-nano2-lite-capability.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-13-frames-picker-confirm.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-14-credits-on-migrated-host.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-14-generation-wire-no-push-channel.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-14-two-domain-protocol-survey.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-14-video-poll-is-a-fixed-client-timer.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-15-container-transport-viability.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-15-unentitled-account-signal.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-16-networkidle-costs-3x-it-does-not-hang.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-17-migrated-end-frame-submit-contract.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-17-project-create-on-flow-google-com.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/docs/superpowers/spikes/2026-09-17-stranded-clip-recovery.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/glama.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/hatch_build.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/index.html +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/mempalace.yaml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/.mcp.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/clip_qa.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/composition.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/consistency.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/failure-modes.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/plugins/gflow/skills/video-production/tasks.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_council_memory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_fork_pr_ci.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/generate_plugin_skills.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/ci/update_sponsors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/acceptance/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/acceptance/bench.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/acceptance/domain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/acceptance/judge.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/acceptance/settings.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/measure_html_lang_settle.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_about_redirect_cause.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_about_redirect_stability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_cdp_har_without_node.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_character_editor_ready_gate.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_create_project_401.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_credits_migrated_surface.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_entity_submit_rpcs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_flow_unavailable_signal.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_format_prompt_effect.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_frames_picker_confirm.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_generation_wire_survey.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_host_lane.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_image_model_attribution.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_ligature_carrier_sweep.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_aspect_radios.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_click_blocked.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_composer_arms.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_composer_mode_axis.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_cookie_bar.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_create_project.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_end_frame.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_entity_submit.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_image_capability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_image_submit.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_picker_option_kind.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_queue_read.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_submit_anchor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_upload_wire.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_nano2_lite_capability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_networkidle_bootstrap_cost.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_playwright_chrome_login.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_project_media_status.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_recover_stranded_clip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_two_domain_protocol_survey.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/README.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/spike/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/SKILL.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/clip_qa.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/composition.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/consistency.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/failure-modes.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/skills/video-production/tasks.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/sonar-project.properties +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_docs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/cli_update.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/docs_catalog.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/media_recovery.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_aisandbox_auth_remediation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_bootstrap_chooser.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_character_readback_fallback.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_migrated_mint.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_project_host.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_credits_http.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_agent_only_composer.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_character_model_picker.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_click_attribution.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_flow_access_unavailable.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ligature_carrier.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_dispatch.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_project.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_r2v.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_recover.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_migrated_route.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_new_project_cta_migrated.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/test_account_autoselect.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_auth_error_paths.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_docs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_docs_catalog_real_docs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_run_with_handlers_context_leak.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/conftest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_account_chooser_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_blocking_dialog_dismissal_bdd.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_character_mcp_parity_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_click_attribution_bdd.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_credits_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_data_download_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_e2e_env_isolation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_frame_picker_binding_bdd.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_insufficient_credits_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_landing_state_diagnosis_bdd.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_project_create_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/blocking_dialog_dismissal.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/click_attribution.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/credits.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/frame_picker_binding.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/landing_state_diagnosis.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/latched_locale_recovery.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/migrated_driver.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/migrated_host_gate.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/migrated_host_images.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/migrated_i2v.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_credits_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_e2e_binding_guard.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_migrated_driver_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_migrated_host_images_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_migrated_i2v_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/test_docs_ships_in_wheel.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_character_tools.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_credits_tool.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_mcp_profile_contention.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_payload_key_round_trip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_serve_auth.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_council_memory.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_fork_pr_ci.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_extract_har_summary.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_frame_acceptance.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_skillopt_scoring.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_spike_page_pool.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_update_sponsors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_credits.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_media_recovery.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_cli_update.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_config.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_dockerfile_version_pin.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_glama_build_spec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_media.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_release_version_sites.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_rich_markup_safety.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_server_json.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/SPONSORS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/index.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.79.0 → gflow_cli-0.80.0}/website/requirements.in +0 -0
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
with:
|
|
44
44
|
persist-credentials: false
|
|
45
45
|
- name: Install uv
|
|
46
|
-
uses: astral-sh/setup-uv@
|
|
46
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
47
47
|
- name: Audit locked dependencies for known CVEs
|
|
48
48
|
# Fails the build on any known advisory. Accept later via: pip-audit --ignore-vuln <GHSA-id>
|
|
49
49
|
#
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
persist-credentials: false
|
|
81
81
|
|
|
82
82
|
- name: Install uv
|
|
83
|
-
uses: astral-sh/setup-uv@
|
|
83
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
84
84
|
|
|
85
85
|
- name: Audit workflows (zizmor)
|
|
86
86
|
# --offline: the online audits need a GH token and reach the network, so
|
|
@@ -116,7 +116,7 @@ jobs:
|
|
|
116
116
|
persist-credentials: false
|
|
117
117
|
|
|
118
118
|
- name: Install uv
|
|
119
|
-
uses: astral-sh/setup-uv@
|
|
119
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
120
120
|
|
|
121
121
|
- name: Set up Python
|
|
122
122
|
run: uv python install 3.13
|
|
@@ -172,7 +172,7 @@ jobs:
|
|
|
172
172
|
persist-credentials: false
|
|
173
173
|
|
|
174
174
|
- name: Install uv
|
|
175
|
-
uses: astral-sh/setup-uv@
|
|
175
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
176
176
|
|
|
177
177
|
- name: Set up Python
|
|
178
178
|
run: uv python install ${{ matrix.python-version }}
|
|
@@ -225,7 +225,9 @@ jobs:
|
|
|
225
225
|
# e2e/live tests require a logged-in Chromium profile and may spend
|
|
226
226
|
# Flow credits. pyproject.toml excludes both markers by default; CI
|
|
227
227
|
# intentionally relies on that default smoke set.
|
|
228
|
-
|
|
228
|
+
# -n auto: pytest-xdist, one worker per runner vCPU (~2x on the full suite;
|
|
229
|
+
# 198 s vs ~390 s measured locally at -n 8).
|
|
230
|
+
run: uv run python -m pytest -q -n auto --cov=gflow_cli --cov-report=xml --junitxml=pytest-report.xml
|
|
229
231
|
|
|
230
232
|
# Five files under tests/e2e/ are hermetic: every Flow origin is served by
|
|
231
233
|
# `page.route(...).fulfill(...)`, so they need no account, no profile, no
|
|
@@ -285,7 +287,7 @@ jobs:
|
|
|
285
287
|
persist-credentials: false
|
|
286
288
|
|
|
287
289
|
- name: Install uv
|
|
288
|
-
uses: astral-sh/setup-uv@
|
|
290
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
289
291
|
|
|
290
292
|
- name: Set up Python
|
|
291
293
|
run: uv python install 3.13
|
|
@@ -357,7 +359,7 @@ jobs:
|
|
|
357
359
|
# archived actions, so its pin would rot silently); sonarqube-scan-action
|
|
358
360
|
# is SonarSource's maintained successor and serves SonarCloud when
|
|
359
361
|
# SONAR_HOST_URL points at it.
|
|
360
|
-
uses: SonarSource/sonarqube-scan-action@
|
|
362
|
+
uses: SonarSource/sonarqube-scan-action@ba9859eae8dd6bd29e412f25ddbbef3d032000f4 # v8.2.2
|
|
361
363
|
env:
|
|
362
364
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # PR decoration
|
|
363
365
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # set in repo → Settings → Secrets
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
persist-credentials: false
|
|
34
34
|
|
|
35
35
|
- name: Install uv
|
|
36
|
-
uses: astral-sh/setup-uv@
|
|
36
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
37
37
|
|
|
38
38
|
- name: Set up Python
|
|
39
39
|
run: uv python install 3.13
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
fetch-depth: 0 # full history so `git diff origin/<base>..HEAD` resolves
|
|
26
26
|
|
|
27
27
|
- name: Install uv
|
|
28
|
-
uses: astral-sh/setup-uv@
|
|
28
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
29
29
|
|
|
30
30
|
- name: Classify touched paths (advisory, never blocks)
|
|
31
31
|
# BASE_REF arrives through `env:`, never interpolated into the script
|
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
fetch-depth: 0 # full history — the backtest replays every commit
|
|
25
25
|
|
|
26
26
|
- name: Install uv
|
|
27
|
-
uses: astral-sh/setup-uv@
|
|
27
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
28
28
|
|
|
29
29
|
- name: Run backtest (advisory; writes to job summary)
|
|
30
30
|
run: uv run python scripts/dev/materiality_backtest.py >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
fetch-depth: 0
|
|
32
32
|
|
|
33
33
|
- name: Install uv
|
|
34
|
-
uses: astral-sh/setup-uv@
|
|
34
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
35
35
|
with:
|
|
36
36
|
# This is the one workflow that publishes artefacts (PyPI + GitHub
|
|
37
37
|
# Release), so it must not restore a cache any other workflow can
|
|
@@ -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@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4
|
|
51
51
|
with:
|
|
52
52
|
sarif_file: results.sarif
|
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
steps:
|
|
17
17
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
18
18
|
with: { persist-credentials: false }
|
|
19
|
-
- uses: astral-sh/setup-uv@
|
|
19
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
20
20
|
- run: uv sync --frozen
|
|
21
21
|
- run: uv run playwright install chromium --with-deps
|
|
22
22
|
- name: Probe
|
|
@@ -46,7 +46,7 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
46
46
|
|
|
47
47
|
- Python CLI and MCP server 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` — and, for accounts Google has moved to `flow.google.com`, that frontend's `batchexecute` wire (text-to-video, image-to-video from a local `--initial-frame`, reference-to-video from local `--ref` files, and text-to-image/local-file image-to-image, today; `GFLOW_CLI_FLOW_HOST`).
|
|
48
48
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
49
|
-
- 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_credits.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`, `cli_update.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`.
|
|
49
|
+
- 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_credits.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`, `cli_docs.py`, `docs_catalog.py`, `cli_update.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`.
|
|
50
50
|
- Command surface: `gflow auth`, `gflow credits` (user/list — read-only Veo balance), `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 docs` (browse the bundled documentation — bare lists every topic, `gflow docs <topic>` prints one as Markdown, `gflow docs --search TERM` searches all of them; there are **no** `list`/`print`/`search` subcommands — read-only, offline, deliberately no MCP twin), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow update` (self-update through the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs refused, exit 11; deliberately no MCP twin), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
51
51
|
- Works with any Google account that has Flow access. All generations bill against the user's own Google account.
|
|
52
52
|
|
|
@@ -97,11 +97,12 @@ the five other mirror axes), which no command here can check and no CI gate can
|
|
|
97
97
|
> 2026-09-02). Two lists that disagree means the shorter one is silently wrong.
|
|
98
98
|
|
|
99
99
|
- 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.
|
|
100
|
+
- **Parallel runs (`pytest-xdist`):** add `-n 8` (or `-n auto`) to cut the offline suite from ~390 s to ~200 s. Every worker is a full process, so cap `-n` on a small machine. CI runs `-n auto`. A test that passes alone but fails under `-n` shares state with another test: **fix the shared state** (two measured cases: `tests/mcp/conftest.py` and `test_every_shipped_skill_is_byte_identical_to_its_source`). If two tests genuinely need the same exclusive resource (a fixed port, a file lock), mark both `@pytest.mark.xdist_group("<resource>")` so they run on one worker, one after another, while the rest stays parallel.
|
|
100
101
|
- TDD is non-negotiable. Coverage floor: 80% overall.
|
|
101
102
|
- Documentation is a first-class deliverable. Every behavior, workflow, config, or operator-facing change must update the relevant docs or state why no docs changed in the PR/checklist. `scripts/ci/check_doc_links.py` is a merge gate.
|
|
102
103
|
- **A PR is not done until its SonarCloud gate is green (zero new issues).** The nine gates above are local/pre-commit; SonarCloud is server-side and runs in CI (`sonar.qualitygate.wait=true` → a red gate turns the `SonarCloud analysis` check red). Before calling a PR merge-ready, verify it with `/gflow:sonar <N>` (it is skipped on fork PRs — maintainer-checked there).
|
|
103
104
|
- **E2E is the decisive layer, and it is required for every behavior change that touches a Flow surface.** Run the `tests/e2e/` test that covers the change, or write one — offline-green proves only that *our* code does what we think, never that Flow still behaves as captured. `/gflow:live-verify` does **not** satisfy this: it drives CLI commands by hand into a gitignored note and never runs `pytest -m e2e`. The two are complementary — an e2e test is a re-runnable regression, a live-verify ledger is a narrative record. A change touching no Flow surface at all (docs, help text, exit-code plumbing) is out of scope — say so explicitly rather than leaving it blank. Anything else follows the **Iron Law** above: run it, or name the external blocker that stops you. "A maintainer will run it" is a handoff, not a verification, and is only available once the blocker is named.
|
|
104
|
-
- E2E tests require `GFLOW_CLI_E2E_PROFILE` and `-m e2e` (excluded from the default `addopts`, so they never run by accident). Cost sub-markers: `e2e_auth` (zero credits, browser only), `e2e_image` (zero credits, daily cap), `e2e_scene`, `e2e_data`, `e2e_batch`, `e2e_character` (opt in with `GFLOW_CLI_E2E_RUN_CHARACTER=1`), `e2e_video` (spends Veo credits — opt in with `GFLOW_CLI_E2E_RUN_VIDEO=1`). Redact account identifiers and any token or cookie value before pasting output into a PR.
|
|
105
|
+
- E2E tests require `GFLOW_CLI_E2E_PROFILE` and `-m e2e` (excluded from the default `addopts`, so they never run by accident). Cost sub-markers: `e2e_auth` (zero credits, browser only), `e2e_image` (zero credits, daily cap), `e2e_scene`, `e2e_data`, `e2e_batch`, `e2e_character` (opt in with `GFLOW_CLI_E2E_RUN_CHARACTER=1`), the migrated refusal e2e (`e2e_image`, opt in with `GFLOW_CLI_E2E_RUN_REFUSAL=1` — it sends one corrupted reCAPTCHA token, so run it on a probe profile), `e2e_video` (spends Veo credits — opt in with `GFLOW_CLI_E2E_RUN_VIDEO=1`). Redact account identifiers and any token or cookie value before pasting output into a PR.
|
|
105
106
|
- Live tests (`@pytest.mark.live`) opt in via `GFLOW_LIVE=1`.
|
|
106
107
|
|
|
107
108
|
## Code style
|
|
@@ -7,6 +7,177 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.80.0] — 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- **Locked `oauthlib` 4.0.0 (CVE-2026-49265) and `pyjwt` 2.15.1 (CVE-2026-102274).**
|
|
15
|
+
Both are transitive: `oauthlib` via the `gcs` extra (`gcsfs` → `google-auth-oauthlib`
|
|
16
|
+
→ `requests-oauthlib`), `pyjwt` via `mcp[crypto]`. No gflow code imports either directly.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **Explicit video resolution control (`--resolution [360p|720p]`, #787).** Added `--resolution`
|
|
21
|
+
to `gflow video t2v`, `i2v`, and `r2v`, as well as MCP tool `gflow_generate_video`.
|
|
22
|
+
Enables explicit selection of `360p` or `720p` on models providing resolution controls
|
|
23
|
+
(such as `omni-flash`), preventing unintended defaults.
|
|
24
|
+
- **Support for Nano Banana 2 Lite (`--model nano2-lite`, #787).** Added `nano2-lite` alias mapped
|
|
25
|
+
to Google's internal `HARBOR_SEAL` wire model for `gflow image t2i`, `i2i`, and `batch`. Its I2I reference
|
|
26
|
+
cap starts at 3 because it has not been measured yet, and its daily quota is
|
|
27
|
+
unmeasured too ([spike](docs/superpowers/spikes/2026-09-11-nano2-lite-capability.md)).
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **An unported image form is refused by name, on a fresh or a reused client (#891).**
|
|
32
|
+
The browser transport no longer pre-mints a reCAPTCHA token for images: Flow's page
|
|
33
|
+
mints its own, and the client's token was never read. After a successful image the
|
|
34
|
+
pre-mint ran on the parked `about:blank` page and turned exit 36 into a misleading
|
|
35
|
+
`RecaptchaError`. The refusal now comes from the composer and names the form, e.g.
|
|
36
|
+
"the IMAGEN_3_5 model is not ported yet". Reachable from `gflow run --config` with a
|
|
37
|
+
per-prompt `imagen4` after a successful prompt: that run used to crash with exit 1 and
|
|
38
|
+
lose its results table; now the prompt fails by name and the run completes. This
|
|
39
|
+
corrects the 0.78.0 note that project-less image runs "keep the served host": the
|
|
40
|
+
client creates the project first, so they are served by the migrated composer. The HTTP
|
|
41
|
+
image transports still mint.
|
|
42
|
+
- **A clip whose download connection dropped is no longer recorded as never generated
|
|
43
|
+
(#896, #898).** When Flow reports a video done but the signed-media connection drops
|
|
44
|
+
on every retry, the catalog now marks the asset `MEDIA_GENERATION_STATUS_SUCCESSFUL`
|
|
45
|
+
rather than leaving it `pending` forever. The operation's `error_type` is
|
|
46
|
+
`media-download` (still exit 6), so `gflow data list errors` tells a lost transfer from
|
|
47
|
+
a failed generation. `gflow data list videos` gains a `STATUS` column and a `status`
|
|
48
|
+
field in `--json`. An HTTP error answer on the signed URL still leaves the asset
|
|
49
|
+
`pending`. **Changed:** that failure's Problem Details `type` is now
|
|
50
|
+
`…/errors/media-download` (a subclass of the `network` error, same exit code).
|
|
51
|
+
- **A generation flow.google.com refuses is now reported as that refusal, by name (#906, #873).**
|
|
52
|
+
Flow answers a refused submit with HTTP 200 and a `batchexecute` error envelope carrying
|
|
53
|
+
Google's reason (`PUBLIC_ERROR_UNUSUAL_ACTIVITY`), but gflow's parser discarded any frame
|
|
54
|
+
without a payload. So a refusal ended as a retryable 60 s video timeout (exit 9) or an image
|
|
55
|
+
"no ogiZ0b frame" wire fault (exit 7), whose remediation tells you to file a frontend bug.
|
|
56
|
+
It is now `WafRejectionError` (exit 10) — the class the labs path has always used for the same
|
|
57
|
+
reason — with a remediation that says the prompt is not the cause and nothing was charged. The
|
|
58
|
+
content-safety reasons map to `ContentPolicyError` (exit 5) as on the REST path. Read from the
|
|
59
|
+
wire, not from the grid's failure card, which looks identical for a refusal and an aborted
|
|
60
|
+
submit ([spike](docs/superpowers/spikes/2026-09-27-migrated-refusal-is-on-the-wire.md)).
|
|
61
|
+
The refusal was observed live on the image submit; the video submit reads the same framing
|
|
62
|
+
and is covered offline, but a live video refusal has not been captured yet.
|
|
63
|
+
Diagnosed by [@stgmt](https://github.com/stgmt) in #873 and #906; this change supersedes
|
|
64
|
+
#873 and the refusal-card half of #907.
|
|
65
|
+
|
|
66
|
+
- **`gflow auth login` no longer reports success while Google is waiting for the account to
|
|
67
|
+
"Confirm it's you" (#902).** In that state the cookies stay valid, so the session probe
|
|
68
|
+
answered in 0.4 s and the login closed Chrome before Flow's client-side hop to
|
|
69
|
+
`flow.google.com/about` could land. It then printed `[OK] Flow session verified` on an
|
|
70
|
+
account where every command still exited 31. The login now watches a `flow.google.com`
|
|
71
|
+
landing for up to 3 s before it closes. If Flow routes the page to `/about`, Chrome stays open
|
|
72
|
+
and the user is told to press the page's main button and finish Google's check. Closing the
|
|
73
|
+
window or running out of time in that state exits 12 with the new
|
|
74
|
+
`IdentityRecheckPendingError`. The #849 on-disk check is skipped in that case, because it reads
|
|
75
|
+
the same healthy cookies. A labs-served login closes as fast as before. The failing state is
|
|
76
|
+
tested offline only: the one account measured in it (2026-09-23) had already been cleared by
|
|
77
|
+
hand, and none of the profiles here is in that state now.
|
|
78
|
+
|
|
79
|
+
## [0.79.1] — 2026-09-22
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- **A finished, billed clip is no longer thrown away when its download hits a connection
|
|
84
|
+
reset (#895).** The signed-media GET was issued once, with no retry: a single
|
|
85
|
+
`ECONNRESET` mid-transfer failed the whole command *after* Veo had produced the clip and
|
|
86
|
+
charged for it — reported at 2 failures in 6 consecutive runs. The transfer now survives
|
|
87
|
+
a dropped connection using Playwright's own `max_retries`, which retries on the driver's
|
|
88
|
+
`ECONNRESET` and never on an HTTP status, and whose backoff is charged to the same
|
|
89
|
+
timeout rather than multiplying it: three attempts stay inside one ~180 s budget instead
|
|
90
|
+
of stretching to nine minutes on a lock shared with every other generation. Measured
|
|
91
|
+
with an A/B control, not read from the docs —
|
|
92
|
+
[spike](docs/superpowers/spikes/2026-09-22-playwright-max-retries-econnreset.md).
|
|
93
|
+
Fixed at **all three** download sites, not just the one the traceback named: the
|
|
94
|
+
migrated composer, `gflow data download`'s own recovery GET (so the escape hatch cannot
|
|
95
|
+
be stranded by the fault it exists to rescue), and the labs `media.getMediaUrlRedirect`
|
|
96
|
+
path.
|
|
97
|
+
- **A lost transfer now says the clip survived, instead of `Unexpected error` (#895).**
|
|
98
|
+
`playwright.async_api.Error` is not a gflow error class, so it escaped the typed-error
|
|
99
|
+
contract entirely and rendered as *"Unexpected error … exit code 1, retryable: False"* —
|
|
100
|
+
of which the last two are wrong and the first is useless. It is now `NetworkError`
|
|
101
|
+
(exit 6, correctly retryable) carrying the media id and `gflow data download <id>`, so a
|
|
102
|
+
user is not left re-generating a clip they already own. The exception message is
|
|
103
|
+
deliberately **not** forwarded into `detail`: Playwright concatenates its server-side
|
|
104
|
+
call log into it, and `detail` reaches stderr and `--json` stdout without passing
|
|
105
|
+
through redaction, so a signed URL would leak. Both MCP twins gain this for free — until
|
|
106
|
+
now `gflow_download_media` returned *"Unexpected Error; details were logged
|
|
107
|
+
server-side"* with no remediation field at all, and the queued `gflow_generate_video`
|
|
108
|
+
path returned `detail: "sha256:<hash>"` with neither `remediation_hint` nor `retryable`.
|
|
109
|
+
- **A failed generation now keeps its media id on the queue row, so an MCP agent can
|
|
110
|
+
actually recover the clip (#895).** The remediation added above names the media id and
|
|
111
|
+
tells the user to recover it — but over MCP that advice was unusable. The worker's
|
|
112
|
+
success branch recorded `flow_media_id` on the queue row; the failure branch did not,
|
|
113
|
+
so the row stayed `NULL` and `gflow_generate_video`'s failed envelope carried no id at
|
|
114
|
+
all. The agent's only copy was a UUID buried in an English sentence, suggesting a
|
|
115
|
+
*shell command* an MCP client cannot run, when its actual tool takes `media_id=`.
|
|
116
|
+
`update_task_status` already COALESCEs, so a task that failed before Flow named
|
|
117
|
+
anything still records nothing.
|
|
118
|
+
|
|
119
|
+
- **An expired signed link stops blaming your prompt (#895).** A late GET answers 4xx, and
|
|
120
|
+
every one of those branches fell through to `WireFormatError`'s class default — *"retry
|
|
121
|
+
with a simpler prompt text"* — on paths that carry no prompt and no payload. The same
|
|
122
|
+
wrong-advice class removed in #875. Each now names the short link lifetime and the
|
|
123
|
+
credit-free re-mint.
|
|
124
|
+
- **The labs video download verifies where its redirect landed (#895).** That route is a
|
|
125
|
+
302 by design, so it follows up to 5 hops, and nothing checked the final host — the
|
|
126
|
+
posture the migrated arm gets from refusing redirects outright. The bytes are now
|
|
127
|
+
refused unless the landing host is an allowed Google host.
|
|
128
|
+
- **A retired labs route no longer tells you to simplify a prompt you never wrote.**
|
|
129
|
+
Every labs tRPC route except project-create now answers HTTP 404 with Flow's own
|
|
130
|
+
explanation — *"Flow RPCs have been deprecated and disabled. Flow has migrated to
|
|
131
|
+
https://flow.google.com."* — and gflow surfaced it as a bare `WireFormatError` (exit 7)
|
|
132
|
+
carrying the class-default advice: check the payload, retry with a simpler prompt, file
|
|
133
|
+
a bug. All three were wrong. The payload is fine, `gflow character list` is a read with
|
|
134
|
+
no prompt at all, and Flow documents the condition in the very body being classified.
|
|
135
|
+
The refusal is now recognised **by that message** — never by which host an account is
|
|
136
|
+
served, and never by a route allowlist, so a route we have not observed yet is covered
|
|
137
|
+
the day Flow retires it — and carries a remediation that names the retired route and
|
|
138
|
+
points at [#639](https://github.com/ffroliva/gflow-cli/issues/639). It deliberately
|
|
139
|
+
suggests **no** setting: `GFLOW_CLI_FLOW_HOST=flow.google.com` was measured not to help
|
|
140
|
+
(2026-09-20, `character list`), because the read has no migrated arm to route to, and
|
|
141
|
+
naming it would repeat the mistake being fixed. The error class and exit code are
|
|
142
|
+
unchanged ([#875](https://github.com/ffroliva/gflow-cli/issues/875)).
|
|
143
|
+
|
|
144
|
+
- **`KNOWN_ISSUES.md` no longer claims `gflow character list` works on the migrated host.**
|
|
145
|
+
Measured twice on 2026-09-20 — with and without `GFLOW_CLI_FLOW_HOST=flow.google.com` —
|
|
146
|
+
it exits 7 on the retired labs `projectInitialData` route both times. `list_characters`
|
|
147
|
+
reads that route unconditionally and has no migrated path
|
|
148
|
+
([#875](https://github.com/ffroliva/gflow-cli/issues/875)).
|
|
149
|
+
|
|
150
|
+
### Changed
|
|
151
|
+
|
|
152
|
+
- **The nightly canary stops crying wolf about an account that cannot reach Flow.**
|
|
153
|
+
An e2e failure caused by Flow serving its public `/about` landing is now reported as a
|
|
154
|
+
SKIP carrying the measurement, because it is a missing precondition rather than a
|
|
155
|
+
product failure — measured 2026-09-20, `gflow project create` succeeded on two profiles
|
|
156
|
+
and failed only on the canary's in the same minute. Seven of the thirteen standing
|
|
157
|
+
failures in [#559](https://github.com/ffroliva/gflow-cli/issues/559) were this one
|
|
158
|
+
condition, unchanged across three nightly runs, and the noise hid a real finding:
|
|
159
|
+
`test_project_create_e2e.py` shipped in v0.78.0 and had never passed once.
|
|
160
|
+
Test-only ([#888](https://github.com/ffroliva/gflow-cli/issues/888)).
|
|
161
|
+
|
|
162
|
+
It narrows deliberately. The guard matches a marker **gflow itself** emits from
|
|
163
|
+
`raise_if_known_landing`, never anything Flow says; a tripwire outside `tests/e2e/`
|
|
164
|
+
asserts that marker against the real raise site so a reword cannot silently disable it;
|
|
165
|
+
and it covers the `public` landing kind **only**. Two transports tests that fail on the
|
|
166
|
+
`signin` kind are left red on purpose — catching `AuthExpiredError` would silence the
|
|
167
|
+
signal an e2e exists to raise.
|
|
168
|
+
|
|
169
|
+
### Added
|
|
170
|
+
|
|
171
|
+
- **E2E coverage for the retired-route diagnosis** (`tests/e2e/test_retired_labs_route_diagnosis_e2e.py`,
|
|
172
|
+
`e2e_auth`, 0 credits, one read-only GET). The unit tests for
|
|
173
|
+
[#875](https://github.com/ffroliva/gflow-cli/issues/875) feed the classifier a *captured*
|
|
174
|
+
body, so they stay green if Flow changes the wording, un-retires the route or switches to
|
|
175
|
+
401 — while the user-facing diagnosis silently goes wrong again. This one asks Flow. It
|
|
176
|
+
needs no project fixture (the route is retired before any project lookup) and **skips
|
|
177
|
+
rather than passes** on an account still served the labs tRPC API, so a cohort change
|
|
178
|
+
cannot retire it unnoticed. Verified by falsification: with detection disabled it fails
|
|
179
|
+
with the pre-fix message verbatim.
|
|
180
|
+
|
|
10
181
|
## [0.79.0] — 2026-09-18
|
|
11
182
|
|
|
12
183
|
### Added
|
|
@@ -121,6 +292,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
121
292
|
`docs/superpowers/spikes/2026-09-17-migrated-end-frame-submit-contract.md`). Frames given
|
|
122
293
|
by media UUID or `@Name` are still not ported.
|
|
123
294
|
([#639](https://github.com/ffroliva/gflow-cli/issues/639))
|
|
295
|
+
- Migrated image submits prove the composer before any network observer arms:
|
|
296
|
+
cookie-bar dismissal, blocking-overlay refusal, and submit pointer hit-test,
|
|
297
|
+
each raising typed `UiSelectorDriftError` with bounded redacted diagnostics
|
|
298
|
+
instead of bare Playwright timeouts.
|
|
124
299
|
|
|
125
300
|
### Fixed
|
|
126
301
|
|
|
@@ -184,6 +359,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
184
359
|
`GFLOW_CLI_LEASE_WAIT_SECONDS` you set yourself, in the environment or a `.env`, still
|
|
185
360
|
wins. The CLI keeps failing fast. Thanks to @iceblue03 (#862).
|
|
186
361
|
([#864](https://github.com/ffroliva/gflow-cli/issues/864))
|
|
362
|
+
- Image requests that the migrated composer serves, with a named project,
|
|
363
|
+
from a pre-navigation page prefer the migrated host on `auto`, so the
|
|
364
|
+
page-owned recaptcha path wins the post-goto handoff race instead of a
|
|
365
|
+
doomed pre-navigation mint (#692). Labs editors, unported forms, and
|
|
366
|
+
project-less runs keep the served host (and their pre-minted token); the
|
|
367
|
+
`labs.google` kill-switch behavior is unchanged.
|
|
187
368
|
|
|
188
369
|
## [0.77.1] — 2026-09-17
|
|
189
370
|
|
|
@@ -5527,7 +5708,9 @@ shell-script template that branches on these codes.
|
|
|
5527
5708
|
|
|
5528
5709
|
First skeleton. Not functional end-to-end yet.
|
|
5529
5710
|
|
|
5530
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
5711
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.80.0...HEAD
|
|
5712
|
+
[0.80.0]: https://github.com/ffroliva/gflow-cli/compare/v0.79.1...v0.80.0
|
|
5713
|
+
[0.79.1]: https://github.com/ffroliva/gflow-cli/compare/v0.79.0...v0.79.1
|
|
5531
5714
|
[0.79.0]: https://github.com/ffroliva/gflow-cli/compare/v0.78.0...v0.79.0
|
|
5532
5715
|
[0.78.0]: https://github.com/ffroliva/gflow-cli/compare/v0.77.1...v0.78.0
|
|
5533
5716
|
[0.77.1]: https://github.com/ffroliva/gflow-cli/compare/v0.77.0...v0.77.1
|
|
@@ -14,14 +14,46 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
+
### Every command lands on `flow.google.com/about` (exit 31) while `gflow auth status` says the session is fine
|
|
18
|
+
|
|
19
|
+
- **Status:** Open · **Severity:** High for the affected account (nothing runs) · **Affected:** measured on one account (`denon82`, 2026-09-23). Other `/about` occurrences are not yet shown to share the cause.
|
|
20
|
+
- **Tracked:** [#902](https://github.com/ffroliva/gflow-cli/issues/902) (`auth login` cannot clear it) · [#888](https://github.com/ffroliva/gflow-cli/issues/888) · [#756](https://github.com/ffroliva/gflow-cli/issues/756)
|
|
21
|
+
- **Evidence:** [spike](docs/superpowers/spikes/2026-09-23-about-cta-leads-to-google-reauth.md)
|
|
22
|
+
|
|
23
|
+
Flow sends every visit to its public landing page `/about`, while every Google and Flow cookie
|
|
24
|
+
gflow checks is present and unexpired. On the measured account, the page's "Create with Google
|
|
25
|
+
Flow" button led to Google's **"Confirm it's you — sign in again to continue"** page: Google was
|
|
26
|
+
waiting for the account to re-verify its identity.
|
|
27
|
+
|
|
28
|
+
**Through v0.79.1, `gflow auth login` does not fix it.** It sees the valid cookies, reports
|
|
29
|
+
`Flow session verified` in about half a second, and closes Chrome before Google can ask (#902).
|
|
30
|
+
From the next release, the login watches where the page lands. If Flow sends it to `/about`, the
|
|
31
|
+
login keeps Chrome open and asks you to press the page's main button and finish "Confirm it's
|
|
32
|
+
you". If you close the window or the time limit runs out first, it exits 12
|
|
33
|
+
(`IdentityRecheckPendingError`) instead of reporting success. The failing state could not be
|
|
34
|
+
reproduced live for this fix, because the one measured account was already cleared by hand. The
|
|
35
|
+
detection is tested offline only.
|
|
36
|
+
|
|
37
|
+
**Workaround (needs the account password):** with no gflow command running, open real Chrome on
|
|
38
|
+
the profile directory yourself:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
"<chrome.exe>" --user-data-dir="<GFLOW_CLI_HOME profile dir, e.g. …/profile_<name>>" --password-store=basic https://flow.google.com/
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Click the landing page's main button, complete "Confirm it's you", wait for the Flow editor, then
|
|
45
|
+
close Chrome yourself. On the measured account, `/about` was gone on the next run and
|
|
46
|
+
`gflow project create` succeeded.
|
|
47
|
+
|
|
17
48
|
### Flow is migrating to `flow.google.com`; generation coverage is partial but includes images
|
|
18
49
|
|
|
19
|
-
- **Status:** Open (partially resolved) · **Severity:** High for unported forms · **Affected:** on accounts the rollout has reached, `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i` now run on the migrated host. Image mode supports Nano Banana 2 / Pro, all five aspect ratios its radiogroup renders (16:9, 4:3, 1:1, 3:4, 9:16 — 3:4 appeared by 2026-09-17, #864), and count 1–4. Image refs by UUID, `@Name` / `--reference-entity`, Agent instructions, Imagen 4, video frame refs by UUID/name, scenes, extend, instructions and tools are not ported yet and fail before submit. **`character` is NOT in that list any more** —
|
|
50
|
+
- **Status:** Open (partially resolved) · **Severity:** High for unported forms · **Affected:** on accounts the rollout has reached, `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i` now run on the migrated host. Image mode supports Nano Banana 2 / 2 Lite / Pro, all five aspect ratios its radiogroup renders (16:9, 4:3, 1:1, 3:4, 9:16 — 3:4 appeared by 2026-09-17, #864), and count 1–4. Image refs by UUID, `@Name` / `--reference-entity`, Agent instructions, Imagen 4, video frame refs by UUID/name, scenes, extend, instructions and tools are not ported yet and fail before submit. **`character create` is NOT in that list any more** — it works on the migrated host. `character list` does NOT: it reads the retired labs `projectInitialData` route and exits 7, measured 2026-09-20 both on `auto` and with `GFLOW_CLI_FLOW_HOST=flow.google.com` (#875). Of the remainder, only the i2v-by-UUID case rests on a positive observation of absence (the Frames picker tiles carry no media id); `scenes`, `extend`, `instructions` and `tools` remain *unported by gflow*, never proven impossible on the host.
|
|
20
51
|
- **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
|
|
21
52
|
- **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
|
|
22
53
|
- **`--reference-entity` was refused on `r2v` but not on `t2v`** ([#716](https://github.com/ffroliva/gflow-cli/issues/716), fixed in v0.71.0): the "not ported, exit 36" refusal above sat inside the r2v branch of the routing gate, so a `t2v` request carrying a character entity returned from that gate without its entities ever being inspected — and nothing downstream attaches one on this host. The generation was **submitted and billed** with the entity silently dropped, returning a plausible clip of the wrong person. The check is now mode-independent and ahead of every early return. If you ran `gflow video t2v @Name …` or `--reference-entity` on a moved account before this fix, the identity in those clips was never bound.
|
|
23
54
|
- **The migrated composer image path is now driven** ([#692](https://github.com/ffroliva/gflow-cli/issues/692)): the first probe established a hit-testable Image mode; the 2026-09-08 follow-up captured real T2I and local-file I2I submissions on `ogiZ0b`, including page-owned reCAPTCHA, upload ids, response records and signed JPEG downloads. See [the submit-wire spike](docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md).
|
|
24
|
-
- **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in v0.69.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint. If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
|
|
55
|
+
- **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in v0.69.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint; since v0.80.0 the browser transport no longer mints for images at all, and the flow.google.com composer itself refuses unported forms (#891). If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
|
|
56
|
+
- **A second image request on one client hit the same `RecaptchaError`** ([#891](https://github.com/ffroliva/gflow-cli/issues/891), fixed in v0.80.0): after a successful image on an account served flow.google.com, the page is parked on `about:blank`, and the client's pre-mint ran there, so an unported form (e.g. `--model imagen4`) failed with "the Flow editor page may have failed to load" instead of exit 36. The browser transport never used that token, so it no longer mints; the composer refuses the form by name. Reachable from `gflow run --config` with a per-prompt `"model": "imagen4"` after a successful prompt, where it also crashed the whole run (exit 1, results table lost); it now reports that prompt as exit 36 and the run completes.
|
|
25
57
|
|
|
26
58
|
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
27
59
|
`https://labs.google/fx/tools/flow/project/<id>` redirects to
|
|
@@ -935,6 +967,11 @@ find "$HOME/Downloads/gflow-cli" -type f -mtime +30 -delete
|
|
|
935
967
|
- **Status:** Open · **Severity:** High (blocks affected profile until WAF score decays or profile is replaced)
|
|
936
968
|
- **First observed:** 2026-05-23 on profile `denon82` during `gflow image batch` runs
|
|
937
969
|
- **Surfaces as:** `gflow_cli.errors.WafRejectionError: WAF rejection (HTTP 403): batchGenerateImages HTTP 403 — reCAPTCHA score too low or WAF fingerprint mismatch`
|
|
970
|
+
- **On flow.google.com** (measured 2026-09-27): the same reason arrives as HTTP 200 with a
|
|
971
|
+
`batchexecute` error envelope (`[7,null,[["type.googleapis.com/google.rpc.ErrorInfo",["PUBLIC_ERROR_UNUSUAL_ACTIVITY"]]]]`)
|
|
972
|
+
and surfaces as `WafRejectionError: … Flow refused the submit: PUBLIC_ERROR_UNUSUAL_ACTIVITY`.
|
|
973
|
+
Flow's grid shows *"We noticed some unusual activity… You have not been charged"*
|
|
974
|
+
([spike](docs/superpowers/spikes/2026-09-27-migrated-refusal-is-on-the-wire.md)).
|
|
938
975
|
- **structlog signature:** `ui_automation.batch_response_seen` with `status=403` followed by `ui_automation.batch_403_body` containing `'message': 'reCAPTCHA evaluation failed', 'status': 'PERMISSION_DENIED', 'reason': 'PUBLIC_ERROR_UNUSUAL_ACTIVITY'`
|
|
939
976
|
|
|
940
977
|
Distinct from the historical `aisandbox-pa` 401 (resolved in v0.7.0). The 403
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.80.0
|
|
4
4
|
Summary: CLI and MCP server for Google Flow — drive Veo text-to-video, image-to-video and Imagen image generation from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Documentation, https://ffroliva.github.io/gflow-cli/
|
|
@@ -73,8 +73,9 @@ Requires-Dist: av>=12; extra == 'dev'
|
|
|
73
73
|
Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
74
74
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
75
75
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
76
|
+
Requires-Dist: pytest-xdist>=3.6; extra == 'dev'
|
|
76
77
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
77
|
-
Requires-Dist: ruff==0.16.
|
|
78
|
+
Requires-Dist: ruff==0.16.9; extra == 'dev'
|
|
78
79
|
Provides-Extra: gcs
|
|
79
80
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
80
81
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -45,7 +45,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
45
45
|
# Deliberately NOT pinned: google-chrome-stable. Chrome's apt repo keeps only the current
|
|
46
46
|
# build, so a pinned version stops resolving within weeks. The trade-off is that this
|
|
47
47
|
# layer caches indefinitely and a rebuild is what picks up a newer Chrome.
|
|
48
|
-
ARG GFLOW_VERSION=0.
|
|
48
|
+
ARG GFLOW_VERSION=0.80.0
|
|
49
49
|
RUN pip install --no-cache-dir "gflow-cli==${GFLOW_VERSION}"
|
|
50
50
|
|
|
51
51
|
VOLUME ["/data"]
|
|
@@ -365,7 +365,7 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
|
|
|
365
365
|
- `flow.google.com` — force the migrated composer for everything, including what it cannot serve yet (those requests then exit 36/11 instead of falling back).
|
|
366
366
|
- `labs.google` — never use the migrated composer; where Flow serves `flow.google.com`, requests fail with exit 36 (kill switch).
|
|
367
367
|
**Default:** `auto`
|
|
368
|
-
**Scope today:** the migrated composer covers `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i`. Images support Nano Banana 2 / Pro, all five aspect ratios (16:9, 4:3, 1:1, 3:4, 9:16 — `3:4` was added to that host's radiogroup by 2026-09-17, #864) and count 1–4; the page owns the `ogiZ0b` reCAPTCHA + submit and the response already contains completed signed image URLs. Local-file start+end frames (`--initial-frame` + `--end-frame`) are ported (#639). Frames or references given by UUID/`@Name`, character entities, Agent instructions, Imagen 4, scenes, extend, instructions and tools are not ported yet and fail before submit where Flow serves flow.google.com. MCP uses the same image service and queue payload, and inherits this setting from the server/daemon environment rather than per call.
|
|
368
|
+
**Scope today:** the migrated composer covers `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i`. Images support Nano Banana 2 / 2 Lite / Pro, all five aspect ratios (16:9, 4:3, 1:1, 3:4, 9:16 — `3:4` was added to that host's radiogroup by 2026-09-17, #864) and count 1–4; the page owns the `ogiZ0b` reCAPTCHA + submit and the response already contains completed signed image URLs. Local-file start+end frames (`--initial-frame` + `--end-frame`) are ported (#639). Frames or references given by UUID/`@Name`, character entities, Agent instructions, Imagen 4, scenes, extend, instructions and tools are not ported yet and fail before submit where Flow serves flow.google.com. MCP uses the same image service and queue payload, and inherits this setting from the server/daemon environment rather than per call.
|
|
369
369
|
|
|
370
370
|
### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
|
|
371
371
|
|
|
@@ -206,6 +206,11 @@ async worker (which mirrors its `generation_queue.error_json` failure into
|
|
|
206
206
|
`count>1` request fires the callback per output — no sibling row is
|
|
207
207
|
stranded); failures before `on_started`, and all image failures, INSERT a
|
|
208
208
|
fresh row with full request metadata.
|
|
209
|
+
- A download whose connection drops on every retry AFTER Flow reported the clip done
|
|
210
|
+
(`MediaDownloadError`, exit 6, `error_type=media-download`, #896) also marks that
|
|
211
|
+
clip's asset `MEDIA_GENERATION_STATUS_SUCCESSFUL`: the operation failed, the
|
|
212
|
+
generation did not, and `gflow data download <media_id>` recovers it for free. An
|
|
213
|
+
HTTP error answer on the signed URL (e.g. an expired link) still leaves it `pending`.
|
|
209
214
|
- A poll that COMPLETES with a Flow-reported failure (`succeeded=false`) is
|
|
210
215
|
recorded as `failed` with `error_type=generation-failed` and the
|
|
211
216
|
`failure_reasons` as detail — not as a success.
|
|
@@ -334,6 +339,10 @@ By default, `images` and `videos` aggregate rows by Flow media ID. If an asset
|
|
|
334
339
|
has multiple local copies (e.g. re-downloaded to different paths), they appear
|
|
335
340
|
as a single row with a `COPIES` count and the path of the latest copy.
|
|
336
341
|
|
|
342
|
+
`videos` also shows the asset `STATUS` (`status` in `--json`): `pending` until Flow
|
|
343
|
+
reports the clip done, then `MEDIA_GENERATION_STATUS_SUCCESSFUL` — including when only
|
|
344
|
+
the download failed (#896). Images are recorded `ready`.
|
|
345
|
+
|
|
337
346
|
TTY stdout → Rich table; pipe or `--json` → JSONL. Default sort: newest first. Exit code 16 on data-store errors (same `DataStoreError` family as `gflow data media`). A **missing or freshly-created** DB is NOT a data-store error — `data list` auto-creates the schema via `DataStore.open()` and returns exit 0 with an empty result (see [#88](https://github.com/ffroliva/gflow-cli/issues/88)).
|
|
338
347
|
|
|
339
348
|
> **`data list profiles` vs `gflow auth list`:** `data list profiles` shows profiles that have **recorded generations** in the catalog; `gflow auth list` shows profiles that have ever **logged in** via `gflow auth login`. A profile that logged in but never generated anything will appear in `auth list` but not in `data list profiles`.
|
|
@@ -535,9 +544,10 @@ See [`errors.py::EXIT_CODE_MAP`](../src/gflow_cli/errors.py) for the complete ex
|
|
|
535
544
|
Distinct from the above (which are errors OF the data layer), the
|
|
536
545
|
`operations.error_type` column stores the taxonomy of RECORDED generation
|
|
537
546
|
failures — the last segment of each exception's `problem_type` URI. Common
|
|
538
|
-
values: `waf-rejection` (HTTP 403
|
|
547
|
+
values: `waf-rejection` (reCAPTCHA/WAF refusal — labs HTTP 403, or a flow.google.com `PUBLIC_ERROR_UNUSUAL_ACTIVITY` envelope), `content-policy`, `auth-expired`,
|
|
539
548
|
`transport-timeout`, `wire-format`, `rate-limit`, `ui-mode-unavailable`
|
|
540
|
-
(cohort pin), `media-attribution
|
|
549
|
+
(cohort pin), `media-attribution`, `media-download` (the clip was generated; only
|
|
550
|
+
the transfer failed — recover it with `gflow data download`). Query them with `gflow data list errors`.
|
|
541
551
|
|
|
542
552
|
---
|
|
543
553
|
|
|
@@ -257,8 +257,9 @@ First visible-and-clickable wins. Log:
|
|
|
257
257
|
| `AuthExpiredError` | 3 | Session cookies no longer valid | `gflow auth login --profile <name>` |
|
|
258
258
|
| `AuthBrowserRejectedError` | 14 | Google's sign-in rejected the browser for advertising automation; only the `internal` strategy surfaces it | Re-run `gflow auth login` (default `auto` picks the `chrome` strategy, which retries on a no-automation path) |
|
|
259
259
|
| `AuthLoginTimeoutError` | 12 | User did not finish the OAuth flow in time | Run `gflow auth login` again; raise `GFLOW_CLI_AUTH_LOGIN_TIMEOUT` |
|
|
260
|
+
| `IdentityRecheckPendingError` | 12 | Login ended while Flow was still sending the account to `/about` because Google wants it to "Confirm it's you" (#902) | Run `gflow auth login` again, press the page's main button, and finish Google's check until the Flow app loads |
|
|
260
261
|
| `TransportTimeoutError` | 9 | A single API call exceeded its timeout | Retry; check Flow status |
|
|
261
|
-
| `WafRejectionError` | 10 | reCAPTCHA / WAF blocked the request | Wait
|
|
262
|
+
| `WafRejectionError` | 10 | reCAPTCHA / WAF blocked the request (`PUBLIC_ERROR_UNUSUAL_ACTIVITY`) | Stop on that profile — each rejected request can raise its score. Wait hours or switch profile; see [ACCOUNT_SAFETY § When Google does push back](ACCOUNT_SAFETY.md#when-google-does-push-back) |
|
|
262
263
|
|
|
263
264
|
For health probes from a worker process, use
|
|
264
265
|
`FlowApiClient.health_check()` — it returns `bool` and never raises.
|
|
@@ -155,6 +155,7 @@ test, not a mocked proxy — the Bug Lane's step 5.
|
|
|
155
155
|
| `GFLOW_CLI_E2E_VIDEO_ASPECT` | `"landscape"` | Aspect ratio for video e2e: `landscape` or `portrait`. |
|
|
156
156
|
| `GFLOW_CLI_E2E_VIDEO_MODEL` | `"omni-flash"` | Veo model for i2v tests: `omni-flash` or `veo-fast`. |
|
|
157
157
|
| `GFLOW_CLI_E2E_VIDEO_DURATION` | `"4"` | Seconds of video to generate in i2v tests (minimum credit unit). |
|
|
158
|
+
| `GFLOW_CLI_E2E_RUN_REFUSAL` | `"0"` | Set to `"1"` to run the migrated refusal e2e (`e2e_image`): one image submit goes out with its reCAPTCHA token corrupted so Flow refuses it, proving the refusal is reported as `WafRejectionError`. Zero credits, but a refused token can raise the profile's WAF score for hours, so run it **alone** and on a probe profile, never before other image tests in the same session. |
|
|
158
159
|
| `GFLOW_CLI_E2E_RUN_ENTITY_PROV` | `"0"` | Set to `"1"` to run the entity-provenance e2e (#402) — asserts a generation Flow actually accepted records its `entity_ids` / `entity_names` in `operations.metadata_json`. Opt-in because it drives a real browser generation (no credit cost — images are free). |
|
|
159
160
|
| `GFLOW_CLI_E2E_BATCH_MANIFEST` | `test_assets/sample_batch.tsv` | TSV manifest for the batch image e2e. |
|
|
160
161
|
| `GFLOW_CLI_E2E_BATCH_JITTER` | `"1"` | Set to `"0"` to disable inter-request jitter in batch tests. |
|
|
@@ -402,9 +403,60 @@ tests/
|
|
|
402
403
|
├── test_image_batch_e2e.py # [e2e, e2e_batch]
|
|
403
404
|
├── test_video_t2v_e2e.py # [e2e, e2e_video]
|
|
404
405
|
├── test_incident_quality_e2e.py # [e2e, e2e_auth] incident-bundle quality benchmark — 0 credits
|
|
406
|
+
├── test_retired_labs_route_diagnosis_e2e.py # [e2e, e2e_auth] #875 — 0 credits, no project fixture
|
|
405
407
|
└── test_data_layer_e2e.py # [e2e, e2e_{image,video,data}]
|
|
406
408
|
```
|
|
407
409
|
|
|
410
|
+
### When an account cannot reach Flow at all (`/about`)
|
|
411
|
+
|
|
412
|
+
`tests/e2e/conftest.py` carries a `pytest_runtest_makereport` hook that reports an
|
|
413
|
+
e2e failure as a **SKIP** when it was caused by Flow serving its public `/about`
|
|
414
|
+
landing. That is a missing precondition — the account cannot reach Flow, so no
|
|
415
|
+
browser-driving test can exercise anything — and it is *account-scoped*, not a
|
|
416
|
+
product failure. Measured 2026-09-20: `gflow project create` succeeded on two
|
|
417
|
+
profiles and failed only on the canary's in the same minute (#888).
|
|
418
|
+
|
|
419
|
+
It is a hook rather than a decorator because the affected tests fail in three
|
|
420
|
+
different shapes — a subprocess exit code, an in-process raise, and an MCP result
|
|
421
|
+
dict — and `skip_on_migrated_host` can only catch the second.
|
|
422
|
+
|
|
423
|
+
Two constraints keep it from becoming a way to hide regressions:
|
|
424
|
+
|
|
425
|
+
- **It matches a marker we emit ourselves**, from `raise_if_known_landing`, never
|
|
426
|
+
anything Flow says. `tests/test_about_landing_guard.py` asserts that marker
|
|
427
|
+
against the real raise site and lives *outside* `tests/e2e/` on purpose — the
|
|
428
|
+
root conftest auto-marks that directory `e2e`, so a tripwire placed beside the
|
|
429
|
+
guard would be deselected in ordinary CI, which is exactly when it must fire.
|
|
430
|
+
- **It covers the `public` landing kind only.** It deliberately does not catch
|
|
431
|
+
`AuthExpiredError` from the `signin` kind: two transports tests fail that way and
|
|
432
|
+
are left red, because silencing them would suppress the signal an e2e exists to
|
|
433
|
+
raise.
|
|
434
|
+
|
|
435
|
+
### Diagnosing a surface Flow has retired
|
|
436
|
+
|
|
437
|
+
`test_retired_labs_route_diagnosis_e2e.py` (marker `e2e_auth`, **0 credits**,
|
|
438
|
+
one read-only GET) guards what gflow *says* when a labs tRPC route answers
|
|
439
|
+
`404 "Flow RPCs have been deprecated and disabled"` — that it names the retired
|
|
440
|
+
route instead of telling the user to check a payload that is fine, simplify a
|
|
441
|
+
prompt that does not exist, or file a bug for a condition Flow documents in the
|
|
442
|
+
body being classified (#875).
|
|
443
|
+
|
|
444
|
+
It is the rare case where the offline test genuinely cannot substitute. The unit
|
|
445
|
+
tests in `tests/api/test_client_errors.py` feed the classifier a *captured* body;
|
|
446
|
+
they stay green if Flow changes the wording, un-retires the route, or switches to
|
|
447
|
+
401, while the user-facing diagnosis silently goes wrong again.
|
|
448
|
+
|
|
449
|
+
Two deliberate choices make it runnable on any profile in the nightly canary:
|
|
450
|
+
|
|
451
|
+
- **No project fixture.** The route is retired before any project lookup, so the
|
|
452
|
+
diagnosis is project-independent and a syntactically valid id suffices.
|
|
453
|
+
- **It skips rather than passes** when the account is still served the labs tRPC
|
|
454
|
+
API, because a silent green would let a cohort change retire the test without
|
|
455
|
+
anyone noticing — the `skip_on_migrated_host` failure mode in reverse.
|
|
456
|
+
|
|
457
|
+
Verified by falsification on 2026-09-20: with detection disabled it fails with
|
|
458
|
+
the pre-fix message verbatim, so it is a guard rather than a test that can only pass.
|
|
459
|
+
|
|
408
460
|
### Incident-bundle quality benchmark
|
|
409
461
|
|
|
410
462
|
`test_incident_quality_e2e.py` (marker `e2e_auth`, **0 credits**) is not a
|