gflow-cli 0.49.0__tar.gz → 0.51.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.49.0 → gflow_cli-0.51.0}/.codex-plugin/plugin.json +1 -1
- gflow_cli-0.51.0/.github/dependabot.yml +84 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/ci.yml +9 -1
- gflow_cli-0.51.0/.github/workflows/deps-watch.yml +78 -0
- gflow_cli-0.51.0/.github/workflows/labels.yml +79 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/AGENTS.md +17 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/CHANGELOG.md +88 -2
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/PKG-INFO +3 -3
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +1 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/INDEX.md +2 -1
- gflow_cli-0.51.0/docs/LIVE_VERIFICATION_playwright_1.61.md +133 -0
- gflow_cli-0.51.0/docs/LIVE_VERIFICATION_v0.50.0.md +21 -0
- gflow_cli-0.51.0/docs/LIVE_VERIFICATION_v0.51.0.md +92 -0
- {gflow_cli-0.49.0/website → gflow_cli-0.51.0}/docs/MCP.md +1 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/SECURITY.md +2 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/USER_GUIDE.md +14 -13
- gflow_cli-0.51.0/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +31 -0
- gflow_cli-0.51.0/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +126 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/pyproject.toml +13 -10
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/autopilot/pr_triage_autopilot.py +12 -2
- gflow_cli-0.51.0/scripts/dev/live_verify_mcp_tasks.py +99 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/check/SKILL.md +6 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/issue-assessment/SKILL.md +7 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/issue-resolve/SKILL.md +5 -3
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/live-verify/SKILL.md +6 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/plan/SKILL.md +2 -2
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/pr-council-review/SKILL.md +8 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/predict/SKILL.md +4 -5
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/release/SKILL.md +5 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/scenario/SKILL.md +2 -2
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/sonar/SKILL.md +6 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/client.py +16 -12
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/ui_automation_video.py +2 -2
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_video.py +52 -6
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/mcp/server.py +4 -0
- gflow_cli-0.51.0/src/gflow_cli/mcp/tasks_extension.py +90 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/mcp/tools.py +59 -16
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/worker/daemon.py +26 -3
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/autopilot/test_pr_triage_autopilot.py +21 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_predictable_output.py +36 -8
- gflow_cli-0.51.0/tests/e2e/test_daemon_e2e.py +148 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_transports_e2e.py +35 -5
- gflow_cli-0.51.0/tests/features/mcp_tasks.feature +31 -0
- gflow_cli-0.51.0/tests/features/output_hardening.feature +30 -0
- gflow_cli-0.51.0/tests/features/test_mcp_tasks_steps.py +140 -0
- gflow_cli-0.51.0/tests/features/test_output_hardening_steps.py +136 -0
- gflow_cli-0.51.0/tests/mcp/test_tasks_extension.py +93 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_tools_wired.py +134 -9
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/uv.lock +1140 -997
- {gflow_cli-0.49.0 → gflow_cli-0.51.0/website}/docs/MCP.md +1 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/SECURITY.md +2 -1
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/USER_GUIDE.md +14 -13
- gflow_cli-0.49.0/.github/dependabot.yml +0 -34
- gflow_cli-0.49.0/tests/e2e/test_daemon_e2e.py +0 -172
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.env.template +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.gitattributes +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.gitignore +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/.secrets.baseline +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/CLAUDE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/LICENSE +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/RELEASE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/ROADMAP.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docker-compose.yml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/PROJECT_STATUS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/USAGE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/index.html +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/llms.txt +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/README.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/sonar-project.properties +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_config.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_media.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/USAGE.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/index.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.49.0 → gflow_cli-0.51.0}/website/mkdocs.yml +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Dependabot configuration
|
|
2
|
+
# Docs: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
updates:
|
|
6
|
+
# Python dependencies.
|
|
7
|
+
#
|
|
8
|
+
# This MUST be "uv", not "pip". The "pip" ecosystem reads pyproject.toml only
|
|
9
|
+
# and has no visibility into uv.lock — but every install path in this repo
|
|
10
|
+
# (`uv sync`, CI, the release build) resolves from the LOCKFILE. The result
|
|
11
|
+
# was a repo where no transitive dependency had ever received an update PR:
|
|
12
|
+
# scan the Dependabot history before 2026-08 and every single PR is a direct
|
|
13
|
+
# dev dep (ruff, patchright) or a GitHub Action. `cryptography` is pulled in
|
|
14
|
+
# via browser-cookie3, appears nowhere in pyproject.toml, and so sat on a
|
|
15
|
+
# version with a published CVE until the v0.50.0 release PR tripped pip-audit.
|
|
16
|
+
# The "uv" ecosystem reads pyproject.toml AND uv.lock, so transitive pins
|
|
17
|
+
# finally get bumped. See docs.astral.sh/uv/guides/integration/dependabot/.
|
|
18
|
+
- package-ecosystem: "uv"
|
|
19
|
+
directory: "/"
|
|
20
|
+
schedule:
|
|
21
|
+
interval: "weekly"
|
|
22
|
+
day: "monday"
|
|
23
|
+
time: "08:00"
|
|
24
|
+
timezone: "Europe/Lisbon"
|
|
25
|
+
open-pull-requests-limit: 5
|
|
26
|
+
# These labels must EXIST before Dependabot can apply them. When they did
|
|
27
|
+
# not, every bump PR opened with a bot comment reading "The following labels
|
|
28
|
+
# could not be found: dependencies, python" and landed unlabelled, so
|
|
29
|
+
# `label:dependencies` matched nothing. `.github/workflows/labels.yml` is
|
|
30
|
+
# the source of truth that keeps them created — edit both together.
|
|
31
|
+
labels:
|
|
32
|
+
- "dependencies"
|
|
33
|
+
- "python"
|
|
34
|
+
groups:
|
|
35
|
+
# Since the ecosystem became "uv", a bump PR is opened per LOCKED package
|
|
36
|
+
# -- transitives included -- so a routine week resolves ~38 updates into a
|
|
37
|
+
# queue five PRs wide. On 2026-08-04 that queue ate itself: #441/#442 were
|
|
38
|
+
# opened, then closed unmerged by Dependabot ("Looks like aiohttp is
|
|
39
|
+
# up-to-date now") because the CVE bumps they carried had already been
|
|
40
|
+
# applied by hand in #443 while they waited behind the cap. Grouping makes
|
|
41
|
+
# the week arrive as ONE reviewable PR that cannot be overtaken.
|
|
42
|
+
#
|
|
43
|
+
# Majors stay ungrouped deliberately: this cycle alone offered protobuf
|
|
44
|
+
# 6 -> 7 and structlog 25 -> 26, and a breaking transitive must be able to
|
|
45
|
+
# fail on its own rather than red-lighting the whole batch.
|
|
46
|
+
python-minor-patch:
|
|
47
|
+
applies-to: version-updates
|
|
48
|
+
patterns: ["*"]
|
|
49
|
+
update-types: ["minor", "patch"]
|
|
50
|
+
# NOTE: security updates are intentionally NOT grouped. They are exempt from
|
|
51
|
+
# `groups` unless a group sets `applies-to: security-updates`, so an advisory
|
|
52
|
+
# fix still opens immediately on its own instead of waiting for Monday.
|
|
53
|
+
ignore:
|
|
54
|
+
# playwright minors are gated by the `<1.60.0` upper bound in
|
|
55
|
+
# pyproject.toml, not by this rule — an untested driver minor silently
|
|
56
|
+
# wedged video generation (see the bound's comment). This entry keeps
|
|
57
|
+
# majors out even if that bound is ever widened. Raising playwright is a
|
|
58
|
+
# deliberate, live-verified act; the weekly `deps-watch` workflow reports
|
|
59
|
+
# how far behind the pin has drifted so it does not freeze unnoticed.
|
|
60
|
+
- dependency-name: "playwright"
|
|
61
|
+
update-types: ["version-update:semver-major"]
|
|
62
|
+
|
|
63
|
+
# GitHub Actions
|
|
64
|
+
- package-ecosystem: "github-actions"
|
|
65
|
+
directory: "/"
|
|
66
|
+
schedule:
|
|
67
|
+
interval: "weekly"
|
|
68
|
+
day: "monday"
|
|
69
|
+
time: "08:00"
|
|
70
|
+
timezone: "Europe/Lisbon"
|
|
71
|
+
open-pull-requests-limit: 5
|
|
72
|
+
# Kept in sync with .github/workflows/labels.yml — see the note above.
|
|
73
|
+
labels:
|
|
74
|
+
- "dependencies"
|
|
75
|
+
- "github-actions"
|
|
76
|
+
groups:
|
|
77
|
+
# Actions majors are grouped too. Unlike Python transitives they are few,
|
|
78
|
+
# uniform, and already reviewed as a batch in practice -- 2026-07-20 alone
|
|
79
|
+
# opened four separate PRs (#352-#355) for what is one "bump the actions"
|
|
80
|
+
# decision, including checkout 4 -> 7 on a workflow the earlier #196 had
|
|
81
|
+
# already moved to 6.
|
|
82
|
+
github-actions:
|
|
83
|
+
applies-to: version-updates
|
|
84
|
+
patterns: ["*"]
|
|
@@ -35,8 +35,16 @@ jobs:
|
|
|
35
35
|
uses: astral-sh/setup-uv@v7
|
|
36
36
|
- name: Audit locked dependencies for known CVEs
|
|
37
37
|
# Fails the build on any known advisory. Accept later via: pip-audit --ignore-vuln <GHSA-id>
|
|
38
|
+
#
|
|
39
|
+
# `--all-extras` is REQUIRED, not tidiness. Without it `uv export` emits
|
|
40
|
+
# only the default dependency group, so everything reachable solely
|
|
41
|
+
# through an optional extra is never audited. That blind spot was real:
|
|
42
|
+
# aiohttp 3.13.5 and pyasn1 0.6.3 sat in uv.lock with published high
|
|
43
|
+
# advisories while this gate reported clean, because both arrive via the
|
|
44
|
+
# `gcs`/`s3` extras (gcsfs / s3fs / google-auth). GitHub's Dependabot
|
|
45
|
+
# alerts flagged them against uv.lock; this gate could not see them.
|
|
38
46
|
run: |
|
|
39
|
-
uv export --frozen --format requirements-txt --no-emit-project > requirements-audit.txt
|
|
47
|
+
uv export --frozen --all-extras --format requirements-txt --no-emit-project > requirements-audit.txt
|
|
40
48
|
uvx pip-audit -r requirements-audit.txt
|
|
41
49
|
|
|
42
50
|
# ── Supply-chain gate: resolve WITHOUT the lockfile ───────────────────────
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Dependency watch
|
|
2
|
+
|
|
3
|
+
# ── Why this exists, on a CLOCK ──────────────────────────────────────────────
|
|
4
|
+
# CI's `deps-audit` job runs the same pip-audit command, but only `on: push` and
|
|
5
|
+
# `on: pull_request`. That gate has no clock: an advisory published *after* the
|
|
6
|
+
# last push stays invisible until someone happens to push. That is exactly how
|
|
7
|
+
# CVE-2026-69247 (cryptography 49.0.0) reached the v0.50.0 release PR — the
|
|
8
|
+
# lockfile had been sitting on the vulnerable version for days and nothing was
|
|
9
|
+
# scheduled to re-check it. This workflow gives that gate a timer.
|
|
10
|
+
#
|
|
11
|
+
# It also answers the question no existing job answers: "what CAN we update?"
|
|
12
|
+
# Every other job installs via `uv sync` against uv.lock, so the lockfile hides
|
|
13
|
+
# both halves of the picture — what upstream has published, and what our own
|
|
14
|
+
# declared bounds are currently refusing. Both are printed below.
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
schedule:
|
|
18
|
+
# Mondays 07:00 UTC — one hour before Dependabot's 08:00 Europe/Lisbon run,
|
|
19
|
+
# so the audit result is already on screen when the bump PRs land.
|
|
20
|
+
- cron: "0 7 * * 1"
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
watch:
|
|
28
|
+
name: Audit + report upgradable dependencies
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v7
|
|
32
|
+
|
|
33
|
+
- name: Install uv
|
|
34
|
+
uses: astral-sh/setup-uv@v7
|
|
35
|
+
|
|
36
|
+
- name: Set up Python
|
|
37
|
+
run: uv python install 3.13
|
|
38
|
+
|
|
39
|
+
# ── The gate: fails the run, which emails the repo owner ───────────────
|
|
40
|
+
- name: Audit locked dependencies for known CVEs
|
|
41
|
+
run: |
|
|
42
|
+
# --all-extras: without it only the default group is exported, so
|
|
43
|
+
# anything reachable solely through an optional extra goes unaudited.
|
|
44
|
+
# See the matching note in ci.yml — this is how aiohttp/pyasn1 hid.
|
|
45
|
+
uv export --frozen --all-extras --format requirements-txt --no-emit-project > requirements-audit.txt
|
|
46
|
+
uvx pip-audit -r requirements-audit.txt
|
|
47
|
+
|
|
48
|
+
# ── The reports: never fail the run, and still run when the audit fails
|
|
49
|
+
# (a red audit is precisely when you want to know what's upgradable) ─
|
|
50
|
+
- name: Report what our bounds allow us to take now
|
|
51
|
+
if: always()
|
|
52
|
+
# Resolves the newest versions pyproject.toml's ranges permit, without
|
|
53
|
+
# writing uv.lock. This is the "safe to merge today" list.
|
|
54
|
+
run: |
|
|
55
|
+
echo '## Upgradable within current bounds' >> "$GITHUB_STEP_SUMMARY"
|
|
56
|
+
echo '```' >> "$GITHUB_STEP_SUMMARY"
|
|
57
|
+
# uv writes this report to STDERR, so it must be folded into stdout
|
|
58
|
+
# BEFORE the pipe. `... 2>&1 >> file` would be wrong: that order sends
|
|
59
|
+
# stdout to the file and leaves stderr on the terminal, which silently
|
|
60
|
+
# published an empty summary section. tee keeps both destinations.
|
|
61
|
+
uv lock --upgrade --dry-run 2>&1 | tee -a "$GITHUB_STEP_SUMMARY"
|
|
62
|
+
echo '```' >> "$GITHUB_STEP_SUMMARY"
|
|
63
|
+
|
|
64
|
+
- name: Report what upstream has published
|
|
65
|
+
if: always()
|
|
66
|
+
# Unlike the step above, this ignores our constraints and reports the
|
|
67
|
+
# true latest on PyPI — so a package frozen by one of OUR upper bounds
|
|
68
|
+
# shows up here and nowhere else. This is the expiry alarm for those
|
|
69
|
+
# bounds: `playwright>=1.59.0,<1.60.0` is deliberate (an untested driver
|
|
70
|
+
# silently wedged video generation — see the comment in pyproject.toml),
|
|
71
|
+
# but a deliberate pin still needs a periodic "how stale is it now?"
|
|
72
|
+
# signal, and raising it requires a live-verified generation first.
|
|
73
|
+
run: |
|
|
74
|
+
uv sync --frozen
|
|
75
|
+
echo '## Latest upstream (ignores our bounds)' >> "$GITHUB_STEP_SUMMARY"
|
|
76
|
+
echo '```' >> "$GITHUB_STEP_SUMMARY"
|
|
77
|
+
uv pip list --outdated 2>&1 | tee -a "$GITHUB_STEP_SUMMARY"
|
|
78
|
+
echo '```' >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Sync repository labels
|
|
2
|
+
|
|
3
|
+
# ── Why this exists ──────────────────────────────────────────────────────────
|
|
4
|
+
# `.github/dependabot.yml` asks for the labels `dependencies`, `python`, and
|
|
5
|
+
# `github-actions`. Dependabot cannot CREATE a label — it can only apply one
|
|
6
|
+
# that already exists — and none of the three ever did. Every bump PR therefore
|
|
7
|
+
# opened with a bot comment ("The following labels could not be found:
|
|
8
|
+
# dependencies, python. Please fix the above issues or remove invalid values
|
|
9
|
+
# from dependabot.yml") and landed unlabelled, which is why `label:dependencies`
|
|
10
|
+
# returns nothing across the whole dependency history.
|
|
11
|
+
#
|
|
12
|
+
# Creating them by hand in the UI fixes it once and silently rots: the next
|
|
13
|
+
# label added to dependabot.yml reintroduces the same failure with the same
|
|
14
|
+
# invisible symptom. This workflow makes the label set declarative instead, so
|
|
15
|
+
# a label referenced by config is a label that exists.
|
|
16
|
+
#
|
|
17
|
+
# Scope note: the external-PR labels (`external-contribution`,
|
|
18
|
+
# `needs-maintainer-review`, `needs-copilot-review`) are NOT listed here.
|
|
19
|
+
# `external-pr-triage.yml` already creates them idempotently at the moment it
|
|
20
|
+
# applies them, and duplicating the definitions would give them two owners.
|
|
21
|
+
|
|
22
|
+
on:
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
push:
|
|
25
|
+
branches: [main, develop]
|
|
26
|
+
paths:
|
|
27
|
+
- .github/workflows/labels.yml
|
|
28
|
+
- .github/dependabot.yml
|
|
29
|
+
|
|
30
|
+
permissions:
|
|
31
|
+
contents: read
|
|
32
|
+
issues: write
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
sync:
|
|
36
|
+
name: Ensure declared labels exist
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- name: Create or update labels
|
|
40
|
+
uses: actions/github-script@v7
|
|
41
|
+
with:
|
|
42
|
+
script: |
|
|
43
|
+
// Every label referenced by .github/dependabot.yml. Keep in sync.
|
|
44
|
+
const labels = [
|
|
45
|
+
{
|
|
46
|
+
name: "dependencies",
|
|
47
|
+
color: "0366d6",
|
|
48
|
+
description: "Dependency version or security update",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "python",
|
|
52
|
+
color: "3572a5",
|
|
53
|
+
description: "Python dependency (uv ecosystem: pyproject.toml + uv.lock)",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "github-actions",
|
|
57
|
+
color: "2088ff",
|
|
58
|
+
description: "GitHub Actions workflow dependency",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const owner = context.repo.owner;
|
|
63
|
+
const repo = context.repo.repo;
|
|
64
|
+
|
|
65
|
+
for (const label of labels) {
|
|
66
|
+
try {
|
|
67
|
+
await github.rest.issues.createLabel({ owner, repo, ...label });
|
|
68
|
+
core.info(`Created label: ${label.name}`);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
// 422 = already exists. Update it so a colour or description
|
|
71
|
+
// edit here still reaches the repository, and so a re-run is a
|
|
72
|
+
// no-op rather than a failure.
|
|
73
|
+
if (error.status !== 422) {
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
await github.rest.issues.updateLabel({ owner, repo, ...label });
|
|
77
|
+
core.info(`Label already present, updated: ${label.name}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -98,6 +98,23 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
|
|
|
98
98
|
| 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
|
|
99
99
|
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
|
|
100
100
|
|
|
101
|
+
### Pipeline Continuation Mandate
|
|
102
|
+
|
|
103
|
+
Every AI agent executing any phase of this pipeline MUST proactively state the completed phase result and explicitly recommend/announce the exact next sequential phase to the user. Never stop passively after a phase completes without identifying the next step.
|
|
104
|
+
|
|
105
|
+
| Current Phase | Completed Artifact / Gate | Next Sequential Phase & Command |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| Phase 1: Triage | `issue_assessment_<N>.md` | ➔ Phase 2: Pre-Implementation (`/gflow:predict <proposal>`) |
|
|
108
|
+
| Phase 2: Pre-Implementation | Verdict `GO` or `CAUTION` | ➔ Phase 3: BDD Scaffolding (`/gflow:scenario <feature>`) |
|
|
109
|
+
| Phase 3: BDD Scaffolding | `Scenario:` blocks & test scaffold | ➔ Phase 4: Implementation Plan (`/gflow:plan <feature>`) |
|
|
110
|
+
| Phase 4: Implementation Plan | `PLAN.md` created & approved | ➔ Phase 6: Task Execution (`/gflow:status`) |
|
|
111
|
+
| Phase 6: Task Execution | All plan tasks checked | ➔ Phase 7: Pre-Commit Quality (`/gflow:check`) |
|
|
112
|
+
| Phase 7: Pre-Commit Quality | All 7 quality gates green | ➔ Phase 5: Council Review (`/gflow:branch-review` or `/gflow:pr-council-review`) |
|
|
113
|
+
| Phase 5: Council Review | Consensus 🟢 GREEN | ➔ Phase 8: Live Verification (`/gflow:live-verify`) or Phase 9 (`/gflow:issue-resolve <N>`) |
|
|
114
|
+
| Phase 8: Live Verification | `LIVE_VERIFICATION_vX.Y.Z.md` | ➔ Phase 9: Issue Resolve & PR (`/gflow:issue-resolve <N>`) |
|
|
115
|
+
| Phase 9: Issue Resolve & PR | PR open & SonarCloud 0-issue gate green | ➔ Phase 10: Release Pipeline (`/gflow:release`) |
|
|
116
|
+
| Phase 10: Release Pipeline | Signed tag & PyPI published | ➔ Done (Release shipped & back-merged) |
|
|
117
|
+
|
|
101
118
|
## Skills reference (cross-tool)
|
|
102
119
|
|
|
103
120
|
The `skills/` directory ships installable agent skill docs in plain Markdown with YAML frontmatter. Any agent can consume them directly:
|
|
@@ -7,7 +7,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.
|
|
10
|
+
## [0.51.0] — 2026-08-05
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- **`pip-audit` was blind to every optional extra.** `uv export --frozen` emits
|
|
15
|
+
only the default dependency group, so anything reachable *solely* through an
|
|
16
|
+
extra was never audited — the CI gate reported clean while `uv.lock` carried
|
|
17
|
+
two published high advisories: `aiohttp` 3.13.5 (via `gcsfs`/`s3fs`) and
|
|
18
|
+
`pyasn1` 0.6.3 (via `google-auth`). The default export contains zero lines for
|
|
19
|
+
either package; `--all-extras` contains three. Both the `deps-audit` job in
|
|
20
|
+
`ci.yml` and `deps-watch.yml` now export with `--all-extras`, and both
|
|
21
|
+
packages are bumped (3.14.3 / 0.6.4). Found because GitHub's Dependabot alerts
|
|
22
|
+
flagged `uv.lock` while CI was green — `pip-audit` queries PYSEC, Dependabot
|
|
23
|
+
queries GHSA, and the two are **not** equivalent.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **Cleared the whole Dependabot backlog in one lock update, and fixed the two
|
|
28
|
+
config faults that produced it.** `uv lock --upgrade` moved 38 locked packages
|
|
29
|
+
(aiobotocore, anyio, botocore, certifi, coverage, google-auth,
|
|
30
|
+
google-cloud-storage, grpcio, numpy, protobuf 6→7, structlog 25→26,
|
|
31
|
+
typing-extensions, uvicorn, websockets 16→17, yarl and others) to the newest
|
|
32
|
+
versions `pyproject.toml`'s bounds allow. `pip-audit` over
|
|
33
|
+
`uv export --all-extras` is clean, `ruff`/`pyright` are clean, and the offline
|
|
34
|
+
suite is unchanged against the pre-upgrade lock. The `playwright` upper bound
|
|
35
|
+
held through that sweep, as intended; it was raised separately and only after
|
|
36
|
+
live verification (below).
|
|
37
|
+
- **Raised the `playwright` bound `>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0`,
|
|
38
|
+
live-verified.** The 2026-08-03 regression that motivated the bound — every
|
|
39
|
+
`video i2v` hanging *silently* right after the frame upload, browser alive,
|
|
40
|
+
no error, no timeout — does not reproduce on 1.61.0: a live i2v drove
|
|
41
|
+
`image_uploaded status=200` → `frame_attached` → `generate_captured
|
|
42
|
+
status=200` with `startImage` parsed, and a live i2i local-reference attach
|
|
43
|
+
passed outright. **1.62.0 stays excluded** — its hang has never been
|
|
44
|
+
root-caused. Raising the bound also moves `PINNED_PLAYWRIGHT` and
|
|
45
|
+
`SUPPORTED_PLAYWRIGHT_RANGE`, which are printed in the stall error that tells
|
|
46
|
+
a user how to recover; `tests/test_playwright_pin.py` enforces that pairing
|
|
47
|
+
and caught it. Evidence:
|
|
48
|
+
[`docs/LIVE_VERIFICATION_playwright_1.61.md`](docs/LIVE_VERIFICATION_playwright_1.61.md).
|
|
49
|
+
- **Dependabot now groups routine updates instead of drip-feeding them.**
|
|
50
|
+
With the `uv` ecosystem opening a PR per locked package, a normal week
|
|
51
|
+
resolves ~38 updates into a queue five wide, and the queue eats itself:
|
|
52
|
+
#441/#442 were opened and then closed unmerged ("Looks like aiohttp is
|
|
53
|
+
up-to-date now") because the CVE bumps they carried were applied by hand in
|
|
54
|
+
#443 while they waited behind the cap. Minor/patch updates now arrive as one
|
|
55
|
+
grouped PR per ecosystem. Majors stay individual so a breaking transitive
|
|
56
|
+
cannot red-light the batch, and security updates stay ungrouped so an
|
|
57
|
+
advisory fix still opens immediately.
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- **Dependabot PRs land labelled again.** `dependabot.yml` asked for
|
|
62
|
+
`dependencies`, `python`, and `github-actions`, none of which existed in the
|
|
63
|
+
repository — so every bump PR opened with a bot error comment and no labels,
|
|
64
|
+
and `label:dependencies` matched nothing across the entire dependency
|
|
65
|
+
history. Dependabot can apply a label but never create one; the new
|
|
66
|
+
`.github/workflows/labels.yml` makes the referenced label set declarative so
|
|
67
|
+
the failure cannot silently return the next time a label is added to the
|
|
68
|
+
config.
|
|
69
|
+
- **Two e2e tests could never have passed.** `test_daemon_e2e_lifecycle`
|
|
70
|
+
hand-rolled the *legacy* SSE transport (`GET /mcp/sse` → `event: endpoint` →
|
|
71
|
+
`POST /mcp/message?session_id=`) after the daemon moved to Streamable HTTP at
|
|
72
|
+
`HTTP_PATH`, so its readiness probe waited for a 200 that never comes and it
|
|
73
|
+
died in the "Daemon failed to start" branch **while the daemon was up and
|
|
74
|
+
healthy** — meaning the MCP daemon lifecycle had no live coverage at all. It
|
|
75
|
+
now speaks the real protocol through the SDK's own client and imports
|
|
76
|
+
`HTTP_PATH` rather than hardcoding it. Separately,
|
|
77
|
+
`test_e2e_health_check_returns_true_when_active` asserted a *success* path
|
|
78
|
+
against the obsolete `bearer`/`sapisidhash` transports, which KNOWN_ISSUES.md
|
|
79
|
+
already records as unusable; success-path tests now use `LIVE_STRATEGIES`
|
|
80
|
+
while error-path tests keep the full list on purpose. Fixing that also
|
|
81
|
+
cleared an unrelated failure — the obsolete transports were the ones holding
|
|
82
|
+
the contended profile lease. Zero-credit gate: 15 passed/3 failed → **16
|
|
83
|
+
passed/0 failed**.
|
|
84
|
+
|
|
85
|
+
## [0.50.0] — 2026-08-04
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
|
|
89
|
+
- **Adopted MCP 2026-07-28 Tasks extension (SEP-2663) (#409).** Added `TasksExtension` subclass serving `tasks/get` and `tasks/cancel`. Generation tools (`gflow_generate_image`, `gflow_generate_video`) support non-blocking task handle responses (`wait=False`).
|
|
90
|
+
- **Hardened CLI and MCP `-o`/`--output` path routing (#414, #415).** Custom output paths land generated assets at target locations with automatic parent directory creation, S3 cloud storage relative path preservation, and multi-count stem suffixes (`_1`, `_2`).
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
|
|
94
|
+
- **PR triage notification resilience (#428).** Fallback alerts via Telegram on missing credentials or auth failure.
|
|
11
95
|
|
|
12
96
|
### Changed
|
|
13
97
|
|
|
@@ -2644,7 +2728,9 @@ shell-script template that branches on these codes.
|
|
|
2644
2728
|
|
|
2645
2729
|
First skeleton. Not functional end-to-end yet.
|
|
2646
2730
|
|
|
2647
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2731
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.51.0...HEAD
|
|
2732
|
+
[0.51.0]: https://github.com/ffroliva/gflow-cli/compare/v0.50.0...v0.51.0
|
|
2733
|
+
[0.50.0]: https://github.com/ffroliva/gflow-cli/compare/v0.49.0...v0.50.0
|
|
2648
2734
|
[0.49.0]: https://github.com/ffroliva/gflow-cli/compare/v0.48.0...v0.49.0
|
|
2649
2735
|
[0.48.0]: https://github.com/ffroliva/gflow-cli/compare/v0.47.0...v0.48.0
|
|
2650
2736
|
[0.47.0]: https://github.com/ffroliva/gflow-cli/compare/v0.46.1...v0.47.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.51.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
|
|
@@ -43,7 +43,7 @@ Requires-Dist: fastapi>=0.115.0
|
|
|
43
43
|
Requires-Dist: httpx>=0.27.0
|
|
44
44
|
Requires-Dist: mcp<3,>=2.0.0
|
|
45
45
|
Requires-Dist: platformdirs>=4.0.0
|
|
46
|
-
Requires-Dist: playwright<1.
|
|
46
|
+
Requires-Dist: playwright<1.62.0,>=1.61.0
|
|
47
47
|
Requires-Dist: pydantic-settings>=2.5.0
|
|
48
48
|
Requires-Dist: rich>=13.7.0
|
|
49
49
|
Requires-Dist: sse-starlette>=2.0.0
|
|
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
|
58
58
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
59
59
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
60
60
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
61
|
-
Requires-Dist: ruff==0.16.
|
|
61
|
+
Requires-Dist: ruff==0.16.1; extra == 'dev'
|
|
62
62
|
Provides-Extra: gcs
|
|
63
63
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
64
64
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -11,7 +11,7 @@ The autopilot orchestrator (`scripts/autopilot/pr_triage_autopilot.py`) runs as
|
|
|
11
11
|
| Variable | Scope | Purpose |
|
|
12
12
|
|---|---|---|
|
|
13
13
|
| `CLAUDE_CODE_OAUTH_TOKEN` | Autopilot orchestrator & sandbox | Claude **subscription** token from `claude setup-token`, valid **1 year**. This deployment has no `ANTHROPIC_API_KEY`. Passed into the container as an env var. **Not** `~/.claude/.credentials.json` — `setup-token` does not write that file. |
|
|
14
|
-
| `GH_COMMENT_TOKEN` | Autopilot orchestrator (host) |
|
|
14
|
+
| `GH_COMMENT_TOKEN` | Autopilot orchestrator (host) | Fine-grained least-privilege GitHub PAT (scoped to `ffroliva/gflow-cli` with `pull_requests:write`) used to post verdicts and reviews to PRs. Stored encrypted in hermes-ops SOPS (`vps-prod.env.sops.yaml`) and rendered into `/opt/hermes/.env`. |
|
|
15
15
|
| `TELEGRAM_BOT_TOKEN` | Autopilot orchestrator (host) | Bot token to dispatch alert messages. |
|
|
16
16
|
| `TELEGRAM_USER_ID` | Autopilot orchestrator (host) | The chat ID to receive triage alert messages. |
|
|
17
17
|
| `PR_TRIAGE_ENGINE` | Autopilot orchestrator (host), optional | Review engine selector. Default `council-claude`; any other value exits at startup (`council-multi-cli` is reserved backlog). |
|
|
@@ -135,7 +135,8 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
135
135
|
**"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
136
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
137
137
|
**"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.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)
|
|
138
|
+
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_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
|
+
**"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).
|
|
139
140
|
**"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)).
|
|
140
141
|
**"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)
|
|
141
142
|
**"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
|