gflow-cli 0.62.1__tar.gz → 0.63.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 (859) hide show
  1. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.codex-plugin/plugin.json +1 -1
  2. gflow_cli-0.63.0/.github/FUNDING.yml +2 -0
  3. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/scorecard.yml +1 -1
  4. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/AGENTS.md +39 -4
  5. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/CHANGELOG.md +69 -1
  6. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/CLAUDE.md +31 -5
  7. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/KNOWN_ISSUES.md +52 -0
  8. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/PKG-INFO +12 -4
  9. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/PLAN.md +1 -1
  10. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/README.md +10 -2
  11. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/CHARACTER.md +24 -4
  12. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/INDEX.md +2 -1
  13. gflow_cli-0.63.0/docs/LIVE_VERIFICATION_v0.63.0.md +130 -0
  14. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/PROJECT_STATUS.md +36 -20
  15. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/USAGE.md +101 -1
  16. gflow_cli-0.63.0/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +361 -0
  17. gflow_cli-0.63.0/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +261 -0
  18. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/index.html +12 -3
  19. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/llms.txt +1 -1
  20. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/pyproject.toml +3 -3
  21. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/Dockerfile.triage +1 -1
  22. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/package-lock.json +36 -36
  23. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/package.json +1 -1
  24. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/pr_triage_autopilot.py +40 -18
  25. gflow_cli-0.63.0/scripts/dev/spike_extend_model_recon.py +194 -0
  26. gflow_cli-0.63.0/scripts/dev/spike_extend_ourstack_verify.py +210 -0
  27. gflow_cli-0.63.0/scripts/dev/spike_extend_route_capture.py +194 -0
  28. gflow_cli-0.63.0/scripts/dev/spike_extend_submit_capture.py +194 -0
  29. gflow_cli-0.63.0/scripts/dev/spike_extend_ui_recon.py +205 -0
  30. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/issue-resolve/SKILL.md +13 -2
  31. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/__init__.py +1 -1
  32. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/_cli_helpers.py +52 -0
  33. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/client.py +168 -2
  34. gflow_cli-0.63.0/src/gflow_cli/api/extend_chain.py +201 -0
  35. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/routes.py +15 -0
  36. gflow_cli-0.63.0/src/gflow_cli/api/video_extend.py +313 -0
  37. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_video.py +429 -1
  38. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/models.py +1 -0
  39. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/recorder.py +58 -0
  40. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/redaction.py +5 -1
  41. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/errors.py +35 -0
  42. gflow_cli-0.63.0/tests/api/fixtures/project_initial_data_extend_models.json +2471 -0
  43. gflow_cli-0.63.0/tests/api/test_client_extend.py +200 -0
  44. gflow_cli-0.63.0/tests/api/test_extend_chain.py +174 -0
  45. gflow_cli-0.63.0/tests/api/test_video_extend.py +289 -0
  46. gflow_cli-0.63.0/tests/api/test_video_status_poll.py +143 -0
  47. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/autopilot/test_pr_triage_autopilot.py +66 -14
  48. gflow_cli-0.63.0/tests/cli/test_cli_video_extend.py +647 -0
  49. gflow_cli-0.63.0/tests/cli/test_run_with_handlers_interrupt.py +70 -0
  50. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/conftest.py +24 -0
  51. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_recorder.py +53 -0
  52. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_redaction.py +20 -0
  53. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_cli_parity.py +16 -0
  54. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_documentation_gate.py +5 -0
  55. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/uv.lock +37 -40
  56. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/CHARACTER.md +24 -4
  57. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/KNOWN_ISSUES.md +52 -0
  58. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/USAGE.md +101 -1
  59. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/requirements.txt +6 -7
  60. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.agents/plugins/marketplace.json +0 -0
  61. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/README.md +0 -0
  62. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/active.md +0 -0
  63. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/branch-review.md +0 -0
  64. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/changelog.md +0 -0
  65. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/check.md +0 -0
  66. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/doc-review.md +0 -0
  67. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  68. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  69. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/known-issues.md +0 -0
  70. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/live-verify.md +0 -0
  71. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/llm-council.md +0 -0
  72. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/next.md +0 -0
  73. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/plan.md +0 -0
  74. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  75. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/predict.md +0 -0
  76. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/release.md +0 -0
  77. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/scenario.md +0 -0
  78. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/sonar.md +0 -0
  79. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.claude/commands/gflow/status.md +0 -0
  80. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.env.template +0 -0
  81. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.gitattributes +0 -0
  82. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/CODEOWNERS +0 -0
  83. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  84. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/copilot-instructions.md +0 -0
  85. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/dependabot.yml +0 -0
  86. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/ci.yml +0 -0
  87. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/deps-watch.yml +0 -0
  88. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/external-pr-triage.yml +0 -0
  89. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/governance-advisory.yml +0 -0
  90. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/governance-benchmark.yml +0 -0
  91. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/labels.yml +0 -0
  92. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/main-base-guard.yml +0 -0
  93. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/pages.yml +0 -0
  94. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/release.yml +0 -0
  95. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.github/workflows/selector-probe.yml +0 -0
  96. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.gitignore +0 -0
  97. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.gitleaks.toml +0 -0
  98. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.pre-commit-config.yaml +0 -0
  99. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/.secrets.baseline +0 -0
  100. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/CONFIGURATION.md +0 -0
  101. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/CONTRIBUTING.md +0 -0
  102. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/DISCLAIMER.md +0 -0
  103. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/LICENSE +0 -0
  104. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/RELEASE.md +0 -0
  105. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/ROADMAP.md +0 -0
  106. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/conftest.py +0 -0
  107. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  108. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/deploy/logrotate-pr-triage +0 -0
  109. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docker-compose.yml +0 -0
  110. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/ACCOUNT_SAFETY.md +0 -0
  111. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/AGENT_GUIDE.md +0 -0
  112. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/AGENT_UI_E2E.md +0 -0
  113. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/AGENT_UI_RECON.md +0 -0
  114. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/ARCHITECTURE.md +0 -0
  115. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  116. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/AUTHENTICATION.md +0 -0
  117. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/CHARACTER_RECON.md +0 -0
  118. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/CONFIGURATION.md +0 -0
  119. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/DATA_LAYER.md +0 -0
  120. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/DEBUGGING.md +0 -0
  121. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/DEMOS.md +0 -0
  122. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/DEVELOPMENT.md +0 -0
  123. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/E2E_TESTING.md +0 -0
  124. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/EXTERNAL_STORAGE.md +0 -0
  125. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/GITHUB.md +0 -0
  126. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  127. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  128. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/INSTRUCTIONS.md +0 -0
  129. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  130. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  131. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  132. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  133. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  134. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  135. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  136. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  137. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  138. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  139. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  140. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  141. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  142. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  143. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  144. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  145. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  146. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  147. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  148. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  149. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  150. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  151. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  152. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  153. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  154. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  155. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  156. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  157. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  158. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  159. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  160. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  161. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  162. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  163. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  164. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  165. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  166. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  167. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  168. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  169. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  170. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  171. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  172. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  173. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  174. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  175. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  176. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  177. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  178. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  179. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  180. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  181. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  182. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  183. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  184. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  185. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  186. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  187. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  188. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  189. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  190. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  191. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  192. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  193. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  194. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  195. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/MCP.md +0 -0
  196. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/MEDIA_LIBRARY.md +0 -0
  197. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/MOVIE.md +0 -0
  198. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/PROMPT_EXPANSION.md +0 -0
  199. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  200. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/SECURITY.md +0 -0
  201. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/TOOLS.md +0 -0
  202. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/USER_GUIDE.md +0 -0
  203. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/assets/demo-split-pf.gif +0 -0
  204. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/assets/example-run.gif +0 -0
  205. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/assets/examples.webp +0 -0
  206. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/medium_tutorial.md +0 -0
  207. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/schemas/movie-handoff.schema.json +0 -0
  208. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/sonar-cleanup-tracker.md +0 -0
  209. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  210. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  211. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  212. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  213. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  214. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  215. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  216. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  217. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  218. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  219. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  220. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  221. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  222. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  223. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  224. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  225. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  226. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  227. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  228. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  229. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  230. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  231. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  232. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  233. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  234. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  235. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  236. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  237. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  238. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  239. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  240. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  241. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  242. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  243. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  244. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  245. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  246. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  247. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  248. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  249. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  250. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  251. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  252. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  253. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  254. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  255. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  256. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  257. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  258. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  259. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  260. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  261. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  262. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  263. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  264. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  265. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  266. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  267. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  268. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/eval/pr_triage_eval.py +0 -0
  269. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/eval/pr_triage_fixtures.json +0 -0
  270. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/README.md +0 -0
  271. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/batch_from_config.py +0 -0
  272. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/multi_prompt_t2i.py +0 -0
  273. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/sample_config.json +0 -0
  274. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/sample_prompts.txt +0 -0
  275. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/single_image_t2i.py +0 -0
  276. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/examples/workflow_chain.py +0 -0
  277. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/README.md +0 -0
  278. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/01_upload_image.json +0 -0
  279. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  280. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  281. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/04_archive_workflow.json +0 -0
  282. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/05_createProject.json +0 -0
  283. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/06_batchGenerateImages.json +0 -0
  284. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  285. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  286. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  287. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  288. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  289. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/12_create_scene.json +0 -0
  290. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  291. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/14_get_scene_workflows.json +0 -0
  292. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  293. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/entrypoint.sh +0 -0
  294. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  295. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  296. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/canary/register_task.ps1 +0 -0
  297. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/canary/run_canary.py +0 -0
  298. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_doc_links.py +0 -0
  299. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_materiality.py +0 -0
  300. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_release_artifacts.py +0 -0
  301. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_repo_hygiene.py +0 -0
  302. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_test_count.py +0 -0
  303. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/check_website_docs_pii.py +0 -0
  304. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/ci/generate_website_docs.py +0 -0
  305. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/debug_editor.py +0 -0
  306. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/debug_gen_settings.py +0 -0
  307. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/debug_settings.py +0 -0
  308. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/_recording_client.py +0 -0
  309. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/_spike_common.py +0 -0
  310. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/active_plan.py +0 -0
  311. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  312. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  313. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  314. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  315. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  316. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  317. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  318. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_locale_invariants.py +0 -0
  319. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  320. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_project_listing.py +0 -0
  321. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  322. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  323. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  324. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  325. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/character_create_spike.py +0 -0
  326. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/character_create_spike_v2.py +0 -0
  327. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/dump_character_selectors.js +0 -0
  328. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/incident_bundle_quality.py +0 -0
  329. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  330. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  331. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  332. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/make_project.py +0 -0
  333. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/materiality_backtest.py +0 -0
  334. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/measure_locale_probe.py +0 -0
  335. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/patch_character.py +0 -0
  336. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/skillopt/README.md +0 -0
  337. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/skillopt/harness.py +0 -0
  338. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/skillopt/tasks.json +0 -0
  339. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/sonar-local-scan.sh +0 -0
  340. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  341. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_changelog_capture.py +0 -0
  342. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  343. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  344. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  345. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  346. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  347. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  348. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  349. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_incident_live.py +0 -0
  350. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  351. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  352. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  353. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  354. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  355. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_locale_poison.py +0 -0
  356. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  357. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  358. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_model_inventory.py +0 -0
  359. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  360. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  361. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  362. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  363. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  364. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  365. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_patch_entity.py +0 -0
  366. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_patchright.py +0 -0
  367. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  368. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  369. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/verify_language_agnostic.py +0 -0
  370. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  371. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/dev/verify_model_attribution.py +0 -0
  372. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/README.md +0 -0
  373. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/capture_flow_traffic.py +0 -0
  374. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  375. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/memory_profile.py +0 -0
  376. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/recaptcha_mint.py +0 -0
  377. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  378. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  379. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  380. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/probe/run_probe.py +0 -0
  381. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/probe/spike_auth_matrix.py +0 -0
  382. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/record_demo.ps1 +0 -0
  383. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/smoke_image.py +0 -0
  384. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/smoke_video_editor.py +0 -0
  385. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/smoke_worker_style.py +0 -0
  386. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/spike_waf_camoufox.py +0 -0
  387. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/scripts/verify_chrome_auth_viability.py +0 -0
  388. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/README.md +0 -0
  389. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/changelog/SKILL.md +0 -0
  390. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/check/SKILL.md +0 -0
  391. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/doc-review/SKILL.md +0 -0
  392. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/gflow-cli/SKILL.md +0 -0
  393. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/issue-assessment/SKILL.md +0 -0
  394. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/known-issues/SKILL.md +0 -0
  395. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/live-verify/SKILL.md +0 -0
  396. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/llm-council/SKILL.md +0 -0
  397. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/plan/SKILL.md +0 -0
  398. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/pr-council-review/SKILL.md +0 -0
  399. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/predict/SKILL.md +0 -0
  400. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/release/SKILL.md +0 -0
  401. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/scenario/SKILL.md +0 -0
  402. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/sonar/SKILL.md +0 -0
  403. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/skills/status/SKILL.md +0 -0
  404. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/sonar-project.properties +0 -0
  405. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/__main__.py +0 -0
  406. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/__init__.py +0 -0
  407. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/_engine.py +0 -0
  408. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/_retry.py +0 -0
  409. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  410. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/character.py +0 -0
  411. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/dto.py +0 -0
  412. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/image.py +0 -0
  413. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/image_upscale.py +0 -0
  414. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/recaptcha.py +0 -0
  415. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/scene.py +0 -0
  416. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  417. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/_common.py +0 -0
  418. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  419. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/base.py +0 -0
  420. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  421. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  422. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  423. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  424. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  425. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  426. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  427. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  428. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  429. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  430. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  431. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  432. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/api/video.py +0 -0
  433. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/__init__.py +0 -0
  434. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/base.py +0 -0
  435. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/cookies.py +0 -0
  436. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/factory.py +0 -0
  437. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  438. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  439. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/strategies.py +0 -0
  440. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/auth/verification.py +0 -0
  441. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/browser_manager.py +0 -0
  442. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/chain.py +0 -0
  443. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/chain_manifest.py +0 -0
  444. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli.py +0 -0
  445. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_character.py +0 -0
  446. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_data.py +0 -0
  447. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_doctor.py +0 -0
  448. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_image.py +0 -0
  449. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_instructions.py +0 -0
  450. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_models.py +0 -0
  451. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_movie.py +0 -0
  452. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_project.py +0 -0
  453. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_run.py +0 -0
  454. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_scene.py +0 -0
  455. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/cli_tools.py +0 -0
  456. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/composition.py +0 -0
  457. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/config.py +0 -0
  458. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/__init__.py +0 -0
  459. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/chain_repo.py +0 -0
  460. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  461. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  462. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  463. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  464. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  465. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  466. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  467. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  468. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  469. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  470. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/queries.py +0 -0
  471. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/repository.py +0 -0
  472. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/data/store.py +0 -0
  473. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/diagnostics.py +0 -0
  474. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/exceptions.py +0 -0
  475. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/file_integrity.py +0 -0
  476. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  477. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  478. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  479. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  480. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/image_batch.py +0 -0
  481. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/json_output.py +0 -0
  482. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/__init__.py +0 -0
  483. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/prompts.py +0 -0
  484. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/resources.py +0 -0
  485. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/server.py +0 -0
  486. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/setup.py +0 -0
  487. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  488. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/mcp/tools.py +0 -0
  489. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/media.py +0 -0
  490. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/movie_manifest.py +0 -0
  491. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/observability.py +0 -0
  492. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/paths.py +0 -0
  493. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/profile_lease.py +0 -0
  494. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/profile_store.py +0 -0
  495. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/redaction.py +0 -0
  496. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/services/__init__.py +0 -0
  497. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  498. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/services/character_create.py +0 -0
  499. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/services/doctor.py +0 -0
  500. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/services/mentions.py +0 -0
  501. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/storage.py +0 -0
  502. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/__init__.py +0 -0
  503. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/banned.py +0 -0
  504. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  505. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  506. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  507. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  508. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/expander.py +0 -0
  509. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/invocation.py +0 -0
  510. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/loader.py +0 -0
  511. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/registry.py +0 -0
  512. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/runtime.py +0 -0
  513. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/tools/spec.py +0 -0
  514. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/ui/app.py +0 -0
  515. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/ui/server.py +0 -0
  516. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/update_check.py +0 -0
  517. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/winsec.py +0 -0
  518. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/worker/codec.py +0 -0
  519. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/worker/daemon.py +0 -0
  520. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/src/gflow_cli/worker/queue.py +0 -0
  521. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tasks/lessons.md +0 -0
  522. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/test_assets/sample_batch.json +0 -0
  523. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/test_assets/sample_batch.tsv +0 -0
  524. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/test_assets/sample_batch_invalid.tsv +0 -0
  525. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/__init__.py +0 -0
  526. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/__init__.py +0 -0
  527. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/fixtures/character_gen_response.json +0 -0
  528. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  529. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  530. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  531. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_bearer_redaction.py +0 -0
  532. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_character.py +0 -0
  533. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client.py +0 -0
  534. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_character.py +0 -0
  535. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_delete_characters.py +0 -0
  536. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_errors.py +0 -0
  537. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_generate_character.py +0 -0
  538. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_image.py +0 -0
  539. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_incidents.py +0 -0
  540. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_launch_kwargs.py +0 -0
  541. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_locale_cache.py +0 -0
  542. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_patch_entity.py +0 -0
  543. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_scene.py +0 -0
  544. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_client_upscale.py +0 -0
  545. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_concurrency.py +0 -0
  546. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_dto.py +0 -0
  547. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_engine.py +0 -0
  548. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_image.py +0 -0
  549. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_image_dto.py +0 -0
  550. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_image_upscale.py +0 -0
  551. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  552. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_recaptcha.py +0 -0
  553. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_retry.py +0 -0
  554. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_routes.py +0 -0
  555. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_routes_character.py +0 -0
  556. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_routes_locale.py +0 -0
  557. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_routes_scene.py +0 -0
  558. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_sapisidhash_helper.py +0 -0
  559. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_scene_models.py +0 -0
  560. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_video.py +0 -0
  561. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/test_video_request.py +0 -0
  562. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/__init__.py +0 -0
  563. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/conftest.py +0 -0
  564. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/drivers/__init__.py +0 -0
  565. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  566. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_classic.py +0 -0
  567. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_factory.py +0 -0
  568. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  569. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  570. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_base.py +0 -0
  571. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_bearer.py +0 -0
  572. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_common.py +0 -0
  573. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  574. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_factory.py +0 -0
  575. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_fingerprint.py +0 -0
  576. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_locale_navigation.py +0 -0
  577. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_mode_control.py +0 -0
  578. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  579. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_navigation_settled.py +0 -0
  580. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  581. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_policy_400.py +0 -0
  582. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_sapisidhash.py +0 -0
  583. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  584. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_transport_timeout.py +0 -0
  585. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation.py +0 -0
  586. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  587. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  588. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  589. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  590. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  591. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/strategies/test_factory.py +0 -0
  592. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/strategies/test_strategies.py +0 -0
  593. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/test_cookies.py +0 -0
  594. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/test_real_chrome.py +0 -0
  595. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/test_verification.py +0 -0
  596. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/auth/test_windows_acl.py +0 -0
  597. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/__init__.py +0 -0
  598. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_auth_status.py +0 -0
  599. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_auth_list.py +0 -0
  600. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_character.py +0 -0
  601. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_character_create.py +0 -0
  602. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_data.py +0 -0
  603. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_data_errors.py +0 -0
  604. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  605. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_data_sync.py +0 -0
  606. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_doctor.py +0 -0
  607. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_image.py +0 -0
  608. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  609. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  610. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_image_upscale.py +0 -0
  611. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  612. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_instructions.py +0 -0
  613. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_models.py +0 -0
  614. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_movie.py +0 -0
  615. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_run.py +0 -0
  616. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_scene.py +0 -0
  617. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_tools.py +0 -0
  618. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_video.py +0 -0
  619. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_cli_video_chain.py +0 -0
  620. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_error_handling.py +0 -0
  621. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_failure_funnel.py +0 -0
  622. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_helpers.py +0 -0
  623. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_incident_output.py +0 -0
  624. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_movie_manifest.py +0 -0
  625. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  626. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_predictable_output.py +0 -0
  627. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_settings_validation.py +0 -0
  628. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  629. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/composition/test_character.py +0 -0
  630. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/composition/test_compose_prompt.py +0 -0
  631. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/composition/test_handoff.py +0 -0
  632. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/composition/test_style_variants.py +0 -0
  633. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/composition/test_style_variants_e2e.py +0 -0
  634. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/__init__.py +0 -0
  635. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_chain_repo.py +0 -0
  636. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_failure_recording.py +0 -0
  637. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_find_incomplete_character.py +0 -0
  638. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_models.py +0 -0
  639. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_null_columns_stay_null.py +0 -0
  640. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_packaging.py +0 -0
  641. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_recorder_character.py +0 -0
  642. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_repository.py +0 -0
  643. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_scene_persistence.py +0 -0
  644. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_settings_and_errors.py +0 -0
  645. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_store.py +0 -0
  646. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/data/test_store_migrations.py +0 -0
  647. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/dev/test_recording_client.py +0 -0
  648. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/__init__.py +0 -0
  649. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/conftest.py +0 -0
  650. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  651. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  652. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  653. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  654. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  655. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_chain_e2e.py +0 -0
  656. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_character_create_e2e.py +0 -0
  657. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  658. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  659. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_daemon_e2e.py +0 -0
  660. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  661. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  662. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  663. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  664. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  665. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  666. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  667. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  668. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  669. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_json_output_e2e.py +0 -0
  670. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  671. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  672. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  673. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  674. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_scene_compose_live.py +0 -0
  675. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  676. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_tools_e2e.py +0 -0
  677. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_transports_e2e.py +0 -0
  678. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  679. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  680. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  681. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/__init__.py +0 -0
  682. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/asset_tagging.feature +0 -0
  683. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/auth.feature +0 -0
  684. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/auth_login.feature +0 -0
  685. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/character_create.feature +0 -0
  686. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/character_read.feature +0 -0
  687. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/conftest.py +0 -0
  688. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/duration_tab_drift.feature +0 -0
  689. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/entity_provenance.feature +0 -0
  690. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/image.feature +0 -0
  691. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/image_batch_references.feature +0 -0
  692. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/image_upscale.feature +0 -0
  693. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/incident_diagnostics.feature +0 -0
  694. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/instructions.feature +0 -0
  695. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/locale_picker_include.feature +0 -0
  696. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/mcp_tasks.feature +0 -0
  697. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/media_picker_tiers.feature +0 -0
  698. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/output_hardening.feature +0 -0
  699. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_asset_tagging_steps.py +0 -0
  700. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_auth_login_steps.py +0 -0
  701. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_auth_steps.py +0 -0
  702. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_character_create_steps.py +0 -0
  703. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_character_read_steps.py +0 -0
  704. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_image_steps.py +0 -0
  705. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_image_upscale_steps.py +0 -0
  706. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  707. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_instructions_steps.py +0 -0
  708. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  709. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  710. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  711. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_output_hardening_steps.py +0 -0
  712. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_step_collision_guard.py +0 -0
  713. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  714. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/test_video_chain_steps.py +0 -0
  715. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/video_agent_ui.feature +0 -0
  716. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/features/video_chain.feature +0 -0
  717. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/__init__.py +0 -0
  718. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/changelog_modal_page.html +0 -0
  719. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/doctor_env.py +0 -0
  720. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/flow_model_inventory.json +0 -0
  721. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  722. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/listing_payload.py +0 -0
  723. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/fixtures/seeded_catalog.py +0 -0
  724. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/__init__.py +0 -0
  725. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/test_grading.py +0 -0
  726. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/test_model.py +0 -0
  727. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/test_model_governance.py +0 -0
  728. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/test_registry.py +0 -0
  729. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/flow_selectors/test_report.py +0 -0
  730. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/image_batch/__init__.py +0 -0
  731. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/image_batch/test_image_manifest.py +0 -0
  732. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/image_batch/test_jitter_config.py +0 -0
  733. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/image_batch/test_observability_events.py +0 -0
  734. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/__init__.py +0 -0
  735. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/conftest.py +0 -0
  736. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/constants.py +0 -0
  737. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/test_expander_gateway.py +0 -0
  738. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/test_storage_gcs.py +0 -0
  739. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/integration/test_storage_s3.py +0 -0
  740. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/__init__.py +0 -0
  741. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/conftest.py +0 -0
  742. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_auth_status_tool.py +0 -0
  743. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_error_funnel.py +0 -0
  744. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_http_transport.py +0 -0
  745. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_known_issues_resource.py +0 -0
  746. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_no_spend.py +0 -0
  747. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  748. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_resources.py +0 -0
  749. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_server.py +0 -0
  750. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_setup.py +0 -0
  751. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_stdio_transport.py +0 -0
  752. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_tasks_extension.py +0 -0
  753. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_tools_helpers.py +0 -0
  754. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_tools_instructions.py +0 -0
  755. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/mcp/test_tools_wired.py +0 -0
  756. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  757. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_canary_classify.py +0 -0
  758. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_canary_reexec.py +0 -0
  759. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  760. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_check_materiality.py +0 -0
  761. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  762. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  763. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_check_test_count.py +0 -0
  764. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  765. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_codex_plugin.py +0 -0
  766. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_generate_website_docs.py +0 -0
  767. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  768. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_materiality_backtest.py +0 -0
  769. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/scripts/test_workflow_hardening.py +0 -0
  770. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/__init__.py +0 -0
  771. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_catalog_sync.py +0 -0
  772. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_character_create_redaction.py +0 -0
  773. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_character_create_saga.py +0 -0
  774. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  775. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_doctor.py +0 -0
  776. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_media_attribution.py +0 -0
  777. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_mentions_observability.py +0 -0
  778. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_mentions_parse.py +0 -0
  779. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_mentions_resolve.py +0 -0
  780. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/services/test_resolve_and_apply.py +0 -0
  781. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/smoke/__init__.py +0 -0
  782. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  783. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/smoke/test_real_flow.py +0 -0
  784. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_auth.py +0 -0
  785. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_browser_manager.py +0 -0
  786. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_chain.py +0 -0
  787. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_chain_manifest.py +0 -0
  788. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_cli_data.py +0 -0
  789. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_cli_project.py +0 -0
  790. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_config.py +0 -0
  791. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_conftest_isolation.py +0 -0
  792. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_data_queries.py +0 -0
  793. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_bundle.py +0 -0
  794. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_events.py +0 -0
  795. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_journal.py +0 -0
  796. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_recorder.py +0 -0
  797. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_retention.py +0 -0
  798. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_diagnostics_sanitize.py +0 -0
  799. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_duration_tab_drift.py +0 -0
  800. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_entity_provenance.py +0 -0
  801. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_errors.py +0 -0
  802. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_errors_classification.py +0 -0
  803. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_image_batch_references.py +0 -0
  804. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_incident_generation_requests.py +0 -0
  805. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_json_output.py +0 -0
  806. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_marker_registry.py +0 -0
  807. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_media.py +0 -0
  808. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_observability.py +0 -0
  809. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_overlay_banner_dismissal.py +0 -0
  810. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_paths.py +0 -0
  811. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_playwright_pin.py +0 -0
  812. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_profile_lease.py +0 -0
  813. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_profile_lease_subprocess.py +0 -0
  814. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_profile_store.py +0 -0
  815. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_profile_store_locale.py +0 -0
  816. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_project_list_urls.py +0 -0
  817. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_self_documenting_errors.py +0 -0
  818. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_smoke.py +0 -0
  819. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/test_update_check.py +0 -0
  820. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/__init__.py +0 -0
  821. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_banned.py +0 -0
  822. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_expander.py +0 -0
  823. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_invocation.py +0 -0
  824. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_loader.py +0 -0
  825. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_registry.py +0 -0
  826. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_runtime.py +0 -0
  827. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/tools/test_spec.py +0 -0
  828. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/ui/test_app.py +0 -0
  829. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_codec.py +0 -0
  830. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_daemon.py +0 -0
  831. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  832. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_queue.py +0 -0
  833. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_queue_multiprocess.py +0 -0
  834. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/tests/worker/test_queue_reconciliation.py +0 -0
  835. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  836. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/ARCHITECTURE.md +0 -0
  837. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/AUTHENTICATION.md +0 -0
  838. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/CONFIGURATION.md +0 -0
  839. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/DATA_LAYER.md +0 -0
  840. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/DEBUGGING.md +0 -0
  841. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/DEVELOPMENT.md +0 -0
  842. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/E2E_TESTING.md +0 -0
  843. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  844. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/INSTRUCTIONS.md +0 -0
  845. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/MCP.md +0 -0
  846. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  847. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/MOVIE.md +0 -0
  848. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  849. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/SECURITY.md +0 -0
  850. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/TOOLS.md +0 -0
  851. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/USER_GUIDE.md +0 -0
  852. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/agents.md +0 -0
  853. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/index.md +0 -0
  854. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/installation.md +0 -0
  855. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/onboarding-mockup.html +0 -0
  856. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/onboarding.md +0 -0
  857. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/docs/stylesheets/extra.css +0 -0
  858. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/mkdocs.yml +0 -0
  859. {gflow_cli-0.62.1 → gflow_cli-0.63.0}/website/requirements.in +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.62.1",
3
+ "version": "0.63.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)
@@ -58,7 +93,7 @@ Or invoke the wrapper: `/gflow:check`.
58
93
 
59
94
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
60
95
  - 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.
96
+ - 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
97
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
63
98
  - **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
99
  - **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`.
@@ -97,7 +132,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
97
132
  | 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
98
133
  | 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
99
134
  | 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 |
135
+ | 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
136
 
102
137
  ### Pipeline Continuation Mandate
103
138
 
@@ -7,6 +7,73 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.63.0] — 2026-09-01
11
+
12
+ ### Added
13
+
14
+ - **`gflow video extend` — continue a clip past Flow's 8-second ceiling.** Veo's
15
+ extend route generates a new 8s segment seeded server-side from the source
16
+ clip, so motion and audio carry across the join instead of restarting from a
17
+ still (which is what `video chain` does, and why it needs a fade guard). Pass
18
+ one prompt per segment, or `--segments N` to reuse the last one:
19
+
20
+ ```bash
21
+ gflow video extend <media-id> "the wave recedes" --project <id>
22
+ gflow video extend <media-id> "drifts out to sea" --project <id> -n 4 -o long.mp4
23
+ ```
24
+
25
+ The result is a Flow Scene; `-o` renders it to a single mp4 through the
26
+ existing credit-free server-side concat.
27
+
28
+ > Known limitation, found in live verification: a segment carries ~7s of real
29
+ > content though Flow advertises and bills 8s, so each internal seam of a
30
+ > multi-segment render is preceded by ~1s of frozen frame and silence. Single
31
+ > segments are unaffected. Details and the open questions are in
32
+ > [KNOWN_ISSUES](KNOWN_ISSUES.md).
33
+
34
+ - **The model key is resolved per run, never hardcoded.** Flow's extend family
35
+ is tier-gated — `_ultra` variants are Advanced-only and read `UNAVAILABLE`
36
+ elsewhere — so the key comes from the account's own capability listing,
37
+ picking the cheapest orderable model exactly as Flow's own UI does. A pinned
38
+ key would 403 forever on the wrong tier.
39
+ - **Costs are shown before anything is submitted**, and a pre-flight balance
40
+ check refuses a run the balance cannot finish. `--dry-run` prints the plan
41
+ without opening a browser.
42
+ - **Serial by construction, and paced.** Segments submit one at a time with a
43
+ non-zero default jitter (`GFLOW_CLI_JITTER_RANGE`). A refusal aborts with
44
+ completed segments preserved and is never auto-retried.
45
+ - `1:1` is refused up front — Flow publishes no square extend model.
46
+
47
+ ### Fixed
48
+
49
+ - **Ctrl+C during a billed run said nothing.** `run_with_handlers` exited 130
50
+ silently, so a user who interrupted a multi-segment run could not tell whether
51
+ anything had been charged or how to resume. It now reports credits spent,
52
+ segments completed and the resume handle. Fixed at the shared boundary, so
53
+ `video chain` and `movie run` gain it too.
54
+ - **`sessionId` was not redacted.** `redact_metadata` covered `token` and
55
+ `recaptchaToken` but not `sessionId`, which the extend request carries. Not a
56
+ credential, but account-correlatable, and it would otherwise reach any logged
57
+ request body or diagnostics bundle verbatim.
58
+
59
+
60
+ - **The offline test suite could `git checkout develop` in the developer's own
61
+ clone ([#605](https://github.com/ffroliva/gflow-cli/issues/605)).** git's
62
+ repository discovery walks *up* from `cwd`, and `--basetemp=tmp/pytest` puts
63
+ every `tmp_path` inside this repository, so an autopilot test whose temp `.git`
64
+ went missing had its `git checkout develop` silently resolved against the real
65
+ working tree — moving the developer off their branch mid-run (reflog-confirmed,
66
+ Windows-only, intermittent). Two independent guards now close it:
67
+ `scripts/autopilot/pr_triage_autopilot.py` pins every git call with
68
+ `--git-dir`/`--work-tree`, so a `repo_dir` that is not a repository fails loudly,
69
+ raising with git's own `fatal: not a git repository` text rather than
70
+ retargeting whatever clone encloses it (this also
71
+ hardens the VPS triage path against a mistyped `--repo-dir`), and
72
+ `tests/conftest.py` sets `GIT_CEILING_DIRECTORIES` to pytest's basetemp so no
73
+ test can walk out of its temp dir into this repo. What removed the temp `.git`
74
+ is still unexplained — it now surfaces as a plain "not a git repository" rather
75
+ than a silent branch switch.
76
+
10
77
  ## [0.62.1] — 2026-08-30
11
78
 
12
79
  ### Fixed
@@ -3448,7 +3515,8 @@ shell-script template that branches on these codes.
3448
3515
 
3449
3516
  First skeleton. Not functional end-to-end yet.
3450
3517
 
3451
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...HEAD
3518
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...HEAD
3519
+ [0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
3452
3520
  [0.62.1]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...v0.62.1
3453
3521
  [0.62.0]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...v0.62.0
3454
3522
  [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.63.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.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)
@@ -0,0 +1,130 @@
1
+ # Live verification — v0.63.0
2
+
3
+ Every claim below was **observed**. Claims that could not be observed are stated
4
+ as such in §5, not omitted.
5
+
6
+ ## Environment
7
+
8
+ | | |
9
+ |---|---|
10
+ | Date | 2026-09-01 |
11
+ | Profile | `ffroliva` (locale `en`) |
12
+ | Code under test | `feat/video-extend` @ the branch that became `5bd1476` on `develop` |
13
+ | Surface | `gflow video extend` — the one new user-facing command in this release |
14
+ | Source clip | `b9458021-fc2d-4d95-ab53-cf844c6f1079` (landscape) |
15
+ | Veo credits spent | **20** (2 segments × 10). Model resolution, the capability listing read, scene creation and the final concat were all free. |
16
+
17
+ ## 1. The command chains extends and bills what it said it would
18
+
19
+ ```
20
+ gflow video extend b9458021-fc2d-4d95-ab53-cf844c6f1079 "..." "..." -n 2 --aspect 16:9 -o live_extend.mp4
21
+ ```
22
+
23
+ The pre-flight plan, printed before anything was submitted:
24
+
25
+ ```
26
+ model : veo_3_1_extension_lite (20 credits total, balance 875)
27
+ ```
28
+
29
+ and the resolver's own record of how it got there:
30
+
31
+ ```json
32
+ {"model_key": "veo_3_1_extension_lite", "service_tier": "SERVICE_TIER_INTERMEDIATE",
33
+ "unit_cost": 10, "candidate_count": 99, "event": "extend_model_resolved",
34
+ "cli_command": "video extend"}
35
+ ```
36
+
37
+ `candidate_count: 99` is the load-bearing number: the key was **resolved from the
38
+ live capability listing**, not hardcoded. The account's own tier
39
+ (`SERVICE_TIER_INTERMEDIATE`) selected an orderable key, which is what prevents
40
+ the tier-403 rather than classifying it afterwards.
41
+
42
+ Final line: `Extended — 2/2 segment(s), 20 credits`. Plan cost and actual spend
43
+ agree.
44
+
45
+ ## 2. Chaining is tail-only — the property the whole feature rests on
46
+
47
+ This is the claim that separates `extend` from `chain`, and it is the one a mock
48
+ cannot establish. Both submissions, verbatim:
49
+
50
+ ```json
51
+ {"segment": 1, "of": 2, "media_id": "0c9364f3-9c2e-4369-8e4a-28eace534ce3",
52
+ "source_media_id": "b9458021-fc2d-4d95-ab53-cf844c6f1079",
53
+ "model_key": "veo_3_1_extension_lite"}
54
+
55
+ {"segment": 2, "of": 2, "media_id": "648f9291-bae5-4a03-bbe1-82a113e30881",
56
+ "source_media_id": "0c9364f3-9c2e-4369-8e4a-28eace534ce3",
57
+ "model_key": "veo_3_1_extension_lite"}
58
+ ```
59
+
60
+ Segment 2's `source_media_id` **is segment 1's `media_id`**. The chain advances
61
+ from the tail it just produced, not from the original clip. Had the orchestrator
62
+ re-seeded from the source, both lines would name `b9458021…` and the output
63
+ would have been two divergent 8-second continuations of the same moment rather
64
+ than one continuous 23-second shot.
65
+
66
+ ## 3. Ledger
67
+
68
+ | Layer | Observed |
69
+ |---|---|
70
+ | File count | 1 rendered mp4 from 3 scene clips (original + 2 extensions) |
71
+ | Magic bytes | h264 + aac in an mp4 container, read back by `ffprobe` |
72
+ | Dimensions / shape | **23.02s · 1280×720 · 24fps** — landscape preserved end to end |
73
+ | Structlog invariants | `extend_model_resolved` (×2, once per segment) → `extend_segment_started` segment 1 → segment 2 with the chained `source_media_id` → completion at `2/2`, `credits_spent=20` |
74
+ | User-confirmable artifact | `live_extend.mp4` — a single continuous clip that plays past Flow's 8-second ceiling, which is the entire user-facing promise of the release |
75
+
76
+ ## 4. The verification earned its keep — it found a defect the suite could not
77
+
78
+ The offline suite passes on this feature and is structurally incapable of seeing
79
+ this: **an extend segment carries 7.000000 seconds of content, not the 8 Flow
80
+ advertises and bills.**
81
+
82
+ Per-second mean volume across the 3-clip render:
83
+
84
+ ```
85
+ 7s -28.8 8s -26.4 <- original -> extension seam: continuous
86
+ 14s -29.1 15s -75.1 16s -33.9 <- extension -> extension seam: 1s dropout
87
+ ```
88
+
89
+ Finer slices place the silence at 15.00–15.99s exactly, over a **frozen video
90
+ frame**. Reproduced independently on a second render made days earlier from
91
+ different prompts (14s −22.4, **15s −70.1**, 16s −23.9), so it is systematic.
92
+
93
+ The cause is a metadata disagreement, not a rendering bug: the capability listing
94
+ advertises `videoLengthSeconds: 8` and `getSceneWorkflows` reports
95
+ `total_duration=8.0` for a clip whose streams `ffprobe` measures at 7.000000s.
96
+ `ConcatInput` passes those values through verbatim, so Flow's server-side concat
97
+ stretches a 7s clip into an 8s slot by holding the last frame and muting. An
98
+ N-segment chain has N−1 of these; the final segment escapes only because the
99
+ render ends before its padding (23.02s for 3 clips, not 24s).
100
+
101
+ **Filed, not guessed at.** It is in [KNOWN_ISSUES.md](../KNOWN_ISSUES.md) with the
102
+ three questions that must be answered before any clamp is written — whether 7.0s
103
+ holds across models, aspects and tiers; whether Flow's own UI pads identically;
104
+ and whether any API field reports true duration. `USAGE.md`, the CLI `--help` and
105
+ `CHANGELOG.md` all say ~7s rather than 8s as a result. Three of the four deferred
106
+ code-review findings block on this same question, deliberately.
107
+
108
+ ## 5. Recorded as NOT verified
109
+
110
+ - **Portrait (`--aspect 9:16`).** The live run was 16:9. `veo_3_1_extension_lite`
111
+ advertises `LANDSCAPE,PORTRAIT` at the same 10 credits, and the resolver reads
112
+ the aspect from the listing, but no portrait extend has been submitted.
113
+ - **`--aspect` against a mismatched source.** Not validated by the code, and hit
114
+ during this very run (landscape source, 9:16 default). Deferred deliberately —
115
+ the fix needs the source clip's real aspect, which needs either a media probe
116
+ or a listing field not yet confirmed to exist. Guessing there is precisely how
117
+ the 7s defect reached users upstream.
118
+ - **Chains longer than 2 segments.** `-n` accepts up to 30; only `-n 2` was run.
119
+ Pacing, the per-segment interrupt context and the credit pre-flight are all
120
+ exercised at n=2, but a long chain's cumulative per-profile load is not.
121
+ - **`--resume-from` against a live partial scene.** The resume arithmetic
122
+ (append at `last position + 1`, seed from the scene's real tail) is covered
123
+ offline against a fake scene; no interrupted live run has been resumed.
124
+ - **The insufficient-credits refusal, live.** Verified offline only — the account
125
+ had enough balance, so the pre-flight never fired against Flow.
126
+ - **Ctrl+C mid-run, live.** The per-segment interrupt context is unit-tested; no
127
+ live run was interrupted.
128
+ - **`OperationKind.EXTEND` rows.** Asset rows land; the operation row is not
129
+ written yet, so `gflow data` shows the media but not the operation. Deferred
130
+ with reasons.