gflow-cli 0.71.1__tar.gz → 0.73.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.71.1 → gflow_cli-0.73.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.env.template +3 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/AGENTS.md +13 -6
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/CHANGELOG.md +268 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/KNOWN_ISSUES.md +102 -16
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/PKG-INFO +3 -3
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/README.md +2 -2
- {gflow_cli-0.71.1/website → gflow_cli-0.73.0}/docs/ARCHITECTURE.md +7 -7
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/AUTHENTICATION.md +40 -8
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/CHARACTER_RECON.md +3 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.71.1/website → gflow_cli-0.73.0}/docs/DEBUGGING.md +15 -6
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/E2E_TESTING.md +69 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/INDEX.md +4 -2
- gflow_cli-0.73.0/docs/LIVE_VERIFICATION_v0.72.0.md +217 -0
- gflow_cli-0.73.0/docs/LIVE_VERIFICATION_v0.73.0.md +144 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/MCP.md +7 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/PROJECT_STATUS.md +101 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/SECURITY.md +12 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/USAGE.md +22 -6
- {gflow_cli-0.71.1/website → gflow_cli-0.73.0}/docs/USER_GUIDE.md +10 -4
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/medium_tutorial.md +3 -3
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +20 -6
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +29 -0
- gflow_cli-0.73.0/docs/superpowers/memory/real-browser-auth-mandatory.md +32 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +39 -0
- gflow_cli-0.73.0/docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md +131 -0
- gflow_cli-0.73.0/docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md +64 -0
- gflow_cli-0.73.0/docs/superpowers/spikes/2026-09-10-about-redirect-stability.md +68 -0
- gflow_cli-0.73.0/docs/superpowers/spikes/2026-09-10-migrated-click-blocked.md +132 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/llms.txt +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/pyproject.toml +1 -1
- gflow_cli-0.73.0/scripts/dev/spike_about_redirect_stability.py +144 -0
- gflow_cli-0.73.0/scripts/dev/spike_migrated_click_blocked.py +376 -0
- gflow_cli-0.73.0/scripts/dev/spike_migrated_image_submit.py +282 -0
- gflow_cli-0.73.0/scripts/dev/spike_playwright_chrome_login.py +272 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/gflow-cli/SKILL.md +5 -1
- gflow_cli-0.73.0/skills/issue-resolve/SKILL.md +265 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/scenario/SKILL.md +21 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/spike/SKILL.md +40 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/SKILL.md +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/failure-modes.md +2 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/client.py +155 -41
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/_common.py +182 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/batchexecute.py +103 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/migrated_composer.py +494 -22
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/ui_automation.py +86 -4
- gflow_cli-0.73.0/src/gflow_cli/auth/internal_chromium.py +319 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/real_chrome.py +205 -37
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/browser_manager.py +16 -14
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli.py +29 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/config.py +3 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/redaction.py +33 -11
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/diagnostics.py +7 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/errors.py +92 -18
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/tools.py +2 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/profile_store.py +19 -5
- gflow_cli-0.73.0/tests/api/test_bootstrap_chooser.py +312 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_locale_cache.py +34 -0
- gflow_cli-0.73.0/tests/api/transports/test_click_attribution.py +274 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_common.py +96 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_migrated_composer.py +313 -4
- gflow_cli-0.73.0/tests/api/transports/test_migrated_images.py +361 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/auth/strategies/test_strategies.py +286 -5
- gflow_cli-0.73.0/tests/auth/test_account_autoselect.py +192 -0
- gflow_cli-0.73.0/tests/auth/test_real_chrome.py +744 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_error_handling.py +19 -4
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/conftest.py +35 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_redaction.py +24 -1
- gflow_cli-0.73.0/tests/e2e/test_account_chooser_e2e.py +297 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_auth_verification_e2e.py +24 -0
- gflow_cli-0.73.0/tests/e2e/test_click_attribution_bdd.py +263 -0
- gflow_cli-0.73.0/tests/e2e/test_landing_state_diagnosis_bdd.py +208 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_migrated_host_e2e.py +42 -27
- gflow_cli-0.73.0/tests/features/click_attribution.feature +71 -0
- gflow_cli-0.73.0/tests/features/landing_state_diagnosis.feature +37 -0
- gflow_cli-0.73.0/tests/features/migrated_host_images.feature +21 -0
- gflow_cli-0.73.0/tests/features/test_e2e_binding_guard.py +161 -0
- gflow_cli-0.73.0/tests/features/test_migrated_host_images_steps.py +157 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_browser_manager.py +49 -13
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_config.py +12 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_recorder.py +10 -0
- gflow_cli-0.73.0/tests/test_errors_classification.py +279 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_marker_registry.py +50 -3
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_daemon.py +73 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/uv.lock +20 -10
- {gflow_cli-0.71.1 → gflow_cli-0.73.0/website}/docs/ARCHITECTURE.md +7 -7
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/AUTHENTICATION.md +40 -8
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.71.1 → gflow_cli-0.73.0/website}/docs/DEBUGGING.md +15 -6
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/E2E_TESTING.md +69 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/KNOWN_ISSUES.md +102 -16
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/MCP.md +7 -1
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/SECURITY.md +12 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/USAGE.md +22 -6
- {gflow_cli-0.71.1 → gflow_cli-0.73.0/website}/docs/USER_GUIDE.md +10 -4
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/onboarding-mockup.html +4 -4
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/onboarding.md +3 -3
- gflow_cli-0.71.1/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -10
- gflow_cli-0.71.1/skills/issue-resolve/SKILL.md +0 -136
- gflow_cli-0.71.1/src/gflow_cli/auth/internal_chromium.py +0 -185
- gflow_cli-0.71.1/tests/auth/test_real_chrome.py +0 -145
- gflow_cli-0.71.1/tests/test_errors_classification.py +0 -158
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/spike.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.gitattributes +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.gitignore +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/.secrets.baseline +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/CLAUDE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/LICENSE +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/RELEASE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/ROADMAP.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docker-compose.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.71.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.71.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/ligature-carrier-differs-by-host.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/release-signing.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-08-migrated-composer-agent-mode-hides-settings.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-08-migrated-queue-is-readable-on-zzl0ze.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/docs/superpowers/spikes/2026-09-08-migrated-upload-fails-two-ways.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/index.html +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_council_memory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/acceptance/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/acceptance/bench.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/acceptance/domain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/acceptance/judge.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/acceptance/settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/measure_html_lang_settle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_cdp_har_without_node.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_character_editor_ready_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_entity_submit_rpcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_format_prompt_effect.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_host_lane.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_ligature_carrier_sweep.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_composer_arms.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_composer_mode_axis.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_entity_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_image_capability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_picker_option_kind.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_queue_read.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_submit_anchor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_upload_wire.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_project_media_status.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/clip_qa.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/composition.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/consistency.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/skills/video-production/tasks.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/sonar-project.properties +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_update.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_character_readback_fallback.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_migrated_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_credits_http.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_batchexecute.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_character_model_picker.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ligature_carrier.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_migrated_dispatch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_migrated_r2v.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_migrated_route.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_new_project_cta_migrated.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_run_with_handlers_context_leak.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_character_mcp_parity_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_credits_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_e2e_env_isolation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_insufficient_credits_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/credits.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/latched_locale_recovery.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/migrated_driver.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/migrated_host_gate.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/migrated_i2v.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_credits_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_migrated_driver_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_migrated_i2v_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_character_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_credits_tool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_council_memory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_extract_har_summary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_frame_acceptance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_skillopt_scoring.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_spike_page_pool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_spike_profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_cli_update.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_media.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/index.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/requirements.in +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.73.0}/website/requirements.txt +0 -0
|
@@ -183,8 +183,9 @@
|
|
|
183
183
|
# GFLOW_CLI_UI_MODE=auto
|
|
184
184
|
|
|
185
185
|
# Which Flow frontend gflow drives (#639). auto (default): flow.google.com is the
|
|
186
|
-
# default host for what it can serve today (video t2v
|
|
187
|
-
# --initial-frame
|
|
186
|
+
# default host for what it can serve today (video t2v; video i2v from a local
|
|
187
|
+
# --initial-frame; video r2v from local --ref files; image t2i; and image i2i from
|
|
188
|
+
# local files — all with --project) on every
|
|
188
189
|
# account; requests it cannot serve yet keep the labs driver on an unmoved
|
|
189
190
|
# account, and a moved account gets the migrated composer for everything ported.
|
|
190
191
|
# flow.google.com: force the migrated composer for everything.
|
|
@@ -16,6 +16,8 @@ that did not run.
|
|
|
16
16
|
|---|---|---|
|
|
17
17
|
| Claim a Flow surface is broken, missing, or impossible | `/gflow:spike <question>` | A selector that misses is evidence about the SELECTOR; "labs-only, ever" came from one 20 s timeout and cost a day |
|
|
18
18
|
| Touch a GitHub issue | `/gflow:issue-assessment <N>` | Read-only triage precedes any fix; classification changes what "fixing" means |
|
|
19
|
+
| Explain a symptom, or fix a bug whose cause is not yet proven | The **Bug Lane** — [`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) | The issue names a symptom; the cause is usually a caller above it. Skipping to the fix patches one path and leaves its siblings broken |
|
|
20
|
+
| Write the test for a scenario that can only happen in a browser | [`docs/E2E_TESTING.md`](docs/E2E_TESTING.md) § BDD-bound e2e | A mocked page asserts *our* code; the bug was that Flow did something else. The Gherkin tag is what makes it an e2e test |
|
|
19
21
|
| Propose a transport, auth, selector, or schema change | `/gflow:predict <proposal>` | Five adversarial personas return GO / CAUTION / STOP before code exists |
|
|
20
22
|
| Start a feature | `/gflow:scenario` → `/gflow:plan` | Edge cases before tasks; tasks before code |
|
|
21
23
|
| Resume work / ask "where are we?" | `/gflow:status` | The current plan's next unchecked task is the answer, not your guess |
|
|
@@ -42,7 +44,7 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
42
44
|
|
|
43
45
|
## Project at a glance
|
|
44
46
|
|
|
45
|
-
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com` — 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`,
|
|
47
|
+
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com` — 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`).
|
|
46
48
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
47
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`.
|
|
48
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 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).
|
|
@@ -50,7 +52,7 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
50
52
|
|
|
51
53
|
## Headed-browser dependency (architectural reality)
|
|
52
54
|
|
|
53
|
-
gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects
|
|
55
|
+
gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects browsers that advertise automation, and most headless approaches. This is the project's defining trade-off:
|
|
54
56
|
|
|
55
57
|
- ✅ Works end-to-end against live Google accounts.
|
|
56
58
|
- ❌ Requires a saved Chrome profile, a display server for one-time login, and ~150 MB for Chromium.
|
|
@@ -106,7 +108,7 @@ the five other mirror axes), which no command here can check and no CI gate can
|
|
|
106
108
|
|
|
107
109
|
- Type hints everywhere; `pyright` strict on `src/gflow_cli`.
|
|
108
110
|
- Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
|
|
109
|
-
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–
|
|
111
|
+
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–38, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`, 37 `InsufficientCreditsError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
|
|
110
112
|
- 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
|
|
111
113
|
- **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
|
|
112
114
|
- **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
|
|
@@ -159,7 +161,10 @@ captured, and it cannot prove the surface an agent or a user actually calls is w
|
|
|
159
161
|
the code under test. Everything not exercised is unknown, and unknown ships as a bug.
|
|
160
162
|
|
|
161
163
|
If no e2e test covers the change, **write one** — that is part of the change, not
|
|
162
|
-
follow-up work.
|
|
164
|
+
follow-up work. For a bug, the lane that gets you there — spike → debug → BDD → TDD →
|
|
165
|
+
fix → e2e, and which steps a given bug may skip — is
|
|
166
|
+
[`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) § The Bug Lane. It is
|
|
167
|
+
written once, there; this section states the law, that one states the route.
|
|
163
168
|
|
|
164
169
|
**The only permitted exception is a named external blocker** you cannot remove: an
|
|
165
170
|
exhausted API quota, hardware you do not have, an account you do not control, a cohort
|
|
@@ -235,8 +240,9 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
|
|
|
235
240
|
|---|---|---|---|
|
|
236
241
|
| 0. Spike | `/gflow:spike <question>` | Evidence from the live surface (DOM / network / HAR) whenever a claim of absence is in play | `scripts/dev/spike_*.py` + `docs/superpowers/spikes/<date>-<slug>.md` |
|
|
237
242
|
| 1. Triage | `/gflow:issue-assessment <N>` | Read-only issue analysis & root cause hypothesis | `issue_assessment_<N>.md` |
|
|
243
|
+
| 1b. Root cause | `superpowers:systematic-debugging` (the **Bug Lane**, [`skills/issue-resolve`](skills/issue-resolve/SKILL.md)) | Turn the triage *hypothesis* into a proven cause at `<file>:<line>`, then grep every caller so the fix lands at the root | Root cause + the callers it covers |
|
|
238
244
|
| 2. Pre-Implementation | `/gflow:predict <proposal>` | Adversarial audit (D14 YAGNI, security, risks) | GO / CAUTION / STOP verdict |
|
|
239
|
-
| 3. BDD Scaffolding | `/gflow:scenario <feature>` | Edge-case explorer & BDD Gherkin spec | `Scenario:` blocks
|
|
245
|
+
| 3. BDD Scaffolding | `/gflow:scenario <feature>` | Edge-case explorer & BDD Gherkin spec | `Scenario:` blocks + the binding its **surface** dictates: a browser-only scenario is tagged `@e2e @e2e_<tier>` and bound from `tests/e2e/`, everything else stays offline in `tests/features/` |
|
|
240
246
|
| 4. Implementation Plan | `/gflow:plan <feature>` | Task-by-task atomic implementation plan | `docs/superpowers/plans/<date>-<slug>/PLAN.md` |
|
|
241
247
|
| 5. Council Review | `/gflow:pr-council-review` / `llm-council` | Multi-dimensional audit across 6 core dimensions | Consensus verdict report |
|
|
242
248
|
| 6. Task Execution | `/gflow:status` | Track unchecked tasks during TDD execution | Next unchecked task |
|
|
@@ -251,7 +257,8 @@ Every AI agent executing any phase of this pipeline MUST proactively state the c
|
|
|
251
257
|
|
|
252
258
|
| Current Phase | Completed Artifact / Gate | Next Sequential Phase & Command |
|
|
253
259
|
|---|---|---|
|
|
254
|
-
| Phase 1: Triage | `issue_assessment_<N>.md` | ➔ Phase
|
|
260
|
+
| Phase 1: Triage | `issue_assessment_<N>.md` | ➔ Phase 1b: Root cause (`superpowers:systematic-debugging`) — skip only when the cause is already proven, and say so |
|
|
261
|
+
| Phase 1b: Root cause | Proven cause at `<file>:<line>` + its callers | ➔ Phase 2 (`/gflow:predict`) **if the fix touches a transport, auth, selectors or a schema** — a proven cause does not make the remedy safe; otherwise straight to Phase 3: BDD Scaffolding (`/gflow:scenario`), written at the **root**, not the symptom |
|
|
255
262
|
| Phase 2: Pre-Implementation | Verdict `GO` or `CAUTION` | ➔ Phase 3: BDD Scaffolding (`/gflow:scenario <feature>`) |
|
|
256
263
|
| Phase 3: BDD Scaffolding | `Scenario:` blocks & test scaffold | ➔ Phase 4: Implementation Plan (`/gflow:plan <feature>`) |
|
|
257
264
|
| Phase 4: Implementation Plan | `PLAN.md` created & approved | ➔ Phase 6: Task Execution (`/gflow:status`) |
|
|
@@ -7,6 +7,271 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.73.0] — 2026-09-10
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- **Google auth URLs no longer reach user-facing error messages with their query
|
|
15
|
+
intact.** `client._handle_account_chooser`'s three raise sites interpolated
|
|
16
|
+
`page.url` verbatim, and Google's auth URLs carry `state`, `code_challenge`,
|
|
17
|
+
`client_id` and challenge tokens (`TL=…`). That text is the artifact users are
|
|
18
|
+
asked to paste into a GitHub issue.
|
|
19
|
+
- **Measured, not theorised:** a real `gflow image t2i --profile <name>` on
|
|
20
|
+
2026-09-10 exited 38 and printed
|
|
21
|
+
`accounts.google.com/v3/signin/challenge/pwd?TL=ACv9tzFkh8ZJ…` along with the
|
|
22
|
+
OAuth `state` and `client_id`. Re-running the identical command after the fix:
|
|
23
|
+
same exit 38, same landing named, **zero** secret matches.
|
|
24
|
+
- New `safe_page_url()` in `api/transports/_common.py` keeps scheme+host+path and
|
|
25
|
+
drops query+fragment; all four raise sites (the three in `client.py` plus
|
|
26
|
+
`raise_if_known_landing`) route through it rather than stripping inline.
|
|
27
|
+
- The landing is still named — knowing *where* the session stopped is the whole
|
|
28
|
+
value of the message; only the credentials are gone.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- **A click that never lands now says what was true instead of nothing at all**
|
|
32
|
+
([#776](https://github.com/ffroliva/gflow-cli/issues/776)). On `flow.google.com`,
|
|
33
|
+
`video r2v` reached `migrated.editor_ready` and died 5.039 s later as a bare
|
|
34
|
+
Playwright `TimeoutError` — exit 1, no locator, no cause, no MP4. By elimination that
|
|
35
|
+
is `migrated_composer.py`'s `trigger.click(timeout=5000)`: the `wait_for(visible)` one
|
|
36
|
+
line above it is guarded and would have raised exit 23, so the control was *visible*
|
|
37
|
+
and the *click* expired. [#752](https://github.com/ffroliva/gflow-cli/issues/752)
|
|
38
|
+
finding #7 predicted exactly this, at exactly this function, before #776 was filed —
|
|
39
|
+
its `count()`→visibility half was fixed and the click half was not, leaving a comment
|
|
40
|
+
that describes the failure the next line went on producing.
|
|
41
|
+
- **It reads; it does not diagnose.** Two causes were live and *neither could be
|
|
42
|
+
measured*: Flow's announcement overlay ([#593](https://github.com/ffroliva/gflow-cli/issues/593),
|
|
43
|
+
measured on labs.google, never on this host) and a mid-run agent-mode flip. A guard
|
|
44
|
+
built on either would answer confidently and be wrong half the time. So on a timeout
|
|
45
|
+
the driver reads Playwright's four actionability conditions back — agent chip,
|
|
46
|
+
`hidden`/`disabled`, body pointer-events, and a hit-test naming what is on top — and
|
|
47
|
+
reports the ones that fired. When every reading is healthy it **says so**, which
|
|
48
|
+
eliminates three conditions and leaves *stable*, rather than inventing a fourth.
|
|
49
|
+
- **Costs nothing when healthy** — the read runs only in the `except` branch, the rule
|
|
50
|
+
`raise_if_known_landing` already states: a guard ahead of the probe deletes the
|
|
51
|
+
evidence that would correct it.
|
|
52
|
+
- **MCP gains more than the CLI.** A non-`GFlowError` on the queued path shipped
|
|
53
|
+
`"detail": "sha256:…"` — a hash, not even the class name. The typed error routes it
|
|
54
|
+
to the Problem Details branch instead, so an agent now gets the locator and exit 23.
|
|
55
|
+
- Applied to four sites with a named reason each, not all nineteen: the reported one,
|
|
56
|
+
the composer click `_close_pane`'s own docstring records as failing this way, and
|
|
57
|
+
both submit sites, where a bare timeout left "did it submit?" unanswerable — the
|
|
58
|
+
video one spends Veo credits, the image one spends only daily quota.
|
|
59
|
+
- **The occluder report is a closed allowlist** — tag name plus at most three
|
|
60
|
+
framework-prefixed class tokens, never `aria-label`, `title`, `src` or `outerHTML`.
|
|
61
|
+
Typing the error moves the text from SHA-256-hashed telemetry to a message printed
|
|
62
|
+
raw, logged, and invited into a GitHub issue; a signed-in Flow page carries the
|
|
63
|
+
account email and signed media URLs on exactly the elements that occlude things.
|
|
64
|
+
- `retryable` is unchanged and **preserved, not measured** — the condition did not
|
|
65
|
+
reproduce, and a flag that moves as a side effect of retyping is a claim nobody made.
|
|
66
|
+
- **A known Flow landing page is no longer reported as selector drift**
|
|
67
|
+
([#756](https://github.com/ffroliva/gflow-cli/issues/756), and the 2026-09-10 RED
|
|
68
|
+
nightly canary). `flow_host_kind()` classifies the *origin*; `/about`,
|
|
69
|
+
`/project/<id>` and `/fx/api/auth/signin?error=Callback` all share one, so when a
|
|
70
|
+
readiness wait timed out it had nothing left to blame but its own anchor — sending
|
|
71
|
+
the operator to "check for a newer release, then file a bug" over a session state
|
|
72
|
+
no release changes. The fourth instance of one pattern (after #721 credits, #749
|
|
73
|
+
agent mode, and `FlowAppError`'s own crash page), so it is fixed once, shared:
|
|
74
|
+
- New `flow_landing_kind()` beside `flow_host_kind()` in `api/transports/_common.py`
|
|
75
|
+
names a known non-app landing (`"signin"` / `"public"` / `None`), and
|
|
76
|
+
`raise_if_known_landing()` converts the diagnosis at **three** raise sites — the
|
|
77
|
+
migrated readiness wait, the labs gallery sweep, and the labs prompt-box sweep,
|
|
78
|
+
where a bare `RuntimeError` was being SHA-256 hashed into "Unexpected error" with
|
|
79
|
+
the URL destroyed. Consulted **only inside an already-failed branch** — never ahead of a probe, which would delete the evidence
|
|
80
|
+
that corrects a wrong absence claim, and never as a new bounded wait after `goto`,
|
|
81
|
+
which reads the URL before Flow's client-side redirect lands
|
|
82
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639)).
|
|
83
|
+
- `flow.google.com/about` instead of the project → `FlowAppError` (exit 31), naming
|
|
84
|
+
the landing and the project it did not open. It deliberately does **not** say why:
|
|
85
|
+
#756 measured the redirect and not its cause, and `gflow auth status` reports the
|
|
86
|
+
session verified while it happens.
|
|
87
|
+
- `labs.google/fx/api/auth/signin?error=Callback` instead of the gallery →
|
|
88
|
+
`AuthExpiredError` (exit 3), remediation `gflow auth login`. This is the exact
|
|
89
|
+
page behind the 2026-09-10 RED canary, which reported
|
|
90
|
+
`Could not find 'New project' CTA`.
|
|
91
|
+
- `auth/internal_chromium.py` drops its private `_NEXTAUTH_ROUTE_PREFIX` and reuses
|
|
92
|
+
the shared classifier — the knowledge existed there since #767 and no transport
|
|
93
|
+
could reach it.
|
|
94
|
+
- `FlowAppError`'s docstring and `docs/USAGE.md`'s exit-code table now describe both
|
|
95
|
+
shapes; previously both stated the crash page as the only one. `docs/USAGE.md`'s
|
|
96
|
+
exit-3 row and `docs/MCP.md`'s retryable list are corrected to match, and
|
|
97
|
+
`docs/DEBUGGING.md` records that the sign-in landing is now capture-exempt —
|
|
98
|
+
deliberate (a bundle there would screenshot a Google auth surface into the artifact
|
|
99
|
+
users attach to issues), but a class swap switches capture off silently.
|
|
100
|
+
- The landing URL is stripped to scheme+host+path before it reaches the message or
|
|
101
|
+
the log: the NextAuth family includes `/fx/api/auth/callback/google?state=…&code=…`,
|
|
102
|
+
and this message is precisely what users paste into issues.
|
|
103
|
+
- `"public"` is scoped to the migrated host, the only one where `/about` was measured.
|
|
104
|
+
- **`accounts.google.com` is recognised too — found by live-verifying, not by
|
|
105
|
+
reasoning.** The first version returned `None` there on the grounds that "the
|
|
106
|
+
chooser has its own handler", which is true at bootstrap
|
|
107
|
+
(`client._handle_account_chooser`) and false for a hop that happens *after* it. A
|
|
108
|
+
live A/B on profile `denon82` (2026-09-10, $0) landed exactly there mid-run and
|
|
109
|
+
still produced `RuntimeError: Could not find 'New project' CTA` — with the OAuth
|
|
110
|
+
`state`, `code_challenge` and `client_id` interpolated into the message. It now
|
|
111
|
+
raises `FlowAccountChooserError` (38) for a chooser and `AuthExpiredError` (3) for
|
|
112
|
+
other Google sign-in surfaces, URL stripped. The bot-rejection hop
|
|
113
|
+
(`/v3/signin/rejected`) keeps returning `None` — it has its own error.
|
|
114
|
+
- **`gflow auth list` no longer fails on a profile whose `.gflow_account` is damaged**
|
|
115
|
+
(PR [#764](https://github.com/ffroliva/gflow-cli/pull/764)). The reader decoded as
|
|
116
|
+
UTF-8 and caught only `OSError`, so a non-UTF-8 or truncated file raised out of
|
|
117
|
+
`list_profiles()` and broke the listing for *every* profile, not just the damaged one.
|
|
118
|
+
The value is also interpolated into a DOM attribute selector, where a stray quote
|
|
119
|
+
produced an untyped failure. Unusable content now reads as "no account recorded",
|
|
120
|
+
which every caller already handles.
|
|
121
|
+
- **Google's post-migration account chooser no longer stalls a run**
|
|
122
|
+
([#763](https://github.com/ffroliva/gflow-cli/issues/763), PR
|
|
123
|
+
[#764](https://github.com/ffroliva/gflow-cli/pull/764) — thanks @stgmt). When Google
|
|
124
|
+
hands the session to `flow.google.com` and redirects to a chooser, `FlowApiClient`
|
|
125
|
+
now auto-selects the profile's recorded account from `.gflow_account` instead of
|
|
126
|
+
stalling into an opaque `RecaptchaError`/exit 1.
|
|
127
|
+
- The row match is exact and case-insensitive on both tiers, and **anchored so the
|
|
128
|
+
chooser's `Remove <email>` / `Sign out of <email>` rows can never be clicked**.
|
|
129
|
+
- A chooser is identified *positively* (chooser path, or account rows), so an
|
|
130
|
+
ordinary expired session still classifies as `AuthExpiredError` (exit 3) rather
|
|
131
|
+
than being swept into the new class.
|
|
132
|
+
- Cases that cannot be selected raise a typed, non-retryable
|
|
133
|
+
`FlowAccountChooserError` (**exit 38**) naming the URL the session actually
|
|
134
|
+
landed on.
|
|
135
|
+
- `.gflow_account` is treated as untrusted input — this fixes an untyped failure in
|
|
136
|
+
the selector and a crash in `gflow auth list` on a damaged file.
|
|
137
|
+
- Follow-up hardening is tracked in
|
|
138
|
+
[#773](https://github.com/ffroliva/gflow-cli/issues/773).
|
|
139
|
+
|
|
140
|
+
### Added
|
|
141
|
+
- **`gflow auth login --account <email>`** asserts the login authenticated as the
|
|
142
|
+
required account, failing closed on a mismatch rather than leaving a profile signed
|
|
143
|
+
in as somebody else (PR [#764](https://github.com/ffroliva/gflow-cli/pull/764)).
|
|
144
|
+
- **`FlowAppError.retryable`** — a per-instance override of that class's
|
|
145
|
+
`RETRYABLE_ERRORS` membership. `None` (the default) keeps the class answer, so no
|
|
146
|
+
existing raise changes. Scoped to the one class that needs it: `is_retryable()` reads
|
|
147
|
+
it by `getattr`, so a base-class field would have sat on every error in the project
|
|
148
|
+
to serve a single raise site.
|
|
149
|
+
- It exists because routing `/about` to exit 31 would otherwise have silently flipped
|
|
150
|
+
that shape from non-retryable (its exit-23 past) to retryable, asserting on every
|
|
151
|
+
occurrence that a retry is worth making. **That was measured, and could not be
|
|
152
|
+
settled:** the redirect stopped reproducing on `ci-probe` between 2026-09-08 and
|
|
153
|
+
2026-09-10 (5/5 attempts reached the editor —
|
|
154
|
+
[spike](docs/superpowers/spikes/2026-09-10-about-redirect-stability.md)), which is
|
|
155
|
+
equally consistent with "transient" and with "a session state changed". So the
|
|
156
|
+
`/about` raise site passes `retryable=False` to **preserve** the previous answer,
|
|
157
|
+
not to claim a retry fails. Flip it when someone catches the redirect live and
|
|
158
|
+
measures whether a second attempt wins.
|
|
159
|
+
- `is_retryable()` pins the override with `isinstance(..., bool)` rather than a
|
|
160
|
+
truthiness test: a `MagicMock` answers every attribute with a truthy child mock, so
|
|
161
|
+
a truthiness test would report **every** mocked error as retryable with nothing in
|
|
162
|
+
the suite noticing. Covered by a test that asserts that precondition explicitly.
|
|
163
|
+
- **BDD scenarios can now be bound as e2e tests**, with no new machinery: pytest-bdd
|
|
164
|
+
converts Gherkin tags into pytest markers, so a Feature tagged `@e2e @e2e_auth`
|
|
165
|
+
is filtered by the existing `addopts` and selected by the existing `-m <tier>`.
|
|
166
|
+
Feature files stay in `tests/features/`; their step module lives in `tests/e2e/`
|
|
167
|
+
so it inherits that suite's profile-gating fixtures. See
|
|
168
|
+
[docs/E2E_TESTING.md § BDD-bound e2e](docs/E2E_TESTING.md#bdd-bound-e2e).
|
|
169
|
+
- `tests/features/test_e2e_binding_guard.py` — offline guard (no browser, runs in
|
|
170
|
+
hosted CI) for three ways that binding breaks silently: an `@e2e` scenario nobody
|
|
171
|
+
wrote a test for, an `@e2e` Feature with no cost sub-marker (invisible to the
|
|
172
|
+
nightly canary), and the inverse hazard — a Feature bound from `tests/e2e/` but
|
|
173
|
+
left untagged, which escapes `addopts` and makes hosted CI try to drive Chrome.
|
|
174
|
+
It carries its own fire-test, so a green run means "no orphans", not "never looked".
|
|
175
|
+
|
|
176
|
+
### Changed
|
|
177
|
+
- **Workflow: the Bug Lane is now the documented route from symptom to fix.**
|
|
178
|
+
`skills/issue-resolve/SKILL.md` gains a canonical `spike → systematic-debugging →
|
|
179
|
+
BDD → TDD → fix → e2e` chain, gated by *surface* (steps 0–2 are skippable for a
|
|
180
|
+
one-line fix whose cause is proven — but a skip is a claim and must be stated;
|
|
181
|
+
steps 3–5 never are). AGENTS.md, `skills/spike`, `skills/scenario`,
|
|
182
|
+
`docs/E2E_TESTING.md` and `docs/INDEX.md` cite it; none restate it.
|
|
183
|
+
- Removes a real contradiction: `issue-resolve` step 3 previously permitted "the
|
|
184
|
+
closest browser-free proxy" while AGENTS.md's Iron Law said a change with no e2e
|
|
185
|
+
coverage must get one and listed "covered by unit tests" among the excuses that
|
|
186
|
+
are *not* blockers. Two disjoint files, no merge conflict, no gate that could
|
|
187
|
+
see it.
|
|
188
|
+
- "Browser-free" is no longer accepted as a verification blocker: only a **named**
|
|
189
|
+
external blocker is (an account you do not control, a Mac, an exhausted quota).
|
|
190
|
+
|
|
191
|
+
## [0.72.0] — 2026-09-09
|
|
192
|
+
|
|
193
|
+
### Added
|
|
194
|
+
|
|
195
|
+
- **`gflow image t2i` and local-file `i2i` now run on migrated `flow.google.com`
|
|
196
|
+
accounts** ([#639](https://github.com/ffroliva/gflow-cli/issues/639)). The Angular
|
|
197
|
+
composer binds Image mode, Nano Banana 2 / Pro, the four aspect ratios measured on that
|
|
198
|
+
host (16:9, 4:3, 1:1, 9:16) and counts 1–4,
|
|
199
|
+
then observes the page-owned `ogiZ0b` `batchexecute` reply and returns the same
|
|
200
|
+
`GeneratedImage` contract as the labs driver. Local references reuse the measured
|
|
201
|
+
`maseQ` upload + mention path and are verified in the outgoing submit body before the
|
|
202
|
+
result is trusted. The migrated page owns reCAPTCHA minting, avoiding the root-grid
|
|
203
|
+
`RecaptchaError`; unsupported UUID/entity/instruction/Imagen-4 forms still fail before
|
|
204
|
+
submit rather than silently dropping options.
|
|
205
|
+
|
|
206
|
+
- **`gflow image batch` is refused on the migrated host instead of failing as selector
|
|
207
|
+
drift** ([#639](https://github.com/ffroliva/gflow-cli/issues/639)). The batch path
|
|
208
|
+
drives labs selectors only; it now raises `FlowHostMigratedError` (exit 36) before any
|
|
209
|
+
submit, rather than running those selectors against `flow.google.com` and reporting
|
|
210
|
+
exit 23 — which told the user to file a frontend-drift bug about a frontend that was
|
|
211
|
+
behaving correctly.
|
|
212
|
+
|
|
213
|
+
### Changed
|
|
214
|
+
|
|
215
|
+
- **`gflow auth login` closes the browser for you.** It drives your real Google Chrome
|
|
216
|
+
through Playwright, watches for the completed Flow sign-in, and closes the window itself —
|
|
217
|
+
the "now close Chrome" step is gone. Closing the window yourself still works and still
|
|
218
|
+
verifies; it is not an error. On a machine where Playwright cannot resolve a Chrome
|
|
219
|
+
channel, or where Google rejects the browser anyway, login falls back automatically to the
|
|
220
|
+
previous flow (Chrome as a plain subprocess, you close the window). **There is no new flag
|
|
221
|
+
and nothing to choose.**
|
|
222
|
+
([spike](docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md))
|
|
223
|
+
|
|
224
|
+
### Fixed
|
|
225
|
+
|
|
226
|
+
- **The second image in one session no longer falls back to the labs reCAPTCHA mint**
|
|
227
|
+
([#673](https://github.com/ffroliva/gflow-cli/issues/673)). Every migrated image run
|
|
228
|
+
parks its page on `about:blank`, which routes as `labs` — so the page-owned-mint
|
|
229
|
+
capability, derived from `page.url`, answered `False` on the next call and sent it
|
|
230
|
+
back to minting on the pooled bootstrap page. The transport now latches the observed
|
|
231
|
+
host: `gflow image batch`, which runs every prompt through one `FlowApiClient`,
|
|
232
|
+
generated its first prompt and failed the rest with the exact `RecaptchaError` this
|
|
233
|
+
release exists to remove.
|
|
234
|
+
- **`--aspect 3:4` is refused on the migrated host rather than reported as selector
|
|
235
|
+
drift.** The composer's aspect radiogroup was enumerated there with four radios —
|
|
236
|
+
`crop_16_9`, `crop_landscape`, `crop_square`, `crop_9_16` — and no `crop_portrait`, so
|
|
237
|
+
a 3:4 request missed its selector and raised exit 23. It is now an unported form
|
|
238
|
+
(exit 36). The "all five aspect ratios" claim has been corrected to the four measured
|
|
239
|
+
wherever it appeared.
|
|
240
|
+
- **The exit-36 remediation no longer contradicts the error it accompanies.**
|
|
241
|
+
`FlowHostMigratedError._default_remediation` still described the migrated host as
|
|
242
|
+
driving only t2v and local-frame i2v, so an image refusal printed a `detail` saying
|
|
243
|
+
t2i/i2i are driven directly above a remediation saying they are not. Both it and the
|
|
244
|
+
class docstring now name the full ported matrix.
|
|
245
|
+
- **`gflow auth login --browser internal` launched a browser configuration measured as
|
|
246
|
+
rejected.** The bundled-Chromium path shipped with no anti-automation flags, which leaves
|
|
247
|
+
`navigator.webdriver` set. On 2026-09-08 a browser in that state — real Chrome with the
|
|
248
|
+
flags removed — was rejected at `/v3/signin/rejected` 17.5 s into the flow, while the same
|
|
249
|
+
browser *with* the flags signed in normally. Bundled Chromium was measured only in the
|
|
250
|
+
flagged configuration, so its unflagged rejection is inferred from the shared signal, not
|
|
251
|
+
observed directly. It now passes
|
|
252
|
+
`--disable-blink-features=AutomationControlled`, `ignore_default_args=["--enable-automation"]`
|
|
253
|
+
and `chromium_sandbox=True` — the last of which also removes Chrome's cosmetic *"You are
|
|
254
|
+
using an unsupported command-line flag"* banner — and signs in on the real OS window
|
|
255
|
+
instead of an emulated 1920×1080 viewport that pushed Google's sign-in form off-screen on
|
|
256
|
+
smaller or scaled displays.
|
|
257
|
+
- **Setting `CHROME_BINARY` no longer makes Playwright's `channel="chrome"` look resolvable
|
|
258
|
+
when it is not.** The availability check treated the variable as proof, passed, and then
|
|
259
|
+
failed at launch with *"Chromium distribution 'chrome' is not found"*. Playwright honours a
|
|
260
|
+
custom binary only via `executable_path=`, never via `channel=`, so the variable is now
|
|
261
|
+
ignored by that check (it still resolves a Chrome binary everywhere else).
|
|
262
|
+
|
|
263
|
+
### Security
|
|
264
|
+
|
|
265
|
+
- **`httpx2` / `httpcore2` bumped to 2.12.0, clearing five newly published CVEs**
|
|
266
|
+
([#766](https://github.com/ffroliva/gflow-cli/pull/766)). `httpcore2` CVE-2026-84381 and
|
|
267
|
+
`httpx2` CVE-2026-84378 / -84379 / -84380 / -84382, all against 2.9.1; both arrive
|
|
268
|
+
transitively through `mcp`. The advisories were published against an unchanged lockfile —
|
|
269
|
+
`Dependency audit (pip-audit)` went red on `develop` without any dependency change — so
|
|
270
|
+
this is not a regression introduced by a feature PR. `uvx pip-audit` on the exported
|
|
271
|
+
requirements now reports no known vulnerabilities. The bump also adds `httpx2-jsfetch`
|
|
272
|
+
1.0 to the lock, marked `sys_platform == 'emscripten'` (Pyodide/WASM only); it is never
|
|
273
|
+
installed on any platform gflow supports.
|
|
274
|
+
|
|
10
275
|
## [0.71.1] — 2026-09-08
|
|
11
276
|
|
|
12
277
|
### Fixed
|
|
@@ -4580,7 +4845,9 @@ shell-script template that branches on these codes.
|
|
|
4580
4845
|
|
|
4581
4846
|
First skeleton. Not functional end-to-end yet.
|
|
4582
4847
|
|
|
4583
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
4848
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.73.0...HEAD
|
|
4849
|
+
[0.73.0]: https://github.com/ffroliva/gflow-cli/compare/v0.72.0...v0.73.0
|
|
4850
|
+
[0.72.0]: https://github.com/ffroliva/gflow-cli/compare/v0.71.1...v0.72.0
|
|
4584
4851
|
[0.71.1]: https://github.com/ffroliva/gflow-cli/compare/v0.71.0...v0.71.1
|
|
4585
4852
|
[0.71.0]: https://github.com/ffroliva/gflow-cli/compare/v0.70.0...v0.71.0
|
|
4586
4853
|
[0.70.0]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...v0.70.0
|
|
@@ -14,13 +14,13 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
-
### Flow is migrating to `flow.google.com`;
|
|
17
|
+
### Flow is migrating to `flow.google.com`; generation coverage is partial but includes images
|
|
18
18
|
|
|
19
|
-
- **Status:** Open (partially resolved) · **Severity:** High for
|
|
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, the four aspect ratios its radiogroup was enumerated with (16:9, 4:3, 1:1, 9:16), and count 1–4; `3:4` had no radio in that enumeration and is refused before submit rather than reported as selector drift. Image refs by UUID, `@Name` / `--reference-entity`, Agent instructions, Imagen 4, video end frames, video 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** — `character create` and `character list` work on the migrated host. 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
20
|
- **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
21
|
- **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
22
|
- **`--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
|
-
- **The migrated composer
|
|
23
|
+
- **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
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.
|
|
25
25
|
|
|
26
26
|
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
@@ -48,7 +48,7 @@ This is **not** selector rot, not [#493](https://github.com/ffroliva/gflow-cli/i
|
|
|
48
48
|
and not the agentic cohort — the agentic indicators are absent too. It is a
|
|
49
49
|
different origin serving different markup.
|
|
50
50
|
|
|
51
|
-
**What works now —
|
|
51
|
+
**What works now — generation on the migrated host.** `gflow video t2v … --project <id>`
|
|
52
52
|
drives the migrated editor directly (settings through its option groups, prompt,
|
|
53
53
|
submit, then it observes the app's own `batchexecute` status replies and downloads
|
|
54
54
|
the clip). Two real clips were generated this way on 2026-09-05 — spike
|
|
@@ -56,10 +56,11 @@ the clip). Two real clips were generated this way on 2026-09-05 — spike
|
|
|
56
56
|
(`GFLOW_CLI_FLOW_HOST=auto`): flow.google.com is the **default** host for that
|
|
57
57
|
command on every account — moved or not; `flow.google.com` forces it for
|
|
58
58
|
everything, and `labs.google` switches the migrated composer off. Limits today: `--project` is required (project creation from the
|
|
59
|
-
migrated editor is not ported), and
|
|
59
|
+
migrated editor is not ported), and `t2v`, `i2v` from a local `--initial-frame` (no end frame,
|
|
60
60
|
no UUID/`@Name` frame — the migrated Frames picker exposes no media id in its DOM, so a frame is
|
|
61
61
|
found by file name after gflow uploads it through the editor), and `r2v` from local `--ref` files
|
|
62
|
-
(see the next paragraph)
|
|
62
|
+
(see the next paragraph), plus `image t2i` and local-file `image i2i` — unsupported
|
|
63
|
+
forms still exit 36.
|
|
63
64
|
|
|
64
65
|
**`r2v` from local `--ref` files also runs there (2026-09-06).** Each file is uploaded
|
|
65
66
|
through the same editor toolbar path i2v uses — so the app's own `maseQ` reply names the
|
|
@@ -73,6 +74,12 @@ References by `@Name` and character entities stay on labs, for the same reason a
|
|
|
73
74
|
UUID does: the picker exposes no media id to anchor on. Capture:
|
|
74
75
|
[2026-09-05-migrated-r2v-attach-surface](docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md).
|
|
75
76
|
|
|
77
|
+
**Images also run there (2026-09-08).** The driver selects Image mode, Nano Banana 2
|
|
78
|
+
or Pro, any supported aspect and count 1–4, then observes the page's own synchronous
|
|
79
|
+
`ogiZ0b` reply. Local I2I files use the existing `maseQ` upload and mention path; every
|
|
80
|
+
uploaded id must appear in the submit body before the result is trusted. UUID/entity
|
|
81
|
+
references, Agent instructions, and Imagen 4 remain pre-submit refusals on this host.
|
|
82
|
+
|
|
76
83
|
**Models on the migrated host.** Its picker is driven for every tier the account's
|
|
77
84
|
menu actually renders, `veo-lite-lp` included — matched by the `[Lower Priority]`
|
|
78
85
|
tag alone, exactly as on labs.google. That entry was first captured on 2026-09-05
|
|
@@ -100,8 +107,9 @@ which Playwright updates in the same tick as the hand-off navigation — and fai
|
|
|
100
107
|
with the distinct, non-retryable exit 36 instead of the misleading
|
|
101
108
|
`UiSelectorDriftError` (exit 23, "file a selector bug"). `_check_logged_in` also
|
|
102
109
|
accepts the migrated host, so a migrated load is no longer misread as a
|
|
103
|
-
logged-out session.
|
|
104
|
-
scenes, extend, instructions, tools
|
|
110
|
+
logged-out session. The generation forms listed above and characters are driven;
|
|
111
|
+
scenes, extend, instructions, tools, project creation, and the named reference/model
|
|
112
|
+
variants are the remaining work
|
|
105
113
|
tracked here — no retry helps for those until each is ported.
|
|
106
114
|
|
|
107
115
|
> **v0.66.1's fast-fail did not fire in the field, and v0.66.2 is the correction.**
|
|
@@ -1229,6 +1237,51 @@ now names which of three things happened rather than blaming drift:
|
|
|
1229
1237
|
**On 0.71.0 and earlier there is no recovery.** Open the project on
|
|
1230
1238
|
`flow.google.com`, click the **Agent** chip off, and the account works again.
|
|
1231
1239
|
|
|
1240
|
+
**Follow-up ([#776](https://github.com/ffroliva/gflow-cli/issues/776)) — the same
|
|
1241
|
+
confusion survived one gate later, on the *click*.** The table above covers the readiness
|
|
1242
|
+
*wait*. A control that passes that wait and then refuses the click used to expire as a bare
|
|
1243
|
+
Playwright `TimeoutError`: exit 1, no locator, no cause. It now reports what was observed
|
|
1244
|
+
at the moment it expired, because the cause could not be measured — Flow's announcement
|
|
1245
|
+
overlay is a labs.google measurement that has never been reproduced on this host, and a
|
|
1246
|
+
mid-run agent-mode flip is equally consistent with the evidence.
|
|
1247
|
+
|
|
1248
|
+
| The message says | What it means | What to do |
|
|
1249
|
+
|---|---|---|
|
|
1250
|
+
| `… did not accept a click … the account is in Flow's agent mode` | the mode flipped after the editor was ready | turn the **Agent** chip off in a browser; re-run |
|
|
1251
|
+
| `… it is covered by <tag>.<class>` | something is stacked over the control — the class names it | dismiss it in a browser; re-run |
|
|
1252
|
+
| `… the page is accepting no pointer events at all` | an overlay has the whole app blocked (#593's shape) | dismiss it in a browser; re-run |
|
|
1253
|
+
| `… it carries a bare `hidden` attribute` / `it is disabled` | the control is present but not usable | usually agent mode or a cohort difference; check the Agent chip first |
|
|
1254
|
+
| `… it is not rendered (display, visibility, or a zero-sized box)` | it is in the DOM but not on screen | as above — check the Agent chip, then file a bug with the log |
|
|
1255
|
+
| `… it answers no hit test at its own centre` | nothing named itself as the cover, but the click still landed elsewhere | re-run once; if it repeats, file a bug — an overlay outside the document is the usual shape |
|
|
1256
|
+
| `… it was visible, enabled and hit-testable … most likely still moving` | nothing readable was wrong | Playwright also needs a *stable* box; re-run once. If it repeats, file a bug — this message means we looked and found nothing, which is a real finding worth having |
|
|
1257
|
+
| `… it could not be read back` | the page changed under the diagnosis | re-run; if it repeats, attach the log |
|
|
1258
|
+
|
|
1259
|
+
The occluder is named by tag plus framework class only. That is deliberate — a signed-in
|
|
1260
|
+
Flow page carries the account email and signed media URLs on exactly the elements that
|
|
1261
|
+
tend to occlude things, and this message is printed, logged, and pasted into issues.
|
|
1262
|
+
|
|
1263
|
+
### `gflow auth login --account` reports a mismatch but leaves the profile in place
|
|
1264
|
+
|
|
1265
|
+
- **Status:** Open · **Severity:** Medium (no data loss; the risk is *which account pays*) · **Affects:** `gflow auth login --account <email>`, v0.73.0 onward · **Tracked:** [#773](https://github.com/ffroliva/gflow-cli/issues/773) item 3
|
|
1266
|
+
|
|
1267
|
+
`--account` asserts that the login authenticated as the account you named, and a mismatch
|
|
1268
|
+
raises **exit 38** with one `auth.account_assert_failed` log line. What it does **not** do is
|
|
1269
|
+
quarantine, rename or otherwise mark the profile — so a later run re-reads a profile
|
|
1270
|
+
authenticated as somebody else, with nothing persisted to say so. On a product that bills
|
|
1271
|
+
generations to the signed-in Google account, that is the wrong account paying.
|
|
1272
|
+
|
|
1273
|
+
This was a deliberate "minimum" in review round 4 of
|
|
1274
|
+
[#764](https://github.com/ffroliva/gflow-cli/pull/764), recorded here so the decision stays
|
|
1275
|
+
revisitable rather than lost in a merged thread.
|
|
1276
|
+
|
|
1277
|
+
**Workaround:** after any exit 38 from `--account`, check `gflow auth list` and re-run
|
|
1278
|
+
`gflow auth login --account <email>` for that profile before generating. Do not assume the
|
|
1279
|
+
failed assert left the profile unusable — it is usable, just possibly as the wrong person.
|
|
1280
|
+
|
|
1281
|
+
Two further items on the same issue are unfixed and worth knowing about: a second chooser
|
|
1282
|
+
hop (chooser → consent → chooser) is not handled and degrades into the landing timeout, and
|
|
1283
|
+
that timeout is still an unmeasured number.
|
|
1284
|
+
|
|
1232
1285
|
### Auth verification depends on Google's NextAuth session endpoint
|
|
1233
1286
|
|
|
1234
1287
|
- **Status:** Mitigated · **Severity:** Low (degrades fail-closed) · **Affects:** issue #15 fix onward · **Tracked:** issue #15
|
|
@@ -1515,9 +1568,10 @@ End-to-end live-verified on the `ffroliva` profile across `9:16`, `16:9`, `1:1`,
|
|
|
1515
1568
|
|
|
1516
1569
|
### G12 "browser not secure" block — Google rejects automated sign-in
|
|
1517
1570
|
|
|
1518
|
-
- **Status:** Resolved · **Severity:** Critical (blocked `gflow auth login`) · **Fixed in:** v0.6.0a2
|
|
1571
|
+
- **Status:** Resolved · **Severity:** Critical (blocked `gflow auth login`) · **Fixed in:** v0.6.0a2 · **Mitigation reimplemented + re-measured:** 2026-09-08
|
|
1519
1572
|
|
|
1520
|
-
Google's sign-in flow (`accounts.google.com/v3/signin/rejected`)
|
|
1573
|
+
Google's sign-in flow (`accounts.google.com/v3/signin/rejected`) rejects a browser that
|
|
1574
|
+
advertises itself as automated, and refuses the login with no user-facing error.
|
|
1521
1575
|
|
|
1522
1576
|
**Root cause (timing race):** Without `--disable-blink-features=AutomationControlled`,
|
|
1523
1577
|
Blink's C++ engine sets `navigator.webdriver = true` as a non-configurable, non-writable
|
|
@@ -1525,20 +1579,52 @@ native property at Chrome startup — before any JavaScript (including `add_init
|
|
|
1525
1579
|
can run. The `Object.defineProperty` override silently fails. With the flag, the property
|
|
1526
1580
|
is never set; the JS override then works as belt-and-suspenders.
|
|
1527
1581
|
|
|
1528
|
-
**Resolution:** `
|
|
1529
|
-
|
|
1582
|
+
**Resolution:** `gflow auth login` launches the system's real Google Chrome through
|
|
1583
|
+
Playwright's `channel="chrome"` with `chromium_sandbox=True`, `no_viewport=True`, and both
|
|
1584
|
+
stealth flags — `--disable-blink-features=AutomationControlled` and
|
|
1585
|
+
`ignore_default_args=["--enable-automation"]`. Because gflow owns that browser it also
|
|
1586
|
+
detects the completed Flow sign-in and closes the window itself; see
|
|
1587
|
+
[docs/AUTHENTICATION.md](docs/AUTHENTICATION.md). When no Chrome channel resolves, or
|
|
1588
|
+
Google rejects the browser anyway, login falls back automatically to launching Chrome as a
|
|
1589
|
+
plain subprocess and waiting for you to close the window. There is no flag and no choice to
|
|
1590
|
+
make, and closing the window yourself works on either path.
|
|
1591
|
+
|
|
1592
|
+
> **This entry described that Playwright implementation long before it existed.**
|
|
1593
|
+
> It read *"`v0.6.0a2` adds `RealChromeStrategy` — launches the system's real Google Chrome
|
|
1594
|
+
> via Playwright's `channel="chrome"` with stealth flags."* `src/gflow_cli/auth/real_chrome.py`
|
|
1595
|
+
> was created at `eb0de133` (2026-07-19) as a bare `subprocess.Popen` passive capture, and
|
|
1596
|
+
> `git log -S'channel="chrome"' -- src/gflow_cli/auth/` returned **zero** commits until the
|
|
1597
|
+
> auto-close change. The paragraph above is the same shape restated deliberately as current
|
|
1598
|
+
> fact, not the same accident left standing.
|
|
1530
1599
|
|
|
1531
1600
|
```bash
|
|
1532
|
-
#
|
|
1601
|
+
# Ask for real Chrome explicitly:
|
|
1533
1602
|
gflow auth login --browser chrome
|
|
1534
1603
|
|
|
1535
1604
|
# Or rely on auto-detection (default behaviour; picks real Chrome if installed):
|
|
1536
1605
|
gflow auth login
|
|
1537
1606
|
```
|
|
1538
1607
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1608
|
+
**The block is current Google behaviour — "Resolved" means the mitigation holds, not that
|
|
1609
|
+
Google stopped.** Re-measured 2026-09-08 across three throwaway *unauthenticated* profiles,
|
|
1610
|
+
each signed into by hand
|
|
1611
|
+
([spike](docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md)): a
|
|
1612
|
+
browser advertising `navigator.webdriver === true` — real Chrome, no stealth flags — was
|
|
1613
|
+
rejected at `/v3/signin/rejected` **17.5 s** into the flow, while the same real Chrome
|
|
1614
|
+
*with* the flags reported `false`, never saw the rejection, and reached a Flow session
|
|
1615
|
+
cookie at 59.4 s. Playwright's bundled Chromium with the flags passed too, so the binary is
|
|
1616
|
+
not the discriminator; `navigator.webdriver` tracked the outcome in all three arms.
|
|
1617
|
+
|
|
1618
|
+
> **This is N=1 — do not read it as a capability claim.** One account, one Windows host, one
|
|
1619
|
+
> residential IP, one Chrome build (`Chrome/149.0.0.0`), one day. Google's sign-in risk
|
|
1620
|
+
> scoring varies with account age and IP reputation, so it does not predict CI, a VPS, or a
|
|
1621
|
+
> fresh account. Every arm ran headed, so it says nothing about headless in either
|
|
1622
|
+
> direction. Sign-in is also a different gate from generation's reCAPTCHA Enterprise check;
|
|
1623
|
+
> a result on one does not move the other.
|
|
1624
|
+
|
|
1625
|
+
The Chrome window no longer shows the "You are using an unsupported command-line flag"
|
|
1626
|
+
notice this entry used to warn about: that banner came from the `--no-sandbox` Playwright
|
|
1627
|
+
injects by default, and `chromium_sandbox=True` stops the injection.
|
|
1542
1628
|
|
|
1543
1629
|
---
|
|
1544
1630
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.73.0
|
|
4
4
|
Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
|
|
@@ -130,7 +130,7 @@ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-p
|
|
|
130
130
|
|
|
131
131
|
Outputs land under `$GFLOW_CLI_OUTPUT_DIR`, or you can route them to S3, MinIO, or Google Cloud Storage with [`GFLOW_CLI_STORAGE_URI`](docs/EXTERNAL_STORAGE.md). The first call takes 30 to 90 seconds while Chromium warms up; later calls reuse the warm session.
|
|
132
132
|
|
|
133
|
-
> **Why `--browser chrome`?**
|
|
133
|
+
> **Why `--browser chrome`?** It is the only strategy that marks the profile as a real-Chrome profile, which is what later generation runs open it with. The default `auto` picks it whenever Chrome is installed — see [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md).
|
|
134
134
|
|
|
135
135
|
> **Installing from a local checkout?** `uv tool install <path>` **ignores `uv.lock`** and resolves dependencies from the `pyproject.toml` ranges, so it can hand you a Playwright build this project has never tested. Playwright ships the browser driver, and an untested minor can wedge a generation silently. Carry the locked version explicitly:
|
|
136
136
|
>
|
|
@@ -198,7 +198,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
198
198
|
|
|
199
199
|
**Current transport:** `ui_automation` drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release `LIVE_VERIFICATION_*` evidence files).
|
|
200
200
|
|
|
201
|
-
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`).
|
|
201
|
+
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). The migrated driver covers text-to-video, image-to-video from a local start frame, reference-to-video from local files, text-to-image, and image-to-image from local files. Image generation supports Nano Banana 2 / Pro, the four aspect ratios measured on that host (16:9, 4:3, 1:1, 9:16), and counts 1–4; an existing project is required at the transport boundary. UUID/entity references, instructions, Imagen 4, and the rest of the matrix keep the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
202
202
|
|
|
203
203
|
**What's blocked:** a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch`, `bearer`, `sapisidhash`) live under `src/gflow_cli/api/transports/experimental/` for research, off the production path.
|
|
204
204
|
|