gflow-cli 0.69.0__tar.gz → 0.70.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 (1018) hide show
  1. gflow_cli-0.70.0/.claude/commands/gflow/spike.md +10 -0
  2. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.codex-plugin/plugin.json +1 -1
  3. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.gitignore +9 -0
  4. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/AGENTS.md +116 -6
  5. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/CHANGELOG.md +164 -1
  6. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/CONTRIBUTING.md +38 -0
  7. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/KNOWN_ISSUES.md +17 -4
  8. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/PKG-INFO +1 -1
  9. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/CONFIGURATION.md +2 -2
  10. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/INDEX.md +2 -2
  11. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.69.0.md +61 -26
  12. gflow_cli-0.70.0/docs/LIVE_VERIFICATION_v0.70.0.md +143 -0
  13. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/MCP.md +14 -2
  14. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/PROJECT_STATUS.md +42 -0
  15. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/USAGE.md +22 -4
  16. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +42 -1
  17. gflow_cli-0.70.0/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +246 -0
  18. gflow_cli-0.70.0/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +464 -0
  19. gflow_cli-0.70.0/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +305 -0
  20. gflow_cli-0.70.0/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +98 -0
  21. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/pyproject.toml +1 -1
  22. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/pr_triage_autopilot.py +48 -16
  23. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/run_sandboxed_review.sh +17 -1
  24. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_release_artifacts.py +64 -0
  25. gflow_cli-0.70.0/scripts/dev/capture_migrated_attach_rpcs.py +235 -0
  26. gflow_cli-0.70.0/scripts/dev/capture_migrated_mention_gestures.py +168 -0
  27. gflow_cli-0.70.0/scripts/dev/capture_migrated_r2v_production_submit.py +293 -0
  28. gflow_cli-0.70.0/scripts/dev/capture_migrated_r2v_submit_payload.py +293 -0
  29. gflow_cli-0.70.0/scripts/dev/capture_migrated_r2v_surface.py +251 -0
  30. gflow_cli-0.70.0/scripts/dev/capture_migrated_upload_flow.py +293 -0
  31. gflow_cli-0.70.0/scripts/dev/har-spike/README.md +126 -0
  32. gflow_cli-0.70.0/scripts/dev/har-spike/capture-agent-ui.ps1 +165 -0
  33. gflow_cli-0.70.0/scripts/dev/har-spike/capture-media-scrape.ps1 +215 -0
  34. gflow_cli-0.70.0/scripts/dev/har-spike/extract_har_summary.py +169 -0
  35. gflow_cli-0.70.0/scripts/dev/har-spike/launch-flow-chrome.ps1 +104 -0
  36. gflow_cli-0.70.0/scripts/dev/har-spike/probe-agent-mode.ps1 +103 -0
  37. gflow_cli-0.70.0/scripts/dev/har-spike/probe_agent_mode.py +120 -0
  38. gflow_cli-0.70.0/scripts/dev/har-spike/run-cdp-smoke.ps1 +147 -0
  39. gflow_cli-0.70.0/scripts/dev/har-spike/start-background-capture.ps1 +218 -0
  40. gflow_cli-0.70.0/scripts/dev/har-spike/start-har-capture.ps1 +153 -0
  41. gflow_cli-0.70.0/scripts/dev/har-spike/stop-background-capture.ps1 +116 -0
  42. gflow_cli-0.70.0/scripts/dev/har-spike/stop-har-capture.ps1 +181 -0
  43. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/incident_bundle_quality.py +10 -1
  44. gflow_cli-0.70.0/scripts/dev/spike_cdp_har_without_node.py +230 -0
  45. gflow_cli-0.70.0/scripts/dev/spike_migrated_body_reference_chip.py +148 -0
  46. gflow_cli-0.70.0/scripts/dev/spike_migrated_character_body_controls.py +150 -0
  47. gflow_cli-0.70.0/scripts/dev/spike_migrated_character_editor_anchor.py +183 -0
  48. gflow_cli-0.70.0/scripts/dev/spike_migrated_character_ogiz0b_schema.py +158 -0
  49. gflow_cli-0.70.0/scripts/dev/spike_migrated_character_submit_wire.py +167 -0
  50. gflow_cli-0.70.0/scripts/dev/spike_migrated_character_surface.py +193 -0
  51. gflow_cli-0.70.0/scripts/dev/spike_migrated_image_capability.py +192 -0
  52. gflow_cli-0.70.0/scripts/dev/spike_migrated_recaptcha_mint.py +145 -0
  53. gflow_cli-0.70.0/scripts/dev/spike_migrated_vs_labs_provenance.py +195 -0
  54. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_video_tab_dom.py +1 -1
  55. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/gflow-cli/SKILL.md +1 -1
  56. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/issue-assessment/SKILL.md +24 -0
  57. gflow_cli-0.70.0/skills/spike/SKILL.md +114 -0
  58. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/SKILL.md +22 -2
  59. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/consistency.md +13 -0
  60. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/__init__.py +1 -1
  61. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/client.py +247 -17
  62. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/migrated_composer.py +285 -19
  63. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/ui_automation.py +273 -75
  64. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/real_chrome.py +17 -0
  65. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_image.py +2 -2
  66. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_video.py +3 -3
  67. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/recorder.py +15 -0
  68. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/tools.py +193 -6
  69. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/character_create.py +55 -0
  70. gflow_cli-0.70.0/tests/api/test_character_readback_fallback.py +254 -0
  71. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_image.py +40 -0
  72. gflow_cli-0.70.0/tests/api/test_client_migrated_mint.py +303 -0
  73. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/drivers/test_ui_mode.py +56 -0
  74. gflow_cli-0.70.0/tests/api/transports/test_character_model_picker.py +221 -0
  75. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_migrated_composer.py +147 -0
  76. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_migrated_dispatch.py +6 -1
  77. gflow_cli-0.70.0/tests/api/transports/test_migrated_r2v.py +300 -0
  78. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_ui_character_editor.py +52 -120
  79. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/strategies/test_strategies.py +73 -0
  80. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/autopilot/test_pr_triage_autopilot.py +86 -2
  81. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_video.py +35 -0
  82. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_find_incomplete_character.py +26 -0
  83. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/conftest.py +37 -1
  84. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_character_create_e2e.py +82 -0
  85. gflow_cli-0.70.0/tests/e2e/test_character_mcp_parity_e2e.py +105 -0
  86. gflow_cli-0.70.0/tests/e2e/test_credits_mcp_e2e.py +104 -0
  87. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_migrated_host_e2e.py +110 -1
  88. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_sidebar_recovery_e2e.py +3 -0
  89. gflow_cli-0.70.0/tests/mcp/test_character_tools.py +158 -0
  90. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_cli_parity.py +125 -5
  91. gflow_cli-0.70.0/tests/mcp/test_reference_entity_round_trip.py +120 -0
  92. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_tools_helpers.py +16 -2
  93. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_tools_wired.py +33 -3
  94. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_release_artifacts.py +76 -0
  95. gflow_cli-0.70.0/tests/scripts/test_extract_har_summary.py +166 -0
  96. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_incident_bundle_quality.py +57 -1
  97. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_character_create_saga.py +93 -0
  98. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/uv.lock +1 -1
  99. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/CONFIGURATION.md +2 -2
  100. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/KNOWN_ISSUES.md +17 -4
  101. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/MCP.md +14 -2
  102. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/USAGE.md +22 -4
  103. gflow_cli-0.69.0/tests/api/test_client_migrated_mint.py +0 -62
  104. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.agents/plugins/marketplace.json +0 -0
  105. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/README.md +0 -0
  106. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/active.md +0 -0
  107. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/branch-review.md +0 -0
  108. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/changelog.md +0 -0
  109. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/check.md +0 -0
  110. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/doc-review.md +0 -0
  111. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  112. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  113. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/known-issues.md +0 -0
  114. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/live-verify.md +0 -0
  115. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/llm-council.md +0 -0
  116. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/next.md +0 -0
  117. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/plan.md +0 -0
  118. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  119. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/predict.md +0 -0
  120. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/release.md +0 -0
  121. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/scenario.md +0 -0
  122. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/sonar.md +0 -0
  123. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.claude/commands/gflow/status.md +0 -0
  124. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.env.template +0 -0
  125. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.gitattributes +0 -0
  126. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/CODEOWNERS +0 -0
  127. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/FUNDING.yml +0 -0
  128. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  129. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/copilot-instructions.md +0 -0
  130. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/dependabot.yml +0 -0
  131. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/ci.yml +0 -0
  132. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/deps-watch.yml +0 -0
  133. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/external-pr-triage.yml +0 -0
  134. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/governance-advisory.yml +0 -0
  135. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/governance-benchmark.yml +0 -0
  136. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/labels.yml +0 -0
  137. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/main-base-guard.yml +0 -0
  138. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/pages.yml +0 -0
  139. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/release.yml +0 -0
  140. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/scorecard.yml +0 -0
  141. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/selector-probe.yml +0 -0
  142. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.github/workflows/star-history-watch.yml +0 -0
  143. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.gitleaks.toml +0 -0
  144. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.pre-commit-config.yaml +0 -0
  145. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/.secrets.baseline +0 -0
  146. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/CLAUDE.md +0 -0
  147. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/CONFIGURATION.md +0 -0
  148. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/DISCLAIMER.md +0 -0
  149. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/LICENSE +0 -0
  150. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/PLAN.md +0 -0
  151. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/README.md +0 -0
  152. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/RELEASE.md +0 -0
  153. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/ROADMAP.md +0 -0
  154. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/conftest.py +0 -0
  155. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  156. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/deploy/logrotate-pr-triage +0 -0
  157. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docker-compose.yml +0 -0
  158. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/ACCOUNT_SAFETY.md +0 -0
  159. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/AGENT_GUIDE.md +0 -0
  160. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/AGENT_UI_E2E.md +0 -0
  161. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/AGENT_UI_RECON.md +0 -0
  162. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/ARCHITECTURE.md +0 -0
  163. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  164. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/AUTHENTICATION.md +0 -0
  165. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/CHARACTER.md +0 -0
  166. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/CHARACTER_RECON.md +0 -0
  167. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/DATA_LAYER.md +0 -0
  168. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/DEBUGGING.md +0 -0
  169. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/DEMOS.md +0 -0
  170. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/DEVELOPMENT.md +0 -0
  171. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/E2E_TESTING.md +0 -0
  172. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/EXTERNAL_STORAGE.md +0 -0
  173. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/GITHUB.md +0 -0
  174. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  175. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  176. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/INSTRUCTIONS.md +0 -0
  177. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  178. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  179. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  180. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
  181. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  182. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  183. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  184. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  185. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  186. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  187. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  188. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  189. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  190. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  191. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  192. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  193. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  194. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  195. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  196. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  197. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  198. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  199. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  200. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  201. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  202. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  203. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  204. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  205. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  206. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  207. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  208. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  209. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  210. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  211. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  212. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  213. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  214. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  215. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  216. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  217. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  218. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  219. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  220. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  221. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  222. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  223. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  224. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  225. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  226. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  227. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  228. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  229. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  230. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  231. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  232. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  233. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  234. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  235. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  236. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  237. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  238. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  239. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  240. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  241. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
  242. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
  243. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
  244. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
  245. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
  246. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
  247. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
  248. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  249. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  250. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  251. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  252. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  253. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/MEDIA_LIBRARY.md +0 -0
  254. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/MOVIE.md +0 -0
  255. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/PROMPT_EXPANSION.md +0 -0
  256. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  257. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/SECURITY.md +0 -0
  258. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/TOOLS.md +0 -0
  259. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/USER_GUIDE.md +0 -0
  260. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/assets/demo-split-pf.gif +0 -0
  261. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/assets/example-run.gif +0 -0
  262. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/assets/examples.webp +0 -0
  263. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/medium_tutorial.md +0 -0
  264. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/schemas/movie-handoff.schema.json +0 -0
  265. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/sonar-cleanup-tracker.md +0 -0
  266. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/README.md +0 -0
  267. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
  268. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
  269. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
  270. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
  271. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
  272. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
  273. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
  274. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
  275. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
  276. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
  277. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
  278. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
  279. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
  280. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -0
  281. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
  282. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
  283. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
  284. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
  285. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
  286. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
  287. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
  288. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
  289. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
  290. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
  291. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
  292. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
  293. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
  294. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
  295. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
  296. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
  297. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
  298. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/release-signing.md +0 -0
  299. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
  300. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
  301. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
  302. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
  303. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
  304. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
  305. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
  306. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
  307. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
  308. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
  309. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
  310. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
  311. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
  312. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
  313. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
  314. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  315. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  316. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  317. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  318. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  319. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  320. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  321. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  322. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  323. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  324. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  325. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  326. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  327. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  328. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  329. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  330. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  331. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  332. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  333. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  334. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  335. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  336. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  337. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  338. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  339. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  340. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  341. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  342. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  343. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  344. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  345. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  346. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  347. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  348. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  349. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  350. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  351. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  352. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  353. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  354. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  355. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  356. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  357. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  358. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  359. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  360. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  361. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  362. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  363. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  364. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  365. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  366. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  367. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  368. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  369. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  370. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  371. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  372. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  373. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  374. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  375. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
  376. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
  377. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
  378. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
  379. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/eval/pr_triage_eval.py +0 -0
  380. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/eval/pr_triage_fixtures.json +0 -0
  381. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/README.md +0 -0
  382. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/batch_from_config.py +0 -0
  383. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/multi_prompt_t2i.py +0 -0
  384. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/sample_config.json +0 -0
  385. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/sample_prompts.txt +0 -0
  386. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/single_image_t2i.py +0 -0
  387. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/examples/workflow_chain.py +0 -0
  388. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/index.html +0 -0
  389. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/llms.txt +0 -0
  390. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/README.md +0 -0
  391. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/01_upload_image.json +0 -0
  392. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  393. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  394. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/04_archive_workflow.json +0 -0
  395. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/05_createProject.json +0 -0
  396. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/06_batchGenerateImages.json +0 -0
  397. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  398. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  399. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  400. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  401. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  402. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/12_create_scene.json +0 -0
  403. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  404. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/14_get_scene_workflows.json +0 -0
  405. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  406. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/Dockerfile.triage +0 -0
  407. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/entrypoint.sh +0 -0
  408. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/package-lock.json +0 -0
  409. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/package.json +0 -0
  410. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  411. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/canary/register_task.ps1 +0 -0
  412. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/canary/run_canary.py +0 -0
  413. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_council_memory.py +0 -0
  414. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_doc_links.py +0 -0
  415. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_materiality.py +0 -0
  416. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_repo_hygiene.py +0 -0
  417. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_test_count.py +0 -0
  418. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/check_website_docs_pii.py +0 -0
  419. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/ci/generate_website_docs.py +0 -0
  420. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/debug_editor.py +0 -0
  421. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/debug_gen_settings.py +0 -0
  422. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/debug_settings.py +0 -0
  423. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/_recording_client.py +0 -0
  424. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/_spike_common.py +0 -0
  425. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/active_plan.py +0 -0
  426. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  427. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  428. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  429. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  430. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  431. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  432. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  433. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_locale_invariants.py +0 -0
  434. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  435. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
  436. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_project_listing.py +0 -0
  437. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  438. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  439. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  440. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  441. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/character_create_spike.py +0 -0
  442. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/character_create_spike_v2.py +0 -0
  443. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/dump_character_selectors.js +0 -0
  444. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  445. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  446. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  447. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/make_project.py +0 -0
  448. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/materiality_backtest.py +0 -0
  449. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/measure_html_lang_settle.py +0 -0
  450. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/measure_locale_probe.py +0 -0
  451. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
  452. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/patch_character.py +0 -0
  453. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/skillopt/README.md +0 -0
  454. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/skillopt/harness.py +0 -0
  455. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/skillopt/tasks.json +0 -0
  456. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/sonar-local-scan.sh +0 -0
  457. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  458. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_changelog_capture.py +0 -0
  459. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  460. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  461. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  462. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_extend_model_recon.py +0 -0
  463. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  464. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_extend_route_capture.py +0 -0
  465. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
  466. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
  467. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  468. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  469. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  470. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  471. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_incident_live.py +0 -0
  472. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  473. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  474. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  475. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  476. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  477. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_locale_poison.py +0 -0
  478. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
  479. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
  480. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
  481. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
  482. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
  483. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
  484. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  485. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  486. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_model_inventory.py +0 -0
  487. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  488. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  489. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  490. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  491. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  492. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  493. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_patch_entity.py +0 -0
  494. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_patchright.py +0 -0
  495. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  496. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
  497. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/verify_language_agnostic.py +0 -0
  498. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  499. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/dev/verify_model_attribution.py +0 -0
  500. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/README.md +0 -0
  501. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/capture_flow_traffic.py +0 -0
  502. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  503. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/memory_profile.py +0 -0
  504. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/recaptcha_mint.py +0 -0
  505. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  506. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  507. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  508. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/probe/run_probe.py +0 -0
  509. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/probe/spike_auth_matrix.py +0 -0
  510. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/record_demo.ps1 +0 -0
  511. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/smoke_image.py +0 -0
  512. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/smoke_video_editor.py +0 -0
  513. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/smoke_worker_style.py +0 -0
  514. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/spike_waf_camoufox.py +0 -0
  515. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/scripts/verify_chrome_auth_viability.py +0 -0
  516. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/README.md +0 -0
  517. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/changelog/SKILL.md +0 -0
  518. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/check/SKILL.md +0 -0
  519. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/doc-review/SKILL.md +0 -0
  520. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/issue-resolve/SKILL.md +0 -0
  521. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/known-issues/SKILL.md +0 -0
  522. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/live-verify/SKILL.md +0 -0
  523. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/llm-council/SKILL.md +0 -0
  524. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/plan/SKILL.md +0 -0
  525. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/pr-council-review/SKILL.md +0 -0
  526. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/predict/SKILL.md +0 -0
  527. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/release/SKILL.md +0 -0
  528. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/scenario/SKILL.md +0 -0
  529. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/sonar/SKILL.md +0 -0
  530. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/status/SKILL.md +0 -0
  531. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/clip_qa.py +0 -0
  532. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/composition.md +0 -0
  533. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/failure-modes.md +0 -0
  534. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/skills/video-production/tasks.json +0 -0
  535. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/sonar-project.properties +0 -0
  536. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/__main__.py +0 -0
  537. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/_cli_helpers.py +0 -0
  538. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/__init__.py +0 -0
  539. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/_engine.py +0 -0
  540. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/_retry.py +0 -0
  541. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  542. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/character.py +0 -0
  543. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/credits.py +0 -0
  544. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/dto.py +0 -0
  545. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/extend_chain.py +0 -0
  546. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/image.py +0 -0
  547. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/image_upscale.py +0 -0
  548. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/recaptcha.py +0 -0
  549. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/routes.py +0 -0
  550. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/scene.py +0 -0
  551. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  552. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/_common.py +0 -0
  553. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  554. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/base.py +0 -0
  555. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/batchexecute.py +0 -0
  556. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  557. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  558. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  559. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  560. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  561. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  562. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  563. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  564. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  565. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  566. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  567. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/video.py +0 -0
  568. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/api/video_extend.py +0 -0
  569. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/__init__.py +0 -0
  570. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/base.py +0 -0
  571. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/cookies.py +0 -0
  572. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/factory.py +0 -0
  573. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  574. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/strategies.py +0 -0
  575. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/auth/verification.py +0 -0
  576. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/browser_manager.py +0 -0
  577. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/chain.py +0 -0
  578. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/chain_manifest.py +0 -0
  579. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli.py +0 -0
  580. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_character.py +0 -0
  581. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_credits.py +0 -0
  582. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_data.py +0 -0
  583. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_doctor.py +0 -0
  584. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_instructions.py +0 -0
  585. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_models.py +0 -0
  586. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_movie.py +0 -0
  587. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_project.py +0 -0
  588. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_run.py +0 -0
  589. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_scene.py +0 -0
  590. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_tools.py +0 -0
  591. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/cli_update.py +0 -0
  592. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/composition.py +0 -0
  593. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/config.py +0 -0
  594. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/__init__.py +0 -0
  595. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/chain_repo.py +0 -0
  596. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  597. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  598. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  599. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  600. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  601. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  602. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  603. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  604. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  605. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  606. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/models.py +0 -0
  607. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/queries.py +0 -0
  608. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/redaction.py +0 -0
  609. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/repository.py +0 -0
  610. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/data/store.py +0 -0
  611. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/diagnostics.py +0 -0
  612. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/errors.py +0 -0
  613. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/exceptions.py +0 -0
  614. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/file_integrity.py +0 -0
  615. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  616. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  617. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  618. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  619. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/image_batch.py +0 -0
  620. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/json_output.py +0 -0
  621. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/__init__.py +0 -0
  622. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/prompts.py +0 -0
  623. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/resources.py +0 -0
  624. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/server.py +0 -0
  625. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/setup.py +0 -0
  626. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  627. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/media.py +0 -0
  628. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/movie_manifest.py +0 -0
  629. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/observability.py +0 -0
  630. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/paths.py +0 -0
  631. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/profile_lease.py +0 -0
  632. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/profile_store.py +0 -0
  633. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/redaction.py +0 -0
  634. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/__init__.py +0 -0
  635. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  636. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/credits.py +0 -0
  637. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/doctor.py +0 -0
  638. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/services/mentions.py +0 -0
  639. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/storage.py +0 -0
  640. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/__init__.py +0 -0
  641. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/banned.py +0 -0
  642. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  643. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  644. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  645. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  646. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/expander.py +0 -0
  647. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/invocation.py +0 -0
  648. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/loader.py +0 -0
  649. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/registry.py +0 -0
  650. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/runtime.py +0 -0
  651. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/tools/spec.py +0 -0
  652. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/ui/app.py +0 -0
  653. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/ui/server.py +0 -0
  654. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/update_check.py +0 -0
  655. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/winsec.py +0 -0
  656. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/worker/codec.py +0 -0
  657. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/worker/daemon.py +0 -0
  658. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/src/gflow_cli/worker/queue.py +0 -0
  659. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tasks/lessons.md +0 -0
  660. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/test_assets/sample_batch.json +0 -0
  661. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/test_assets/sample_batch.tsv +0 -0
  662. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/test_assets/sample_batch_invalid.tsv +0 -0
  663. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/__init__.py +0 -0
  664. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/__init__.py +0 -0
  665. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/fixtures/character_gen_response.json +0 -0
  666. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  667. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  668. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  669. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  670. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_bearer_redaction.py +0 -0
  671. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_character.py +0 -0
  672. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client.py +0 -0
  673. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_character.py +0 -0
  674. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_delete_characters.py +0 -0
  675. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_errors.py +0 -0
  676. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_extend.py +0 -0
  677. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_generate_character.py +0 -0
  678. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_incidents.py +0 -0
  679. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_launch_kwargs.py +0 -0
  680. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_locale_cache.py +0 -0
  681. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_patch_entity.py +0 -0
  682. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_scene.py +0 -0
  683. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_client_upscale.py +0 -0
  684. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_concurrency.py +0 -0
  685. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_credits.py +0 -0
  686. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_credits_http.py +0 -0
  687. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_dto.py +0 -0
  688. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_engine.py +0 -0
  689. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_extend_chain.py +0 -0
  690. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_image.py +0 -0
  691. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_image_dto.py +0 -0
  692. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_image_upscale.py +0 -0
  693. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  694. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_recaptcha.py +0 -0
  695. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_retry.py +0 -0
  696. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_routes.py +0 -0
  697. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_routes_character.py +0 -0
  698. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_routes_locale.py +0 -0
  699. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_routes_scene.py +0 -0
  700. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_sapisidhash_helper.py +0 -0
  701. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_scene_models.py +0 -0
  702. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_video.py +0 -0
  703. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_video_extend.py +0 -0
  704. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_video_request.py +0 -0
  705. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/test_video_status_poll.py +0 -0
  706. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/__init__.py +0 -0
  707. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/conftest.py +0 -0
  708. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/drivers/__init__.py +0 -0
  709. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  710. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/drivers/test_classic.py +0 -0
  711. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/drivers/test_factory.py +0 -0
  712. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  713. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_base.py +0 -0
  714. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_batchexecute.py +0 -0
  715. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_bearer.py +0 -0
  716. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_common.py +0 -0
  717. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  718. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_factory.py +0 -0
  719. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_fingerprint.py +0 -0
  720. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_locale_navigation.py +0 -0
  721. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
  722. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_migrated_route.py +0 -0
  723. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_mode_control.py +0 -0
  724. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  725. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_navigation_settled.py +0 -0
  726. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  727. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_policy_400.py +0 -0
  728. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_sapisidhash.py +0 -0
  729. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  730. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_transport_timeout.py +0 -0
  731. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_ui_automation.py +0 -0
  732. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  733. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  734. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  735. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  736. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/strategies/test_factory.py +0 -0
  737. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/test_cookies.py +0 -0
  738. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/test_real_chrome.py +0 -0
  739. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/test_verification.py +0 -0
  740. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/auth/test_windows_acl.py +0 -0
  741. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/__init__.py +0 -0
  742. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_auth_status.py +0 -0
  743. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_auth_list.py +0 -0
  744. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_character.py +0 -0
  745. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_character_create.py +0 -0
  746. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_credits.py +0 -0
  747. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_data.py +0 -0
  748. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_data_errors.py +0 -0
  749. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  750. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_data_sync.py +0 -0
  751. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_doctor.py +0 -0
  752. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_image.py +0 -0
  753. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  754. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  755. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_image_upscale.py +0 -0
  756. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  757. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_instructions.py +0 -0
  758. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_models.py +0 -0
  759. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_movie.py +0 -0
  760. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_run.py +0 -0
  761. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_scene.py +0 -0
  762. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_tools.py +0 -0
  763. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_video_chain.py +0 -0
  764. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_cli_video_extend.py +0 -0
  765. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_error_handling.py +0 -0
  766. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_failure_funnel.py +0 -0
  767. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_helpers.py +0 -0
  768. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_incident_output.py +0 -0
  769. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_movie_manifest.py +0 -0
  770. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  771. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_predictable_output.py +0 -0
  772. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  773. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_settings_validation.py +0 -0
  774. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  775. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/composition/test_character.py +0 -0
  776. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/composition/test_compose_prompt.py +0 -0
  777. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/composition/test_handoff.py +0 -0
  778. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/composition/test_style_variants.py +0 -0
  779. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/composition/test_style_variants_e2e.py +0 -0
  780. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/conftest.py +0 -0
  781. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/__init__.py +0 -0
  782. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_chain_repo.py +0 -0
  783. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_failure_recording.py +0 -0
  784. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_models.py +0 -0
  785. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_null_columns_stay_null.py +0 -0
  786. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_packaging.py +0 -0
  787. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_recorder.py +0 -0
  788. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_recorder_character.py +0 -0
  789. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_redaction.py +0 -0
  790. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_repository.py +0 -0
  791. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_scene_persistence.py +0 -0
  792. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_settings_and_errors.py +0 -0
  793. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_store.py +0 -0
  794. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/data/test_store_migrations.py +0 -0
  795. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/dev/test_recording_client.py +0 -0
  796. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/__init__.py +0 -0
  797. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  798. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  799. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  800. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  801. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  802. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_chain_e2e.py +0 -0
  803. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  804. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  805. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_credits_e2e.py +0 -0
  806. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_daemon_e2e.py +0 -0
  807. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  808. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  809. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  810. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  811. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  812. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  813. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  814. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  815. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  816. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_json_output_e2e.py +0 -0
  817. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  818. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  819. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
  820. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  821. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  822. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_scene_compose_live.py +0 -0
  823. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_tools_e2e.py +0 -0
  824. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_transports_e2e.py +0 -0
  825. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  826. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  827. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  828. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/__init__.py +0 -0
  829. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/asset_tagging.feature +0 -0
  830. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/auth.feature +0 -0
  831. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/auth_login.feature +0 -0
  832. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/character_create.feature +0 -0
  833. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/character_read.feature +0 -0
  834. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/conftest.py +0 -0
  835. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/credits.feature +0 -0
  836. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/duration_tab_drift.feature +0 -0
  837. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/entity_provenance.feature +0 -0
  838. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/image.feature +0 -0
  839. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/image_batch_references.feature +0 -0
  840. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/image_upscale.feature +0 -0
  841. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/incident_diagnostics.feature +0 -0
  842. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/instructions.feature +0 -0
  843. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/latched_locale_recovery.feature +0 -0
  844. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/locale_picker_include.feature +0 -0
  845. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/mcp_tasks.feature +0 -0
  846. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/media_picker_tiers.feature +0 -0
  847. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/migrated_driver.feature +0 -0
  848. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/migrated_host_gate.feature +0 -0
  849. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/migrated_i2v.feature +0 -0
  850. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/output_hardening.feature +0 -0
  851. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_asset_tagging_steps.py +0 -0
  852. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_auth_login_steps.py +0 -0
  853. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_auth_steps.py +0 -0
  854. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_character_create_steps.py +0 -0
  855. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_character_read_steps.py +0 -0
  856. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_credits_steps.py +0 -0
  857. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_image_steps.py +0 -0
  858. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_image_upscale_steps.py +0 -0
  859. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  860. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_instructions_steps.py +0 -0
  861. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  862. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  863. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  864. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_migrated_driver_steps.py +0 -0
  865. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
  866. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_migrated_i2v_steps.py +0 -0
  867. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_output_hardening_steps.py +0 -0
  868. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_step_collision_guard.py +0 -0
  869. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  870. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/test_video_chain_steps.py +0 -0
  871. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/video_agent_ui.feature +0 -0
  872. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/features/video_chain.feature +0 -0
  873. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/__init__.py +0 -0
  874. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/changelog_modal_page.html +0 -0
  875. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/doctor_env.py +0 -0
  876. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/flow_model_inventory.json +0 -0
  877. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  878. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/listing_payload.py +0 -0
  879. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/fixtures/seeded_catalog.py +0 -0
  880. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/__init__.py +0 -0
  881. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/test_grading.py +0 -0
  882. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/test_model.py +0 -0
  883. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/test_model_governance.py +0 -0
  884. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/test_registry.py +0 -0
  885. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/flow_selectors/test_report.py +0 -0
  886. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/image_batch/__init__.py +0 -0
  887. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/image_batch/test_image_manifest.py +0 -0
  888. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/image_batch/test_jitter_config.py +0 -0
  889. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/image_batch/test_observability_events.py +0 -0
  890. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/__init__.py +0 -0
  891. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/conftest.py +0 -0
  892. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/constants.py +0 -0
  893. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/test_expander_gateway.py +0 -0
  894. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/test_storage_gcs.py +0 -0
  895. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/integration/test_storage_s3.py +0 -0
  896. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/__init__.py +0 -0
  897. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/conftest.py +0 -0
  898. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_auth_status_tool.py +0 -0
  899. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_credits_tool.py +0 -0
  900. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_error_funnel.py +0 -0
  901. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_http_transport.py +0 -0
  902. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_known_issues_resource.py +0 -0
  903. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
  904. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_no_spend.py +0 -0
  905. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  906. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_resources.py +0 -0
  907. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_server.py +0 -0
  908. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_setup.py +0 -0
  909. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_stdio_transport.py +0 -0
  910. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_tasks_extension.py +0 -0
  911. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/mcp/test_tools_instructions.py +0 -0
  912. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  913. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_canary_classify.py +0 -0
  914. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_canary_reexec.py +0 -0
  915. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  916. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
  917. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_council_memory.py +0 -0
  918. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_materiality.py +0 -0
  919. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  920. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_test_count.py +0 -0
  921. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  922. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_codex_plugin.py +0 -0
  923. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_generate_website_docs.py +0 -0
  924. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_materiality_backtest.py +0 -0
  925. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_skillopt_scoring.py +0 -0
  926. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/scripts/test_workflow_hardening.py +0 -0
  927. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/__init__.py +0 -0
  928. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_catalog_sync.py +0 -0
  929. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_character_create_redaction.py +0 -0
  930. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  931. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_credits.py +0 -0
  932. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_doctor.py +0 -0
  933. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_media_attribution.py +0 -0
  934. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_mentions_observability.py +0 -0
  935. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_mentions_parse.py +0 -0
  936. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_mentions_resolve.py +0 -0
  937. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/services/test_resolve_and_apply.py +0 -0
  938. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/smoke/__init__.py +0 -0
  939. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  940. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/smoke/test_real_flow.py +0 -0
  941. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_auth.py +0 -0
  942. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_browser_manager.py +0 -0
  943. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_chain.py +0 -0
  944. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_chain_manifest.py +0 -0
  945. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_cli_data.py +0 -0
  946. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_cli_project.py +0 -0
  947. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_cli_update.py +0 -0
  948. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_config.py +0 -0
  949. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_conftest_isolation.py +0 -0
  950. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_data_queries.py +0 -0
  951. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_bundle.py +0 -0
  952. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_events.py +0 -0
  953. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_journal.py +0 -0
  954. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_recorder.py +0 -0
  955. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_retention.py +0 -0
  956. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_diagnostics_sanitize.py +0 -0
  957. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_documentation_gate.py +0 -0
  958. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_duration_tab_drift.py +0 -0
  959. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_entity_provenance.py +0 -0
  960. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_errors.py +0 -0
  961. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_errors_classification.py +0 -0
  962. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_image_batch_references.py +0 -0
  963. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_incident_generation_requests.py +0 -0
  964. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_json_output.py +0 -0
  965. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_marker_registry.py +0 -0
  966. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_media.py +0 -0
  967. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_observability.py +0 -0
  968. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_overlay_banner_dismissal.py +0 -0
  969. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_paths.py +0 -0
  970. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_playwright_pin.py +0 -0
  971. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_profile_lease.py +0 -0
  972. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_profile_lease_subprocess.py +0 -0
  973. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_profile_store.py +0 -0
  974. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_profile_store_locale.py +0 -0
  975. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_project_list_urls.py +0 -0
  976. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_self_documenting_errors.py +0 -0
  977. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_smoke.py +0 -0
  978. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/test_update_check.py +0 -0
  979. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/__init__.py +0 -0
  980. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_banned.py +0 -0
  981. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_expander.py +0 -0
  982. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_invocation.py +0 -0
  983. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_loader.py +0 -0
  984. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_registry.py +0 -0
  985. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_runtime.py +0 -0
  986. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/tools/test_spec.py +0 -0
  987. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/ui/test_app.py +0 -0
  988. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_codec.py +0 -0
  989. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_daemon.py +0 -0
  990. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  991. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_queue.py +0 -0
  992. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_queue_multiprocess.py +0 -0
  993. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/tests/worker/test_queue_reconciliation.py +0 -0
  994. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  995. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/ARCHITECTURE.md +0 -0
  996. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/AUTHENTICATION.md +0 -0
  997. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/CHARACTER.md +0 -0
  998. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/DATA_LAYER.md +0 -0
  999. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/DEBUGGING.md +0 -0
  1000. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/DEVELOPMENT.md +0 -0
  1001. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/E2E_TESTING.md +0 -0
  1002. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  1003. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/INSTRUCTIONS.md +0 -0
  1004. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  1005. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/MOVIE.md +0 -0
  1006. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  1007. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/SECURITY.md +0 -0
  1008. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/TOOLS.md +0 -0
  1009. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/USER_GUIDE.md +0 -0
  1010. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/agents.md +0 -0
  1011. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/index.md +0 -0
  1012. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/installation.md +0 -0
  1013. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/onboarding-mockup.html +0 -0
  1014. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/onboarding.md +0 -0
  1015. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/docs/stylesheets/extra.css +0 -0
  1016. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/mkdocs.yml +0 -0
  1017. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/requirements.in +0 -0
  1018. {gflow_cli-0.69.0 → gflow_cli-0.70.0}/website/requirements.txt +0 -0
@@ -0,0 +1,10 @@
1
+ ---
2
+ description: Gather evidence from the live Flow surface (DOM, network, HAR) before claiming a feature is broken, missing, or impossible.
3
+ ---
4
+
5
+ # `/gflow:spike` — measure the blackbox
6
+
7
+ **Read `skills/spike/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` as the
8
+ question to answer.
9
+
10
+ > Do **not** call `Skill(skill="spike")` — read the file directly.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.69.0",
3
+ "version": "0.70.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -107,3 +107,12 @@ website/site/
107
107
 
108
108
  # Local git hooks dir (core.hooksPath target) — machine-local tooling, never shipped
109
109
  .githooks/
110
+
111
+ # HAR/DOM spike harness (scripts/dev/har-spike/) — the vendored scripts ARE
112
+ # tracked; everything they generate is not. Captures carry auth cookies, Bearer
113
+ # tokens and prompts, and the npm/agent-browser caches are 34 MB of noise.
114
+ # (No .gitkeep negation here: git never descends into an ignored directory, so a
115
+ # negation for a file inside one is inert. The capture scripts create the dir.)
116
+ scripts/dev/har-spike/artifacts/
117
+ scripts/dev/har-spike/.agent-browser/
118
+ scripts/dev/har-spike/.npm-cache/
@@ -14,6 +14,7 @@ that did not run.
14
14
 
15
15
  | If you are about to… | Load first | Non-negotiable because |
16
16
  |---|---|---|
17
+ | Claim a Flow surface is broken, missing, or impossible | `/gflow:spike <question>` | A selector that misses is evidence about the SELECTOR; "labs-only, ever" came from one 20 s timeout and cost a day |
17
18
  | Touch a GitHub issue | `/gflow:issue-assessment <N>` | Read-only triage precedes any fix; classification changes what "fixing" means |
18
19
  | Propose a transport, auth, selector, or schema change | `/gflow:predict <proposal>` | Five adversarial personas return GO / CAUTION / STOP before code exists |
19
20
  | Start a feature | `/gflow:scenario` → `/gflow:plan` | Edge cases before tasks; tasks before code |
@@ -96,7 +97,7 @@ the five other mirror axes), which no command here can check and no CI gate can
96
97
  - TDD is non-negotiable. Coverage floor: 80% overall.
97
98
  - Documentation is a first-class deliverable. Every behavior, workflow, config, or operator-facing change must update the relevant docs or state why no docs changed in the PR/checklist. `scripts/ci/check_doc_links.py` is a merge gate.
98
99
  - **A PR is not done until its SonarCloud gate is green (zero new issues).** The nine gates above are local/pre-commit; SonarCloud is server-side and runs in CI (`sonar.qualitygate.wait=true` → a red gate turns the `SonarCloud analysis` check red). Before calling a PR merge-ready, verify it with `/gflow:sonar <N>` (it is skipped on fork PRs — maintainer-checked there).
99
- - **E2E is the decisive layer, and it is required for every behavior change that touches a Flow surface.** Run the `tests/e2e/` test that covers the change, or write one — offline-green proves only that *our* code does what we think, never that Flow still behaves as captured. `/gflow:live-verify` does **not** satisfy this: it drives CLI commands by hand into a gitignored note and never runs `pytest -m e2e`. The two are complementary — an e2e test is a re-runnable regression, a live-verify ledger is a narrative record. If you cannot run it, say so explicitly in the PR and a maintainer will; a change touching no Flow surface (docs, help text, exit-code plumbing) is out of scope — say that rather than leaving it blank.
100
+ - **E2E is the decisive layer, and it is required for every behavior change that touches a Flow surface.** Run the `tests/e2e/` test that covers the change, or write one — offline-green proves only that *our* code does what we think, never that Flow still behaves as captured. `/gflow:live-verify` does **not** satisfy this: it drives CLI commands by hand into a gitignored note and never runs `pytest -m e2e`. The two are complementary — an e2e test is a re-runnable regression, a live-verify ledger is a narrative record. A change touching no Flow surface at all (docs, help text, exit-code plumbing) is out of scope — say so explicitly rather than leaving it blank. Anything else follows the **Iron Law** above: run it, or name the external blocker that stops you. "A maintainer will run it" is a handoff, not a verification, and is only available once the blocker is named.
100
101
  - E2E tests require `GFLOW_CLI_E2E_PROFILE` and `-m e2e` (excluded from the default `addopts`, so they never run by accident). Cost sub-markers: `e2e_auth` (zero credits, browser only), `e2e_image` (zero credits, daily cap), `e2e_scene`, `e2e_data`, `e2e_batch`, `e2e_character` (opt in with `GFLOW_CLI_E2E_RUN_CHARACTER=1`), `e2e_video` (spends Veo credits — opt in with `GFLOW_CLI_E2E_RUN_VIDEO=1`). Redact account identifiers and any token or cookie value before pasting output into a PR.
101
102
  - Live tests (`@pytest.mark.live`) opt in via `GFLOW_LIVE=1`.
102
103
 
@@ -109,10 +110,11 @@ the five other mirror axes), which no command here can check and no CI gate can
109
110
  - **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
110
111
  - **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
111
112
 
112
- **That CI gate is command-level only** — it fires on a new *leaf*, and stays green while an
113
- option goes unmirrored, a queued-payload key goes unread, or a tool docstring asserts a
114
- restriction the CLI no longer has. So MCP is a responsibility of **every phase**, not a
115
- post-hoc checklist item. Each skill owns its slice:
113
+ **That gate now covers leaves *and their options*** (`test_every_cli_leaf_has_an_mcp_decision`,
114
+ `test_every_cli_option_reaches_its_mcp_tool`). It still cannot see a queued-payload key that
115
+ goes unread, a tool docstring asserting a restriction the CLI no longer has, or a twin that
116
+ was never *run*. So MCP stays a responsibility of **every phase**, not a post-hoc checklist
117
+ item. Each skill owns its slice:
116
118
 
117
119
  | Phase | Skill | Its MCP duty |
118
120
  |---|---|---|
@@ -142,10 +144,86 @@ the five other mirror axes), which no command here can check and no CI gate can
142
144
 
143
145
  These rules exist because docs alone don't bind under momentum: a "check open PRs first" rule was already written and still got skipped, and a PR was merged without seeing an entangled open one. Follow them on every task.
144
146
 
147
+ ### The Iron Law — done means verified by a run
148
+
149
+ ```
150
+ IF YOU TOUCHED A COMMAND, A FEATURE, OR A FLOW SURFACE,
151
+ YOU RUN ITS E2E TEST. NO RUN = NOT DONE.
152
+ ```
153
+
154
+ Not "tests pass". Not "the gates are green". Not "it's a thin wrapper over code that
155
+ is already covered". **A run, against the real thing, that you watched.** Offline green
156
+ proves our code does what we think it does; it cannot prove Flow still behaves as
157
+ captured, and it cannot prove the surface an agent or a user actually calls is wired to
158
+ the code under test. Everything not exercised is unknown, and unknown ships as a bug.
159
+
160
+ If no e2e test covers the change, **write one** — that is part of the change, not
161
+ follow-up work.
162
+
163
+ **The only permitted exception is a named external blocker** you cannot remove: an
164
+ exhausted API quota, hardware you do not have, an account you do not control, a cohort
165
+ Google has not put you in. Write the blocker down. Then these are **not** blockers, and
166
+ naming one is a rule violation, not a caveat:
167
+
168
+ - "I didn't get to it" · "it's covered by unit tests" · "it's a thin adapter"
169
+ - "the CLI path is verified and it shares the service"
170
+ - "recorded, not omitted"
171
+
172
+ That last one is the dangerous one, because it is a **good** convention being misused.
173
+ Recording an unverified item beats silently dropping it — but it is a record of a
174
+ blocker, never a substitute for a run. **Listing something as unverified that you could
175
+ have verified is the same failure as omitting it, plus a false paper trail.**
176
+
177
+ > **This law is written from the failure it prevents.** v0.69.0 shipped with two items
178
+ > under "Not verified": the MCP twin of the credits path, and 5 of 19 skill-benchmark
179
+ > tasks. Asked why we were going blind, both were verified **within the hour**. The MCP
180
+ > twin was a $0 read-only test — 3 assertions, 58 seconds, and it is now
181
+ > `tests/e2e/test_credits_mcp_e2e.py`. The 5 tasks ran on a model whose quota was still
182
+ > open, against a control run to separate model weakness from skill weakness, and
183
+ > exposed **four real defects** that the words "recorded, not omitted" had made invisible.
184
+ > Neither was ever blocked. Both were labelled instead of run.
185
+
186
+ ### The second law — MCP parity is not a chore, it is the contract
187
+
188
+ ```
189
+ EVERY USER-FACING CLI CAPABILITY HAS AN MCP TWIN,
190
+ OR A RECORDED REASON IT DOES NOT.
191
+ ```
192
+
193
+ The CLI and the MCP server are two doors onto one product. A capability behind only one
194
+ of them is not "mostly shipped" — for whoever is standing at the other door it does not
195
+ exist, and nothing tells them so. Agents cannot read a `--help` they were never given;
196
+ they discover a missing option by getting the wrong result.
197
+
198
+ Parity is **not** satisfied by a command existing. It has to hold at every level the two
199
+ surfaces can drift apart: the leaf, **its options**, the queued-payload keys the worker
200
+ reads back, and the tool docstring's claims about what the CLI does. The canonical list
201
+ is the **six mirror axes**, written out once in
202
+ [`skills/check/SKILL.md`](skills/check/SKILL.md) step 1b and cited from everywhere else —
203
+ never copied, because a duplicated checklist drifts, which is the failure it exists to
204
+ catch.
205
+
206
+ **A twin is a separate surface, so the Iron Law applies to it separately.** Verifying the
207
+ CLI path does not verify the MCP path. They share a service, and the service was never
208
+ the risk — the adapter is. Run both.
209
+
210
+ Where a capability is deliberately CLI-only — an interactive login, a destructive local
211
+ operation, a long-running billed job with no way to take consent — that is a legitimate
212
+ answer. **Record it with its reason** in `tests/mcp/test_cli_parity.py`, and revisit the
213
+ reason when whatever justified it changes.
214
+
215
+ > **Written from a live gap.** `--reference-entity` exists on four leaf commands and no
216
+ > MCP tool exposes the concept at all, while the whole `gflow character` group sits
217
+ > exempt as "not yet ported". The product's entire **identity axis** — create a
218
+ > character, attach a character — is therefore unreachable over MCP, and the parity gate
219
+ > reported full compliance throughout, because it only ever checked that leaves were
220
+ > *mapped*. Found by an option-level sweep, filed as #689, and the gate now checks
221
+ > options too.
222
+
145
223
  - **Check what's already in flight before coding a fix, opening a PR, or merging.** Run `gh pr list` and `git ls-remote` first — another open PR may already touch the same issue or files. Reconcile against it; don't re-derive "the only thing left" from a stale handoff. (A `PreToolUse` hook also surfaces same-issue open PRs at `gh pr create`/`merge` time, but treat that as a backstop, not a substitute for looking.)
146
224
  - **Truth is the CLI and running the code — not IDE/LSP "reminder" diagnostics.** Editor / `pyright`-in-worktree warnings go stale for an entire session and throw false positives (especially across multiple worktrees). Confirm with `ruff` / `pyright` / `pytest` from the terminal — or trust the worktree's own venv — never an IDE squiggle.
147
225
  - **Verify third-party runtime behavior empirically before wiring it in.** Don't assume how an external library, API, or browser actually behaves — exercise it once and observe, then build on the observed contract.
148
- - **If a claim can't be verified in the current environment, it's LIKELY — not CONFIRMED.** Keep the issue open, reference it with `Refs #N` (not `Closes #N`), and ship diagnostics rather than a blind fix. When you can't reproduce it, hand the fix to whoever can.
226
+ - **A claim you have not run is not a finding — it is a guess with formatting.** Confidence labels are not evidence: do not grade an unrun claim as "likely", "probably correct" or "low risk" and move on. Where a genuine external blocker stops the run (see the Iron Law), keep the issue open, reference it with `Refs #N` (not `Closes #N`), ship diagnostics rather than a blind fix, and hand it to whoever can reproduce it — naming what would settle it.
149
227
  - **This project reverse-engineers a blackbox.** gflow-cli doesn't own Google Flow — it drives real Flow through inspected HAR/DOM/browser-log behavior. Offline checks (types, lint, unit/BDD tests) verify *our* code does what we think it does; they cannot verify Flow still behaves the way we captured it. Every feature that touches a generation path is **live-verified**, not just offline-tested, before it's called done — see `/gflow:live-verify`.
150
228
 
151
229
  ## Standard Workflow Sequence
@@ -154,6 +232,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
154
232
 
155
233
  | Phase | Skill / Command | Purpose | Output Artifact |
156
234
  |---|---|---|---|
235
+ | 0. Spike | `/gflow:spike <question>` | Evidence from the live surface (DOM / network / HAR) whenever a claim of absence is in play | `scripts/dev/spike_*.py` + `docs/superpowers/spikes/<date>-<slug>.md` |
157
236
  | 1. Triage | `/gflow:issue-assessment <N>` | Read-only issue analysis & root cause hypothesis | `issue_assessment_<N>.md` |
158
237
  | 2. Pre-Implementation | `/gflow:predict <proposal>` | Adversarial audit (D14 YAGNI, security, risks) | GO / CAUTION / STOP verdict |
159
238
  | 3. BDD Scaffolding | `/gflow:scenario <feature>` | Edge-case explorer & BDD Gherkin spec | `Scenario:` blocks & test scaffold |
@@ -189,6 +268,7 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
189
268
  | Skill | Path | When to load |
190
269
  |---|---|---|
191
270
  | `gflow-cli` | [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md) | User wants to run any `gflow` command — auth, T2V, I2V, T2I, I2I, batch |
271
+ | `spike` | [`skills/spike/SKILL.md`](skills/spike/SKILL.md) | Before asserting any absence on a live Flow surface — the first layer of investigation |
192
272
  | `predict` | [`skills/predict/SKILL.md`](skills/predict/SKILL.md) | Pre-implementation adversarial analysis before any high-stakes change |
193
273
  | `scenario` | [`skills/scenario/SKILL.md`](skills/scenario/SKILL.md) | Edge-case explorer after a predict GO/CAUTION |
194
274
  | `plan` | [`skills/plan/SKILL.md`](skills/plan/SKILL.md) | Create a structured task-by-task implementation plan for a feature |
@@ -231,6 +311,35 @@ extension does not currently load plugins, so IDE-only users should include the
231
311
 
232
312
  The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each skill guides an agent. It drives any OpenAI-compatible endpoint — OpenAI, a gateway (OpenRouter, LiteLLM, freellmapi), a local model, or Google's compat endpoint — through the project's own `GFLOW_CLI_LLM_*` settings, the same ones the prompt tools use; there is no separate provider configuration. See [`scripts/dev/skillopt/README.md`](scripts/dev/skillopt/README.md).
233
313
 
314
+ ## Spiking a blackbox surface — the two modes
315
+
316
+ This project reverse-engineers Google Flow, so "go and look at the real thing" is a
317
+ first-class development activity, not a last resort. Two harnesses exist. **Use one of
318
+ them before writing a capture script from scratch.**
319
+
320
+ | Mode | Where | Driver | Who clicks | Use when |
321
+ |---|---|---|---|---|
322
+ | **In-process** | `scripts/dev/spike_*.py` | Playwright, via gflow's own transport | the script | you can already drive the surface, or you want to see exactly what gflow sees |
323
+ | **HAR + DOM** | [`scripts/dev/har-spike/`](scripts/dev/har-spike/README.md) | CDP-attached **real Chrome** through a pinned `agent-browser` | **a human, by hand** | the driver cannot reach the surface yet, or a capture is ambiguous and you need ground truth |
324
+
325
+ Start in-process; escalate to the HAR harness when the driver cannot get far enough to
326
+ observe anything. A hand-driven HAR is the tiebreaker. **The protocol is
327
+ [`skills/spike/SKILL.md`](skills/spike/SKILL.md) — load it before asserting any absence.**
328
+
329
+ Both write to **gitignored** output — `scripts/dev/_spike_out/` and
330
+ `scripts/dev/har-spike/artifacts/`. Captures carry Bearer tokens, cookies and prompts:
331
+ `*.har` is gitignored repo-wide, and a capture must never be committed or pasted into an
332
+ issue unredacted. Use `scripts/dev/har-spike/extract_har_summary.py` for the redacted
333
+ summary that IS shareable. Findings belong in `docs/superpowers/spikes/`; the evidence
334
+ that produced them stays local.
335
+
336
+ > **The harness is vendored in for discoverability, and that is the whole point.** It
337
+ > lived in a sibling directory outside git until 2026-09-06. Being outside the repo, no
338
+ > agent could find it, nothing pinned its `agent-browser` version, and its one test ran
339
+ > nowhere. A session that day wrote three capture scripts from scratch and only learned
340
+ > the harness existed because the user said so — after concluding, wrongly, that a
341
+ > working Flow feature was impossible. Keep it in-tree, keep its data disposable.
342
+
234
343
  ## Where to look next
235
344
 
236
345
  - **Architecture & target shape** → [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
@@ -240,6 +349,7 @@ The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each ski
240
349
  - **Known issues** (read before touching auth / reCAPTCHA) → [KNOWN_ISSUES.md](KNOWN_ISSUES.md)
241
350
  - **Current task** → `/gflow:status` · **Create a feature plan** → `/gflow:plan <feature>` · **Full roadmap** → [PLAN.md](PLAN.md)
242
351
  - **Release protocol** → [RELEASE.md](RELEASE.md)
352
+ - **Spiking a live Flow surface** (HAR + DOM capture) → [scripts/dev/har-spike/README.md](scripts/dev/har-spike/README.md)
243
353
 
244
354
  ## Claude Code-specific notes
245
355
 
@@ -7,6 +7,168 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.70.0] — 2026-09-06
11
+
12
+ ### Fixed
13
+
14
+ - **`-o <existing directory>` no longer costs you a clip.** `--output` on `video t2v` / `i2v` /
15
+ `r2v` and on `image t2i` / `i2i` accepted a path that was already a directory. Nothing checked
16
+ it until `_relocate_video_output` called `Path.replace()` onto the target, long after Flow had
17
+ rendered and billed the clip: `PermissionError: [WinError 5]`, surfaced as a bare
18
+ "Unexpected error" (exit 1), with the paid mp4 orphaned under a bare UUID name in the working
19
+ directory. Found by dogfooding an r2v run on 2026-09-06 — two clips billed, neither saveable.
20
+ All five option declarations now carry `dir_okay=False`, which Click enforces while parsing, so
21
+ the run aborts in under a second at zero cost. (A sixth declaration already had it; the rest had
22
+ drifted from it.)
23
+
24
+ - **`gflow character create` works on the migrated `flow.google.com` host.** It had never been
25
+ broken there — gflow was not driving it. The readiness gate waited for
26
+ `div[role="textbox"][data-slate-editor="true"]`, a React/**Slate** anchor; the migrated
27
+ frontend is Angular and renders the same editor with **ProseMirror**, so the gate timed out
28
+ after 20 s and the surface was read as absent. v0.69.0 then hardened that misreading into a
29
+ `raise_if_migrated` guard that aborted with exit 36 *before* probing the DOM, turning "our
30
+ selector missed" into a confident, non-retryable "this host will never do it". The gate now
31
+ accepts both anchors, the guard is gone, and the picker/result paths follow:
32
+
33
+ - body mode is anchored on the migrated editor's `<flow-slot-chip-button>` component
34
+ boundary (there is no `add_2` control there at all), its settle signal is the face
35
+ reference mounting from `flow-content.google/image/…`, and the prompt-box counter now
36
+ counts through the readiness anchor instead of Slate only — it reported 0 boxes on an
37
+ editor whose box was mounted and visible. `--body-prompt`, `--voice` and `--personality`
38
+ all complete on the migrated host as a result.
39
+ - each slot takes **its own** `primaryMediaId`, read from the project listing. The entity
40
+ exposes only a thumbnail id, and handing that to every slot made the body slot claim the
41
+ face's media — which `commit_workflow` then PATCHed onto the body workflow, corrupting it.
42
+ Reading Flow's own value makes that commit a no-op.
43
+ - the portrait is read back off the **entity** when the labs `batchGenerateImages` wire stays
44
+ silent. The migrated host generates over its own `batchexecute` (rpcid `ogiZ0b`), so the
45
+ listener timed out on work that had already succeeded — the entity carried a workflow id and
46
+ a thumbnail media id the moment the timeout fired. The ids now come off the entity itself,
47
+ which proves the character binding by construction rather than trusting a self-reported
48
+ `parentEntityId`, and the image is downloaded so `--output` and `image_paths` behave the
49
+ same on both hosts.
50
+
51
+ Verified live on a moved account: `display_name` patched, workflow id and thumbnail bound,
52
+ file on disk, and `--model nano2` / `--model nanopro` each selecting the tier asked for.
53
+ Recon: `scripts/dev/spike_migrated_character_*.py`.
54
+
55
+ - **`character create --model` is now deterministic: it applies the tier you asked for, or it
56
+ fails.** The character model picker was best-effort — every failure path logged a warning and
57
+ let the generation run on whatever tier the editor happened to show, so `--model nano2` could
58
+ quietly return a Nano Banana Pro image with nothing in the output saying so. Three separate
59
+ faults did exactly that: it skipped the click entirely when `nano2` was requested (assuming
60
+ Nano Banana 2 was the editor default, which is true on labs and false on `flow.google.com`);
61
+ its option selector `:has-text('…')` was unanchored, so `.first` resolved to `<html>`; and its
62
+ menu-item lookup was unscoped, so `[role='menuitem']` mixed the open menu's entries with
63
+ hidden ones from the editor's other menus and `nth(i)` clicked a node that could not be
64
+ clicked. The menu also offers **three** tiers, not the documented two, and `Nano Banana 2` is
65
+ a prefix of `Nano Banana 2 Lite`.
66
+
67
+ Now: entries are read from the *visible* menu, matched in Python with an explicit exclusion,
68
+ an ambiguous or absent match refuses rather than guessing, and the selection is **verified by
69
+ re-reading the chip** rather than trusting the click. Anything else raises — `ConfigurationError`
70
+ for a tier the menu does not offer, `UiSelectorDriftError` for a picker that cannot be driven.
71
+ Aborting here is free: the picker runs before the prompt is submitted, so a refusal costs no
72
+ quota and no credits, while proceeding produces a paid artifact from the wrong model. Verified
73
+ live: four consecutive runs alternating `--model nano2` / `--model nanopro`, correct tier every
74
+ time.
75
+
76
+ - **A failed `character create` no longer strands an "Untitled Character" in the project.** The
77
+ saga persists before it spends, and deliberately keeps its STARTED row so a retry can resume —
78
+ but that row is keyed on `(project_id, name)`, so a retry under any other name missed it and
79
+ minted a second entity, leaving the first orphaned with `refs=0` forever. A failure with no
80
+ slot committed now rolls the free entity back and marks the row FAILED. It asks the **backend**
81
+ first: an empty local `workflow_ids` means only that this process failed to read a result, and
82
+ on the migrated host a portrait generated fine while the client timed out — deleting on the
83
+ local signal alone would have destroyed finished work.
84
+
85
+ - **PR-triage autopilot: stop re-alerting a deferred PR on every push.** The `DEFERRED_SIZE` and
86
+ `NEEDS-HUMAN` gate branches deduped on `(pr, head_sha, status)`, so every push to an oversized
87
+ PR looked new to the ledger and re-sent a byte-identical "needs a manual review" mail on the
88
+ next hourly cycle. PR #683 produced three on 2026-09-06 (2130 / 2500 / 3066 lines) — same
89
+ verdict, same required action. Now dedupes on the PR's latest ledger status via a new
90
+ `latest_status()` helper: one alert per gate trip, and a PR that trips, gets fixed and reviewed,
91
+ then regresses still alerts again. Ops tooling under `scripts/autopilot/`, not a Flow surface,
92
+ so no e2e applies. ([#697](https://github.com/ffroliva/gflow-cli/issues/697))
93
+
94
+ - **A reCAPTCHA mint that fails after the migrated-host handoff now reports exit 36, not exit 1**
95
+ ([#692](https://github.com/ffroliva/gflow-cli/issues/692)). The `raise_if_migrated` guard added
96
+ in #678 is a point-in-time read of `page.url`, and Flow's handoff to `flow.google.com` is a
97
+ **client-side** navigation that can land after it. The bootstrap's own `await_url_settled` does
98
+ not close that window either — it is skipped entirely for a profile latched at
99
+ `NOT_REDIRECTED`. The guard is now re-run on the mint's failure path, which costs nothing when
100
+ the mint succeeds and classifies correctly whenever the hop lands, rather than depending on it
101
+ landing before one particular line. A genuine labs-side reCAPTCHA failure still surfaces as
102
+ `RecaptchaError`.
103
+
104
+ **The re-check now polls for a bounded 1.5 s rather than reading once.** A single instantaneous
105
+ read still lost the race: Playwright updates `page.url` on `framenavigated`, so a mint that dies
106
+ *while* the navigation is committing reads the old host on an account that is in fact migrated,
107
+ and the run exited 1. Polling turns "who won this instant" into "did the hop land at all". It is
108
+ the error path, so a successful mint never waits.
109
+
110
+ The re-check catches **any** mint failure, not just `RecaptchaError`. `TokenMinter.mint` guards
111
+ only its second `page.evaluate`: `site_key()` → `discover_site_key` runs an unguarded one, and
112
+ the minter is rebuilt per call so that unguarded call runs every time. A hop mid-mint destroys
113
+ the execution context, so the likeliest shape of this failure is a **raw Playwright error** —
114
+ which a `RecaptchaError`-only net would miss entirely. Nothing is swallowed: the original
115
+ exception propagates untouched unless the page turns out to be migrated.
116
+
117
+ **Scope, stated honestly:** the reporter's failure could **not** be reproduced locally. On a
118
+ migrated, `NOT_REDIRECTED`-latched profile the hop wins the race and v0.69.0 already returns
119
+ exit 36 — verified live, before and after this change. So this hardens a race that is real in
120
+ the code but unobserved here; it is not a confirmed fix for #692, which stays open.
121
+
122
+ ### Added
123
+
124
+ - **`gflow video r2v` from local `--ref` files runs on the migrated `flow.google.com`
125
+ host** (#639). Each file is uploaded through the same editor toolbar path i2v already
126
+ uses, so the app's own `maseQ` reply names the media id, and is then attached as an `@`
127
+ **mention** in the prompt — references are not a chip slot on this host.
128
+
129
+ Three measured details shape it. The Ingredients submit is rpcid **`MZZa6b`** (t2v
130
+ `YhhmEf`, i2v `eb1hJf`) — watching only the others is why this looked for several rounds
131
+ of recon like r2v never submitted at all. A mention is committed by **Enter**; a typed
132
+ query alone leaves the picker open and inserts nothing. And mentions need real key
133
+ events where prompt text needs `insert_text` (a newline must not submit), so the two
134
+ cannot share a path.
135
+
136
+ The submit body is asserted to carry every uploaded id, and a run whose references have
137
+ not all attached is refused **before** submit (exit 32) — the failure mode being a
138
+ full-price clip with none of the user's references on it. A reference the picker misses
139
+ is retried, since its search index does not always hold a fresh upload on the first
140
+ query. References by `@Name` and character entities (`--reference-entity`) stay on labs,
141
+ for the same reason a frame by UUID does: the picker exposes no media id to anchor on.
142
+ Live-verified end to end with two local refs and `--model veo-lite-lp`, and confirmed
143
+ semantically by the account owner: the presenter in the output is the person from the
144
+ first reference and the product is the one from the second, so both references are
145
+ genuinely bound rather than merely accepted.
146
+
147
+ **`--duration` is refused on this path (exit 11), and an r2v run pins 8s for itself.**
148
+ Flow offers reference-to-video only at its base 8s tier on this host. At 4s or 6s it does
149
+ not refuse: it flattens the reference mentions into plain prompt text and submits
150
+ `veo_3_1_t2v_lite_4s_low_priority` — a full-price text-to-video clip carrying the file
151
+ *names* and none of the images. The editor remembers the last duration, so a run passing
152
+ none was inheriting a degrading one. Measured at zero credits across three route-blocked
153
+ runs varying only the duration (`scripts/dev/capture_migrated_r2v_production_submit.py`).
154
+ Note the media slot carries the reference ids even in the degraded submits, so the model
155
+ key — not the ids — is what distinguishes a bound run from an accepted one.
156
+
157
+ **Correction to the first cut of this feature**, kept here because the claim was public:
158
+ the submit-body assertion above was written and unit-tested but **never registered** on
159
+ the r2v path — `page.on("request", …)` was gated on the i2v `expect_media_id`, which is
160
+ always `None` for r2v. The live run and its e2e evidence therefore prove the references
161
+ bound; they do not prove a lost one would have been caught. Fixed, along with the model
162
+ key regex the diagnostic reads (it matched only mode-infixed keys, and a *mode-less* key
163
+ is precisely what an r2v body carries when the picker inserted nothing), and covered by a
164
+ round-trip test that drives `submit_and_observe` and asserts the check actually fired
165
+ rather than calling it directly.
166
+
167
+ - **`recaptcha_mint_failed_off_migrated_host`** — when a mint fails and the page still reads as
168
+ `labs.google`, the page URL is now logged. That is the one observation which distinguishes the
169
+ race above from a genuine labs-side reCAPTCHA break, and it makes the next incident bundle
170
+ self-sufficient instead of costing a round trip to the reporter.
171
+
10
172
  ## [0.69.0] — 2026-09-06
11
173
 
12
174
  ### Added
@@ -4066,7 +4228,8 @@ shell-script template that branches on these codes.
4066
4228
 
4067
4229
  First skeleton. Not functional end-to-end yet.
4068
4230
 
4069
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...HEAD
4231
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.70.0...HEAD
4232
+ [0.70.0]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...v0.70.0
4070
4233
  [0.69.0]: https://github.com/ffroliva/gflow-cli/compare/v0.68.0...v0.69.0
4071
4234
  [0.68.0]: https://github.com/ffroliva/gflow-cli/compare/v0.67.0...v0.68.0
4072
4235
  [0.67.0]: https://github.com/ffroliva/gflow-cli/compare/v0.66.3...v0.67.0
@@ -51,6 +51,44 @@ Four rules the pipeline enforces that catch first-time contributors most often:
51
51
  The PR template's *Lifecycle* checklist mirrors this table. Tick what applies, strike what
52
52
  does not, and say why — a reviewer can then start from your evidence instead of re-deriving it.
53
53
 
54
+ ### Reporting that something is broken? Spike it first
55
+
56
+ An e2e test proves a **fix**. A spike proves a **diagnosis** — and it is what turns "this
57
+ does not work for me" into something a maintainer can act on without owning your account.
58
+
59
+ gflow drives a product we do not control, so the single most useful thing in a bug report is
60
+ what Flow actually rendered or called on your machine. Two harnesses exist, and both are `$0`
61
+ (navigation and DOM reads spend no credits and no quota):
62
+
63
+ | | where | who drives | use when |
64
+ |---|---|---|---|
65
+ | **In-process probe** | `scripts/dev/spike_*.py` | the script, through gflow's own transport | you can reach the surface and want to see what gflow sees |
66
+ | **HAR + DOM capture** | [`scripts/dev/har-spike/`](scripts/dev/har-spike/README.md) | **you**, by hand, in real Chrome over CDP | gflow cannot get far enough to observe anything |
67
+
68
+ The protocol is [`skills/spike/SKILL.md`](skills/spike/SKILL.md) (`/gflow:spike` in Claude
69
+ Code). The rule it exists to enforce:
70
+
71
+ > **A selector that does not match is evidence about the selector. It is never evidence
72
+ > about the feature.**
73
+
74
+ A timeout, an exception or an exit code tells us an anchor missed — not that the thing is
75
+ gone. Saying "X is not supported on this host" without a DOM or network observation behind it
76
+ is how a *working* feature gets documented as impossible, which has happened here and cost a
77
+ day to undo.
78
+
79
+ **Redact before you attach.** Raw captures carry cookies, Bearer tokens and prompts, and
80
+ `*.har` is gitignored repo-wide for that reason. Run
81
+ `python scripts/dev/har-spike/extract_har_summary.py <capture>.har --host <host>` and attach
82
+ the **summary** — it is redacted by design and is what a maintainer needs anyway. Never paste
83
+ a raw HAR or an unredacted incident bundle into an issue.
84
+
85
+ > **Windows-only today.** The CDP harness is nine PowerShell scripts; a portable Python twin
86
+ > is being ported one script at a time (`probe_agent_mode.py` is the pattern). On macOS or
87
+ > Linux, use the in-process probes, or attach an **incident bundle** — gflow writes one
88
+ > automatically on operational failures under `<GFLOW_CLI_HOME>/incidents/`; see
89
+ > [DEBUGGING § Automatic incident bundles](docs/DEBUGGING.md#automatic-incident-bundles) for
90
+ > the layout. Redact account ids and any cookie or token value first.
91
+
54
92
  ## Development setup
55
93
 
56
94
  ```bash
@@ -14,9 +14,9 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
14
14
 
15
15
  ## Open
16
16
 
17
- ### Flow is migrating to `flow.google.com`; gflow drives the migrated frontend for t2v and i2v from a local start frame (rest of the matrix pending)
17
+ ### Flow is migrating to `flow.google.com`; gflow drives the migrated frontend for t2v, i2v from a local start frame, and r2v from local reference files (rest of the matrix pending)
18
18
 
19
- - **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video and local-file image-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v` and `gflow video i2v --initial-frame <local file>` now run on the migrated host (with `--project`); an end frame, a frame by UUID or `@Name`, `image`, r2v, characters, scenes, extend, instructions and tools are not ported yet and still exit 36
19
+ - **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video, local-file image-to-video and local-file reference-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v`, `gflow video i2v --initial-frame <local file>` and `gflow video r2v --ref <local file>` now run on the migrated host (with `--project`); an end frame, a frame by UUID or `@Name`, references by `@Name` or `--reference-entity`, `image`, characters, scenes, extend, instructions and tools are not ported yet and still exit 36
20
20
  - **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
21
21
  - **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
22
22
  - **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in the unreleased line, post-v0.68.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint. If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
@@ -54,9 +54,22 @@ the clip). Two real clips were generated this way on 2026-09-05 — spike
54
54
  (`GFLOW_CLI_FLOW_HOST=auto`): flow.google.com is the **default** host for that
55
55
  command on every account — moved or not; `flow.google.com` forces it for
56
56
  everything, and `labs.google` switches the migrated composer off. Limits today: `--project` is required (project creation from the
57
- migrated editor is not ported), and only `t2v` and `i2v` from a local `--initial-frame` (no end frame,
57
+ migrated editor is not ported), and only `t2v`, `i2v` from a local `--initial-frame` (no end frame,
58
58
  no UUID/`@Name` frame — the migrated Frames picker exposes no media id in its DOM, so a frame is
59
- found by file name after gflow uploads it through the editor) — everything else still exits 36.
59
+ found by file name after gflow uploads it through the editor), and `r2v` from local `--ref` files
60
+ (see the next paragraph) — everything else still exits 36.
61
+
62
+ **`r2v` from local `--ref` files also runs there (2026-09-06).** Each file is uploaded
63
+ through the same editor toolbar path i2v uses — so the app's own `maseQ` reply names the
64
+ media id — and then attached as an `@` **mention** in the prompt rather than a chip slot.
65
+ Two details are load-bearing: the Ingredients submit is rpcid **`MZZa6b`** (t2v is
66
+ `YhhmEf`, i2v `eb1hJf`), and a mention is committed by **Enter** — a typed query alone
67
+ leaves the picker open and inserts nothing. The submit body is asserted to carry every
68
+ uploaded id, and a run whose references have not all attached is refused **before**
69
+ submit, because the failure mode is a full-price clip with none of them on it.
70
+ References by `@Name` and character entities stay on labs, for the same reason a frame by
71
+ UUID does: the picker exposes no media id to anchor on. Capture:
72
+ [2026-09-05-migrated-r2v-attach-surface](docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md).
60
73
 
61
74
  **Models on the migrated host.** Its picker is driven for every tier the account's
62
75
  menu actually renders, `veo-lite-lp` included — matched by the `[Lower Priority]`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.69.0
3
+ Version: 0.70.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
@@ -361,11 +361,11 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
361
361
 
362
362
  **What:** Which Flow frontend gflow drives. Google is moving accounts from `labs.google/fx/tools/flow` onto `flow.google.com` one at a time ([#639](https://github.com/ffroliva/gflow-cli/issues/639)); the two are the same product on different widget toolkits and different wire protocols, so each has its own driver.
363
363
  **Values:**
364
- - `auto` (default) — **`flow.google.com` is the default host for every request it can serve today** (`video t2v`, and `video i2v` from a local `--initial-frame` with no end frame, both with `--project`), on moved and unmoved accounts alike — the new host serves both. A request the new host cannot serve yet keeps the labs driver on an unmoved account; a moved account has no labs to fall back to: other modes exit 36, a missing `--project` or a labs-only model exit 11.
364
+ - `auto` (default) — **`flow.google.com` is the default host for every request it can serve today** (`video t2v`, `video i2v` from a local `--initial-frame` with no end frame, and `video r2v` from local `--ref` files — all with `--project`), on moved and unmoved accounts alike — the new host serves both. A request the new host cannot serve yet keeps the labs driver on an unmoved account; a moved account has no labs to fall back to: other modes exit 36, a missing `--project` or a labs-only model exit 11.
365
365
  - `flow.google.com` — force the migrated composer for everything, including what it cannot serve yet (those requests then exit 36/11 instead of falling back).
366
366
  - `labs.google` — never use the migrated composer; a moved account fails with exit 36 (kill switch).
367
367
  **Default:** `auto`
368
- **Scope today:** the migrated composer covers `gflow video t2v` and `gflow video i2v --initial-frame <local file>` with `--project <id>` (settings via the option groups, model picker, a local start frame uploaded through the editor's own Upload entry and bound in the Frames picker by file name, submit, status observed on the page's own `batchexecute` replies, download from the signed CDN URL). An end frame, a frame given by UUID or `@Name`, image, r2v, characters, scenes, extend, instructions and tools are not ported yet and exit 36 on a moved account. MCP inherits the setting from the server/daemon environment, not per call.
368
+ **Scope today:** the migrated composer covers `gflow video t2v`, `gflow video i2v --initial-frame <local file>` and `gflow video r2v --ref <local file>`, each with `--project <id>` (settings via the option groups, model picker, local files uploaded through the editor's own Upload entry — bound in the Frames picker by file name for i2v, attached as `@` mentions in the prompt for r2v — submit, status observed on the page's own `batchexecute` replies, download from the signed CDN URL). An end frame, a frame given by UUID or `@Name`, references given by `@Name` or `--reference-entity`, image, characters, scenes, extend, instructions and tools are not ported yet and exit 36 on a moved account. MCP inherits the setting from the server/daemon environment, not per call.
369
369
 
370
370
  ### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
371
371
 
@@ -149,7 +149,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
149
149
  **"How do I upgrade gflow-cli?"** → [USAGE § `gflow update`](USAGE.md#gflow-update) (`gflow update` runs the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs are refused with exit 11)
150
150
  **"How do I run the MCP server so an agent can't spend credits?"** → [CONFIGURATION § GFLOW_MCP_NO_SPEND](CONFIGURATION.md#gflow_mcp_no_spend) + [MCP § Option A2](MCP.md#option-a2-read-only-server) (`gflow mcp run --no-spend` / `GFLOW_MCP_NO_SPEND=1`; v0.57.0 — both generate tools go unregistered, not merely refused)
151
151
  **"Which Flow UI arm does a run require, and why did it exit 2 or 28?"** → [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode) (`auto` ≡ `classic` for **both** images and video — video since v0.57.0/#299, images since #595; unreachable classic aborts pre-submit with exit 28, $0; explicit `agentic` on video exits 2)
152
- **"Which Flow frontend does a run drive — labs.google or the migrated flow.google.com — and why did it exit 36 or 11?"** → [CONFIGURATION § GFLOW_CLI_FLOW_HOST](CONFIGURATION.md#gflow_cli_flow_host) (`auto` = flow.google.com for every request it can serve — `t2v`, and `i2v` from a local `--initial-frame`, with `--project`, on moved and unmoved accounts; `flow.google.com` forces it; `labs.google` is the kill switch. On a moved account an end frame, a UUID/`@Name` frame and everything except `t2v`/`i2v` exit 36, non-retryable, and a missing `--project` exits 11) · recon: [migrated-host wire protocol](superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md), [handoff mechanism](superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md), [frames attach (i2v)](superpowers/spikes/2026-09-05-migrated-frames-attach.md) · evidence: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (t2v), [LIVE_VERIFICATION_v0.69.0](LIVE_VERIFICATION_v0.69.0.md) (i2v from a local start frame, v0.69.0)
152
+ **"Which Flow frontend does a run drive — labs.google or the migrated flow.google.com — and why did it exit 36 or 11?"** → [CONFIGURATION § GFLOW_CLI_FLOW_HOST](CONFIGURATION.md#gflow_cli_flow_host) (`auto` = flow.google.com for every request it can serve — `t2v`, `i2v` from a local `--initial-frame`, and `r2v` from local `--ref` files, with `--project`, on moved and unmoved accounts; `flow.google.com` forces it; `labs.google` is the kill switch. On a moved account an end frame, a UUID/`@Name` frame, references by `@Name`/`--reference-entity` and everything except `t2v`/`i2v`/`r2v` exit 36, non-retryable, and a missing `--project` exits 11) · recon: [character surface + reCAPTCHA mint](superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md), [migrated-host wire protocol](superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md), [handoff mechanism](superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md), [frames attach (i2v)](superpowers/spikes/2026-09-05-migrated-frames-attach.md) · evidence: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (t2v), [LIVE_VERIFICATION_v0.69.0](LIVE_VERIFICATION_v0.69.0.md) (i2v from a local start frame, v0.69.0), [LIVE_VERIFICATION_v0.70.0](LIVE_VERIFICATION_v0.70.0.md) (r2v on the migrated host; character create verified there in #703)
153
153
  **"Will this get my Google account flagged or banned? What protects me?"** → [ACCOUNT_SAFETY.md](ACCOUNT_SAFETY.md) — the operational answer in one place: rate limit vs WAF block vs ban (they are different), what the tool does to stay unremarkable (headed real Chrome, ±25% interaction jitter, 0.5–1.5 s submission pacing, one project per run, isolated profiles, refuse-don't-retry), what it deliberately does **not** do (no proxies, no fingerprint spoofing, no headless unlock), the knobs, the [#241](https://github.com/ffroliva/gflow-cli/issues/241) field data on what actually triggers a 403, and what we cannot promise. Legal statement: [DISCLAIMER](../DISCLAIMER.md)
154
154
 
155
155
  **"I got a 403 / `PUBLIC_ERROR_UNUSUAL_ACTIVITY` — what now?"** → [ACCOUNT_SAFETY § When Google does push back](ACCOUNT_SAFETY.md#when-google-does-push-back) (stop, cool down 30–60 min, use real Chrome meanwhile, switch profile, widen jitter); cadence evidence in [DEBUGGING § WAF cadence](DEBUGGING.md#waf-cadence); full entry in [KNOWN_ISSUES](../KNOWN_ISSUES.md)
@@ -158,7 +158,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
158
158
  **"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
159
159
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
160
160
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
161
- **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.68.0](LIVE_VERIFICATION_v0.68.0.md) (`gflow update` self-upgrading a real `uv tool` and a real `pipx` install from their own running `gflow.exe` to the PyPI release, Windows 11, zero credits — see its own row below) · previous: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (the migrated `flow.google.com` driver — see its own row below) · previous: [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)
161
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.70.0](LIVE_VERIFICATION_v0.70.0.md) (**reference-to-video on the migrated `flow.google.com` host, verified 2026-09-06 on profile `denon82`.** Three r2v runs bound their references every time; the decisive one is semantic rather than structural — two hand-drawn reference images went in and the clip came back carrying the same marker strokes, face and paper texture, which is what separates "Flow bound the reference" from "Flow accepted and ignored it". A four-beat, two-character piece was then produced end to end and joined with the concat filter: 19.000s, 1280x576, `clip_qa` **ok**, A/V **+0.000s**, both actors recognisable across every cut from one face plate plus the canon repeated verbatim. Also verified as exit-code corrections on the real CLI: `-o <existing directory>` now exits **2 in 0.8s** instead of exit 1 after ~2 min **and a billed, orphaned clip**; `character create` on a moved account exits **36 immediately** instead of a bare `RuntimeError` exit 1 after a 20s wait. Four items recorded as NOT verified rather than omitted: #692's original failure could not be reproduced [the reporter's own re-run was on a build without the fix, so it shows the failure is intermittent, not that the fix works]; Flow CHARACTER entities were never exercised because `character create` cannot run on any account available here; `image`/`scene`/`movie`/`extend` all exit 36 on the migrated host and no unmoved account exists here; and the sign-in-interstitial fidelity question from #699 has no bundle evidence either way.) · previous: [LIVE_VERIFICATION_v0.68.0](LIVE_VERIFICATION_v0.68.0.md) (`gflow update` self-upgrading a real `uv tool` and a real `pipx` install from their own running `gflow.exe` to the PyPI release, Windows 11, zero credits — see its own row below) · previous: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (the migrated `flow.google.com` driver — see its own row below) · previous: [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)
162
162
  **"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).
163
163
  **"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)).
164
164
  **"What was live-verified for v0.66.1?"** → [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md) — **the two migrated-origin fixes, verified 2026-09-03 on profile `ffroliva` at ZERO credits, on BOTH sides of what was then read as a flapping rollout** (superseded 2026-09-04: the handoff is a one-way per-account flag and exit 36 is non-retryable since). On a real `flow.google.com` load `get_ui_driver` raised `FlowHostMigratedError` in **0 ms** (was ~36 s: ~8 s detect window + ~24 s crop cascade + 4 s URL settle), exit 36, `retryable: true` (then; `false` since 2026-09-04), `ui_driver.migrated_host_bail` logged; `await_url_settled` returned `null` in **0 ms** (measured 4018 ms before); and the locale was recovered as `en` from `html lang=en-GB` where the URL gave `null`. The no-regression half is the stronger evidence: minutes later the same command landed on the OLD host and completed **exit 0** with a real 768x1376 JPEG in 42.2 s, proving the host guard is scoped and does not short-circuit the working path. Three items recorded as NOT verified rather than omitted: driving the migrated frontend (still impossible, #639 stays open), the pt-BR recovery live (measured `html lang=pt` on `denon82` but exercised live only on `en-GB`), and the `en-GB`→`en` region reduction against a locale where region is load-bearing (`zh-Hans`/`zh-Hant`) — only two locales observed.