gflow-cli 0.62.1__tar.gz → 0.64.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 (860) hide show
  1. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.codex-plugin/plugin.json +1 -1
  2. gflow_cli-0.64.0/.github/FUNDING.yml +2 -0
  3. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/scorecard.yml +1 -1
  4. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/AGENTS.md +68 -5
  5. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CHANGELOG.md +125 -1
  6. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CLAUDE.md +31 -5
  7. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/KNOWN_ISSUES.md +52 -0
  8. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/PKG-INFO +12 -4
  9. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/PLAN.md +1 -1
  10. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/README.md +10 -2
  11. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CHARACTER.md +24 -4
  12. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/INDEX.md +2 -1
  13. gflow_cli-0.64.0/docs/LIVE_VERIFICATION_v0.63.0.md +130 -0
  14. gflow_cli-0.64.0/docs/LIVE_VERIFICATION_v0.64.0.md +112 -0
  15. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MCP.md +1 -1
  16. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/PROJECT_STATUS.md +82 -20
  17. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/USAGE.md +115 -10
  18. gflow_cli-0.64.0/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +361 -0
  19. gflow_cli-0.64.0/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +261 -0
  20. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/index.html +12 -3
  21. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/llms.txt +1 -1
  22. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/pyproject.toml +3 -3
  23. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/Dockerfile.triage +1 -1
  24. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/package-lock.json +36 -36
  25. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/package.json +1 -1
  26. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/pr_triage_autopilot.py +40 -18
  27. gflow_cli-0.64.0/scripts/dev/spike_extend_model_recon.py +194 -0
  28. gflow_cli-0.64.0/scripts/dev/spike_extend_ourstack_verify.py +210 -0
  29. gflow_cli-0.64.0/scripts/dev/spike_extend_route_capture.py +194 -0
  30. gflow_cli-0.64.0/scripts/dev/spike_extend_submit_capture.py +194 -0
  31. gflow_cli-0.64.0/scripts/dev/spike_extend_ui_recon.py +205 -0
  32. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/check/SKILL.md +77 -0
  33. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/doc-review/SKILL.md +16 -0
  34. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/issue-assessment/SKILL.md +9 -0
  35. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/issue-resolve/SKILL.md +13 -2
  36. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/live-verify/SKILL.md +8 -0
  37. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/plan/SKILL.md +9 -4
  38. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/pr-council-review/SKILL.md +11 -0
  39. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/predict/SKILL.md +3 -2
  40. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/scenario/SKILL.md +16 -5
  41. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/__init__.py +1 -1
  42. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/_cli_helpers.py +52 -0
  43. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/client.py +168 -2
  44. gflow_cli-0.64.0/src/gflow_cli/api/extend_chain.py +201 -0
  45. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/routes.py +15 -0
  46. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/ui_automation_video.py +85 -52
  47. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/video.py +4 -27
  48. gflow_cli-0.64.0/src/gflow_cli/api/video_extend.py +313 -0
  49. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/chain.py +7 -4
  50. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_video.py +441 -22
  51. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/models.py +1 -0
  52. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/recorder.py +58 -0
  53. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/redaction.py +5 -1
  54. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/errors.py +54 -14
  55. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/tools.py +4 -3
  56. gflow_cli-0.64.0/tests/api/fixtures/project_initial_data_extend_models.json +2471 -0
  57. gflow_cli-0.64.0/tests/api/test_client_extend.py +200 -0
  58. gflow_cli-0.64.0/tests/api/test_extend_chain.py +174 -0
  59. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_video.py +11 -20
  60. gflow_cli-0.64.0/tests/api/test_video_extend.py +289 -0
  61. gflow_cli-0.64.0/tests/api/test_video_status_poll.py +143 -0
  62. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_video.py +116 -36
  63. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/autopilot/test_pr_triage_autopilot.py +66 -14
  64. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_video.py +51 -36
  65. gflow_cli-0.64.0/tests/cli/test_cli_video_extend.py +647 -0
  66. gflow_cli-0.64.0/tests/cli/test_run_with_handlers_interrupt.py +70 -0
  67. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/conftest.py +24 -0
  68. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_recorder.py +53 -0
  69. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_redaction.py +20 -0
  70. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_cli_parity.py +16 -0
  71. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_documentation_gate.py +5 -0
  72. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/uv.lock +37 -40
  73. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/CHARACTER.md +24 -4
  74. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/KNOWN_ISSUES.md +52 -0
  75. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MCP.md +1 -1
  76. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/USAGE.md +115 -10
  77. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/requirements.txt +6 -7
  78. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.agents/plugins/marketplace.json +0 -0
  79. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/README.md +0 -0
  80. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/active.md +0 -0
  81. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/branch-review.md +0 -0
  82. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/changelog.md +0 -0
  83. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/check.md +0 -0
  84. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/doc-review.md +0 -0
  85. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  86. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  87. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/known-issues.md +0 -0
  88. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/live-verify.md +0 -0
  89. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/llm-council.md +0 -0
  90. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/next.md +0 -0
  91. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/plan.md +0 -0
  92. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  93. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/predict.md +0 -0
  94. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/release.md +0 -0
  95. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/scenario.md +0 -0
  96. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/sonar.md +0 -0
  97. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.claude/commands/gflow/status.md +0 -0
  98. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.env.template +0 -0
  99. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitattributes +0 -0
  100. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/CODEOWNERS +0 -0
  101. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  102. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/copilot-instructions.md +0 -0
  103. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/dependabot.yml +0 -0
  104. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/ci.yml +0 -0
  105. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/deps-watch.yml +0 -0
  106. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/external-pr-triage.yml +0 -0
  107. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/governance-advisory.yml +0 -0
  108. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/governance-benchmark.yml +0 -0
  109. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/labels.yml +0 -0
  110. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/main-base-guard.yml +0 -0
  111. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/pages.yml +0 -0
  112. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/release.yml +0 -0
  113. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.github/workflows/selector-probe.yml +0 -0
  114. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitignore +0 -0
  115. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.gitleaks.toml +0 -0
  116. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.pre-commit-config.yaml +0 -0
  117. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/.secrets.baseline +0 -0
  118. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CONFIGURATION.md +0 -0
  119. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/CONTRIBUTING.md +0 -0
  120. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/DISCLAIMER.md +0 -0
  121. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/LICENSE +0 -0
  122. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/RELEASE.md +0 -0
  123. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/ROADMAP.md +0 -0
  124. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/conftest.py +0 -0
  125. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  126. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/deploy/logrotate-pr-triage +0 -0
  127. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docker-compose.yml +0 -0
  128. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ACCOUNT_SAFETY.md +0 -0
  129. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_GUIDE.md +0 -0
  130. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_UI_E2E.md +0 -0
  131. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AGENT_UI_RECON.md +0 -0
  132. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ARCHITECTURE.md +0 -0
  133. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  134. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/AUTHENTICATION.md +0 -0
  135. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CHARACTER_RECON.md +0 -0
  136. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/CONFIGURATION.md +0 -0
  137. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DATA_LAYER.md +0 -0
  138. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEBUGGING.md +0 -0
  139. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEMOS.md +0 -0
  140. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/DEVELOPMENT.md +0 -0
  141. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/E2E_TESTING.md +0 -0
  142. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/EXTERNAL_STORAGE.md +0 -0
  143. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/GITHUB.md +0 -0
  144. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  145. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  146. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/INSTRUCTIONS.md +0 -0
  147. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  148. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  149. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  150. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  151. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  152. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  153. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  154. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  155. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  156. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  157. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  158. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  159. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  160. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  161. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  162. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  163. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  164. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  165. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  166. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  167. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  168. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  169. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  170. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  171. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  172. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  173. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  174. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  175. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  176. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  177. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  178. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  179. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  180. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  181. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  182. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  183. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  184. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  185. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  186. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  187. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  188. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  189. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  190. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  191. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  192. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  193. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  194. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  195. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  196. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  197. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  198. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  199. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  200. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  201. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  202. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  203. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  204. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  205. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  206. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  207. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  208. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  209. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  210. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  211. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  212. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  213. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MEDIA_LIBRARY.md +0 -0
  214. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/MOVIE.md +0 -0
  215. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/PROMPT_EXPANSION.md +0 -0
  216. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  217. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/SECURITY.md +0 -0
  218. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/TOOLS.md +0 -0
  219. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/USER_GUIDE.md +0 -0
  220. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/demo-split-pf.gif +0 -0
  221. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/example-run.gif +0 -0
  222. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/assets/examples.webp +0 -0
  223. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/medium_tutorial.md +0 -0
  224. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/schemas/movie-handoff.schema.json +0 -0
  225. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/sonar-cleanup-tracker.md +0 -0
  226. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  227. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  228. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  229. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  230. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  231. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  232. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  233. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  234. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  235. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  236. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  237. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  238. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  239. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  240. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  241. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  242. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  243. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  244. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  245. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  246. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  247. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  248. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  249. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  250. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  251. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  252. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  253. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  254. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  255. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  256. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  257. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  258. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  259. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  260. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  261. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  262. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  263. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  264. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  265. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  266. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  267. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  268. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  269. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  270. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  271. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  272. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  273. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  274. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  275. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  276. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  277. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  278. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  279. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  280. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  281. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  282. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  283. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  284. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  285. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/eval/pr_triage_eval.py +0 -0
  286. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/eval/pr_triage_fixtures.json +0 -0
  287. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/README.md +0 -0
  288. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/batch_from_config.py +0 -0
  289. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/multi_prompt_t2i.py +0 -0
  290. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/sample_config.json +0 -0
  291. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/sample_prompts.txt +0 -0
  292. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/single_image_t2i.py +0 -0
  293. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/examples/workflow_chain.py +0 -0
  294. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/README.md +0 -0
  295. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/01_upload_image.json +0 -0
  296. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  297. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  298. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/04_archive_workflow.json +0 -0
  299. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/05_createProject.json +0 -0
  300. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/06_batchGenerateImages.json +0 -0
  301. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  302. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  303. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  304. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  305. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  306. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/12_create_scene.json +0 -0
  307. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  308. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/14_get_scene_workflows.json +0 -0
  309. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  310. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/entrypoint.sh +0 -0
  311. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  312. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  313. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/canary/register_task.ps1 +0 -0
  314. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/canary/run_canary.py +0 -0
  315. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_doc_links.py +0 -0
  316. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_materiality.py +0 -0
  317. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_release_artifacts.py +0 -0
  318. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_repo_hygiene.py +0 -0
  319. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_test_count.py +0 -0
  320. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/check_website_docs_pii.py +0 -0
  321. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/ci/generate_website_docs.py +0 -0
  322. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_editor.py +0 -0
  323. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_gen_settings.py +0 -0
  324. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/debug_settings.py +0 -0
  325. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/_recording_client.py +0 -0
  326. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/_spike_common.py +0 -0
  327. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/active_plan.py +0 -0
  328. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  329. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  330. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  331. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  332. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  333. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  334. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  335. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_locale_invariants.py +0 -0
  336. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  337. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_project_listing.py +0 -0
  338. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  339. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  340. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  341. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  342. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/character_create_spike.py +0 -0
  343. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/character_create_spike_v2.py +0 -0
  344. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/dump_character_selectors.js +0 -0
  345. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/incident_bundle_quality.py +0 -0
  346. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  347. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  348. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  349. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/make_project.py +0 -0
  350. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/materiality_backtest.py +0 -0
  351. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/measure_locale_probe.py +0 -0
  352. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/patch_character.py +0 -0
  353. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/README.md +0 -0
  354. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/harness.py +0 -0
  355. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/skillopt/tasks.json +0 -0
  356. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/sonar-local-scan.sh +0 -0
  357. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  358. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_changelog_capture.py +0 -0
  359. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  360. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  361. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  362. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  363. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  364. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  365. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  366. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_incident_live.py +0 -0
  367. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  368. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  369. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  370. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  371. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  372. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_locale_poison.py +0 -0
  373. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  374. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  375. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_model_inventory.py +0 -0
  376. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  377. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  378. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  379. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  380. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  381. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  382. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_patch_entity.py +0 -0
  383. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_patchright.py +0 -0
  384. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  385. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  386. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_language_agnostic.py +0 -0
  387. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  388. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/dev/verify_model_attribution.py +0 -0
  389. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/README.md +0 -0
  390. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/capture_flow_traffic.py +0 -0
  391. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  392. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/memory_profile.py +0 -0
  393. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/recaptcha_mint.py +0 -0
  394. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  395. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  396. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  397. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/probe/run_probe.py +0 -0
  398. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/probe/spike_auth_matrix.py +0 -0
  399. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/record_demo.ps1 +0 -0
  400. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_image.py +0 -0
  401. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_video_editor.py +0 -0
  402. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/smoke_worker_style.py +0 -0
  403. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/spike_waf_camoufox.py +0 -0
  404. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/scripts/verify_chrome_auth_viability.py +0 -0
  405. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/README.md +0 -0
  406. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/changelog/SKILL.md +0 -0
  407. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/gflow-cli/SKILL.md +0 -0
  408. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/known-issues/SKILL.md +0 -0
  409. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/llm-council/SKILL.md +0 -0
  410. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/release/SKILL.md +0 -0
  411. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/sonar/SKILL.md +0 -0
  412. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/skills/status/SKILL.md +0 -0
  413. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/sonar-project.properties +0 -0
  414. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/__main__.py +0 -0
  415. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/__init__.py +0 -0
  416. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_engine.py +0 -0
  417. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_retry.py +0 -0
  418. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  419. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/character.py +0 -0
  420. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/dto.py +0 -0
  421. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/image.py +0 -0
  422. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/image_upscale.py +0 -0
  423. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/recaptcha.py +0 -0
  424. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/scene.py +0 -0
  425. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  426. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/_common.py +0 -0
  427. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  428. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/base.py +0 -0
  429. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  430. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  431. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  432. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  433. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  434. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  435. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  436. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  437. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  438. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  439. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  440. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/__init__.py +0 -0
  441. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/base.py +0 -0
  442. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/cookies.py +0 -0
  443. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/factory.py +0 -0
  444. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  445. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  446. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/strategies.py +0 -0
  447. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/auth/verification.py +0 -0
  448. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/browser_manager.py +0 -0
  449. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/chain_manifest.py +0 -0
  450. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli.py +0 -0
  451. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_character.py +0 -0
  452. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_data.py +0 -0
  453. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_doctor.py +0 -0
  454. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_image.py +0 -0
  455. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_instructions.py +0 -0
  456. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_models.py +0 -0
  457. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_movie.py +0 -0
  458. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_project.py +0 -0
  459. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_run.py +0 -0
  460. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_scene.py +0 -0
  461. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/cli_tools.py +0 -0
  462. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/composition.py +0 -0
  463. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/config.py +0 -0
  464. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/__init__.py +0 -0
  465. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/chain_repo.py +0 -0
  466. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  467. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  468. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  469. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  470. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  471. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  472. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  473. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  474. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  475. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  476. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/queries.py +0 -0
  477. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/repository.py +0 -0
  478. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/data/store.py +0 -0
  479. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/diagnostics.py +0 -0
  480. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/exceptions.py +0 -0
  481. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/file_integrity.py +0 -0
  482. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  483. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  484. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  485. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  486. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/image_batch.py +0 -0
  487. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/json_output.py +0 -0
  488. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/__init__.py +0 -0
  489. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/prompts.py +0 -0
  490. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/resources.py +0 -0
  491. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/server.py +0 -0
  492. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/setup.py +0 -0
  493. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  494. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/media.py +0 -0
  495. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/movie_manifest.py +0 -0
  496. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/observability.py +0 -0
  497. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/paths.py +0 -0
  498. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/profile_lease.py +0 -0
  499. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/profile_store.py +0 -0
  500. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/redaction.py +0 -0
  501. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/__init__.py +0 -0
  502. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  503. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/character_create.py +0 -0
  504. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/doctor.py +0 -0
  505. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/services/mentions.py +0 -0
  506. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/storage.py +0 -0
  507. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/__init__.py +0 -0
  508. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/banned.py +0 -0
  509. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  510. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  511. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  512. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  513. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/expander.py +0 -0
  514. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/invocation.py +0 -0
  515. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/loader.py +0 -0
  516. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/registry.py +0 -0
  517. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/runtime.py +0 -0
  518. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/tools/spec.py +0 -0
  519. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/ui/app.py +0 -0
  520. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/ui/server.py +0 -0
  521. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/update_check.py +0 -0
  522. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/winsec.py +0 -0
  523. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/codec.py +0 -0
  524. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/daemon.py +0 -0
  525. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/src/gflow_cli/worker/queue.py +0 -0
  526. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tasks/lessons.md +0 -0
  527. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch.json +0 -0
  528. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch.tsv +0 -0
  529. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/test_assets/sample_batch_invalid.tsv +0 -0
  530. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/__init__.py +0 -0
  531. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/__init__.py +0 -0
  532. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/fixtures/character_gen_response.json +0 -0
  533. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  534. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  535. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  536. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_bearer_redaction.py +0 -0
  537. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_character.py +0 -0
  538. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client.py +0 -0
  539. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_character.py +0 -0
  540. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_delete_characters.py +0 -0
  541. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_errors.py +0 -0
  542. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_generate_character.py +0 -0
  543. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_image.py +0 -0
  544. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_incidents.py +0 -0
  545. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_launch_kwargs.py +0 -0
  546. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_locale_cache.py +0 -0
  547. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_patch_entity.py +0 -0
  548. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_scene.py +0 -0
  549. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_client_upscale.py +0 -0
  550. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_concurrency.py +0 -0
  551. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_dto.py +0 -0
  552. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_engine.py +0 -0
  553. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image.py +0 -0
  554. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image_dto.py +0 -0
  555. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_image_upscale.py +0 -0
  556. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  557. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_recaptcha.py +0 -0
  558. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_retry.py +0 -0
  559. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes.py +0 -0
  560. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_character.py +0 -0
  561. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_locale.py +0 -0
  562. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_routes_scene.py +0 -0
  563. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_sapisidhash_helper.py +0 -0
  564. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_scene_models.py +0 -0
  565. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/test_video_request.py +0 -0
  566. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/__init__.py +0 -0
  567. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/conftest.py +0 -0
  568. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/__init__.py +0 -0
  569. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  570. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_classic.py +0 -0
  571. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_factory.py +0 -0
  572. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  573. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  574. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_base.py +0 -0
  575. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_bearer.py +0 -0
  576. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_common.py +0 -0
  577. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  578. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_factory.py +0 -0
  579. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_fingerprint.py +0 -0
  580. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_locale_navigation.py +0 -0
  581. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_mode_control.py +0 -0
  582. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  583. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_navigation_settled.py +0 -0
  584. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  585. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_policy_400.py +0 -0
  586. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_sapisidhash.py +0 -0
  587. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  588. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_transport_timeout.py +0 -0
  589. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation.py +0 -0
  590. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  591. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  592. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  593. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  594. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/strategies/test_factory.py +0 -0
  595. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/strategies/test_strategies.py +0 -0
  596. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_cookies.py +0 -0
  597. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_real_chrome.py +0 -0
  598. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_verification.py +0 -0
  599. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/auth/test_windows_acl.py +0 -0
  600. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/__init__.py +0 -0
  601. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_auth_status.py +0 -0
  602. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_auth_list.py +0 -0
  603. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_character.py +0 -0
  604. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_character_create.py +0 -0
  605. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data.py +0 -0
  606. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_errors.py +0 -0
  607. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  608. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_data_sync.py +0 -0
  609. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_doctor.py +0 -0
  610. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image.py +0 -0
  611. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  612. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  613. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_upscale.py +0 -0
  614. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  615. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_instructions.py +0 -0
  616. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_models.py +0 -0
  617. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_movie.py +0 -0
  618. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_run.py +0 -0
  619. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_scene.py +0 -0
  620. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_tools.py +0 -0
  621. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_cli_video_chain.py +0 -0
  622. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_error_handling.py +0 -0
  623. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_failure_funnel.py +0 -0
  624. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_helpers.py +0 -0
  625. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_incident_output.py +0 -0
  626. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_movie_manifest.py +0 -0
  627. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  628. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_predictable_output.py +0 -0
  629. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_settings_validation.py +0 -0
  630. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  631. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_character.py +0 -0
  632. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_compose_prompt.py +0 -0
  633. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_handoff.py +0 -0
  634. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_style_variants.py +0 -0
  635. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/composition/test_style_variants_e2e.py +0 -0
  636. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/__init__.py +0 -0
  637. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_chain_repo.py +0 -0
  638. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_failure_recording.py +0 -0
  639. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_find_incomplete_character.py +0 -0
  640. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_models.py +0 -0
  641. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_null_columns_stay_null.py +0 -0
  642. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_packaging.py +0 -0
  643. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_recorder_character.py +0 -0
  644. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_repository.py +0 -0
  645. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_scene_persistence.py +0 -0
  646. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_settings_and_errors.py +0 -0
  647. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_store.py +0 -0
  648. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/data/test_store_migrations.py +0 -0
  649. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/dev/test_recording_client.py +0 -0
  650. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/__init__.py +0 -0
  651. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/conftest.py +0 -0
  652. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  653. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  654. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  655. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  656. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  657. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_chain_e2e.py +0 -0
  658. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_character_create_e2e.py +0 -0
  659. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  660. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  661. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_daemon_e2e.py +0 -0
  662. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  663. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  664. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  665. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  666. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  667. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  668. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  669. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  670. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  671. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_json_output_e2e.py +0 -0
  672. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  673. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  674. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  675. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  676. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_scene_compose_live.py +0 -0
  677. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  678. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_tools_e2e.py +0 -0
  679. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_transports_e2e.py +0 -0
  680. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  681. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  682. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  683. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/__init__.py +0 -0
  684. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/asset_tagging.feature +0 -0
  685. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/auth.feature +0 -0
  686. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/auth_login.feature +0 -0
  687. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/character_create.feature +0 -0
  688. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/character_read.feature +0 -0
  689. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/conftest.py +0 -0
  690. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/duration_tab_drift.feature +0 -0
  691. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/entity_provenance.feature +0 -0
  692. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image.feature +0 -0
  693. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image_batch_references.feature +0 -0
  694. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/image_upscale.feature +0 -0
  695. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/incident_diagnostics.feature +0 -0
  696. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/instructions.feature +0 -0
  697. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/locale_picker_include.feature +0 -0
  698. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/mcp_tasks.feature +0 -0
  699. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/media_picker_tiers.feature +0 -0
  700. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/output_hardening.feature +0 -0
  701. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_asset_tagging_steps.py +0 -0
  702. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_auth_login_steps.py +0 -0
  703. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_auth_steps.py +0 -0
  704. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_character_create_steps.py +0 -0
  705. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_character_read_steps.py +0 -0
  706. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_image_steps.py +0 -0
  707. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_image_upscale_steps.py +0 -0
  708. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  709. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_instructions_steps.py +0 -0
  710. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  711. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  712. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  713. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_output_hardening_steps.py +0 -0
  714. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_step_collision_guard.py +0 -0
  715. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  716. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/test_video_chain_steps.py +0 -0
  717. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/video_agent_ui.feature +0 -0
  718. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/features/video_chain.feature +0 -0
  719. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/__init__.py +0 -0
  720. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/changelog_modal_page.html +0 -0
  721. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/doctor_env.py +0 -0
  722. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/flow_model_inventory.json +0 -0
  723. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  724. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/listing_payload.py +0 -0
  725. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/fixtures/seeded_catalog.py +0 -0
  726. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/__init__.py +0 -0
  727. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_grading.py +0 -0
  728. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_model.py +0 -0
  729. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_model_governance.py +0 -0
  730. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_registry.py +0 -0
  731. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/flow_selectors/test_report.py +0 -0
  732. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/__init__.py +0 -0
  733. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_image_manifest.py +0 -0
  734. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_jitter_config.py +0 -0
  735. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/image_batch/test_observability_events.py +0 -0
  736. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/__init__.py +0 -0
  737. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/conftest.py +0 -0
  738. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/constants.py +0 -0
  739. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_expander_gateway.py +0 -0
  740. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_storage_gcs.py +0 -0
  741. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/integration/test_storage_s3.py +0 -0
  742. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/__init__.py +0 -0
  743. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/conftest.py +0 -0
  744. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_auth_status_tool.py +0 -0
  745. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_error_funnel.py +0 -0
  746. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_http_transport.py +0 -0
  747. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_known_issues_resource.py +0 -0
  748. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_no_spend.py +0 -0
  749. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  750. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_resources.py +0 -0
  751. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_server.py +0 -0
  752. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_setup.py +0 -0
  753. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_stdio_transport.py +0 -0
  754. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tasks_extension.py +0 -0
  755. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_helpers.py +0 -0
  756. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_instructions.py +0 -0
  757. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/mcp/test_tools_wired.py +0 -0
  758. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  759. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_canary_classify.py +0 -0
  760. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_canary_reexec.py +0 -0
  761. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  762. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_materiality.py +0 -0
  763. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  764. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  765. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_test_count.py +0 -0
  766. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  767. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_codex_plugin.py +0 -0
  768. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_generate_website_docs.py +0 -0
  769. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  770. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_materiality_backtest.py +0 -0
  771. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/scripts/test_workflow_hardening.py +0 -0
  772. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/__init__.py +0 -0
  773. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_catalog_sync.py +0 -0
  774. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_create_redaction.py +0 -0
  775. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_create_saga.py +0 -0
  776. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  777. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_doctor.py +0 -0
  778. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_media_attribution.py +0 -0
  779. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_observability.py +0 -0
  780. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_parse.py +0 -0
  781. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_mentions_resolve.py +0 -0
  782. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/services/test_resolve_and_apply.py +0 -0
  783. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/__init__.py +0 -0
  784. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  785. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/smoke/test_real_flow.py +0 -0
  786. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_auth.py +0 -0
  787. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_browser_manager.py +0 -0
  788. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_chain.py +0 -0
  789. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_chain_manifest.py +0 -0
  790. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_cli_data.py +0 -0
  791. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_cli_project.py +0 -0
  792. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_config.py +0 -0
  793. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_conftest_isolation.py +0 -0
  794. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_data_queries.py +0 -0
  795. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_bundle.py +0 -0
  796. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_events.py +0 -0
  797. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_journal.py +0 -0
  798. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_recorder.py +0 -0
  799. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_retention.py +0 -0
  800. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_diagnostics_sanitize.py +0 -0
  801. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_duration_tab_drift.py +0 -0
  802. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_entity_provenance.py +0 -0
  803. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_errors.py +0 -0
  804. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_errors_classification.py +0 -0
  805. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_image_batch_references.py +0 -0
  806. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_incident_generation_requests.py +0 -0
  807. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_json_output.py +0 -0
  808. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_marker_registry.py +0 -0
  809. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_media.py +0 -0
  810. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_observability.py +0 -0
  811. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_overlay_banner_dismissal.py +0 -0
  812. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_paths.py +0 -0
  813. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_playwright_pin.py +0 -0
  814. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_lease.py +0 -0
  815. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_lease_subprocess.py +0 -0
  816. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_store.py +0 -0
  817. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_profile_store_locale.py +0 -0
  818. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_project_list_urls.py +0 -0
  819. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_self_documenting_errors.py +0 -0
  820. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_smoke.py +0 -0
  821. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/test_update_check.py +0 -0
  822. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/__init__.py +0 -0
  823. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_banned.py +0 -0
  824. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_expander.py +0 -0
  825. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_invocation.py +0 -0
  826. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_loader.py +0 -0
  827. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_registry.py +0 -0
  828. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_runtime.py +0 -0
  829. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/tools/test_spec.py +0 -0
  830. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/ui/test_app.py +0 -0
  831. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_codec.py +0 -0
  832. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_daemon.py +0 -0
  833. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  834. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue.py +0 -0
  835. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue_multiprocess.py +0 -0
  836. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/tests/worker/test_queue_reconciliation.py +0 -0
  837. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  838. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/ARCHITECTURE.md +0 -0
  839. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/AUTHENTICATION.md +0 -0
  840. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/CONFIGURATION.md +0 -0
  841. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DATA_LAYER.md +0 -0
  842. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DEBUGGING.md +0 -0
  843. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/DEVELOPMENT.md +0 -0
  844. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/E2E_TESTING.md +0 -0
  845. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  846. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/INSTRUCTIONS.md +0 -0
  847. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  848. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/MOVIE.md +0 -0
  849. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  850. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/SECURITY.md +0 -0
  851. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/TOOLS.md +0 -0
  852. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/USER_GUIDE.md +0 -0
  853. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/agents.md +0 -0
  854. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/index.md +0 -0
  855. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/installation.md +0 -0
  856. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/onboarding-mockup.html +0 -0
  857. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/onboarding.md +0 -0
  858. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/docs/stylesheets/extra.css +0 -0
  859. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/mkdocs.yml +0 -0
  860. {gflow_cli-0.62.1 → gflow_cli-0.64.0}/website/requirements.in +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.62.1",
3
+ "version": "0.64.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -0,0 +1,2 @@
1
+ # https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository
2
+ github: ffroliva
@@ -47,6 +47,6 @@ jobs:
47
47
  retention-days: 5
48
48
 
49
49
  - name: Upload to code-scanning
50
- uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
50
+ uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
51
51
  with:
52
52
  sarif_file: results.sarif
@@ -4,12 +4,47 @@
4
4
 
5
5
  Supported tools that auto-discover this file: Cursor, Codex, Aider, Antigravity (`agy`), Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Claude Code reads [CLAUDE.md](CLAUDE.md), which cross-references this file.
6
6
 
7
+ ## Skill Routing — the default workflow, not a menu
8
+
9
+ **The `/gflow:` skills ARE this project's development lifecycle.** They are not
10
+ optional tooling you may reach for; they are how work is done here. If a row below
11
+ matches your situation, load that skill **before acting** — before exploring the
12
+ codebase, before answering, before editing. A skill loaded after the work is a skill
13
+ that did not run.
14
+
15
+ | If you are about to… | Load first | Non-negotiable because |
16
+ |---|---|---|
17
+ | Touch a GitHub issue | `/gflow:issue-assessment <N>` | Read-only triage precedes any fix; classification changes what "fixing" means |
18
+ | Propose a transport, auth, selector, or schema change | `/gflow:predict <proposal>` | Five adversarial personas return GO / CAUTION / STOP before code exists |
19
+ | Start a feature | `/gflow:scenario` → `/gflow:plan` | Edge cases before tasks; tasks before code |
20
+ | Resume work / ask "where are we?" | `/gflow:status` | The current plan's next unchecked task is the answer, not your guess |
21
+ | Commit **anything** | `/gflow:check` | It is the exact CI gate; skipping it is how a format failure shipped past an 8-agent council (PR #269) |
22
+ | Open or review a PR | `/gflow:pr-council-review <N>` (or `/gflow:branch-review`) | Standing-authorized. Run it — do not ask permission first |
23
+ | Claim a generation feature works | `/gflow:live-verify` | Offline-green is never done-done on a generation path |
24
+ | Cut a release | `/gflow:release` | It hard-gates on changelog → check → live-verify → doc-review; each is a STOP |
25
+ | Audit docs before shipping | `/gflow:doc-review` | Catches same-release errors a read-through cannot |
26
+ | See a red SonarCloud check | `/gflow:sonar <N>` | The gate measures *new* code; the fix is rarely where you would look |
27
+ | Touch auth or reCAPTCHA | `/gflow:known-issues` | Known-broken surfaces have documented workarounds; rediscovering them costs days |
28
+
29
+ **Canonical bodies live in `skills/<name>/SKILL.md`** — plain Markdown, agent-agnostic
30
+ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code reads.
31
+ `.claude/commands/gflow/*.md` are thin Claude-Code wrappers that point at them.
32
+
33
+ > **This table exists because routing by memory failed.** On 2026-09-01 an agent worked
34
+ > a full session — recovering two interrupted sessions, merging five PRs — without ever
35
+ > loading this file, because `CLAUDE.md` only *asked* it to. It reached step 10 of a
36
+ > release before meeting the pipeline's own doc-review gate, and the required
37
+ > `LIVE_VERIFICATION_v0.63.0.md` had not been written despite the feature having been
38
+ > live-verified. `CLAUDE.md` now `@`-imports this file, so it is always in context. The
39
+ > table is the other half: being loaded is useless if the mapping from situation to skill
40
+ > is left to recall.
41
+
7
42
  ## Project at a glance
8
43
 
9
44
  - Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
10
45
  - Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
11
- - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
- - Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
46
+ - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `cli_doctor.py`, `composition.py`, `config.py`, `errors.py`, `file_integrity.py`, `flow_selectors/`, `update_check.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
47
+ - Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain/extend — `extend` continues an existing clip past Flow's 8s ceiling, server-seeded from the source so the join is continuous; no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
13
48
  - Works with any Google account that has Flow access. All generations bill against the user's own Google account.
14
49
 
15
50
  ## Headed-browser dependency (architectural reality)
@@ -40,13 +75,21 @@ $env:PYTHONUTF8=1
40
75
  uv run python scripts/ci/check_repo_hygiene.py
41
76
  uv run python scripts/ci/check_doc_links.py
42
77
  uv run python scripts/ci/check_website_docs_pii.py
78
+ uv run python scripts/ci/generate_website_docs.py --check
43
79
  uv run ruff check src tests
44
80
  uv run ruff format --check src tests
45
81
  uv run pyright src
46
82
  uv run python -m pytest -q --cov=gflow_cli
47
83
  ```
48
84
 
49
- Or invoke the wrapper: `/gflow:check`.
85
+ Or invoke the wrapper: `/gflow:check` — **prefer it.** This list is the mechanical subset;
86
+ the skill additionally carries the **step 1b surface blast-radius sweep** (MCP↔CLI parity and
87
+ the five other mirror axes), which no command here can check and no CI gate can see.
88
+
89
+ > **Do not trim this list again.** It previously omitted
90
+ > `generate_website_docs.py --check`, so an agent following AGENTS.md instead of the skill
91
+ > shipped a stale `website/docs/` mirror to a green local run and a red CI (#626 session,
92
+ > 2026-09-02). Two lists that disagree means the shorter one is silently wrong.
50
93
 
51
94
  - Use `pytest -m "not live and not e2e and not smoke"` locally; full suite OOMs on small dev machines. Scope to changed dirs; trust CI for the full sweep.
52
95
  - TDD is non-negotiable. Coverage floor: 80% overall.
@@ -58,10 +101,30 @@ Or invoke the wrapper: `/gflow:check`.
58
101
 
59
102
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
60
103
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
61
- - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–31, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
104
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–35, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
62
105
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
63
106
  - **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
64
107
  - **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
108
+
109
+ **That CI gate is command-level only** — it fires on a new *leaf*, and stays green while an
110
+ option goes unmirrored, a queued-payload key goes unread, or a tool docstring asserts a
111
+ restriction the CLI no longer has. So MCP is a responsibility of **every phase**, not a
112
+ post-hoc checklist item. Each skill owns its slice:
113
+
114
+ | Phase | Skill | Its MCP duty |
115
+ |---|---|---|
116
+ | 1 Triage | `issue-assessment` | Name which surfaces reproduce it — CLI, MCP, or both |
117
+ | 2 Pre-impl | `predict` | Persona 4 scopes the MCP blast radius before code exists |
118
+ | 3 BDD | `scenario` | **D13** — enumerate the MCP twin of every edge case |
119
+ | 4 Plan | `plan` | **Task 6 is not optional when task 5 exists** |
120
+ | 5 Review | `pr-council-review` | **D15** — surface parity, incl. the payload-key round trip |
121
+ | 7 Check | `check` | **Step 1b** — the canonical six mirror axes |
122
+ | 8 Live-verify | `live-verify` | The MCP queued path is *different code*; decide if it needs its own run |
123
+ | 10 Release | `doc-review` | Grade `docs/MCP.md` + tool docstrings; a **false** claim blocks |
124
+
125
+ The six mirror axes are written out **once**, in [`skills/check/SKILL.md`](skills/check/SKILL.md)
126
+ step 1b. Every other skill cites them. Do not copy the table around — a duplicated checklist
127
+ drifts, which is the exact failure this row exists to prevent.
65
128
  - **Locale-Invariance Discipline for UI Automation**: **Never** write text-label string selectors (`has-text(...)` or multi-locale text lists) for DOM elements, overlays, announcements, menus, tabs, or buttons. All DOM selectors in `src/gflow_cli/api/transports/` must be 100% language-agnostic, anchoring exclusively on structural properties: **Tier 1 Anchors** — e.g. hyperlinks (`a[href*='changelog']`), icon ligatures (`button:has(i.google-symbols:text('close'))`), ARIA roles (`[role='banner']`, `button[data-dismiss]`), and hierarchical DOM relationships (`[role='dialog']:has(a[href*='changelog']) button`). Relying on translated display labels or maintaining multi-locale text cascades is strictly forbidden as an anti-pattern hack.
66
129
 
67
130
  ## PR instructions
@@ -97,7 +160,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
97
160
  | 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
98
161
  | 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
99
162
  | 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
100
- | 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
163
+ | 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish. **Internally gates on `/gflow:changelog` → `/gflow:check` → `/gflow:live-verify` → `/gflow:doc-review`; a failure at any of them is a STOP, not a warning.** | Shipped release & back-merge |
101
164
 
102
165
  ### Pipeline Continuation Mandate
103
166
 
@@ -7,6 +7,128 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.64.0] — 2026-09-02
11
+
12
+ ### Added
13
+
14
+ - **`gflow video i2v --model omni-flash --end-frame` now works** ([#626](https://github.com/ffroliva/gflow-cli/issues/626)).
15
+ Google shipped first-and-last-frame generation for Omni 1.1 Flash, so the
16
+ guard that rejected that combination with exit 17 is gone:
17
+
18
+ ```bash
19
+ gflow video i2v ./start.png "she turns toward the window" \
20
+ --model omni-flash --end-frame ./end.png --duration 10
21
+ ```
22
+
23
+ omni-flash is the only model that also exposes `--duration`, so this is the
24
+ one route to a 10-second first+last interpolation.
25
+
26
+ ### Changed
27
+
28
+ - **i2v end-frame safety moved from a static table to a post-submit route
29
+ check.** gflow used to decide which models could carry an end frame from a
30
+ hardcoded capability list, which silently went stale when Google shipped the
31
+ feature. It now verifies the route Flow *actually* used: a run that carried an
32
+ end frame but came back on `batchAsyncGenerateVideoStartImage` — Flow dropping
33
+ the frame at submit and billing a clip that was never interpolated — fails
34
+ with `WireFormatError` instead of being reported as a success. This also
35
+ catches a partial or staged rollback on any account, which the old table
36
+ could not.
37
+
38
+ **Breaking for scripts** that branched on exit 17 for `omni-flash` +
39
+ `--end-frame`: that combination now succeeds. Exit 17 is unchanged for
40
+ `gflow video chain --model omni-flash`, which is still rejected (chain-scale
41
+ seeded i2v remains unverified).
42
+
43
+ - **MCP↔CLI parity is now a duty of every pipeline phase** (contributor-facing).
44
+ `tests/mcp/test_cli_parity.py` is command-level: it fires when a new CLI *leaf*
45
+ lacks a mapped MCP tool, and stays green while an option goes unmirrored, a
46
+ queued-payload key goes unread, or a tool docstring asserts a restriction the
47
+ CLI no longer has. #626 shipped exactly that third case — `mcp/tools.py` and
48
+ `docs/MCP.md` kept telling agents `omni_flash` was rejected for i2v-with-frames
49
+ through a fully green pipeline. Each skill now owns a slice: `issue-assessment`
50
+ names affected surfaces, `predict` scopes the MCP blast radius, `scenario` adds
51
+ **D13**, `plan` makes the MCP mirror **task 6** (not optional when task 5
52
+ exists), `pr-council-review` adds **D15**, `check` adds **step 1b** (the
53
+ canonical six mirror axes), `live-verify` treats the MCP queued path as
54
+ separate code, and `doc-review` grades a *false* MCP claim as release-blocking.
55
+ Automating the mechanically checkable part is tracked in
56
+ [#628](https://github.com/ffroliva/gflow-cli/issues/628).
57
+
58
+ ### Fixed
59
+
60
+ - **`AGENTS.md`'s Impeccable Routine was missing `generate_website_docs.py --check`**,
61
+ which `skills/check` already ran. Following the shorter list produced a green
62
+ local run against a stale `website/docs/` mirror and a red CI. The two lists now
63
+ agree.
64
+
65
+ ## [0.63.0] — 2026-09-01
66
+
67
+ ### Added
68
+
69
+ - **`gflow video extend` — continue a clip past Flow's 8-second ceiling.** Veo's
70
+ extend route generates a new 8s segment seeded server-side from the source
71
+ clip, so motion and audio carry across the join instead of restarting from a
72
+ still (which is what `video chain` does, and why it needs a fade guard). Pass
73
+ one prompt per segment, or `--segments N` to reuse the last one:
74
+
75
+ ```bash
76
+ gflow video extend <media-id> "the wave recedes" --project <id>
77
+ gflow video extend <media-id> "drifts out to sea" --project <id> -n 4 -o long.mp4
78
+ ```
79
+
80
+ The result is a Flow Scene; `-o` renders it to a single mp4 through the
81
+ existing credit-free server-side concat.
82
+
83
+ > Known limitation, found in live verification: a segment carries ~7s of real
84
+ > content though Flow advertises and bills 8s, so each internal seam of a
85
+ > multi-segment render is preceded by ~1s of frozen frame and silence. Single
86
+ > segments are unaffected. Details and the open questions are in
87
+ > [KNOWN_ISSUES](KNOWN_ISSUES.md).
88
+
89
+ - **The model key is resolved per run, never hardcoded.** Flow's extend family
90
+ is tier-gated — `_ultra` variants are Advanced-only and read `UNAVAILABLE`
91
+ elsewhere — so the key comes from the account's own capability listing,
92
+ picking the cheapest orderable model exactly as Flow's own UI does. A pinned
93
+ key would 403 forever on the wrong tier.
94
+ - **Costs are shown before anything is submitted**, and a pre-flight balance
95
+ check refuses a run the balance cannot finish. `--dry-run` prints the plan
96
+ without opening a browser.
97
+ - **Serial by construction, and paced.** Segments submit one at a time with a
98
+ non-zero default jitter (`GFLOW_CLI_JITTER_RANGE`). A refusal aborts with
99
+ completed segments preserved and is never auto-retried.
100
+ - `1:1` is refused up front — Flow publishes no square extend model.
101
+
102
+ ### Fixed
103
+
104
+ - **Ctrl+C during a billed run said nothing.** `run_with_handlers` exited 130
105
+ silently, so a user who interrupted a multi-segment run could not tell whether
106
+ anything had been charged or how to resume. It now reports credits spent,
107
+ segments completed and the resume handle. Fixed at the shared boundary, so
108
+ `video chain` and `movie run` gain it too.
109
+ - **`sessionId` was not redacted.** `redact_metadata` covered `token` and
110
+ `recaptchaToken` but not `sessionId`, which the extend request carries. Not a
111
+ credential, but account-correlatable, and it would otherwise reach any logged
112
+ request body or diagnostics bundle verbatim.
113
+
114
+
115
+ - **The offline test suite could `git checkout develop` in the developer's own
116
+ clone ([#605](https://github.com/ffroliva/gflow-cli/issues/605)).** git's
117
+ repository discovery walks *up* from `cwd`, and `--basetemp=tmp/pytest` puts
118
+ every `tmp_path` inside this repository, so an autopilot test whose temp `.git`
119
+ went missing had its `git checkout develop` silently resolved against the real
120
+ working tree — moving the developer off their branch mid-run (reflog-confirmed,
121
+ Windows-only, intermittent). Two independent guards now close it:
122
+ `scripts/autopilot/pr_triage_autopilot.py` pins every git call with
123
+ `--git-dir`/`--work-tree`, so a `repo_dir` that is not a repository fails loudly,
124
+ raising with git's own `fatal: not a git repository` text rather than
125
+ retargeting whatever clone encloses it (this also
126
+ hardens the VPS triage path against a mistyped `--repo-dir`), and
127
+ `tests/conftest.py` sets `GIT_CEILING_DIRECTORIES` to pytest's basetemp so no
128
+ test can walk out of its temp dir into this repo. What removed the temp `.git`
129
+ is still unexplained — it now surfaces as a plain "not a git repository" rather
130
+ than a silent branch switch.
131
+
10
132
  ## [0.62.1] — 2026-08-30
11
133
 
12
134
  ### Fixed
@@ -3448,7 +3570,9 @@ shell-script template that branches on these codes.
3448
3570
 
3449
3571
  First skeleton. Not functional end-to-end yet.
3450
3572
 
3451
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...HEAD
3573
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...HEAD
3574
+ [0.64.0]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...v0.64.0
3575
+ [0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
3452
3576
  [0.62.1]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...v0.62.1
3453
3577
  [0.62.0]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...v0.62.0
3454
3578
  [0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
@@ -6,11 +6,30 @@
6
6
 
7
7
  `gflow-cli` is an unofficial Python CLI that drives [Google Flow](https://labs.google/fx/tools/flow) (Veo image-to-video, Imagen text-to-image) from the terminal by reverse-engineering Flow's private REST API. See [README.md](README.md) for the user-facing overview.
8
8
 
9
+ ## System rules — loaded, not requested
10
+
11
+ **[AGENTS.md](AGENTS.md) is imported below and is therefore already in context before
12
+ you read this line.** It is the system rule for this project: the `/gflow:` skills are
13
+ the default development lifecycle, and its Skill Routing table says which one to load
14
+ for the situation in front of you. Follow it — it is not advisory, and "I hadn't read
15
+ it yet" is not a reachable state.
16
+
17
+ > **Why an import and not a bullet that says "read AGENTS.md".** That bullet is what
18
+ > used to be here, and it failed exactly as written: an agent that skips it is not
19
+ > corrected by anything, and no gate notices. A session on 2026-09-01 went straight
20
+ > into work without it and reached step 10 of a release before discovering the
21
+ > pipeline's own doc-review and live-verification gates. `@AGENTS.md` removes the
22
+ > choice — the harness resolves the import and injects the file, with no agent
23
+ > cooperation required. Never downgrade this back to prose.
24
+
25
+ @AGENTS.md
26
+
9
27
  ## On every session start
10
28
 
11
- 1. Read **[AGENTS.md](AGENTS.md)** — universal rules every agent must follow.
12
- 2. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and commands.
13
- 3. Pull deeper context on demand:
29
+ 1. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and
30
+ commands. Deliberately *not* imported: at 36 KB it is a lookup table, not a rule set,
31
+ and AGENTS.md points into it. Read it when you need to find a doc.
32
+ 2. Pull deeper context on demand:
14
33
  - Current task / where we left off → `/gflow:status`
15
34
  - Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
16
35
  - Touching auth or reCAPTCHA → `/gflow:known-issues`
@@ -20,8 +39,15 @@
20
39
 
21
40
  ## Claude-Code-specific
22
41
 
23
- - Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`).
24
- - Skills under `skills/` are auto-discoverable; `gflow-cli` ships its own at [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md).
42
+ - Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`). **These
43
+ are the invocable surface** — they appear in the session's skill list and may be called
44
+ with the `Skill` tool as `gflow:<name>`.
45
+ - **`skills/<name>/SKILL.md` are the canonical bodies, and are NOT `Skill`-tool-invocable.**
46
+ They are plain Markdown, agent-agnostic on purpose so Codex/Cursor/Aider can read the
47
+ same file. `Skill(skill="release")` fails with `Unknown skill: release`; each wrapper in
48
+ `.claude/commands/gflow/` says to read its `skills/<name>/SKILL.md` directly, and that is
49
+ the supported path. (This bullet previously claimed they were "auto-discoverable", which
50
+ is false and sends agents into a failing tool call.)
25
51
  - Auto-memory at `~/.claude/projects/C--development-github-gflow-cli/memory/MEMORY.md` carries cross-session feedback and project state.
26
52
  - **Worktrees:** the native `EnterWorktree` tool branches from `origin/main` (the default branch). Feature work integrates via `develop` — after entering a fresh worktree, immediately `git switch -c <type>/<name> origin/develop` and delete the auto-created `worktree-*` branch. On Windows, worktree removal can fail on a file lock (the worktree's `.venv`); `git worktree prune` + manual delete later is fine.
27
53
 
@@ -14,6 +14,58 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
14
14
 
15
15
  ## Open
16
16
 
17
+ ### A Veo extend segment is 7 seconds, not the 8 Flow advertises — so concat pads a frozen second
18
+
19
+ - **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
20
+ - **Discovered:** 2026-09-01, by live verification of the extend feature. Offline tests could not have found it.
21
+
22
+ **What happens.** `gflow video extend ... -n 2 -o out.mp4` produces a file whose
23
+ audio drops to digital silence (−91 dB) for exactly one second before each
24
+ internal seam, over a **frozen video frame**. The seam itself is clean; the dead
25
+ second sits immediately before it.
26
+
27
+ **Measured.** In a 3-clip render (original + 2 extensions), per-second mean volume:
28
+
29
+ ```
30
+ 7s -28.8 8s -26.4 <- original -> extension seam: continuous
31
+ 14s -29.1 15s -75.1 16s -33.9 <- extension -> extension seam: 1s dropout
32
+ ```
33
+
34
+ Finer slices put the silence at 15.00–15.99s exactly. Reproduced independently on
35
+ a second render made days earlier from different prompts (14s −22.4, **15s −70.1**,
36
+ 16s −23.9), so it is systematic, not a one-off.
37
+
38
+ **Root cause.** The extension media is **7.000000 seconds** — both video and audio
39
+ streams, confirmed by `ffprobe` on the downloaded clip. But:
40
+
41
+ - the capability listing advertises `videoLengthSeconds: 8` for
42
+ `veo_3_1_extension_lite`, and
43
+ - `getSceneWorkflows` reports `total_duration=8.0`, `end=8.0` for that clip.
44
+
45
+ `ConcatInput` passes those metadata values through verbatim, so Flow's
46
+ server-side concat stretches a 7s clip into an 8s slot by holding the last frame
47
+ and muting. The final segment escapes it only because the render ends before its
48
+ padding (23.02s for 3 clips, not 24s).
49
+
50
+ **Why it matters more than it looks.** A freeze-hold is the specific failure the
51
+ Compiled Growth parable runbook forbids — *"NEVER pad by freeze-holding a frame —
52
+ reads as 'video stuck'"* — and that pipeline is the named consumer for extend.
53
+ An N-segment chain has N−1 of these.
54
+
55
+ **Not yet established** (do not fix on a guess):
56
+
57
+ - whether 7.0s is constant across extend models, aspects and tiers, or specific
58
+ to `veo_3_1_extension_lite`;
59
+ - whether Flow's own UI renders the same padding (i.e. whether this is our
60
+ concat inputs or Flow's behaviour end-to-end);
61
+ - whether any API field reports the real media duration, which is what a clean
62
+ fix needs — clamping `ConcatInput.end` to a hardcoded 7.0 would be a guess
63
+ dressed as a fix.
64
+
65
+ **Workaround today.** Render without `-o` and trim in post, or accept the
66
+ freeze-hold. Single-segment extends are unaffected.
67
+
68
+
17
69
  ### An out-of-range Playwright silently wedges video generation
18
70
 
19
71
  - **Status:** Mitigated (v0.49.0 — upper-bounded dependency + fail-fast watchdog)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.62.1
3
+ Version: 0.64.0
4
4
  Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
5
5
  Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
6
  Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
58
58
  Requires-Dist: pyright>=1.1.0; extra == 'dev'
59
59
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
60
60
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
61
- Requires-Dist: ruff==0.16.4; extra == 'dev'
61
+ Requires-Dist: ruff==0.16.5; extra == 'dev'
62
62
  Provides-Extra: gcs
63
63
  Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
64
64
  Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
@@ -83,6 +83,7 @@ Description-Content-Type: text/markdown
83
83
  [![Type checked: pyright](https://img.shields.io/badge/type%20checked-pyright-blue.svg)](https://github.com/microsoft/pyright)
84
84
  [![Tests: TDD](https://img.shields.io/badge/tests-TDD-brightgreen.svg)](CONTRIBUTING.md)
85
85
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
86
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=coverage)](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
86
87
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ffroliva/gflow-cli/badge)](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
87
88
 
88
89
  > ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
@@ -97,7 +98,7 @@ Description-Content-Type: text/markdown
97
98
 
98
99
  You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
99
100
 
100
- - **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
101
+ - **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
101
102
  - **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
102
103
  - **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
103
104
  - **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
@@ -199,7 +200,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
199
200
 
200
201
  ## Project status
201
202
 
202
- **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP-SSE) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
203
+ **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
203
204
 
204
205
  Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
205
206
 
@@ -226,4 +227,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
226
227
  [![GitHub repo size](https://img.shields.io/github/repo-size/ffroliva/gflow-cli?cacheSeconds=3600)](https://github.com/ffroliva/gflow-cli)
227
228
  [![PyPI downloads](https://static.pepy.tech/badge/gflow-cli/month)](https://pepy.tech/project/gflow-cli)
228
229
 
230
+ ### Star history
231
+
232
+ <picture>
233
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
234
+ <img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
235
+ </picture>
236
+
229
237
  If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
@@ -716,7 +716,7 @@ Today the CLI writes media to `$GFLOW_CLI_OUTPUT_DIR` on the local filesystem. P
716
716
  | 11 | LF-only line endings via `.gitattributes` | Single repo source of truth; cross-platform contributors don't think about it |
717
717
  | 12 | `Provider` indirection (legacy `providers/`) removed | Superseded by `api.FlowApiClient`. Re-introduce when we add `OfficialVeoProvider` (planned v0.5+) |
718
718
  | 13 | CDP attach / stealth-engine alternatives deferred; **current stealth fix confirmed sufficient 2026-07-09** | Gate met: a 20-gen live baseline through the default stealth stack showed a **0.0% WAF 403 rate**, so the "confirm insufficient before implementing" bar is unmet — CDP-Attach and the Camoufox engine stay parked (Camoufox roadmap closed at Phase 2). Evidence: [superpowers/spikes/2026-07-09-camoufox-waf-403.md](superpowers/spikes/2026-07-09-camoufox-waf-403.md). |
719
- | 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. |
719
+ | 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. **Scope note 2026-08-31:** "401-dead" was measured on `batchAsyncGenerateVideoText` in 2026-05 and has NOT been re-tested. It is not a property of `/v1/video:*` as a family — `batchAsyncGenerateVideoExtendVideo` returned **200** from our own transport with our own minted token on 2026-08-31 ([spike](docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md)). Do not cite this ADR as evidence that a direct-wire video route cannot work; re-measure the specific route. |
720
720
 
721
721
  ---
722
722
 
@@ -12,6 +12,7 @@
12
12
  [![Type checked: pyright](https://img.shields.io/badge/type%20checked-pyright-blue.svg)](https://github.com/microsoft/pyright)
13
13
  [![Tests: TDD](https://img.shields.io/badge/tests-TDD-brightgreen.svg)](CONTRIBUTING.md)
14
14
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
15
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=coverage)](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
15
16
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ffroliva/gflow-cli/badge)](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
16
17
 
17
18
  > ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
@@ -26,7 +27,7 @@
26
27
 
27
28
  You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
28
29
 
29
- - **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
30
+ - **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
30
31
  - **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
31
32
  - **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
32
33
  - **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
@@ -128,7 +129,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
128
129
 
129
130
  ## Project status
130
131
 
131
- **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP-SSE) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
132
+ **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
132
133
 
133
134
  Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
134
135
 
@@ -155,4 +156,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
155
156
  [![GitHub repo size](https://img.shields.io/github/repo-size/ffroliva/gflow-cli?cacheSeconds=3600)](https://github.com/ffroliva/gflow-cli)
156
157
  [![PyPI downloads](https://static.pepy.tech/badge/gflow-cli/month)](https://pepy.tech/project/gflow-cli)
157
158
 
159
+ ### Star history
160
+
161
+ <picture>
162
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
163
+ <img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
164
+ </picture>
165
+
158
166
  If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
@@ -209,7 +209,9 @@ sequenceDiagram
209
209
  > bounds: (1) gflow's `generate_image` clicks "new project" + omits `entityContext` → workflow lands in the
210
210
  > wrong project (`flowWorkflows` PATCH 404'd); (2) a self-assembled direct POST with our own minted reCAPTCHA
211
211
  > token → **HTTP 403** (the reCAPTCHA wall — [[rest-path-capability-matrix]]; body shape matched the real HAR,
212
- > only the token differed). **Decision (§11): drive generation through the character editor UI** (existing
212
+ > only the token differed). **Scope note (2026-08-31): this 403 is specific to `batchGenerateImages`, not to
213
+ > generation in general** — see §"the wall is route-specific" below. **Decision (§11): drive generation
214
+ > through the character editor UI** (existing
213
215
  > project → Personagens → new character → generate) so Flow's JS sets `entityContext` + passes the WAF, and
214
216
  > gflow passive-captures `media[]`/`workflows[]`. The structural ops below stay direct-REST.
215
217
 
@@ -377,9 +379,27 @@ convenience later.
377
379
  self-assembled `batchGenerateImages` POST returned **HTTP 403** (createEntity ✅, reCAPTCHA mint ✅). Our
378
380
  request body shape matched the real successful HAR exactly; the only difference is the reCAPTCHA token —
379
381
  a `TokenMinter` token scores too low / wrong-context vs Flow's native page-JS token. This confirms
380
- [[rest-path-capability-matrix]]: **generation is never browser-free; Bearer fixed the 401, not the reCAPTCHA
381
- wall.** No credit spent (403 before generation). **A retry won't help** — the token can't be made WAF-valid
382
- outside Flow's own JS.
382
+ [[rest-path-capability-matrix]]: ~~**generation is never browser-free**~~ — see the scope correction below;
383
+ **Bearer fixed the 401, not the reCAPTCHA wall.** No credit spent (403 before generation). **A retry won't
384
+ help** — for *this route*, the token can't be made WAF-valid outside Flow's own JS.
385
+
386
+ > #### ⚠️ Scope correction (2026-08-31) — the wall is route-specific, not universal
387
+ >
388
+ > "Generation is never browser-free" was generalised from a single 403 on `batchGenerateImages`. It is not
389
+ > true of every generative route, and reading it as a blanket rule has already cost real time — during the
390
+ > Veo-extend predict council it was cited as a blocking precedent against a path that then worked on the
391
+ > first try.
392
+ >
393
+ > | Route | Self-assembled POST + our minted token | Date |
394
+ > |---|---|---|
395
+ > | `batchGenerateImages` | **403** | 2026-06-02 |
396
+ > | `upsampleImage` | **200** (shipped, live) | — |
397
+ > | `batchAsyncGenerateVideoExtendVideo` | **200** | 2026-08-31 |
398
+ >
399
+ > Two of three generative routes accept a `TokenMinter` token. Treat the wall as a **per-route measurement**,
400
+ > never an inherited assumption — and re-measure before citing it. The `batchGenerateImages` 403 has not been
401
+ > re-tested since 2026-06-02 and may itself be stale.
402
+ > Evidence: [superpowers/spikes/2026-08-31-veo-extend-route-recon.md](superpowers/spikes/2026-08-31-veo-extend-route-recon.md).
383
403
  - **✅ Decision = Option B (UI-driven generation; structural ops stay REST).** Generation (character image
384
404
  create AND video reuse) **must** ride Flow's native UI so Flow's JS issues the WAF-valid request, which
385
405
  gflow passive-captures — identical mechanism to the existing `generate_image`/`generate_video`. Revised
@@ -95,6 +95,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
95
95
  **"How do I feed gflow outputs into ffmpeg / a pipeline?"** → [USER_GUIDE § Journey 11](USER_GUIDE.md#journey-11--wiring-gflow-outputs-into-a-downstream-pipeline)
96
96
  **"How do I chain clips into one continuous video (initial-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
97
97
  **"How do I stitch existing clips into one extended .mp4 (credit-free, no ffmpeg)?"** → [USAGE § `gflow scene`](USAGE.md#gflow-scene)
98
+ **"How do I make one clip longer than Flow's 8-second cap?"** → [USAGE § `gflow video extend`](USAGE.md#gflow-video-extend) (costs credits per segment; a segment carries ~7s of content though Flow bills 8s — see [KNOWN_ISSUES](../KNOWN_ISSUES.md))
98
99
  **"How do I create a reusable character (face + body) I can reuse across generations?"** → [USAGE § `gflow character`](USAGE.md#gflow-character) · design: [CHARACTER](CHARACTER.md)
99
100
  **"Should I use an `@mention`, `--reference-entity`, or `--ref` to tag an asset?"** → [REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md) — saved named identity → `@Name`/`--reference-entity`; one-off image → `--ref`
100
101
  **"How does Flow's media library / picker actually behave (names, tabs, scrolling, listing)?"** → [MEDIA_LIBRARY](MEDIA_LIBRARY.md) — identity = UUID, names are async AI captions; grid is virtualized; full pitfall table
@@ -154,7 +155,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
154
155
  **"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
155
156
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
156
157
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
157
- **What was actually live-verified for the latest release?** → latest: [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)
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)
158
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).
159
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)).
160
161
  **"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)