gflow-cli 0.70.0__tar.gz → 0.71.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.70.0 → gflow_cli-0.71.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/dependabot.yml +0 -26
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/pages.yml +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/release.yml +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.gitignore +9 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/AGENTS.md +3 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/CHANGELOG.md +257 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/KNOWN_ISSUES.md +3 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/PKG-INFO +2 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/AGENT_GUIDE.md +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/CHARACTER.md +41 -15
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/CHARACTER_RECON.md +7 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/GITHUB.md +4 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/INDEX.md +1 -1
- gflow_cli-0.71.0/docs/LIVE_VERIFICATION_v0.71.0.md +120 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/MOVIE.md +60 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/PROJECT_STATUS.md +38 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/USAGE.md +10 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +8 -1
- gflow_cli-0.71.0/docs/superpowers/memory/ligature-carrier-differs-by-host.md +45 -0
- gflow_cli-0.71.0/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +145 -0
- gflow_cli-0.71.0/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +102 -0
- gflow_cli-0.71.0/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +120 -0
- gflow_cli-0.71.0/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +113 -0
- gflow_cli-0.71.0/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +106 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/pyproject.toml +3 -3
- gflow_cli-0.71.0/scripts/dev/acceptance/__init__.py +47 -0
- gflow_cli-0.71.0/scripts/dev/acceptance/bench.py +140 -0
- gflow_cli-0.71.0/scripts/dev/acceptance/domain.py +109 -0
- gflow_cli-0.71.0/scripts/dev/acceptance/judge.py +381 -0
- gflow_cli-0.71.0/scripts/dev/acceptance/settings.py +83 -0
- gflow_cli-0.71.0/scripts/dev/capture_i2v_frame_slots_dom.py +203 -0
- gflow_cli-0.71.0/scripts/dev/capture_i2v_intercept_submit.py +267 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_i2v_model_select_repro.py +38 -33
- gflow_cli-0.71.0/scripts/dev/capture_i2v_post_bind_state.py +293 -0
- gflow_cli-0.71.0/scripts/dev/capture_image_add_media_dom.py +192 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_locale_invariants.py +6 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +27 -9
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_cdp_har_without_node.py +6 -1
- gflow_cli-0.71.0/scripts/dev/spike_character_editor_ready_gate.py +204 -0
- gflow_cli-0.71.0/scripts/dev/spike_character_prompt_format.py +270 -0
- gflow_cli-0.71.0/scripts/dev/spike_entity_submit_rpcs.py +263 -0
- gflow_cli-0.71.0/scripts/dev/spike_format_prompt_effect.py +208 -0
- gflow_cli-0.71.0/scripts/dev/spike_host_lane.py +156 -0
- gflow_cli-0.71.0/scripts/dev/spike_ligature_carrier_sweep.py +315 -0
- gflow_cli-0.71.0/scripts/dev/spike_migrated_composer_mode_axis.py +208 -0
- gflow_cli-0.71.0/scripts/dev/spike_migrated_entity_submit.py +243 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_image_capability.py +58 -4
- gflow_cli-0.71.0/scripts/dev/spike_migrated_picker_option_kind.py +132 -0
- gflow_cli-0.71.0/scripts/dev/spike_migrated_submit_anchor.py +149 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +123 -118
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_patchright.py +5 -1
- gflow_cli-0.71.0/scripts/dev/spike_project_media_status.py +120 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/pr-council-review/SKILL.md +2 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/spike/SKILL.md +27 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/SKILL.md +149 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/_cli_helpers.py +11 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/client.py +36 -9
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/migrated_composer.py +175 -11
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/ui_automation.py +251 -49
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_character.py +7 -3
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/diagnostics.py +7 -2
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/errors.py +44 -0
- gflow_cli-0.71.0/tests/api/transports/test_ligature_carrier.py +202 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_migrated_composer.py +129 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_migrated_dispatch.py +28 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_migrated_r2v.py +91 -0
- gflow_cli-0.71.0/tests/api/transports/test_new_project_cta_migrated.py +72 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_ui_automation.py +29 -13
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_ui_character_editor.py +283 -15
- gflow_cli-0.71.0/tests/cli/test_run_with_handlers_context_leak.py +74 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/conftest.py +7 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +26 -6
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_character_create_e2e.py +260 -25
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_character_mcp_parity_e2e.py +17 -1
- gflow_cli-0.71.0/tests/e2e/test_e2e_env_isolation.py +44 -0
- gflow_cli-0.71.0/tests/e2e/test_insufficient_credits_e2e.py +90 -0
- gflow_cli-0.71.0/tests/scripts/test_frame_acceptance.py +321 -0
- gflow_cli-0.71.0/tests/scripts/test_spike_page_pool.py +81 -0
- gflow_cli-0.71.0/tests/scripts/test_spike_profile_lease.py +72 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_documentation_gate.py +17 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/uv.lock +31 -31
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/CHARACTER.md +41 -15
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/KNOWN_ISSUES.md +3 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/MOVIE.md +60 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/USAGE.md +10 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/installation.md +1 -1
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/requirements.txt +3 -3
- gflow_cli-0.70.0/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -163
- gflow_cli-0.70.0/eval/pr_triage_eval.py +0 -42
- gflow_cli-0.70.0/eval/pr_triage_fixtures.json +0 -194
- gflow_cli-0.70.0/scripts/autopilot/Dockerfile.triage +0 -54
- gflow_cli-0.70.0/scripts/autopilot/entrypoint.sh +0 -10
- gflow_cli-0.70.0/scripts/autopilot/package-lock.json +0 -152
- gflow_cli-0.70.0/scripts/autopilot/package.json +0 -8
- gflow_cli-0.70.0/scripts/autopilot/pr_triage_autopilot.py +0 -859
- gflow_cli-0.70.0/scripts/autopilot/pr_triage_gate.py +0 -192
- gflow_cli-0.70.0/scripts/autopilot/run_sandboxed_review.sh +0 -188
- gflow_cli-0.70.0/scripts/dev/capture_i2v_frame_slots_dom.py +0 -198
- gflow_cli-0.70.0/scripts/dev/capture_i2v_intercept_submit.py +0 -262
- gflow_cli-0.70.0/scripts/dev/capture_i2v_post_bind_state.py +0 -288
- gflow_cli-0.70.0/scripts/dev/capture_image_add_media_dom.py +0 -184
- gflow_cli-0.70.0/scripts/dev/spike_character_prompt_format.py +0 -121
- gflow_cli-0.70.0/tests/autopilot/test_pr_triage_autopilot.py +0 -1149
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/spike.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.env.template +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.gitattributes +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/.secrets.baseline +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/CLAUDE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/LICENSE +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/RELEASE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/ROADMAP.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docker-compose.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/MCP.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/release-signing.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/index.html +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/llms.txt +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_council_memory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/measure_html_lang_settle.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/README.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/clip_qa.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/composition.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/consistency.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/failure-modes.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/skills/video-production/tasks.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/sonar-project.properties +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/batchexecute.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_update.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_character_readback_fallback.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_migrated_mint.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_credits_http.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_batchexecute.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_character_model_picker.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_migrated_route.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_credits_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_migrated_host_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/credits.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/latched_locale_recovery.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/migrated_driver.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/migrated_host_gate.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/migrated_i2v.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_credits_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_migrated_driver_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_migrated_i2v_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_character_tools.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_credits_tool.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_council_memory.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_extract_har_summary.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_skillopt_scoring.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_credits.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_cli_update.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_config.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_media.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/index.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.70.0 → gflow_cli-0.71.0}/website/requirements.in +0 -0
|
@@ -111,32 +111,6 @@ updates:
|
|
|
111
111
|
applies-to: version-updates
|
|
112
112
|
patterns: ["*"]
|
|
113
113
|
|
|
114
|
-
# npm — the PR-triage sandbox's pinned Claude Code CLI
|
|
115
|
-
# (scripts/autopilot/package-lock.json, installed via `npm ci` in
|
|
116
|
-
# Dockerfile.triage).
|
|
117
|
-
- package-ecosystem: "npm"
|
|
118
|
-
directory: "/scripts/autopilot"
|
|
119
|
-
schedule:
|
|
120
|
-
interval: "weekly"
|
|
121
|
-
day: "monday"
|
|
122
|
-
time: "08:00"
|
|
123
|
-
timezone: "Europe/Lisbon"
|
|
124
|
-
open-pull-requests-limit: 2
|
|
125
|
-
labels:
|
|
126
|
-
- "dependencies"
|
|
127
|
-
|
|
128
|
-
# Docker — the digest-pinned node:20-slim base of Dockerfile.triage.
|
|
129
|
-
- package-ecosystem: "docker"
|
|
130
|
-
directory: "/scripts/autopilot"
|
|
131
|
-
schedule:
|
|
132
|
-
interval: "weekly"
|
|
133
|
-
day: "monday"
|
|
134
|
-
time: "08:00"
|
|
135
|
-
timezone: "Europe/Lisbon"
|
|
136
|
-
open-pull-requests-limit: 2
|
|
137
|
-
labels:
|
|
138
|
-
- "dependencies"
|
|
139
|
-
|
|
140
114
|
# uv — the hash-pinned MkDocs set for the Pages build
|
|
141
115
|
# (website/requirements.txt, compiled from website/requirements.in).
|
|
142
116
|
# "uv", NOT "pip", for the same reason as the root entry: the pip ecosystem
|
|
@@ -73,7 +73,7 @@ jobs:
|
|
|
73
73
|
# Configure once at https://pypi.org/manage/account/publishing/
|
|
74
74
|
|
|
75
75
|
- name: Create GitHub Release
|
|
76
|
-
uses: softprops/action-gh-release@
|
|
76
|
+
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3
|
|
77
77
|
with:
|
|
78
78
|
generate_release_notes: true
|
|
79
79
|
files: dist/*
|
|
@@ -45,6 +45,15 @@ secrets.json
|
|
|
45
45
|
.env.local
|
|
46
46
|
.env.*.local
|
|
47
47
|
|
|
48
|
+
# Runtime state written into this repo by tools run FROM this directory.
|
|
49
|
+
# social-publisher's queue defaults to a RELATIVE path (its cli.py: SP_QUEUE_DB,
|
|
50
|
+
# default "state/queue.sqlite"), so invoking it — or its MCP server — with this repo
|
|
51
|
+
# as CWD silently creates state/queue.sqlite here. On 2026-09-07 that produced a
|
|
52
|
+
# second, EMPTY queue that a dry-run then read and reported as "nothing pending",
|
|
53
|
+
# while the real queue sat in social-publisher/state/. Untracked and unignored, it
|
|
54
|
+
# was also one `git add -A` from being committed.
|
|
55
|
+
state/
|
|
56
|
+
|
|
48
57
|
# Generated outputs
|
|
49
58
|
out/
|
|
50
59
|
tmp/
|
|
@@ -62,7 +62,8 @@ If you can help unblock a pure HTTP transport (especially for video generation,
|
|
|
62
62
|
## Dev environment tips
|
|
63
63
|
|
|
64
64
|
- `uv sync` then `uv run playwright install chromium`. No global Python install needed.
|
|
65
|
-
- Copy `.env.template` to
|
|
65
|
+
- Copy `.env.template` to **`.env`** — either in the directory you run `gflow` from (project-local) or at `$GFLOW_CLI_HOME/.env` (machine-wide); on conflict the CWD one wins. It documents every env var. Both are gitignored; never commit either.
|
|
66
|
+
**Not `.env.local` — nothing loads that file.** `config.py::_env_files()` returns exactly `(<home>/.env, .env)`, so `GFLOW_CLI_*` settings put in `.env.local` are silently ignored and `get_settings()` reports the default as though you had set nothing. Keeping a `.env.local` for credentials **you** read by hand (e.g. `SONAR_TOKEN`) is fine — it is only wrong as a home for gflow's own settings.
|
|
66
67
|
- Output goes to `./tmp/` for scripts/tests or `$GFLOW_CLI_OUTPUT_DIR` for CLI outputs (defaults to `./out/`).
|
|
67
68
|
- One-time auth: `gflow auth login --browser chrome` (recommended — a real-Chrome profile is what generation runs need; the default `--browser auto` can also pick the internal strategy, and generation later fails fast on profiles created with a non-chrome strategy).
|
|
68
69
|
- Use `/gflow:status` to see the current task before starting work; `/gflow:known-issues` before touching auth or reCAPTCHA code paths.
|
|
@@ -105,7 +106,7 @@ the five other mirror axes), which no command here can check and no CI gate can
|
|
|
105
106
|
|
|
106
107
|
- Type hints everywhere; `pyright` strict on `src/gflow_cli`.
|
|
107
108
|
- Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
|
|
108
|
-
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–
|
|
109
|
+
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–37, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`, 37 `InsufficientCreditsError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
|
|
109
110
|
- 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
|
|
110
111
|
- **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
|
|
111
112
|
- **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
|
|
@@ -7,6 +7,261 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.71.0] — 2026-09-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`--format-prompt` could submit an EMPTY prompt and log it as success.** The
|
|
15
|
+
observed-rewrite gate compared `abs(len(current) - len(typed)) >= 16`, and `abs` accepts
|
|
16
|
+
change in either direction. Flow **clears** the composer before repopulating it, so a poll
|
|
17
|
+
landing in that window read `""`, `abs(0 - 19) = 19` passed the gate, and `_send_prompt`
|
|
18
|
+
called `_click_submit` on the very next line — submitting nothing, on a path that spends
|
|
19
|
+
image quota, while `ui_automation.prompt_formatted` logged `prompt_len_after=0`
|
|
20
|
+
(`prompt_hash=e3b0c442`, the SHA-256 of the empty string).
|
|
21
|
+
|
|
22
|
+
Silent, billed, and self-certifying: a user hitting it would see a charge, an empty
|
|
23
|
+
result, and a log line saying it worked. It is also the exact defect the same release
|
|
24
|
+
fixes — a success signal that fires on the **absence** of the thing it measures — rebuilt
|
|
25
|
+
inside its own fix.
|
|
26
|
+
|
|
27
|
+
The gate now requires **growth** (`len(current) >= len(typed) + MIN_DELTA`) rather than an
|
|
28
|
+
absolute delta, plus a settle check: two reads one poll-interval apart must agree, because
|
|
29
|
+
the single discrete swap measured live was sampled at 250 ms and a partial write between
|
|
30
|
+
samples was never ruled out. Found by an adversarial review of the fix, not by the fix's
|
|
31
|
+
own tests. ([#745](https://github.com/ffroliva/gflow-cli/issues/745))
|
|
32
|
+
|
|
33
|
+
- **The entity guard recorded a cause that was wrong, and it is retracted.** The
|
|
34
|
+
`reference_entities` refusal in `_unported_form` said the submit *"never produces a
|
|
35
|
+
YhhmEf/eb1hJf/MZZa6b reply"*, cause unknown, undiagnosable without fixing
|
|
36
|
+
[#722](https://github.com/ffroliva/gflow-cli/issues/722). Reading the wire live shows
|
|
37
|
+
otherwise: `MZZa6b` **does** reply, with a null payload and an error slot, and the generation
|
|
38
|
+
is **accepted and queued** — Flow derives an `abra_r2v_8s` model key and renders it. What
|
|
39
|
+
fails is the observer: a null payload never names a media id, so `submit_and_observe`'s
|
|
40
|
+
`submitted` future never resolves and `SUBMIT_REPLY_BUDGET_S` (60 s) expires. That budget's
|
|
41
|
+
own comment records its calibration — *"the submit reply arrived 4.0–4.6 s after the click"* —
|
|
42
|
+
against an idle queue, while Flow allows **five concurrent generations** and throttles
|
|
43
|
+
per-minute throughput after heavy daily use. The run exits 9 `TransportTimeoutError` while the
|
|
44
|
+
video is still rendering. The guard **stays** (a timeout reported on a generation that is
|
|
45
|
+
actually running is worse for the user than an explicit refusal) but its reason is now
|
|
46
|
+
accurate and the fix is named beside it: on a null submit payload, fall through to the
|
|
47
|
+
`jwpduf`/`as29s` status poll. Two earlier comments on that guard, including one added in this
|
|
48
|
+
release, asserted the wrong cause.
|
|
49
|
+
([#723](https://github.com/ffroliva/gflow-cli/issues/723),
|
|
50
|
+
[#742](https://github.com/ffroliva/gflow-cli/pull/742))
|
|
51
|
+
- **`docs/CHARACTER.md` and `docs/CHARACTER_RECON.md` disagreed on the voice wire case, and one
|
|
52
|
+
was wrong.** CHARACTER.md called the Capitalized UI name canonical while flagging the question
|
|
53
|
+
UNVERIFIED; CHARACTER_RECON.md recorded `presetVoiceId: "gacrux"` and stated the preset id is
|
|
54
|
+
the lowercased name. A live run settles it: `sent='Charon' stored='Charon' identical=True`.
|
|
55
|
+
Both documents now also record that `personalityNotes` is **Agent-scoped** — Flow's own editor
|
|
56
|
+
says *"The Flow agent can use this information to help craft scenes with your character"* — so
|
|
57
|
+
it is not a control on the audio engine and should not be expected to steer a `t2v`/`r2v`
|
|
58
|
+
performance. ([#736](https://github.com/ffroliva/gflow-cli/pull/736))
|
|
59
|
+
- **The "+ New project" CTA is found by structure again, not by English.** Its Tier-1 anchors
|
|
60
|
+
all targeted the `add_2` ligature. The migrated `flow.google.com` gallery renders **`add`**
|
|
61
|
+
under a `<mat-icon>` and renders `add_2` nowhere on that surface, so every structural entry
|
|
62
|
+
missed and the CTA was reached only by `button:has-text('New project')` — the localised-text
|
|
63
|
+
anti-pattern Tier 1 exists to avoid, and one that fails outright on a non-English migrated
|
|
64
|
+
profile. Tier 1 now leads with a class-only `add` anchor covering both carriers; measured on
|
|
65
|
+
the live gallery (control: 47 ligature nodes) it matches 1 where every previous entry
|
|
66
|
+
matched 0.
|
|
67
|
+
|
|
68
|
+
Also removed: `button:text-matches('^\+\s+\S+$', 'i')`. It is not a valid Playwright
|
|
69
|
+
selector and **raised on every evaluation** — observed twice against the live gallery — with
|
|
70
|
+
`except Exception: continue` swallowing it, so it had never matched anything on any host
|
|
71
|
+
while costing a round trip per attempt.
|
|
72
|
+
|
|
73
|
+
**This reverts the guard added moments earlier in the same release.** That guard raised
|
|
74
|
+
`FlowHostMigratedError` claiming the migrated host "renders no '+ New project' control gflow
|
|
75
|
+
can drive". It was an unproven negative, generalised from a sweep of two other surfaces to a
|
|
76
|
+
third that was never probed, and a live run disproved it in one click by creating a project
|
|
77
|
+
there. On a non-EN migrated profile it would have told the user that host has no such
|
|
78
|
+
control — false, and a dead end — when the real fix was to anchor on `add`.
|
|
79
|
+
([#730](https://github.com/ffroliva/gflow-cli/issues/730))
|
|
80
|
+
|
|
81
|
+
- **~~A migrated-host gallery no longer reports a missing control as selector drift.~~ REVERTED WITHIN THIS RELEASE — kept for the record, see the bullet above.** The guard described below shipped and was removed again before the tag, because a live run created a project on that very surface in one click. The net change in v0.71.0 is the one above: the CTA is anchored structurally on `add` instead of by English text. Nothing in the paragraph that follows is behaviour you will find in this release.
|
|
82
|
+
`NEW_PROJECT_SELECTORS` anchors on the `add_2` ligature. The migrated `flow.google.com`
|
|
83
|
+
frontend renders **`add`** and renders `add_2` **nowhere** — composer `add=1/add_2=0`,
|
|
84
|
+
editor `add=2/add_2=0`, measured with per-surface controls. That is a ligature *name*
|
|
85
|
+
drift, not the carrier split, so a `mat-icon` twin would not have helped. Reaching the
|
|
86
|
+
sweep there produced `Could not find 'New project' CTA on Flow gallery`, whose remediation
|
|
87
|
+
is "check for a newer release, then file a frontend bug" — unfixable by the reader, and
|
|
88
|
+
pointing at the wrong culprit, exactly as a credit shortfall once reported as frontend
|
|
89
|
+
drift. It now raises `FlowHostMigratedError` naming the host and the way forward
|
|
90
|
+
(`--project`, which every migrated path already requires). On labs a missing CTA is still
|
|
91
|
+
reported as drift, because there it genuinely is.
|
|
92
|
+
|
|
93
|
+
No production path reaches this today — `migrated_can_serve` refuses without a
|
|
94
|
+
`project_id`, `ensure_editor` navigates straight to the project URL, and `character create`
|
|
95
|
+
requires `--project`. The `add_2` drift is therefore harmless **because of those guards**,
|
|
96
|
+
which is precisely what a future port relaxes; the measured fact now sits beside the
|
|
97
|
+
constant so the next person to un-guard a path meets it.
|
|
98
|
+
([#730](https://github.com/ffroliva/gflow-cli/issues/730),
|
|
99
|
+
[spike](docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md))
|
|
100
|
+
|
|
101
|
+
- **Flow's own diagnostics were blind on the migrated host, and two selectors were broken behind
|
|
102
|
+
it.** `gflow`'s incident-bundle DOM dump queried `i.google-symbols, span.google-symbols`, and
|
|
103
|
+
`diagnostics.py`'s `STRUCTURAL_DOM_JS` queried `i.google-symbols` — so on `flow.google.com`,
|
|
104
|
+
where every Material Symbols ligature rides a `<mat-icon>`, **both reported zero ligatures**.
|
|
105
|
+
The instrument used to diagnose selector drift was blind to the host the drift lives on. That
|
|
106
|
+
is why [#727](https://github.com/ffroliva/gflow-cli/issues/727) and
|
|
107
|
+
[#731](https://github.com/ffroliva/gflow-cli/issues/731) stayed invisible, and why an incident
|
|
108
|
+
bundle from a migrated user named no ligatures at all. Both queries are now class-only.
|
|
109
|
+
|
|
110
|
+
Two selectors were broken behind that blindness. `SUBMIT_BUTTON_SELECTORS` was **working by
|
|
111
|
+
luck**: its two tag-qualified entries matched nothing on the migrated host and the submit only
|
|
112
|
+
landed because a third `has-text` entry matches the `<mat-icon>`'s *text* — observed live as
|
|
113
|
+
`prompt_submitted via="button:has-text('arrow_forward')"`, after paying two misses per submit.
|
|
114
|
+
`IMAGE_MODEL_PICKER_TRIGGER` had neither twin nor fallback, so its miss was total and silent:
|
|
115
|
+
the picker is best-effort, so generation simply proceeded on whatever model tier the editor
|
|
116
|
+
opened at. Both now anchor on the `google-symbols` **class**, which sits on the labs `<i>` and
|
|
117
|
+
the migrated `<mat-icon>` alike — verified against a real CSS engine, offline, in
|
|
118
|
+
`tests/api/transports/test_ligature_carrier.py`.
|
|
119
|
+
|
|
120
|
+
`SUBMIT_BUTTON_SELECTORS` also moves from `:text` to **`:text-is`**. `:text` is a substring
|
|
121
|
+
match and accepts `arrow_forward_ios`, a real Material Symbol; the `<i>` qualifier had been
|
|
122
|
+
containing that, and dropping it for the class-only carrier made the over-match reachable on
|
|
123
|
+
the submit path. The two-carrier fixture caught it as `matched 3 of 2` before it ran live.
|
|
124
|
+
([#730](https://github.com/ffroliva/gflow-cli/issues/730),
|
|
125
|
+
[spike](docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md))
|
|
126
|
+
|
|
127
|
+
- **`character create --format-prompt` works again — both halves of it.** The flag had two
|
|
128
|
+
independent faults, and fixing only the first would have left it just as useless. On the
|
|
129
|
+
migrated `flow.google.com` host
|
|
130
|
+
all three entries of `PROMPT_FORMAT_SELECTORS` missed, so the flag degraded to a no-op:
|
|
131
|
+
`ui_automation.format_button_not_found`, exit **0**, prompt submitted as
|
|
132
|
+
typed, and the image quota spent on a run whose requested prompt-engineering step never
|
|
133
|
+
happened. The button was never absent. Measured on 2026-09-07 with
|
|
134
|
+
`scripts/dev/spike_character_prompt_format.py` (`$0` — navigation, one free `createEntity`,
|
|
135
|
+
DOM reads and typing; two control anchors, so a flat zero could not be mistaken for
|
|
136
|
+
absence): it renders as
|
|
137
|
+
`<flow-format-prompt-button>`, and the Angular frontend carries the unchanged
|
|
138
|
+
`personal_recommendations` ligature in **`<mat-icon>`** rather than `<i>` — the same carrier
|
|
139
|
+
split fixed for `add_2` / `arrow_drop_down` / `accessibility_new` in #703, which this constant
|
|
140
|
+
was not swept with. The EN `span:text-is('Format')` fallback missed too and is **deleted**
|
|
141
|
+
rather than translated: the button's own `aria-label` reads `"Formatar"` on a pt account, and
|
|
142
|
+
display labels are banned as anchors. The cascade now leads with the custom element and covers
|
|
143
|
+
both carriers. ([#727](https://github.com/ffroliva/gflow-cli/issues/727),
|
|
144
|
+
[spike](docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md))
|
|
145
|
+
|
|
146
|
+
- **`video t2v --reference-entity` no longer bills a clip that ignores the entity.** On the
|
|
147
|
+
migrated `flow.google.com` host the "character references are not ported" refusal lived inside
|
|
148
|
+
the r2v branch of the routing gate, so a t2v request returned from that gate before its
|
|
149
|
+
`reference_entities` were ever inspected — and nothing downstream attaches one there
|
|
150
|
+
(`attach_start_frame` is i2v-only, `attach_references` and the chip verification are r2v-only).
|
|
151
|
+
The run was submitted and **billed**, returning a plausible clip with an unbound face. That is
|
|
152
|
+
strictly worse than the exit 36 it was meant to give: a refusal is free and honest. The
|
|
153
|
+
sibling gate `migrated_can_serve` did refuse, but it only feeds `prefer_migrated`, and an
|
|
154
|
+
account Flow has already moved is routed by its URL without consulting it — so the refusal was
|
|
155
|
+
unreachable for exactly the accounts that needed it. The check is now mode-independent and
|
|
156
|
+
ahead of every early return. ([#716](https://github.com/ffroliva/gflow-cli/issues/716))
|
|
157
|
+
- **A credit shortfall is no longer diagnosed as a moved frontend.** On the migrated
|
|
158
|
+
`flow.google.com` host, an account whose balance is short **for the model it asked for**
|
|
159
|
+
produced `UiSelectorDriftError` (exit 23) — *"A Flow editor UI element could not be
|
|
160
|
+
located — Google may have updated their frontend. Check for a newer gflow-cli release,
|
|
161
|
+
then file a bug"*. Flow does not **disable** the submit control, it **replaces** it:
|
|
162
|
+
`arrow_forward` disappears and a `prompt-warning-button` carrying
|
|
163
|
+
`aria-label='Insufficient credits warning'` takes its place, so the anchor's absence
|
|
164
|
+
tracks the credit state, not the frontend. Measured by A/B on 2026-09-07 —
|
|
165
|
+
`scripts/dev/spike_migrated_submit_anchor.py`, same probe and same code ~60 s apart,
|
|
166
|
+
two accounts rendering the mirror image of each other. The wallet was **not** empty:
|
|
167
|
+
it held **50** credits and the run asked for `--model veo-quality`, which costs **100**.
|
|
168
|
+
That distinction is the actionable half — "you have no credits" is a dead end for
|
|
169
|
+
someone holding 50, while "short for this model" has a remedy: pick a cheaper tier
|
|
170
|
+
(`veo-lite` is 10). Every path that gives up on the submit control now checks for the
|
|
171
|
+
warning before naming a culprit, and reports the new `InsufficientCreditsError`
|
|
172
|
+
(**exit 37**) instead. Genuine drift — a missing anchor with no warning beside it —
|
|
173
|
+
still reports 23. Beyond the wrong message, the old behaviour manufactured
|
|
174
|
+
frontend-drift bug reports that no code change could ever fix.
|
|
175
|
+
|
|
176
|
+
### Changed
|
|
177
|
+
|
|
178
|
+
- **`--format-prompt` now waits for the rewrite, and `ui_automation.prompt_formatted` means it
|
|
179
|
+
happened.** This is the second half of the #727 fix and the half that made the flag useful.
|
|
180
|
+
Flow rewrites **server-side** — a `batchexecute` round trip reaching the composer at ~5.4s
|
|
181
|
+
(measured, `denon82`) — while the old code waited `_jitter_ms(500)`, logged
|
|
182
|
+
`prompt_formatted` and returned; `_send_prompt` submits on the very next line. So the flag
|
|
183
|
+
shipped the prompt the user typed and discarded the rewrite on **every** run, with a success
|
|
184
|
+
event in the log and exit 0.
|
|
185
|
+
|
|
186
|
+
**The defect was never the duration. It was reporting a success we had not observed** — the
|
|
187
|
+
absence of a completion inside a window we chose, recorded as a completion. Same class as a
|
|
188
|
+
20s selector timeout read as "the feature is absent" and a bundle captured after teardown
|
|
189
|
+
read as "the DOM was gone". This one was the worst of the three because it failed toward
|
|
190
|
+
**success**: a premature green looks exactly like the feature working, so nobody investigates
|
|
191
|
+
a pass.
|
|
192
|
+
|
|
193
|
+
`format_character_prompt` now polls the bound composer until its text actually changes, and
|
|
194
|
+
returns `True` only then. The gate is the DOM, not the wire — the `batchexecute` response
|
|
195
|
+
arrives **4.2s before** the text settles, so awaiting it would reproduce the same early
|
|
196
|
+
submit. Comparing against the string gflow inserted is locale-invariant by construction, and
|
|
197
|
+
a **length delta** rather than `!=` keeps Slate's whitespace normalisation from re-reporting
|
|
198
|
+
the same false success. Telemetry carries lengths and a stable hash, never the prompt text:
|
|
199
|
+
Flow *elaborates* a terse description into a detailed physical one, so the rewrite is more
|
|
200
|
+
PII-dense than the input.
|
|
201
|
+
|
|
202
|
+
New events: `format_button_clicked` (the old semantics), `format_not_observed` (clicked, no
|
|
203
|
+
rewrite inside the budget — it does not claim Flow failed, since an unchanged box also covers
|
|
204
|
+
Flow declining or judging the prompt already formatted).
|
|
205
|
+
|
|
206
|
+
**Two user-visible consequences.** A create with `--format-prompt` takes a few seconds longer
|
|
207
|
+
for the rewrite itself, and — because the reshaped prompt is longer and more detailed — the
|
|
208
|
+
generation is materially slower: **406s vs a 210s control** on the same account and prompt,
|
|
209
|
+
live-verified 2026-09-07.
|
|
210
|
+
([#727](https://github.com/ffroliva/gflow-cli/issues/727),
|
|
211
|
+
[spike](docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md))
|
|
212
|
+
|
|
213
|
+
- **Retracted a false "measured" claim about the migrated composer.** A code comment asserted, as
|
|
214
|
+
"measured, not assumed", that the migrated project composer "has no image-generation mode".
|
|
215
|
+
Falsified live on 2026-09-07: its settings overlay opens to six radiogroups / sixteen radios and
|
|
216
|
+
the first is `[imageImage, videocamVideo]`, present and hit-testable, with the VIDEO option
|
|
217
|
+
carrying `aria-checked`. This reproduced an enumeration already committed on 2026-09-04,
|
|
218
|
+
exactly, on a different account. That does **not** establish that `image` works there — nothing
|
|
219
|
+
was clicked on the mode axis and nothing was submitted — only that the claim it cannot is
|
|
220
|
+
unfounded. Stating it more strongly would repeat the defect being retracted. The guard stays
|
|
221
|
+
until the port lands, but it no longer tells anyone the host cannot do this. ([#692](https://github.com/ffroliva/gflow-cli/issues/692),
|
|
222
|
+
[spike](docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md))
|
|
223
|
+
- **A spike that cannot reach its surface now fails instead of concluding.**
|
|
224
|
+
`spike_migrated_image_capability.py` opened the settings overlay best-effort and swallowed the
|
|
225
|
+
exception, so it printed "the migrated composer looks VIDEO-ONLY" even when it had never opened
|
|
226
|
+
the panel — and that sentence became the retracted claim above. It now raises
|
|
227
|
+
`SpikeUnreachedError` and exits 3 with "This is a failed measurement, NOT evidence of absence".
|
|
228
|
+
Two features have now been declared absent by a probe that failed silently; the first was
|
|
229
|
+
`character create`, killed by a single 20 s selector timeout.
|
|
230
|
+
|
|
231
|
+
### Added
|
|
232
|
+
|
|
233
|
+
- **`gflow character create --voice` is now verified end to end.**
|
|
234
|
+
`tests/e2e/test_character_create_e2e.py::test_character_create_attaches_voice_and_personality`
|
|
235
|
+
drives a live create then reads the character back from Flow. Until it existed, a repo-wide
|
|
236
|
+
grep for `--voice` across `tests/e2e/` matched **nothing**: every voice test was a unit test
|
|
237
|
+
of the hardcoded `VOICES` constant, and the one that looked live parsed a fixture. A voice
|
|
238
|
+
that silently failed to attach was invisible to the whole suite while the command exited 0.
|
|
239
|
+
Personality is asserted hard, unlike the sibling UTF-8 test which guards it as
|
|
240
|
+
`if shown_personality:` and passes vacuously when the field is absent.
|
|
241
|
+
([#736](https://github.com/ffroliva/gflow-cli/pull/736))
|
|
242
|
+
- `scripts/dev/spike_entity_submit_rpcs.py` — attaches a character, submits, and logs **every**
|
|
243
|
+
`batchexecute` rpcid rather than only the three in `SUBMIT_RPCS`, plus the submit request's
|
|
244
|
+
model key. `scripts/dev/spike_project_media_status.py` — reads a project's generation state
|
|
245
|
+
read-only, `$0`, submitting nothing.
|
|
246
|
+
([#741](https://github.com/ffroliva/gflow-cli/issues/741))
|
|
247
|
+
- **`video-production` skill § 4b-bis — the whole recipe for a cast with VOICES.** A character
|
|
248
|
+
entity is the only thing that carries a voice; a plate carries face and wardrobe as pixels and
|
|
249
|
+
the engine invents a new voice per clip. Measured across three plate-bound takes of one
|
|
250
|
+
character: **88 / 103 / 118 Hz**, three different actors, against a **4.3 Hz** engine noise
|
|
251
|
+
floor on an identical prompt repeated three times. The skill said to prefer rung 1 and never
|
|
252
|
+
said what skipping it costs, so a production could reach a finished cut before anyone noticed
|
|
253
|
+
the cast had no voices.
|
|
254
|
+
- `scripts/dev/spike_host_lane.py` — names a profile's lane (labs / migrated / **signed out**) in
|
|
255
|
+
one $0 run. It reports `SIGNED_OUT` as a distinct verdict and refuses to name a lane there,
|
|
256
|
+
because a signed-out profile is otherwise indistinguishable from a migrated one: with no
|
|
257
|
+
session, `labs.google/fx/…` renders its marketing shell and `flow.google.com/project/<id>`
|
|
258
|
+
redirects to `/about`. Read either in isolation and you conclude "this account was moved" from
|
|
259
|
+
a dead cookie.
|
|
260
|
+
- `scripts/dev/spike_migrated_composer_mode_axis.py` — hard-error probe that opens the migrated
|
|
261
|
+
composer's settings overlay and enumerates its radiogroups.
|
|
262
|
+
- `scripts/dev/spike_format_prompt_effect.py` — measures whether clicking Format actually
|
|
263
|
+
rewrites the prompt, and when. `$0`, never submits.
|
|
264
|
+
|
|
10
265
|
## [0.70.0] — 2026-09-06
|
|
11
266
|
|
|
12
267
|
### Fixed
|
|
@@ -4228,7 +4483,8 @@ shell-script template that branches on these codes.
|
|
|
4228
4483
|
|
|
4229
4484
|
First skeleton. Not functional end-to-end yet.
|
|
4230
4485
|
|
|
4231
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
4486
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.71.0...HEAD
|
|
4487
|
+
[0.71.0]: https://github.com/ffroliva/gflow-cli/compare/v0.70.0...v0.71.0
|
|
4232
4488
|
[0.70.0]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...v0.70.0
|
|
4233
4489
|
[0.69.0]: https://github.com/ffroliva/gflow-cli/compare/v0.68.0...v0.69.0
|
|
4234
4490
|
[0.68.0]: https://github.com/ffroliva/gflow-cli/compare/v0.67.0...v0.68.0
|
|
@@ -16,9 +16,11 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
16
16
|
|
|
17
17
|
### Flow is migrating to `flow.google.com`; gflow drives the migrated frontend for t2v, i2v from a local start frame, and r2v from local reference files (rest of the matrix pending)
|
|
18
18
|
|
|
19
|
-
- **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video, local-file image-to-video and local-file reference-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v`, `gflow video i2v --initial-frame <local file>` and `gflow video r2v --ref <local file>` now run on the migrated host (with `--project`); an end frame, a frame by UUID or `@Name`, references by `@Name` or `--reference-entity`, `image`,
|
|
19
|
+
- **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video, local-file image-to-video and local-file reference-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v`, `gflow video i2v --initial-frame <local file>` and `gflow video r2v --ref <local file>` now run on the migrated host (with `--project`); an end frame, a frame by UUID or `@Name`, references by `@Name` or `--reference-entity`, `image`, scenes, extend, instructions and tools are not ported yet and still exit 36. **`character` is NOT in that list any more** — `character create` was verified working on the migrated host in v0.70.0 and `character list` was re-verified there on 2026-09-07. This line claimed otherwise for a day, which is the dangerous direction for a stale doc to be stale in: a migrated user reading it concludes a working feature is impossible. Of the remainder, only the i2v-by-UUID case rests on a positive observation of absence (the Frames picker's tiles carry no media id); `scenes`, `extend`, `instructions` and `tools` have never had a probe run against them at all, so read them as *unported by gflow*, never as *impossible on the host*
|
|
20
20
|
- **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
|
|
21
21
|
- **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
|
|
22
|
+
- **`--reference-entity` was refused on `r2v` but not on `t2v`** ([#716](https://github.com/ffroliva/gflow-cli/issues/716), fixed in the unreleased line, post-v0.70.0): the "not ported, exit 36" refusal above sat inside the r2v branch of the routing gate, so a `t2v` request carrying a character entity returned from that gate without its entities ever being inspected — and nothing downstream attaches one on this host. The generation was **submitted and billed** with the entity silently dropped, returning a plausible clip of the wrong person. The check is now mode-independent and ahead of every early return. If you ran `gflow video t2v @Name …` or `--reference-entity` on a moved account before this fix, the identity in those clips was never bound.
|
|
23
|
+
- **The migrated composer DOES have an image mode** ([#692](https://github.com/ffroliva/gflow-cli/issues/692)): a code comment claimed, as "measured, not assumed", that it has none. Falsified 2026-09-07 — its settings overlay carries a `mode` radiogroup of `[imageImage, videocamVideo]`, present and hit-testable. Nothing was clicked on that axis and nothing was submitted, so this does **not** establish that `image` works on a moved account; it establishes only that the claim it cannot is unfounded. Read the remaining exit 36 as *gflow does not drive this yet*, never as *the host cannot do it*; see [the spike](docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md).
|
|
22
24
|
- **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in the unreleased line, post-v0.68.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint. If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
|
|
23
25
|
|
|
24
26
|
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.71.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
|
|
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
|
58
58
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
59
59
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
60
60
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
61
|
-
Requires-Dist: ruff==0.16.
|
|
61
|
+
Requires-Dist: ruff==0.16.6; extra == 'dev'
|
|
62
62
|
Provides-Extra: gcs
|
|
63
63
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
64
64
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -16,7 +16,7 @@ These are non-negotiable. They override default agent behavior where conflicts e
|
|
|
16
16
|
- **TDD before code.** Write a failing test, then the minimum production code to make it pass, then refactor. Coverage floor: 80% overall. See [CONTRIBUTING.md](../CONTRIBUTING.md).
|
|
17
17
|
- **Documentation is first-class.** Any user-facing, operator-facing, architecture, configuration, workflow, or agent-rule change must update the matching docs, changelog/release note when relevant, and docs index if a new doc is added. If no docs change, record the reason in the PR/checklist. `scripts/ci/check_doc_links.py` must pass before merge.
|
|
18
18
|
- **No raw `print()` or `import logging` in `src/`.** Structured logging via `structlog` only.
|
|
19
|
-
- **No secrets in commits.** `.env.local`
|
|
19
|
+
- **No secrets in commits.** `.env`, `.env.local` and `$GFLOW_CLI_HOME/.env` are all gitignored; never commit any of them. Note gflow only READS `.env` (CWD and home) — see [CONFIGURATION.md](CONFIGURATION.md). `pre-commit` hooks run `detect-secrets` on staged content.
|
|
20
20
|
- **No AI attribution in commit messages.** `Co-Authored-By:` trailers are fine when explicitly requested; auto-generated `🤖 Generated with…` footers are not.
|
|
21
21
|
- **Branch naming.** `feature/`, `bugfix/`, `hotfix/`, `chore/`, `docs/`, `test/`, `release/`. Never `claude/` or unprefixed.
|
|
22
22
|
- **Signed tags only.** Releases tag with `git tag -s vX.Y.Z`. CI rejects unsigned or lightweight tags.
|
|
@@ -262,12 +262,28 @@ token that drives the sample URL, so a canonical id round-trips to a playable sa
|
|
|
262
262
|
`gflow character create --voice <Name>` validates the value **case-insensitively** (so `charon` and `Charon`
|
|
263
263
|
both normalize to the canonical `Charon`) and sets `audioReferences[].presetVoiceId` via the entity PATCH.
|
|
264
264
|
|
|
265
|
-
> **Wire-case
|
|
266
|
-
>
|
|
267
|
-
>
|
|
268
|
-
>
|
|
269
|
-
>
|
|
270
|
-
>
|
|
265
|
+
> **Wire-case: Capitalized round-trips — VERIFIED 2026-09-07.** A live e2e
|
|
266
|
+
> (`tests/e2e/test_character_create_e2e.py::test_character_create_attaches_voice_and_personality`,
|
|
267
|
+
> profile `ffroliva`) created a character with `--voice Charon` and read it back from Flow:
|
|
268
|
+
> `sent='Charon' stored='Charon' identical=True`. The Capitalized canonical form is stored
|
|
269
|
+
> unchanged, so `CHARACTER_RECON.md`'s older note that "the preset id is the lowercased name"
|
|
270
|
+
> does **not** describe what the wire does today.
|
|
271
|
+
>
|
|
272
|
+
> **Still untested:** whether a *lowercase* id is also accepted (gflow never sends one — it
|
|
273
|
+
> normalizes to Capitalized before the PATCH), and — separately and more importantly —
|
|
274
|
+
> whether a bound voice is actually **applied to generated video audio**. Attachment to the
|
|
275
|
+
> entity is proven; application at render time is not.
|
|
276
|
+
>
|
|
277
|
+
> **`personalityNotes` is Agent-scoped.** Flow's own character editor labels the field
|
|
278
|
+
> "Character info (optional) — Describe how your character acts…" and states underneath:
|
|
279
|
+
> *"The Flow agent can use this information to help craft scenes with your character."*
|
|
280
|
+
> It is an input to Flow's **agent** when it writes scenes, not a control on the audio engine
|
|
281
|
+
> and not a documented input to a direct composer generation. Do not expect it to steer
|
|
282
|
+
> performance on a `video t2v` / `r2v` call — put the direction in the prompt instead.
|
|
283
|
+
>
|
|
284
|
+
> The voice list is currently a **hardcoded constant**; fetching the live list from Flow's
|
|
285
|
+
> voice API is tracked in the [Backlog](#14-backlog--not-yet-implemented). A "create new voice"
|
|
286
|
+
> flow ("Criar nova voz") exists in the UI but is **not yet implemented**.
|
|
271
287
|
|
|
272
288
|
## 8. CLI surface (shipped v0.12.0)
|
|
273
289
|
|
|
@@ -417,11 +433,21 @@ convenience later.
|
|
|
417
433
|
- **Cost reality:** the feature is UI-automation-heavy (new character-editor + picker selectors), not the
|
|
418
434
|
"mostly REST" earlier framing. Structural metadata is REST; the value-generating steps are UI.
|
|
419
435
|
|
|
420
|
-
## 12. UI-automation selectors (Option B)
|
|
436
|
+
## 12. UI-automation selectors (Option B)
|
|
421
437
|
|
|
422
438
|
Language-agnostic (ligature/structural) selectors. Flow renders in the profile locale, so **never match on
|
|
423
|
-
localized text** — use Material-Symbol ligatures
|
|
424
|
-
|
|
439
|
+
localized text** — use Material-Symbol ligatures or structure.
|
|
440
|
+
|
|
441
|
+
> **The ligature carrier differs by host.** `labs.google` renders ligatures in
|
|
442
|
+
> `<i class="google-symbols">`; the migrated `flow.google.com` Angular frontend renders the SAME ligature in
|
|
443
|
+
> `<mat-icon>` (which also carries the `google-symbols` class — the class was never the discriminator, the
|
|
444
|
+
> tag is). A cascade anchored on one carrier returns a flat zero on the other host while the control is
|
|
445
|
+
> fully visible — indistinguishable, from the driver's side, from the feature being gone. Tracked in #730.
|
|
446
|
+
>
|
|
447
|
+
> **Each row is dated against the code it was read from, and rows are re-derived from the shipped
|
|
448
|
+
> constants rather than edited in place.** They previously carried an undated **VERIFIED** marker and went
|
|
449
|
+
> stale at #703 without anyone noticing — a row marked verified that is not is worse than no row, because
|
|
450
|
+
> it is what a reader trusts *instead of* reading the code (#731).
|
|
425
451
|
|
|
426
452
|
**Editor URL (VERIFIED — `/fx/` prefix required).** After REST `createEntity`, the character-editor path is
|
|
427
453
|
|
|
@@ -437,16 +463,16 @@ owned by gflow) and the body-mode activation/settle signals.
|
|
|
437
463
|
|
|
438
464
|
| Purpose | Selector | Conf. |
|
|
439
465
|
|---|---|---|
|
|
440
|
-
| Editor-ready anchor |
|
|
441
|
-
| Prompt box (char editor) | `
|
|
442
|
-
| Generate / submit | `
|
|
466
|
+
| Editor-ready anchor | `div[role="textbox"][data-slate-editor="true"], div.ProseMirror[contenteditable="true"]` (`_CHARACTER_EDITOR_READY_SELECTOR`) — **both frontends**: labs mounts Slate, `flow.google.com` mounts ProseMirror. Asking only for Slate reported 0 boxes on a migrated editor whose box was visible the whole time. | read from code 2026-09-07 |
|
|
467
|
+
| Prompt box (char editor) | the `PROMPT_INPUT_SELECTORS` cascade, **not** its first entry. `[0]` is the Slate anchor; on the migrated host it misses and `[1]` `div[contenteditable="true"]` is what matches (observed live 2026-09-07, `ui_automation.prompt_input_found`). | read from code + live 2026-09-07 |
|
|
468
|
+
| Generate / submit | `SUBMIT_BUTTON_SELECTORS` — `button:has(i.google-symbols:text('arrow_forward'))`, then `button:has(i:text(…))`, then `button:has-text('arrow_forward')`. ⚠️ **Single-carrier**: on the migrated host both `<i>` entries miss and only the third (which matches the `<mat-icon>`'s text) fires — observed live 2026-09-07, `prompt_submitted via="button:has-text('arrow_forward')"`. Working by luck, not by design; tracked in #730. | read from code + live 2026-09-07 |
|
|
443
469
|
| Name field | `input[placeholder]` — localized placeholder; **do NOT rely on the text** (structural: it is the editor's lone placeholdered input) | **VERIFIED** |
|
|
444
470
|
| Personality field | the panel `textarea` (localized placeholder) — **prefer REST PATCH** | **VERIFIED** |
|
|
445
471
|
| Slot 0 image (face) | aria-label `"Imagem do personagem 1"` — **localized**, note only (do not load-bear on the text) | med (localized) |
|
|
446
|
-
| **Body mode (slot 1)** |
|
|
447
|
-
| Model picker (char editor) | `button[aria-haspopup='menu'
|
|
472
|
+
| **Body mode (slot 1)** | `_CHARACTER_BODY_MODE_SELECTOR` = `button:has(img) + button:has(i.google-symbols:text-is('accessibility_new'))` **or** `flow-slot-chip-button:has(mat-icon:text-is('accessibility_new')) button` — the second alternative is the migrated host's custom element and was added in #703; the row omitted it until #731. Settle signal: a newly mounted generated-media card with an `img` and exact `cancel` icon. The chip ships `disabled` until a portrait exists. | read from code 2026-09-07; behaviour live 2026-07-26 |
|
|
473
|
+
| Model picker (char editor) | `_CHARACTER_MODEL_PICKER_TRIGGER_SELECTORS` — `arrow_drop_down` under **either** carrier, on `button` **and** `[role='button']` (4 entries). The row previously showed an `aria-haspopup='menu'` variant that appears in none of them. Omitting the `mat-icon` entries logged `model-picker trigger not found` on the migrated host and generated on whatever tier the editor opened at (live 2026-09-06). | read from code 2026-09-07 |
|
|
448
474
|
| Voice picker | `voice_selection` google-symbols ligature | **VERIFIED** (ligature) |
|
|
449
|
-
| Personagens nav (project) | `button:has(i.google-symbols:text-is('accessibility_new'))` (cards are `div[role=button]`; tag disambiguates) | high |
|
|
475
|
+
| Personagens nav (project) | `button:has(i.google-symbols:text-is('accessibility_new'))` (cards are `div[role=button]`; tag disambiguates). ⚠️ single-carrier — see #730. | high (unre-verified) |
|
|
450
476
|
| Delete character (rm, v2) | `button:has(i.google-symbols:text-is('delete'))` | high |
|
|
451
477
|
| Picker tab → Personagens | `[role=dialog] button[role=tab]:has(i.google-symbols:text-is('accessibility_new'))` | high |
|
|
452
478
|
| **Picker "include in command"** | primary `button` in the dialog footer — **no ligature → structural anchor (last/primary dialog button)**; only appears *after* an option is selected | low ⚠️ |
|
|
@@ -28,8 +28,13 @@ entity {
|
|
|
28
28
|
entityType: "CHARACTER"
|
|
29
29
|
displayName # "Denidra" (default "Untitled Character")
|
|
30
30
|
characterInfo {
|
|
31
|
-
personalityNotes # free text —
|
|
32
|
-
|
|
31
|
+
personalityNotes # free text — Flow's editor says the AGENT uses it to craft
|
|
32
|
+
# scenes; NOT a documented input to a composer generation
|
|
33
|
+
audioReferences: [ { presetVoiceId: "Charon" } ] # voice; Capitalized id round-trips
|
|
34
|
+
# unchanged (e2e-verified 2026-09-07: sent 'Charon', stored
|
|
35
|
+
# 'Charon'). The earlier "lowercased name" note above this
|
|
36
|
+
# line came from one capture and does NOT hold today; see
|
|
37
|
+
# CHARACTER.md § 7.
|
|
33
38
|
imageReferences: [ { workflowId }, { workflowId } ] # face + body (point to WORKFLOWS, not media)
|
|
34
39
|
}
|
|
35
40
|
}
|
|
@@ -38,8 +38,10 @@ This workflow must not checkout the PR branch, install dependencies, run tests,
|
|
|
38
38
|
|
|
39
39
|
### PR-Triage Autopilot (VPS Sandbox)
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
> **Moved out of this repo in v0.71.0.** The runner is hosted privately; `scripts/autopilot/`, `eval/pr_triage_*` and `pr_triage_gate.py` are no longer here. The design notes below are kept as history — do not go looking for the scripts.
|
|
42
|
+
|
|
43
|
+
An hourly `hermes-ops` cron job triaged eligible external PRs on the host VPS.
|
|
44
|
+
- It used the deterministic **Stage 0 pre-filter** (`pr_triage_gate.py`) to confirm eligibility.
|
|
43
45
|
- It fetches the PR branch and runs the full `/gflow:pr-council-review` inside an **ephemeral, non-root, read-only Docker container sandbox** (with restricted network egress and no write credentials).
|
|
44
46
|
- The host orchestrator posts the review comment to the PR and alerts the maintainer via Telegram.
|
|
45
47
|
- For design details, see [2026-07-04-pr-triage-autopilot-design.md](superpowers/specs/2026-07-04-pr-triage-autopilot-design.md) and the implementation plan [PLAN.md](superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md).
|