gflow-cli 0.65.0__tar.gz → 0.66.1__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.65.0 → gflow_cli-0.66.1}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/CHANGELOG.md +81 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/KNOWN_ISSUES.md +46 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/PKG-INFO +1 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/DEBUGGING.md +2 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/INDEX.md +4 -0
- gflow_cli-0.66.1/docs/LIVE_VERIFICATION_v0.66.0.md +119 -0
- gflow_cli-0.66.1/docs/LIVE_VERIFICATION_v0.66.1.md +69 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/PROJECT_STATUS.md +79 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/USAGE.md +1 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/pyproject.toml +1 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/client.py +17 -2
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/routes.py +32 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/_common.py +38 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/drivers/factory.py +21 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/ui_automation.py +9 -7
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/ui_automation_video.py +17 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/diagnostics.py +11 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/errors.py +40 -0
- gflow_cli-0.66.1/tests/api/test_routes_locale.py +185 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/drivers/test_ui_mode.py +96 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_agentic_cohort_detection.py +104 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_common.py +97 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_ui_automation.py +40 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_recorder.py +28 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_sanitize.py +13 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/uv.lock +1 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/DEBUGGING.md +2 -1
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/KNOWN_ISSUES.md +46 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/USAGE.md +1 -0
- gflow_cli-0.65.0/tests/api/test_routes_locale.py +0 -68
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.env.template +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.gitattributes +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/dependabot.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.gitignore +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.gitleaks.toml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/.secrets.baseline +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/AGENTS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/CLAUDE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/CONFIGURATION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/DISCLAIMER.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/LICENSE +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/RELEASE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/ROADMAP.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docker-compose.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/DEMOS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/GITHUB.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/MCP.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/MOVIE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/SECURITY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/TOOLS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/sample_config.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/index.html +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/llms.txt +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/package-lock.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/package.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/README.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/sonar-project.properties +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tasks/lessons.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_video.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_models.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_store.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/auth.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/image.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/constants.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_auth.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_chain.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_config.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_errors.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_json_output.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_media.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_observability.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_paths.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_smoke.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/test_update_check.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/MCP.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/agents.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/index.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/installation.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/mkdocs.yml +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/requirements.in +0 -0
- {gflow_cli-0.65.0 → gflow_cli-0.66.1}/website/requirements.txt +0 -0
|
@@ -7,6 +7,84 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.66.1] — 2026-09-03
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **A migrated-origin run spent ~36 s discovering a failure knowable in microseconds
|
|
15
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639)).** `flow.google.com` renders none
|
|
16
|
+
of the controls gflow drives, so every DOM probe is doomed before it starts — yet the run
|
|
17
|
+
still burned the full `detect_ui_mode` poll window (~8 s, both arms missing), the crop
|
|
18
|
+
selector cascade (~24 s) and the URL settle (4 s) before raising `FlowHostMigratedError`.
|
|
19
|
+
Because the rollout flaps per page load and callers retry on exit 36, that cost was paid on
|
|
20
|
+
**every attempt** of a retry loop. `get_ui_driver` now checks the host first and fails fast
|
|
21
|
+
with the same retryable exit 36. The old host is untouched and still gets full DOM detection;
|
|
22
|
+
a page whose URL cannot be read still probes rather than bailing, so a transient is never
|
|
23
|
+
mistaken for a migrated origin.
|
|
24
|
+
|
|
25
|
+
- **Locale resolution was blind on `flow.google.com`, and silently discarded a locale it had
|
|
26
|
+
already learned ([#643](https://github.com/ffroliva/gflow-cli/issues/643)).** The migrated
|
|
27
|
+
origin serves `/project/<id>` with no `/fx/<locale>/tools/flow` segment, so
|
|
28
|
+
`locale_segment_from_url` could never match there. The locale had not disappeared — it moved
|
|
29
|
+
into `<html lang>`, which stays correct on the migrated host. Two measured consequences:
|
|
30
|
+
`next_locale_state("pt", None)` returned PROVISIONAL, **demoting** an already-learned locale
|
|
31
|
+
on every migrated load (so a fully-migrated account could never learn it again, undoing
|
|
32
|
+
[#587](https://github.com/ffroliva/gflow-cli/issues/587)); and `await_url_settled` burned the
|
|
33
|
+
full 4 s timeout per navigation waiting for a shape that can no longer exist. gflow now falls
|
|
34
|
+
back to `<html lang>` when the URL carries no segment, and skips the settle wait entirely on
|
|
35
|
+
the migrated origin.
|
|
36
|
+
|
|
37
|
+
The fallback is evidence-backed, not assumed: measured on two accounts (`en` and `pt-BR`),
|
|
38
|
+
`<html lang>` **agreed with the URL segment wherever both existed**. Unlike
|
|
39
|
+
`navigator.language` — which reports the value gflow itself sets — it is server-rendered by
|
|
40
|
+
Flow. Where Flow does state the locale in the URL, that stays authoritative.
|
|
41
|
+
|
|
42
|
+
## [0.66.0] — 2026-09-03
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- **Flow's migration to `flow.google.com` was reported as selector drift
|
|
47
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639)).** Google is moving Flow
|
|
48
|
+
off Labs onto its own origin. The migrated frontend renders **zero** Material Symbols
|
|
49
|
+
`<i>` elements, so every gflow selector — cohort detection included — misses at once,
|
|
50
|
+
and the run died with `UiSelectorDriftError` (exit 23, `retryable: false`): an error
|
|
51
|
+
that reads like the selectors rotted and sent operators hunting for the wrong cause.
|
|
52
|
+
The rollout **flaps per page load** — the same account and project land on the old
|
|
53
|
+
host on one navigation and the migrated one on the next — so a re-run frequently
|
|
54
|
+
succeeds, but the non-retryable classification made automated callers give up.
|
|
55
|
+
gflow now recognises the migrated origin and raises the distinct, **retryable**
|
|
56
|
+
`FlowHostMigratedError` (exit 36) naming the migration. Applies to CLI and MCP alike
|
|
57
|
+
(both route through the shared mode-switch raise site, and `retryable` has a single
|
|
58
|
+
source of truth). **This does not add support for the migrated frontend** — that is
|
|
59
|
+
separate work; see [KNOWN_ISSUES.md](KNOWN_ISSUES.md).
|
|
60
|
+
|
|
61
|
+
- **A migrated page load was misread as a logged-out session
|
|
62
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639)).** `_check_logged_in`
|
|
63
|
+
hard-required `labs.google` in the URL, so a perfectly valid authenticated session on
|
|
64
|
+
the migrated host failed the gate and drove a pointless re-auth. It now accepts both
|
|
65
|
+
Flow origins.
|
|
66
|
+
|
|
67
|
+
### Security
|
|
68
|
+
|
|
69
|
+
- **The authenticated-session URL gate matched hosts by substring.** `_check_logged_in`
|
|
70
|
+
tested `"labs.google" in page.url`, which any foreign URL satisfies merely by carrying
|
|
71
|
+
the string in its path or query (`https://evil.example/?next=labs.google/fx/tools/flow`).
|
|
72
|
+
The host is now parsed and matched exactly.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- Incident bundles from a `flow.google.com` load previously reported
|
|
77
|
+
`url.host_category: "other"` / `url.route: "other"`, hiding the most useful fact about
|
|
78
|
+
the failure. The migrated origin is now classified as `flow_app`, with the same
|
|
79
|
+
identifier reduction applied.
|
|
80
|
+
|
|
81
|
+
Live-verified 2026-09-03 at zero credits against the **real** migrated frontend, on an
|
|
82
|
+
account inside the rollout: `flow_host_kind: "migrated"`, `_check_logged_in: true` (it was
|
|
83
|
+
`false` before the fix), and `_mode_switch_error` returning `FlowHostMigratedError` / exit 36 /
|
|
84
|
+
`retryable: true` — while a credit-free `image t2i` minutes earlier landed on the old host and
|
|
85
|
+
completed exit 0, proving no regression. See
|
|
86
|
+
[docs/LIVE_VERIFICATION_v0.66.0.md](docs/LIVE_VERIFICATION_v0.66.0.md).
|
|
87
|
+
|
|
10
88
|
## [0.65.0] — 2026-09-02
|
|
11
89
|
|
|
12
90
|
### Fixed
|
|
@@ -3659,7 +3737,9 @@ shell-script template that branches on these codes.
|
|
|
3659
3737
|
|
|
3660
3738
|
First skeleton. Not functional end-to-end yet.
|
|
3661
3739
|
|
|
3662
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
3740
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.66.1...HEAD
|
|
3741
|
+
[0.66.1]: https://github.com/ffroliva/gflow-cli/compare/v0.66.0...v0.66.1
|
|
3742
|
+
[0.66.0]: https://github.com/ffroliva/gflow-cli/compare/v0.65.0...v0.66.0
|
|
3663
3743
|
[0.65.0]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...v0.65.0
|
|
3664
3744
|
[0.64.0]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...v0.64.0
|
|
3665
3745
|
[0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
|
|
@@ -14,6 +14,52 @@ 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`; the migrated frontend is not drivable
|
|
18
|
+
|
|
19
|
+
- **Status:** Open · **Severity:** High (every generation command fails on a migrated page load) · **Affected:** all `gflow image` / `gflow video` generation, CLI and MCP alike, on accounts the rollout has reached
|
|
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
|
+
- **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
|
+
|
|
23
|
+
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
24
|
+
`https://labs.google/fx/tools/flow/project/<id>` redirects to
|
|
25
|
+
`https://flow.google.com/project/<id>` and serves a rewritten frontend that
|
|
26
|
+
contains **zero `<i>` elements**. Every gflow selector anchors on Material
|
|
27
|
+
Symbols ligatures (`i.google-symbols:text-is(...)`), so cohort detection and
|
|
28
|
+
every mode control miss at once.
|
|
29
|
+
|
|
30
|
+
**The rollout flaps per page load.** The same account, profile and project land
|
|
31
|
+
on the old host on one navigation and the migrated one on the next, minutes
|
|
32
|
+
apart, with no client change. Measured on one account ~35 minutes apart:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
old host labs.google/fx/<locale>/tools/flow/... i=55 i.google-symbols=49 crop_* present -> exit 0
|
|
36
|
+
migrated host flow.google.com/project/... i=0 i.google-symbols=0 crop_* absent -> exit 36
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Note the migrated URL **drops `/fx/tools/flow` entirely** — it is `/project/<id>`, not
|
|
40
|
+
`/fx/<locale>/tools/flow/project/<id>`. Any host gate written as a substring test on
|
|
41
|
+
`labs.google` could never have matched it.
|
|
42
|
+
|
|
43
|
+
This is **not** selector rot, not [#493](https://github.com/ffroliva/gflow-cli/issues/493),
|
|
44
|
+
and not the agentic cohort — the agentic indicators are absent too. It is a
|
|
45
|
+
different origin serving different markup.
|
|
46
|
+
|
|
47
|
+
**Workaround:** re-run the command. While the rollout flaps, a fresh navigation
|
|
48
|
+
frequently lands the old frontend and the run completes normally. Automated
|
|
49
|
+
callers get this for free: the failure is `FlowHostMigratedError` (exit 36) with
|
|
50
|
+
`retryable: true`, so retry loops driven by the `--json` / MCP / worker error
|
|
51
|
+
envelope will keep trying.
|
|
52
|
+
|
|
53
|
+
**What gflow does today (v0.66.0):** recognises the migrated origin and fails
|
|
54
|
+
with the distinct, retryable exit 36 instead of the misleading
|
|
55
|
+
`UiSelectorDriftError` (exit 23, "file a selector bug"). `_check_logged_in` also
|
|
56
|
+
accepts the migrated host, so a migrated load is no longer misread as a
|
|
57
|
+
logged-out session. **Support for driving the new frontend is separate work and
|
|
58
|
+
is not implemented** — once the rollout completes for an account, no retry will
|
|
59
|
+
help until then.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
17
63
|
### A Veo extend segment is 7 seconds, not the 8 Flow advertises — so concat pads a frozen second
|
|
18
64
|
|
|
19
65
|
- **Status:** Open · **Severity:** Medium (audible/visible on every internal seam of a chained extend) · **Affected:** `gflow video extend -n >1` with `-o`, and any scene mixing extend segments
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.66.1
|
|
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
|
|
@@ -106,7 +106,8 @@ at command startup).
|
|
|
106
106
|
### What triggers a capture (and what never does)
|
|
107
107
|
|
|
108
108
|
Captured: `FlowAppError` (31), `FlowAgentUiError` (25),
|
|
109
|
-
`
|
|
109
|
+
`FlowHostMigratedError` (36), `UiModeUnavailableError` (28),
|
|
110
|
+
`UiSelectorDriftError` (23),
|
|
110
111
|
`TransportTimeoutError` (9), `BrowserSessionClosedError` (15),
|
|
111
112
|
`WireFormatError` (7), `WafRejectionError` (10), `NetworkError` (6),
|
|
112
113
|
unexpected exceptions while a page is alive, and `ProfileLockedError` (11)
|
|
@@ -158,6 +158,10 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
158
158
|
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
|
|
159
159
|
**"Was the playwright upper bound raised, and on what evidence?"** → [LIVE_VERIFICATION_playwright_1.61](LIVE_VERIFICATION_playwright_1.61.md) (**`>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0` verified 2026-08-05, 1 Imagen + 1 Veo credit** — the 2026-08-03 regression that motivated the bound does NOT reproduce on 1.61.0: a live `i2v` drove the full chain with `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live `i2i` local-ref attach passed outright [96.7s]. **1.62.0 stays excluded** — never root-caused. Also found, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0: Flow dropped the duration-tab UI, so **`--duration` is currently broken for i2v** — `UiSelectorDriftError` fires correctly [refusing rather than silently accepting Flow's default, #288] but the selector needs re-deriving; that is why the i2v proof was driven via the CLI without `--duration`, and Flow's own server-side `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT` means no finished mp4 is claimed).
|
|
160
160
|
**"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
|
|
161
|
+
**"What was live-verified for v0.66.1?"** → [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md) — **the two migrated-origin fixes, verified 2026-09-03 on profile `ffroliva` at ZERO credits, on BOTH sides of the still-flapping rollout.** On a real `flow.google.com` load `get_ui_driver` raised `FlowHostMigratedError` in **0 ms** (was ~36 s: ~8 s detect window + ~24 s crop cascade + 4 s URL settle), exit 36, `retryable: true`, `ui_driver.migrated_host_bail` logged; `await_url_settled` returned `null` in **0 ms** (measured 4018 ms before); and the locale was recovered as `en` from `html lang=en-GB` where the URL gave `null`. The no-regression half is the stronger evidence: minutes later the same command landed on the OLD host and completed **exit 0** with a real 768x1376 JPEG in 42.2 s, proving the host guard is scoped and does not short-circuit the working path. Three items recorded as NOT verified rather than omitted: driving the migrated frontend (still impossible, #639 stays open), the pt-BR recovery live (measured `html lang=pt` on `denon82` but exercised live only on `en-GB`), and the `en-GB`→`en` region reduction against a locale where region is load-bearing (`zh-Hans`/`zh-Hant`) — only two locales observed.
|
|
162
|
+
|
|
163
|
+
**"What was live-verified for v0.66.0?"** → [LIVE_VERIFICATION_v0.66.0](LIVE_VERIFICATION_v0.66.0.md) — **#639 Flow's `flow.google.com` migration, verified 2026-09-03 on profile `ffroliva` at ZERO credits.** The maintainer's own account turned out to be inside the rollout, so the fix was proven against the real migrated frontend rather than a reconstructed DOM: a read-only probe of `flow.google.com/project/<id>` measured `i_total: 0` (independently reproducing the reporter's central measurement) and drove the production functions against the live page — `flow_host_kind: "migrated"`, `_check_logged_in: true` (it was `false` before the fix, i.e. a valid session read as logged-out), and `_mode_switch_error` returning `FlowHostMigratedError` / exit 36 / `retryable: true`. The flap is confirmed on ONE account: a credit-free `image t2i` minutes earlier landed on the OLD host and completed exit 0 with a real 768x1376 JPEG (`ffd8ffe0`, 401,939 bytes, Pillow dims matching the API claim), proving the rewritten host gate does not regress the old path. Also recorded: the migrated URL **drops `/fx/tools/flow` entirely** — it is `/project/<id>` — which is why a substring gate on `labs.google` could never match it; and the migrated composer is not control-less but exposes **no `data-testid`, zero ligature `<i>`, and 13 `button[aria-label]`** (`Settings trigger`, `Start generation`, …), recorded as recon for the follow-up WITH the caveat that `aria-label` is translated and therefore Tier-2 at best under the locale-invariance rule. One item is recorded as NOT verified rather than omitted: gflow **driving** the migrated frontend, which is out of scope and keeps #639 open. Verification also hit pre-existing [#561](https://github.com/ffroliva/gflow-cli/issues/561) (401 on `project.createProject`), A/B'd against unmodified `develop` to prove it was not this change, then routed around with an existing `--project`.
|
|
164
|
+
|
|
161
165
|
**"What was live-verified for v0.65.0?"** → [LIVE_VERIFICATION_v0.65.0](LIVE_VERIFICATION_v0.65.0.md) — the guard A/B (three runs, zero credits, control included); the `chain`/`movie` duration guards are validation that refuses **before** any transport call, so they are covered by a red state that reproduces the mid-spend crash in a test plus negative controls, and the reason they were not live-run is recorded rather than omitted.
|
|
162
166
|
|
|
163
167
|
**"Does the `referenceEntity` guard actually run, and is it a Web Worker or a Service Worker?"** → [LIVE_VERIFICATION_reference_entity_guard](LIVE_VERIFICATION_reference_entity_guard.md) — **A/B-proven live on denon82 2026-09-02, zero credits.** Control (without #618): the guard never fired and the test failed; with #618: it fired and passed. Same account, same prompt, one variable. Settles the question that held #618 — it is a **dedicated Web Worker**, so `context.route` suffices and no `service_workers="block"` is needed. Also confirms `route.continue_(post_data=...)` does not corrupt the body (both runs produced a real image). The **video** glob was equally dead, which #615 never mentions. Residual: direct-wire routes still bypass structurally (#619).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Live Verification — v0.66.0 (issue #639, Flow's `flow.google.com` migration)
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-09-03 · **Account:** ffroliva@gmail.com · **Platform:** Windows 11, Chrome strategy (system Chrome)
|
|
4
|
+
**Branch:** `bugfix/639-flow-google-com-migration` · **PR:** [#640](https://github.com/ffroliva/gflow-cli/pull/640)
|
|
5
|
+
**Credits spent:** **0** — one Imagen image (images are credit-free; only Veo video spends) plus one read-only DOM probe.
|
|
6
|
+
|
|
7
|
+
## What had to be proven
|
|
8
|
+
|
|
9
|
+
The fix classifies a failure. Two independent claims, and offline tests can prove neither:
|
|
10
|
+
|
|
11
|
+
1. **On a real migrated load**, `_mode_switch_error` returns `FlowHostMigratedError` (exit 36, retryable) — not `UiSelectorDriftError` (23).
|
|
12
|
+
2. **On an old-host load**, nothing regressed — in particular the rewritten `_check_logged_in`
|
|
13
|
+
host gate, which sits on the auth path of *every* run.
|
|
14
|
+
|
|
15
|
+
Both were verified against live Flow. The maintainer's own account turned out to be inside the
|
|
16
|
+
rollout, so this did not need the reporter.
|
|
17
|
+
|
|
18
|
+
## Layer 1 — the migration is real, and it flaps on one account
|
|
19
|
+
|
|
20
|
+
Same account, same profile, minutes apart, same gflow build:
|
|
21
|
+
|
|
22
|
+
| | old-host load | migrated load |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| final URL | `labs.google/fx/tools/flow/project/<id>` | `flow.google.com/project/<id>?pli=1` |
|
|
25
|
+
| `document.querySelectorAll('i').length` | **55** (reporter) | **0** (measured here) |
|
|
26
|
+
| `i.google-symbols` | 49 (reporter) | **0** (measured here) |
|
|
27
|
+
| `crop_*` trigger | present | **absent** |
|
|
28
|
+
| `gflow image t2i` | **exit 0**, image downloaded | **exit 36** |
|
|
29
|
+
|
|
30
|
+
The migrated URL also **drops the `/fx/tools/flow` path entirely** — it is `/project/<id>`, not
|
|
31
|
+
`/fx/<locale>/tools/flow/project/<id>`. That is why a substring gate on `labs.google` could never
|
|
32
|
+
have matched it.
|
|
33
|
+
|
|
34
|
+
## Layer 2 — the migrated path, measured (read-only, `$0`)
|
|
35
|
+
|
|
36
|
+
Probe: launch the authenticated persistent context, navigate to the migrated project URL, wait 9 s
|
|
37
|
+
for the composer, then run the real production functions against the live page.
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"final_url": "https://flow.google.com/project/c5550ed7-...?pli=1",
|
|
42
|
+
"flow_host_kind": "migrated",
|
|
43
|
+
"check_logged_in": true,
|
|
44
|
+
"dom": { "i_total": 0, "symbols": [], "crop": 0, "testids": [], "buttons": 19 },
|
|
45
|
+
"mode_switch_error_class": "FlowHostMigratedError",
|
|
46
|
+
"exit_code": 36,
|
|
47
|
+
"retryable": true
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- `i_total: 0` — **the reporter's central measurement reproduced independently.**
|
|
52
|
+
- `check_logged_in: true` — the auth-gate fix works on the real migrated page. Before the fix this
|
|
53
|
+
was `false`, i.e. a valid session read as logged-out.
|
|
54
|
+
- `FlowHostMigratedError` / `36` / `retryable: true` — **the fix fires on the real thing**, not
|
|
55
|
+
only on the DOM shape reconstructed in tests.
|
|
56
|
+
|
|
57
|
+
## Layer 3 — no regression on the old host (full generation path, exit 0)
|
|
58
|
+
|
|
59
|
+
`gflow image t2i --project <existing> --aspect 9:16 --count 1`
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{"status": "ok", "model": "NARWHAL",
|
|
63
|
+
"images": [{"media_name": "b7d7316a-...", "seed": 49027,
|
|
64
|
+
"dimensions": {"width": 768, "height": 1376},
|
|
65
|
+
"local_path": "tmp/lv639/images/2026-09-03/b7d7316a-..._1.jpg"}]}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Verification ledger:
|
|
69
|
+
|
|
70
|
+
| Layer | Evidence |
|
|
71
|
+
|---|---|
|
|
72
|
+
| L1 file count | 1 file written |
|
|
73
|
+
| L2 magic bytes | `ffd8ffe0` → JPEG · 401,939 bytes on disk |
|
|
74
|
+
| L3 Pillow dims | `(768, 1376)` — **matches** the API-claimed dimensions |
|
|
75
|
+
| L4 structlog | `image_mode_entered` → `image_model_selected` → `count_setter_completed` → `prompt_submitted` → `batch_request_intercepted` |
|
|
76
|
+
| L5 wire | `flowMedia:batchGenerateImages` intercepted, `request0_keys` carried `imageAspectRatio`, `imageModelName`, `structuredPrompt` |
|
|
77
|
+
|
|
78
|
+
The mode-switch cascade **found** its controls and generation completed — the rewritten host gate
|
|
79
|
+
does not break the old path.
|
|
80
|
+
|
|
81
|
+
## Layer 4 — A/B control (offline, but the discipline that makes the above meaningful)
|
|
82
|
+
|
|
83
|
+
With all three fix sites neutered, **exactly 9 tests fail** — one per claimed behaviour. Restored:
|
|
84
|
+
256 passed. No test passes vacuously.
|
|
85
|
+
|
|
86
|
+
## Known limitation hit during verification, and how it was routed around
|
|
87
|
+
|
|
88
|
+
A first `t2i` attempt died at **exit 3 / HTTP 401 on `project.createProject`** — open issue
|
|
89
|
+
[#561](https://github.com/ffroliva/gflow-cli/issues/561), *not* this change: unmodified `develop`
|
|
90
|
+
was A/B'd and failed **identically** (same exit, same route). Passing an existing `--project` skips
|
|
91
|
+
project creation and routes past it. `gflow project list` succeeded throughout, confirming the
|
|
92
|
+
session itself was valid — the #561 signature exactly.
|
|
93
|
+
|
|
94
|
+
## Recon for the follow-up (support for the migrated frontend)
|
|
95
|
+
|
|
96
|
+
The migrated composer is **not** control-less; it expresses controls differently. It exposes **no
|
|
97
|
+
`data-testid`** and **zero ligature `<i>`**, but 13 `button[aria-label]` values:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Back button to go to previous page · More options for the project · Search ·
|
|
101
|
+
Filtering and sorting options · Add media menu · Product help · Tile grid settings ·
|
|
102
|
+
More options · Favourite · Reuse prompt · Add ingredients to the prompt box ·
|
|
103
|
+
Settings trigger · Start generation
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`Settings trigger` and `Start generation` are the functional equivalents of the classic `crop_*`
|
|
107
|
+
trigger and submit button. **Caveat for whoever builds on this:** `aria-label` values are
|
|
108
|
+
*translated*, so these strings are Tier-2 at best and violate the locale-invariance rule as literal
|
|
109
|
+
selectors. The durable anchors are structural — button ordering within the composer container,
|
|
110
|
+
`svg` presence, and ARIA *roles* — and deriving them needs a second probe across locales.
|
|
111
|
+
|
|
112
|
+
## Verdict
|
|
113
|
+
|
|
114
|
+
| Claim | Status |
|
|
115
|
+
|---|---|
|
|
116
|
+
| Exit 36 fires on a real migrated load | ✅ **VERIFIED LIVE** |
|
|
117
|
+
| `_check_logged_in` accepts the real migrated host | ✅ **VERIFIED LIVE** |
|
|
118
|
+
| Old-host generation path unregressed | ✅ **VERIFIED LIVE** (exit 0, real artifact) |
|
|
119
|
+
| gflow *drives* the migrated frontend | ❌ **NOT CLAIMED** — out of scope; #639 stays open |
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Live Verification — v0.66.1 (migrated-origin fixes for #639/#643)
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-09-03 · **Account:** ffroliva@gmail.com · **Platform:** Windows 11, Chrome strategy
|
|
4
|
+
**Credits spent:** **0** — one Imagen image (images are credit-free) plus read-only probes.
|
|
5
|
+
|
|
6
|
+
## What had to be proven
|
|
7
|
+
|
|
8
|
+
Two fixes, both on the migrated-origin path, and both verifiable live because the account is
|
|
9
|
+
inside Google's rollout:
|
|
10
|
+
|
|
11
|
+
1. `get_ui_driver` fails fast on `flow.google.com` instead of probing a DOM that cannot answer.
|
|
12
|
+
2. The account locale is recovered from `<html lang>` when the migrated URL carries no segment.
|
|
13
|
+
|
|
14
|
+
Plus the property that matters more than either: **the old host still works.**
|
|
15
|
+
|
|
16
|
+
## Layer 1 — the migrated path, measured on a real migrated load
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"final_url": "https://flow.google.com/project/c5550ed7-...",
|
|
21
|
+
"host_kind": "migrated",
|
|
22
|
+
"get_ui_driver": { "raised": "FlowHostMigratedError", "ms": 0,
|
|
23
|
+
"exit_code": 36, "retryable": true, "names_host": true },
|
|
24
|
+
"await_url_settled": { "result": null, "ms": 0 },
|
|
25
|
+
"locale_recovery": { "html_lang": "en-GB", "from_url": null, "from_lang_attr": "en" }
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
| | before | after (measured) |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `detect_ui_mode` poll window | ~8 s | skipped |
|
|
32
|
+
| crop selector cascade | ~24 s | skipped |
|
|
33
|
+
| `await_url_settled` | 4018 ms | **0 ms** |
|
|
34
|
+
| **time to exit 36** | **~36 s** | **0 ms** |
|
|
35
|
+
| locale on migrated origin | `null` (and demoted a learned locale) | **`en`** recovered from `<html lang>` |
|
|
36
|
+
|
|
37
|
+
`ui_driver.migrated_host_bail` is logged, so the fast path is observable rather than inferred.
|
|
38
|
+
|
|
39
|
+
## Layer 2 — no regression on the old host (full generation, exit 0)
|
|
40
|
+
|
|
41
|
+
The rollout still flaps on this account, and a `gflow image t2i --project <existing>` run landed
|
|
42
|
+
on the **old** host during verification:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
EXIT=0 ELAPSED_MS=42168
|
|
46
|
+
status: ok | model: NARWHAL
|
|
47
|
+
dims: 768x1376 | tmp/lv661/images/2026-09-03/0add6af6-...-_1.jpg
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Real image generated and written. The host guard is scoped to the migrated origin and does not
|
|
51
|
+
short-circuit the path that works.
|
|
52
|
+
|
|
53
|
+
## Layer 3 — offline
|
|
54
|
+
|
|
55
|
+
- 5 + 8 tests written **red first** across the two fixes.
|
|
56
|
+
- **A/B controls:** neutering the early bail fails exactly 3; neutering the locale fix fails
|
|
57
|
+
exactly 8 — one per claimed behaviour, no test passing vacuously. No-regression tests pass in
|
|
58
|
+
**both** directions.
|
|
59
|
+
- `1614 passed / 3 skipped`; ruff clean; pyright 78 = `develop` baseline.
|
|
60
|
+
|
|
61
|
+
## Recorded as NOT verified rather than omitted
|
|
62
|
+
|
|
63
|
+
- **Driving the migrated frontend.** Still impossible; #639 stays open. These fixes make the
|
|
64
|
+
failure fast and honest, not survivable.
|
|
65
|
+
- **A non-English migrated locale end to end.** `html lang=pt` was measured on `denon82`'s
|
|
66
|
+
migrated load, but the recovery path was exercised live only on `en-GB` → `en`. The `pt` case
|
|
67
|
+
is unit-tested, not live-run.
|
|
68
|
+
- **The `en-GB` → `en` region reduction against a locale where region is load-bearing**
|
|
69
|
+
(`zh-Hans`/`zh-Hant`). Only two locales observed; flagged in the docstring.
|
|
@@ -4,6 +4,81 @@
|
|
|
4
4
|
|
|
5
5
|
## Current release
|
|
6
6
|
|
|
7
|
+
**v0.66.1 — alpha.** **The migrated-origin failure went from 36 seconds of doomed probing to
|
|
8
|
+
instant, and stopped throwing away a locale it had already learned.**
|
|
9
|
+
|
|
10
|
+
v0.66.0 taught gflow to *name* Google's `flow.google.com` migration
|
|
11
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639)). This release makes living with it
|
|
12
|
+
cheap. Two fixes, both measured on real migrated loads rather than reasoned about:
|
|
13
|
+
|
|
14
|
+
**Fail fast.** The migrated frontend renders none of the controls gflow drives, so every DOM
|
|
15
|
+
probe was doomed before it started — yet a run still burned the `detect_ui_mode` poll window
|
|
16
|
+
(~8 s, both arms missing), the crop cascade (~24 s) and the URL settle (4 s) before raising
|
|
17
|
+
`FlowHostMigratedError`. Because the rollout flaps per page load and callers retry on exit 36,
|
|
18
|
+
that was paid on **every attempt of a retry loop**. The host is knowable from `page.url` in
|
|
19
|
+
microseconds; measured live, exit 36 now arrives in **0 ms**.
|
|
20
|
+
|
|
21
|
+
**Stop discarding the locale.** The migrated origin serves `/project/<id>` with no
|
|
22
|
+
`/fx/<locale>/tools/flow` segment, so locale resolution was structurally blind there — and
|
|
23
|
+
`next_locale_state("pt", None)` then *demoted* an already-learned locale to PROVISIONAL on
|
|
24
|
+
every migrated load, silently undoing [#587](https://github.com/ffroliva/gflow-cli/issues/587).
|
|
25
|
+
The locale had not disappeared with the URL shape; it was in `<html lang>` the whole time.
|
|
26
|
+
Measured on two accounts, `<html lang>` **agreed with the URL segment wherever both existed** —
|
|
27
|
+
which is what licenses it as a fallback, where `navigator.language` (which reports the value
|
|
28
|
+
gflow itself sets) would not
|
|
29
|
+
([#643](https://github.com/ffroliva/gflow-cli/issues/643)).
|
|
30
|
+
|
|
31
|
+
Neither fix makes the migrated frontend drivable — #639 stays open for that. What they buy is a
|
|
32
|
+
failure that is instant and honest instead of slow and lossy.
|
|
33
|
+
|
|
34
|
+
Verification: [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md) — proven on **both sides
|
|
35
|
+
of the still-flapping rollout** at zero credits: 0 ms exit 36 on a migrated load, and minutes
|
|
36
|
+
later **exit 0** with a real 768x1376 JPEG on an old-host load, proving the guard is scoped.
|
|
37
|
+
|
|
38
|
+
<details><summary>v0.66.0 — naming Flow's flow.google.com migration</summary>
|
|
39
|
+
|
|
40
|
+
**v0.66.0 — alpha.** **Google started moving Flow to a new domain, and gflow blamed its own
|
|
41
|
+
selectors for it.**
|
|
42
|
+
|
|
43
|
+
On a migrated page load, `labs.google/fx/tools/flow/project/<id>` redirects to
|
|
44
|
+
`flow.google.com/project/<id>` and serves a rewritten frontend containing **zero `<i>`
|
|
45
|
+
elements**. Every gflow selector anchors on Material Symbols ligatures, so cohort detection
|
|
46
|
+
and every mode control missed at once and the run died `UiSelectorDriftError` — exit 23,
|
|
47
|
+
`retryable: false`. That error means "a selector rotted, file a bug", so it sent operators
|
|
48
|
+
hunting where nothing was broken. The selectors are correct for the host they were written
|
|
49
|
+
against; that host is being replaced under them
|
|
50
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639), reported by
|
|
51
|
+
[@maipmacrothorax-75](https://github.com/maipmacrothorax-75) with measurements from both
|
|
52
|
+
sides of the rollout).
|
|
53
|
+
|
|
54
|
+
The rollout **flaps per page load** — the same account, profile and project land on the old
|
|
55
|
+
host on one navigation and the migrated one on the next — so a re-run frequently succeeds,
|
|
56
|
+
which `retryable: false` was throwing away. gflow now recognises the migrated origin and
|
|
57
|
+
raises a distinct, **retryable** `FlowHostMigratedError` (exit 36). CLI and MCP both inherit
|
|
58
|
+
it: they share the raise site, and `is_retryable` is a single source of truth for the
|
|
59
|
+
`--json`, MCP and worker envelopes.
|
|
60
|
+
|
|
61
|
+
Tracing the same root cause turned up three things the report did not name. `_check_logged_in`
|
|
62
|
+
hard-required `labs.google` in the URL, so a valid authenticated session on the migrated host
|
|
63
|
+
was read as **logged-out** — and that gate was a *substring* match, satisfied by any foreign
|
|
64
|
+
URL merely carrying the string in a path or query. Separately, `UiSelectorDriftError` is an
|
|
65
|
+
incident-**capture** trigger, so swapping in a new class would have silently switched off
|
|
66
|
+
bundle capture for exactly the failure whose evidence is most wanted; a test now pins that
|
|
67
|
+
invariant across all four arms of the raise site rather than a list of names.
|
|
68
|
+
|
|
69
|
+
**This does not add support for the migrated frontend.** It converts a confusing hard failure
|
|
70
|
+
into a clear retryable one. Once the rollout completes for an account, no retry will help —
|
|
71
|
+
#639 stays open for that work, with the anchor recon it needs already recorded.
|
|
72
|
+
|
|
73
|
+
Verification: [LIVE_VERIFICATION_v0.66.0](LIVE_VERIFICATION_v0.66.0.md) — proven against the
|
|
74
|
+
**real** migrated frontend at zero credits (`i_total: 0`, `flow_host_kind: "migrated"`,
|
|
75
|
+
`check_logged_in: true`, exit 36, `retryable: true`), with a credit-free `image t2i` on the
|
|
76
|
+
old host minutes earlier completing exit 0 to prove no regression.
|
|
77
|
+
|
|
78
|
+
</details>
|
|
79
|
+
|
|
80
|
+
<details><summary>v0.65.0 — the referenceEntity guard that had never fired</summary>
|
|
81
|
+
|
|
7
82
|
**v0.65.0 — alpha.** **A safety net that had never once fired, and two crashes that spent
|
|
8
83
|
your credits before failing.**
|
|
9
84
|
|
|
@@ -45,6 +120,8 @@ regardless of matcher — [#619](https://github.com/ffroliva/gflow-cli/issues/61
|
|
|
45
120
|
Verification:
|
|
46
121
|
[LIVE_VERIFICATION_reference_entity_guard](LIVE_VERIFICATION_reference_entity_guard.md).
|
|
47
122
|
|
|
123
|
+
</details>
|
|
124
|
+
|
|
48
125
|
<details><summary>v0.64.0 — <code>i2v --end-frame</code> on Omni 1.1 Flash</summary>
|
|
49
126
|
|
|
50
127
|
**v0.64.0 — alpha.** **`gflow video i2v --model omni-flash --end-frame` — first+last
|
|
@@ -443,6 +520,8 @@ reporter-verified e2e on macOS).
|
|
|
443
520
|
|
|
444
521
|
| Milestone | Status |
|
|
445
522
|
|---|---|
|
|
523
|
+
| Migrated-origin runs fail instantly (0 ms) and keep their learned locale | ✅ done (v0.66.1) |
|
|
524
|
+
| Flow `flow.google.com` migration named as its own retryable failure (exit 36) | ✅ done (v0.66.0) |
|
|
446
525
|
| Repo scaffold, CI, license, README, disclaimer | ✅ done |
|
|
447
526
|
| Auth login flow (one-time browser capture) | ✅ done |
|
|
448
527
|
| Video: `t2v` / `i2v` / `batch` (Veo 3.1) | ✅ done (v0.2.0a1) |
|
|
@@ -1642,6 +1642,7 @@ shell scripts can branch on the failure mode without parsing stderr.
|
|
|
1642
1642
|
| `33` | — (`gflow doctor` verdict) | Doctor found warn/fail findings — a successful diagnosis, not an error class | Review the report; see [`gflow doctor`](#gflow-doctor) |
|
|
1643
1643
|
| `34` | `SyncPartialError` | `gflow data sync` failed on some projects but succeeded on others — completed writes stay committed | Retryable: re-run the same command; it resumes with what is still nameless (see [`gflow data sync`](#gflow-data-sync)) |
|
|
1644
1644
|
| `35` | `ExtendUnavailableError` | No Veo extend model is orderable for this account and aspect — the extend family is tier-gated and there is no square variant. **Never auto-retry**: a tier gate does not clear on its own. |
|
|
1645
|
+
| `36` | `FlowHostMigratedError` | Flow served the project from `flow.google.com` — the origin Google is migrating the app onto — whose frontend renders none of the controls gflow drives. Not selector drift (23) | **Retryable while the rollout flaps**: the same account lands on the old host on one page load and the new one on the next, so re-running often succeeds. If every attempt now lands on `flow.google.com`, the migration has completed for your account and retrying will not help — see [#639](https://github.com/ffroliva/gflow-cli/issues/639) |
|
|
1645
1646
|
| `130`| SIGINT | User-interrupted (Ctrl-C) | — |
|
|
1646
1647
|
|
|
1647
1648
|
**Exit code 16 — data store / migration error.** Fires when:
|
|
@@ -792,8 +792,23 @@ class FlowApiClient:
|
|
|
792
792
|
segment = routes.locale_segment_from_url(settled or "")
|
|
793
793
|
if segment is not None:
|
|
794
794
|
logger.info("client.account_locale_resolved", locale=segment, url=settled)
|
|
795
|
-
|
|
796
|
-
|
|
795
|
+
return segment
|
|
796
|
+
# #643: the migrated flow.google.com origin serves /project/<id> with no
|
|
797
|
+
# locale segment, so the URL can never answer there — but Flow still
|
|
798
|
+
# renders the account locale into <html lang>. Without this the resolver
|
|
799
|
+
# returns None and `next_locale_state` DEMOTES an already-learned locale
|
|
800
|
+
# to PROVISIONAL (measured: a pt account lost its "pt" on every migrated
|
|
801
|
+
# load). Best-effort: a probe failure must never break navigation.
|
|
802
|
+
try:
|
|
803
|
+
lang = await page.evaluate("() => document.documentElement.lang || ''")
|
|
804
|
+
except Exception as exc: # noqa: BLE001 - observation only
|
|
805
|
+
logger.info("client.account_locale_lang_probe_failed", error=type(exc).__name__)
|
|
806
|
+
lang = None
|
|
807
|
+
segment = routes.locale_segment_from_lang_attr(lang)
|
|
808
|
+
if segment is not None:
|
|
809
|
+
logger.info("client.account_locale_resolved", locale=segment, source="html_lang")
|
|
810
|
+
return segment
|
|
811
|
+
logger.info("client.account_locale_unresolved", last_url=settled)
|
|
797
812
|
return segment
|
|
798
813
|
|
|
799
814
|
async def _launch_persistent_context(self, kwargs: JsonObject) -> BrowserContext:
|
|
@@ -212,6 +212,38 @@ def locale_segment_from_url(url: str) -> str | None:
|
|
|
212
212
|
return match.group(1).lower()
|
|
213
213
|
|
|
214
214
|
|
|
215
|
+
_LANG_ATTR_RE = re.compile(r"^([a-z]{2,3})(?:-[a-z]{2,4})?$")
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def locale_segment_from_lang_attr(lang: str | None) -> str | None:
|
|
219
|
+
"""Derive Flow's locale SEGMENT from a page's ``<html lang>`` attribute (#643).
|
|
220
|
+
|
|
221
|
+
Needed because the migrated ``flow.google.com`` origin serves ``/project/<id>``
|
|
222
|
+
with **no locale segment at all** — :func:`locale_segment_from_url` is
|
|
223
|
+
structurally blind there. The locale did not disappear with the URL shape; it
|
|
224
|
+
is still served in the document.
|
|
225
|
+
|
|
226
|
+
Measured 2026-09-03 on two profiles, old host vs migrated:
|
|
227
|
+
|
|
228
|
+
* ``ffroliva`` old ``/fx/tools/flow`` (bare), ``lang=en`` -> migrated ``lang=en-GB``
|
|
229
|
+
* ``denon82`` old ``/fx/pt/tools/flow``, ``lang=pt`` -> migrated ``lang=pt``
|
|
230
|
+
|
|
231
|
+
``html lang`` **agreed with the URL segment wherever both existed**, which is
|
|
232
|
+
what licenses it as a fallback. Unlike ``navigator.language`` — which reports
|
|
233
|
+
the value gflow itself sets when it launches the context, and so answers
|
|
234
|
+
confidently but wrongly — this attribute is server-rendered by Flow.
|
|
235
|
+
|
|
236
|
+
The region suffix is dropped (``en-GB`` -> ``en``) because Flow's URL segments
|
|
237
|
+
carry no region, and the two derivations must stay comparable. Anything that
|
|
238
|
+
is not a plausible tag returns ``None`` — "build the bare URL" is always safe,
|
|
239
|
+
and guessing is the defect this exists to avoid.
|
|
240
|
+
"""
|
|
241
|
+
if not lang:
|
|
242
|
+
return None
|
|
243
|
+
match = _LANG_ATTR_RE.match(lang.strip().lower())
|
|
244
|
+
return match.group(1) if match else None
|
|
245
|
+
|
|
246
|
+
|
|
215
247
|
def project_editor_url(locale: str | None, project_id: str) -> str:
|
|
216
248
|
"""Build the user-facing Flow editor URL for an existing project.
|
|
217
249
|
|