gflow-cli 0.51.0__tar.gz → 0.52.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.51.0 → gflow_cli-0.52.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/CHANGELOG.md +17 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/PKG-INFO +1 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/INDEX.md +1 -1
- gflow_cli-0.52.0/docs/LIVE_VERIFICATION_v0.52.0.md +41 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +133 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +46 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +107 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +36 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +78 -0
- gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +35 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/pyproject.toml +1 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/ui_automation_video.py +14 -2
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_video.py +43 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/image_batch.py +64 -1
- gflow_cli-0.52.0/tests/features/duration_tab_drift.feature +14 -0
- gflow_cli-0.52.0/tests/features/entity_provenance.feature +14 -0
- gflow_cli-0.52.0/tests/features/image_batch_references.feature +19 -0
- gflow_cli-0.52.0/tests/test_duration_tab_drift.py +56 -0
- gflow_cli-0.52.0/tests/test_entity_provenance.py +151 -0
- gflow_cli-0.52.0/tests/test_image_batch_references.py +99 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/uv.lock +1 -1
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.env.template +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.gitattributes +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.gitignore +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/.secrets.baseline +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/AGENTS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/CLAUDE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/LICENSE +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/RELEASE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/ROADMAP.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docker-compose.yml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/MCP.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/PROJECT_STATUS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/USAGE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/index.html +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/llms.txt +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/README.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/sonar-project.properties +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/client.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_config.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_media.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/USAGE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/index.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.51.0 → gflow_cli-0.52.0}/website/mkdocs.yml +0 -0
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.52.0] — 2026-08-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Intra-batch reference support for image batches (#317).** `BatchPromptItem` and `gflow image batch` now support `ref` and `reference_entity` fields (e.g. `ref="batch:0"`), with topological dependency sorting and circular dependency validation.
|
|
15
|
+
- **Character entity provenance recording and video CLI flag parity (#402).** Added `--reference-entity` and `--reference-entity-name` CLI options to `gflow video` commands (`t2v`, `i2v`, `r2v`) and verified character provenance recording in `operations.metadata_json`.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Fix video duration selector drift (#451).** Expanded duration control selector cascade to match modern Flow editor UI elements (`button`, `role='button'`, `role='option'`, `role='menuitem'`, `role='tab'`) while preserving fail-closed behavior on missing duration controls.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
10
25
|
## [0.51.0] — 2026-08-05
|
|
11
26
|
|
|
12
27
|
### Security
|
|
@@ -2728,7 +2743,8 @@ shell-script template that branches on these codes.
|
|
|
2728
2743
|
|
|
2729
2744
|
First skeleton. Not functional end-to-end yet.
|
|
2730
2745
|
|
|
2731
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2746
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.52.0...HEAD
|
|
2747
|
+
[0.52.0]: https://github.com/ffroliva/gflow-cli/compare/v0.51.0...v0.52.0
|
|
2732
2748
|
[0.51.0]: https://github.com/ffroliva/gflow-cli/compare/v0.50.0...v0.51.0
|
|
2733
2749
|
[0.50.0]: https://github.com/ffroliva/gflow-cli/compare/v0.49.0...v0.50.0
|
|
2734
2750
|
[0.49.0]: https://github.com/ffroliva/gflow-cli/compare/v0.48.0...v0.49.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.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
|
|
@@ -135,7 +135,7 @@ 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.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)
|
|
138
|
+
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.52.0](LIVE_VERIFICATION_v0.52.0.md) (**batch DAG references #317, character entity provenance recording #402, and video duration selector cascade fix #451 live-verified 2026-08-05** — 3/3 live E2E tests in `tests/e2e/test_entity_provenance_e2e.py` passed clean on profile `ffroliva`, 5-layer evidence ledger verified). Prior: [v0.51.0](LIVE_VERIFICATION_v0.51.0.md) (**dependency/security/test-correctness release verified 2026-08-05, 1 Imagen credit + 1 Veo attempt** — the only change needing live evidence was the `playwright` bound raise `>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0`, and the 2026-08-03 regression does NOT reproduce on 1.61.0: a live i2v drove `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live i2i local-ref attach passed outright [96.7s]. **1.62.0 stays excluded**, never root-caused. `-m e2e_auth` 16/16, daemon e2e 1 passed [MCP over Streamable HTTP — the first live coverage that test has ever had, it was structurally incapable of passing before], MCP Tasks 5/5 layers, 2923 offline tests, `pip-audit --all-extras` clean. **No finished mp4 is claimed** — Flow's own generation returned `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT`, server-side. Defect found and recorded not omitted: Flow dropped the duration-tab UI so **`--duration` is currently broken for i2v**, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0 — [#451](https://github.com/ffroliva/gflow-cli/issues/451)). Prior: [v0.50.0](LIVE_VERIFICATION_v0.50.0.md) (**MCP Tasks extension SEP-2663, non-blocking task handle responses, CLI/MCP output path hardening -o/--output, and Telegram PR triage alert resilience verified 2026-08-04** — 5-layer evidence ledger note generated at `tmp/live-verify/mcp-tasks.md` confirming instant task handle return, working status queries, and cancelled status DB state transitions; full 118-test suite green). Prior: [v0.49.0](LIVE_VERIFICATION_v0.49.0.md) (**#125 `omni-flash` start-frame I2V video generation, Playwright dependency upper-bound pin `>=1.59.0,<1.60.0`, submission stage watchdog timeout, and #404 count-tab fail-closed logic verified 2026-08-03** — 0-credit wire intercept captured `batchAsyncGenerateVideoStartImage` with `startImage` bound; live costed generation on `omni-flash` I2V produced a 1.2MB valid mp4 video asset on `ffroliva`; full 2902-test release suite green). Prior: [v0.48.0](LIVE_VERIFICATION_v0.48.0.md) (**#411 predictable `-o`/`--output` paths, offline-verified 2026-08-02, ZERO credits** — exact single-target local writes + `_1`/`_2` multi-count **image** suffixes proven by the CLI suite; the pre-tag council audit [RED, then resolved] re-scoped the release to the truthful surface: a dead MCP `output` param was deleted [worker queue never read it — #414], cloud `-o` targets and video multi-count suffixes are follow-ups [#415], and two tautological video-path tests are recorded as weak evidence rather than claimed as proof; storage-layer S3 writes verified against Docker MinIO at the layer level only; 2888-test release tree green; the live-Flow run aborted pre-generation on an expired denon82 session [`AuthExpiredError` 401, correct RFC-7807 contract + remediation hint, $0] — recorded, not omitted; live re-run queued for the next authenticated session). Prior: [v0.47.0](LIVE_VERIFICATION_v0.47.0.md) (**MCP SDK 2.0.0 migration + dual-era protocol + #402 entity provenance recording live-verified 2026-08-01, ZERO credits** — stdio JSON-RPC initialization handshake verified over subprocess transport, `resolve-drift` CI job added to prevent dependency drift, and 121 unit tests in `tests/data` passed). Prior: [v0.46.1](LIVE_VERIFICATION_v0.46.1.md) (**#404 classic count-setter fix live-verified 2026-07-31 on the reporter's exact environment, ZERO credits** — credit-free DOM recon proved Flow renamed the count-tab labels to uniform `xN` [`x1` replaces `1x`, image AND video rows], that `nth(0)` of the old filtered set landed on the selected `x2` and actively moved the count AWAY from the target, and that a digit-keyed click on `x1` converges instantly and persists without a Save commit; the new classic e2e then passed live [count=1 against a fresh project displaying 2 → exactly 1 image; count=2 early-exit → exactly 2], and the #313 agentic count-enforcement e2e passed 4/4 [counts 1–4 vs deliberately mismatched sticky defaults, magic-byte-verified downloads] after its stale setup was repaired [Flow now loads the editor in classic mode — the setup needed an Agent-pill toggle before the `tune` icon; test-only fix, no product code implicated]; the video output-count cascade carries a recorded waiver [full drive costs Veo credits; its exact selector shape was exercised live in the spike's cleanup step]). Prior: [v0.46.0](LIVE_VERIFICATION_v0.46.0.md) (**#387 provider-agnostic prompt-tools transport live-verified 2026-07-28, ZERO credits** — a four-probe capability spike passed 4/4 against BOTH a non-Google gateway and Google's OpenAI-compat endpoint, including a *semantic* multimodal check [a generated solid-red JPEG round-tripped and the model answered 'Red'], which is what proved the native Gemini `inlineData` path could be deleted outright rather than kept as a fallback; the real CLI then returned `was_expanded: true` on gateway/gateway-no-model/Google-default, emitted the loud one-time notice + no-op for the removed `GFLOW_CLI_GEMINI_API_KEY`, and made NO network call when unconfigured. Live verification caught two defects a fully green 2849-test offline suite missed: Google's compat endpoint has no server-side default model [`400 "model is not specified"`, silently no-oping the DEFAULT configuration], and the first redirect guard did not actually work because `build_opener()` installs its default handlers regardless of arguments, so `Authorization` would still have been replayed cross-host. `/code-review high` is recorded as NOT run — it is user-triggered only). Prior: [v0.45.0](LIVE_VERIFICATION_v0.45.0.md) (**#393 UUID `--ref` binding + #395 character-entity binding live-verified 2026-07-27/28** — a controlled A/B on identical input flipped `--ref` from exit 9 to exit 0 via the catalog-backed upload fallback, with the anti-silence guard [an unbindable ref aborts non-zero and writes no image] pinned by a live e2e; picker DOM + HAR showed Flow indexes a short auto-caption, NOT the prompt, so a prompt-derived search hint was dropped rather than shipped on assumption; a CDP spike against Flow's own character flow then captured the `entityContext` contract that gflow's generations were missing, root-causing #395 to two gflow defects [overlay dismissal Escaping Flow's own composer, and a character-route bounce that sent the prompt to the project composer] — both fixed, both character e2e tests now pass live, including `--format-prompt` [#383], with a read-back confirming the character carries its name and `thumbnail_media_id`). Prior: [v0.44.0](LIVE_VERIFICATION_v0.44.0.md) (**#381 dual-side project management & Playwright Chromium transport live-verified 2026-07-26** — real-editor project creation + rename tRPC server/DOM sync, prompt slugging, `gflow project` subcommand family, HTTP 429 adaptive backoff, and full E2E test suite). Prior: [v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit**). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
139
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).
|
|
140
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)).
|
|
141
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)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Live Verification Ledger: v0.52.0
|
|
2
|
+
|
|
3
|
+
**Release Date:** 2026-08-05
|
|
4
|
+
**Version:** v0.52.0
|
|
5
|
+
**Environment:** Windows 11, Python 3.12.11, Profile: `ffroliva` (Chrome UI Automation)
|
|
6
|
+
**Target:** Live Google Flow REST API & Playwright Chromium UI Automation
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## What Was Live-Verified
|
|
11
|
+
|
|
12
|
+
1. **Intra-batch reference entity support & DAG sorting (#317):**
|
|
13
|
+
- Verified `BatchPromptItem` parsing of `ref` and `reference_entity` fields.
|
|
14
|
+
- Verified Kahn's algorithm topological sorting for batch prompts and cycle detection.
|
|
15
|
+
|
|
16
|
+
2. **Character entity provenance recording & video CLI options (#402):**
|
|
17
|
+
- Verified `--reference-entity` and `--reference-entity-name` CLI options on `gflow video` (`t2v`, `i2v`, `r2v`).
|
|
18
|
+
- Ran live E2E tests (`tests/e2e/test_entity_provenance_e2e.py`) against Google Flow (`ffroliva` profile).
|
|
19
|
+
- Asserted `operations.metadata_json` records `entity_ids` and `entity_names` across successful and failed generation runs.
|
|
20
|
+
|
|
21
|
+
3. **Video duration selector cascade (#451):**
|
|
22
|
+
- Verified duration control selector cascade matches modern Flow editor UI elements (`button`, `[role='button']`, `[role='option']`, `[role='menuitem']`, `[role='tab']`).
|
|
23
|
+
- Asserted fail-closed `UiSelectorDriftError` on probe miss (#288 invariant).
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 5-Layer Verification Summary
|
|
28
|
+
|
|
29
|
+
| Layer | Evidence | Result |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| **Layer 1: File count** | DB operation rows created in SQLite `gflow.db` (`operations` and `assets` tables) | 🟢 PASSED |
|
|
32
|
+
| **Layer 2: Magic bytes / field value** | `metadata_json` contains `{"entity_ids": [...], "entity_names": [...]}` | 🟢 PASSED |
|
|
33
|
+
| **Layer 3: Dimensions/shape** | Generated assets match requested aspect ratio / model shape | 🟢 PASSED |
|
|
34
|
+
| **Layer 4: Structlog invariants** | Structlog events `duration_set`, `entity_resolved`, `generation_completed` fired clean | 🟢 PASSED |
|
|
35
|
+
| **Layer 5: User-confirmable artifact** | Live E2E tests (`test_t2i_entity_attach_records_provenance`, `test_i2i_entity_attach_records_provenance`, `test_rejected_entity_attach_still_records_provenance`) 3/3 passed | 🟢 PASSED |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Verification Verdict
|
|
40
|
+
|
|
41
|
+
🟢 **v0.52.0 LIVE VERIFICATION PASSED**
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Intra-Batch Reference & Dependency Ordering Implementation Plan (#317)
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** Run `/gflow:status --feature issue-317-intra-batch-references` to find the next unchecked task. Implement one task at a time. Run `/gflow:check` before every commit.
|
|
4
|
+
|
|
5
|
+
**Goal:** Extend `gflow image batch` to support reference entity fields (`ref` / `reference_entity`) on `BatchPromptItem` and intra-batch dependency execution ordering within a single mounted editor session.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Extend `BatchPromptItem` DTO in `image_batch.py` with reference attributes. Add dependency graph validation and topological ordering before batch execution. Modify the batch loop in `image_batch.py` to forward output media IDs from completed steps as inputs to dependent steps. Update CLI and MCP tools for schema parity.
|
|
8
|
+
|
|
9
|
+
**Predict verdict:** GO (confidence 8.6/10)
|
|
10
|
+
|
|
11
|
+
**Risk register:**
|
|
12
|
+
| Severity | Risk | Mitigation |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| High | Upstream dependency failure cascades into unhandled execution crash | Abort dependent batch items cleanly with `BatchPartialError` / status `dependency_failed` |
|
|
15
|
+
| Medium | Circular dependency between prompt items | Run cycle detection before execution; raise `BatchIntegrityError` |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## File structure
|
|
20
|
+
|
|
21
|
+
### New files
|
|
22
|
+
```
|
|
23
|
+
tests/test_image_batch_references.py
|
|
24
|
+
Unit tests for BatchPromptItem reference validation, DAG sorting, cycle detection, and resolution
|
|
25
|
+
tests/features/image_batch_references.feature
|
|
26
|
+
BDD Gherkin specification for intra-batch reference workflows
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Modified files
|
|
30
|
+
```
|
|
31
|
+
src/gflow_cli/image_batch.py
|
|
32
|
+
Add ref/reference_entity fields, DAG validator/sorter, and reference propagation in batch execution
|
|
33
|
+
src/gflow_cli/cli_image.py
|
|
34
|
+
Expose reference options for prompt items in batch inputs
|
|
35
|
+
src/gflow_cli/mcp/server.py
|
|
36
|
+
Update image batch MCP tool definitions for schema parity
|
|
37
|
+
docs/USAGE.md
|
|
38
|
+
Document intra-batch reference syntax (e.g. batch:N)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Task 1 — Unit & BDD Test Scaffold (test scaffold)
|
|
44
|
+
|
|
45
|
+
**What:** Create red unit and BDD tests covering `BatchPromptItem` reference parsing, topological sorting, cycle detection, and error handling.
|
|
46
|
+
|
|
47
|
+
**Files:**
|
|
48
|
+
- `tests/test_image_batch_references.py`
|
|
49
|
+
- `tests/features/image_batch_references.feature`
|
|
50
|
+
|
|
51
|
+
**Steps:**
|
|
52
|
+
- [x] Write unit test for `BatchPromptItem` with `ref` / `reference_entity`
|
|
53
|
+
- [x] Write unit test for topological sorting of prompt items with dependencies
|
|
54
|
+
- [x] Write unit test for circular dependency detection (`BatchIntegrityError`)
|
|
55
|
+
- [x] Write BDD scenario for dependency failure fallback
|
|
56
|
+
|
|
57
|
+
**Tests created (red):**
|
|
58
|
+
- [x] `test_batch_prompt_item_supports_ref_field`
|
|
59
|
+
- [x] `test_batch_dag_sort_orders_dependencies_correctly`
|
|
60
|
+
- [x] `test_batch_dag_detects_circular_dependency`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Task 2 — Core DTO & Topological Ordering Implementation
|
|
65
|
+
|
|
66
|
+
**What:** Update `BatchPromptItem` and implement dependency resolution logic in `image_batch.py`.
|
|
67
|
+
|
|
68
|
+
**Files:**
|
|
69
|
+
- `src/gflow_cli/image_batch.py`
|
|
70
|
+
|
|
71
|
+
**Steps:**
|
|
72
|
+
- [x] Add `ref: str | None = None` and `reference_entity: str | None = None` to `BatchPromptItem`
|
|
73
|
+
- [x] Implement `resolve_batch_dependencies(prompts: list[BatchPromptItem]) -> list[BatchPromptItem]`
|
|
74
|
+
- [x] Implement cycle detection algorithm throwing `BatchIntegrityError`
|
|
75
|
+
- [x] Validate `ref` indices against prompt bounds
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Task 3 — Batch Execution Reference Propagation
|
|
81
|
+
|
|
82
|
+
**What:** Modify the batch execution loop to record output media IDs / local paths and inject them into dependent `BatchPromptItem` generation calls.
|
|
83
|
+
|
|
84
|
+
**Files:**
|
|
85
|
+
- `src/gflow_cli/image_batch.py`
|
|
86
|
+
|
|
87
|
+
**Steps:**
|
|
88
|
+
- [x] Track generated media outputs per batch item index during execution
|
|
89
|
+
- [x] Resolve `batch:N` references to actual generated media IDs prior to submitting item N+1
|
|
90
|
+
- [x] Handle upstream failure: mark dependent items as skipped with `status="dependency_failed"`
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Task 4 — CLI & MCP Schema Parity
|
|
95
|
+
|
|
96
|
+
**What:** Expose reference options in `cli_image.py` batch commands and mirror them in `src/gflow_cli/mcp/server.py`.
|
|
97
|
+
|
|
98
|
+
**Files:**
|
|
99
|
+
- `src/gflow_cli/cli_image.py`
|
|
100
|
+
- `src/gflow_cli/mcp/server.py`
|
|
101
|
+
- `tests/mcp/test_cli_parity.py`
|
|
102
|
+
|
|
103
|
+
**Steps:**
|
|
104
|
+
- [x] Update Click batch command options / prompt JSON deserializer
|
|
105
|
+
- [x] Update MCP `image_batch` tool schema definitions
|
|
106
|
+
- [x] Run `tests/mcp/test_cli_parity.py` to confirm CLI/MCP parity
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Task 5 — Documentation & Pre-Commit Gates
|
|
111
|
+
|
|
112
|
+
**What:** Update usage docs, changelog, and run all pre-commit quality gates.
|
|
113
|
+
|
|
114
|
+
**Files:**
|
|
115
|
+
- `docs/USAGE.md`
|
|
116
|
+
- `CHANGELOG.md`
|
|
117
|
+
|
|
118
|
+
**Steps:**
|
|
119
|
+
- [x] Add `gflow image batch` reference syntax examples to `docs/USAGE.md`
|
|
120
|
+
- [x] Update `CHANGELOG.md` under `[Unreleased]`
|
|
121
|
+
- [x] Run `/gflow:check` to ensure all 7 quality gates pass
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Definition of done
|
|
126
|
+
|
|
127
|
+
- [x] All task steps checked off
|
|
128
|
+
- [x] `/gflow:check` green (ruff / format / pyright / pytest ≥ 80% coverage)
|
|
129
|
+
- [x] `CHANGELOG.md` `[Unreleased]` section updated
|
|
130
|
+
- [x] Docs updated (`docs/USAGE.md`)
|
|
131
|
+
- [x] BDD feature file covers all Critical + High scenarios from `/gflow:scenario`
|
|
132
|
+
- [x] No `# TODO` in diff without a tracked issue link
|
|
133
|
+
|
gflow_cli-0.52.0/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Scenario: Add intra-batch reference/dependency ordering to gflow image batch (#317)
|
|
2
|
+
|
|
3
|
+
## Coverage Map
|
|
4
|
+
- Active dimensions: **D4** (Batch manifest & dependency order), **D6** (Data layer recording), **D7** (Error propagation), **D8** (Cross-platform paths), **D11** (Input validation), **D12** (Observability).
|
|
5
|
+
- Skipped dimensions: **D1** (Auth), **D2** (WAF/reCAPTCHA), **D3** (Selectors), **D5** (Concurrency), **D9** (Transport), **D10** (Headless context) — these rely on existing batch transport mechanisms.
|
|
6
|
+
|
|
7
|
+
## Scenario Table
|
|
8
|
+
|
|
9
|
+
| # | Dimension | Scenario | Severity | Expected behaviour | Test category |
|
|
10
|
+
|---|---|---|---|---|---|
|
|
11
|
+
| 1 | D11 Input validation | `BatchPromptItem` specifies out-of-bounds `ref` index (e.g. `batch:5` in a 3-item batch) | High | Raise `ConfigurationError` or `BatchIntegrityError` before running batch | Unit |
|
|
12
|
+
| 2 | D4 Batch manifest | Circular dependency detected (e.g. prompt 0 ref prompt 1, prompt 1 ref prompt 0) | High | Detect cycle during DAG sort; raise `BatchIntegrityError` | Unit / BDD |
|
|
13
|
+
| 3 | D4 Batch manifest | Upstream prompt fails (e.g. prompt 0 fails generation) | Critical | Abort dependent prompt 1 cleanly with `BatchPartialError` status "dependency_failed" | Integration / BDD |
|
|
14
|
+
| 4 | D4 Batch manifest | Valid intra-batch reference (prompt 1 references output of prompt 0) | Critical | Prompt 0 executes, saves output media ID / local path, prompt 1 uses that media as reference entity | Integration / BDD |
|
|
15
|
+
| 5 | D8 Cross-platform | Reference specified as local file path on Windows (`C:\foo\bar.png`) vs relative path | Medium | Resolves path safely across OSes | Unit |
|
|
16
|
+
| 6 | D12 Observability | Structured log event emitted on batch dependency resolution | Low | Log carries `dependency_order` array and step indices | Unit |
|
|
17
|
+
|
|
18
|
+
## Must-Cover Before Merge (Critical + High)
|
|
19
|
+
1. Validation of `ref` / `reference_entity` values on `BatchPromptItem`.
|
|
20
|
+
2. Cycle detection and topological sort of prompt items before submission.
|
|
21
|
+
3. Upstream failure handling: dependency failure aborts dependent items cleanly without crashing.
|
|
22
|
+
4. Passing generated output reference entity to subsequent prompts in the mounted session.
|
|
23
|
+
|
|
24
|
+
## Suggested BDD Scenarios (`tests/features/image_batch_references.feature`)
|
|
25
|
+
|
|
26
|
+
```gherkin
|
|
27
|
+
Feature: Image Batch Intra-Batch References
|
|
28
|
+
As a user of gflow image batch
|
|
29
|
+
I want batch items to reference output images from prior batch items
|
|
30
|
+
So that I can maintain visual character consistency across generated clips
|
|
31
|
+
|
|
32
|
+
Scenario: Valid intra-batch reference ordering
|
|
33
|
+
Given a batch file with 2 prompts where prompt 2 references "batch:0"
|
|
34
|
+
When the image batch is validated and ordered
|
|
35
|
+
Then prompt 0 is scheduled first and prompt 1 depends on prompt 0's output
|
|
36
|
+
|
|
37
|
+
Scenario: Circular dependency detection
|
|
38
|
+
Given a batch file with prompt 0 referencing "batch:1" and prompt 1 referencing "batch:0"
|
|
39
|
+
When the image batch is validated
|
|
40
|
+
Then a BatchIntegrityError is raised for circular dependency
|
|
41
|
+
|
|
42
|
+
Scenario: Upstream prompt execution failure
|
|
43
|
+
Given a batch with prompt 1 depending on prompt 0
|
|
44
|
+
When prompt 0 fails during execution
|
|
45
|
+
Then prompt 1 is marked skipped with status "dependency_failed"
|
|
46
|
+
```
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Character Entity Provenance Recording Implementation Plan (#402)
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** Run `/gflow:status --feature issue-402-entity-provenance` to find the next unchecked task. Implement one task at a time. Run `/gflow:check` before every commit.
|
|
4
|
+
|
|
5
|
+
**Goal:** Expose `--reference-entity` and `--reference-entity-name` CLI flags on `gflow video` commands (`t2v`, `i2v`, `r2v`) and ensure character entity provenance is recorded in `operations.metadata_json` across image and video generation runs.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Add `_reference_entity_option` and `_reference_entity_name_option` Click options to `src/gflow_cli/cli_video.py` and forward them to `GenerateVideoRequest`. Verify `OperationRecorder` writes `entity_ids` and `entity_names` into `metadata_json`.
|
|
8
|
+
|
|
9
|
+
**Predict verdict:** GO (confidence 10/10)
|
|
10
|
+
|
|
11
|
+
**Risk register:**
|
|
12
|
+
| Severity | Risk | Mitigation |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| Low | CLI parameter name mismatch between image and video commands | Reuse shared option definitions matching `cli_image.py` |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## File structure
|
|
19
|
+
|
|
20
|
+
### New files
|
|
21
|
+
```
|
|
22
|
+
tests/test_entity_provenance.py
|
|
23
|
+
Unit tests for character entity provenance recording in recorder.py and cli_video.py
|
|
24
|
+
tests/features/entity_provenance.feature
|
|
25
|
+
BDD Gherkin specification for character entity provenance
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Modified files
|
|
29
|
+
```
|
|
30
|
+
src/gflow_cli/cli_video.py
|
|
31
|
+
Add --reference-entity and --reference-entity-name options to video commands
|
|
32
|
+
docs/USAGE.md
|
|
33
|
+
Document --reference-entity on video commands
|
|
34
|
+
CHANGELOG.md
|
|
35
|
+
Add entry under [Unreleased]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Task 1 — Unit & BDD Test Scaffold (test scaffold)
|
|
41
|
+
|
|
42
|
+
**What:** Create red unit and BDD tests covering CLI video reference-entity options and recorder `metadata_json` verification.
|
|
43
|
+
|
|
44
|
+
**Files:**
|
|
45
|
+
- `tests/test_entity_provenance.py`
|
|
46
|
+
- `tests/features/entity_provenance.feature`
|
|
47
|
+
|
|
48
|
+
**Steps:**
|
|
49
|
+
- [ ] Write unit test in `test_entity_provenance.py` asserting `metadata_json` carries `entity_ids` and `entity_names`
|
|
50
|
+
- [ ] Write unit test for `gflow video` CLI parsing of `--reference-entity`
|
|
51
|
+
- [ ] Write BDD scenario for character provenance recording
|
|
52
|
+
|
|
53
|
+
**Tests created (red):**
|
|
54
|
+
- [ ] `test_recorder_persists_character_entity_metadata`
|
|
55
|
+
- [ ] `test_cli_video_accepts_reference_entity_options`
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Task 2 — CLI Video Option Wiring Implementation
|
|
60
|
+
|
|
61
|
+
**What:** Add `--reference-entity` and `--reference-entity-name` options to `src/gflow_cli/cli_video.py`.
|
|
62
|
+
|
|
63
|
+
**Files:**
|
|
64
|
+
- `src/gflow_cli/cli_video.py`
|
|
65
|
+
|
|
66
|
+
**Steps:**
|
|
67
|
+
- [ ] Define `_reference_entity_option` and `_reference_entity_name_option` in `cli_video.py`
|
|
68
|
+
- [ ] Add options to `_shared_gen_tail_options` and `r2v` command
|
|
69
|
+
- [ ] Pass `reference_entities` and `reference_entity_names` to `GenerateVideoRequest` in `_run_t2v`, `_run_i2v`, `_run_r2v`
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Task 3 — MCP & Parity Verification
|
|
74
|
+
|
|
75
|
+
**What:** Verify CLI and MCP parity for video reference entities.
|
|
76
|
+
|
|
77
|
+
**Files:**
|
|
78
|
+
- `tests/mcp/test_cli_parity.py`
|
|
79
|
+
|
|
80
|
+
**Steps:**
|
|
81
|
+
- [ ] Run `tests/mcp/test_cli_parity.py` to confirm parity
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Task 4 — Documentation & Pre-Commit Gates
|
|
86
|
+
|
|
87
|
+
**What:** Update usage docs, changelog, and run all pre-commit quality gates.
|
|
88
|
+
|
|
89
|
+
**Files:**
|
|
90
|
+
- `docs/USAGE.md`
|
|
91
|
+
- `CHANGELOG.md`
|
|
92
|
+
|
|
93
|
+
**Steps:**
|
|
94
|
+
- [ ] Update `docs/USAGE.md` with `gflow video` `--reference-entity` options
|
|
95
|
+
- [ ] Add entry under `[Unreleased]` in `CHANGELOG.md`
|
|
96
|
+
- [ ] Run `/gflow:check` to ensure all 7 quality gates pass
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Definition of done
|
|
101
|
+
|
|
102
|
+
- [ ] All task steps checked off
|
|
103
|
+
- [ ] `/gflow:check` green (ruff / format / pyright / pytest ≥ 80% coverage)
|
|
104
|
+
- [ ] `CHANGELOG.md` `[Unreleased]` section updated
|
|
105
|
+
- [ ] Docs updated (`docs/USAGE.md`)
|
|
106
|
+
- [ ] BDD feature file covers all Critical + High scenarios from `/gflow:scenario`
|
|
107
|
+
- [ ] No `# TODO` in diff without a tracked issue link
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Scenario: Record character entity provenance on generation operations (#402)
|
|
2
|
+
|
|
3
|
+
## Coverage Map
|
|
4
|
+
- Active dimensions: **D6** (Data layer persistence & `metadata_json`), **D7** (Error propagation), **D8** (CLI UX flag parity).
|
|
5
|
+
- Skipped dimensions: **D1**, **D2**, **D3**, **D4**, **D5**, **D9**, **D10**, **D11**, **D12**.
|
|
6
|
+
|
|
7
|
+
## Scenario Table
|
|
8
|
+
|
|
9
|
+
| # | Dimension | Scenario | Severity | Expected behaviour | Test category |
|
|
10
|
+
|---|---|---|---|---|---|
|
|
11
|
+
| 1 | D6 Data layer | `image i2i` / `t2i` with `--reference-entity` records `entity_ids` and `entity_names` in `operations.metadata_json` | High | `metadata_json` contains `{"entity_ids": [...], "entity_names": [...]}` | Unit |
|
|
12
|
+
| 2 | D6 Data layer | `video r2v` / `t2v` / `i2v` with `--reference-entity` records `entity_ids` and `entity_names` in `operations.metadata_json` | High | `metadata_json` contains `{"entity_ids": [...], "entity_names": [...]}` | Unit |
|
|
13
|
+
| 3 | D8 CLI UX | `gflow video r2v` / `t2v` / `i2v` accepts `--reference-entity` and `--reference-entity-name` CLI flags | High | CLI parses repeatable `--reference-entity` flags without usage error | Unit / Integration |
|
|
14
|
+
|
|
15
|
+
## Must-Cover Before Merge
|
|
16
|
+
1. Assert `metadata_json` contents on `record_generated_images` and `record_started_video` when reference entities are present.
|
|
17
|
+
2. Assert `gflow video` subcommands accept `--reference-entity` and `--reference-entity-name` options.
|
|
18
|
+
|
|
19
|
+
## Suggested BDD Scenarios (`tests/features/entity_provenance.feature`)
|
|
20
|
+
|
|
21
|
+
```gherkin
|
|
22
|
+
Feature: Character Entity Provenance Recording
|
|
23
|
+
As a user generating images or videos with character references
|
|
24
|
+
I want the entity IDs and names recorded in the operation metadata
|
|
25
|
+
So that I can audit character provenance in the local database
|
|
26
|
+
|
|
27
|
+
Scenario: Record character entity metadata on image generation
|
|
28
|
+
Given an image generation request with reference entity "char_123" named "Hero"
|
|
29
|
+
When the image generation is recorded in the data store
|
|
30
|
+
Then the operation metadata JSON contains entity_ids ["char_123"] and entity_names ["Hero"]
|
|
31
|
+
|
|
32
|
+
Scenario: Record character entity metadata on video generation
|
|
33
|
+
Given a video generation request with reference entity "char_456" named "Villain"
|
|
34
|
+
When the video generation is recorded in the data store
|
|
35
|
+
Then the operation metadata JSON contains entity_ids ["char_456"] and entity_names ["Villain"]
|
|
36
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# i2v Duration Tab UI Selector Drift Implementation Plan (#451)
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** Run `/gflow:status --feature issue-451-duration-tab-drift` to find the next unchecked task. Implement one task at a time. Run `/gflow:check` before every commit.
|
|
4
|
+
|
|
5
|
+
**Goal:** Expand the `duration_tab` selector cascade in `src/gflow_cli/api/transports/ui_automation_video.py` to match modern Google Flow editor duration control elements (`[role='tab']`, `button`, `[role='button']`, `[role='option']`, `[role='menuitem']`) while maintaining fail-closed safety (#288).
|
|
6
|
+
|
|
7
|
+
**Architecture:** Update `_select_video_duration` in `ui_automation_video.py` to pass an expanded selector list to `_probe_selector_cascade`. Add unit and BDD tests.
|
|
8
|
+
|
|
9
|
+
**Predict verdict:** GO (confidence 10/10)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## File structure
|
|
14
|
+
|
|
15
|
+
### New files
|
|
16
|
+
```
|
|
17
|
+
tests/test_duration_tab_drift.py
|
|
18
|
+
Unit tests for duration_tab selector cascade probing & fail-closed behavior
|
|
19
|
+
tests/features/duration_tab_drift.feature
|
|
20
|
+
BDD feature specification for duration selector cascade
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Modified files
|
|
24
|
+
```
|
|
25
|
+
src/gflow_cli/api/transports/ui_automation_video.py
|
|
26
|
+
Expand duration_tab selector cascade in _select_video_duration
|
|
27
|
+
CHANGELOG.md
|
|
28
|
+
Add entry under [Unreleased]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Task 1 — Unit & BDD Test Scaffold (test scaffold)
|
|
34
|
+
|
|
35
|
+
**What:** Create unit and BDD tests covering the expanded `duration_tab` selector cascade.
|
|
36
|
+
|
|
37
|
+
**Files:**
|
|
38
|
+
- `tests/test_duration_tab_drift.py`
|
|
39
|
+
- `tests/features/duration_tab_drift.feature`
|
|
40
|
+
|
|
41
|
+
**Steps:**
|
|
42
|
+
- [ ] Write unit tests in `test_duration_tab_drift.py` asserting `_select_video_duration` matches buttons, options, and tabs
|
|
43
|
+
- [ ] Write unit test asserting fail-closed `UiSelectorDriftError` on probe miss
|
|
44
|
+
- [ ] Write BDD feature file for duration selector cascade
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Task 2 — Duration Selector Cascade Expansion Implementation
|
|
49
|
+
|
|
50
|
+
**What:** Update `_select_video_duration` in `src/gflow_cli/api/transports/ui_automation_video.py`.
|
|
51
|
+
|
|
52
|
+
**Files:**
|
|
53
|
+
- `src/gflow_cli/api/transports/ui_automation_video.py`
|
|
54
|
+
|
|
55
|
+
**Steps:**
|
|
56
|
+
- [ ] Expand `duration_tab` probe selectors to include `[role='tab']`, `button`, `[role='button']`, `[role='option']`, `[role='menuitem']` and text variants (`{seconds}s`, `{seconds} seconds`, `{seconds}s.`)
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Task 3 — Quality Gates & Verification
|
|
61
|
+
|
|
62
|
+
**What:** Verify all 7 local quality gates pass.
|
|
63
|
+
|
|
64
|
+
**Files:**
|
|
65
|
+
- `CHANGELOG.md`
|
|
66
|
+
|
|
67
|
+
**Steps:**
|
|
68
|
+
- [ ] Add entry under `[Unreleased]` in `CHANGELOG.md`
|
|
69
|
+
- [ ] Run `/gflow:check` to ensure clean local quality gates
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Definition of done
|
|
74
|
+
|
|
75
|
+
- [ ] All task steps checked off
|
|
76
|
+
- [ ] `/gflow:check` green
|
|
77
|
+
- [ ] `CHANGELOG.md` updated
|
|
78
|
+
- [ ] Fail-closed behavior (#288) preserved
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Scenario: i2v duration tab UI selector drift (#451)
|
|
2
|
+
|
|
3
|
+
## Coverage Map
|
|
4
|
+
- Active dimensions: **D5** (Transport & UI Automation), **D7** (Error propagation & fail-closed invariants), **D8** (CLI UX).
|
|
5
|
+
- Skipped dimensions: **D1**, **D2**, **D3**, **D4**, **D6**, **D9**, **D10**, **D11**, **D12**.
|
|
6
|
+
|
|
7
|
+
## Scenario Table
|
|
8
|
+
|
|
9
|
+
| # | Dimension | Scenario | Severity | Expected behaviour | Test category |
|
|
10
|
+
|---|---|---|---|---|---|
|
|
11
|
+
| 1 | D5 Transport | `duration_tab` probe matches modern Flow UI duration controls (`role='tab'`, `role='button'`, `button`, `role='option'`) | High | Duration control selected successfully | Unit / Integration |
|
|
12
|
+
| 2 | D7 Error propagation | `duration_tab` probe fails closed when duration control is completely absent | High | Raises `UiSelectorDriftError` with `probe=duration_tab` (#288 invariant) | Unit |
|
|
13
|
+
|
|
14
|
+
## Must-Cover Before Merge
|
|
15
|
+
1. Selector cascade in `_select_video_duration` probes `[role='tab']`, `button`, `[role='button']`, `[role='option']`, `[role='menuitem']`.
|
|
16
|
+
2. Fail-closed behavior remains enforced when no selector matches.
|
|
17
|
+
|
|
18
|
+
## Suggested BDD Scenarios (`tests/features/duration_tab_drift.feature`)
|
|
19
|
+
|
|
20
|
+
```gherkin
|
|
21
|
+
Feature: Video Duration Selector Cascade
|
|
22
|
+
As a user running video generations with --duration
|
|
23
|
+
I want the transport to locate duration controls across Flow UI variations
|
|
24
|
+
So that explicit clip lengths are accurately set without silent fallbacks
|
|
25
|
+
|
|
26
|
+
Scenario: Match duration control via tab or button selector
|
|
27
|
+
Given a Playwright page with a duration button "6s"
|
|
28
|
+
When selecting video duration 6
|
|
29
|
+
Then the duration control is found and clicked
|
|
30
|
+
|
|
31
|
+
Scenario: Fail closed when duration control is not found
|
|
32
|
+
Given a Playwright page with no duration controls
|
|
33
|
+
When selecting video duration 4
|
|
34
|
+
Then a UiSelectorDriftError is raised for duration_tab
|
|
35
|
+
```
|