gflow-cli 0.60.0__tar.gz → 0.61.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/CHANGELOG.md +94 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/PKG-INFO +1 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/INDEX.md +1 -1
- gflow_cli-0.61.0/docs/LIVE_VERIFICATION_v0.61.0.md +164 -0
- gflow_cli-0.61.0/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +168 -0
- gflow_cli-0.61.0/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +139 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/pyproject.toml +1 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/canary/run_canary.py +57 -0
- gflow_cli-0.61.0/scripts/dev/live_verify_video_model_select.py +108 -0
- gflow_cli-0.61.0/scripts/dev/spike_model_inventory.py +158 -0
- gflow_cli-0.61.0/scripts/dev/spike_video_tab_dom.py +102 -0
- gflow_cli-0.61.0/scripts/dev/verify_language_agnostic.py +113 -0
- gflow_cli-0.61.0/scripts/dev/verify_locale_navigation_race.py +111 -0
- gflow_cli-0.61.0/scripts/dev/verify_model_attribution.py +82 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/client.py +32 -3
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/routes.py +68 -5
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/_common.py +136 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/base.py +7 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/classic.py +5 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +8 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +4 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/ui_automation.py +160 -41
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/ui_automation_video.py +80 -58
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_character.py +9 -3
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/services/catalog_sync.py +80 -7
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/services/character_create.py +5 -2
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_generate_character.py +28 -5
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_routes_character.py +16 -4
- gflow_cli-0.61.0/tests/api/test_routes_locale.py +68 -0
- gflow_cli-0.61.0/tests/api/transports/test_locale_navigation.py +148 -0
- gflow_cli-0.61.0/tests/api/transports/test_model_selection_loud.py +192 -0
- gflow_cli-0.61.0/tests/api/transports/test_navigation_settled.py +94 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation.py +69 -57
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_video.py +64 -19
- gflow_cli-0.61.0/tests/api/transports/test_video_model_selection_loud.py +179 -0
- gflow_cli-0.61.0/tests/fixtures/flow_model_inventory.json +23 -0
- gflow_cli-0.61.0/tests/fixtures/flow_project_listing_media.json +54 -0
- gflow_cli-0.61.0/tests/flow_selectors/test_model_governance.py +250 -0
- gflow_cli-0.61.0/tests/scripts/test_canary_reexec.py +133 -0
- gflow_cli-0.61.0/tests/services/test_media_attribution.py +91 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/uv.lock +1 -1
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.env.template +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.gitattributes +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.gitignore +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/.secrets.baseline +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/AGENTS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/CLAUDE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/LICENSE +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/RELEASE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/ROADMAP.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docker-compose.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/MCP.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/PROJECT_STATUS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/USAGE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/index.html +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/llms.txt +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/package-lock.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/package.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/README.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/sonar-project.properties +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_config.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_media.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/USAGE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/index.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/requirements.in +0 -0
- {gflow_cli-0.60.0 → gflow_cli-0.61.0}/website/requirements.txt +0 -0
|
@@ -7,6 +7,98 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.61.0] — 2026-08-27
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **A requested image model that cannot be selected no longer generates silently
|
|
15
|
+
on a different one ([#586](https://github.com/ffroliva/gflow-cli/issues/586)).**
|
|
16
|
+
`_select_image_model` swallowed every failure, logged a warning, and let the
|
|
17
|
+
generation proceed on whatever the project's picker already held. Observed
|
|
18
|
+
live: `--model imagen4` produced an image on `NARWHAL` and exited **0** —
|
|
19
|
+
confirmed three ways (log, catalog, and `imageModelName` in a HAR). Flow has
|
|
20
|
+
removed `Imagen 4` from its picker, and `has-text('Nano Banana 2')` had become
|
|
21
|
+
ambiguous with the newly-offered `Nano Banana 2 Lite`, so `.first` resolved by
|
|
22
|
+
DOM order. A missing or ambiguous selector now raises `UiSelectorDriftError`
|
|
23
|
+
(exit 23) naming what Flow actually offered, before anything is submitted.
|
|
24
|
+
|
|
25
|
+
- **A requested video model that cannot be selected no longer generates on a
|
|
26
|
+
different one — and charges for it
|
|
27
|
+
([#539](https://github.com/ffroliva/gflow-cli/issues/539)).** `_select_video_model`
|
|
28
|
+
refused only on i2v-with-frames; a plain `t2v`/`r2v` miss logged "Flow default
|
|
29
|
+
model applies" and returned, so the run generated on whatever the picker already
|
|
30
|
+
held and spent that tier's credits — veo-quality costs 100 against veo-lite's 10.
|
|
31
|
+
Read live, Flow's picker offers exactly `Omni Flash` / `Veo 3.1 - Lite` / `Fast` /
|
|
32
|
+
`Quality`, so `--model veo-lite-lp` matched nothing and was a reachable,
|
|
33
|
+
credit-spending wrong-model path. Every miss is now fatal (exit 18) naming what
|
|
34
|
+
Flow offered, and an **ambiguous** selector is refused rather than resolved with
|
|
35
|
+
`.first`, which picks by DOM order across tiers that differ 10x in cost. Unlike
|
|
36
|
+
the image arm, refusing is unambiguous here: `--model` defaults to `None` on
|
|
37
|
+
every video command, so reaching the picker means a model was explicitly asked
|
|
38
|
+
for. Verified with a zero-credit A/B against live Flow — the pre-fix code
|
|
39
|
+
returned success for a model Flow does not offer; the new code refuses.
|
|
40
|
+
|
|
41
|
+
- **Four more navigations settle before acting on the page
|
|
42
|
+
([#584](https://github.com/ffroliva/gflow-cli/issues/584)).** #580 settled the
|
|
43
|
+
three sites it touched; an audit of every `page.goto` found four more with the
|
|
44
|
+
same defect. The worst is `evaluate_fetch.refresh_auth`, which re-navigates to
|
|
45
|
+
refresh page-context tokens and reported success while the page was still
|
|
46
|
+
moving. Two more (`evaluate_fetch` setup, `sapisidhash` fingerprint capture)
|
|
47
|
+
run `page.evaluate` immediately after navigating, where a mid-flight redirect
|
|
48
|
+
raises "Execution context was destroyed" rather than failing quietly. The
|
|
49
|
+
fourth (`_enter_editor`'s gallery return) ran `_bypass_onboarding` — real
|
|
50
|
+
button clicks — on a page about to navigate away. A new AST-based test pins
|
|
51
|
+
every `goto` to a following settle, so the audit does not have to be redone
|
|
52
|
+
by hand.
|
|
53
|
+
|
|
54
|
+
- **The nightly canary now runs the version of itself that it just pulled
|
|
55
|
+
([#582](https://github.com/ffroliva/gflow-cli/issues/582)).** `run_canary.py
|
|
56
|
+
--pull` fast-forwards the checkout and then keeps executing the copy Python
|
|
57
|
+
loaded at startup, so every runner change was silently one night late. This was
|
|
58
|
+
not theoretical: #572 added `-o junit_logging=all` so a preserved RED would
|
|
59
|
+
carry the structlog line that decides #561, and the next run pulled it and
|
|
60
|
+
still produced a RED with zero log output — three REDs untriageable, and the
|
|
61
|
+
failure reads as "the fix did not work". The runner now re-runs itself once
|
|
62
|
+
when a successful pull changed its own source, guarded by both an env var and
|
|
63
|
+
a content digest (either alone prevents a loop), via `subprocess.run` rather
|
|
64
|
+
than `os.execv` so Task Scheduler still sees one process and the real exit code.
|
|
65
|
+
|
|
66
|
+
- **Editor navigation no longer races a locale redirect on non-`en` accounts
|
|
67
|
+
([#580](https://github.com/ffroliva/gflow-cli/issues/580)).** `_enter_editor`
|
|
68
|
+
built its URL from a hardcoded `locale="en-US"` that no caller ever overrode,
|
|
69
|
+
so every account was sent to `/fx/en/...`. On a pt-BR account Flow redirects
|
|
70
|
+
that to `/fx/pt/...` **after `page.goto` has already returned** — leaving
|
|
71
|
+
overlay dismissal and prompt submission running against a page about to be
|
|
72
|
+
navigated away. That is how [#395](https://github.com/ffroliva/gflow-cli/issues/395)'s
|
|
73
|
+
"character-route bounce" presented. The client now learns the account's real
|
|
74
|
+
locale from where Flow itself lands (the only trustworthy source: `auth/session`
|
|
75
|
+
carries no locale, and `navigator.language` reports the value gflow sets when
|
|
76
|
+
launching the context), hands it to the transport through the typed
|
|
77
|
+
`TransportSetup` seam, and an independent settle-wait tolerates any redirect we
|
|
78
|
+
did not predict. An unresolved locale omits the segment rather than guessing.
|
|
79
|
+
`gflow character create --locale` now defaults to the account's locale instead
|
|
80
|
+
of `en-US`; the previous hardcoded default meant the character editor — the
|
|
81
|
+
surface #395 was reported against — was still routed to `/fx/en/...` on every
|
|
82
|
+
account, and the character route never waited for a settle at all.
|
|
83
|
+
|
|
84
|
+
Live-verified on a pt-BR account with a control arm: the fix navigates
|
|
85
|
+
race-free while the pre-fix path still redirects. Accounts Flow does not
|
|
86
|
+
redirect (e.g. `en`) skip the wait entirely after a single bounded probe, so
|
|
87
|
+
they pay no per-navigation cost.
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- **Server-side model attribution
|
|
92
|
+
([#586](https://github.com/ffroliva/gflow-cli/issues/586)).**
|
|
93
|
+
`parse_media_attribution` reads `modelNameType` / `seed` / `aspectRatio` from
|
|
94
|
+
the `flow.projectInitialData` listing gflow already fetches — the same payload
|
|
95
|
+
the sync path walks for `name` and discards the rest of. This matters most on
|
|
96
|
+
the **agentic** arm, where those fields were previously synthesised from our
|
|
97
|
+
own request because they live in a Web-Worker SSE stream Playwright cannot
|
|
98
|
+
observe; "not visible to the page" was never the same as "unknowable". Verified
|
|
99
|
+
live: an agentic run that requested `GEM_PIX_2` was attributed `NARWHAL` by the
|
|
100
|
+
server, with a real seed where the catalog held `0`.
|
|
101
|
+
|
|
10
102
|
## [0.60.0] — 2026-08-25
|
|
11
103
|
|
|
12
104
|
### Added
|
|
@@ -3155,7 +3247,8 @@ shell-script template that branches on these codes.
|
|
|
3155
3247
|
|
|
3156
3248
|
First skeleton. Not functional end-to-end yet.
|
|
3157
3249
|
|
|
3158
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
3250
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...HEAD
|
|
3251
|
+
[0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
|
|
3159
3252
|
[0.60.0]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...v0.60.0
|
|
3160
3253
|
[0.59.0]: https://github.com/ffroliva/gflow-cli/compare/v0.58.0...v0.59.0
|
|
3161
3254
|
[0.58.0]: https://github.com/ffroliva/gflow-cli/compare/v0.57.1...v0.58.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.61.0
|
|
4
4
|
Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
|
|
@@ -150,7 +150,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
150
150
|
**"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
|
|
151
151
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
152
152
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
153
|
-
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md) (**#528 content-policy 400 classification + #578 labs-lane headers, verified 2026-08-25 on profile `denon82`, ZERO Veo credits** — the 400→`ContentPolicyError` path was proven end-to-end by **fault injection through the real transport** [real browser, real editor, real submit; the 400 fulfilled at the network boundary], passing for BOTH body shapes including the **bare 400 with no `reason` field** — the load-bearing case, since reason-only matching would fall straight back to `WireFormatError`, which is the bug; the new `ui_automation.batch_400_body` discovery log fired live and is what will capture Flow's real 400 shape next time. The **natural** trigger could NOT be reproduced and this is recorded, not omitted: two face-bearing `--ref` images PLUS an age-explicit descriptor [both documented triggers stacked] returned **200** — noting the issue specified character *entities*, a different wire shape from `--ref`, and that Flow's enforcement has shifted before. #578 is the rare case where live verification proved a change **unnecessary** rather than necessary: an interleaved A/B against real `project.createProject` returned 200 on BOTH arms [origin-less control and origin+referer treatment], falsifying the 401 premise it was cherry-picked for; a header-echo cross-check confirmed Playwright adds no Origin of its own, so the control arm was genuinely bare. Incident-bundle `generation_requests[]` is **partial** — the request-summary logger was observed live but no bundle was written [a classified `ContentPolicyError` is handled, so nothing triggers capture]; unit-covered instead. Selector probe exits **2 [infrastructure]** locally without CI credentials, which is its documented contract — an absent credential must never be published as drift); previously: [LIVE_VERIFICATION_v0.59.0](LIVE_VERIFICATION_v0.59.0.md) (**#542 doctor + #543 data sync + #546 refresh-on-miss, verified 2026-08-16 on profile `denon82`, ~4 Imagen credits** — doctor offline-verified (byte-identical never-writes proof); sync live-verified by a zero-credit e2e AND a real 117-project backfill (398 nameless rows → 338 named / 57 tombstoned / 0 failures); refresh-on-miss live-healed a deliberately-corrupted catalog name mid-generation via picker attach with `sync.source=refresh`); previously: [LIVE_VERIFICATION_v0.58.0](LIVE_VERIFICATION_v0.58.0.md) (**#529 catalog-UUID→displayName picker contract + r2v named-reference fixes, verified 2026-08-15/16 on profile `denon82` (pt-BR) via four committed e2e tests, ~7 Imagen + 1 veo-lite generation** — same-project exact-UUID tile attach, cross-project verified upload fallback, loud abort on unresolvable UUIDs, and a real r2v video generated from a catalog name; the r2v e2e caught and fixed two live UI drifts: the picker exposes no accessible tree so tiles are now text-matched, and a tile click attaches directly with the include button demoted to legacy fallback); previously: [LIVE_VERIFICATION_v0.57.1](LIVE_VERIFICATION_v0.57.1.md) (**#493 and #451/#288 root-caused and fixed from live evidence, verified 2026-08-14 on profile `denon82` (pt-BR — the #493 reporter's locale), ZERO credits** — #493 was NOT an unrecognized "third editor variant": "Inicial"/"Final" are the Frames sub-mode's Start/End slots and the "Agente" pill is the ordinary Agent button, both stock classic features. The real trigger is Flow's **expanded chat sidebar**, which removes the classic composer entirely [`crop_* = 0` AND `Agent pill = 0` simultaneously] — one state producing both reported symptoms, and the reason the failure was exit 23 rather than the retryable 25 [no agentic indicator on screen, so the cohort detector matched nothing]. Recovery hinged on a close button scoped to the sidebar's `edit_square` affordance, a single point of failure for any cohort lacking that ligature; an unscoped fallback now fires only from the demonstrably stuck state, **A/B-proven three ways** [scoped broken + fallback present → rescued; both broken → NOT recovered, which is what proves the fallback rescues rather than the surrounding loop]. #451/#288 were never selector drift either — Flow's settings popover is **model-conditional**, only `omni-flash` renders a duration row, so `--duration` on a Veo model hunted a control that is never drawn [verified on 2 accounts × 2 locales]; it now exits 2 before any browser work. Two #493 hypotheses were tested and **refuted** first and are committed so they are not re-derived [a `crop_free` sub-mode trigger — the trigger reflects the *aspect*, not the sub-mode; and a hydration race — a wait was written, A/B-neutered, and cold loads passed 3/3 BOTH ways, so it was reverted rather than shipped]. Recorded not-verified: the `veo_3_1_lite_lower_priority` picker miss is **inconclusive** [the capture came after the menu closed] so that selector was deliberately left untouched, and `chain.py`'s per-link duration aborts mid-run after billing — deferred with the finding recorded). Prior: [LIVE_VERIFICATION_v0.57.0](LIVE_VERIFICATION_v0.57.0.md) (**#299 video UI-mode policy + the #496/#497/#498/#501 MCP wave live-verified 2026-08-14 on profile `ffroliva`, ZERO credits** — three real video-editor loads bound the classic driver through `get_ui_driver` [`ui_driver.bound mode=classic`, 1.2–1.7 s, aborted pre-submit], `--ui-mode agentic` is refused with **exit 2 before any browser launch** [deliberately not exit 28, whose "retry may land it" hint would mislead for a driver that does not exist], and a real-editor classic→agent→classic round-trip proved `ensure_agent_mode`'s aria-verified real click [`{"agent_acted":true,"after_agent":"agent","after_media":"media"}`]; the MCP surfaces were driven over the **real stdio JSON-RPC wire** [subprocess `gflow mcp run`, so registration *and* stream routing are covered]: `--no-spend` cut `tools/list` from 11 tools to 9 with both generate tools genuinely unregistered rather than refused, zero-arg `gflow_auth_status` returned `authenticated` off a live `GET /fx/api/auth/session` **200**, `gflow_list_projects` returned **different project IDs** on offset 0 vs offset 2 [proving the offset is honored — catalogs larger than `limit` were previously unreachable] with `limit=0`→1 and `offset=-5`→0 clamps holding, and the known-issues resource served a **7,543-byte index** against a ~70 KB source file with a **111-byte** capped unknown-slug reply. The #498 rate-limited problem-details envelope is recorded **not live-verified with reason** — exhausting the token bucket needs ≥9 accepted generate calls, so the error path cannot be reached credit-free; it is unit-pinned for both tools instead). Prior: [LIVE_VERIFICATION_v0.56.0](LIVE_VERIFICATION_v0.56.0.md) (**#477 downgrade guard, #478 bounded lease wait, and the #493 mode-switch path live-verified 2026-08-13 on profile `denon82`, images only** — a fresh-project 16:9 `t2i` exercised the #493-touched mode-switch path end-to-end [valid `ff d8` JPEG 1376×768, `image_mode_entered` → `batch_response_captured`]; the #477 guard refused a scratch profile claiming Chromium 999 with **exit 11 pre-auth, pre-credits** at the generation-client call site; #478 was proven with three concurrent runs — `WAIT=0` control failed fast with `ProfileLockedError` exit 11 while the holder held, and the `WAIT=180` waiter polled ~11 s past the holder's natural release then generated successfully; the #493 drift branch itself is a named skip [only an affected account's new-editor cohort can reach it — the fix's message text is unit-pinned], and #479's update notice is deferred-with-reason to a post-release check [it needs a published newer version on PyPI and skips editable installs by design]; an expired denon82 session 401'd the first two attempts [external state, re-login fixed it, recorded not omitted]). Prior: [LIVE_VERIFICATION_v0.55.0](LIVE_VERIFICATION_v0.55.0.md) (**Tier-1 quick wins #471–#476 verified 2026-08-13 on profile `ffroliva`, ZERO credits** — `gflow auth status` probed the real Flow session endpoint live [`Flow session verified as ffroliva@gmail.com.`, exit 0, fail-closed contract pinned]; `gflow mcp setup` ran end-to-end with the real CLI against a scratch copy of the real Claude Desktop config [correct merged entry, pristine original]; the Windows profile-DACL two-step `icacls` idiom was derived empirically [the naive `/t` form broke file access] and is pinned by a real-icacls round-trip test on every Windows host; the incident bug-report template, MCP error funnel [all 11 tools guarded, raw exception text masked], and SecretStr settings are suite-verified with no live-Flow surface — reasons recorded, not omitted). Prior: [LIVE_VERIFICATION_v0.54.0](LIVE_VERIFICATION_v0.54.0.md) (**close-browser guidance #470, character-composer focus fix, overlay/jitter hardening, and SonarCloud-S2245 RNG swap live-verified 2026-08-12 on profile `ffroliva`, ZERO credits** — the new #470 login wording printed verbatim and the manual-close → `auth_flow_session_verified` round-trip worked end-to-end; a Classic-UI `t2i` produced a real 1024×1024 JPEG [`ff d8 ff e0`] exercising overlay dismissal + jitter + image-composer submit + mode controller, and a credit-free `character create` [entity `da3cd647…`, face 1376×768 JPEG] exercised the character-composer path directly [`entering_character_editor` → `prompt_submitted` → `entity_patched` → `completed`]; the first `t2i` hit the known agentic-cohort video-for-image condition [correctly refused via `WireFormatError`, tracked by #299, not a regression] and Classic UI worked around it. First mainline release after the orphaned v0.53.0/v0.53.1 tags — CHANGELOG restores honest 0.53.x sections). Prior: [LIVE_VERIFICATION_v0.52.0](LIVE_VERIFICATION_v0.52.0.md) (**batch DAG references #317, character entity provenance recording #402, and video duration selector cascade fix #451 live-verified 2026-08-05** — 3/3 live E2E tests in `tests/e2e/test_entity_provenance_e2e.py` passed clean on profile `ffroliva`, 5-layer evidence ledger verified). Prior: [v0.51.0](LIVE_VERIFICATION_v0.51.0.md) (**dependency/security/test-correctness release verified 2026-08-05, 1 Imagen credit + 1 Veo attempt** — the only change needing live evidence was the `playwright` bound raise `>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0`, and the 2026-08-03 regression does NOT reproduce on 1.61.0: a live i2v drove `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. `-m e2e_auth` 16/16, daemon e2e 1 passed [MCP over Streamable HTTP — the first live coverage that test has ever had, it was structurally incapable of passing before], MCP Tasks 5/5 layers, 2923 offline tests, `pip-audit --all-extras` clean. **No finished mp4 is claimed** — Flow's own generation returned `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT`, server-side. Defect found and recorded not omitted: Flow dropped the duration-tab UI so **`--duration` is currently broken for i2v**, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0 — [#451](https://github.com/ffroliva/gflow-cli/issues/451)). Prior: [v0.50.0](LIVE_VERIFICATION_v0.50.0.md) (**MCP Tasks extension SEP-2663, non-blocking task handle responses, CLI/MCP output path hardening -o/--output, and Telegram PR triage alert resilience verified 2026-08-04** — 5-layer evidence ledger note generated at `tmp/live-verify/mcp-tasks.md` confirming instant task handle return, working status queries, and cancelled status DB state transitions; full 118-test suite green). Prior: [v0.49.0](LIVE_VERIFICATION_v0.49.0.md) (**#125 `omni-flash` start-frame I2V video generation, Playwright dependency upper-bound pin `>=1.59.0,<1.60.0`, submission stage watchdog timeout, and #404 count-tab fail-closed logic verified 2026-08-03** — 0-credit wire intercept captured `batchAsyncGenerateVideoStartImage` with `startImage` bound; live costed generation on `omni-flash` I2V produced a 1.2MB valid mp4 video asset on `ffroliva`; full 2902-test release suite green). Prior: [v0.48.0](LIVE_VERIFICATION_v0.48.0.md) (**#411 predictable `-o`/`--output` paths, offline-verified 2026-08-02, ZERO credits** — exact single-target local writes + `_1`/`_2` multi-count **image** suffixes proven by the CLI suite; the pre-tag council audit [RED, then resolved] re-scoped the release to the truthful surface: a dead MCP `output` param was deleted [worker queue never read it — #414], cloud `-o` targets and video multi-count suffixes are follow-ups [#415], and two tautological video-path tests are recorded as weak evidence rather than claimed as proof; storage-layer S3 writes verified against Docker MinIO at the layer level only; 2888-test release tree green; the live-Flow run aborted pre-generation on an expired denon82 session [`AuthExpiredError` 401, correct RFC-7807 contract + remediation hint, $0] — recorded, not omitted; live re-run queued for the next authenticated session). Prior: [v0.47.0](LIVE_VERIFICATION_v0.47.0.md) (**MCP SDK 2.0.0 migration + dual-era protocol + #402 entity provenance recording live-verified 2026-08-01, ZERO credits** — stdio JSON-RPC initialization handshake verified over subprocess transport, `resolve-drift` CI job added to prevent dependency drift, and 121 unit tests in `tests/data` passed). Prior: [v0.46.1](LIVE_VERIFICATION_v0.46.1.md) (**#404 classic count-setter fix live-verified 2026-07-31 on the reporter's exact environment, ZERO credits** — credit-free DOM recon proved Flow renamed the count-tab labels to uniform `xN` [`x1` replaces `1x`, image AND video rows], that `nth(0)` of the old filtered set landed on the selected `x2` and actively moved the count AWAY from the target, and that a digit-keyed click on `x1` converges instantly and persists without a Save commit; the new classic e2e then passed live [count=1 against a fresh project displaying 2 → exactly 1 image; count=2 early-exit → exactly 2], and the #313 agentic count-enforcement e2e passed 4/4 [counts 1–4 vs deliberately mismatched sticky defaults, magic-byte-verified downloads] after its stale setup was repaired [Flow now loads the editor in classic mode — the setup needed an Agent-pill toggle before the `tune` icon; test-only fix, no product code implicated]; the video output-count cascade carries a recorded waiver [full drive costs Veo credits; its exact selector shape was exercised live in the spike's cleanup step]). Prior: [v0.46.0](LIVE_VERIFICATION_v0.46.0.md) (**#387 provider-agnostic prompt-tools transport live-verified 2026-07-28, ZERO credits** — a four-probe capability spike passed 4/4 against BOTH a non-Google gateway and Google's OpenAI-compat endpoint, including a *semantic* multimodal check [a generated solid-red JPEG round-tripped and the model answered 'Red'], which is what proved the native Gemini `inlineData` path could be deleted outright rather than kept as a fallback; the real CLI then returned `was_expanded: true` on gateway/gateway-no-model/Google-default, emitted the loud one-time notice + no-op for the removed `GFLOW_CLI_GEMINI_API_KEY`, and made NO network call when unconfigured. Live verification caught two defects a fully green 2849-test offline suite missed: Google's compat endpoint has no server-side default model [`400 "model is not specified"`, silently no-oping the DEFAULT configuration], and the first redirect guard did not actually work because `build_opener()` installs its default handlers regardless of arguments, so `Authorization` would still have been replayed cross-host. `/code-review high` is recorded as NOT run — it is user-triggered only). Prior: [v0.45.0](LIVE_VERIFICATION_v0.45.0.md) (**#393 UUID `--ref` binding + #395 character-entity binding live-verified 2026-07-27/28** — a controlled A/B on identical input flipped `--ref` from exit 9 to exit 0 via the catalog-backed upload fallback, with the anti-silence guard [an unbindable ref aborts non-zero and writes no image] pinned by a live e2e; picker DOM + HAR showed Flow indexes a short auto-caption, NOT the prompt, so a prompt-derived search hint was dropped rather than shipped on assumption; a CDP spike against Flow's own character flow then captured the `entityContext` contract that gflow's generations were missing, root-causing #395 to two gflow defects [overlay dismissal Escaping Flow's own composer, and a character-route bounce that sent the prompt to the project composer] — both fixed, both character e2e tests now pass live, including `--format-prompt` [#383], with a read-back confirming the character carries its name and `thumbnail_media_id`). Prior: [v0.44.0](LIVE_VERIFICATION_v0.44.0.md) (**#381 dual-side project management & Playwright Chromium transport live-verified 2026-07-26** — real-editor project creation + rename tRPC server/DOM sync, prompt slugging, `gflow project` subcommand family, HTTP 429 adaptive backoff, and full E2E test suite). Prior: [v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit**). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
153
|
+
**What was actually live-verified for the latest release?** → latest: [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)
|
|
154
154
|
**"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).
|
|
155
155
|
**"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)).
|
|
156
156
|
**"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Live verification — v0.61.0
|
|
2
|
+
|
|
3
|
+
Every claim below was **observed**. Claims that could not be observed are stated
|
|
4
|
+
as such in §6, not omitted.
|
|
5
|
+
|
|
6
|
+
## Environment
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| Date | 2026-08-26 / 2026-08-27 |
|
|
11
|
+
| Profile | `denon82` (account locale **pt**, `html_lang=pt`) |
|
|
12
|
+
| Project | `2ddc3a33-97db-41a0-a0d3-7f9488b0d5a9` |
|
|
13
|
+
| UI arm | classic (cohort flaps per page load — see §6) |
|
|
14
|
+
| CLI | 0.60.0 tree + the five fixes in this release |
|
|
15
|
+
| Credits spent | **one** t2v generation (`omni-flash`). Everything else was credit-free. |
|
|
16
|
+
|
|
17
|
+
## Summary
|
|
18
|
+
|
|
19
|
+
| # | change | verified live | how |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 1 | Video model refusal (#539) | ✅ | zero-credit A/B + two CLI runs |
|
|
22
|
+
| 2 | Image model refusal (#586) | ✅ | CLI, exit 23, 0 files written |
|
|
23
|
+
| 3 | Server-side attribution (#586) | ✅ | real agentic mis-attribution detected |
|
|
24
|
+
| 4 | Locale navigation (#581) | ✅ | pt account + control arm |
|
|
25
|
+
| 5 | Navigation settle audit (#584) | ⚠️ partial | 1 of 4 sites exercised — see §5 |
|
|
26
|
+
| 6 | Canary re-exec (#582) | ⚠️ not yet | unit-tested; first real exercise is tonight |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 1. Video model refusal (#539) — the headline change
|
|
31
|
+
|
|
32
|
+
Flow's video picker, read **while the menu was open**:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
volume_up Omni Flash
|
|
36
|
+
volume_up Veo 3.1 - Lite
|
|
37
|
+
volume_up Veo 3.1 - Fast
|
|
38
|
+
volume_up Veo 3.1 - Quality
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`Veo 3.1 - Lite [Lower Priority]` is **not offered to this account at this
|
|
42
|
+
moment**. That makes `--model veo-lite-lp` a real MISS to test, not a synthetic one.
|
|
43
|
+
|
|
44
|
+
### 1a. Zero-credit A/B against the pre-fix code
|
|
45
|
+
|
|
46
|
+
Model selection happens in the settings panel entirely **before** submit, so both
|
|
47
|
+
arms cost nothing. The "old code" column is a real run of the stashed pre-fix
|
|
48
|
+
source against live Flow — not a reading of the diff.
|
|
49
|
+
|
|
50
|
+
| case | old code | new code |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `omni_flash` | SELECTED | **SELECTED** |
|
|
53
|
+
| `veo_3_1_lite` | SELECTED | **SELECTED** |
|
|
54
|
+
| `veo_3_1_fast` | SELECTED | **SELECTED** |
|
|
55
|
+
| `veo_3_1_quality` | SELECTED | **SELECTED** |
|
|
56
|
+
| `veo-lite-lp` (not offered) | **SELECTED** — returned success | **REFUSED** |
|
|
57
|
+
| ambiguous selector, 3 matches | **SELECTED** — `.first` guess | **REFUSED** |
|
|
58
|
+
|
|
59
|
+
Harness: `scripts/dev/live_verify_video_model_select.py` (6/6 as expected).
|
|
60
|
+
|
|
61
|
+
The ambiguous case was produced by injecting `has-text('Veo 3.1')`, which matches
|
|
62
|
+
Lite + Fast + Quality. The refusal message reported **3 entries match**, i.e. the
|
|
63
|
+
real live count, not a fixture's.
|
|
64
|
+
|
|
65
|
+
### 1b. CLI, end to end
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
gflow video t2v ... --model veo-lite-lp → EXIT 18, nothing submitted
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The RFC 9457 detail names all four models Flow offers and states
|
|
72
|
+
`No credits were spent.`
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
gflow video t2v ... --model omni-flash → EXIT 0
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- `ui_automation_video.model_selected` with `"model": "omni_flash"`
|
|
79
|
+
- `poll_terminal` → `MEDIA_GENERATION_STATUS_SUCCESSFUL`
|
|
80
|
+
- `f41810ea-d2e3-40fe-b834-3eaaaa351a1f.mp4`, **2 250 862 bytes**
|
|
81
|
+
- catalog row records `model: "omni_flash"`
|
|
82
|
+
|
|
83
|
+
The guard does not break the working path.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 2. Image model refusal (#586)
|
|
88
|
+
|
|
89
|
+
`--model imagen4` (an entry Flow has removed) → **EXIT 23**, **0 jpgs written**,
|
|
90
|
+
message naming what Flow does offer. An ambiguous selector → **EXIT 23**,
|
|
91
|
+
`AMBIGUOUS — 2 entries match`. A disambiguated `NARWHAL` selects and generates.
|
|
92
|
+
|
|
93
|
+
Batch containment: with prompt 0 refused and prompt 1 valid, the run reported
|
|
94
|
+
`1/2 succeeded` and **EXIT 0** — one drifted selector does not abort a batch.
|
|
95
|
+
|
|
96
|
+
## 3. Server-side attribution (#586)
|
|
97
|
+
|
|
98
|
+
An agentic run that requested `GEM_PIX_2` was attributed **`NARWHAL`** by
|
|
99
|
+
`flow.projectInitialData`, with a real seed where the catalog held the `0`
|
|
100
|
+
sentinel. `scripts/dev/verify_model_attribution.py` exits **1** on that real
|
|
101
|
+
mismatch. Free, cookie-authenticated, arm-agnostic.
|
|
102
|
+
|
|
103
|
+
## 4. Locale navigation (#581)
|
|
104
|
+
|
|
105
|
+
Today's runs resolved `client.account_locale_resolved locale=pt` and navigated
|
|
106
|
+
`https://labs.google/fx/pt/tools/flow/project/...`. `url_stable_after_goto`
|
|
107
|
+
reported `settle_skipped=false` on the redirecting account and `true` on a
|
|
108
|
+
non-redirecting one, so `en` accounts pay no per-navigation wait.
|
|
109
|
+
|
|
110
|
+
Previously verified across **pt / de / ja / fr / ru** with a control arm showing
|
|
111
|
+
the pre-fix path still racing.
|
|
112
|
+
|
|
113
|
+
## 5. Navigation settle audit (#584) — partial, stated deliberately
|
|
114
|
+
|
|
115
|
+
Four `page.goto` sites gained a settle. Live runs this cycle exercised
|
|
116
|
+
**`_enter_editor`** only (`ui_automation.url_stable_after_goto`, repeatedly).
|
|
117
|
+
|
|
118
|
+
**Not exercised live this cycle:** `evaluate_fetch.refresh_auth`,
|
|
119
|
+
`evaluate_fetch` setup, and the `sapisidhash` fingerprint capture — none of the
|
|
120
|
+
runs above needed a bearer refresh. They are covered by unit tests and by the
|
|
121
|
+
AST ratchet that pins every `goto` to a following settle, which is a weaker
|
|
122
|
+
guarantee than observation and is recorded here as such.
|
|
123
|
+
|
|
124
|
+
## 6. Canary re-exec (#582) — not yet observed
|
|
125
|
+
|
|
126
|
+
The runner re-runs itself once when a successful `--pull` changed its own source.
|
|
127
|
+
Covered by `tests/scripts/test_canary_reexec.py`. Its first **real** exercise is
|
|
128
|
+
the nightly run from the dedicated canary clone; nothing in this cycle triggered
|
|
129
|
+
a self-changing pull, so the behaviour is **unverified in production** and is
|
|
130
|
+
called out rather than assumed.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Also observed: the cohort race is real
|
|
135
|
+
|
|
136
|
+
Two byte-identical `--ui-mode classic` invocations produced different arms
|
|
137
|
+
seconds apart — one bound classic and refused correctly (exit 23), the other
|
|
138
|
+
failed earlier at `mode_control.ensure_media_incomplete` with **exit 31**
|
|
139
|
+
(`FlowAppError`) before model selection ran. This bounds what any pre-submit
|
|
140
|
+
guard can promise and is recorded so it is not mistaken for a regression.
|
|
141
|
+
|
|
142
|
+
## Falsified this cycle
|
|
143
|
+
|
|
144
|
+
The note carried in #539 that *"the video picker uses a different trigger"* is
|
|
145
|
+
**wrong**: `MODEL_PICKER_TRIGGER` and `IMAGE_MODEL_PICKER_TRIGGER` are
|
|
146
|
+
byte-identical strings. The repeated empty menu captures were caused by the
|
|
147
|
+
**capture** — `_switch_to_video_mode` leaves the settings menu open by contract,
|
|
148
|
+
and calling `_open_gen_settings_panel` after it re-clicks the same button and
|
|
149
|
+
toggles the panel shut. A DOM dump settled it in one run:
|
|
150
|
+
`id='radix-:r1q:-trigger-VIDEO'` was present and visible throughout.
|
|
151
|
+
|
|
152
|
+
## 5-layer ledger (the paid video generation)
|
|
153
|
+
|
|
154
|
+
| layer | evidence |
|
|
155
|
+
|---|---|
|
|
156
|
+
| file count | 1 mp4 written |
|
|
157
|
+
| magic bytes | `00 00 00 20 66 74 79 70 69 73 6f 6d` — `ftypisom`, real ISO-BMFF |
|
|
158
|
+
| size | 2 250 862 bytes (not a truncated error page) |
|
|
159
|
+
| structlog invariants | `model_selected model=omni_flash` → `generate_captured status=200` → `poll_terminal SUCCESSFUL` → `video_saved` |
|
|
160
|
+
| user-confirmable artifact | `tmp/f41810ea-d2e3-40fe-b834-3eaaaa351a1f.mp4` |
|
|
161
|
+
|
|
162
|
+
## Cleanup owed
|
|
163
|
+
|
|
164
|
+
- Ad-hoc media in project `2ddc3a33` from the runs above (1 video, several images).
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Spec — Model attribution provenance (observed vs assumed)
|
|
2
|
+
|
|
3
|
+
**Status:** draft for council review. 2026-08-26.
|
|
4
|
+
|
|
5
|
+
**One-line problem:** the catalog's `model` column means *ground truth* on one
|
|
6
|
+
code path and *our own intent* on another, and nothing distinguishes them.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Evidence gathered today (all live, zero credits)
|
|
11
|
+
|
|
12
|
+
Every claim below was observed. Claims I could not observe are in §3.
|
|
13
|
+
|
|
14
|
+
### 1.1 The trigger — a silent wrong-model generation
|
|
15
|
+
|
|
16
|
+
| observation | evidence |
|
|
17
|
+
|---|---|
|
|
18
|
+
| Requested `imagen4` (`IMAGEN_3_5`) | CLI invocation |
|
|
19
|
+
| Model was not applied | log `image_model_not_set model=IMAGEN_3_5` |
|
|
20
|
+
| Generation ran and reported success | **exit 0**, 1 image written |
|
|
21
|
+
| Wire carried a different model | **HAR: `requests[0].imageModelName = 'NARWHAL'`** |
|
|
22
|
+
| Catalog recorded `NARWHAL` | `gflow data list images` |
|
|
23
|
+
| New code refuses instead | **exit 23**, 0 images written |
|
|
24
|
+
|
|
25
|
+
Three independent layers (log, catalog, raw wire) agree.
|
|
26
|
+
|
|
27
|
+
### 1.2 Why it happened — no fallback logic exists
|
|
28
|
+
|
|
29
|
+
`IMAGEN_3_5` appears in exactly four places: the enum, its CLI aliases, its
|
|
30
|
+
reference cap, and its picker selector. **Nothing maps it to `NARWHAL`.**
|
|
31
|
+
|
|
32
|
+
`NARWHAL` is only the CLI default for an *omitted* `--model`; an explicit model
|
|
33
|
+
was passed, so that default never applied.
|
|
34
|
+
|
|
35
|
+
The model came from **residual browser UI state**. Catalog timeline, same project:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
11:55:16 model=NARWHAL proj=2ddc3a33 'a harbour at dawn' <- ran --model nano2
|
|
39
|
+
14:08:07 model=NARWHAL proj=2ddc3a33 'old behaviour check' <- ran --model imagen4
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The earlier command set the picker; the later one failed to change it and
|
|
43
|
+
inherited the selection **two hours later**.
|
|
44
|
+
|
|
45
|
+
So this is not a fallback path — it is an *absence of enforcement*. There is no
|
|
46
|
+
code to review, no constant to grep, no default to point at. The effective model
|
|
47
|
+
is a function of what was run before in that project.
|
|
48
|
+
|
|
49
|
+
### 1.3 Flow's picker no longer matches our registry
|
|
50
|
+
|
|
51
|
+
Read live, menu open:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
🍌 Nano Banana Pro / 🍌 Nano Banana 2 / 🍌 Nano Banana 2 Lite
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `IMAGEN_3_5` → `has-text('Imagen 4')` — **MISS**, entry no longer exists
|
|
58
|
+
- `NARWHAL` → `has-text('Nano Banana 2')` — **AMBIGUOUS**, also matches `2 Lite`
|
|
59
|
+
- `Nano Banana 2 Lite` — a tier we do not model at all
|
|
60
|
+
|
|
61
|
+
`gflow models` still advertises `IMAGEN_3_5 (image4, imagen4)` to users.
|
|
62
|
+
|
|
63
|
+
### 1.4 The deeper defect — provenance
|
|
64
|
+
|
|
65
|
+
| path | `model_name_type` source | meaning |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| classic | `dto.py:183` ← response `generated["modelNameType"]` | **observed** — Flow's own attribution |
|
|
68
|
+
| agentic | `agentic.py:914` ← `pending_model` (the request) | **assumed** — our intent |
|
|
69
|
+
|
|
70
|
+
`recorder.py:503` writes both into the same catalog column.
|
|
71
|
+
|
|
72
|
+
The agentic driver documents why (`agentic.py:862-871`): the real wire values
|
|
73
|
+
"live in the Web-Worker-delegated streamChat SSE stream which Playwright's
|
|
74
|
+
page-level instrumentation cannot observe", so they are "scrape-synthesised
|
|
75
|
+
sentinels".
|
|
76
|
+
|
|
77
|
+
**Consequence:** `gflow data list images` returns truth for classic rows and
|
|
78
|
+
intent for agentic rows, indistinguishably. Any audit, any governance guard, and
|
|
79
|
+
any user query inherits that ambiguity.
|
|
80
|
+
|
|
81
|
+
It also means §1.1's catalog evidence held **only because that run was classic**.
|
|
82
|
+
On the agentic arm the catalog would have recorded `IMAGEN_3_5` — my own
|
|
83
|
+
intent — and the wrong-model generation would have been invisible in the data.
|
|
84
|
+
|
|
85
|
+
### 1.5 Cost currencies are not what I first claimed
|
|
86
|
+
|
|
87
|
+
I asserted a wrong-model generation "billed" the user. **Retracted.**
|
|
88
|
+
|
|
89
|
+
- Image → **0 Flow credits**, metered by a **per-model daily quota**
|
|
90
|
+
(`tests/e2e/test_classic_count_setter_e2e.py:7`; live cost line read `0`)
|
|
91
|
+
- Video → Flow **credits** (live popover: omni-flash 7–15, veo-lite 10,
|
|
92
|
+
veo-fast 20, veo-quality 100)
|
|
93
|
+
|
|
94
|
+
Quota exhaustion surfaces as HTTP 429 naming the model
|
|
95
|
+
(`"You have reached the daily limit for Nano Banana Pro."` →
|
|
96
|
+
`RateLimitError`, exit 4). The real harm of a wrong-model generation is
|
|
97
|
+
consuming **another model's daily allowance** and receiving different output.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 2. Oracles available, per arm
|
|
102
|
+
|
|
103
|
+
| oracle | classic | agentic | cost |
|
|
104
|
+
|---|---|---|---|
|
|
105
|
+
| UI picker state | readable | **does not exist** — model is a natural-language directive; the driver explicitly does not drive the tune popover for model | medium |
|
|
106
|
+
| Request `imageModelName` | on the wire; interception already exists (`_attach_batch_request_logger`) | unverified | ~free |
|
|
107
|
+
| Response `modelNameType` | **already parsed** | **not observable** (SSE inside a Web Worker) | free |
|
|
108
|
+
|
|
109
|
+
**There is no single oracle across both arms.** Classic can be made
|
|
110
|
+
deterministic today for free. Agentic cannot, until the SSE stream is reachable.
|
|
111
|
+
|
|
112
|
+
Precedent for the pattern: `_assert_image_entities_attached` already verifies at
|
|
113
|
+
the wire that a UI attach actually took effect, because a click that silently
|
|
114
|
+
did not apply is this same bug class.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 3. Explicitly NOT established — do not design on these
|
|
119
|
+
|
|
120
|
+
- Whether the agentic arm's submitted `imageModelName` matches the directive.
|
|
121
|
+
**Never observed.** The natural-language directive may or may not be honoured.
|
|
122
|
+
- Numeric daily limits for any image model. Observable only on exhaustion.
|
|
123
|
+
- Whether the daily quota is per-model or per-account.
|
|
124
|
+
- Cost/quota of `Nano Banana 2 Lite`.
|
|
125
|
+
- ~~Whether `veo_3_1_lite_lower_priority` exists in the live picker (#539)~~ —
|
|
126
|
+
**answered 2026-08-26.** The picker rendered exactly `Omni Flash` /
|
|
127
|
+
`Veo 3.1 - Lite` / `Veo 3.1 - Fast` / `Veo 3.1 - Quality` for profile denon82.
|
|
128
|
+
The `[Lower Priority]` tier was **not offered to that account at that moment**,
|
|
129
|
+
which is not proof it does not exist — it may be cohort- or region-gated.
|
|
130
|
+
Recorded as a dated observation in `tests/fixtures/flow_model_inventory.json`.
|
|
131
|
+
|
|
132
|
+
The earlier "the video picker uses a different trigger" note is **FALSIFIED**:
|
|
133
|
+
`MODEL_PICKER_TRIGGER` and `IMAGE_MODEL_PICKER_TRIGGER` are byte-identical
|
|
134
|
+
strings. The empty captures were caused by the CAPTURE, not the product —
|
|
135
|
+
`_switch_to_video_mode` leaves the settings menu open by contract, and calling
|
|
136
|
+
`_open_gen_settings_panel` after it re-clicks the SAME button and toggles the
|
|
137
|
+
panel shut. Two prior captures blamed Flow for an instrument error.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 4. Proposed direction (for the council to attack)
|
|
142
|
+
|
|
143
|
+
1. **Provenance flag first.** The catalog must record whether a value was
|
|
144
|
+
OBSERVED or ASSUMED. Everything downstream inherits this; a guard built on an
|
|
145
|
+
ambiguous column produces confident wrong answers.
|
|
146
|
+
2. **Classic wire check.** Compare response `modelNameType` against
|
|
147
|
+
`request.model`; refuse on mismatch. Free, uses data already parsed.
|
|
148
|
+
3. **Pre-submit refusal** (already implemented on this branch): a model that
|
|
149
|
+
cannot be selected raises before spending.
|
|
150
|
+
4. **Governance guard** (already implemented and mutation-proven): offline CI
|
|
151
|
+
test grading our selectors against a recorded live inventory.
|
|
152
|
+
5. **Agentic observability** — separate investigation; without it the agentic arm
|
|
153
|
+
cannot be verified at all.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. Questions for the council
|
|
158
|
+
|
|
159
|
+
1. Is the provenance flag the right first move, or does it over-engineer a
|
|
160
|
+
two-value distinction that a boolean `verified` column would cover?
|
|
161
|
+
2. Is a post-hoc wire check worth it when the quota is already spent, or should
|
|
162
|
+
effort go to pre-submit enforcement only?
|
|
163
|
+
3. Does the agentic arm's unobservability make the catalog's `model` column
|
|
164
|
+
fundamentally untrustworthy — i.e. should it be nullable rather than assumed?
|
|
165
|
+
4. What breaks this design under: multi-account, concurrent runs, a Flow A/B that
|
|
166
|
+
changes picker ordering, or a model renamed rather than removed?
|
|
167
|
+
5. Is there an oracle for the agentic arm we have not considered (CDP, the
|
|
168
|
+
worker's own network events, tRPC polling, the project's server-side state)?
|