gflow-cli 0.55.0__tar.gz → 0.56.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.55.0 → gflow_cli-0.56.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.env.template +10 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/CHANGELOG.md +31 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/CONFIGURATION.md +3 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/KNOWN_ISSUES.md +32 -6
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/PKG-INFO +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/AUTHENTICATION.md +32 -0
- {gflow_cli-0.55.0/website → gflow_cli-0.56.0}/docs/CONFIGURATION.md +15 -0
- {gflow_cli-0.55.0/website → gflow_cli-0.56.0}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/INDEX.md +4 -1
- gflow_cli-0.56.0/docs/LIVE_VERIFICATION_v0.56.0.md +123 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/PROJECT_STATUS.md +7 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/USAGE.md +7 -3
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/pyproject.toml +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/client.py +18 -3
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/bearer.py +31 -25
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +8 -2
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +20 -14
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/ui_automation.py +13 -4
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/ui_automation_video.py +5 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/verification.py +22 -14
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/browser_manager.py +109 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli.py +7 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/config.py +22 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/errors.py +35 -8
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/profile_lease.py +121 -33
- gflow_cli-0.56.0/src/gflow_cli/update_check.py +151 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_incidents.py +2 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_launch_kwargs.py +49 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_agentic_cohort_detection.py +9 -2
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/test_verification.py +34 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/conftest.py +5 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_browser_manager.py +185 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_errors.py +13 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_profile_lease.py +169 -0
- gflow_cli-0.56.0/tests/test_update_check.py +266 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/uv.lock +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/AUTHENTICATION.md +32 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0/website}/docs/CONFIGURATION.md +15 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0/website}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/KNOWN_ISSUES.md +32 -6
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/USAGE.md +7 -3
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.gitattributes +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.gitignore +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/.secrets.baseline +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/AGENTS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/CLAUDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/LICENSE +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/RELEASE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/ROADMAP.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docker-compose.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/MCP.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/index.html +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/llms.txt +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/sonar-project.properties +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_media.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/index.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.56.0}/website/mkdocs.yml +0 -0
|
@@ -133,6 +133,16 @@
|
|
|
133
133
|
# changes; don't exceed 8 without measuring. Shipped in v0.4.0a2.
|
|
134
134
|
# GFLOW_CLI_CONCURRENCY=1
|
|
135
135
|
|
|
136
|
+
# Seconds to wait for another gflow process to release the profile lease
|
|
137
|
+
# before giving up with ProfileLockedError (0 = fail fast, the default).
|
|
138
|
+
# Holders always run to completion; the waiter takes over on release (#478).
|
|
139
|
+
# GFLOW_CLI_LEASE_WAIT_SECONDS=0
|
|
140
|
+
|
|
141
|
+
# Once-a-day best-effort PyPI check printing a one-line notice when a newer
|
|
142
|
+
# gflow-cli exists (#479). Never blocks; skipped in CI and for
|
|
143
|
+
# editable/source installs. Set to 0 to disable.
|
|
144
|
+
# GFLOW_CLI_UPDATE_CHECK=1
|
|
145
|
+
|
|
136
146
|
# Run Playwright in headless mode for non-`auth login` commands (true|false).
|
|
137
147
|
# Default: false — headed real Chrome is the PRODUCTION default, not a
|
|
138
148
|
# fallback. The ui_automation transport (the only production transport)
|
|
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.56.0] — 2026-08-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Once-a-day PyPI update notice (#479).** gflow now prints a one-line stderr notice when a newer version is on PyPI: cache-served (zero added latency — a stale cache refreshes on a background daemon thread for the next run), capped at one poll per day even when the poll fails, and never blocks or fails a command. Skipped in CI (`CI` env var), for editable/local-source installs (PEP 610 detection), and when `GFLOW_CLI_UPDATE_CHECK=0`.
|
|
15
|
+
|
|
16
|
+
- **Opt-in bounded wait for profile-lease contention (#478).** `GFLOW_CLI_LEASE_WAIT_SECONDS=N` makes a command that hits same-profile contention poll the kernel lock (0.5 s cadence, sync and async call sites alike) and take over as soon as the current holder — a CLI command or a `gflow serve` daemon queue task, both of which release at their natural end — finishes; on timeout it raises the same `ProfileLockedError` (exit 11). Default `0` keeps the historical fail-fast. Triage note: the issue's fuller cooperative-handoff protocol (release-request channel, minimum-hold window) was validated against the actual architecture and dropped — the daemon acquires the lease per task, so every holder's safe release point already coincides with lease release; holders are never asked to release early, which satisfies the no-release-mid-call requirement by construction. Same-process contention always fails fast (waiting on yourself deadlocks).
|
|
17
|
+
|
|
18
|
+
- **Chromium downgrade guard for persisted profiles (#477).** Opening a profile with an older Chromium major version than last wrote it triggers Chromium's downgrade cleanup, which can shred the newer session store and surface as a mystery post-upgrade logout. Every bundled-Chromium open of a persisted profile (generation client, UI-automation transport, the experimental transports, headless verification probe) now compares the profile's `Last Version` against the active engine's bundled Chromium (`playwright`, or `patchright` when selected) and refuses on a major-version downgrade (`ProfileEngineDowngradeError`, exit 11; the fail-closed verification probe reports it as a verification failure) with an error naming both versions and the remedy. Best-effort: `chrome`-strategy profiles and unknown/unparseable versions skip the check; same-major build rollbacks are allowed; `gflow auth login` stays unguarded as the recovery path.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **Mode-switch drift errors now name the right evidence (#493).** An external
|
|
23
|
+
report showed a third, unrecognized Flow editor layout (composer frame slots +
|
|
24
|
+
Agent toggle, no classic `crop_*` settings button) falling through to
|
|
25
|
+
`UiSelectorDriftError` (exit 23). The fall-through detail now states that no
|
|
26
|
+
known Flow cohort matched — i.e. the editor may be a new layout this version
|
|
27
|
+
does not recognize — and the class remediation no longer asks for a "debug
|
|
28
|
+
screenshot from this message" that the mode-switch probe never writes: it
|
|
29
|
+
points at the artifacts that actually exist (the PII-safe
|
|
30
|
+
`diag_mode_switch_miss.json` DOM signature and/or the referenced screenshot,
|
|
31
|
+
plus the incident bundle's `report.md`). Recognizing the new variant itself is
|
|
32
|
+
tracked in #493 and needs an affected account's diagnostics JSON. A post-merge
|
|
33
|
+
`/code-review` pass extended the same correction to the neighboring surfaces it
|
|
34
|
+
had missed: `FlowAgentUiError`'s privacy caveat now also covers the standalone
|
|
35
|
+
`debug_forced_agent_ui.png` its raise site writes, and the KNOWN_ISSUES
|
|
36
|
+
fallback points at the incident bundle's `ui.json` (which carries the DOM
|
|
37
|
+
signature) instead of `report.md` (which does not).
|
|
38
|
+
|
|
10
39
|
## [0.55.0] — 2026-08-13
|
|
11
40
|
|
|
12
41
|
### Added
|
|
@@ -2796,7 +2825,8 @@ shell-script template that branches on these codes.
|
|
|
2796
2825
|
|
|
2797
2826
|
First skeleton. Not functional end-to-end yet.
|
|
2798
2827
|
|
|
2799
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2828
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.56.0...HEAD
|
|
2829
|
+
[0.56.0]: https://github.com/ffroliva/gflow-cli/compare/v0.55.0...v0.56.0
|
|
2800
2830
|
[0.55.0]: https://github.com/ffroliva/gflow-cli/compare/v0.54.0...v0.55.0
|
|
2801
2831
|
[0.54.0]: https://github.com/ffroliva/gflow-cli/compare/v0.53.1...v0.54.0
|
|
2802
2832
|
[0.53.1]: https://github.com/ffroliva/gflow-cli/compare/v0.53.0...v0.53.1
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
| `GFLOW_CLI_HOME` | Platform data dir | Root directory for profiles and config. |
|
|
8
8
|
| `GFLOW_CLI_OUTPUT_DIR` | `~/Downloads/gflow-cli` | Where generated images and videos are saved. |
|
|
9
9
|
| `CHROME_BINARY` | (autodetect) | Override Chrome binary path. Falls back to platform-standard locations. |
|
|
10
|
-
| `GFLOW_CLI_CONCURRENCY` | `
|
|
10
|
+
| `GFLOW_CLI_CONCURRENCY` | `1` | Page-pool size per batch (raising above 1 currently has no effect — see [docs/CONFIGURATION.md](docs/CONFIGURATION.md)). |
|
|
11
|
+
| `GFLOW_CLI_UPDATE_CHECK` | `1` | Once-a-day stderr notice when a newer gflow-cli is on PyPI; `0` disables (v0.56.0). |
|
|
12
|
+
| `GFLOW_CLI_LEASE_WAIT_SECONDS` | `0` | Bounded wait on same-profile lease contention instead of fail-fast (v0.56.0). |
|
|
11
13
|
| `GFLOW_CLI_LLM_BASE_URL` | Google compat endpoint | OpenAI-compatible endpoint for the prompt tools (`--tool`). The on/off switch. |
|
|
12
14
|
| `GFLOW_CLI_LLM_API_KEY` | _(unset)_ | Credential for that endpoint. Optional — omit for a keyless local gateway. [Google key](https://aistudio.google.com/apikey). |
|
|
13
15
|
| `GFLOW_CLI_LLM_MODEL` | _(unset)_ | Model, and therefore the provider selector. Unset = the gateway chooses. |
|
|
@@ -181,6 +181,32 @@ accepted. Two corrections fixed it (verified end-to-end on macOS Apple Silicon):
|
|
|
181
181
|
|
|
182
182
|
Evidence: [LIVE_VERIFICATION_v0.23.0](docs/LIVE_VERIFICATION_v0.23.0.md).
|
|
183
183
|
|
|
184
|
+
### New Flow editor variant (composer frame slots + Agent toggle) is not recognized
|
|
185
|
+
|
|
186
|
+
- **Status:** **Open** — awaiting a DOM signature from an affected account;
|
|
187
|
+
tracked in [#493](https://github.com/ffroliva/gflow-cli/issues/493)
|
|
188
|
+
- **Severity:** High · **Affects:** `gflow image` / `gflow video` generation on
|
|
189
|
+
accounts that received the new editor, any locale
|
|
190
|
+
|
|
191
|
+
A third Flow editor layout was reported on 2026-08-13 (macOS, v0.55.0; also
|
|
192
|
+
v0.53.1): frame-slot buttons ("Initial"/"Final") sit directly on the composer
|
|
193
|
+
next to an "Agent" pill, and there is **no** classic `crop_*` aspect/settings
|
|
194
|
+
button for gflow to drive. The layout matches **none** of the known cohort
|
|
195
|
+
indicators (agentic chat composer, full-page media library), so the mode-switch
|
|
196
|
+
step falls through to `UiSelectorDriftError` (**exit 23**) instead of the
|
|
197
|
+
retryable exit-25 cohort classification. The selector cascade itself is
|
|
198
|
+
locale-invariant — the reporter's Portuguese UI is unrelated.
|
|
199
|
+
|
|
200
|
+
The error detail now names this hypothesis and the run writes a PII-safe DOM
|
|
201
|
+
signature to `diag_mode_switch_miss.json` when it can be captured (structural
|
|
202
|
+
allowlist: ligature names, tag counts — no cookies, tokens, prompts, or page
|
|
203
|
+
text; if the file is absent, attach the incident bundle instead — its
|
|
204
|
+
`ui.json` carries the same DOM signature). **If you hit this, attach that JSON file to
|
|
205
|
+
[#493](https://github.com/ffroliva/gflow-cli/issues/493)** — recognizing the
|
|
206
|
+
variant (and restoring a clean retryable classification, or full support) needs
|
|
207
|
+
exactly that DOM signature. Re-running later may land the classic editor if
|
|
208
|
+
the rollout is still an A/B arm.
|
|
209
|
+
|
|
184
210
|
### Flow's new full-page media-library UI breaks entity attach (A/B rollout)
|
|
185
211
|
|
|
186
212
|
- **Status:** **Open** — Flow-side staged rollout; tracked in
|
|
@@ -203,10 +229,10 @@ classic `crop_*` aspect/mode control, so `gflow image`/`gflow video` can't drive
|
|
|
203
229
|
generation. Rather than the old opaque `UiSelectorDriftError` "file a bug", the
|
|
204
230
|
mode-switch raise site now runs a runtime DOM scan and raises a clear, **retryable**
|
|
205
231
|
`FlowAgentUiError` (**exit 25**, "this cohort flaps; retry shortly"), and dumps a
|
|
206
|
-
DOM-signature diagnostics artifact (`diag_mode_switch_miss.json
|
|
207
|
-
screenshot) for reporting. The cohort is
|
|
208
|
-
within ~12h, so a re-run often lands
|
|
209
|
-
is still out of scope.
|
|
232
|
+
DOM-signature diagnostics artifact (`diag_mode_switch_miss.json`; the incident
|
|
233
|
+
bundle carries a screenshot under `sensitive/`) for reporting. The cohort is
|
|
234
|
+
server-assigned per page load and flaps within ~12h, so a re-run often lands
|
|
235
|
+
the classic UI. Driving the new UI directly is still out of scope.
|
|
210
236
|
|
|
211
237
|
**How to tell which UI your account has:** in the Flow web editor, click
|
|
212
238
|
**Add Media** — a small dialog means the old (working) UI; a navigation to a
|
|
@@ -846,7 +872,7 @@ key — surfaces as a `RuntimeError` that `auth/cookies.py` normalizes to
|
|
|
846
872
|
|
|
847
873
|
- **Status:** Mitigated (crash → typed fail-fast rejection) · **Severity:** Low · **Affects:** all versions
|
|
848
874
|
|
|
849
|
-
Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. Historically this surfaced as an unhelpful Chromium "ProcessSingleton: profile is locked" error partway through a run. As of the profile-lease hardening (production-readiness plan, slice D1/D3), gflow-cli enforces this itself: a cross-process advisory lock (`ProfileLease`, kernel `flock` on POSIX / `msvcrt.locking` on Windows) guards every profile directory. A second `gflow` invocation, `gflow serve` daemon task, or MCP call against an already-leased profile is rejected **immediately** — before any Chrome process starts — with a typed `ProfileLockedError` (**exit code 11**); it never
|
|
875
|
+
Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. Historically this surfaced as an unhelpful Chromium "ProcessSingleton: profile is locked" error partway through a run. As of the profile-lease hardening (production-readiness plan, slice D1/D3), gflow-cli enforces this itself: a cross-process advisory lock (`ProfileLease`, kernel `flock` on POSIX / `msvcrt.locking` on Windows) guards every profile directory. A second `gflow` invocation, `gflow serve` daemon task, or MCP call against an already-leased profile is rejected **immediately** by default — before any Chrome process starts — with a typed `ProfileLockedError` (**exit code 11**); it never silently corrupts the profile. Since #478, setting [`GFLOW_CLI_LEASE_WAIT_SECONDS`](docs/CONFIGURATION.md#gflow_cli_lease_wait_seconds) opts a waiter into a bounded wait that takes over as soon as the current holder finishes (holders always run to completion and are never asked to release early; same-process contention still fails fast — waiting on yourself would deadlock).
|
|
850
876
|
|
|
851
877
|
**Workaround:** use different profiles for parallel work — different profiles acquire independent leases and run fully concurrently.
|
|
852
878
|
|
|
@@ -858,7 +884,7 @@ gflow image batch ./batch-a.tsv --profile work
|
|
|
858
884
|
gflow image batch ./batch-b.tsv --profile personal
|
|
859
885
|
```
|
|
860
886
|
|
|
861
|
-
**Roadmap:** Phase 4 (v0.4.0a2) added a per-worker Page pool on one shared BrowserContext (`GFLOW_CLI_CONCURRENCY=N`), intended to let one `gflow-cli` process fan out multiple in-flight generations, but no current CLI command drives more than one generation at a time through it — the only feature that did (a manifest-driven video batch runner) never worked and was removed. Cross-process same-profile serialization remains a hard constraint (Chromium can only own one persistent context per `user-data-dir`) — but it is now a clean, typed, fail-fast rejection instead of an unstructured crash. Multiple shells against the same profile
|
|
887
|
+
**Roadmap:** Phase 4 (v0.4.0a2) added a per-worker Page pool on one shared BrowserContext (`GFLOW_CLI_CONCURRENCY=N`), intended to let one `gflow-cli` process fan out multiple in-flight generations, but no current CLI command drives more than one generation at a time through it — the only feature that did (a manifest-driven video batch runner) never worked and was removed. Cross-process same-profile serialization remains a hard constraint (Chromium can only own one persistent context per `user-data-dir`) — but it is now a clean, typed, fail-fast rejection instead of an unstructured crash. Multiple shells against the same profile can either use different profiles (fully parallel) or opt into the bounded wait via `GFLOW_CLI_LEASE_WAIT_SECONDS` (serialized, waiter takes over when the holder finishes).
|
|
862
888
|
|
|
863
889
|
---
|
|
864
890
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.56.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
|
|
@@ -369,6 +369,38 @@ Run: gflow auth login --profile default
|
|
|
369
369
|
|
|
370
370
|
Re-running `auth login` refreshes the cookies in place — no other state is lost.
|
|
371
371
|
|
|
372
|
+
## Chromium downgrade guard
|
|
373
|
+
|
|
374
|
+
Chrome profiles are not backward-compatible: opening a profile with an **older**
|
|
375
|
+
Chromium major version than the one that last wrote it triggers Chromium's
|
|
376
|
+
downgrade cleanup, which can leave the newer store — session cookies included —
|
|
377
|
+
unreadable. That surfaces later as a mystery logout after a gflow/Playwright
|
|
378
|
+
downgrade (or a Chrome-strategy profile silently falling back to an older
|
|
379
|
+
bundled Chromium).
|
|
380
|
+
|
|
381
|
+
Every bundled-Chromium open of a persisted profile (the generation client, the
|
|
382
|
+
UI-automation transport, the experimental transports, and the headless
|
|
383
|
+
verification probe) first compares the profile's `Last Version` file against
|
|
384
|
+
the active engine's bundled Chromium (`playwright`, or `patchright` when
|
|
385
|
+
selected) and **refuses to open on a major-version downgrade** (exit 11) with
|
|
386
|
+
an error naming both versions:
|
|
387
|
+
|
|
388
|
+
```text
|
|
389
|
+
ERROR: Profile at ~/.gflow/profile_default was last written by Chromium 150.x,
|
|
390
|
+
but the installed Playwright bundled Chromium is older (149.x). ...
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Remedies: upgrade so the bundled Chromium is at least the profile's version
|
|
394
|
+
(`uv tool upgrade gflow-cli`, then `playwright install chromium`), or re-create
|
|
395
|
+
the profile with `gflow auth login` — login is deliberately *not* guarded, it
|
|
396
|
+
re-mints the session and rewrites the profile, making it the recovery path.
|
|
397
|
+
The guard is best-effort: profiles under the `chrome` strategy (real Google
|
|
398
|
+
Chrome opens them) and any unreadable/unknown version skip the check. One
|
|
399
|
+
surface nuance: the headless verification probe is fail-closed by contract, so
|
|
400
|
+
a refusal there is reported as a verification failure rather than exit 11 —
|
|
401
|
+
the version details still land in the structured log
|
|
402
|
+
(`browser_manager.profile_engine_downgrade`).
|
|
403
|
+
|
|
372
404
|
## Session verification (cookie-store fast path)
|
|
373
405
|
|
|
374
406
|
Since v0.17.0, profile verification (run by `gflow auth login --browser chrome` after
|
|
@@ -260,6 +260,21 @@ GFLOW_CLI_AUTH_LOGIN_TIMEOUT=120 gflow auth login # abort after 2 minutes
|
|
|
260
260
|
**Recommended starting point:** `1` until a concurrent caller lands. Each additional Page would cost ~30–60 MiB of memory on Chromium headless; don't exceed `8` without measuring resident-set size. Cookies and storage state are shared at Context level, so every Page would inherit the signed-in profile for free.
|
|
261
261
|
**Shipped in:** v0.4.0a2.
|
|
262
262
|
|
|
263
|
+
### `GFLOW_CLI_UPDATE_CHECK`
|
|
264
|
+
|
|
265
|
+
**What:** Once-a-day best-effort PyPI check that prints a one-line stderr notice when a newer gflow-cli exists. The notice is always served from a local cache (`<GFLOW_CLI_HOME>/update_check.json`); a stale cache refreshes on a background daemon thread whose result feeds the *next* invocation — the check never blocks or fails a command, and a failed poll still counts toward the once-a-day cap.
|
|
266
|
+
**Values:** `1` (default) | `0` to disable
|
|
267
|
+
**Skipped automatically:** in CI (`CI` env var set) and for editable/local-source installs (PEP 610 `direct_url.json` detection) — "upgrade" advice is wrong there.
|
|
268
|
+
**Shipped in:** #479.
|
|
269
|
+
|
|
270
|
+
### `GFLOW_CLI_LEASE_WAIT_SECONDS`
|
|
271
|
+
|
|
272
|
+
**What:** How long a command waits for another gflow process to release the profile lease before giving up with `ProfileLockedError` (exit 11). The default `0` keeps the historical fail-fast behavior. With a positive value, the waiter polls the kernel lock (0.5 s cadence) and simply takes over when the current holder — a CLI command or a `gflow serve` daemon task, both of which release at their natural end — finishes. Holders are never interrupted or asked to release early.
|
|
273
|
+
**Values:** `0`–`3600` seconds (fractions allowed)
|
|
274
|
+
**Default:** `0` (fail fast)
|
|
275
|
+
**Note:** Same-process contention always fails fast regardless of this setting — the holder is the same process, so waiting would deadlock. See [KNOWN_ISSUES § Same profile can't be used in parallel](../KNOWN_ISSUES.md#same-profile-cant-be-used-in-parallel).
|
|
276
|
+
**Shipped in:** #478.
|
|
277
|
+
|
|
263
278
|
### `GFLOW_CLI_DB_PATH`
|
|
264
279
|
|
|
265
280
|
**What:** Override the path to the local SQLite operations database.
|
|
@@ -45,10 +45,11 @@ historical UI-flake noted in
|
|
|
45
45
|
[`LIVE_VERIFICATION_v0.7.0.md`](LIVE_VERIFICATION_v0.7.0.md#open-follow-ups)
|
|
46
46
|
(transient overlay swallowed the arrow-forward click).
|
|
47
47
|
|
|
48
|
-
**Two extra
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
inside the open
|
|
48
|
+
**Two extra artifact file names worth searching for in the out dir** when the
|
|
49
|
+
mode switch itself fails: `diag_mode_switch_miss.json` (crop-icon dropdown
|
|
50
|
+
trigger not found — a structural DOM signature; this probe writes no
|
|
51
|
+
screenshot) and `debug_no_image_tab.png` (Image tab missing inside the open
|
|
52
|
+
dropdown).
|
|
52
53
|
|
|
53
54
|
Pipe `--verbose` output through `Select-String` (PowerShell) or `grep` to
|
|
54
55
|
filter:
|
|
@@ -131,11 +131,14 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
131
131
|
**"When does the version get bumped?"** → [DEVELOPMENT § Version bump protocol](DEVELOPMENT.md#version-bump-protocol)
|
|
132
132
|
**"How do I embed FlowApiClient in a long-lived worker / service?"** → [USER_GUIDE § Journey 14](USER_GUIDE.md#journey-14--embedding-flowapiclient-in-a-long-lived-worker)
|
|
133
133
|
**"What's the standard way to import gflow errors in my code?"** → [USAGE § Programmatic use](USAGE.md#programmatic-use)
|
|
134
|
+
**"gflow refuses to open my profile after a downgrade (exit 11, 'written by a newer Chromium')"** → [AUTHENTICATION § Chromium downgrade guard](AUTHENTICATION.md#chromium-downgrade-guard)
|
|
135
|
+
**"Two gflow runs on the same profile — can the second one wait instead of failing (exit 11)?"** → [CONFIGURATION § GFLOW_CLI_LEASE_WAIT_SECONDS](CONFIGURATION.md#gflow_cli_lease_wait_seconds) (v0.56.0 opt-in bounded wait)
|
|
136
|
+
**"How do I silence the 'newer version on PyPI' stderr notice?"** → [CONFIGURATION § GFLOW_CLI_UPDATE_CHECK](CONFIGURATION.md#gflow_cli_update_check) (`0` disables; auto-skipped in CI and for editable installs)
|
|
134
137
|
**"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
|
|
135
138
|
**"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)
|
|
136
139
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
137
140
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
138
|
-
**What was actually live-verified for the latest release?** → latest: [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)
|
|
141
|
+
**What was actually live-verified for the latest release?** → latest: [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)
|
|
139
142
|
**"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).
|
|
140
143
|
**"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)).
|
|
141
144
|
**"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,123 @@
|
|
|
1
|
+
# Live verification — v0.56.0
|
|
2
|
+
|
|
3
|
+
> Hand-run on `develop` (post-#504 merge, tree of the v0.56.0 tag) against real
|
|
4
|
+
> Flow on Windows 11, profile `denon82` (chrome strategy), 2026-08-13. Raw logs
|
|
5
|
+
> under `tmp/live-verify/` (gitignored); artifact images under
|
|
6
|
+
> `tmp/live-verify/out/v0.56.0/`.
|
|
7
|
+
|
|
8
|
+
## Environment
|
|
9
|
+
|
|
10
|
+
| | |
|
|
11
|
+
|---|---|
|
|
12
|
+
| Branch | `develop` @ post-#504 (release tree) |
|
|
13
|
+
| Local version | `0.55.0` editable (pre-bump) |
|
|
14
|
+
| Profile | `denon82` (chrome strategy) |
|
|
15
|
+
| Date | 2026-08-13 |
|
|
16
|
+
| OS | Windows 11 |
|
|
17
|
+
|
|
18
|
+
## Pre-tag gates
|
|
19
|
+
|
|
20
|
+
- `/gflow:check`: hygiene + doc links + website PII + mirror sync + ruff check +
|
|
21
|
+
format-check all green; pyright 0 errors; duplication proxy: 2 findings, both
|
|
22
|
+
in code untouched by this release (experimental transports 401-retry; #477
|
|
23
|
+
guard block) — develop's SonarCloud analysis green post-merge.
|
|
24
|
+
- Full test suite: green on develop CI (3.11/3.12/3.13 + ProfileLease matrix on
|
|
25
|
+
3 OSes) for the exact merged tree; touched suites re-run locally (66 passed).
|
|
26
|
+
- `/code-review 504 xhigh` (post-merge): no functional bugs; 4 confirmed
|
|
27
|
+
doc/test-hygiene findings fixed on the release branch (commit `9fb53c2`).
|
|
28
|
+
- `/ponytail:ponytail-review`: lean, no cuts.
|
|
29
|
+
- `/gflow:doc-review`: council verdict **YELLOW / YELLOW / GREEN** across the 3
|
|
30
|
+
auditors — zero Tier-1 (release-blocking) findings; 9 Tier-2 fixes applied in
|
|
31
|
+
the release-prep commit (USAGE lease-wait + jq-pipe note + exit-row updates,
|
|
32
|
+
root CONFIGURATION table, INDEX routing rows, PROJECT_STATUS develop marker +
|
|
33
|
+
#479-deferral note, CHANGELOG section order); Tier-3 deferred (llms.txt blurb,
|
|
34
|
+
ARCHITECTURE module inventory, website-mirror relative-link rewrite). Council
|
|
35
|
+
reports at `tmp/council/0{1,2,3}-*.md` (local-only).
|
|
36
|
+
|
|
37
|
+
## Matrix
|
|
38
|
+
|
|
39
|
+
| # | Feature | Variation | Result |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| 1 | #493 fix — mode-switch path | `image t2i`, fresh project, 16:9 | ✅ exit 0 |
|
|
42
|
+
| 2 | #477 downgrade guard | scratch profile, `Last Version` = 999.0.0.0 | ✅ exit 11 |
|
|
43
|
+
| 3 | #478 lease wait — control | contended t2i, `GFLOW_CLI_LEASE_WAIT_SECONDS=0` | ✅ exit 11 fail-fast |
|
|
44
|
+
| 4 | #478 lease wait — waiter | contended t2i, `GFLOW_CLI_LEASE_WAIT_SECONDS=180` | ✅ waited ≈11 s, then exit 0 |
|
|
45
|
+
| 5 | #479 update notice | — | ⏳ deferred post-release (see below) |
|
|
46
|
+
|
|
47
|
+
## 1. #493 — mode-switch drift fix (happy path)
|
|
48
|
+
|
|
49
|
+
The changed function (`ui_automation_video.py` mode-switch fall-through) sits on
|
|
50
|
+
the live mode-switch path; the *drift branch itself is unreachable on our
|
|
51
|
+
accounts* — it fires only on the unrecognized new editor variant, which no
|
|
52
|
+
available profile has (that is exactly why #493 awaits an affected reporter's
|
|
53
|
+
`diag_mode_switch_miss.json`). Named-skip for the branch; the surrounding path
|
|
54
|
+
was exercised live, and the new message text is pinned by unit tests
|
|
55
|
+
(`test_agentic_cohort_detection.py`, `test_errors.py`).
|
|
56
|
+
|
|
57
|
+
5-layer ledger (run: `t2i-v0.56.0-493-smoke.log`):
|
|
58
|
+
|
|
59
|
+
| Layer | Evidence |
|
|
60
|
+
|---|---|
|
|
61
|
+
| File count | 1 new file `7ae94544-…_1.jpg` in a fresh project |
|
|
62
|
+
| Magic bytes | `FF D8 FF E0` (valid JPEG) |
|
|
63
|
+
| Dimensions | 1376×768 — matches requested `--aspect 16:9` |
|
|
64
|
+
| Structlog | `ui_automation.image_mode_entered` → `gen_settings_opened` → `batch_response_captured` |
|
|
65
|
+
| Artifact | 1,019,459 B image, human-viewable |
|
|
66
|
+
|
|
67
|
+
Note: first two attempts failed `AuthExpiredError` (401 at
|
|
68
|
+
`project.createProject`) — an expired denon82 session, not a code failure;
|
|
69
|
+
`gflow auth login` re-mint fixed it and the same command then passed unchanged.
|
|
70
|
+
Recorded per failure-routing as external state, not a flake of the code under
|
|
71
|
+
test.
|
|
72
|
+
|
|
73
|
+
## 2. #477 — Chromium downgrade guard
|
|
74
|
+
|
|
75
|
+
Scratch profile `profile_scratch477` with `Last Version` = `999.0.0.0` and a
|
|
76
|
+
stub cookies DB; `gflow image t2i … --profile scratch477` (playwright engine,
|
|
77
|
+
`channel=None`) refused **before** launching Chromium:
|
|
78
|
+
|
|
79
|
+
- Exit code **11** (`ProfileEngineDowngradeError`), pre-auth, pre-credits.
|
|
80
|
+
- Error names both versions and prints the documented remediation (upgrade
|
|
81
|
+
engine / chrome channel exemption / re-login recovery path).
|
|
82
|
+
- Log: `477-downgrade-guard-t2i.log`.
|
|
83
|
+
|
|
84
|
+
(`auth status` on the same profile takes the browser_cookie3 fast path and
|
|
85
|
+
never reaches the guarded Playwright open — the guard is still covered there by
|
|
86
|
+
unit tests; the command-level e2e above is the generation-client call site,
|
|
87
|
+
`api/client.py:529`.)
|
|
88
|
+
|
|
89
|
+
## 3–4. #478 — bounded lease wait
|
|
90
|
+
|
|
91
|
+
Three concurrent `image t2i` runs on `denon82` (logs: `478-holder.log`,
|
|
92
|
+
`478-control-nowait.log`, `478-waiter.log`):
|
|
93
|
+
|
|
94
|
+
| Time (UTC) | Event |
|
|
95
|
+
|---|---|
|
|
96
|
+
| 19:44:50 | holder launches browser, holds `ProfileLease` |
|
|
97
|
+
| 19:45:07 | control (`WAIT=0`) → `ProfileLockedError`, **exit 11** — historical fail-fast preserved |
|
|
98
|
+
| 19:45:08 | waiter (`WAIT=180`) starts, lease contended → polls |
|
|
99
|
+
| 19:45:15 | holder finishes naturally, releases lease |
|
|
100
|
+
| 19:45:19 | waiter acquires, launches browser |
|
|
101
|
+
| 19:45:58 | waiter completes generation, **exit 0**, real JPEG written |
|
|
102
|
+
|
|
103
|
+
Holder and waiter each produced a valid image (649.7 K / 818.7 K JPEGs in
|
|
104
|
+
`out/v0.56.0/`); the waiter's takeover happened only after the holder's natural
|
|
105
|
+
release, matching the no-early-release design.
|
|
106
|
+
|
|
107
|
+
## 5. #479 — once-a-day PyPI update notice (deferred, with reason)
|
|
108
|
+
|
|
109
|
+
Cannot be honestly verified pre-release: the notice fires only when PyPI
|
|
110
|
+
carries a **newer** version than the running install, and it is skipped by
|
|
111
|
+
design for editable/local installs (PEP 610) and under `CI`. Post-release plan
|
|
112
|
+
(recorded here per the never-silently-omit rule): after v0.56.0 publishes,
|
|
113
|
+
install `gflow-cli==0.55.0` in a scratch venv and run any command — expect the
|
|
114
|
+
one-line stderr notice naming 0.56.0. Result to be appended below.
|
|
115
|
+
|
|
116
|
+
## Post-tag evidence
|
|
117
|
+
|
|
118
|
+
_(filled after the v0.56.0 PyPI publish)_
|
|
119
|
+
|
|
120
|
+
- #479 update-notice e2e: install `gflow-cli==0.55.0` in a scratch venv, run a
|
|
121
|
+
command, expect the one-line stderr notice naming 0.56.0 — result pending.
|
|
122
|
+
- Released-wheel smoke: install `gflow-cli==0.56.0` from PyPI, run a live t2i —
|
|
123
|
+
result pending.
|
|
@@ -4,8 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
## Current release
|
|
6
6
|
|
|
7
|
+
**v0.56.0 — alpha.** **Ops-hardening batch (#477/#478/#479) + honest mode-switch evidence (#493).** A Chromium major-version downgrade guard refuses to open a persisted profile with an older bundled engine than last wrote it (`ProfileEngineDowngradeError`, exit 11 — pre-auth, pre-credits) instead of letting Chromium's downgrade cleanup shred the session store; `GFLOW_CLI_LEASE_WAIT_SECONDS=N` adds an opt-in bounded wait on same-profile lease contention (default keeps the historical fail-fast); a once-a-day cache-served PyPI check prints a one-line stderr notice when a newer gflow-cli exists; and the exit-23 mode-switch fall-through now states that no known Flow cohort matched (the third, unrecognized editor layout from #493) while the drift remediation names the artifacts runs actually produce (`diag_mode_switch_miss.json`, the referenced screenshot, the incident bundle) instead of a phantom "debug screenshot from this message". Guard, lease wait, and the mode-switch path were live-verified; #479's notice is deferred-with-reason to a post-release check (it needs a published newer version on PyPI). See [LIVE_VERIFICATION_v0.56.0.md](LIVE_VERIFICATION_v0.56.0.md).
|
|
8
|
+
|
|
9
|
+
<details><summary>v0.55.0 — Tier-1 hardening batch + docs truth sweep (#471–#476)</summary>
|
|
10
|
+
|
|
7
11
|
**v0.55.0 — alpha.** **Tier-1 hardening batch (#471–#476) + docs truth sweep.** `gflow auth status` now **proves** the Flow session (cookie-jar probe of the live session endpoint, no browser, no credits) and exits 0/1 with remediation hints; `gflow mcp setup` is implemented (claude-desktop / cursor / vscode, non-destructive merge with a pristine one-time backup); incident bundles stage a pre-filled `report.md` bug-report template built from allowlisted manifest fields only; Windows profile dirs get a real restrict-to-current-user DACL at login plus a marker-gated upgrade sweep at browser launch; all 11 MCP tools route through one error funnel that masks raw exception text from clients; `llm_api_key`/`daemon_token` are `SecretStr` so a Settings dump cannot leak them. The false "requires a Google AI Ultra or Pro subscription" claim was removed everywhere — **any Google account with Flow access works**; only feature gates (4K upscale) are tier-bound. See [LIVE_VERIFICATION_v0.55.0.md](LIVE_VERIFICATION_v0.55.0.md).
|
|
8
12
|
|
|
13
|
+
</details>
|
|
14
|
+
|
|
9
15
|
<details><summary>v0.54.0 — login close-guidance + supply-chain guards (#465, #470)</summary>
|
|
10
16
|
|
|
11
17
|
**v0.54.0 — alpha.** Clearer close-the-browser guidance in `gflow auth login` (#470); overlay/watermark detection hardened to pure structural selectors; Dependabot now ignores playwright minors and all patchright bumps after PR #465 proved a `pyproject.toml` bound does not gate the `uv` ecosystem (it rewrites it); timing-jitter entropy moved to `secrets.SystemRandom` (SonarCloud S2245). First mainline release after the orphaned v0.53.x tags. See [LIVE_VERIFICATION_v0.54.0.md](LIVE_VERIFICATION_v0.54.0.md).
|
|
@@ -48,7 +54,7 @@
|
|
|
48
54
|
|
|
49
55
|
</details>
|
|
50
56
|
|
|
51
|
-
**Develop (unreleased, post-v0.
|
|
57
|
+
**Develop (unreleased, post-v0.56.0):** *(empty — develop is the staging branch for the next release).*
|
|
52
58
|
|
|
53
59
|
<details><summary>v0.46.0 — prompt tools on any OpenAI-compatible endpoint (#387)</summary>
|
|
54
60
|
|
|
@@ -1310,7 +1310,7 @@ gflow image batch ./batch-a.tsv --profile work
|
|
|
1310
1310
|
gflow image batch ./batch-b.tsv --profile personal
|
|
1311
1311
|
```
|
|
1312
1312
|
|
|
1313
|
-
(Same profile concurrently → the second invocation fails fast with `ProfileLockedError`, exit code 11, before any Chrome process starts. Use different profiles or wait.)
|
|
1313
|
+
(Same profile concurrently → the second invocation fails fast with `ProfileLockedError`, exit code 11, before any Chrome process starts. Use different profiles or wait — or set `GFLOW_CLI_LEASE_WAIT_SECONDS=N` (v0.56.0, [CONFIGURATION](CONFIGURATION.md#gflow_cli_lease_wait_seconds)) to have the second invocation poll the lease and take over as soon as the holder finishes.)
|
|
1314
1314
|
|
|
1315
1315
|
### JSON logs for piping into Loki/Datadog
|
|
1316
1316
|
|
|
@@ -1318,6 +1318,10 @@ gflow image batch ./batch-b.tsv --profile personal
|
|
|
1318
1318
|
GFLOW_CLI_LOG_FORMAT=json gflow image t2i "..." 2>&1 | jq .
|
|
1319
1319
|
```
|
|
1320
1320
|
|
|
1321
|
+
> Piping stderr into `jq`? Set `GFLOW_CLI_UPDATE_CHECK=0` too — the once-a-day
|
|
1322
|
+
> update notice (v0.56.0) is a plain-text stderr line and would break the parse
|
|
1323
|
+
> the day a newer version publishes.
|
|
1324
|
+
|
|
1321
1325
|
## Exit codes
|
|
1322
1326
|
|
|
1323
1327
|
Phase 4 (v0.4.0a1+) maps every `GFlowError` subclass to a stable exit code so
|
|
@@ -1336,7 +1340,7 @@ shell scripts can branch on the failure mode without parsing stderr.
|
|
|
1336
1340
|
| `8` | `AuthMissingError` | Required auth credential is absent from profile | `gflow auth login --profile <name>` |
|
|
1337
1341
|
| `9` | `TransportTimeoutError` | Browser/API operation exceeded its timeout (incl. an i2v frame UUID not found in the media picker, #287; or a wedged submission stage — the error names the stage and your Playwright version) | Retry; raise the relevant timeout — for a frame-UUID miss verify the UUID belongs to the `--project` passed; for a `stage_stalled` abort check your Playwright is in range (see [KNOWN_ISSUES](../KNOWN_ISSUES.md)) |
|
|
1338
1342
|
| `10` | `WafRejectionError` | Flow security layer rejected the request | Change prompt/request and retry |
|
|
1339
|
-
| `11` | `ConfigurationError` | Local configuration or browser mode is invalid — includes `ProfileLockedError` (same-profile lease contention: another `gflow`/daemon/MCP call already owns this profile) | Fix the option/env var shown in the error
|
|
1343
|
+
| `11` | `ConfigurationError` | Local configuration or browser mode is invalid — includes `ProfileLockedError` (same-profile lease contention: another `gflow`/daemon/MCP call already owns this profile) and `ProfileEngineDowngradeError` (the profile was last written by a newer Chromium major than the bundled engine about to open it — see [AUTHENTICATION § Chromium downgrade guard](AUTHENTICATION.md#chromium-downgrade-guard)) | Fix the option/env var shown in the error; for lease contention wait, use a different `--profile`, or set `GFLOW_CLI_LEASE_WAIT_SECONDS=N` to wait bounded; upgrade gflow-cli/Playwright or re-run `gflow auth login` for a downgrade refusal |
|
|
1340
1344
|
| `12` | `AuthLoginTimeoutError` | Browser sign-in was not completed in time | Re-run login or raise `GFLOW_CLI_AUTH_LOGIN_TIMEOUT` |
|
|
1341
1345
|
| `13` | `SecurityError` | Unsafe local profile or secret handling blocked | Follow the error's safety guidance |
|
|
1342
1346
|
| `14` | `AuthBrowserRejectedError` | Google rejected the login browser | `gflow auth login --browser chrome` |
|
|
@@ -1348,7 +1352,7 @@ shell scripts can branch on the failure mode without parsing stderr.
|
|
|
1348
1352
|
| `20` | `FrameExtractionError` | Could not extract the last frame for a video chain link | Check the source video downloaded intact; retry the link |
|
|
1349
1353
|
| `21` | `ChainPartialError` | A video chain stopped mid-way; earlier links completed | Resume from the last completed link shown in the error |
|
|
1350
1354
|
| `22` | `UpscaleUnavailableError` | 4K upscale is gated to Flow **Ultra** accounts (HTTP 403) | Use `--scale 2k`, or upgrade the Flow plan |
|
|
1351
|
-
| `23` | `UiSelectorDriftError` | A Flow editor control could not be located — Google changed the frontend (
|
|
1355
|
+
| `23` | `UiSelectorDriftError` | A Flow editor control could not be located — Google changed the frontend (issues #183, #493) | Update gflow-cli; file a bug with the probe name + the diagnostics JSON / debug screenshot referenced in the error message, plus the incident bundle's `report.md` when one was written |
|
|
1352
1356
|
| `24` | `BrowserEngineUnavailableError` | `GFLOW_CLI_BROWSER_ENGINE=patchright` but the engine is not installed | `pip install 'gflow-cli[patchright]'`, or unset `GFLOW_CLI_BROWSER_ENGINE` |
|
|
1353
1357
|
| `25` | `FlowAgentUiError` | The profile is on Flow's Agentic UI cohort and the classic media panel is unrecoverable for this operation | Rare since v0.38.0 (#332): the mode controller reliably recovers agentic→classic, so first retry with `--ui-mode classic`; if it persists, see KNOWN_ISSUES on the agentic cohort |
|
|
1354
1358
|
| `26` | `MediaAttributionError` | Generated media could not be reliably attributed to this request (issue #281) | Re-run; a dedicated project with fewer pre-existing assets avoids the ambiguity |
|