gflow-cli 0.61.0__tar.gz → 0.62.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.
Files changed (838) hide show
  1. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.env.template +2 -1
  3. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/ci.yml +10 -0
  4. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.gitignore +5 -0
  5. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/CHANGELOG.md +157 -1
  6. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/KNOWN_ISSUES.md +19 -0
  7. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/PKG-INFO +1 -1
  8. {gflow_cli-0.61.0/website → gflow_cli-0.62.0}/docs/CONFIGURATION.md +1 -1
  9. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/INDEX.md +2 -2
  10. gflow_cli-0.62.0/docs/LIVE_VERIFICATION_v0.62.0.md +115 -0
  11. {gflow_cli-0.61.0/website → gflow_cli-0.62.0}/docs/MCP.md +1 -1
  12. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/USAGE.md +4 -2
  13. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +10 -0
  14. gflow_cli-0.62.0/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +265 -0
  15. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/pyproject.toml +1 -1
  16. gflow_cli-0.62.0/scripts/dev/measure_locale_probe.py +109 -0
  17. gflow_cli-0.62.0/scripts/dev/spike_changelog_capture.py +308 -0
  18. gflow_cli-0.62.0/scripts/dev/spike_locale_poison.py +135 -0
  19. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/verify_language_agnostic.py +6 -3
  20. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/llm-council/SKILL.md +5 -3
  21. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/__init__.py +1 -1
  22. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/client.py +45 -12
  23. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/routes.py +25 -3
  24. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/ui_automation.py +240 -21
  25. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/ui_automation_video.py +53 -3
  26. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_data.py +14 -1
  27. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_image.py +4 -3
  28. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_project.py +17 -0
  29. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/config.py +13 -2
  30. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/queries.py +12 -12
  31. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/tools.py +12 -1
  32. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/profile_store.py +83 -1
  33. gflow_cli-0.62.0/tests/api/test_client_locale_cache.py +204 -0
  34. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/drivers/test_ui_mode.py +7 -1
  35. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_locale_navigation.py +46 -0
  36. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_navigation_settled.py +11 -2
  37. gflow_cli-0.62.0/tests/api/transports/test_overlay_precondition.py +471 -0
  38. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_ui_automation.py +45 -6
  39. gflow_cli-0.62.0/tests/data/test_null_columns_stay_null.py +126 -0
  40. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +6 -1
  41. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_sidebar_recovery_e2e.py +9 -1
  42. gflow_cli-0.62.0/tests/fixtures/changelog_modal_page.html +102 -0
  43. gflow_cli-0.62.0/tests/test_profile_store_locale.py +152 -0
  44. gflow_cli-0.62.0/tests/test_project_list_urls.py +228 -0
  45. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/uv.lock +1 -1
  46. {gflow_cli-0.61.0 → gflow_cli-0.62.0/website}/docs/CONFIGURATION.md +1 -1
  47. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/KNOWN_ISSUES.md +19 -0
  48. {gflow_cli-0.61.0 → gflow_cli-0.62.0/website}/docs/MCP.md +1 -1
  49. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/USAGE.md +4 -2
  50. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.agents/plugins/marketplace.json +0 -0
  51. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/README.md +0 -0
  52. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/active.md +0 -0
  53. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/branch-review.md +0 -0
  54. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/changelog.md +0 -0
  55. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/check.md +0 -0
  56. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/doc-review.md +0 -0
  57. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  58. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  59. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/known-issues.md +0 -0
  60. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/live-verify.md +0 -0
  61. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/llm-council.md +0 -0
  62. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/next.md +0 -0
  63. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/plan.md +0 -0
  64. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  65. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/predict.md +0 -0
  66. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/release.md +0 -0
  67. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/scenario.md +0 -0
  68. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/sonar.md +0 -0
  69. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.claude/commands/gflow/status.md +0 -0
  70. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.gitattributes +0 -0
  71. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/CODEOWNERS +0 -0
  72. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  73. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/copilot-instructions.md +0 -0
  74. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/dependabot.yml +0 -0
  75. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/deps-watch.yml +0 -0
  76. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/external-pr-triage.yml +0 -0
  77. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/governance-advisory.yml +0 -0
  78. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/governance-benchmark.yml +0 -0
  79. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/labels.yml +0 -0
  80. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/main-base-guard.yml +0 -0
  81. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/pages.yml +0 -0
  82. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/release.yml +0 -0
  83. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/scorecard.yml +0 -0
  84. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.github/workflows/selector-probe.yml +0 -0
  85. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.gitleaks.toml +0 -0
  86. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.pre-commit-config.yaml +0 -0
  87. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/.secrets.baseline +0 -0
  88. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/AGENTS.md +0 -0
  89. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/CLAUDE.md +0 -0
  90. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/CONFIGURATION.md +0 -0
  91. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/CONTRIBUTING.md +0 -0
  92. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/DISCLAIMER.md +0 -0
  93. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/LICENSE +0 -0
  94. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/PLAN.md +0 -0
  95. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/README.md +0 -0
  96. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/RELEASE.md +0 -0
  97. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/ROADMAP.md +0 -0
  98. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/conftest.py +0 -0
  99. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  100. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/deploy/logrotate-pr-triage +0 -0
  101. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docker-compose.yml +0 -0
  102. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/AGENT_GUIDE.md +0 -0
  103. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/AGENT_UI_E2E.md +0 -0
  104. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/AGENT_UI_RECON.md +0 -0
  105. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/ARCHITECTURE.md +0 -0
  106. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  107. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/AUTHENTICATION.md +0 -0
  108. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/CHARACTER.md +0 -0
  109. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/CHARACTER_RECON.md +0 -0
  110. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/DATA_LAYER.md +0 -0
  111. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/DEBUGGING.md +0 -0
  112. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/DEMOS.md +0 -0
  113. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/DEVELOPMENT.md +0 -0
  114. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/E2E_TESTING.md +0 -0
  115. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/EXTERNAL_STORAGE.md +0 -0
  116. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/GITHUB.md +0 -0
  117. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  118. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  119. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/INSTRUCTIONS.md +0 -0
  120. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  121. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  122. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  123. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  124. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  125. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  126. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  127. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  128. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  129. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  130. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  131. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  132. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  133. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  134. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  135. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  136. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  137. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  138. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  139. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  140. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  141. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  142. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  143. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  144. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  145. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  146. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  147. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  148. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  149. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  150. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  151. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  152. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  153. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  154. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  155. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  156. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  157. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  158. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  159. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  160. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  161. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  162. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  163. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  164. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  165. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  166. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  167. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  168. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  169. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  170. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  171. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  172. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  173. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  174. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  175. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  176. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  177. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  178. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  179. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  180. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  181. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  182. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  183. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  184. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/MEDIA_LIBRARY.md +0 -0
  185. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/MOVIE.md +0 -0
  186. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/PROJECT_STATUS.md +0 -0
  187. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/PROMPT_EXPANSION.md +0 -0
  188. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  189. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/SECURITY.md +0 -0
  190. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/TOOLS.md +0 -0
  191. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/USER_GUIDE.md +0 -0
  192. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/assets/demo-split-pf.gif +0 -0
  193. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/assets/example-run.gif +0 -0
  194. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/assets/examples.webp +0 -0
  195. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/medium_tutorial.md +0 -0
  196. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/schemas/movie-handoff.schema.json +0 -0
  197. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/sonar-cleanup-tracker.md +0 -0
  198. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  199. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  200. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  201. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  202. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  203. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  204. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  205. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  206. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  207. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  208. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  209. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  210. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  211. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  212. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  213. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  214. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  215. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  216. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  217. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  218. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  219. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  220. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  221. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  222. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  223. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  224. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  225. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  226. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  227. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  228. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  229. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  230. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  231. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  232. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  233. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  234. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  235. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  236. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  237. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  238. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  239. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  240. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  241. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  242. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  243. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  244. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  245. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  246. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  247. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  248. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  249. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  250. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  251. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  252. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  253. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  254. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  255. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/eval/pr_triage_eval.py +0 -0
  256. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/eval/pr_triage_fixtures.json +0 -0
  257. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/README.md +0 -0
  258. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/batch_from_config.py +0 -0
  259. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/multi_prompt_t2i.py +0 -0
  260. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/sample_config.json +0 -0
  261. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/sample_prompts.txt +0 -0
  262. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/single_image_t2i.py +0 -0
  263. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/examples/workflow_chain.py +0 -0
  264. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/index.html +0 -0
  265. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/llms.txt +0 -0
  266. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/README.md +0 -0
  267. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/01_upload_image.json +0 -0
  268. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  269. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  270. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/04_archive_workflow.json +0 -0
  271. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/05_createProject.json +0 -0
  272. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/06_batchGenerateImages.json +0 -0
  273. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  274. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  275. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  276. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  277. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  278. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/12_create_scene.json +0 -0
  279. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  280. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/14_get_scene_workflows.json +0 -0
  281. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  282. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/Dockerfile.triage +0 -0
  283. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/entrypoint.sh +0 -0
  284. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/package-lock.json +0 -0
  285. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/package.json +0 -0
  286. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  287. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  288. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  289. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/canary/register_task.ps1 +0 -0
  290. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/canary/run_canary.py +0 -0
  291. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_doc_links.py +0 -0
  292. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_materiality.py +0 -0
  293. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_release_artifacts.py +0 -0
  294. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_repo_hygiene.py +0 -0
  295. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_test_count.py +0 -0
  296. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/check_website_docs_pii.py +0 -0
  297. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/ci/generate_website_docs.py +0 -0
  298. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/debug_editor.py +0 -0
  299. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/debug_gen_settings.py +0 -0
  300. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/debug_settings.py +0 -0
  301. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/_recording_client.py +0 -0
  302. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/_spike_common.py +0 -0
  303. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/active_plan.py +0 -0
  304. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  305. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  306. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  307. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  308. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  309. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  310. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  311. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_locale_invariants.py +0 -0
  312. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  313. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_project_listing.py +0 -0
  314. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  315. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  316. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  317. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  318. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/character_create_spike.py +0 -0
  319. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/character_create_spike_v2.py +0 -0
  320. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/dump_character_selectors.js +0 -0
  321. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/incident_bundle_quality.py +0 -0
  322. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  323. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  324. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  325. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/make_project.py +0 -0
  326. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/materiality_backtest.py +0 -0
  327. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/patch_character.py +0 -0
  328. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/skillopt/README.md +0 -0
  329. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/skillopt/harness.py +0 -0
  330. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/skillopt/tasks.json +0 -0
  331. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/sonar-local-scan.sh +0 -0
  332. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  333. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  334. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  335. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  336. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  337. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  338. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  339. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  340. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_incident_live.py +0 -0
  341. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  342. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  343. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  344. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  345. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  346. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  347. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  348. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_model_inventory.py +0 -0
  349. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  350. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  351. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  352. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  353. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  354. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  355. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_patch_entity.py +0 -0
  356. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_patchright.py +0 -0
  357. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  358. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  359. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  360. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/dev/verify_model_attribution.py +0 -0
  361. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/README.md +0 -0
  362. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/capture_flow_traffic.py +0 -0
  363. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  364. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/memory_profile.py +0 -0
  365. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/recaptcha_mint.py +0 -0
  366. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  367. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  368. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  369. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/probe/run_probe.py +0 -0
  370. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/probe/spike_auth_matrix.py +0 -0
  371. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/record_demo.ps1 +0 -0
  372. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/smoke_image.py +0 -0
  373. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/smoke_video_editor.py +0 -0
  374. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/smoke_worker_style.py +0 -0
  375. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/spike_waf_camoufox.py +0 -0
  376. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/scripts/verify_chrome_auth_viability.py +0 -0
  377. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/README.md +0 -0
  378. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/changelog/SKILL.md +0 -0
  379. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/check/SKILL.md +0 -0
  380. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/doc-review/SKILL.md +0 -0
  381. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/gflow-cli/SKILL.md +0 -0
  382. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/issue-assessment/SKILL.md +0 -0
  383. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/issue-resolve/SKILL.md +0 -0
  384. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/known-issues/SKILL.md +0 -0
  385. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/live-verify/SKILL.md +0 -0
  386. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/plan/SKILL.md +0 -0
  387. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/pr-council-review/SKILL.md +0 -0
  388. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/predict/SKILL.md +0 -0
  389. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/release/SKILL.md +0 -0
  390. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/scenario/SKILL.md +0 -0
  391. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/sonar/SKILL.md +0 -0
  392. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/skills/status/SKILL.md +0 -0
  393. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/sonar-project.properties +0 -0
  394. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/__main__.py +0 -0
  395. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/_cli_helpers.py +0 -0
  396. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/__init__.py +0 -0
  397. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/_engine.py +0 -0
  398. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/_retry.py +0 -0
  399. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  400. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/character.py +0 -0
  401. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/dto.py +0 -0
  402. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/image.py +0 -0
  403. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/image_upscale.py +0 -0
  404. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/recaptcha.py +0 -0
  405. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/scene.py +0 -0
  406. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  407. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/_common.py +0 -0
  408. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  409. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/base.py +0 -0
  410. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  411. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  412. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  413. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  414. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  415. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  416. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  417. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  418. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  419. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  420. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/api/video.py +0 -0
  421. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/__init__.py +0 -0
  422. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/base.py +0 -0
  423. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/cookies.py +0 -0
  424. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/factory.py +0 -0
  425. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  426. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  427. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/strategies.py +0 -0
  428. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/auth/verification.py +0 -0
  429. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/browser_manager.py +0 -0
  430. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/chain.py +0 -0
  431. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/chain_manifest.py +0 -0
  432. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli.py +0 -0
  433. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_character.py +0 -0
  434. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_doctor.py +0 -0
  435. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_instructions.py +0 -0
  436. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_models.py +0 -0
  437. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_movie.py +0 -0
  438. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_run.py +0 -0
  439. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_scene.py +0 -0
  440. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_tools.py +0 -0
  441. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/cli_video.py +0 -0
  442. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/composition.py +0 -0
  443. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/__init__.py +0 -0
  444. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/chain_repo.py +0 -0
  445. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  446. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  447. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  448. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  449. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  450. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  451. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  452. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  453. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  454. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  455. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/models.py +0 -0
  456. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/recorder.py +0 -0
  457. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/redaction.py +0 -0
  458. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/repository.py +0 -0
  459. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/data/store.py +0 -0
  460. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/diagnostics.py +0 -0
  461. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/errors.py +0 -0
  462. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/exceptions.py +0 -0
  463. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/file_integrity.py +0 -0
  464. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  465. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  466. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  467. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  468. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/image_batch.py +0 -0
  469. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/json_output.py +0 -0
  470. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/__init__.py +0 -0
  471. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/prompts.py +0 -0
  472. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/resources.py +0 -0
  473. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/server.py +0 -0
  474. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/setup.py +0 -0
  475. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  476. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/media.py +0 -0
  477. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/movie_manifest.py +0 -0
  478. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/observability.py +0 -0
  479. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/paths.py +0 -0
  480. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/profile_lease.py +0 -0
  481. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/redaction.py +0 -0
  482. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/services/__init__.py +0 -0
  483. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  484. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/services/character_create.py +0 -0
  485. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/services/doctor.py +0 -0
  486. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/services/mentions.py +0 -0
  487. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/storage.py +0 -0
  488. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/__init__.py +0 -0
  489. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/banned.py +0 -0
  490. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  491. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  492. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  493. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  494. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/expander.py +0 -0
  495. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/invocation.py +0 -0
  496. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/loader.py +0 -0
  497. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/registry.py +0 -0
  498. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/runtime.py +0 -0
  499. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/tools/spec.py +0 -0
  500. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/ui/app.py +0 -0
  501. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/ui/server.py +0 -0
  502. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/update_check.py +0 -0
  503. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/winsec.py +0 -0
  504. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/worker/codec.py +0 -0
  505. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/worker/daemon.py +0 -0
  506. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/src/gflow_cli/worker/queue.py +0 -0
  507. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tasks/lessons.md +0 -0
  508. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/test_assets/sample_batch.json +0 -0
  509. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/test_assets/sample_batch.tsv +0 -0
  510. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/test_assets/sample_batch_invalid.tsv +0 -0
  511. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/__init__.py +0 -0
  512. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/__init__.py +0 -0
  513. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/fixtures/character_gen_response.json +0 -0
  514. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  515. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  516. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  517. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_bearer_redaction.py +0 -0
  518. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_character.py +0 -0
  519. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client.py +0 -0
  520. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_character.py +0 -0
  521. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_delete_characters.py +0 -0
  522. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_errors.py +0 -0
  523. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_generate_character.py +0 -0
  524. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_image.py +0 -0
  525. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_incidents.py +0 -0
  526. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_launch_kwargs.py +0 -0
  527. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_patch_entity.py +0 -0
  528. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_scene.py +0 -0
  529. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_client_upscale.py +0 -0
  530. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_concurrency.py +0 -0
  531. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_dto.py +0 -0
  532. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_engine.py +0 -0
  533. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_image.py +0 -0
  534. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_image_dto.py +0 -0
  535. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_image_upscale.py +0 -0
  536. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  537. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_recaptcha.py +0 -0
  538. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_retry.py +0 -0
  539. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_routes.py +0 -0
  540. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_routes_character.py +0 -0
  541. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_routes_locale.py +0 -0
  542. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_routes_scene.py +0 -0
  543. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_sapisidhash_helper.py +0 -0
  544. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_scene_models.py +0 -0
  545. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_video.py +0 -0
  546. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/test_video_request.py +0 -0
  547. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/__init__.py +0 -0
  548. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/conftest.py +0 -0
  549. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/drivers/__init__.py +0 -0
  550. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  551. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/drivers/test_classic.py +0 -0
  552. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/drivers/test_factory.py +0 -0
  553. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  554. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_base.py +0 -0
  555. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_bearer.py +0 -0
  556. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_common.py +0 -0
  557. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  558. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_factory.py +0 -0
  559. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_fingerprint.py +0 -0
  560. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_mode_control.py +0 -0
  561. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  562. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_policy_400.py +0 -0
  563. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_sapisidhash.py +0 -0
  564. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  565. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_transport_timeout.py +0 -0
  566. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  567. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  568. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  569. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  570. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  571. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/strategies/test_factory.py +0 -0
  572. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/strategies/test_strategies.py +0 -0
  573. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/test_cookies.py +0 -0
  574. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/test_real_chrome.py +0 -0
  575. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/test_verification.py +0 -0
  576. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/auth/test_windows_acl.py +0 -0
  577. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  578. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/__init__.py +0 -0
  579. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_auth_status.py +0 -0
  580. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_auth_list.py +0 -0
  581. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_character.py +0 -0
  582. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_character_create.py +0 -0
  583. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_data.py +0 -0
  584. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_data_errors.py +0 -0
  585. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  586. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_data_sync.py +0 -0
  587. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_doctor.py +0 -0
  588. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_image.py +0 -0
  589. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  590. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  591. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_image_upscale.py +0 -0
  592. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  593. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_instructions.py +0 -0
  594. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_models.py +0 -0
  595. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_movie.py +0 -0
  596. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_run.py +0 -0
  597. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_scene.py +0 -0
  598. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_tools.py +0 -0
  599. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_video.py +0 -0
  600. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_cli_video_chain.py +0 -0
  601. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_error_handling.py +0 -0
  602. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_failure_funnel.py +0 -0
  603. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_helpers.py +0 -0
  604. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_incident_output.py +0 -0
  605. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_movie_manifest.py +0 -0
  606. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  607. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_predictable_output.py +0 -0
  608. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_settings_validation.py +0 -0
  609. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  610. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/composition/test_character.py +0 -0
  611. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/composition/test_compose_prompt.py +0 -0
  612. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/composition/test_handoff.py +0 -0
  613. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/composition/test_style_variants.py +0 -0
  614. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/composition/test_style_variants_e2e.py +0 -0
  615. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/conftest.py +0 -0
  616. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/__init__.py +0 -0
  617. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_chain_repo.py +0 -0
  618. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_failure_recording.py +0 -0
  619. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_find_incomplete_character.py +0 -0
  620. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_models.py +0 -0
  621. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_packaging.py +0 -0
  622. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_recorder.py +0 -0
  623. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_recorder_character.py +0 -0
  624. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_redaction.py +0 -0
  625. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_repository.py +0 -0
  626. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_scene_persistence.py +0 -0
  627. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_settings_and_errors.py +0 -0
  628. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_store.py +0 -0
  629. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/data/test_store_migrations.py +0 -0
  630. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/dev/test_recording_client.py +0 -0
  631. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/__init__.py +0 -0
  632. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/conftest.py +0 -0
  633. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  634. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  635. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  636. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  637. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_chain_e2e.py +0 -0
  638. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_character_create_e2e.py +0 -0
  639. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  640. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  641. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_daemon_e2e.py +0 -0
  642. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  643. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  644. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  645. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  646. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  647. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  648. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  649. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  650. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  651. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_json_output_e2e.py +0 -0
  652. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  653. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  654. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  655. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  656. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_scene_compose_live.py +0 -0
  657. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_tools_e2e.py +0 -0
  658. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_transports_e2e.py +0 -0
  659. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  660. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  661. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  662. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/__init__.py +0 -0
  663. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/asset_tagging.feature +0 -0
  664. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/auth.feature +0 -0
  665. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/auth_login.feature +0 -0
  666. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/character_create.feature +0 -0
  667. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/character_read.feature +0 -0
  668. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/conftest.py +0 -0
  669. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/duration_tab_drift.feature +0 -0
  670. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/entity_provenance.feature +0 -0
  671. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/image.feature +0 -0
  672. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/image_batch_references.feature +0 -0
  673. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/image_upscale.feature +0 -0
  674. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/incident_diagnostics.feature +0 -0
  675. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/instructions.feature +0 -0
  676. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/locale_picker_include.feature +0 -0
  677. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/mcp_tasks.feature +0 -0
  678. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/media_picker_tiers.feature +0 -0
  679. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/output_hardening.feature +0 -0
  680. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_asset_tagging_steps.py +0 -0
  681. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_auth_login_steps.py +0 -0
  682. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_auth_steps.py +0 -0
  683. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_character_create_steps.py +0 -0
  684. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_character_read_steps.py +0 -0
  685. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_image_steps.py +0 -0
  686. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_image_upscale_steps.py +0 -0
  687. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  688. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_instructions_steps.py +0 -0
  689. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  690. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  691. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  692. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_output_hardening_steps.py +0 -0
  693. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_step_collision_guard.py +0 -0
  694. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  695. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/test_video_chain_steps.py +0 -0
  696. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/video_agent_ui.feature +0 -0
  697. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/features/video_chain.feature +0 -0
  698. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/__init__.py +0 -0
  699. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/doctor_env.py +0 -0
  700. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/flow_model_inventory.json +0 -0
  701. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  702. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/listing_payload.py +0 -0
  703. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/fixtures/seeded_catalog.py +0 -0
  704. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/__init__.py +0 -0
  705. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/test_grading.py +0 -0
  706. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/test_model.py +0 -0
  707. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/test_model_governance.py +0 -0
  708. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/test_registry.py +0 -0
  709. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/flow_selectors/test_report.py +0 -0
  710. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/image_batch/__init__.py +0 -0
  711. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/image_batch/test_image_manifest.py +0 -0
  712. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/image_batch/test_jitter_config.py +0 -0
  713. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/image_batch/test_observability_events.py +0 -0
  714. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/__init__.py +0 -0
  715. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/conftest.py +0 -0
  716. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/constants.py +0 -0
  717. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/test_expander_gateway.py +0 -0
  718. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/test_storage_gcs.py +0 -0
  719. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/integration/test_storage_s3.py +0 -0
  720. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/__init__.py +0 -0
  721. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/conftest.py +0 -0
  722. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_auth_status_tool.py +0 -0
  723. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_cli_parity.py +0 -0
  724. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_error_funnel.py +0 -0
  725. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_http_transport.py +0 -0
  726. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_known_issues_resource.py +0 -0
  727. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_no_spend.py +0 -0
  728. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  729. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_resources.py +0 -0
  730. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_server.py +0 -0
  731. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_setup.py +0 -0
  732. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_stdio_transport.py +0 -0
  733. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_tasks_extension.py +0 -0
  734. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_tools_helpers.py +0 -0
  735. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_tools_instructions.py +0 -0
  736. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/mcp/test_tools_wired.py +0 -0
  737. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  738. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_canary_classify.py +0 -0
  739. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_canary_reexec.py +0 -0
  740. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  741. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_check_materiality.py +0 -0
  742. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  743. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  744. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_check_test_count.py +0 -0
  745. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  746. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_codex_plugin.py +0 -0
  747. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_generate_website_docs.py +0 -0
  748. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  749. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_materiality_backtest.py +0 -0
  750. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/scripts/test_workflow_hardening.py +0 -0
  751. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/__init__.py +0 -0
  752. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_catalog_sync.py +0 -0
  753. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_character_create_redaction.py +0 -0
  754. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_character_create_saga.py +0 -0
  755. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  756. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_doctor.py +0 -0
  757. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_media_attribution.py +0 -0
  758. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_mentions_observability.py +0 -0
  759. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_mentions_parse.py +0 -0
  760. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_mentions_resolve.py +0 -0
  761. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/services/test_resolve_and_apply.py +0 -0
  762. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/smoke/__init__.py +0 -0
  763. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  764. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/smoke/test_real_flow.py +0 -0
  765. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_auth.py +0 -0
  766. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_browser_manager.py +0 -0
  767. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_chain.py +0 -0
  768. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_chain_manifest.py +0 -0
  769. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_cli_data.py +0 -0
  770. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_cli_project.py +0 -0
  771. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_config.py +0 -0
  772. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_conftest_isolation.py +0 -0
  773. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_data_queries.py +0 -0
  774. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_bundle.py +0 -0
  775. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_events.py +0 -0
  776. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_journal.py +0 -0
  777. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_recorder.py +0 -0
  778. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_retention.py +0 -0
  779. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_diagnostics_sanitize.py +0 -0
  780. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_documentation_gate.py +0 -0
  781. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_duration_tab_drift.py +0 -0
  782. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_entity_provenance.py +0 -0
  783. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_errors.py +0 -0
  784. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_errors_classification.py +0 -0
  785. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_image_batch_references.py +0 -0
  786. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_incident_generation_requests.py +0 -0
  787. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_json_output.py +0 -0
  788. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_marker_registry.py +0 -0
  789. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_media.py +0 -0
  790. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_observability.py +0 -0
  791. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_overlay_banner_dismissal.py +0 -0
  792. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_paths.py +0 -0
  793. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_playwright_pin.py +0 -0
  794. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_profile_lease.py +0 -0
  795. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_profile_lease_subprocess.py +0 -0
  796. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_profile_store.py +0 -0
  797. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_self_documenting_errors.py +0 -0
  798. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_smoke.py +0 -0
  799. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/test_update_check.py +0 -0
  800. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/__init__.py +0 -0
  801. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_banned.py +0 -0
  802. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_expander.py +0 -0
  803. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_invocation.py +0 -0
  804. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_loader.py +0 -0
  805. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_registry.py +0 -0
  806. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_runtime.py +0 -0
  807. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/tools/test_spec.py +0 -0
  808. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/ui/test_app.py +0 -0
  809. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_codec.py +0 -0
  810. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_daemon.py +0 -0
  811. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  812. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_queue.py +0 -0
  813. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_queue_multiprocess.py +0 -0
  814. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/tests/worker/test_queue_reconciliation.py +0 -0
  815. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/ARCHITECTURE.md +0 -0
  816. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/AUTHENTICATION.md +0 -0
  817. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/CHARACTER.md +0 -0
  818. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/DATA_LAYER.md +0 -0
  819. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/DEBUGGING.md +0 -0
  820. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/DEVELOPMENT.md +0 -0
  821. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/E2E_TESTING.md +0 -0
  822. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  823. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/INSTRUCTIONS.md +0 -0
  824. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  825. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/MOVIE.md +0 -0
  826. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  827. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/SECURITY.md +0 -0
  828. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/TOOLS.md +0 -0
  829. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/USER_GUIDE.md +0 -0
  830. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/agents.md +0 -0
  831. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/index.md +0 -0
  832. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/installation.md +0 -0
  833. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/onboarding-mockup.html +0 -0
  834. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/onboarding.md +0 -0
  835. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/docs/stylesheets/extra.css +0 -0
  836. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/mkdocs.yml +0 -0
  837. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/requirements.in +0 -0
  838. {gflow_cli-0.61.0 → gflow_cli-0.62.0}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.61.0",
3
+ "version": "0.62.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -173,7 +173,8 @@
173
173
  # `patchright install chromium`. Unset to revert to the default playwright engine.
174
174
  # GFLOW_CLI_BROWSER_ENGINE=playwright
175
175
 
176
- # Which Flow UI arm a command needs: auto (bind whatever renders) | classic
176
+ # Which Flow UI arm a command needs: auto (default — no arm asked for, so it
177
+ # resolves to classic, the arm that can satisfy a generation request) | classic
177
178
  # (require the hard aspect controls) | agentic (require the chat surface; needed
178
179
  # for -i instructions). gflow switches to the required arm, verifies via re-probe,
179
180
  # and aborts with exit 28 (retryable — the cohort flaps per load) if it can't be
@@ -205,6 +205,16 @@ jobs:
205
205
  - name: Type check
206
206
  run: uv run pyright src
207
207
 
208
+ # The overlay-precondition tests (#593) drive the captured changelog markup in
209
+ # a real headless Chromium — a mock cannot tell you whether
210
+ # `[role='dialog']:has(a[href*='changelog']) button` resolves against Flow's
211
+ # actual DOM, only a real CSS engine can. They skip cleanly when the browser is
212
+ # absent, which would make them silently decorative in CI, so one job in the
213
+ # matrix installs it. No account, no network, no credits.
214
+ - name: Install Chromium (real-DOM fixture tests)
215
+ if: matrix.python-version == '3.13'
216
+ run: uv run playwright install chromium --with-deps
217
+
208
218
  - name: Test (smoke only) + coverage
209
219
  # e2e/live tests require a logged-in Chromium profile and may spend
210
220
  # Flow credits. pyproject.toml excludes both markers by default; CI
@@ -66,6 +66,11 @@ test_assets/debug_*/
66
66
  # Phase-2 live-spike capture outputs — NEVER commit (may contain real API payloads)
67
67
  scripts/dev/_spike_out/
68
68
 
69
+ # HAR captures (GFLOW_CLI_HAR_PATH) — full request/response bodies, headers and
70
+ # auth cookies. The _spike_out rule only covers the default location; a HAR
71
+ # written anywhere else must not be committable either.
72
+ *.har
73
+
69
74
  # Agent session marker — machine/session-local handoff state, regenerated per run
70
75
  .continue-here.md
71
76
 
@@ -7,6 +7,161 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.62.0] — 2026-08-28
11
+
12
+ ### Changed
13
+
14
+ - **`--ui-mode auto` (the default) now requires the *classic* Flow arm for image
15
+ generation ([#595](https://github.com/ffroliva/gflow-cli/issues/595)).** `auto`
16
+ used to bind whatever the composer rendered, so an account that Flow moved into
17
+ its **agentic** cohort — observed live on two accounts on 2026-08-27 — took a
18
+ path that cannot satisfy an image request and failed with either
19
+ `image_mode_tab` selector drift (exit 23) or a `WireFormatError` about video
20
+ bytes. Neither error named the cause, and the workaround
21
+ (`GFLOW_CLI_PREFER_CLASSIC=1`) had to be discovered from an error message.
22
+ `auto` now means "no arm was asked for" and resolves to `classic`, matching the
23
+ rule video has followed since [#299](https://github.com/ffroliva/gflow-cli/issues/299).
24
+ The bind still attempts classic recovery first and the cohort flaps per page
25
+ load, so a run only aborts (`UiModeUnavailableError`, **exit 28**, pre-submit,
26
+ zero credits) when the arm is genuinely pinned — and that abort is retryable.
27
+ The agentic arm stays reachable, but only when asked for by name
28
+ (`--ui-mode agentic` / `GFLOW_CLI_UI_MODE=agentic`) or by need (`-i` agent
29
+ instructions, which are agentic-only and still force it). The image **batch**
30
+ path carried its own inline mode resolution and so kept binding `auto`; it now
31
+ routes through the same policy as the single-prompt path.
32
+
33
+ ### Fixed
34
+
35
+ - **An announcement modal that mounts *during* a batch generation no longer
36
+ silently changes the next prompt's settings**
37
+ ([#593](https://github.com/ffroliva/gflow-cli/issues/593) follow-up). #593 left a
38
+ stated gap: call sites that neither route through `_probe_selector_cascade` nor
39
+ sit behind a navigation gate were still unguarded, and the set had not been
40
+ enumerated. Auditing all 73 click/fill/press sites in the UI transports found
41
+ exactly one that survives the "can a modal actually land here?" test — the image
42
+ **batch** loop's per-prompt boundary. A batch dismisses overlays once, during
43
+ setup; from prompt 2 on, the settings clicks are the first act after a
44
+ multi-second generation wait on a page that never navigates. This one is worse
45
+ than a timeout: `_open_gen_settings_panel` returns `False` when no selector
46
+ matches and the caller falls back to Flow's current defaults, so a modal that
47
+ mounted during prompt 1 did not fail prompt 2 — it generated it at the wrong
48
+ aspect/count. The boundary now runs the same `_require_unblocked` check the
49
+ navigation epochs use (one probe on the happy path), so the run aborts with
50
+ exit 23 and a screenshot instead of producing a quietly wrong image.
51
+
52
+ - **A Flow announcement modal no longer wedges a run with an unexplained timeout
53
+ ([#593](https://github.com/ffroliva/gflow-cli/issues/593)).** When Google ships a
54
+ feature, Flow puts a full changelog dialog over the editor and sets
55
+ `body { pointer-events: none }` while leaving the app neither `aria-hidden` nor
56
+ `inert` — so every control reads visible and enabled yet never receives a click,
57
+ and Playwright's actionability wait runs to timeout with no message. Measured live
58
+ on two accounts (2026-08-27, pt and en), which is also how the four failure paths
59
+ below were found:
60
+ - The gallery "+ New project" sweep ran with **no overlay check at all** — the one
61
+ navigation epoch that had none. A modal there cost 18 selectors x Playwright's
62
+ 30 s default click timeout and then reported `Could not find 'New project' CTA`,
63
+ which is the wrong error about the wrong thing. It now dismisses first and the
64
+ click carries an explicit 5 s timeout.
65
+ - Dismissal **verifies itself**. It previously returned success the moment a click
66
+ landed, so a dismissal that changed nothing still logged `overlay_dismissed` and
67
+ the run timed out somewhere unrelated — the success event lied. It now re-probes
68
+ and reports honestly, with a new `ui_automation.overlay_postmortem` warning.
69
+ - A persistent block now **aborts pre-submit at $0** with exit 23 and a screenshot
70
+ (probe `overlay_close_button`) instead of hanging. A transient is not enough to
71
+ trigger it: Flow's own menus set the same property while open, so the guard
72
+ re-probes after a settle.
73
+ - **The modal can mount *after* the navigation gate**, which is how it kept winning.
74
+ Flow hydrates on its own schedule, well past `domcontentloaded`, so dismissal at
75
+ the navigation boundary can run before the dialog exists — then the dialog appears
76
+ and covers a control that is present and enabled, and the selector cascade reports
77
+ drift for an element that is perfectly fine. A failed probe now checks the overlay
78
+ state before believing itself, and dismisses and re-probes once. The guard lives in
79
+ the one cascade every probe routes through, so all ten call sites are covered.
80
+ Verified live on a third account (2026-08-27): before the fix, `image_mode_tab`
81
+ raised `UiSelectorDriftError` with the announcement on screen and **no
82
+ `overlay_detected` in the log at all**; after it, the same command on the same
83
+ account cleared the modal (`setLastAcknowledgedChangeLogId` → 200, 23 s in, i.e.
84
+ from the probe guard rather than the navigation gate) and left the editor
85
+ reachable.
86
+ - The destructive Escape fallback is now **gated on the page actually being
87
+ blocked**, which retires the [#395](https://github.com/ffroliva/gflow-cli/issues/395)
88
+ hazard structurally rather than by comment. That regression pressed Escape on the
89
+ character composer and sent a generation out without `entityContext` — billed,
90
+ silently wrong. A page we can positively see is clickable is never touched.
91
+
92
+ Two raw-`goto` e2e tests (`test_sidebar_recovery_e2e`, `e2e_auth` — the nightly
93
+ canary's default tier — and `test_agentic_count_enforcement_e2e`) bypass every
94
+ transport boundary and were unprotected; both now dismiss explicitly, and both stop
95
+ hardcoding `"en"` in favour of the account's own locale (#587).
96
+
97
+ **One deliberate behaviour change.** The close-button cascade is now split: the
98
+ changelog-scoped anchor (`[role='dialog']:has(a[href*='changelog']) button`) runs on
99
+ any page because it cannot match one of Flow's own surfaces, while the generic
100
+ selectors (`button:has(i:text('close'))` and friends) and the Escape fallback run
101
+ only once the body is known to be blocked. The cost is that a non-modal banner —
102
+ one that covers a control without blocking the body — is no longer auto-closed by
103
+ the generic selectors. That is the right side of the trade: those same generic
104
+ selectors match the character composer's own close button, #395 spent real credits
105
+ through exactly that door, and `KNOWN_ISSUES` rates the banner case Low and
106
+ transient.
107
+
108
+ ### Added
109
+
110
+ - **`gflow project list` / `project show` and the MCP `gflow_list_projects` tool now
111
+ emit an account-correct editor URL
112
+ ([#587](https://github.com/ffroliva/gflow-cli/issues/587)).** They previously
113
+ emitted no URL at all: they are network-free catalog reads, so they had no way to
114
+ resolve a locale and correctly declined to guess one. With the locale now cached
115
+ per profile the link is readable offline. An unknown locale still yields the bare
116
+ URL — never a guessed `/fx/en/...`, which is the shape that started this thread by
117
+ being handed to a pt-BR account owner. In the terminal the project id renders as a
118
+ hyperlink, costing no column width.
119
+
120
+ ### Changed
121
+
122
+ - **The account-locale probe no longer costs ~4 s on every command
123
+ ([#587](https://github.com/ffroliva/gflow-cli/issues/587)).** The probe added in
124
+ v0.61.0 settles the bootstrap navigation to learn where Flow lands. On an account
125
+ Flow does *not* redirect there is nothing to settle, so `wait_for_url` ran to the
126
+ full `URL_SETTLE_TIMEOUT_MS` every single invocation. Measured live 2026-08-27,
127
+ best-of-N per arm: **~6.2 s -> ~2.0 s** setup on the non-redirecting account,
128
+ against an unchanged ~2.8 s -> ~2.9 s on a redirecting one (the control, which
129
+ shows the cold-then-warm ordering is worth nothing on its own). Run-to-run
130
+ variance is over a second, so read the delta as "the 4 s settle timeout", not to
131
+ two decimals.
132
+ The outcome is cached in the profile dir (`.gflow_locale`, a sibling of the
133
+ existing `.gflow_account`). The same guard covers all four `await_url_settled`
134
+ call sites **in the UI transport**; guarding only the editor entry left three
135
+ navigations still paying the timeout. (The three sites in the experimental REST
136
+ transports have no resolved locale to gate on and are unchanged.)
137
+
138
+ The cache decides only *whether to wait*, never *where to navigate*. Sending the
139
+ browser to a cached `/fx/{seg}/...` was built, measured, and rejected: Flow
140
+ serves whatever segment it is asked for, so a pt-BR account handed `/fx/de/`
141
+ stayed there and rendered `html lang=de` with no redirect — no correction signal,
142
+ and a wrong-language UI for as long as the stale value lived. That is #580's
143
+ defect in a new hat. The navigation therefore stays bare, which is what lets Flow
144
+ state the account's own answer. Reproducer: `scripts/dev/spike_locale_poison.py`.
145
+
146
+ The cache holds **four** states, and the fourth is what keeps it honest.
147
+ `await_url_settled` returns `None` for both "Flow does not redirect this account"
148
+ and "the settle timed out this once", so one slow network could otherwise commit
149
+ to "not redirected" permanently and silently restore #580's post-`goto` race. A
150
+ no-redirect observation is therefore **provisional** until a second run agrees;
151
+ a transient timeout costs one extra probe instead of a lasting defect.
152
+
153
+ ### Fixed
154
+
155
+ - **A NULL `model` / `aspect` / `project_id` no longer reads back as the string
156
+ `"None"` in `gflow data list images|videos`.** All three columns are nullable in
157
+ the schema (`assets.model`, `assets.aspect_ratio`, `assets.flow_project_id`), but
158
+ both listing constructors wrapped them in a bare `str(...)`, so a NULL became the
159
+ four-character string `"None"` — emitted verbatim into `--json` and
160
+ indistinguishable from a real value. `_row_to_operation_error` in the same module
161
+ already guarded `model` correctly; the two listing paths never got the same
162
+ treatment. `ImageRow` / `VideoRow` now type these fields `str | None` and the JSON
163
+ output carries `null`.
164
+
10
165
  ## [0.61.0] — 2026-08-27
11
166
 
12
167
  ### Fixed
@@ -3247,7 +3402,8 @@ shell-script template that branches on these codes.
3247
3402
 
3248
3403
  First skeleton. Not functional end-to-end yet.
3249
3404
 
3250
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...HEAD
3405
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...HEAD
3406
+ [0.62.0]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...v0.62.0
3251
3407
  [0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
3252
3408
  [0.60.0]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...v0.60.0
3253
3409
  [0.59.0]: https://github.com/ffroliva/gflow-cli/compare/v0.58.0...v0.59.0
@@ -503,6 +503,16 @@ playwright._impl._errors.TimeoutError: Locator.click: Timeout 30000ms exceeded.
503
503
 
504
504
  **Legacy workaround (no longer required):** open Flow in Chrome with the same profile once, click the `X` on the "What's new" popup, then close Chrome cleanly.
505
505
 
506
+ **Update 2026-08-27 ([#593](https://github.com/ffroliva/gflow-cli/issues/593)) — the modal wedges more than the first run.** Captured live on two accounts (pt and en): the announcement sets `body { pointer-events: none }` while leaving the app neither `aria-hidden` nor `inert`, so controls read visible **and enabled** yet never receive a click. That is why the symptom is a bare `TimeoutError` naming nothing rather than the "intercepts pointer events" message above. Three gaps were closed:
507
+
508
+ - The gallery "+ New project" sweep had no overlay check at all, so a modal there burned 18 selectors x Playwright's 30 s default click timeout before reporting the wrong error.
509
+ - Dismissal reported success on click without verifying anything cleared — `overlay_dismissed` was logged on runs that then timed out elsewhere.
510
+ - The Escape fallback is now gated on the page being provably blocked, which retires the [#395](https://github.com/ffroliva/gflow-cli/issues/395) hazard structurally.
511
+
512
+ A block that survives dismissal now aborts pre-submit with exit 23 (probe `overlay_close_button`) and a screenshot, at zero credits, instead of hanging. Dismissal persists server-side — Flow records it as `videoFx.setLastAcknowledgedChangeLogId`, so one dismissal per announcement per account is the whole cost.
513
+
514
+ **Follow-up 2026-08-28 — the one remaining epoch, found by audit.** #593 left a stated gap: call sites that neither route through `_probe_selector_cascade` nor sit behind a navigation gate. All 73 click/fill/press sites in the UI transports were then enumerated and classified, and exactly one survives the "can a modal actually land here?" test: the **image batch** loop's per-prompt boundary. A batch dismisses overlays once during setup, so from prompt 2 on the settings clicks are the first act after a multi-second generation wait on a page that never navigates. That one failed *silently* rather than loudly — `_open_gen_settings_panel` returns `False` when nothing matches and the caller falls back to Flow's current defaults, so a modal that mounted during prompt 1 generated prompt 2 at the wrong aspect/count. It now runs the same `_require_unblocked` check the navigation epochs use. Every other unguarded site fails loudly (exit 23 with a probe name and a screenshot, or an `overlay_postmortem` warning), which is why they are deliberately left unguarded rather than pre-guarded on a hunch.
515
+
506
516
  ---
507
517
 
508
518
  ### No in-CLI quota visibility
@@ -901,6 +911,15 @@ names the pinning case. Retrying *immediately* during a pin is futile — wait a
901
911
  while or switch `--profile`. Recorded as the #299 PR-B predict-gate evidence:
902
912
  retry loops must never key off the pinned signature.
903
913
 
914
+ **Update 2026-08-28 ([#595](https://github.com/ffroliva/gflow-cli/issues/595)) — images
915
+ now reach this fail-fast by default.** Two accounts flipped agentic on 2026-08-27 and a
916
+ plain `gflow image t2i` failed on both, because `auto` bound whatever rendered and the
917
+ agentic driver cannot satisfy an image request (either `image_mode_tab` selector drift or
918
+ a `WireFormatError` about video bytes — neither naming the cause). `auto` now resolves to
919
+ `classic` for images too, so a pinned account gets the exit-28 abort described above
920
+ instead of a mid-run failure, and `GFLOW_CLI_PREFER_CLASSIC=1` is no longer the
921
+ workaround anyone needs to discover.
922
+
904
923
  ### Auth verification depends on Google's NextAuth session endpoint
905
924
 
906
925
  - **Status:** Mitigated · **Severity:** Low (degrades fail-closed) · **Affects:** issue #15 fix onward · **Tracked:** issue #15
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.61.0
3
+ Version: 0.62.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
@@ -345,7 +345,7 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
345
345
 
346
346
  **What:** Which Flow UI arm to use for generation. Flow serves a **classic** composer (hard crop/aspect controls) or an **agentic** chat cohort, server-assigned and flapping per page load ([#299](https://github.com/ffroliva/gflow-cli/issues/299)).
347
347
  **Values:**
348
- - `auto` (default) — bind whatever the composer renders.
348
+ - `auto` (default) — no arm was asked for, so gflow **requires `classic`** ([#595](https://github.com/ffroliva/gflow-cli/issues/595)): classic is the arm that can satisfy a generation request, and it is recovered first, so this only aborts when the arm is genuinely pinned. Before v0.62.0 `auto` bound whatever rendered, which put an account in Flow's agentic cohort on a driver that cannot produce an image — failing mid-run as `image_mode_tab` selector drift or a `WireFormatError` about video bytes. Agentic is still reachable, but only by name (`--ui-mode agentic`) or by need (`-i`).
349
349
  - `classic` — require the classic composer (hard aspect controls). gflow switches to it, re-probes to verify, and if the arm is still agentic **aborts before submitting** with `UiModeUnavailableError` (**exit 28**) — no credits spent.
350
350
  - `agentic` — require the agentic chat surface (needed for `-i` agent instructions). gflow switches to it, verifies, and aborts (exit 28) if it can't be reached.
351
351
  **Default:** `auto`
@@ -145,12 +145,12 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
145
145
  **"Two gflow runs on the same profile — can the second one wait instead of failing (exit 11)?"** → [CONFIGURATION § GFLOW_CLI_LEASE_WAIT_SECONDS](CONFIGURATION.md#gflow_cli_lease_wait_seconds) (v0.56.0 opt-in bounded wait)
146
146
  **"How do I silence the 'newer version on PyPI' stderr notice?"** → [CONFIGURATION § GFLOW_CLI_UPDATE_CHECK](CONFIGURATION.md#gflow_cli_update_check) (`0` disables; auto-skipped in CI and for editable installs)
147
147
  **"How do I run the MCP server so an agent can't spend credits?"** → [CONFIGURATION § GFLOW_MCP_NO_SPEND](CONFIGURATION.md#gflow_mcp_no_spend) + [MCP § Option A2](MCP.md#option-a2-read-only-server) (`gflow mcp run --no-spend` / `GFLOW_MCP_NO_SPEND=1`; v0.57.0 — both generate tools go unregistered, not merely refused)
148
- **"Which Flow UI arm does a video run require, and why did it exit 2 or 28?"** → [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode) (v0.57.0 — video is classic-only: `auto` ≡ `classic`, explicit `agentic` exits 2, unreachable classic aborts pre-submit with exit 28, $0)
148
+ **"Which Flow UI arm does a run require, and why did it exit 2 or 28?"** → [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode) (`auto` ≡ `classic` for **both** images and video — video since v0.57.0/#299, images since #595; unreachable classic aborts pre-submit with exit 28, $0; explicit `agentic` on video exits 2)
149
149
  **"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
150
150
  **"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
151
151
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
152
152
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
153
- **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
153
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
154
154
  **"Was the playwright upper bound raised, and on what evidence?"** → [LIVE_VERIFICATION_playwright_1.61](LIVE_VERIFICATION_playwright_1.61.md) (**`>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0` verified 2026-08-05, 1 Imagen + 1 Veo credit** — the 2026-08-03 regression that motivated the bound does NOT reproduce on 1.61.0: a live `i2v` drove the full chain with `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live `i2i` local-ref attach passed outright [96.7s]. **1.62.0 stays excluded** — never root-caused. Also found, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0: Flow dropped the duration-tab UI, so **`--duration` is currently broken for i2v** — `UiSelectorDriftError` fires correctly [refusing rather than silently accepting Flow's default, #288] but the selector needs re-deriving; that is why the i2v proof was driven via the CLI without `--duration`, and Flow's own server-side `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT` means no finished mp4 is claimed).
155
155
  **"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
156
156
  **"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
@@ -0,0 +1,115 @@
1
+ # Live verification — v0.62.0
2
+
3
+ Every claim below was **observed**. Claims that could not be observed are stated
4
+ as such in §6, not omitted.
5
+
6
+ ## Environment
7
+
8
+ | | |
9
+ |---|---|
10
+ | Date | 2026-08-28 |
11
+ | Profile | `ci-probe` (one of the two accounts Flow moved to the **agentic** cohort on 2026-08-27) |
12
+ | Code under test | `develop` @ `fb8b346` (all five release commits merged; the version bump itself came after, so log lines read `cli_version 0.61.0`) |
13
+ | Veo credits spent | **0** — this release's user-facing changes are image-path and read-only surfaces |
14
+
15
+ ## 1. #595 — `--ui-mode auto` requires the classic arm (the headline change)
16
+
17
+ The whole point of the fix is what happens with **no flags and no env vars**, which
18
+ is what a new user gets:
19
+
20
+ ```bash
21
+ gflow --verbose image t2i "a single red cube on a white studio table, soft light" --profile ci-probe
22
+ ```
23
+
24
+ The decisive pair of events:
25
+
26
+ ```json
27
+ {"event": "ui_driver.ui_mode.attempt_exit_agent"}
28
+ {"mode": "classic", "ui_mode": "classic", "event": "ui_driver.bound"}
29
+ ```
30
+
31
+ `ui_mode` is **`classic`** with nothing on the command line. The day before, the same
32
+ command on this same account logged `ui_mode=auto` → `mode=agentic` and failed.
33
+
34
+ Five-layer ledger for the generation that followed:
35
+
36
+ | Layer | Observed |
37
+ |---|---|
38
+ | File count | 1 file in `~/Downloads/gflow-cli/images/2026-08-28/` |
39
+ | Magic bytes | `ff d8 ff e0` + `JFIF` at offset 6 — a real JPEG, not an HTML error page |
40
+ | Size / dimensions | 418 079 bytes, **768x1376** (the requested portrait 9:16) |
41
+ | Structlog invariants | `mode_switch_trigger` matched → `image_mode_tab` matched → `image_mode_entered` → `image_model_selected NARWHAL` → `aspect_ratio_set 9:16` → `count_setter_completed 1` → `prompt_submitted` → `batch_response_captured status=200` |
42
+ | User-confirmable artifact | `f0f5ef51-6a45-4c0c-a146-103f18ce9fba_1.jpg`, seed 294067, exit **0** |
43
+
44
+ `mode_switch_trigger` and `image_mode_tab` both matching is independently the
45
+ evidence that closed **#183**, which reported those exact selectors as unfindable.
46
+
47
+ ## 2. #591 — a NULL column no longer reads back as the string `"None"`
48
+
49
+ Run against the **real catalog** (not a fixture), 500 rows:
50
+
51
+ ```bash
52
+ gflow data list images --limit 500 --json
53
+ ```
54
+
55
+ | | count |
56
+ |---|---|
57
+ | rows returned | 500 |
58
+ | occurrences of the literal string `"None"` | **0** |
59
+ | occurrences of JSON `null` | 31 |
60
+
61
+ The catalog holds 119 image rows with a NULL in `model` / `aspect_ratio` /
62
+ `flow_project_id`, so the null path is genuinely exercised: before the fix those
63
+ rows emitted the four-character string `"None"`, indistinguishable from a real value.
64
+
65
+ ## 3. #592 — the account-locale probe runs once per profile
66
+
67
+ From the same run's log:
68
+
69
+ ```json
70
+ {"locale": null, "settle_skipped": true, "event": "client.account_locale_cached"}
71
+ ```
72
+
73
+ Exactly **one** `client.account_locale_cached` event for the whole command, and both
74
+ navigation settles report `settle_skipped: true` — the per-command ~4 s probe is gone.
75
+
76
+ ## 4. `gflow project list` / `project show` (the release's new feature)
77
+
78
+ Both are read-only and credit-free. `project list --limit 3` returned the project
79
+ created by §1 with a correct rollup (`IMG 1`, `VID 0`), and `project show` on that id
80
+ returned title, profile, source `generated`, creation timestamp, and a working Flow URL:
81
+
82
+ ```
83
+ Project ID: fdb68253-21a5-4d99-a5f5-091aa2a1de17
84
+ Title: a-single-red-cube-on-a-white-studio-tabl
85
+ Profile: ci-probe
86
+ Source: generated
87
+ URL: https://labs.google/fx/tools/flow/project/fdb68253-21a5-4d99-a5f5-091aa2a1de17
88
+ ```
89
+
90
+ Cross-checked against §1: the id, the profile and the image count all agree with the
91
+ generation that produced them.
92
+
93
+ ## 5. #593 — the announcement-modal fix
94
+
95
+ Verified live in the previous cycle (2026-08-27, recorded on PR #594): the ack POST
96
+ `videoFx.setLastAcknowledgedChangeLogId` → 200 fired at **+23 s**, well after the
97
+ ~3 s navigation gate, which is the attribution proving the probe-level guard — not the
98
+ boundary dismissal — cleared it. In **this** release's runs the overlay path is
99
+ silent (`0` overlay events in the §1 log), which is the correct outcome: all three
100
+ accounts have already acknowledged the current announcement.
101
+
102
+ ## 6. NOT verified this cycle — stated, not omitted
103
+
104
+ - **The exit-28 abort on a genuinely pinned agentic account (#595).** `ci-probe`
105
+ rendered classic on this load. The cohort is server-assigned and flaps, so a pin
106
+ cannot be provoked on demand. The abort path is the same `get_ui_driver` code #299
107
+ shipped for video and is covered offline, but it has not been observed live for
108
+ images.
109
+ - **The #597 batch inter-prompt guard.** Reproducing it needs an announcement modal
110
+ to mount *during* a multi-prompt batch generation. All three accounts have acked
111
+ the current announcement, so no modal can be raised at all until Google ships the
112
+ next one. Covered offline against the captured markup
113
+ (`tests/fixtures/changelog_modal_page.html`, real headless Chromium) plus mocks.
114
+ - **A fresh announcement modal end-to-end.** Same reason: nothing to dismiss until
115
+ Google ships the next changelog.
@@ -82,7 +82,7 @@ Both Click CLI (`src/gflow_cli/cli.py`) and MCP Server (`src/gflow_cli/mcp/`) ar
82
82
  The server registers three protocol surfaces:
83
83
 
84
84
  ### Tools (Executable actions)
85
- * `gflow_generate_image(prompt, model, aspect, count, seed, reference_images, tools, profile, project, project_name, instructions, ui_mode, output, wait)`: Triggers text-to-image / image-to-image (Imagen / Nano Banana). `instructions` is an optional list of ephemeral agent-instruction strings (agentic cohort only). `reference_images` switches to i2i and accepts **either a local file path or a generated image's Flow media UUID**. A UUID reference is attached by **selecting the already-existing asset in Flow's reference picker — no duplicate copy is uploaded** (locating the tile by the media id in its thumbnail URL, and searching the recorded display name to surface it when needed); gflow falls back to uploading the asset's on-disk local file only when it can't be located in place (e.g. it lives in a different project's picker). `project` generates into an existing Flow project id (mirrors CLI `--project`) — pass the reference's project to keep it selectable in place. `ui_mode` selects the Flow UI arm (`auto`/`classic`/`agentic`, mirroring CLI `--ui-mode`, matched case-insensitively); passing `instructions` forces `agentic` automatically, so `ui_mode="classic"` + `instructions` is a hard conflict rather than a silent drop. An unknown value returns a 400 problem-details envelope. See [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode).
85
+ * `gflow_generate_image(prompt, model, aspect, count, seed, reference_images, tools, profile, project, project_name, instructions, ui_mode, output, wait)`: Triggers text-to-image / image-to-image (Imagen / Nano Banana). `instructions` is an optional list of ephemeral agent-instruction strings (agentic cohort only). `reference_images` switches to i2i and accepts **either a local file path or a generated image's Flow media UUID**. A UUID reference is attached by **selecting the already-existing asset in Flow's reference picker — no duplicate copy is uploaded** (locating the tile by the media id in its thumbnail URL, and searching the recorded display name to surface it when needed); gflow falls back to uploading the asset's on-disk local file only when it can't be located in place (e.g. it lives in a different project's picker). `project` generates into an existing Flow project id (mirrors CLI `--project`) — pass the reference's project to keep it selectable in place. `ui_mode` selects the Flow UI arm (`auto`/`classic`/`agentic`, mirroring CLI `--ui-mode`, matched case-insensitively). Since [#595](https://github.com/ffroliva/gflow-cli/issues/595) `auto` means "no arm was asked for" and **resolves to `classic`** — the arm that can satisfy an image request — so an account in Flow's agentic cohort aborts pre-submit (exit-28 equivalent envelope, zero credits) instead of failing mid-run with selector drift or video bytes; the agentic arm is bound only when named. Passing `instructions` forces `agentic` automatically, so `ui_mode="classic"` + `instructions` is a hard conflict rather than a silent drop. An unknown value returns a 400 problem-details envelope. See [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode).
86
86
  * `gflow_generate_video(prompt, mode, aspect, initial_frame, end_frame, reference_images, model, duration, count, tools, profile, project, project_name, ui_mode, output, wait)`: Triggers vertical or landscape video generation (Veo). `mode` is `t2v`/`i2v`/`r2v`; `model` (`veo_lite`/`veo_fast`/`veo_quality`/`omni_flash`, aliases accepted), `duration` (seconds), and `count` mirror the CLI `gflow video` flags — an omitted `model` lets the transport apply its i2v veo-lite default (issue #125), and `omni_flash` is rejected for i2v-with-frames; `i2v` requires `initial_frame`, `r2v` requires `reference_images`; `project` generates into an existing Flow project id (mirrors CLI `--project`). `initial_frame`, `end_frame`, and `reference_images` each accept **either a local file path or the Flow image UUID of a generated asset** — pass a generated image's id straight in to chain image→video, and gflow attaches it for you. Since v0.58.0 (#529) the CLI and MCP surfaces are unified for i2v frames: the UUID keeps its identity and is enriched with the catalog's recorded display name plus an integrity-verified local fallback, so the transport prefers **selecting the exact asset in the project's media picker** (no duplicate upload) and re-uploads the recorded local file only when the tile is unreachable — and only if its byte count/SHA-256 still match. A UUID that isn't in your local asset catalog is rejected up front with a clear "Reference Not Found" error; a catalogued asset with neither a display name nor a verified local file gives a "Reference Not Usable" error (re-generate it or pass a local path). `r2v` UUID refs are resolved to the recorded local file for upload. `ui_mode` selects the Flow UI arm (#299 PR-A, mirroring CLI `--ui-mode`) and **applies to every mode of this tool, including `r2v`** — unlike the CLI, where `video r2v`/`chain` have no flag and follow the env-only path. Video generation has **only a classic driver**, so `auto` ≡ `classic`: both verify the classic editor pre-submit and abort before spending credits if it is unreachable. `ui_mode="agentic"` is rejected with a 400 problem-details envelope, because no agentic video driver exists yet. Values are matched case-insensitively. (MCP tools return envelopes, never process exit codes — the CLI equivalents of these aborts are exit 28 and exit 2 respectively.) See [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode).
87
87
  * `gflow_auth_status(profile)`: Credit-free, non-interactive Flow session probe (#497) — wraps the same fail-closed `verify_flow_profile` check as `gflow auth status`. Returns `{"status": "authenticated", "profile", "user_email"}` or a problem-details error with a `remediation_hint`; a `verification_error` outcome means a network/endpoint problem, which re-login does not fix. Call it before a generation tool to fail fast on dead auth (the queue is async — without it, an auth failure surfaces only later from the daemon). Login/logout remain CLI-only (genuinely interactive).
88
88
  * `gflow_list_projects(profile, limit, offset)`: Queries the SQLite catalog for recent generation folders, paginated — the response carries `count` (rows in this page), `offset`, `has_more`, and `next_offset` (pass it back as `offset` for the next page; `null` on the last page).
@@ -196,7 +196,9 @@ Options:
196
196
  --ui-mode [auto|classic|agentic]
197
197
  Require a Flow UI arm: classic (hard aspect
198
198
  controls) / agentic (chat surface; forced by -i) /
199
- auto (default). Aborts exit 28 if unreachable.
199
+ auto (default) — auto resolves to classic, the only
200
+ arm that can satisfy an image request (#595).
201
+ Aborts exit 28 if unreachable.
200
202
  Single-prompt only; batch uses GFLOW_CLI_UI_MODE.
201
203
  --profile NAME Profile name (overrides default).
202
204
  ```
@@ -1508,7 +1510,7 @@ shell scripts can branch on the failure mode without parsing stderr.
1508
1510
  | `20` | `FrameExtractionError` | Could not extract the last frame for a video chain link | Check the source video downloaded intact; retry the link |
1509
1511
  | `21` | `ChainPartialError` | A video chain stopped mid-way; earlier links completed | Resume from the last completed link shown in the error |
1510
1512
  | `22` | `UpscaleUnavailableError` | 4K upscale is gated to Flow **Ultra** accounts (HTTP 403) | Use `--scale 2k`, or upgrade the Flow plan |
1511
- | `23` | `UiSelectorDriftError` | A Flow editor control could not be located — Google changed the frontend (issues #183, #493) | Update gflow-cli; file a bug with the probe name + the diagnostics JSON / debug screenshot referenced in the error message, plus the incident bundle's `report.md` when one was written |
1513
+ | `23` | `UiSelectorDriftError` | A Flow editor control could not be located — Google changed the frontend (issues #183, #493) — **or** a blocking announcement overlay survived dismissal, so no control below it can be clicked (probe `overlay_close_button`, #593) | Update gflow-cli; file a bug with the probe name + the diagnostics JSON / debug screenshot referenced in the error message, plus the incident bundle's `report.md` when one was written. For `overlay_close_button`: open the project once in Chrome and dismiss the announcement — the dismissal persists on your account |
1512
1514
  | `24` | `BrowserEngineUnavailableError` | `GFLOW_CLI_BROWSER_ENGINE=patchright` but the engine is not installed | `pip install 'gflow-cli[patchright]'`, or unset `GFLOW_CLI_BROWSER_ENGINE` |
1513
1515
  | `25` | `FlowAgentUiError` | The profile is on Flow's Agentic UI cohort and the classic media panel is unrecoverable for this operation | Rare since v0.38.0 (#332): the mode controller reliably recovers agentic→classic, so first retry with `--ui-mode classic`; if it persists, see KNOWN_ISSUES on the agentic cohort |
1514
1516
  | `26` | `MediaAttributionError` | Generated media could not be reliably attributed to this request (issue #281) | Re-run; a dedicated project with fewer pre-existing assets avoids the ambiguity |
@@ -102,6 +102,16 @@ established, not merely plausible.**
102
102
 
103
103
  ### 2.4 Locale is account-driven
104
104
 
105
+ > **Superseded 2026-08-27 (#587).** The sentence below — *"Passing `locale="en"` to
106
+ > `project_editor_url()` still served `/fx/pt/` in Portuguese"* — is the **inverse** of
107
+ > what `scripts/dev/spike_locale_poison.py` measures: Flow serves whatever segment it
108
+ > is asked for and never corrects a wrong-but-valid one. The original observation was
109
+ > almost certainly the ineffective launch-context `locale="en-US"` noted in the
110
+ > corollary below — a Chrome kwarg, never a URL segment — rather than the URL
111
+ > builder, which does reduce `en-US` to `/fx/en/`. §2.4's *conclusion* (account-driven) stands on the
112
+ > authed/unauthed contrast; the mechanism sentence does not. Do not use it to argue
113
+ > that navigating to a cached segment is safe — that design was built and rejected.
114
+
105
115
  Passing `locale="en"` to `project_editor_url()` still served `/fx/pt/` in Portuguese.
106
116
  The *evidence* for account-attribution is the authed/unauthed contrast at identical
107
117
  `Accept-Language` and IP: **authed → `pt`, unauthed → `en`, cookie the only variable**