gflow-cli 0.64.0__tar.gz → 0.65.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 (863) hide show
  1. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.codex-plugin/plugin.json +1 -1
  2. gflow_cli-0.65.0/.github/workflows/star-history-watch.yml +89 -0
  3. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/CHANGELOG.md +91 -1
  4. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/CONTRIBUTING.md +3 -3
  5. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/KNOWN_ISSUES.md +29 -0
  6. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/PKG-INFO +10 -3
  7. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/README.md +9 -2
  8. {gflow_cli-0.64.0/website → gflow_cli-0.65.0}/docs/DEBUGGING.md +3 -0
  9. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/DEVELOPMENT.md +1 -1
  10. {gflow_cli-0.64.0/website → gflow_cli-0.65.0}/docs/E2E_TESTING.md +23 -14
  11. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/INDEX.md +4 -0
  12. gflow_cli-0.65.0/docs/LIVE_VERIFICATION_reference_entity_guard.md +92 -0
  13. gflow_cli-0.65.0/docs/LIVE_VERIFICATION_v0.65.0.md +72 -0
  14. {gflow_cli-0.64.0/website → gflow_cli-0.65.0}/docs/MCP.md +1 -1
  15. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/MOVIE.md +11 -1
  16. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/PROJECT_STATUS.md +46 -0
  17. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/USAGE.md +21 -6
  18. {gflow_cli-0.64.0/website → gflow_cli-0.65.0}/docs/USER_GUIDE.md +1 -1
  19. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/pyproject.toml +5 -5
  20. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/canary/run_canary.py +12 -9
  21. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_release_artifacts.py +37 -1
  22. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/spike_waf_camoufox.py +2 -2
  23. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/live-verify/SKILL.md +1 -1
  24. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/release/SKILL.md +22 -0
  25. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/__init__.py +1 -1
  26. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/ui_automation_video.py +56 -15
  27. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/chain.py +47 -9
  28. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/chain_manifest.py +7 -1
  29. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_video.py +55 -20
  30. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/tools.py +23 -2
  31. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/movie_manifest.py +38 -6
  32. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_ui_automation.py +137 -8
  33. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_video.py +33 -0
  34. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_video_chain.py +57 -0
  35. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_movie_manifest.py +53 -1
  36. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/conftest.py +2 -2
  37. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +1 -1
  38. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_asset_tagging_e2e.py +2 -1
  39. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_chain_e2e.py +5 -8
  40. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_character_create_e2e.py +6 -5
  41. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_data_layer_e2e.py +3 -3
  42. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_entity_provenance_e2e.py +7 -6
  43. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_entity_smuggling_e2e.py +42 -21
  44. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_i2v_flags_e2e.py +94 -0
  45. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +1 -1
  46. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_image_uuid_ref_e2e.py +3 -3
  47. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_json_output_e2e.py +1 -1
  48. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_refresh_on_miss_e2e.py +1 -1
  49. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +1 -1
  50. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_server.py +46 -0
  51. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_tools_wired.py +12 -4
  52. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_check_release_artifacts.py +53 -0
  53. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/smoke/test_real_flow.py +1 -1
  54. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_chain.py +96 -0
  55. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_chain_manifest.py +6 -0
  56. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/uv.lock +1 -1
  57. {gflow_cli-0.64.0 → gflow_cli-0.65.0/website}/docs/DEBUGGING.md +3 -0
  58. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/DEVELOPMENT.md +1 -1
  59. {gflow_cli-0.64.0 → gflow_cli-0.65.0/website}/docs/E2E_TESTING.md +23 -14
  60. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/KNOWN_ISSUES.md +29 -0
  61. {gflow_cli-0.64.0 → gflow_cli-0.65.0/website}/docs/MCP.md +1 -1
  62. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/MOVIE.md +11 -1
  63. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/USAGE.md +21 -6
  64. {gflow_cli-0.64.0 → gflow_cli-0.65.0/website}/docs/USER_GUIDE.md +1 -1
  65. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.agents/plugins/marketplace.json +0 -0
  66. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/README.md +0 -0
  67. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/active.md +0 -0
  68. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/branch-review.md +0 -0
  69. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/changelog.md +0 -0
  70. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/check.md +0 -0
  71. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/doc-review.md +0 -0
  72. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  73. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  74. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/known-issues.md +0 -0
  75. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/live-verify.md +0 -0
  76. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/llm-council.md +0 -0
  77. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/next.md +0 -0
  78. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/plan.md +0 -0
  79. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  80. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/predict.md +0 -0
  81. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/release.md +0 -0
  82. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/scenario.md +0 -0
  83. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/sonar.md +0 -0
  84. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.claude/commands/gflow/status.md +0 -0
  85. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.env.template +0 -0
  86. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.gitattributes +0 -0
  87. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/CODEOWNERS +0 -0
  88. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/FUNDING.yml +0 -0
  89. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  90. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/copilot-instructions.md +0 -0
  91. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/dependabot.yml +0 -0
  92. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/ci.yml +0 -0
  93. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/deps-watch.yml +0 -0
  94. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/external-pr-triage.yml +0 -0
  95. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/governance-advisory.yml +0 -0
  96. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/governance-benchmark.yml +0 -0
  97. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/labels.yml +0 -0
  98. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/main-base-guard.yml +0 -0
  99. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/pages.yml +0 -0
  100. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/release.yml +0 -0
  101. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/scorecard.yml +0 -0
  102. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.github/workflows/selector-probe.yml +0 -0
  103. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.gitignore +0 -0
  104. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.gitleaks.toml +0 -0
  105. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.pre-commit-config.yaml +0 -0
  106. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/.secrets.baseline +0 -0
  107. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/AGENTS.md +0 -0
  108. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/CLAUDE.md +0 -0
  109. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/CONFIGURATION.md +0 -0
  110. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/DISCLAIMER.md +0 -0
  111. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/LICENSE +0 -0
  112. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/PLAN.md +0 -0
  113. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/RELEASE.md +0 -0
  114. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/ROADMAP.md +0 -0
  115. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/conftest.py +0 -0
  116. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  117. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/deploy/logrotate-pr-triage +0 -0
  118. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docker-compose.yml +0 -0
  119. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/ACCOUNT_SAFETY.md +0 -0
  120. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/AGENT_GUIDE.md +0 -0
  121. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/AGENT_UI_E2E.md +0 -0
  122. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/AGENT_UI_RECON.md +0 -0
  123. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/ARCHITECTURE.md +0 -0
  124. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  125. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/AUTHENTICATION.md +0 -0
  126. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/CHARACTER.md +0 -0
  127. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/CHARACTER_RECON.md +0 -0
  128. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/CONFIGURATION.md +0 -0
  129. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/DATA_LAYER.md +0 -0
  130. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/DEMOS.md +0 -0
  131. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/EXTERNAL_STORAGE.md +0 -0
  132. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/GITHUB.md +0 -0
  133. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  134. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  135. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/INSTRUCTIONS.md +0 -0
  136. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  137. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  138. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  139. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  140. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  141. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  142. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  143. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  144. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  145. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  146. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  147. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  148. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  149. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  150. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  151. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  152. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  153. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  154. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  155. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  156. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  157. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  158. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  159. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  160. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  161. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  162. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  163. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  164. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  165. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  166. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  167. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  168. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  169. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  170. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  171. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  172. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  173. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  174. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  175. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  176. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  177. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  178. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  179. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  180. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  181. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  182. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  183. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  184. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  185. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  186. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  187. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  188. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  189. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  190. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  191. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  192. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  193. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  194. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  195. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  196. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  197. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  198. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  199. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  200. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  201. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  202. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  203. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  204. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/MEDIA_LIBRARY.md +0 -0
  205. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/PROMPT_EXPANSION.md +0 -0
  206. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  207. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/SECURITY.md +0 -0
  208. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/TOOLS.md +0 -0
  209. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/assets/demo-split-pf.gif +0 -0
  210. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/assets/example-run.gif +0 -0
  211. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/assets/examples.webp +0 -0
  212. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/medium_tutorial.md +0 -0
  213. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/schemas/movie-handoff.schema.json +0 -0
  214. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/sonar-cleanup-tracker.md +0 -0
  215. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  216. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  217. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  218. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  219. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  220. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  221. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  222. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  223. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  224. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  225. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  226. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  227. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  228. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  229. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  230. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  231. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  232. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  233. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  234. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  235. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  236. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  237. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  238. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  239. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  240. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  241. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  242. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  243. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  244. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  245. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  246. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  247. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  248. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  249. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  250. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  251. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  252. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  253. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  254. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  255. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  256. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  257. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  258. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  259. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  260. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  261. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  262. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  263. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  264. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  265. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  266. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  267. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  268. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  269. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  270. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  271. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  272. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  273. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  274. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  275. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  276. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/eval/pr_triage_eval.py +0 -0
  277. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/eval/pr_triage_fixtures.json +0 -0
  278. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/README.md +0 -0
  279. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/batch_from_config.py +0 -0
  280. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/multi_prompt_t2i.py +0 -0
  281. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/sample_config.json +0 -0
  282. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/sample_prompts.txt +0 -0
  283. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/single_image_t2i.py +0 -0
  284. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/examples/workflow_chain.py +0 -0
  285. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/index.html +0 -0
  286. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/llms.txt +0 -0
  287. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/README.md +0 -0
  288. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/01_upload_image.json +0 -0
  289. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  290. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  291. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/04_archive_workflow.json +0 -0
  292. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/05_createProject.json +0 -0
  293. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/06_batchGenerateImages.json +0 -0
  294. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  295. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  296. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  297. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  298. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  299. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/12_create_scene.json +0 -0
  300. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  301. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/14_get_scene_workflows.json +0 -0
  302. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  303. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/Dockerfile.triage +0 -0
  304. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/entrypoint.sh +0 -0
  305. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/package-lock.json +0 -0
  306. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/package.json +0 -0
  307. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  308. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  309. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  310. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/canary/register_task.ps1 +0 -0
  311. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_doc_links.py +0 -0
  312. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_materiality.py +0 -0
  313. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_repo_hygiene.py +0 -0
  314. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_test_count.py +0 -0
  315. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/check_website_docs_pii.py +0 -0
  316. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/ci/generate_website_docs.py +0 -0
  317. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/debug_editor.py +0 -0
  318. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/debug_gen_settings.py +0 -0
  319. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/debug_settings.py +0 -0
  320. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/_recording_client.py +0 -0
  321. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/_spike_common.py +0 -0
  322. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/active_plan.py +0 -0
  323. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  324. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  325. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  326. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  327. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  328. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  329. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  330. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_locale_invariants.py +0 -0
  331. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  332. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_project_listing.py +0 -0
  333. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  334. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  335. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  336. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  337. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/character_create_spike.py +0 -0
  338. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/character_create_spike_v2.py +0 -0
  339. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/dump_character_selectors.js +0 -0
  340. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/incident_bundle_quality.py +0 -0
  341. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  342. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  343. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  344. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/make_project.py +0 -0
  345. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/materiality_backtest.py +0 -0
  346. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/measure_locale_probe.py +0 -0
  347. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/patch_character.py +0 -0
  348. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/skillopt/README.md +0 -0
  349. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/skillopt/harness.py +0 -0
  350. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/skillopt/tasks.json +0 -0
  351. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/sonar-local-scan.sh +0 -0
  352. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  353. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_changelog_capture.py +0 -0
  354. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  355. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  356. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  357. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_extend_model_recon.py +0 -0
  358. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  359. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_extend_route_capture.py +0 -0
  360. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
  361. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
  362. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  363. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  364. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  365. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  366. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_incident_live.py +0 -0
  367. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  368. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  369. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  370. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  371. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  372. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_locale_poison.py +0 -0
  373. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  374. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  375. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_model_inventory.py +0 -0
  376. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  377. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  378. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  379. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  380. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  381. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  382. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_patch_entity.py +0 -0
  383. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_patchright.py +0 -0
  384. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  385. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  386. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/verify_language_agnostic.py +0 -0
  387. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  388. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/dev/verify_model_attribution.py +0 -0
  389. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/README.md +0 -0
  390. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/capture_flow_traffic.py +0 -0
  391. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  392. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/memory_profile.py +0 -0
  393. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/recaptcha_mint.py +0 -0
  394. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  395. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  396. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  397. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/probe/run_probe.py +0 -0
  398. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/probe/spike_auth_matrix.py +0 -0
  399. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/record_demo.ps1 +0 -0
  400. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/smoke_image.py +0 -0
  401. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/smoke_video_editor.py +0 -0
  402. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/smoke_worker_style.py +0 -0
  403. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/scripts/verify_chrome_auth_viability.py +0 -0
  404. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/README.md +0 -0
  405. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/changelog/SKILL.md +0 -0
  406. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/check/SKILL.md +0 -0
  407. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/doc-review/SKILL.md +0 -0
  408. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/gflow-cli/SKILL.md +0 -0
  409. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/issue-assessment/SKILL.md +0 -0
  410. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/issue-resolve/SKILL.md +0 -0
  411. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/known-issues/SKILL.md +0 -0
  412. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/llm-council/SKILL.md +0 -0
  413. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/plan/SKILL.md +0 -0
  414. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/pr-council-review/SKILL.md +0 -0
  415. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/predict/SKILL.md +0 -0
  416. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/scenario/SKILL.md +0 -0
  417. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/sonar/SKILL.md +0 -0
  418. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/skills/status/SKILL.md +0 -0
  419. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/sonar-project.properties +0 -0
  420. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/__main__.py +0 -0
  421. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/_cli_helpers.py +0 -0
  422. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/__init__.py +0 -0
  423. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/_engine.py +0 -0
  424. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/_retry.py +0 -0
  425. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  426. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/character.py +0 -0
  427. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/client.py +0 -0
  428. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/dto.py +0 -0
  429. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/extend_chain.py +0 -0
  430. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/image.py +0 -0
  431. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/image_upscale.py +0 -0
  432. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/recaptcha.py +0 -0
  433. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/routes.py +0 -0
  434. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/scene.py +0 -0
  435. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  436. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/_common.py +0 -0
  437. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  438. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/base.py +0 -0
  439. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  440. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  441. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  442. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  443. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  444. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  445. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  446. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  447. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  448. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  449. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  450. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/video.py +0 -0
  451. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/api/video_extend.py +0 -0
  452. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/__init__.py +0 -0
  453. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/base.py +0 -0
  454. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/cookies.py +0 -0
  455. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/factory.py +0 -0
  456. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  457. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  458. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/strategies.py +0 -0
  459. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/auth/verification.py +0 -0
  460. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/browser_manager.py +0 -0
  461. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli.py +0 -0
  462. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_character.py +0 -0
  463. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_data.py +0 -0
  464. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_doctor.py +0 -0
  465. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_image.py +0 -0
  466. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_instructions.py +0 -0
  467. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_models.py +0 -0
  468. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_movie.py +0 -0
  469. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_project.py +0 -0
  470. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_run.py +0 -0
  471. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_scene.py +0 -0
  472. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/cli_tools.py +0 -0
  473. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/composition.py +0 -0
  474. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/config.py +0 -0
  475. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/__init__.py +0 -0
  476. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/chain_repo.py +0 -0
  477. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  478. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  479. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  480. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  481. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  482. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  483. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  484. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  485. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  486. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  487. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/models.py +0 -0
  488. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/queries.py +0 -0
  489. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/recorder.py +0 -0
  490. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/redaction.py +0 -0
  491. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/repository.py +0 -0
  492. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/data/store.py +0 -0
  493. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/diagnostics.py +0 -0
  494. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/errors.py +0 -0
  495. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/exceptions.py +0 -0
  496. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/file_integrity.py +0 -0
  497. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  498. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  499. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  500. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  501. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/image_batch.py +0 -0
  502. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/json_output.py +0 -0
  503. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/__init__.py +0 -0
  504. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/prompts.py +0 -0
  505. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/resources.py +0 -0
  506. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/server.py +0 -0
  507. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/setup.py +0 -0
  508. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  509. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/media.py +0 -0
  510. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/observability.py +0 -0
  511. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/paths.py +0 -0
  512. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/profile_lease.py +0 -0
  513. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/profile_store.py +0 -0
  514. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/redaction.py +0 -0
  515. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/services/__init__.py +0 -0
  516. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  517. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/services/character_create.py +0 -0
  518. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/services/doctor.py +0 -0
  519. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/services/mentions.py +0 -0
  520. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/storage.py +0 -0
  521. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/__init__.py +0 -0
  522. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/banned.py +0 -0
  523. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  524. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  525. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  526. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  527. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/expander.py +0 -0
  528. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/invocation.py +0 -0
  529. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/loader.py +0 -0
  530. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/registry.py +0 -0
  531. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/runtime.py +0 -0
  532. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/tools/spec.py +0 -0
  533. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/ui/app.py +0 -0
  534. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/ui/server.py +0 -0
  535. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/update_check.py +0 -0
  536. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/winsec.py +0 -0
  537. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/worker/codec.py +0 -0
  538. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/worker/daemon.py +0 -0
  539. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/src/gflow_cli/worker/queue.py +0 -0
  540. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tasks/lessons.md +0 -0
  541. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/test_assets/sample_batch.json +0 -0
  542. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/test_assets/sample_batch.tsv +0 -0
  543. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/test_assets/sample_batch_invalid.tsv +0 -0
  544. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/__init__.py +0 -0
  545. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/__init__.py +0 -0
  546. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/fixtures/character_gen_response.json +0 -0
  547. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  548. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  549. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  550. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  551. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_bearer_redaction.py +0 -0
  552. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_character.py +0 -0
  553. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client.py +0 -0
  554. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_character.py +0 -0
  555. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_delete_characters.py +0 -0
  556. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_errors.py +0 -0
  557. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_extend.py +0 -0
  558. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_generate_character.py +0 -0
  559. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_image.py +0 -0
  560. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_incidents.py +0 -0
  561. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_launch_kwargs.py +0 -0
  562. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_locale_cache.py +0 -0
  563. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_patch_entity.py +0 -0
  564. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_scene.py +0 -0
  565. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_client_upscale.py +0 -0
  566. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_concurrency.py +0 -0
  567. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_dto.py +0 -0
  568. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_engine.py +0 -0
  569. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_extend_chain.py +0 -0
  570. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_image.py +0 -0
  571. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_image_dto.py +0 -0
  572. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_image_upscale.py +0 -0
  573. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  574. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_recaptcha.py +0 -0
  575. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_retry.py +0 -0
  576. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_routes.py +0 -0
  577. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_routes_character.py +0 -0
  578. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_routes_locale.py +0 -0
  579. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_routes_scene.py +0 -0
  580. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_sapisidhash_helper.py +0 -0
  581. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_scene_models.py +0 -0
  582. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_video.py +0 -0
  583. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_video_extend.py +0 -0
  584. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_video_request.py +0 -0
  585. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/test_video_status_poll.py +0 -0
  586. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/__init__.py +0 -0
  587. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/conftest.py +0 -0
  588. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/drivers/__init__.py +0 -0
  589. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  590. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/drivers/test_classic.py +0 -0
  591. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/drivers/test_factory.py +0 -0
  592. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  593. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  594. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_base.py +0 -0
  595. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_bearer.py +0 -0
  596. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_common.py +0 -0
  597. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  598. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_factory.py +0 -0
  599. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_fingerprint.py +0 -0
  600. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_locale_navigation.py +0 -0
  601. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_mode_control.py +0 -0
  602. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  603. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_navigation_settled.py +0 -0
  604. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  605. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_policy_400.py +0 -0
  606. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_sapisidhash.py +0 -0
  607. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  608. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_transport_timeout.py +0 -0
  609. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  610. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  611. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  612. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  613. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  614. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/strategies/test_factory.py +0 -0
  615. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/strategies/test_strategies.py +0 -0
  616. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/test_cookies.py +0 -0
  617. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/test_real_chrome.py +0 -0
  618. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/test_verification.py +0 -0
  619. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/auth/test_windows_acl.py +0 -0
  620. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  621. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/__init__.py +0 -0
  622. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_auth_status.py +0 -0
  623. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_auth_list.py +0 -0
  624. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_character.py +0 -0
  625. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_character_create.py +0 -0
  626. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_data.py +0 -0
  627. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_data_errors.py +0 -0
  628. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  629. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_data_sync.py +0 -0
  630. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_doctor.py +0 -0
  631. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_image.py +0 -0
  632. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  633. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  634. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_image_upscale.py +0 -0
  635. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  636. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_instructions.py +0 -0
  637. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_models.py +0 -0
  638. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_movie.py +0 -0
  639. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_run.py +0 -0
  640. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_scene.py +0 -0
  641. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_tools.py +0 -0
  642. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_cli_video_extend.py +0 -0
  643. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_error_handling.py +0 -0
  644. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_failure_funnel.py +0 -0
  645. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_helpers.py +0 -0
  646. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_incident_output.py +0 -0
  647. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  648. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_predictable_output.py +0 -0
  649. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  650. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_settings_validation.py +0 -0
  651. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  652. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/composition/test_character.py +0 -0
  653. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/composition/test_compose_prompt.py +0 -0
  654. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/composition/test_handoff.py +0 -0
  655. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/composition/test_style_variants.py +0 -0
  656. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/composition/test_style_variants_e2e.py +0 -0
  657. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/conftest.py +0 -0
  658. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/__init__.py +0 -0
  659. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_chain_repo.py +0 -0
  660. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_failure_recording.py +0 -0
  661. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_find_incomplete_character.py +0 -0
  662. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_models.py +0 -0
  663. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_null_columns_stay_null.py +0 -0
  664. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_packaging.py +0 -0
  665. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_recorder.py +0 -0
  666. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_recorder_character.py +0 -0
  667. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_redaction.py +0 -0
  668. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_repository.py +0 -0
  669. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_scene_persistence.py +0 -0
  670. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_settings_and_errors.py +0 -0
  671. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_store.py +0 -0
  672. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/data/test_store_migrations.py +0 -0
  673. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/dev/test_recording_client.py +0 -0
  674. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/__init__.py +0 -0
  675. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  676. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  677. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  678. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  679. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  680. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_daemon_e2e.py +0 -0
  681. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  682. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  683. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  684. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  685. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  686. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  687. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_scene_compose_live.py +0 -0
  688. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  689. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_tools_e2e.py +0 -0
  690. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_transports_e2e.py +0 -0
  691. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  692. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  693. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/__init__.py +0 -0
  694. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/asset_tagging.feature +0 -0
  695. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/auth.feature +0 -0
  696. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/auth_login.feature +0 -0
  697. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/character_create.feature +0 -0
  698. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/character_read.feature +0 -0
  699. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/conftest.py +0 -0
  700. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/duration_tab_drift.feature +0 -0
  701. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/entity_provenance.feature +0 -0
  702. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/image.feature +0 -0
  703. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/image_batch_references.feature +0 -0
  704. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/image_upscale.feature +0 -0
  705. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/incident_diagnostics.feature +0 -0
  706. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/instructions.feature +0 -0
  707. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/locale_picker_include.feature +0 -0
  708. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/mcp_tasks.feature +0 -0
  709. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/media_picker_tiers.feature +0 -0
  710. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/output_hardening.feature +0 -0
  711. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_asset_tagging_steps.py +0 -0
  712. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_auth_login_steps.py +0 -0
  713. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_auth_steps.py +0 -0
  714. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_character_create_steps.py +0 -0
  715. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_character_read_steps.py +0 -0
  716. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_image_steps.py +0 -0
  717. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_image_upscale_steps.py +0 -0
  718. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  719. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_instructions_steps.py +0 -0
  720. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  721. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  722. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  723. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_output_hardening_steps.py +0 -0
  724. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_step_collision_guard.py +0 -0
  725. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  726. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/test_video_chain_steps.py +0 -0
  727. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/video_agent_ui.feature +0 -0
  728. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/features/video_chain.feature +0 -0
  729. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/__init__.py +0 -0
  730. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/changelog_modal_page.html +0 -0
  731. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/doctor_env.py +0 -0
  732. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/flow_model_inventory.json +0 -0
  733. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  734. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/listing_payload.py +0 -0
  735. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/fixtures/seeded_catalog.py +0 -0
  736. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/__init__.py +0 -0
  737. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/test_grading.py +0 -0
  738. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/test_model.py +0 -0
  739. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/test_model_governance.py +0 -0
  740. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/test_registry.py +0 -0
  741. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/flow_selectors/test_report.py +0 -0
  742. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/image_batch/__init__.py +0 -0
  743. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/image_batch/test_image_manifest.py +0 -0
  744. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/image_batch/test_jitter_config.py +0 -0
  745. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/image_batch/test_observability_events.py +0 -0
  746. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/__init__.py +0 -0
  747. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/conftest.py +0 -0
  748. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/constants.py +0 -0
  749. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/test_expander_gateway.py +0 -0
  750. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/test_storage_gcs.py +0 -0
  751. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/integration/test_storage_s3.py +0 -0
  752. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/__init__.py +0 -0
  753. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/conftest.py +0 -0
  754. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_auth_status_tool.py +0 -0
  755. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_cli_parity.py +0 -0
  756. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_error_funnel.py +0 -0
  757. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_http_transport.py +0 -0
  758. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_known_issues_resource.py +0 -0
  759. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_no_spend.py +0 -0
  760. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  761. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_resources.py +0 -0
  762. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_setup.py +0 -0
  763. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_stdio_transport.py +0 -0
  764. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_tasks_extension.py +0 -0
  765. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_tools_helpers.py +0 -0
  766. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/mcp/test_tools_instructions.py +0 -0
  767. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  768. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_canary_classify.py +0 -0
  769. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_canary_reexec.py +0 -0
  770. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  771. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_check_materiality.py +0 -0
  772. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  773. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_check_test_count.py +0 -0
  774. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  775. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_codex_plugin.py +0 -0
  776. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_generate_website_docs.py +0 -0
  777. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  778. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_materiality_backtest.py +0 -0
  779. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/scripts/test_workflow_hardening.py +0 -0
  780. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/__init__.py +0 -0
  781. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_catalog_sync.py +0 -0
  782. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_character_create_redaction.py +0 -0
  783. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_character_create_saga.py +0 -0
  784. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  785. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_doctor.py +0 -0
  786. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_media_attribution.py +0 -0
  787. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_mentions_observability.py +0 -0
  788. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_mentions_parse.py +0 -0
  789. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_mentions_resolve.py +0 -0
  790. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/services/test_resolve_and_apply.py +0 -0
  791. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/smoke/__init__.py +0 -0
  792. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  793. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_auth.py +0 -0
  794. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_browser_manager.py +0 -0
  795. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_cli_data.py +0 -0
  796. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_cli_project.py +0 -0
  797. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_config.py +0 -0
  798. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_conftest_isolation.py +0 -0
  799. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_data_queries.py +0 -0
  800. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_bundle.py +0 -0
  801. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_events.py +0 -0
  802. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_journal.py +0 -0
  803. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_recorder.py +0 -0
  804. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_retention.py +0 -0
  805. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_diagnostics_sanitize.py +0 -0
  806. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_documentation_gate.py +0 -0
  807. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_duration_tab_drift.py +0 -0
  808. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_entity_provenance.py +0 -0
  809. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_errors.py +0 -0
  810. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_errors_classification.py +0 -0
  811. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_image_batch_references.py +0 -0
  812. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_incident_generation_requests.py +0 -0
  813. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_json_output.py +0 -0
  814. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_marker_registry.py +0 -0
  815. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_media.py +0 -0
  816. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_observability.py +0 -0
  817. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_overlay_banner_dismissal.py +0 -0
  818. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_paths.py +0 -0
  819. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_playwright_pin.py +0 -0
  820. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_profile_lease.py +0 -0
  821. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_profile_lease_subprocess.py +0 -0
  822. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_profile_store.py +0 -0
  823. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_profile_store_locale.py +0 -0
  824. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_project_list_urls.py +0 -0
  825. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_self_documenting_errors.py +0 -0
  826. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_smoke.py +0 -0
  827. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/test_update_check.py +0 -0
  828. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/__init__.py +0 -0
  829. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_banned.py +0 -0
  830. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_expander.py +0 -0
  831. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_invocation.py +0 -0
  832. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_loader.py +0 -0
  833. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_registry.py +0 -0
  834. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_runtime.py +0 -0
  835. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/tools/test_spec.py +0 -0
  836. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/ui/test_app.py +0 -0
  837. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_codec.py +0 -0
  838. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_daemon.py +0 -0
  839. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  840. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_queue.py +0 -0
  841. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_queue_multiprocess.py +0 -0
  842. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/tests/worker/test_queue_reconciliation.py +0 -0
  843. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  844. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/ARCHITECTURE.md +0 -0
  845. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/AUTHENTICATION.md +0 -0
  846. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/CHARACTER.md +0 -0
  847. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/CONFIGURATION.md +0 -0
  848. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/DATA_LAYER.md +0 -0
  849. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  850. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/INSTRUCTIONS.md +0 -0
  851. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  852. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  853. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/SECURITY.md +0 -0
  854. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/TOOLS.md +0 -0
  855. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/agents.md +0 -0
  856. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/index.md +0 -0
  857. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/installation.md +0 -0
  858. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/onboarding-mockup.html +0 -0
  859. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/onboarding.md +0 -0
  860. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/docs/stylesheets/extra.css +0 -0
  861. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/mkdocs.yml +0 -0
  862. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/requirements.in +0 -0
  863. {gflow_cli-0.64.0 → gflow_cli-0.65.0}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.64.0",
3
+ "version": "0.65.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -0,0 +1,89 @@
1
+ name: Star history watch
2
+
3
+ # ── Why this exists ──────────────────────────────────────────────────────────
4
+ # The star-history chart in README.md is the project's front door — it renders on
5
+ # GitHub and on the PyPI project page. When it breaks it does so SILENTLY: the
6
+ # endpoint answers HTTP 200 with `image/svg+xml`, and the body is a "GitHub
7
+ # restricted access to star data" placard instead of a chart. Every status-code
8
+ # check passes. That is how it stayed broken from 2026-08-30 to 2026-09-02 with
9
+ # no signal — a human noticed it in a browser.
10
+ #
11
+ # The chart depends on the `sealed_token` param surviving in the README URL
12
+ # (GitHub restricted the public /stargazers endpoint on 2026-06-30; star-history's
13
+ # per-repo cache expires in under 3 days without a token-bearing request). So this
14
+ # probes for the two ways it dies: the token gets stripped, or the underlying PAT
15
+ # expires or is revoked.
16
+ #
17
+ # The URL is read out of README.md rather than hardcoded here, so the probe can
18
+ # never drift from what is actually shipped.
19
+
20
+ on:
21
+ schedule:
22
+ # Daily 06:00 UTC — an hour after the selector probe, well clear of it.
23
+ - cron: "0 6 * * *"
24
+ workflow_dispatch:
25
+
26
+ permissions:
27
+ contents: read
28
+
29
+ jobs:
30
+ probe:
31
+ name: Probe the README star-history chart
32
+ runs-on: ubuntu-latest
33
+ timeout-minutes: 5
34
+ if: github.repository == 'ffroliva/gflow-cli'
35
+ steps:
36
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
37
+ with:
38
+ persist-credentials: false
39
+
40
+ - name: Fetch each star-history URL in README.md and inspect the SVG body
41
+ run: |
42
+ set -uo pipefail
43
+ urls=$(grep -o 'https://api\.star-history\.com/chart?[^"]*' README.md | sort -u)
44
+ if [ -z "$urls" ]; then
45
+ echo "::error::No star-history URL found in README.md. If the chart was removed on"
46
+ echo "::error::purpose, delete this workflow too."
47
+ exit 1
48
+ fi
49
+
50
+ failed=0
51
+ while IFS= read -r url; do
52
+ # Redact the sealed token before anything reaches the public log.
53
+ safe=$(printf '%s' "$url" | sed 's/sealed_token=.\{8\}.*/sealed_token=<redacted>/')
54
+ echo "── $safe"
55
+
56
+ case "$url" in
57
+ *sealed_token=*) ;;
58
+ *)
59
+ echo "::error::sealed_token is missing from this URL. A tokenless chart reverts to"
60
+ echo "::error::the restriction placard within ~3 days. See the comment in README.md."
61
+ failed=1
62
+ ;;
63
+ esac
64
+
65
+ # Cache-bust so we measure the live endpoint, not star-history's warm cache.
66
+ code=$(curl -sS --max-time 30 -o body.svg -w '%{http_code}' "$url&cb=$GITHUB_RUN_ID") || {
67
+ echo "::warning::curl failed — treating as a transient star-history outage, not a token problem."
68
+ continue
69
+ }
70
+ bytes=$(wc -c < body.svg)
71
+ echo " http=$code bytes=$bytes"
72
+
73
+ if [ "$code" != "200" ]; then
74
+ echo "::warning::HTTP $code from star-history — likely their outage, not our token."
75
+ continue
76
+ fi
77
+ # The whole point: a 200 is not proof. Read the SVG text.
78
+ if grep -qi 'restricted access to star data' body.svg; then
79
+ echo "::error::Chart is serving the GitHub restriction placard. The sealed token is"
80
+ echo "::error::present but not working — the underlying PAT has most likely expired or"
81
+ echo "::error::been revoked. Mint a fine-grained PAT (metadata:read on this repo), seal"
82
+ echo "::error::it at star-history.com, and replace the sealed_token param in README.md."
83
+ failed=1
84
+ else
85
+ echo " ✅ real chart"
86
+ fi
87
+ done <<< "$urls"
88
+
89
+ exit "$failed"
@@ -7,6 +7,95 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.65.0] — 2026-09-02
11
+
12
+ ### Fixed
13
+
14
+ - **`gflow video chain` and `gflow movie run` died MID-SPEND on `duration` × `model`
15
+ ([#634](https://github.com/ffroliva/gflow-cli/issues/634),
16
+ [#635](https://github.com/ffroliva/gflow-cli/issues/635)).** The same defect
17
+ [#632](https://github.com/ffroliva/gflow-cli/pull/632) fixed for single-clip i2v, but
18
+ on these two surfaces it crashed *after* earlier links or scenes had already rendered
19
+ and billed — surfacing as exit 1 `"Unexpected error"` with the explanation lost.
20
+
21
+ For chains it was not an occasional mismatch but a **guaranteed** crash:
22
+ `supports_duration()` is True for `omni_flash` alone, and chains reject `omni_flash`, so
23
+ no model a chain can use has a duration control. Every manifest `duration` was
24
+ unsatisfiable by construction — **including the one shipped as the documented example**
25
+ in `docs/USAGE.md`, which a test pinned as valid.
26
+
27
+ Tracing it surfaced a second hole: the `omni_flash` rejection only ever tested the
28
+ *chain-level* model, while `_build_link_request` prefers a per-link override — so
29
+ `"model": "omni-flash"` on a link walked past the invariant. Both now validate every
30
+ link's effective model before link 0 renders, and `--dry-run` refuses what the real run
31
+ refuses.
32
+
33
+ **BREAKING:** a `movie.toml` scene pairing a Veo model with a `duration` parsed before
34
+ and now fails at parse with exit 11. That combination could never have rendered; it
35
+ previously failed later and more expensively. Scene `duration` requires
36
+ `model = "omni-flash"`.
37
+
38
+ - **`gflow video i2v --duration` with no `--model` died as `"Unexpected error"`
39
+ ([#630](https://github.com/ffroliva/gflow-cli/issues/630)).** An omitted `--model` on
40
+ i2v is not "no model" — it binds `veo-lite`, which renders no duration control, so the
41
+ guard was bypassed in exactly the default case and the DTO's bare `ValueError` escaped
42
+ as exit 1. It now exits 2 naming the model and the fix. MCP had the same hole and
43
+ queued the task before failing; `gflow_generate_video` now returns a 400 up front.
44
+
45
+ - **The `referenceEntity` guard was unobservable, and its e2e could not fail
46
+ ([#620](https://github.com/ffroliva/gflow-cli/issues/620)).**
47
+ `tests/e2e/test_entity_smuggling_e2e.py` wrapped both checks in `if bodies:` /
48
+ `if modified:`, so it passed whether the guard fired or never fired — and the second
49
+ block only *printed*. It sat through #615 without noticing.
50
+
51
+ Fixing the assertions alone would not have been enough: the guard logged only when it
52
+ *stripped* something, so "never ran" and "ran, nothing to strip" were identical silence.
53
+ `ui_automation.batch_request_intercepted` now fires on every intercepted request from a
54
+ `finally` — every exit, including the parse-error branch — carrying
55
+ `had_reference_entities`, `modified` and `outcome`. **Absence of the event is now
56
+ evidence**, which is what turned the question blocking #615's fix into a measurement.
57
+
58
+ - **Image e2e tests were priced in credits they do not cost.** `pyproject.toml` markers,
59
+ `docs/E2E_TESTING.md`'s cost table, `tests/e2e/conftest.py`, `CONTRIBUTING.md`,
60
+ `docs/USER_GUIDE.md` and ~20 strings across 13 files claimed image generation spends
61
+ credits. Only video (Veo) does; images draw on a **daily cap**, which is a rate limit,
62
+ not a charge. `scripts/canary/run_canary.py` carried the same error as a code constant
63
+ misnamed for four of its five entries (`_CREDIT_MARKERS` → `_MANUAL_ONLY_MARKERS`,
64
+ behaviour unchanged — the refusal is about not driving a live browser unattended). A
65
+ cost model that overstates the price of a free test discourages running it, and the test
66
+ it discouraged is the one that would have caught #615.
67
+
68
+ - **The `referenceEntity` guard never ran, on any image or video generation
69
+ ([#615](https://github.com/ffroliva/gflow-cli/issues/615)).**
70
+ `_intercept_reference_entities` strips character entities the caller did not
71
+ request, so a "poisoned" entity left in the Flow composer cannot smuggle itself
72
+ into an unrelated generation. It had never fired once, on any released version.
73
+
74
+ The route glob `**/batchGenerateImages` requires the final path segment to equal
75
+ `batchGenerateImages`, but the real endpoint is `.../flowMedia:batchGenerateImages`
76
+ — so it could never match. The **video** guard was dead for the same reason
77
+ (`.../video:batchAsyncGenerateVideoText`), which the original report does not
78
+ mention. Registration also moved from the page to the browser context, which
79
+ covers worker-delegated requests the page level cannot observe.
80
+
81
+ The failure was invisible because the response listener does a substring test and
82
+ kept working normally, and because the guard logged only when it *stripped*
83
+ something — so "never ran" and "ran, nothing to strip" were identical silence. It
84
+ failed **open**, quietly. Reported by
85
+ [@DioServis](https://github.com/DioServis), who separated both causes.
86
+
87
+ **Verified live**, A/B-controlled at zero credits: with the fix absent the guard
88
+ never fired and the test failed; with it present the guard fired and the test
89
+ passed — same account, same prompt, one variable. That also settles whether Flow
90
+ delegates to a dedicated Web Worker (it does; `context.route` suffices) and
91
+ confirms the request rewrite does not corrupt the body. See
92
+ [docs/LIVE_VERIFICATION_reference_entity_guard.md](docs/LIVE_VERIFICATION_reference_entity_guard.md).
93
+
94
+ **Coverage is partial by construction:** direct-wire routes issued through
95
+ Playwright's `APIRequestContext` are not routable at all and bypass the guard
96
+ regardless of matcher — tracked in
97
+ [#619](https://github.com/ffroliva/gflow-cli/issues/619).
98
+
10
99
  ## [0.64.0] — 2026-09-02
11
100
 
12
101
  ### Added
@@ -3570,7 +3659,8 @@ shell-script template that branches on these codes.
3570
3659
 
3571
3660
  First skeleton. Not functional end-to-end yet.
3572
3661
 
3573
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...HEAD
3662
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.65.0...HEAD
3663
+ [0.65.0]: https://github.com/ffroliva/gflow-cli/compare/v0.64.0...v0.65.0
3574
3664
  [0.64.0]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...v0.64.0
3575
3665
  [0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
3576
3666
  [0.62.1]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...v0.62.1
@@ -55,7 +55,7 @@ def test_parse_uuid_from_url(): ...
55
55
  async def test_upload_returns_asset(): ...
56
56
 
57
57
  @pytest.mark.e2e # Hits the real Flow API. Requires GFLOW_CLI_E2E_PROFILE env var.
58
- @pytest.mark.e2e_image # Cost sub-marker: spends ~1 Imagen credit.
58
+ @pytest.mark.e2e_image # Cost sub-marker: zero credits; draws on the daily image cap.
59
59
  async def test_full_t2i_roundtrip(): ...
60
60
 
61
61
  @pytest.mark.e2e
@@ -71,14 +71,14 @@ export GFLOW_CLI_E2E_PROFILE=<profile-name> # name of a logged-in profile
71
71
  # Zero-credit sanity check (auth + health)
72
72
  uv run pytest -m e2e_auth -v
73
73
 
74
- # Single image (1 Imagen credit)
74
+ # Single image (zero credits; daily image cap)
75
75
  uv run pytest -m "e2e_image and not e2e_batch" -v
76
76
 
77
77
  # Full regression (all credits)
78
78
  GFLOW_CLI_E2E_RUN_VIDEO=1 uv run pytest -m e2e -v
79
79
  ```
80
80
 
81
- E2e tests spend real Veo/Imagen credits. Video tests default to opt-out — set
81
+ E2e video tests spend real Veo credits (image tests are free, daily-capped). Video tests default to opt-out — set
82
82
  `GFLOW_CLI_E2E_RUN_VIDEO=1` to include them. Run the full suite on `develop`
83
83
  before opening a release PR to `main`.
84
84
 
@@ -305,6 +305,35 @@ incident bundle's `ui.json` carries the same data). Attach it to
305
305
  [#493](https://github.com/ffroliva/gflow-cli/issues/493) — that would indicate a
306
306
  state genuinely different from the sidebar one.
307
307
 
308
+ ### The referenceEntity guard covers browser-driven generation only
309
+
310
+ - **Status:** **Open** — structural, tracked in
311
+ [#619](https://github.com/ffroliva/gflow-cli/issues/619)
312
+ - **Severity:** Low today · **Affects:** any future direct-wire route that carries
313
+ `referenceEntities`
314
+
315
+ `_intercept_reference_entities` strips character entities the caller did not request. As
316
+ of v0.65.0 it **does** run — it never had before
317
+ ([#615](https://github.com/ffroliva/gflow-cli/issues/615)), and the fix is A/B-verified
318
+ live (see
319
+ [LIVE_VERIFICATION_reference_entity_guard](docs/LIVE_VERIFICATION_reference_entity_guard.md)).
320
+
321
+ But it guards by registering a Playwright route handler, so it can only ever observe
322
+ **browser-initiated** traffic. Every direct-wire route goes through `client._post_json`,
323
+ which issues the request via `page.request.post` — Playwright's `APIRequestContext`. Those
324
+ calls leave from the Python side using the browser context's cookies and never enter the
325
+ browser's network stack, so **no route handler observes them, at any level**. This is
326
+ Playwright behaving as designed, not a bug in our usage.
327
+
328
+ **It does not bite today:** no direct-wire route currently sends `referenceEntities`. It is
329
+ recorded because the coverage gap is invisible from the outside — the guard looks
330
+ comprehensive and is not — and because it is the same fail-open shape as #615 one layer
331
+ down. Any new direct-wire route that carries entity references would inherit the blind spot
332
+ silently.
333
+
334
+ **No workaround needed today.** If you are adding a direct-wire route that sends
335
+ `referenceEntities`, filter them at the call site rather than relying on the guard.
336
+
308
337
  ### Flow's new full-page media-library UI breaks entity attach (A/B rollout)
309
338
 
310
339
  - **Status:** **Open** — Flow-side staged rollout; tracked in
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.64.0
3
+ Version: 0.65.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
@@ -229,9 +229,16 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
229
229
 
230
230
  ### Star history
231
231
 
232
+ <!-- DO NOT strip `sealed_token` from the URLs below. GitHub restricted the public
233
+ /stargazers endpoint (2026-06-30), so star-history can only build this chart from a
234
+ token-authenticated request. Its per-repo cache expires in <3 days, so a tokenless
235
+ URL renders a "GitHub restricted access to star data" placard — served as HTTP 200,
236
+ which is why nothing catches it. `.github/workflows/star-history-watch.yml` probes
237
+ for exactly that. The token is sealed with star-history's key and grants metadata
238
+ read on a public repo; it is safe in a public README, and they recommend it. -->
232
239
  <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" />
240
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left&sealed_token=7kTiE_HExjjY2aT7O-_hMxY_Mf6n-ET17mi_RXcRjCSS5rHSBDMd7xFYCzT_yaXhAXrgF8AGTQc6mny_qfuJc7473KGqb-5U41Dpu-tpZIS1IYl-xVQR9ziGJtL0KWQVyWZU1IoUmLWwo43PhgVTo4MJfmWOvluFJq2zlGxE_iLl9wMRgpwQaiC4ufOK" />
241
+ <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&sealed_token=7kTiE_HExjjY2aT7O-_hMxY_Mf6n-ET17mi_RXcRjCSS5rHSBDMd7xFYCzT_yaXhAXrgF8AGTQc6mny_qfuJc7473KGqb-5U41Dpu-tpZIS1IYl-xVQR9ziGJtL0KWQVyWZU1IoUmLWwo43PhgVTo4MJfmWOvluFJq2zlGxE_iLl9wMRgpwQaiC4ufOK" />
235
242
  </picture>
236
243
 
237
244
  If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
@@ -158,9 +158,16 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
158
158
 
159
159
  ### Star history
160
160
 
161
+ <!-- DO NOT strip `sealed_token` from the URLs below. GitHub restricted the public
162
+ /stargazers endpoint (2026-06-30), so star-history can only build this chart from a
163
+ token-authenticated request. Its per-repo cache expires in <3 days, so a tokenless
164
+ URL renders a "GitHub restricted access to star data" placard — served as HTTP 200,
165
+ which is why nothing catches it. `.github/workflows/star-history-watch.yml` probes
166
+ for exactly that. The token is sealed with star-history's key and grants metadata
167
+ read on a public repo; it is safe in a public README, and they recommend it. -->
161
168
  <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" />
169
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left&sealed_token=7kTiE_HExjjY2aT7O-_hMxY_Mf6n-ET17mi_RXcRjCSS5rHSBDMd7xFYCzT_yaXhAXrgF8AGTQc6mny_qfuJc7473KGqb-5U41Dpu-tpZIS1IYl-xVQR9ziGJtL0KWQVyWZU1IoUmLWwo43PhgVTo4MJfmWOvluFJq2zlGxE_iLl9wMRgpwQaiC4ufOK" />
170
+ <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&sealed_token=7kTiE_HExjjY2aT7O-_hMxY_Mf6n-ET17mi_RXcRjCSS5rHSBDMd7xFYCzT_yaXhAXrgF8AGTQc6mny_qfuJc7473KGqb-5U41Dpu-tpZIS1IYl-xVQR9ziGJtL0KWQVyWZU1IoUmLWwo43PhgVTo4MJfmWOvluFJq2zlGxE_iLl9wMRgpwQaiC4ufOK" />
164
171
  </picture>
165
172
 
166
173
  If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
@@ -31,6 +31,9 @@ log events (`structlog` JSON lines):
31
31
  | `ui_automation.batch_response_dropped_project_id_mismatch` | URL contained `batchGenerateImages` but project-id filter rejected it | `url`, `filter_project_id` |
32
32
  | `ui_automation.batch_response_captured` | Response passed all filters AND parsed cleanly | `url`, `status` |
33
33
  | `ui_automation.batch_response_parse_failed` | Listener fired but `response.json()` raised | `url`, `error` |
34
+ | `ui_automation.batch_request_intercepted` | EVERY generation request the referenceEntity guard observes, on every exit including a parse error. **Its ABSENCE means no route handler saw the submit at all** — a dead route matcher, or worker delegation the registered level cannot observe (#615, #620) | `url`, `had_reference_entities`, `modified`, `outcome`, `expected_entities` |
35
+ | `ui_automation.batch_request_modified` | The guard actually STRIPPED an unrequested `referenceEntities` entry | `url`, `reason`, `expected_entities` |
36
+ | `ui_automation.batch_request_modify_failed` | The guard ran but raised (e.g. a body it could not decode); the request is forwarded unchanged | `url`, `error` |
34
37
  | `ui_automation.batch_403_body` | A `batchGenerateImages` response returned HTTP 403; body prefix logged for WAF / reCAPTCHA diagnosis (subsequently raises `WafRejectionError`) | `body_prefix`, `route` |
35
38
 
36
39
  If `prompt_submitted` is followed by NO `batch_response_seen` log within the
@@ -91,7 +91,7 @@ See [docs/GITHUB.md § SonarCloud Quality Gate](GITHUB.md#sonarcloud-quality-gat
91
91
 
92
92
  ### E2e gate before merging develop → main
93
93
 
94
- E2e tests require a live authenticated profile and are **not run in CI** (they spend real Veo/Imagen credits). Before opening a `develop → main` release PR:
94
+ E2e tests require a live authenticated profile and are **not run in CI** (video tests spend real Veo credits; image tests cost nothing but draw on a daily image cap). Before opening a `develop → main` release PR:
95
95
 
96
96
  ```bash
97
97
  export GFLOW_CLI_E2E_PROFILE=<your-profile-name>
@@ -17,8 +17,8 @@ layers. The dominant constraint is not developer time or CI compute but
17
17
  Layer 0 — Static Analysis ruff · pyright · detect-secrets
18
18
  Layer 1 — Unit Tests pure logic, no I/O
19
19
  Layer 2 — Integration Tests real Provider plumbing, mocked HTTP/browser
20
- Layer 3 — Smoke Tests 1 Imagen credit, golden path only (post-release)
21
- Layer 4 — Full E2E Tests real credits, all strategies (pre-release gate)
20
+ Layer 3 — Smoke Tests image gen only — ZERO credits, golden path (post-release)
21
+ Layer 4 — Full E2E Tests real Veo credits (video only), all strategies (pre-release gate)
22
22
  ```
23
23
 
24
24
  **Only Layers 3 and 4 ever hit the real Flow API.**
@@ -46,11 +46,18 @@ Tests in `tests/smoke/` carry `pytest.mark.smoke`.
46
46
  Each e2e test also carries **one or more cost sub-markers** so you can run
47
47
  exactly the cost tier you can afford:
48
48
 
49
+ > **Image generation costs ZERO Flow credits.** Only video (Veo) spends credits.
50
+ > Images are limited by a **daily cap**, not billed — hitting it is a rate limit,
51
+ > not a charge. This table said "~1 Imagen credit" for years, which discouraged
52
+ > running tests that were always free; that stale claim is what left the #615
53
+ > `referenceEntity` guard unverified while it silently did nothing. Confirmed with
54
+ > the maintainer 2026-09-02.
55
+
49
56
  | Marker | Credit cost | Typical wallclock | When to use |
50
57
  |---|---|---|---|
51
58
  | `e2e_auth` | 0 | < 30 s | auth/session/health-check — always safe to run |
52
- | `e2e_image` | ~1 Imagen | 30–120 s | text-to-image or image-to-image golden path |
53
- | `e2e_batch` | N × Imagen | 2–10 min | batch image generation |
59
+ | `e2e_image` | **0** (daily cap) | 30–120 s | text-to-image or image-to-image golden path |
60
+ | `e2e_batch` | **0** (daily cap) | 2–10 min | batch image generation |
54
61
  | `e2e_video` | ~1 Veo | 1–10 min | text-to-video or image-to-video |
55
62
  | `e2e_data` | (same as above) | +0 s | DB persistence check — combined with image/video |
56
63
 
@@ -61,9 +68,9 @@ data-layer assertions depend on a real generation having run first.
61
68
 
62
69
  ```
63
70
  e2e ─┬─ e2e_auth (auth/session, health check — zero credits)
64
- ├─ e2e_image (t2i, i2i — 1 Imagen credit per test)
71
+ ├─ e2e_image (t2i, i2i — ZERO credits, daily cap only)
65
72
  │ └─ e2e_data (+ DB assertions)
66
- ├─ e2e_batch (batch t2i — N Imagen credits)
73
+ ├─ e2e_batch (batch t2i — ZERO credits, daily cap only)
67
74
  └─ e2e_video (t2v, i2v — 1 Veo credit per test)
68
75
  └─ e2e_data (+ DB assertions)
69
76
  ```
@@ -79,7 +86,7 @@ e2e ─┬─ e2e_auth (auth/session, health check — zero credits)
79
86
  | `GFLOW_CLI_E2E_VIDEO_ASPECT` | `"landscape"` | Aspect ratio for video e2e: `landscape` or `portrait`. |
80
87
  | `GFLOW_CLI_E2E_VIDEO_MODEL` | `"omni-flash"` | Veo model for i2v tests: `omni-flash` or `veo-fast`. |
81
88
  | `GFLOW_CLI_E2E_VIDEO_DURATION` | `"4"` | Seconds of video to generate in i2v tests (minimum credit unit). |
82
- | `GFLOW_CLI_E2E_RUN_ENTITY_PROV` | `"0"` | Set to `"1"` to run the entity-provenance e2e (#402) — asserts a generation Flow actually accepted records its `entity_ids` / `entity_names` in `operations.metadata_json`. Opt-in because it spends Imagen credits. |
89
+ | `GFLOW_CLI_E2E_RUN_ENTITY_PROV` | `"0"` | Set to `"1"` to run the entity-provenance e2e (#402) — asserts a generation Flow actually accepted records its `entity_ids` / `entity_names` in `operations.metadata_json`. Opt-in because it drives a real browser generation (no credit cost — images are free). |
83
90
  | `GFLOW_CLI_E2E_BATCH_MANIFEST` | `test_assets/sample_batch.tsv` | TSV manifest for the batch image e2e. |
84
91
  | `GFLOW_CLI_E2E_BATCH_JITTER` | `"1"` | Set to `"0"` to disable inter-request jitter in batch tests. |
85
92
  | `GFLOW_CLI_E2E_PROMPT` | *(safe default)* | Prompt override for the smoke test. |
@@ -105,7 +112,7 @@ uv run pytest -m "not e2e and not smoke and not live" -q --cov=gflow_cli
105
112
  ```bash
106
113
  export GFLOW_CLI_E2E_PROFILE=<profile-name>
107
114
 
108
- # All smoke tests (includes the 1-credit golden-path image test)
115
+ # All smoke tests (includes the golden-path image test — zero credits)
109
116
  uv run pytest -m smoke -v
110
117
 
111
118
  # Zero-credit only — account persistence check, no generation
@@ -114,7 +121,7 @@ uv run pytest -m smoke tests/smoke/test_profile_account_smoke.py -v
114
121
 
115
122
  | Smoke test | Credits | Notes |
116
123
  |---|---|---|
117
- | `test_real_flow.py` | ~1 Imagen | Full golden path; use `GFLOW_CLI_E2E_PROMPT` to override the prompt |
124
+ | `test_real_flow.py` | **0** (daily cap) | Full golden path; use `GFLOW_CLI_E2E_PROMPT` to override the prompt |
118
125
  | `test_profile_account_smoke.py` | **0** | Auth verification only; backfills `.gflow_account` for pre-v0.10 profiles |
119
126
 
120
127
  ### Layer 4 — Cost-stratified e2e runs
@@ -128,7 +135,7 @@ uv run pytest -m "e2e_auth or (e2e and e2e_data and not e2e_image and not e2e_vi
128
135
  # Cheapest live generation: single image only
129
136
  uv run pytest -m "e2e_image and not e2e_batch" -v
130
137
 
131
- # Add batch (N Imagen credits — check sample_batch.tsv for row count)
138
+ # Add batch (zero credits; consumes more of the daily image cap — see sample_batch.tsv for row count)
132
139
  uv run pytest -m "e2e_image" -v
133
140
 
134
141
  # Add video (1 Veo credit per test)
@@ -235,8 +242,10 @@ tiers (`e2e_image` / `e2e_video` / `smoke`) stay **strictly manual** via
235
242
  uv run python scripts/canary/run_canary.py --profile <name> --dry-run
236
243
  ```
237
244
 
238
- Credit-spending markers (`e2e_image`, `e2e_video`, `e2e_batch`, `e2e_character`,
239
- `smoke`) are **refused outright** — the canary never spends credits unattended.
245
+ Generation markers (`e2e_image`, `e2e_video`, `e2e_batch`, `e2e_character`,
246
+ `smoke`) are **refused outright** — the canary never drives a real generation
247
+ unattended. (Only `e2e_video` spends credits; the image tiers are refused because
248
+ they drive a live browser and draw on the daily image cap, not because they bill.)
240
249
  Run those manually via `/gflow:live-verify`.
241
250
 
242
251
  ### Schedule it
@@ -314,7 +323,7 @@ aging test.
314
323
  tests/
315
324
  ├── conftest.py # install_log_capture; auto-marker hook
316
325
  ├── smoke/
317
- │ ├── test_real_flow.py # [smoke] golden path, 1 Imagen credit
326
+ │ ├── test_real_flow.py # [smoke] golden path, ZERO credits
318
327
  │ └── test_profile_account_smoke.py # [smoke] profile account persistence — 0 credits
319
328
  └── e2e/
320
329
  ├── conftest.py # e2e_profile_dir, e2e_nosession_profile,
@@ -344,7 +353,7 @@ field bundle a user emails), which is unit-covered offline by
344
353
 
345
354
  | File | Credits | What it verifies |
346
355
  |------|---------|-----------------|
347
- | `test_real_flow.py` | 1 Imagen | Golden path: open Flow, submit prompt, save PNG, check dimensions |
356
+ | `test_real_flow.py` | **0** | Golden path: open Flow, submit prompt, save PNG, check dimensions |
348
357
  | `test_profile_account_smoke.py` | 0 | `.gflow_account` file present + valid email; `list_profiles()` surfaces `google_account`; `gflow auth list --json` includes the field |
349
358
 
350
359
  > **Real environment required.** Both smoke tests require a profile that has been
@@ -158,6 +158,10 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
158
158
  **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
159
159
  **"Was the playwright upper bound raised, and on what evidence?"** → [LIVE_VERIFICATION_playwright_1.61](LIVE_VERIFICATION_playwright_1.61.md) (**`>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0` verified 2026-08-05, 1 Imagen + 1 Veo credit** — the 2026-08-03 regression that motivated the bound does NOT reproduce on 1.61.0: a live `i2v` drove the full chain with `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live `i2i` local-ref attach passed outright [96.7s]. **1.62.0 stays excluded** — never root-caused. Also found, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0: Flow dropped the duration-tab UI, so **`--duration` is currently broken for i2v** — `UiSelectorDriftError` fires correctly [refusing rather than silently accepting Flow's default, #288] but the selector needs re-deriving; that is why the i2v proof was driven via the CLI without `--duration`, and Flow's own server-side `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT` means no finished mp4 is claimed).
160
160
  **"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
161
+ **"What was live-verified for v0.65.0?"** → [LIVE_VERIFICATION_v0.65.0](LIVE_VERIFICATION_v0.65.0.md) — the guard A/B (three runs, zero credits, control included); the `chain`/`movie` duration guards are validation that refuses **before** any transport call, so they are covered by a red state that reproduces the mid-spend crash in a test plus negative controls, and the reason they were not live-run is recorded rather than omitted.
162
+
163
+ **"Does the `referenceEntity` guard actually run, and is it a Web Worker or a Service Worker?"** → [LIVE_VERIFICATION_reference_entity_guard](LIVE_VERIFICATION_reference_entity_guard.md) — **A/B-proven live on denon82 2026-09-02, zero credits.** Control (without #618): the guard never fired and the test failed; with #618: it fired and passed. Same account, same prompt, one variable. Settles the question that held #618 — it is a **dedicated Web Worker**, so `context.route` suffices and no `service_workers="block"` is needed. Also confirms `route.continue_(post_data=...)` does not corrupt the body (both runs produced a real image). The **video** glob was equally dead, which #615 never mentions. Residual: direct-wire routes still bypass structurally (#619).
164
+
161
165
  **"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)
162
166
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
163
167
  **"What is the jitter matrix evidence for `gflow image batch`?"** → [`LIVE_VERIFICATION_image_batch.md`](LIVE_VERIFICATION_image_batch.md) — jitter matrix evidence for `gflow image batch` (always-same-project mode)
@@ -0,0 +1,92 @@
1
+ # Live verification — the `referenceEntity` guard (#615, #618, #620)
2
+
3
+ **Date:** 2026-09-02 · **Profile:** `denon82` · **Cost:** zero credits (two image
4
+ generations; images are daily-capped, not billed — see
5
+ [E2E_TESTING](E2E_TESTING.md)) · **Transport:** `ui_automation`, headed Chrome
6
+
7
+ ## What was in question
8
+
9
+ `_intercept_reference_entities` strips character entities the caller did not ask
10
+ for, so a "poisoned" entity left in the Flow composer cannot smuggle itself into
11
+ an unrelated generation. [#615](https://github.com/ffroliva/gflow-cli/issues/615)
12
+ reported that it had never run.
13
+
14
+ [PR #618](https://github.com/ffroliva/gflow-cli/pull/618) fixes two causes: the
15
+ route glob could not match the real namespaced endpoint, and registration moved
16
+ from `page.route` to `page.context.route`. It was held unmerged on one question
17
+ no offline test can answer:
18
+
19
+ > `BrowserContext.route` intercepts requests owned by a **dedicated Web Worker**,
20
+ > but **not** a **Service Worker**. If Flow delegates via a Service Worker, the
21
+ > fix is a no-op that passes every test and changes nothing in production.
22
+
23
+ ## Why this could be settled at all
24
+
25
+ The guard used to log **only** when it stripped something. "Never ran" and "ran,
26
+ nothing to strip" were byte-identical silence, so no run could distinguish them.
27
+ [PR #637](https://github.com/ffroliva/gflow-cli/pull/637) adds
28
+ `ui_automation.batch_request_intercepted`, emitted on every intercepted request
29
+ from a `finally` — every exit, including the parse-error branch. **Absence of that
30
+ event is now evidence**, which is what made this an experiment rather than an
31
+ argument.
32
+
33
+ ## The A/B
34
+
35
+ Identical test, identical account, identical prompt. One variable: whether #618's
36
+ route fix is present. Both branches carry #637's signal, or the control could not
37
+ be read.
38
+
39
+ | Branch | Route registration | Result |
40
+ |---|---|---|
41
+ | `bugfix/entity-smuggling-e2e-asserts-620` (**control**, #618 absent) | `page.route("**/batchGenerateImages")` | **FAILED** — `The referenceEntity guard never ran` |
42
+ | `scratch/e2e-615-620-proof` (#618 + #637) | `page.context.route(_GENERATION_ROUTE_RE)` | **PASSED** — guard fired |
43
+
44
+ ```
45
+ control : 1 failed in 51.25s (image generated; no batch_request_intercepted)
46
+ with fix: 1 passed in 67.72s (image generated; guard observed the submit)
47
+ ```
48
+
49
+ ## Ledger
50
+
51
+ 1. **The bug reproduces live.** The control run generated an image successfully
52
+ and the guard never saw the request. #615 is confirmed on the affected
53
+ surface, not merely reasoned about.
54
+ 2. **The fix works live.** The only changed variable is #618's matcher + level.
55
+ 3. **It is a dedicated Web Worker, not a Service Worker.** `context.route`
56
+ observes these requests. This is the answer #618 was held for; no
57
+ `service_workers="block"` is needed.
58
+ 4. **The rewrite does not corrupt the request.** Both runs produced a real image,
59
+ so `route.continue_(post_data=...)` forwards a body Flow still accepts — a path
60
+ no mock exercises and the one that would have broken generation outright.
61
+ 5. **The test discriminates.** It failed when the guard was dead and passed when
62
+ it was alive. It is not another test that cannot fail — which is precisely what
63
+ #620 was filed about.
64
+
65
+ ## Offline corroboration
66
+
67
+ The matcher half needs no account. Playwright's own `glob_to_regex_pattern`:
68
+
69
+ ```
70
+ '**/batchGenerateImages' -> ^(.*/)batchGenerateImages$
71
+ https://…/projects/{id}/flowMedia:batchGenerateImages -> NO MATCH
72
+ '**/batchAsyncGenerateVideo*' -> ^(.*/)batchAsyncGenerateVideo([^/]*)$
73
+ https://…/v1/video:batchAsyncGenerateVideoText -> NO MATCH
74
+ ```
75
+
76
+ Note the **video** guard was equally dead. #615 names only the image endpoint;
77
+ #618's substring regex covers both.
78
+
79
+ ## Residual limitations
80
+
81
+ - **Only the browser-driven path is covered.** Direct-wire routes issued through
82
+ Playwright's `APIRequestContext` are not routable at all and bypass the guard
83
+ structurally — [#619](https://github.com/ffroliva/gflow-cli/issues/619). Harmless
84
+ today (no direct-wire route sends `referenceEntities`) but it is fail-open by
85
+ construction, and any claim that "the guard protects generations" carries that
86
+ footnote.
87
+ - **Verified on the image path.** The video call site
88
+ (`ui_automation_video.py`) shares the same context manager and the same matcher,
89
+ which the offline check covers, but it was not exercised live here.
90
+ - **One account, one cohort, one locale** (`denon82`, classic UI, `hl=en`). Flow's
91
+ UI has an A/B history ([#174](https://github.com/ffroliva/gflow-cli/issues/174));
92
+ a different cohort could delegate differently.