gflow-cli 0.65.0__tar.gz → 0.66.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 (864) hide show
  1. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/CHANGELOG.md +48 -1
  3. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/KNOWN_ISSUES.md +46 -0
  4. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/PKG-INFO +1 -1
  5. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/DEBUGGING.md +2 -1
  6. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/INDEX.md +2 -0
  7. gflow_cli-0.66.0/docs/LIVE_VERIFICATION_v0.66.0.md +119 -0
  8. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/PROJECT_STATUS.md +43 -0
  9. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/USAGE.md +1 -0
  10. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/pyproject.toml +1 -1
  11. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/__init__.py +1 -1
  12. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/_common.py +32 -0
  13. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/ui_automation.py +9 -7
  14. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/ui_automation_video.py +17 -1
  15. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/diagnostics.py +11 -0
  16. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/errors.py +40 -0
  17. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_agentic_cohort_detection.py +104 -0
  18. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_common.py +54 -0
  19. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_ui_automation.py +40 -0
  20. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_recorder.py +28 -0
  21. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_sanitize.py +13 -0
  22. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/uv.lock +1 -1
  23. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/DEBUGGING.md +2 -1
  24. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/KNOWN_ISSUES.md +46 -0
  25. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/USAGE.md +1 -0
  26. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.agents/plugins/marketplace.json +0 -0
  27. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/README.md +0 -0
  28. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/active.md +0 -0
  29. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/branch-review.md +0 -0
  30. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/changelog.md +0 -0
  31. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/check.md +0 -0
  32. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/doc-review.md +0 -0
  33. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  34. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  35. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/known-issues.md +0 -0
  36. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/live-verify.md +0 -0
  37. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/llm-council.md +0 -0
  38. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/next.md +0 -0
  39. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/plan.md +0 -0
  40. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  41. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/predict.md +0 -0
  42. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/release.md +0 -0
  43. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/scenario.md +0 -0
  44. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/sonar.md +0 -0
  45. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.claude/commands/gflow/status.md +0 -0
  46. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.env.template +0 -0
  47. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.gitattributes +0 -0
  48. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/CODEOWNERS +0 -0
  49. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/FUNDING.yml +0 -0
  50. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  51. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/copilot-instructions.md +0 -0
  52. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/dependabot.yml +0 -0
  53. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/ci.yml +0 -0
  54. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/deps-watch.yml +0 -0
  55. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/external-pr-triage.yml +0 -0
  56. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/governance-advisory.yml +0 -0
  57. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/governance-benchmark.yml +0 -0
  58. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/labels.yml +0 -0
  59. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/main-base-guard.yml +0 -0
  60. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/pages.yml +0 -0
  61. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/release.yml +0 -0
  62. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/scorecard.yml +0 -0
  63. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/selector-probe.yml +0 -0
  64. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.github/workflows/star-history-watch.yml +0 -0
  65. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.gitignore +0 -0
  66. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.gitleaks.toml +0 -0
  67. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.pre-commit-config.yaml +0 -0
  68. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/.secrets.baseline +0 -0
  69. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/AGENTS.md +0 -0
  70. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/CLAUDE.md +0 -0
  71. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/CONFIGURATION.md +0 -0
  72. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/CONTRIBUTING.md +0 -0
  73. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/DISCLAIMER.md +0 -0
  74. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/LICENSE +0 -0
  75. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/PLAN.md +0 -0
  76. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/README.md +0 -0
  77. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/RELEASE.md +0 -0
  78. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/ROADMAP.md +0 -0
  79. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/conftest.py +0 -0
  80. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  81. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/deploy/logrotate-pr-triage +0 -0
  82. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docker-compose.yml +0 -0
  83. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/ACCOUNT_SAFETY.md +0 -0
  84. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/AGENT_GUIDE.md +0 -0
  85. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/AGENT_UI_E2E.md +0 -0
  86. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/AGENT_UI_RECON.md +0 -0
  87. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/ARCHITECTURE.md +0 -0
  88. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  89. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/AUTHENTICATION.md +0 -0
  90. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/CHARACTER.md +0 -0
  91. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/CHARACTER_RECON.md +0 -0
  92. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/CONFIGURATION.md +0 -0
  93. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/DATA_LAYER.md +0 -0
  94. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/DEMOS.md +0 -0
  95. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/DEVELOPMENT.md +0 -0
  96. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/E2E_TESTING.md +0 -0
  97. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/EXTERNAL_STORAGE.md +0 -0
  98. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/GITHUB.md +0 -0
  99. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  100. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  101. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/INSTRUCTIONS.md +0 -0
  102. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  103. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  104. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  105. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
  106. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  107. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  108. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  109. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  110. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  111. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  112. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  113. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  114. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  115. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  116. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  117. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  118. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  119. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  120. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  121. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  122. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  123. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  124. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  125. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  126. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  127. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  128. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  129. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  130. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  131. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  132. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  133. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  134. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  135. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  136. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  137. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  138. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  139. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  140. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  141. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  142. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  143. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  144. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  145. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  146. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  147. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  148. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  149. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  150. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  151. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  152. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  153. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  154. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  155. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  156. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  157. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  158. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  159. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  160. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  161. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  162. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  163. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  164. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  165. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  166. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
  167. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  168. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  169. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  170. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  171. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  172. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/MCP.md +0 -0
  173. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/MEDIA_LIBRARY.md +0 -0
  174. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/MOVIE.md +0 -0
  175. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/PROMPT_EXPANSION.md +0 -0
  176. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  177. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/SECURITY.md +0 -0
  178. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/TOOLS.md +0 -0
  179. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/USER_GUIDE.md +0 -0
  180. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/assets/demo-split-pf.gif +0 -0
  181. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/assets/example-run.gif +0 -0
  182. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/assets/examples.webp +0 -0
  183. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/medium_tutorial.md +0 -0
  184. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/schemas/movie-handoff.schema.json +0 -0
  185. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/sonar-cleanup-tracker.md +0 -0
  186. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  187. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  188. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  189. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  190. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  191. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  192. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  193. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  194. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  195. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  196. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  197. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  198. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  199. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  200. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  201. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  202. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  203. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  204. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  205. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  206. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  207. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  208. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  209. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  210. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  211. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  212. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  213. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  214. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  215. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  216. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  217. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  218. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  219. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  220. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  221. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  222. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  223. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  224. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  225. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  226. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  227. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  228. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  229. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  230. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  231. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  232. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  233. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  234. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  235. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  236. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  237. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  238. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  239. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  240. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  241. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  242. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  243. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  244. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  245. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  246. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  247. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/eval/pr_triage_eval.py +0 -0
  248. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/eval/pr_triage_fixtures.json +0 -0
  249. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/README.md +0 -0
  250. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/batch_from_config.py +0 -0
  251. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/multi_prompt_t2i.py +0 -0
  252. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/sample_config.json +0 -0
  253. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/sample_prompts.txt +0 -0
  254. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/single_image_t2i.py +0 -0
  255. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/examples/workflow_chain.py +0 -0
  256. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/index.html +0 -0
  257. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/llms.txt +0 -0
  258. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/README.md +0 -0
  259. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/01_upload_image.json +0 -0
  260. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  261. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  262. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/04_archive_workflow.json +0 -0
  263. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/05_createProject.json +0 -0
  264. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/06_batchGenerateImages.json +0 -0
  265. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  266. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  267. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  268. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  269. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  270. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/12_create_scene.json +0 -0
  271. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  272. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/14_get_scene_workflows.json +0 -0
  273. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  274. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/Dockerfile.triage +0 -0
  275. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/entrypoint.sh +0 -0
  276. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/package-lock.json +0 -0
  277. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/package.json +0 -0
  278. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  279. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  280. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  281. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/canary/register_task.ps1 +0 -0
  282. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/canary/run_canary.py +0 -0
  283. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_doc_links.py +0 -0
  284. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_materiality.py +0 -0
  285. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_release_artifacts.py +0 -0
  286. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_repo_hygiene.py +0 -0
  287. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_test_count.py +0 -0
  288. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/check_website_docs_pii.py +0 -0
  289. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/ci/generate_website_docs.py +0 -0
  290. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/debug_editor.py +0 -0
  291. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/debug_gen_settings.py +0 -0
  292. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/debug_settings.py +0 -0
  293. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/_recording_client.py +0 -0
  294. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/_spike_common.py +0 -0
  295. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/active_plan.py +0 -0
  296. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  297. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  298. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  299. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  300. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  301. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  302. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  303. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_locale_invariants.py +0 -0
  304. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  305. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_project_listing.py +0 -0
  306. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  307. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  308. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  309. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  310. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/character_create_spike.py +0 -0
  311. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/character_create_spike_v2.py +0 -0
  312. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/dump_character_selectors.js +0 -0
  313. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/incident_bundle_quality.py +0 -0
  314. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  315. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  316. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  317. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/make_project.py +0 -0
  318. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/materiality_backtest.py +0 -0
  319. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/measure_locale_probe.py +0 -0
  320. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/patch_character.py +0 -0
  321. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/skillopt/README.md +0 -0
  322. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/skillopt/harness.py +0 -0
  323. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/skillopt/tasks.json +0 -0
  324. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/sonar-local-scan.sh +0 -0
  325. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  326. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_changelog_capture.py +0 -0
  327. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  328. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  329. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  330. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_extend_model_recon.py +0 -0
  331. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  332. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_extend_route_capture.py +0 -0
  333. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
  334. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
  335. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  336. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  337. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  338. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  339. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_incident_live.py +0 -0
  340. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  341. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  342. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  343. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  344. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  345. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_locale_poison.py +0 -0
  346. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  347. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  348. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_model_inventory.py +0 -0
  349. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  350. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  351. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  352. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  353. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  354. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  355. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_patch_entity.py +0 -0
  356. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_patchright.py +0 -0
  357. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  358. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  359. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/verify_language_agnostic.py +0 -0
  360. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  361. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/dev/verify_model_attribution.py +0 -0
  362. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/README.md +0 -0
  363. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/capture_flow_traffic.py +0 -0
  364. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  365. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/memory_profile.py +0 -0
  366. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/recaptcha_mint.py +0 -0
  367. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  368. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  369. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  370. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/probe/run_probe.py +0 -0
  371. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/probe/spike_auth_matrix.py +0 -0
  372. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/record_demo.ps1 +0 -0
  373. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/smoke_image.py +0 -0
  374. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/smoke_video_editor.py +0 -0
  375. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/smoke_worker_style.py +0 -0
  376. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/spike_waf_camoufox.py +0 -0
  377. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/scripts/verify_chrome_auth_viability.py +0 -0
  378. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/README.md +0 -0
  379. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/changelog/SKILL.md +0 -0
  380. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/check/SKILL.md +0 -0
  381. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/doc-review/SKILL.md +0 -0
  382. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/gflow-cli/SKILL.md +0 -0
  383. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/issue-assessment/SKILL.md +0 -0
  384. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/issue-resolve/SKILL.md +0 -0
  385. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/known-issues/SKILL.md +0 -0
  386. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/live-verify/SKILL.md +0 -0
  387. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/llm-council/SKILL.md +0 -0
  388. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/plan/SKILL.md +0 -0
  389. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/pr-council-review/SKILL.md +0 -0
  390. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/predict/SKILL.md +0 -0
  391. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/release/SKILL.md +0 -0
  392. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/scenario/SKILL.md +0 -0
  393. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/sonar/SKILL.md +0 -0
  394. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/skills/status/SKILL.md +0 -0
  395. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/sonar-project.properties +0 -0
  396. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/__main__.py +0 -0
  397. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/_cli_helpers.py +0 -0
  398. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/__init__.py +0 -0
  399. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/_engine.py +0 -0
  400. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/_retry.py +0 -0
  401. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  402. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/character.py +0 -0
  403. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/client.py +0 -0
  404. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/dto.py +0 -0
  405. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/extend_chain.py +0 -0
  406. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/image.py +0 -0
  407. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/image_upscale.py +0 -0
  408. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/recaptcha.py +0 -0
  409. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/routes.py +0 -0
  410. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/scene.py +0 -0
  411. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  412. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  413. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/base.py +0 -0
  414. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  415. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  416. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  417. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  418. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  419. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  420. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  421. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  422. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  423. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  424. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/video.py +0 -0
  425. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/api/video_extend.py +0 -0
  426. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/__init__.py +0 -0
  427. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/base.py +0 -0
  428. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/cookies.py +0 -0
  429. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/factory.py +0 -0
  430. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  431. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  432. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/strategies.py +0 -0
  433. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/auth/verification.py +0 -0
  434. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/browser_manager.py +0 -0
  435. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/chain.py +0 -0
  436. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/chain_manifest.py +0 -0
  437. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli.py +0 -0
  438. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_character.py +0 -0
  439. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_data.py +0 -0
  440. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_doctor.py +0 -0
  441. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_image.py +0 -0
  442. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_instructions.py +0 -0
  443. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_models.py +0 -0
  444. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_movie.py +0 -0
  445. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_project.py +0 -0
  446. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_run.py +0 -0
  447. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_scene.py +0 -0
  448. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_tools.py +0 -0
  449. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/cli_video.py +0 -0
  450. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/composition.py +0 -0
  451. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/config.py +0 -0
  452. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/__init__.py +0 -0
  453. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/chain_repo.py +0 -0
  454. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  455. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  456. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  457. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  458. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  459. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  460. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  461. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  462. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  463. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  464. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/models.py +0 -0
  465. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/queries.py +0 -0
  466. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/recorder.py +0 -0
  467. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/redaction.py +0 -0
  468. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/repository.py +0 -0
  469. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/data/store.py +0 -0
  470. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/exceptions.py +0 -0
  471. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/file_integrity.py +0 -0
  472. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  473. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  474. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  475. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  476. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/image_batch.py +0 -0
  477. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/json_output.py +0 -0
  478. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/__init__.py +0 -0
  479. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/prompts.py +0 -0
  480. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/resources.py +0 -0
  481. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/server.py +0 -0
  482. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/setup.py +0 -0
  483. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  484. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/mcp/tools.py +0 -0
  485. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/media.py +0 -0
  486. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/movie_manifest.py +0 -0
  487. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/observability.py +0 -0
  488. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/paths.py +0 -0
  489. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/profile_lease.py +0 -0
  490. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/profile_store.py +0 -0
  491. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/redaction.py +0 -0
  492. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/services/__init__.py +0 -0
  493. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  494. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/services/character_create.py +0 -0
  495. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/services/doctor.py +0 -0
  496. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/services/mentions.py +0 -0
  497. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/storage.py +0 -0
  498. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/__init__.py +0 -0
  499. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/banned.py +0 -0
  500. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  501. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  502. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  503. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  504. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/expander.py +0 -0
  505. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/invocation.py +0 -0
  506. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/loader.py +0 -0
  507. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/registry.py +0 -0
  508. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/runtime.py +0 -0
  509. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/tools/spec.py +0 -0
  510. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/ui/app.py +0 -0
  511. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/ui/server.py +0 -0
  512. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/update_check.py +0 -0
  513. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/winsec.py +0 -0
  514. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/worker/codec.py +0 -0
  515. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/worker/daemon.py +0 -0
  516. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/src/gflow_cli/worker/queue.py +0 -0
  517. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tasks/lessons.md +0 -0
  518. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/test_assets/sample_batch.json +0 -0
  519. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/test_assets/sample_batch.tsv +0 -0
  520. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/test_assets/sample_batch_invalid.tsv +0 -0
  521. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/__init__.py +0 -0
  522. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/__init__.py +0 -0
  523. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/fixtures/character_gen_response.json +0 -0
  524. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  525. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  526. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  527. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  528. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_bearer_redaction.py +0 -0
  529. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_character.py +0 -0
  530. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client.py +0 -0
  531. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_character.py +0 -0
  532. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_delete_characters.py +0 -0
  533. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_errors.py +0 -0
  534. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_extend.py +0 -0
  535. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_generate_character.py +0 -0
  536. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_image.py +0 -0
  537. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_incidents.py +0 -0
  538. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_launch_kwargs.py +0 -0
  539. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_locale_cache.py +0 -0
  540. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_patch_entity.py +0 -0
  541. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_scene.py +0 -0
  542. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_client_upscale.py +0 -0
  543. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_concurrency.py +0 -0
  544. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_dto.py +0 -0
  545. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_engine.py +0 -0
  546. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_extend_chain.py +0 -0
  547. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_image.py +0 -0
  548. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_image_dto.py +0 -0
  549. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_image_upscale.py +0 -0
  550. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  551. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_recaptcha.py +0 -0
  552. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_retry.py +0 -0
  553. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_routes.py +0 -0
  554. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_routes_character.py +0 -0
  555. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_routes_locale.py +0 -0
  556. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_routes_scene.py +0 -0
  557. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_sapisidhash_helper.py +0 -0
  558. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_scene_models.py +0 -0
  559. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_video.py +0 -0
  560. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_video_extend.py +0 -0
  561. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_video_request.py +0 -0
  562. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/test_video_status_poll.py +0 -0
  563. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/__init__.py +0 -0
  564. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/conftest.py +0 -0
  565. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/drivers/__init__.py +0 -0
  566. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  567. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/drivers/test_classic.py +0 -0
  568. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/drivers/test_factory.py +0 -0
  569. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  570. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_base.py +0 -0
  571. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_bearer.py +0 -0
  572. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  573. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_factory.py +0 -0
  574. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_fingerprint.py +0 -0
  575. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_locale_navigation.py +0 -0
  576. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_mode_control.py +0 -0
  577. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  578. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_navigation_settled.py +0 -0
  579. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  580. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_policy_400.py +0 -0
  581. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_sapisidhash.py +0 -0
  582. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  583. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_transport_timeout.py +0 -0
  584. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  585. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  586. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  587. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  588. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  589. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/strategies/test_factory.py +0 -0
  590. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/strategies/test_strategies.py +0 -0
  591. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/test_cookies.py +0 -0
  592. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/test_real_chrome.py +0 -0
  593. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/test_verification.py +0 -0
  594. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/auth/test_windows_acl.py +0 -0
  595. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  596. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/__init__.py +0 -0
  597. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_auth_status.py +0 -0
  598. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_auth_list.py +0 -0
  599. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_character.py +0 -0
  600. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_character_create.py +0 -0
  601. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_data.py +0 -0
  602. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_data_errors.py +0 -0
  603. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  604. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_data_sync.py +0 -0
  605. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_doctor.py +0 -0
  606. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_image.py +0 -0
  607. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  608. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  609. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_image_upscale.py +0 -0
  610. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  611. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_instructions.py +0 -0
  612. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_models.py +0 -0
  613. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_movie.py +0 -0
  614. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_run.py +0 -0
  615. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_scene.py +0 -0
  616. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_tools.py +0 -0
  617. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_video.py +0 -0
  618. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_video_chain.py +0 -0
  619. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_cli_video_extend.py +0 -0
  620. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_error_handling.py +0 -0
  621. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_failure_funnel.py +0 -0
  622. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_helpers.py +0 -0
  623. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_incident_output.py +0 -0
  624. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_movie_manifest.py +0 -0
  625. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  626. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_predictable_output.py +0 -0
  627. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  628. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_settings_validation.py +0 -0
  629. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  630. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/composition/test_character.py +0 -0
  631. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/composition/test_compose_prompt.py +0 -0
  632. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/composition/test_handoff.py +0 -0
  633. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/composition/test_style_variants.py +0 -0
  634. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/composition/test_style_variants_e2e.py +0 -0
  635. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/conftest.py +0 -0
  636. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/__init__.py +0 -0
  637. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_chain_repo.py +0 -0
  638. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_failure_recording.py +0 -0
  639. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_find_incomplete_character.py +0 -0
  640. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_models.py +0 -0
  641. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_null_columns_stay_null.py +0 -0
  642. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_packaging.py +0 -0
  643. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_recorder.py +0 -0
  644. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_recorder_character.py +0 -0
  645. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_redaction.py +0 -0
  646. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_repository.py +0 -0
  647. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_scene_persistence.py +0 -0
  648. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_settings_and_errors.py +0 -0
  649. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_store.py +0 -0
  650. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/data/test_store_migrations.py +0 -0
  651. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/dev/test_recording_client.py +0 -0
  652. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/__init__.py +0 -0
  653. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/conftest.py +0 -0
  654. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  655. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  656. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  657. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  658. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  659. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_chain_e2e.py +0 -0
  660. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_character_create_e2e.py +0 -0
  661. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  662. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  663. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_daemon_e2e.py +0 -0
  664. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  665. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  666. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  667. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  668. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  669. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  670. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  671. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  672. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  673. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_json_output_e2e.py +0 -0
  674. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  675. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  676. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  677. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  678. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_scene_compose_live.py +0 -0
  679. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  680. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_tools_e2e.py +0 -0
  681. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_transports_e2e.py +0 -0
  682. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  683. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  684. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  685. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/__init__.py +0 -0
  686. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/asset_tagging.feature +0 -0
  687. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/auth.feature +0 -0
  688. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/auth_login.feature +0 -0
  689. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/character_create.feature +0 -0
  690. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/character_read.feature +0 -0
  691. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/conftest.py +0 -0
  692. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/duration_tab_drift.feature +0 -0
  693. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/entity_provenance.feature +0 -0
  694. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/image.feature +0 -0
  695. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/image_batch_references.feature +0 -0
  696. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/image_upscale.feature +0 -0
  697. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/incident_diagnostics.feature +0 -0
  698. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/instructions.feature +0 -0
  699. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/locale_picker_include.feature +0 -0
  700. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/mcp_tasks.feature +0 -0
  701. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/media_picker_tiers.feature +0 -0
  702. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/output_hardening.feature +0 -0
  703. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_asset_tagging_steps.py +0 -0
  704. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_auth_login_steps.py +0 -0
  705. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_auth_steps.py +0 -0
  706. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_character_create_steps.py +0 -0
  707. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_character_read_steps.py +0 -0
  708. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_image_steps.py +0 -0
  709. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_image_upscale_steps.py +0 -0
  710. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  711. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_instructions_steps.py +0 -0
  712. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  713. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  714. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  715. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_output_hardening_steps.py +0 -0
  716. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_step_collision_guard.py +0 -0
  717. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  718. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/test_video_chain_steps.py +0 -0
  719. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/video_agent_ui.feature +0 -0
  720. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/features/video_chain.feature +0 -0
  721. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/__init__.py +0 -0
  722. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/changelog_modal_page.html +0 -0
  723. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/doctor_env.py +0 -0
  724. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/flow_model_inventory.json +0 -0
  725. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  726. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/listing_payload.py +0 -0
  727. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/fixtures/seeded_catalog.py +0 -0
  728. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/__init__.py +0 -0
  729. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/test_grading.py +0 -0
  730. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/test_model.py +0 -0
  731. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/test_model_governance.py +0 -0
  732. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/test_registry.py +0 -0
  733. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/flow_selectors/test_report.py +0 -0
  734. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/image_batch/__init__.py +0 -0
  735. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/image_batch/test_image_manifest.py +0 -0
  736. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/image_batch/test_jitter_config.py +0 -0
  737. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/image_batch/test_observability_events.py +0 -0
  738. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/__init__.py +0 -0
  739. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/conftest.py +0 -0
  740. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/constants.py +0 -0
  741. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/test_expander_gateway.py +0 -0
  742. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/test_storage_gcs.py +0 -0
  743. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/integration/test_storage_s3.py +0 -0
  744. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/__init__.py +0 -0
  745. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/conftest.py +0 -0
  746. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_auth_status_tool.py +0 -0
  747. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_cli_parity.py +0 -0
  748. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_error_funnel.py +0 -0
  749. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_http_transport.py +0 -0
  750. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_known_issues_resource.py +0 -0
  751. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_no_spend.py +0 -0
  752. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  753. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_resources.py +0 -0
  754. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_server.py +0 -0
  755. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_setup.py +0 -0
  756. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_stdio_transport.py +0 -0
  757. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_tasks_extension.py +0 -0
  758. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_tools_helpers.py +0 -0
  759. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_tools_instructions.py +0 -0
  760. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/mcp/test_tools_wired.py +0 -0
  761. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  762. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_canary_classify.py +0 -0
  763. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_canary_reexec.py +0 -0
  764. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  765. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_check_materiality.py +0 -0
  766. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  767. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  768. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_check_test_count.py +0 -0
  769. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  770. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_codex_plugin.py +0 -0
  771. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_generate_website_docs.py +0 -0
  772. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  773. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_materiality_backtest.py +0 -0
  774. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/scripts/test_workflow_hardening.py +0 -0
  775. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/__init__.py +0 -0
  776. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_catalog_sync.py +0 -0
  777. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_character_create_redaction.py +0 -0
  778. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_character_create_saga.py +0 -0
  779. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  780. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_doctor.py +0 -0
  781. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_media_attribution.py +0 -0
  782. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_mentions_observability.py +0 -0
  783. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_mentions_parse.py +0 -0
  784. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_mentions_resolve.py +0 -0
  785. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/services/test_resolve_and_apply.py +0 -0
  786. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/smoke/__init__.py +0 -0
  787. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  788. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/smoke/test_real_flow.py +0 -0
  789. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_auth.py +0 -0
  790. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_browser_manager.py +0 -0
  791. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_chain.py +0 -0
  792. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_chain_manifest.py +0 -0
  793. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_cli_data.py +0 -0
  794. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_cli_project.py +0 -0
  795. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_config.py +0 -0
  796. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_conftest_isolation.py +0 -0
  797. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_data_queries.py +0 -0
  798. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_bundle.py +0 -0
  799. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_events.py +0 -0
  800. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_journal.py +0 -0
  801. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_diagnostics_retention.py +0 -0
  802. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_documentation_gate.py +0 -0
  803. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_duration_tab_drift.py +0 -0
  804. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_entity_provenance.py +0 -0
  805. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_errors.py +0 -0
  806. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_errors_classification.py +0 -0
  807. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_image_batch_references.py +0 -0
  808. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_incident_generation_requests.py +0 -0
  809. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_json_output.py +0 -0
  810. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_marker_registry.py +0 -0
  811. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_media.py +0 -0
  812. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_observability.py +0 -0
  813. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_overlay_banner_dismissal.py +0 -0
  814. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_paths.py +0 -0
  815. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_playwright_pin.py +0 -0
  816. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_profile_lease.py +0 -0
  817. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_profile_lease_subprocess.py +0 -0
  818. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_profile_store.py +0 -0
  819. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_profile_store_locale.py +0 -0
  820. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_project_list_urls.py +0 -0
  821. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_self_documenting_errors.py +0 -0
  822. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_smoke.py +0 -0
  823. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/test_update_check.py +0 -0
  824. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/__init__.py +0 -0
  825. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_banned.py +0 -0
  826. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_expander.py +0 -0
  827. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_invocation.py +0 -0
  828. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_loader.py +0 -0
  829. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_registry.py +0 -0
  830. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_runtime.py +0 -0
  831. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/tools/test_spec.py +0 -0
  832. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/ui/test_app.py +0 -0
  833. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_codec.py +0 -0
  834. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_daemon.py +0 -0
  835. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  836. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_queue.py +0 -0
  837. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_queue_multiprocess.py +0 -0
  838. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/tests/worker/test_queue_reconciliation.py +0 -0
  839. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  840. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/ARCHITECTURE.md +0 -0
  841. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/AUTHENTICATION.md +0 -0
  842. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/CHARACTER.md +0 -0
  843. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/CONFIGURATION.md +0 -0
  844. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/DATA_LAYER.md +0 -0
  845. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/DEVELOPMENT.md +0 -0
  846. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/E2E_TESTING.md +0 -0
  847. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  848. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/INSTRUCTIONS.md +0 -0
  849. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/MCP.md +0 -0
  850. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  851. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/MOVIE.md +0 -0
  852. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  853. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/SECURITY.md +0 -0
  854. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/TOOLS.md +0 -0
  855. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/USER_GUIDE.md +0 -0
  856. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/agents.md +0 -0
  857. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/index.md +0 -0
  858. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/installation.md +0 -0
  859. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/onboarding-mockup.html +0 -0
  860. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/onboarding.md +0 -0
  861. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/docs/stylesheets/extra.css +0 -0
  862. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/mkdocs.yml +0 -0
  863. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/requirements.in +0 -0
  864. {gflow_cli-0.65.0 → gflow_cli-0.66.0}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.65.0",
3
+ "version": "0.66.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.66.0] — 2026-09-03
11
+
12
+ ### Fixed
13
+
14
+ - **Flow's migration to `flow.google.com` was reported as selector drift
15
+ ([#639](https://github.com/ffroliva/gflow-cli/issues/639)).** Google is moving Flow
16
+ off Labs onto its own origin. The migrated frontend renders **zero** Material Symbols
17
+ `<i>` elements, so every gflow selector — cohort detection included — misses at once,
18
+ and the run died with `UiSelectorDriftError` (exit 23, `retryable: false`): an error
19
+ that reads like the selectors rotted and sent operators hunting for the wrong cause.
20
+ The rollout **flaps per page load** — the same account and project land on the old
21
+ host on one navigation and the migrated one on the next — so a re-run frequently
22
+ succeeds, but the non-retryable classification made automated callers give up.
23
+ gflow now recognises the migrated origin and raises the distinct, **retryable**
24
+ `FlowHostMigratedError` (exit 36) naming the migration. Applies to CLI and MCP alike
25
+ (both route through the shared mode-switch raise site, and `retryable` has a single
26
+ source of truth). **This does not add support for the migrated frontend** — that is
27
+ separate work; see [KNOWN_ISSUES.md](KNOWN_ISSUES.md).
28
+
29
+ - **A migrated page load was misread as a logged-out session
30
+ ([#639](https://github.com/ffroliva/gflow-cli/issues/639)).** `_check_logged_in`
31
+ hard-required `labs.google` in the URL, so a perfectly valid authenticated session on
32
+ the migrated host failed the gate and drove a pointless re-auth. It now accepts both
33
+ Flow origins.
34
+
35
+ ### Security
36
+
37
+ - **The authenticated-session URL gate matched hosts by substring.** `_check_logged_in`
38
+ tested `"labs.google" in page.url`, which any foreign URL satisfies merely by carrying
39
+ the string in its path or query (`https://evil.example/?next=labs.google/fx/tools/flow`).
40
+ The host is now parsed and matched exactly.
41
+
42
+ ### Changed
43
+
44
+ - Incident bundles from a `flow.google.com` load previously reported
45
+ `url.host_category: "other"` / `url.route: "other"`, hiding the most useful fact about
46
+ the failure. The migrated origin is now classified as `flow_app`, with the same
47
+ identifier reduction applied.
48
+
49
+ Live-verified 2026-09-03 at zero credits against the **real** migrated frontend, on an
50
+ account inside the rollout: `flow_host_kind: "migrated"`, `_check_logged_in: true` (it was
51
+ `false` before the fix), and `_mode_switch_error` returning `FlowHostMigratedError` / exit 36 /
52
+ `retryable: true` — while a credit-free `image t2i` minutes earlier landed on the old host and
53
+ completed exit 0, proving no regression. See
54
+ [docs/LIVE_VERIFICATION_v0.66.0.md](docs/LIVE_VERIFICATION_v0.66.0.md).
55
+
10
56
  ## [0.65.0] — 2026-09-02
11
57
 
12
58
  ### Fixed
@@ -3659,7 +3705,8 @@ shell-script template that branches on these codes.
3659
3705
 
3660
3706
  First skeleton. Not functional end-to-end yet.
3661
3707
 
3662
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.65.0...HEAD
3708
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.66.0...HEAD
3709
+ [0.66.0]: https://github.com/ffroliva/gflow-cli/compare/v0.65.0...v0.66.0
3663
3710
  [0.65.0]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...v0.65.0
3664
3711
  [0.64.0]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...v0.64.0
3665
3712
  [0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
@@ -14,6 +14,52 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
14
14
 
15
15
  ## Open
16
16
 
17
+ ### Flow is migrating to `flow.google.com`; the migrated frontend is not drivable
18
+
19
+ - **Status:** Open · **Severity:** High (every generation command fails on a migrated page load) · **Affected:** all `gflow image` / `gflow video` generation, CLI and MCP alike, on accounts the rollout has reached
20
+ - **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
21
+ - **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
22
+
23
+ Google is moving Flow off Labs onto its own origin. On a migrated page load,
24
+ `https://labs.google/fx/tools/flow/project/<id>` redirects to
25
+ `https://flow.google.com/project/<id>` and serves a rewritten frontend that
26
+ contains **zero `<i>` elements**. Every gflow selector anchors on Material
27
+ Symbols ligatures (`i.google-symbols:text-is(...)`), so cohort detection and
28
+ every mode control miss at once.
29
+
30
+ **The rollout flaps per page load.** The same account, profile and project land
31
+ on the old host on one navigation and the migrated one on the next, minutes
32
+ apart, with no client change. Measured on one account ~35 minutes apart:
33
+
34
+ ```
35
+ old host labs.google/fx/<locale>/tools/flow/... i=55 i.google-symbols=49 crop_* present -> exit 0
36
+ migrated host flow.google.com/project/... i=0 i.google-symbols=0 crop_* absent -> exit 36
37
+ ```
38
+
39
+ Note the migrated URL **drops `/fx/tools/flow` entirely** — it is `/project/<id>`, not
40
+ `/fx/<locale>/tools/flow/project/<id>`. Any host gate written as a substring test on
41
+ `labs.google` could never have matched it.
42
+
43
+ This is **not** selector rot, not [#493](https://github.com/ffroliva/gflow-cli/issues/493),
44
+ and not the agentic cohort — the agentic indicators are absent too. It is a
45
+ different origin serving different markup.
46
+
47
+ **Workaround:** re-run the command. While the rollout flaps, a fresh navigation
48
+ frequently lands the old frontend and the run completes normally. Automated
49
+ callers get this for free: the failure is `FlowHostMigratedError` (exit 36) with
50
+ `retryable: true`, so retry loops driven by the `--json` / MCP / worker error
51
+ envelope will keep trying.
52
+
53
+ **What gflow does today (v0.66.0):** recognises the migrated origin and fails
54
+ with the distinct, retryable exit 36 instead of the misleading
55
+ `UiSelectorDriftError` (exit 23, "file a selector bug"). `_check_logged_in` also
56
+ accepts the migrated host, so a migrated load is no longer misread as a
57
+ logged-out session. **Support for driving the new frontend is separate work and
58
+ is not implemented** — once the rollout completes for an account, no retry will
59
+ help until then.
60
+
61
+ ---
62
+
17
63
  ### A Veo extend segment is 7 seconds, not the 8 Flow advertises — so concat pads a frozen second
18
64
 
19
65
  - **Status:** Open · **Severity:** Medium (audible/visible on every internal seam of a chained extend) · **Affected:** `gflow video extend -n >1` with `-o`, and any scene mixing extend segments
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.65.0
3
+ Version: 0.66.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
@@ -106,7 +106,8 @@ at command startup).
106
106
  ### What triggers a capture (and what never does)
107
107
 
108
108
  Captured: `FlowAppError` (31), `FlowAgentUiError` (25),
109
- `UiModeUnavailableError` (28), `UiSelectorDriftError` (23),
109
+ `FlowHostMigratedError` (36), `UiModeUnavailableError` (28),
110
+ `UiSelectorDriftError` (23),
110
111
  `TransportTimeoutError` (9), `BrowserSessionClosedError` (15),
111
112
  `WireFormatError` (7), `WafRejectionError` (10), `NetworkError` (6),
112
113
  unexpected exceptions while a page is alive, and `ProfileLockedError` (11)
@@ -158,6 +158,8 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
158
158
  **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [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)
159
159
  **"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).
160
160
  **"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)).
161
+ **"What was live-verified for v0.66.0?"** → [LIVE_VERIFICATION_v0.66.0](LIVE_VERIFICATION_v0.66.0.md) — **#639 Flow's `flow.google.com` migration, verified 2026-09-03 on profile `ffroliva` at ZERO credits.** The maintainer's own account turned out to be inside the rollout, so the fix was proven against the real migrated frontend rather than a reconstructed DOM: a read-only probe of `flow.google.com/project/<id>` measured `i_total: 0` (independently reproducing the reporter's central measurement) and drove the production functions against the live page — `flow_host_kind: "migrated"`, `_check_logged_in: true` (it was `false` before the fix, i.e. a valid session read as logged-out), and `_mode_switch_error` returning `FlowHostMigratedError` / exit 36 / `retryable: true`. The flap is confirmed on ONE account: a credit-free `image t2i` minutes earlier landed on the OLD host and completed exit 0 with a real 768x1376 JPEG (`ffd8ffe0`, 401,939 bytes, Pillow dims matching the API claim), proving the rewritten host gate does not regress the old path. Also recorded: the migrated URL **drops `/fx/tools/flow` entirely** — it is `/project/<id>` — which is why a substring gate on `labs.google` could never match it; and the migrated composer is not control-less but exposes **no `data-testid`, zero ligature `<i>`, and 13 `button[aria-label]`** (`Settings trigger`, `Start generation`, …), recorded as recon for the follow-up WITH the caveat that `aria-label` is translated and therefore Tier-2 at best under the locale-invariance rule. One item is recorded as NOT verified rather than omitted: gflow **driving** the migrated frontend, which is out of scope and keeps #639 open. Verification also hit pre-existing [#561](https://github.com/ffroliva/gflow-cli/issues/561) (401 on `project.createProject`), A/B'd against unmodified `develop` to prove it was not this change, then routed around with an existing `--project`.
162
+
161
163
  **"What was live-verified for v0.65.0?"** → [LIVE_VERIFICATION_v0.65.0](LIVE_VERIFICATION_v0.65.0.md) — the guard A/B (three runs, zero credits, control included); the `chain`/`movie` duration guards are validation that refuses **before** any transport call, so they are covered by a red state that reproduces the mid-spend crash in a test plus negative controls, and the reason they were not live-run is recorded rather than omitted.
162
164
 
163
165
  **"Does the `referenceEntity` guard actually run, and is it a Web Worker or a Service Worker?"** → [LIVE_VERIFICATION_reference_entity_guard](LIVE_VERIFICATION_reference_entity_guard.md) — **A/B-proven live on denon82 2026-09-02, zero credits.** Control (without #618): the guard never fired and the test failed; with #618: it fired and passed. Same account, same prompt, one variable. Settles the question that held #618 — it is a **dedicated Web Worker**, so `context.route` suffices and no `service_workers="block"` is needed. Also confirms `route.continue_(post_data=...)` does not corrupt the body (both runs produced a real image). The **video** glob was equally dead, which #615 never mentions. Residual: direct-wire routes still bypass structurally (#619).
@@ -0,0 +1,119 @@
1
+ # Live Verification — v0.66.0 (issue #639, Flow's `flow.google.com` migration)
2
+
3
+ **Date:** 2026-09-03 · **Account:** ffroliva@gmail.com · **Platform:** Windows 11, Chrome strategy (system Chrome)
4
+ **Branch:** `bugfix/639-flow-google-com-migration` · **PR:** [#640](https://github.com/ffroliva/gflow-cli/pull/640)
5
+ **Credits spent:** **0** — one Imagen image (images are credit-free; only Veo video spends) plus one read-only DOM probe.
6
+
7
+ ## What had to be proven
8
+
9
+ The fix classifies a failure. Two independent claims, and offline tests can prove neither:
10
+
11
+ 1. **On a real migrated load**, `_mode_switch_error` returns `FlowHostMigratedError` (exit 36, retryable) — not `UiSelectorDriftError` (23).
12
+ 2. **On an old-host load**, nothing regressed — in particular the rewritten `_check_logged_in`
13
+ host gate, which sits on the auth path of *every* run.
14
+
15
+ Both were verified against live Flow. The maintainer's own account turned out to be inside the
16
+ rollout, so this did not need the reporter.
17
+
18
+ ## Layer 1 — the migration is real, and it flaps on one account
19
+
20
+ Same account, same profile, minutes apart, same gflow build:
21
+
22
+ | | old-host load | migrated load |
23
+ |---|---|---|
24
+ | final URL | `labs.google/fx/tools/flow/project/<id>` | `flow.google.com/project/<id>?pli=1` |
25
+ | `document.querySelectorAll('i').length` | **55** (reporter) | **0** (measured here) |
26
+ | `i.google-symbols` | 49 (reporter) | **0** (measured here) |
27
+ | `crop_*` trigger | present | **absent** |
28
+ | `gflow image t2i` | **exit 0**, image downloaded | **exit 36** |
29
+
30
+ The migrated URL also **drops the `/fx/tools/flow` path entirely** — it is `/project/<id>`, not
31
+ `/fx/<locale>/tools/flow/project/<id>`. That is why a substring gate on `labs.google` could never
32
+ have matched it.
33
+
34
+ ## Layer 2 — the migrated path, measured (read-only, `$0`)
35
+
36
+ Probe: launch the authenticated persistent context, navigate to the migrated project URL, wait 9 s
37
+ for the composer, then run the real production functions against the live page.
38
+
39
+ ```json
40
+ {
41
+ "final_url": "https://flow.google.com/project/c5550ed7-...?pli=1",
42
+ "flow_host_kind": "migrated",
43
+ "check_logged_in": true,
44
+ "dom": { "i_total": 0, "symbols": [], "crop": 0, "testids": [], "buttons": 19 },
45
+ "mode_switch_error_class": "FlowHostMigratedError",
46
+ "exit_code": 36,
47
+ "retryable": true
48
+ }
49
+ ```
50
+
51
+ - `i_total: 0` — **the reporter's central measurement reproduced independently.**
52
+ - `check_logged_in: true` — the auth-gate fix works on the real migrated page. Before the fix this
53
+ was `false`, i.e. a valid session read as logged-out.
54
+ - `FlowHostMigratedError` / `36` / `retryable: true` — **the fix fires on the real thing**, not
55
+ only on the DOM shape reconstructed in tests.
56
+
57
+ ## Layer 3 — no regression on the old host (full generation path, exit 0)
58
+
59
+ `gflow image t2i --project <existing> --aspect 9:16 --count 1`
60
+
61
+ ```json
62
+ {"status": "ok", "model": "NARWHAL",
63
+ "images": [{"media_name": "b7d7316a-...", "seed": 49027,
64
+ "dimensions": {"width": 768, "height": 1376},
65
+ "local_path": "tmp/lv639/images/2026-09-03/b7d7316a-..._1.jpg"}]}
66
+ ```
67
+
68
+ Verification ledger:
69
+
70
+ | Layer | Evidence |
71
+ |---|---|
72
+ | L1 file count | 1 file written |
73
+ | L2 magic bytes | `ffd8ffe0` → JPEG · 401,939 bytes on disk |
74
+ | L3 Pillow dims | `(768, 1376)` — **matches** the API-claimed dimensions |
75
+ | L4 structlog | `image_mode_entered` → `image_model_selected` → `count_setter_completed` → `prompt_submitted` → `batch_request_intercepted` |
76
+ | L5 wire | `flowMedia:batchGenerateImages` intercepted, `request0_keys` carried `imageAspectRatio`, `imageModelName`, `structuredPrompt` |
77
+
78
+ The mode-switch cascade **found** its controls and generation completed — the rewritten host gate
79
+ does not break the old path.
80
+
81
+ ## Layer 4 — A/B control (offline, but the discipline that makes the above meaningful)
82
+
83
+ With all three fix sites neutered, **exactly 9 tests fail** — one per claimed behaviour. Restored:
84
+ 256 passed. No test passes vacuously.
85
+
86
+ ## Known limitation hit during verification, and how it was routed around
87
+
88
+ A first `t2i` attempt died at **exit 3 / HTTP 401 on `project.createProject`** — open issue
89
+ [#561](https://github.com/ffroliva/gflow-cli/issues/561), *not* this change: unmodified `develop`
90
+ was A/B'd and failed **identically** (same exit, same route). Passing an existing `--project` skips
91
+ project creation and routes past it. `gflow project list` succeeded throughout, confirming the
92
+ session itself was valid — the #561 signature exactly.
93
+
94
+ ## Recon for the follow-up (support for the migrated frontend)
95
+
96
+ The migrated composer is **not** control-less; it expresses controls differently. It exposes **no
97
+ `data-testid`** and **zero ligature `<i>`**, but 13 `button[aria-label]` values:
98
+
99
+ ```
100
+ Back button to go to previous page · More options for the project · Search ·
101
+ Filtering and sorting options · Add media menu · Product help · Tile grid settings ·
102
+ More options · Favourite · Reuse prompt · Add ingredients to the prompt box ·
103
+ Settings trigger · Start generation
104
+ ```
105
+
106
+ `Settings trigger` and `Start generation` are the functional equivalents of the classic `crop_*`
107
+ trigger and submit button. **Caveat for whoever builds on this:** `aria-label` values are
108
+ *translated*, so these strings are Tier-2 at best and violate the locale-invariance rule as literal
109
+ selectors. The durable anchors are structural — button ordering within the composer container,
110
+ `svg` presence, and ARIA *roles* — and deriving them needs a second probe across locales.
111
+
112
+ ## Verdict
113
+
114
+ | Claim | Status |
115
+ |---|---|
116
+ | Exit 36 fires on a real migrated load | ✅ **VERIFIED LIVE** |
117
+ | `_check_logged_in` accepts the real migrated host | ✅ **VERIFIED LIVE** |
118
+ | Old-host generation path unregressed | ✅ **VERIFIED LIVE** (exit 0, real artifact) |
119
+ | gflow *drives* the migrated frontend | ❌ **NOT CLAIMED** — out of scope; #639 stays open |
@@ -4,6 +4,46 @@
4
4
 
5
5
  ## Current release
6
6
 
7
+ **v0.66.0 — alpha.** **Google started moving Flow to a new domain, and gflow blamed its own
8
+ selectors for it.**
9
+
10
+ On a migrated page load, `labs.google/fx/tools/flow/project/<id>` redirects to
11
+ `flow.google.com/project/<id>` and serves a rewritten frontend containing **zero `<i>`
12
+ elements**. Every gflow selector anchors on Material Symbols ligatures, so cohort detection
13
+ and every mode control missed at once and the run died `UiSelectorDriftError` — exit 23,
14
+ `retryable: false`. That error means "a selector rotted, file a bug", so it sent operators
15
+ hunting where nothing was broken. The selectors are correct for the host they were written
16
+ against; that host is being replaced under them
17
+ ([#639](https://github.com/ffroliva/gflow-cli/issues/639), reported by
18
+ [@maipmacrothorax-75](https://github.com/maipmacrothorax-75) with measurements from both
19
+ sides of the rollout).
20
+
21
+ The rollout **flaps per page load** — the same account, profile and project land on the old
22
+ host on one navigation and the migrated one on the next — so a re-run frequently succeeds,
23
+ which `retryable: false` was throwing away. gflow now recognises the migrated origin and
24
+ raises a distinct, **retryable** `FlowHostMigratedError` (exit 36). CLI and MCP both inherit
25
+ it: they share the raise site, and `is_retryable` is a single source of truth for the
26
+ `--json`, MCP and worker envelopes.
27
+
28
+ Tracing the same root cause turned up three things the report did not name. `_check_logged_in`
29
+ hard-required `labs.google` in the URL, so a valid authenticated session on the migrated host
30
+ was read as **logged-out** — and that gate was a *substring* match, satisfied by any foreign
31
+ URL merely carrying the string in a path or query. Separately, `UiSelectorDriftError` is an
32
+ incident-**capture** trigger, so swapping in a new class would have silently switched off
33
+ bundle capture for exactly the failure whose evidence is most wanted; a test now pins that
34
+ invariant across all four arms of the raise site rather than a list of names.
35
+
36
+ **This does not add support for the migrated frontend.** It converts a confusing hard failure
37
+ into a clear retryable one. Once the rollout completes for an account, no retry will help —
38
+ #639 stays open for that work, with the anchor recon it needs already recorded.
39
+
40
+ Verification: [LIVE_VERIFICATION_v0.66.0](LIVE_VERIFICATION_v0.66.0.md) — proven against the
41
+ **real** migrated frontend at zero credits (`i_total: 0`, `flow_host_kind: "migrated"`,
42
+ `check_logged_in: true`, exit 36, `retryable: true`), with a credit-free `image t2i` on the
43
+ old host minutes earlier completing exit 0 to prove no regression.
44
+
45
+ <details><summary>v0.65.0 — the referenceEntity guard that had never fired</summary>
46
+
7
47
  **v0.65.0 — alpha.** **A safety net that had never once fired, and two crashes that spent
8
48
  your credits before failing.**
9
49
 
@@ -45,6 +85,8 @@ regardless of matcher — [#619](https://github.com/ffroliva/gflow-cli/issues/61
45
85
  Verification:
46
86
  [LIVE_VERIFICATION_reference_entity_guard](LIVE_VERIFICATION_reference_entity_guard.md).
47
87
 
88
+ </details>
89
+
48
90
  <details><summary>v0.64.0 — <code>i2v --end-frame</code> on Omni 1.1 Flash</summary>
49
91
 
50
92
  **v0.64.0 — alpha.** **`gflow video i2v --model omni-flash --end-frame` — first+last
@@ -443,6 +485,7 @@ reporter-verified e2e on macOS).
443
485
 
444
486
  | Milestone | Status |
445
487
  |---|---|
488
+ | Flow `flow.google.com` migration named as its own retryable failure (exit 36) | ✅ done (v0.66.0) |
446
489
  | Repo scaffold, CI, license, README, disclaimer | ✅ done |
447
490
  | Auth login flow (one-time browser capture) | ✅ done |
448
491
  | Video: `t2v` / `i2v` / `batch` (Veo 3.1) | ✅ done (v0.2.0a1) |
@@ -1642,6 +1642,7 @@ shell scripts can branch on the failure mode without parsing stderr.
1642
1642
  | `33` | — (`gflow doctor` verdict) | Doctor found warn/fail findings — a successful diagnosis, not an error class | Review the report; see [`gflow doctor`](#gflow-doctor) |
1643
1643
  | `34` | `SyncPartialError` | `gflow data sync` failed on some projects but succeeded on others — completed writes stay committed | Retryable: re-run the same command; it resumes with what is still nameless (see [`gflow data sync`](#gflow-data-sync)) |
1644
1644
  | `35` | `ExtendUnavailableError` | No Veo extend model is orderable for this account and aspect — the extend family is tier-gated and there is no square variant. **Never auto-retry**: a tier gate does not clear on its own. |
1645
+ | `36` | `FlowHostMigratedError` | Flow served the project from `flow.google.com` — the origin Google is migrating the app onto — whose frontend renders none of the controls gflow drives. Not selector drift (23) | **Retryable while the rollout flaps**: the same account lands on the old host on one page load and the new one on the next, so re-running often succeeds. If every attempt now lands on `flow.google.com`, the migration has completed for your account and retrying will not help — see [#639](https://github.com/ffroliva/gflow-cli/issues/639) |
1645
1646
  | `130`| SIGINT | User-interrupted (Ctrl-C) | — |
1646
1647
 
1647
1648
  **Exit code 16 — data store / migration error.** Fires when:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gflow-cli"
3
- version = "0.65.0"
3
+ version = "0.66.0"
4
4
  description = "Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -1,3 +1,3 @@
1
1
  """gflow-cli — unofficial CLI for Google Flow."""
2
2
 
3
- __version__ = "0.65.0"
3
+ __version__ = "0.66.0"
@@ -14,6 +14,7 @@ from __future__ import annotations
14
14
  import json
15
15
  import uuid
16
16
  from typing import Any
17
+ from urllib.parse import urlsplit
17
18
 
18
19
  import structlog
19
20
 
@@ -53,6 +54,37 @@ def mint_batch_id() -> str:
53
54
  return str(uuid.uuid4())
54
55
 
55
56
 
57
+ # Flow's own origins. Google is migrating the app off labs.google onto
58
+ # flow.google.com (issue #639) and the two FLAP per page load, so both are live
59
+ # and every host gate has to accept both.
60
+ _FLOW_HOSTS: dict[str, str] = {
61
+ "labs.google": "labs",
62
+ "flow.google.com": "migrated",
63
+ }
64
+
65
+
66
+ def flow_host_kind(url: object) -> str | None:
67
+ """Classify a URL's origin as ``"labs"``, ``"migrated"``, or ``None``.
68
+
69
+ Exact host match over a parsed https URL — never a substring test, which any
70
+ foreign URL satisfies just by mentioning the host in its path or query.
71
+
72
+ Total by construction: both callers read this straight off ``page.url`` on
73
+ best-effort paths where a probe error must never displace the real failure,
74
+ so anything unparseable — or not even a string — classifies as ``None``.
75
+ """
76
+ if not isinstance(url, str):
77
+ return None
78
+ try:
79
+ parts = urlsplit(url)
80
+ if parts.scheme != "https":
81
+ return None
82
+ host = (parts.hostname or "").lower()
83
+ except ValueError:
84
+ return None
85
+ return _FLOW_HOSTS.get(host)
86
+
87
+
56
88
  PROJECT_URL_FRAGMENT = "/project/"
57
89
 
58
90
 
@@ -34,6 +34,7 @@ from gflow_cli.api.transports._common import (
34
34
  close_menu,
35
35
  count_visible,
36
36
  extract_project_id,
37
+ flow_host_kind,
37
38
  generation_error,
38
39
  offered_menu_labels,
39
40
  )
@@ -1077,20 +1078,21 @@ class UiAutomationTransport(VideoGenerationMixin):
1077
1078
  """True if the page shows the authenticated Flow UI.
1078
1079
 
1079
1080
  Gates (pattern G13):
1080
- - URL is on labs.google AND contains /flow (locale-stable;
1081
- /fx/pt/tools/flow, /fx/es/tools/flow, etc. all match).
1082
- - URL is NOT on accounts.google.com.
1081
+ - URL's host is one of Flow's own origins — ``labs.google`` or, since
1082
+ #639, the migrated ``flow.google.com``. Locale-stable: /fx/pt/tools/flow,
1083
+ /fx/es/tools/flow etc. all match, and so does the migrated /project/<id>.
1083
1084
  - /project/<uuid> URLs short-circuit to True (editor already open).
1084
1085
  - Otherwise reject if a top-level Sign-in CTA is visible.
1085
1086
 
1087
+ The host is PARSED and matched exactly. This gate used to be the
1088
+ substring test ``"labs.google" in page.url``, which any foreign URL
1089
+ satisfies simply by carrying the string in a path or query.
1090
+
1086
1091
  A failure in the locator probe is treated as "no Sign-in button"
1087
1092
  — the URL gate already established Flow context, and a transient
1088
1093
  DOM error shouldn't force a re-auth loop.
1089
1094
  """
1090
- if "accounts.google.com" in page.url:
1091
- return False
1092
- on_flow = "labs.google" in page.url and "/flow" in page.url
1093
- if not on_flow:
1095
+ if flow_host_kind(page.url) is None:
1094
1096
  return False
1095
1097
  if _PROJECT_URL_FRAGMENT in page.url:
1096
1098
  return True
@@ -31,6 +31,7 @@ from gflow_cli.api.transports._common import (
31
31
  close_menu,
32
32
  count_visible,
33
33
  extract_project_id,
34
+ flow_host_kind,
34
35
  generation_error,
35
36
  offered_menu_labels,
36
37
  )
@@ -53,6 +54,7 @@ from gflow_cli.errors import (
53
54
  AuthExpiredError,
54
55
  FlowAgentUiError,
55
56
  FlowAppError,
57
+ FlowHostMigratedError,
56
58
  MediaUploadRejectedError,
57
59
  RateLimitError,
58
60
  ReferenceNotFoundError,
@@ -1432,7 +1434,7 @@ class VideoGenerationMixin:
1432
1434
  @staticmethod
1433
1435
  async def _mode_switch_error(
1434
1436
  page: Page, out_dir: Path | None, *, media: str
1435
- ) -> FlowAppError | FlowAgentUiError | UiSelectorDriftError:
1437
+ ) -> FlowAppError | FlowHostMigratedError | FlowAgentUiError | UiSelectorDriftError:
1436
1438
  """Build (do NOT raise — the caller raises) the right error for a
1437
1439
  ``mode_switch_trigger`` miss on the ``image``/``video`` path: dump DOM
1438
1440
  diagnostics, then classify — a transient :class:`FlowAppError` if Flow's app
@@ -1451,6 +1453,20 @@ class VideoGenerationMixin:
1451
1453
  f"{diag_clause}"
1452
1454
  )
1453
1455
  )
1456
+ # #639: checked BEFORE the cohort probe, because the cohort indicators are
1457
+ # themselves ligature selectors — on the migrated frontend they miss for the
1458
+ # same reason everything else does, so their silence proves nothing here.
1459
+ if flow_host_kind(page.url) == "migrated":
1460
+ return FlowHostMigratedError(
1461
+ detail=(
1462
+ "Flow served this project from flow.google.com — the origin Google "
1463
+ "is migrating the app onto — whose frontend renders none of the "
1464
+ f"controls gflow drives, so there is no {media} generation control "
1465
+ "here. This is not selector drift. The migration currently flaps "
1466
+ "per page load, so retrying often lands the old frontend."
1467
+ f"{diag_clause}"
1468
+ )
1469
+ )
1454
1470
  cohort = await VideoGenerationMixin._detect_non_classic_cohort(page)
1455
1471
  if cohort is not None:
1456
1472
  return FlowAgentUiError(
@@ -138,6 +138,10 @@ class ErrorBodySummary:
138
138
  # dot. Everything else is ``other`` and its raw host/path is never persisted.
139
139
  _HOST_CATEGORIES: tuple[tuple[str, str], ...] = (
140
140
  ("labs.google", "flow_app"),
141
+ # #639: Google is migrating Flow onto its own origin. Without this the
142
+ # incident bundle from a migrated load reported host_category "other",
143
+ # hiding the single most useful fact about the failure.
144
+ ("flow.google.com", "flow_app"),
141
145
  ("aisandbox-pa.googleapis.com", "aisandbox"),
142
146
  ("accounts.google.com", "google_auth"),
143
147
  ("storage.googleapis.com", "google_cdn"),
@@ -1840,6 +1844,7 @@ def _capture_triggers() -> tuple[type[BaseException], ...]:
1840
1844
  BrowserSessionClosedError,
1841
1845
  FlowAgentUiError,
1842
1846
  FlowAppError,
1847
+ FlowHostMigratedError,
1843
1848
  NetworkError,
1844
1849
  TransportTimeoutError,
1845
1850
  UiModeUnavailableError,
@@ -1851,6 +1856,10 @@ def _capture_triggers() -> tuple[type[BaseException], ...]:
1851
1856
  return (
1852
1857
  FlowAppError,
1853
1858
  FlowAgentUiError,
1859
+ # #639: this arm REPLACED UiSelectorDriftError on the migrated frontend.
1860
+ # Omitting it here would silently disable capture for the one failure whose
1861
+ # bundle we most need to build selector support for the new origin.
1862
+ FlowHostMigratedError,
1854
1863
  UiModeUnavailableError,
1855
1864
  UiSelectorDriftError,
1856
1865
  TransportTimeoutError,
@@ -1865,6 +1874,7 @@ def _screenshot_triggers() -> tuple[type[BaseException], ...]:
1865
1874
  from gflow_cli.errors import (
1866
1875
  FlowAgentUiError,
1867
1876
  FlowAppError,
1877
+ FlowHostMigratedError,
1868
1878
  TransportTimeoutError,
1869
1879
  UiModeUnavailableError,
1870
1880
  UiSelectorDriftError,
@@ -1873,6 +1883,7 @@ def _screenshot_triggers() -> tuple[type[BaseException], ...]:
1873
1883
  return (
1874
1884
  FlowAppError,
1875
1885
  FlowAgentUiError,
1886
+ FlowHostMigratedError,
1876
1887
  UiModeUnavailableError,
1877
1888
  UiSelectorDriftError,
1878
1889
  TransportTimeoutError,
@@ -30,6 +30,7 @@ __all__ = [
30
30
  "FlowAgentUiError",
31
31
  "FlowApiError",
32
32
  "FlowAppError",
33
+ "FlowHostMigratedError",
33
34
  "FrameExtractionError",
34
35
  "GFlowError",
35
36
  "MediaAttributionError",
@@ -671,6 +672,36 @@ class FlowAppError(GFlowError):
671
672
  )
672
673
 
673
674
 
675
+ class FlowHostMigratedError(GFlowError):
676
+ """Raised when Flow served the project from ``flow.google.com`` — the origin
677
+ Google is migrating the app onto (issue #639) — instead of ``labs.google``.
678
+
679
+ The migrated frontend is a different build: it renders none of the Material
680
+ Symbols ligature elements every gflow selector anchors on, so cohort
681
+ detection and every mode control miss at once. That is NOT selector rot, and
682
+ reporting it as :class:`UiSelectorDriftError` (exit 23, "file a bug about the
683
+ selector") sent operators hunting for the wrong cause.
684
+
685
+ **Retryable** (exit code 36): the migration flaps per page load — the same
686
+ account, profile and project land on the old host on one navigation and the
687
+ new one on the next — so a re-run frequently succeeds. This error does NOT
688
+ mean gflow supports the migrated frontend; it names the situation and lets
689
+ callers retry into it.
690
+ """
691
+
692
+ problem_type = "https://gflow-cli.dev/errors/flow-host-migrated"
693
+ title = "Flow served the migrated flow.google.com frontend"
694
+ _default_remediation = (
695
+ "Google is moving Flow from labs.google to flow.google.com, and gflow-cli "
696
+ "cannot drive the migrated frontend yet — it ships none of the UI controls "
697
+ "gflow automates. The migration currently flaps per page load, so retrying "
698
+ "often lands the old frontend and succeeds. If EVERY attempt now lands on "
699
+ "flow.google.com, the rollout has completed for your account and retrying "
700
+ "will not help — follow "
701
+ "https://github.com/ffroliva/gflow-cli/issues/639 for support status."
702
+ )
703
+
704
+
674
705
  class UiModeUnavailableError(GFlowError):
675
706
  """Raised when the Flow UI arm a command REQUIRES (``--ui-mode`` /
676
707
  ``GFLOW_CLI_UI_MODE``, or inferred — e.g. ``-i`` instructions force agentic)
@@ -1152,6 +1183,12 @@ EXIT_CODE_MAP: dict[type[GFlowError], int] = {
1152
1183
  BrowserEngineUnavailableError: 24,
1153
1184
  FlowAgentUiError: 25,
1154
1185
  FlowAppError: 31,
1186
+ # FlowHostMigratedError (#639): Flow served the migrated
1187
+ # flow.google.com frontend, whose DOM gflow cannot drive. Direct
1188
+ # GFlowError subclass; exit 36 lets scripts distinguish "wrong Flow
1189
+ # frontend, retry" from genuine selector drift (23), which it used to
1190
+ # masquerade as.
1191
+ FlowHostMigratedError: 36,
1155
1192
  # UiModeUnavailableError (issue #299): a command's required arm (--ui-mode /
1156
1193
  # inferred) couldn't be reached after a best-effort switch. Direct GFlowError
1157
1194
  # subclass — retryable policy abort, distinct from FlowAgentUiError (25).
@@ -1208,6 +1245,9 @@ RETRYABLE_ERRORS: tuple[type[GFlowError], ...] = (
1208
1245
  BrowserSessionClosedError,
1209
1246
  FlowAppError,
1210
1247
  FlowAgentUiError,
1248
+ # #639: the labs.google / flow.google.com migration flaps per page
1249
+ # load, so re-navigating often lands the drivable frontend.
1250
+ FlowHostMigratedError,
1211
1251
  # #299: the cohort is server-assigned per page load and flaps — the
1212
1252
  # documented remediation for exit 28 IS "retry"; the machine flag must
1213
1253
  # agree with the docs.