gflow-cli 0.66.2__tar.gz → 0.66.3__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 (874) hide show
  1. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/CHANGELOG.md +38 -1
  3. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/PKG-INFO +1 -1
  4. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/INDEX.md +2 -0
  5. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.66.2.md +57 -6
  6. gflow_cli-0.66.3/docs/LIVE_VERIFICATION_v0.66.3.md +97 -0
  7. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/PROJECT_STATUS.md +49 -5
  8. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/pyproject.toml +1 -1
  9. gflow_cli-0.66.3/scripts/dev/measure_html_lang_settle.py +81 -0
  10. gflow_cli-0.66.3/scripts/dev/verify_lang_settle_fix.py +75 -0
  11. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/__init__.py +1 -1
  12. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/client.py +62 -6
  13. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_locale_cache.py +66 -0
  14. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_routes_locale.py +17 -5
  15. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/uv.lock +1 -1
  16. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.agents/plugins/marketplace.json +0 -0
  17. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/README.md +0 -0
  18. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/active.md +0 -0
  19. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/branch-review.md +0 -0
  20. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/changelog.md +0 -0
  21. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/check.md +0 -0
  22. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/doc-review.md +0 -0
  23. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/issue-assessment.md +0 -0
  24. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/issue-resolve.md +0 -0
  25. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/known-issues.md +0 -0
  26. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/live-verify.md +0 -0
  27. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/llm-council.md +0 -0
  28. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/next.md +0 -0
  29. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/plan.md +0 -0
  30. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/pr-council-review.md +0 -0
  31. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/predict.md +0 -0
  32. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/release.md +0 -0
  33. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/scenario.md +0 -0
  34. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/sonar.md +0 -0
  35. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.claude/commands/gflow/status.md +0 -0
  36. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.env.template +0 -0
  37. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.gitattributes +0 -0
  38. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/CODEOWNERS +0 -0
  39. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/FUNDING.yml +0 -0
  40. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  41. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/copilot-instructions.md +0 -0
  42. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/dependabot.yml +0 -0
  43. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/ci.yml +0 -0
  44. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/deps-watch.yml +0 -0
  45. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/external-pr-triage.yml +0 -0
  46. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/governance-advisory.yml +0 -0
  47. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/governance-benchmark.yml +0 -0
  48. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/labels.yml +0 -0
  49. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/main-base-guard.yml +0 -0
  50. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/pages.yml +0 -0
  51. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/release.yml +0 -0
  52. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/scorecard.yml +0 -0
  53. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/selector-probe.yml +0 -0
  54. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.github/workflows/star-history-watch.yml +0 -0
  55. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.gitignore +0 -0
  56. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.gitleaks.toml +0 -0
  57. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.pre-commit-config.yaml +0 -0
  58. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/.secrets.baseline +0 -0
  59. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/AGENTS.md +0 -0
  60. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/CLAUDE.md +0 -0
  61. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/CONFIGURATION.md +0 -0
  62. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/CONTRIBUTING.md +0 -0
  63. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/DISCLAIMER.md +0 -0
  64. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/KNOWN_ISSUES.md +0 -0
  65. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/LICENSE +0 -0
  66. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/PLAN.md +0 -0
  67. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/README.md +0 -0
  68. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/RELEASE.md +0 -0
  69. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/ROADMAP.md +0 -0
  70. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/conftest.py +0 -0
  71. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  72. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/deploy/logrotate-pr-triage +0 -0
  73. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docker-compose.yml +0 -0
  74. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/ACCOUNT_SAFETY.md +0 -0
  75. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/AGENT_GUIDE.md +0 -0
  76. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/AGENT_UI_E2E.md +0 -0
  77. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/AGENT_UI_RECON.md +0 -0
  78. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/ARCHITECTURE.md +0 -0
  79. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/ASSET_TAGGING_RECON.md +0 -0
  80. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/AUTHENTICATION.md +0 -0
  81. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/CHARACTER.md +0 -0
  82. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/CHARACTER_RECON.md +0 -0
  83. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/CONFIGURATION.md +0 -0
  84. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/DATA_LAYER.md +0 -0
  85. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/DEBUGGING.md +0 -0
  86. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/DEMOS.md +0 -0
  87. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/DEVELOPMENT.md +0 -0
  88. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/E2E_TESTING.md +0 -0
  89. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/EXTERNAL_STORAGE.md +0 -0
  90. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/GITHUB.md +0 -0
  91. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  92. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  93. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/INSTRUCTIONS.md +0 -0
  94. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  95. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  96. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  97. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
  98. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  99. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  100. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  101. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  102. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  103. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  104. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  105. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  106. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  107. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  108. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  109. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  110. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  111. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  112. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  113. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  114. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  115. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  116. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  117. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  118. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  119. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  120. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  121. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  122. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  123. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  124. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  125. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  126. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  127. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  128. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  129. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  130. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  131. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  132. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  133. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  134. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  135. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  136. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  137. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  138. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  139. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  140. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  141. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  142. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  143. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  144. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  145. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  146. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  147. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  148. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  149. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  150. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  151. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  152. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  153. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  154. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  155. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  156. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  157. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  158. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
  159. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
  160. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
  161. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  162. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  163. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  164. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  165. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  166. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/MCP.md +0 -0
  167. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/MEDIA_LIBRARY.md +0 -0
  168. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/MOVIE.md +0 -0
  169. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/PROMPT_EXPANSION.md +0 -0
  170. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/REFERENCE_STRATEGIES.md +0 -0
  171. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/SECURITY.md +0 -0
  172. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/TOOLS.md +0 -0
  173. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/USAGE.md +0 -0
  174. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/USER_GUIDE.md +0 -0
  175. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/assets/demo-split-pf.gif +0 -0
  176. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/assets/example-run.gif +0 -0
  177. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/assets/examples.webp +0 -0
  178. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/medium_tutorial.md +0 -0
  179. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/schemas/movie-handoff.schema.json +0 -0
  180. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/sonar-cleanup-tracker.md +0 -0
  181. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  182. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  183. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  184. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  185. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  186. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  187. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  188. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  189. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  190. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  191. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  192. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  193. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  194. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  195. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  196. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  197. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  198. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  199. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  200. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  201. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  202. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  203. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  204. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  205. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  206. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  207. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  208. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  209. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  210. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  211. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  212. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  213. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  214. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  215. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  216. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  217. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  218. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  219. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  220. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  221. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  222. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  223. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  224. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  225. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  226. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  227. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  228. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  229. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  230. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  231. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  232. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  233. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  234. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  235. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  236. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  237. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  238. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  239. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  240. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  241. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  242. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/eval/pr_triage_eval.py +0 -0
  243. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/eval/pr_triage_fixtures.json +0 -0
  244. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/README.md +0 -0
  245. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/batch_from_config.py +0 -0
  246. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/multi_prompt_t2i.py +0 -0
  247. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/sample_config.json +0 -0
  248. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/sample_prompts.txt +0 -0
  249. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/single_image_t2i.py +0 -0
  250. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/examples/workflow_chain.py +0 -0
  251. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/index.html +0 -0
  252. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/llms.txt +0 -0
  253. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/README.md +0 -0
  254. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/01_upload_image.json +0 -0
  255. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  256. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  257. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/04_archive_workflow.json +0 -0
  258. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/05_createProject.json +0 -0
  259. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/06_batchGenerateImages.json +0 -0
  260. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  261. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  262. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  263. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  264. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  265. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/12_create_scene.json +0 -0
  266. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/13_sceneWorkflows_update.json +0 -0
  267. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/14_get_scene_workflows.json +0 -0
  268. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/samples/captured/15_commit_flowWorkflow.json +0 -0
  269. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/Dockerfile.triage +0 -0
  270. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/entrypoint.sh +0 -0
  271. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/package-lock.json +0 -0
  272. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/package.json +0 -0
  273. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  274. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/pr_triage_gate.py +0 -0
  275. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  276. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/canary/register_task.ps1 +0 -0
  277. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/canary/run_canary.py +0 -0
  278. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_doc_links.py +0 -0
  279. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_materiality.py +0 -0
  280. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_release_artifacts.py +0 -0
  281. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_repo_hygiene.py +0 -0
  282. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_test_count.py +0 -0
  283. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/check_website_docs_pii.py +0 -0
  284. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/ci/generate_website_docs.py +0 -0
  285. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/debug_editor.py +0 -0
  286. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/debug_gen_settings.py +0 -0
  287. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/debug_settings.py +0 -0
  288. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/_recording_client.py +0 -0
  289. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/_spike_common.py +0 -0
  290. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/active_plan.py +0 -0
  291. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  292. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  293. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  294. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  295. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  296. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  297. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_image_add_media_dom.py +0 -0
  298. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_locale_invariants.py +0 -0
  299. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  300. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_project_listing.py +0 -0
  301. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  302. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  303. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  304. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/cdp_drive_and_probe.py +0 -0
  305. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/character_create_spike.py +0 -0
  306. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/character_create_spike_v2.py +0 -0
  307. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/dump_character_selectors.js +0 -0
  308. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/incident_bundle_quality.py +0 -0
  309. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  310. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  311. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/live_verify_video_model_select.py +0 -0
  312. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/make_project.py +0 -0
  313. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/materiality_backtest.py +0 -0
  314. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/measure_locale_probe.py +0 -0
  315. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/measure_migrated_host_flip.py +0 -0
  316. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/patch_character.py +0 -0
  317. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/skillopt/README.md +0 -0
  318. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/skillopt/harness.py +0 -0
  319. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/skillopt/tasks.json +0 -0
  320. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/sonar-local-scan.sh +0 -0
  321. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  322. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_changelog_capture.py +0 -0
  323. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_char_editor_dom.py +0 -0
  324. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_char_gen_capture.py +0 -0
  325. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_character_prompt_format.py +0 -0
  326. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_extend_model_recon.py +0 -0
  327. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  328. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_extend_route_capture.py +0 -0
  329. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_extend_submit_capture.py +0 -0
  330. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_extend_ui_recon.py +0 -0
  331. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_image_upscale_capture.py +0 -0
  332. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_image_upscale_drive.py +0 -0
  333. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  334. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  335. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_incident_live.py +0 -0
  336. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  337. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  338. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  339. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  340. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  341. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_locale_poison.py +0 -0
  342. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_mode_roundtrip.py +0 -0
  343. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  344. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_model_inventory.py +0 -0
  345. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_movie_attach_payload.py +0 -0
  346. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_movie_entity_recon.py +0 -0
  347. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_movie_gen_capture.py +0 -0
  348. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_movie_picker_select.py +0 -0
  349. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_movie_voice_list.py +0 -0
  350. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  351. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_patch_entity.py +0 -0
  352. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_patchright.py +0 -0
  353. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  354. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/spike_video_tab_dom.py +0 -0
  355. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/verify_language_agnostic.py +0 -0
  356. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/verify_locale_navigation_race.py +0 -0
  357. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/dev/verify_model_attribution.py +0 -0
  358. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/README.md +0 -0
  359. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/capture_flow_traffic.py +0 -0
  360. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  361. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/memory_profile.py +0 -0
  362. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/recaptcha_mint.py +0 -0
  363. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/diag/spike_387_openai_compat.py +0 -0
  364. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  365. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/e2e/capture_agent_toggle.py +0 -0
  366. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/probe/run_probe.py +0 -0
  367. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/probe/spike_auth_matrix.py +0 -0
  368. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/record_demo.ps1 +0 -0
  369. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/smoke_image.py +0 -0
  370. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/smoke_video_editor.py +0 -0
  371. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/smoke_worker_style.py +0 -0
  372. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/spike_waf_camoufox.py +0 -0
  373. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/scripts/verify_chrome_auth_viability.py +0 -0
  374. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/README.md +0 -0
  375. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/changelog/SKILL.md +0 -0
  376. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/check/SKILL.md +0 -0
  377. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/doc-review/SKILL.md +0 -0
  378. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/gflow-cli/SKILL.md +0 -0
  379. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/issue-assessment/SKILL.md +0 -0
  380. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/issue-resolve/SKILL.md +0 -0
  381. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/known-issues/SKILL.md +0 -0
  382. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/live-verify/SKILL.md +0 -0
  383. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/llm-council/SKILL.md +0 -0
  384. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/plan/SKILL.md +0 -0
  385. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/pr-council-review/SKILL.md +0 -0
  386. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/predict/SKILL.md +0 -0
  387. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/release/SKILL.md +0 -0
  388. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/scenario/SKILL.md +0 -0
  389. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/sonar/SKILL.md +0 -0
  390. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/skills/status/SKILL.md +0 -0
  391. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/sonar-project.properties +0 -0
  392. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/__main__.py +0 -0
  393. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/_cli_helpers.py +0 -0
  394. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/__init__.py +0 -0
  395. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/_engine.py +0 -0
  396. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/_retry.py +0 -0
  397. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/_sapisidhash.py +0 -0
  398. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/character.py +0 -0
  399. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/dto.py +0 -0
  400. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/extend_chain.py +0 -0
  401. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/image.py +0 -0
  402. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/image_upscale.py +0 -0
  403. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/recaptcha.py +0 -0
  404. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/routes.py +0 -0
  405. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/scene.py +0 -0
  406. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/__init__.py +0 -0
  407. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/_common.py +0 -0
  408. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  409. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/base.py +0 -0
  410. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  411. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  412. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  413. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  414. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  415. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  416. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  417. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  418. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  419. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/mode_control.py +0 -0
  420. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  421. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  422. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/video.py +0 -0
  423. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/api/video_extend.py +0 -0
  424. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/__init__.py +0 -0
  425. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/base.py +0 -0
  426. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/cookies.py +0 -0
  427. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/factory.py +0 -0
  428. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/internal_chromium.py +0 -0
  429. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/real_chrome.py +0 -0
  430. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/strategies.py +0 -0
  431. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/auth/verification.py +0 -0
  432. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/browser_manager.py +0 -0
  433. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/chain.py +0 -0
  434. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/chain_manifest.py +0 -0
  435. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli.py +0 -0
  436. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_character.py +0 -0
  437. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_data.py +0 -0
  438. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_doctor.py +0 -0
  439. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_image.py +0 -0
  440. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_instructions.py +0 -0
  441. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_models.py +0 -0
  442. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_movie.py +0 -0
  443. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_project.py +0 -0
  444. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_run.py +0 -0
  445. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_scene.py +0 -0
  446. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_tools.py +0 -0
  447. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/cli_video.py +0 -0
  448. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/composition.py +0 -0
  449. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/config.py +0 -0
  450. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/__init__.py +0 -0
  451. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/chain_repo.py +0 -0
  452. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  453. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  454. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  455. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  456. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  457. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  458. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  459. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  460. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  461. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/migrations/__init__.py +0 -0
  462. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/models.py +0 -0
  463. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/queries.py +0 -0
  464. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/recorder.py +0 -0
  465. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/redaction.py +0 -0
  466. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/repository.py +0 -0
  467. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/data/store.py +0 -0
  468. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/diagnostics.py +0 -0
  469. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/errors.py +0 -0
  470. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/exceptions.py +0 -0
  471. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/file_integrity.py +0 -0
  472. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  473. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/flow_selectors/grading.py +0 -0
  474. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/flow_selectors/model.py +0 -0
  475. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/flow_selectors/registry.py +0 -0
  476. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/image_batch.py +0 -0
  477. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/json_output.py +0 -0
  478. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/__init__.py +0 -0
  479. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/prompts.py +0 -0
  480. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/resources.py +0 -0
  481. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/server.py +0 -0
  482. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/setup.py +0 -0
  483. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  484. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/mcp/tools.py +0 -0
  485. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/media.py +0 -0
  486. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/movie_manifest.py +0 -0
  487. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/observability.py +0 -0
  488. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/paths.py +0 -0
  489. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/profile_lease.py +0 -0
  490. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/profile_store.py +0 -0
  491. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/redaction.py +0 -0
  492. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/services/__init__.py +0 -0
  493. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/services/catalog_sync.py +0 -0
  494. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/services/character_create.py +0 -0
  495. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/services/doctor.py +0 -0
  496. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/services/mentions.py +0 -0
  497. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/storage.py +0 -0
  498. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/__init__.py +0 -0
  499. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/banned.py +0 -0
  500. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  501. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  502. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  503. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  504. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/expander.py +0 -0
  505. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/invocation.py +0 -0
  506. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/loader.py +0 -0
  507. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/registry.py +0 -0
  508. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/runtime.py +0 -0
  509. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/tools/spec.py +0 -0
  510. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/ui/app.py +0 -0
  511. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/ui/server.py +0 -0
  512. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/update_check.py +0 -0
  513. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/winsec.py +0 -0
  514. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/worker/codec.py +0 -0
  515. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/worker/daemon.py +0 -0
  516. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/src/gflow_cli/worker/queue.py +0 -0
  517. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tasks/lessons.md +0 -0
  518. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/test_assets/sample_batch.json +0 -0
  519. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/test_assets/sample_batch.tsv +0 -0
  520. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/test_assets/sample_batch_invalid.tsv +0 -0
  521. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/__init__.py +0 -0
  522. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/__init__.py +0 -0
  523. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/fixtures/character_gen_response.json +0 -0
  524. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/fixtures/patch_entity_response.json +0 -0
  525. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  526. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_aisandbox_auth_error.py +0 -0
  527. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_aisandbox_auth_headers.py +0 -0
  528. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_bearer_redaction.py +0 -0
  529. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_character.py +0 -0
  530. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client.py +0 -0
  531. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_character.py +0 -0
  532. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_delete_characters.py +0 -0
  533. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_errors.py +0 -0
  534. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_extend.py +0 -0
  535. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_generate_character.py +0 -0
  536. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_image.py +0 -0
  537. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_incidents.py +0 -0
  538. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_launch_kwargs.py +0 -0
  539. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_patch_entity.py +0 -0
  540. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_scene.py +0 -0
  541. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_client_upscale.py +0 -0
  542. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_concurrency.py +0 -0
  543. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_dto.py +0 -0
  544. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_engine.py +0 -0
  545. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_extend_chain.py +0 -0
  546. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_image.py +0 -0
  547. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_image_dto.py +0 -0
  548. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_image_upscale.py +0 -0
  549. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  550. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_recaptcha.py +0 -0
  551. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_retry.py +0 -0
  552. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_routes.py +0 -0
  553. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_routes_character.py +0 -0
  554. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_routes_scene.py +0 -0
  555. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_sapisidhash_helper.py +0 -0
  556. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_scene_models.py +0 -0
  557. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_video.py +0 -0
  558. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_video_extend.py +0 -0
  559. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_video_request.py +0 -0
  560. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/test_video_status_poll.py +0 -0
  561. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/__init__.py +0 -0
  562. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/conftest.py +0 -0
  563. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/drivers/__init__.py +0 -0
  564. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/drivers/test_agentic.py +0 -0
  565. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/drivers/test_classic.py +0 -0
  566. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/drivers/test_factory.py +0 -0
  567. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  568. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  569. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_base.py +0 -0
  570. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_bearer.py +0 -0
  571. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_common.py +0 -0
  572. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_evaluate_fetch.py +0 -0
  573. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_factory.py +0 -0
  574. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_fingerprint.py +0 -0
  575. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_locale_navigation.py +0 -0
  576. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_migrated_host_gate.py +0 -0
  577. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_mode_control.py +0 -0
  578. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_model_selection_loud.py +0 -0
  579. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_navigation_settled.py +0 -0
  580. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_overlay_precondition.py +0 -0
  581. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_policy_400.py +0 -0
  582. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_sapisidhash.py +0 -0
  583. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_selector_symmetry.py +0 -0
  584. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_transport_timeout.py +0 -0
  585. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_ui_automation.py +0 -0
  586. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_ui_automation_batch.py +0 -0
  587. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  588. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_ui_automation_video.py +0 -0
  589. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_ui_character_editor.py +0 -0
  590. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  591. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/strategies/test_factory.py +0 -0
  592. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/strategies/test_strategies.py +0 -0
  593. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/test_cookies.py +0 -0
  594. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/test_real_chrome.py +0 -0
  595. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/test_verification.py +0 -0
  596. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/auth/test_windows_acl.py +0 -0
  597. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  598. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/__init__.py +0 -0
  599. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_auth_status.py +0 -0
  600. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_auth_list.py +0 -0
  601. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_character.py +0 -0
  602. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_character_create.py +0 -0
  603. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_data.py +0 -0
  604. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_data_errors.py +0 -0
  605. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_data_errors_retention.py +0 -0
  606. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_data_sync.py +0 -0
  607. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_doctor.py +0 -0
  608. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_image.py +0 -0
  609. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_image_seed_removed.py +0 -0
  610. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_image_selector_drift.py +0 -0
  611. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_image_upscale.py +0 -0
  612. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  613. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_instructions.py +0 -0
  614. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_models.py +0 -0
  615. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_movie.py +0 -0
  616. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_run.py +0 -0
  617. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_scene.py +0 -0
  618. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_tools.py +0 -0
  619. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_video.py +0 -0
  620. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_video_chain.py +0 -0
  621. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_cli_video_extend.py +0 -0
  622. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_error_handling.py +0 -0
  623. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_failure_funnel.py +0 -0
  624. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_helpers.py +0 -0
  625. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_incident_output.py +0 -0
  626. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_movie_manifest.py +0 -0
  627. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  628. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_predictable_output.py +0 -0
  629. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  630. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_settings_validation.py +0 -0
  631. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/cli/test_t2i_multi_prompt.py +0 -0
  632. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/composition/test_character.py +0 -0
  633. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/composition/test_compose_prompt.py +0 -0
  634. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/composition/test_handoff.py +0 -0
  635. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/composition/test_style_variants.py +0 -0
  636. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/composition/test_style_variants_e2e.py +0 -0
  637. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/conftest.py +0 -0
  638. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/__init__.py +0 -0
  639. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_chain_repo.py +0 -0
  640. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_failure_recording.py +0 -0
  641. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_find_incomplete_character.py +0 -0
  642. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_models.py +0 -0
  643. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_null_columns_stay_null.py +0 -0
  644. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_packaging.py +0 -0
  645. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_recorder.py +0 -0
  646. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_recorder_character.py +0 -0
  647. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_redaction.py +0 -0
  648. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_repository.py +0 -0
  649. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_scene_persistence.py +0 -0
  650. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_settings_and_errors.py +0 -0
  651. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_store.py +0 -0
  652. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/data/test_store_migrations.py +0 -0
  653. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/dev/test_recording_client.py +0 -0
  654. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/__init__.py +0 -0
  655. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/conftest.py +0 -0
  656. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  657. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  658. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  659. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_auth_verification_e2e.py +0 -0
  660. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_cancellation_e2e.py +0 -0
  661. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_chain_e2e.py +0 -0
  662. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_character_create_e2e.py +0 -0
  663. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  664. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  665. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_daemon_e2e.py +0 -0
  666. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_data_layer_e2e.py +0 -0
  667. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  668. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  669. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  670. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  671. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_image_batch_e2e.py +0 -0
  672. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  673. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  674. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_incident_quality_e2e.py +0 -0
  675. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_json_output_e2e.py +0 -0
  676. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_live_agentic_instructions.py +0 -0
  677. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  678. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_project_naming_e2e.py +0 -0
  679. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  680. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_scene_compose_live.py +0 -0
  681. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  682. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_tools_e2e.py +0 -0
  683. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_transports_e2e.py +0 -0
  684. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  685. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  686. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/e2e/test_video_t2v_e2e.py +0 -0
  687. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/__init__.py +0 -0
  688. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/asset_tagging.feature +0 -0
  689. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/auth.feature +0 -0
  690. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/auth_login.feature +0 -0
  691. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/character_create.feature +0 -0
  692. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/character_read.feature +0 -0
  693. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/conftest.py +0 -0
  694. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/duration_tab_drift.feature +0 -0
  695. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/entity_provenance.feature +0 -0
  696. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/image.feature +0 -0
  697. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/image_batch_references.feature +0 -0
  698. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/image_upscale.feature +0 -0
  699. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/incident_diagnostics.feature +0 -0
  700. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/instructions.feature +0 -0
  701. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/latched_locale_recovery.feature +0 -0
  702. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/locale_picker_include.feature +0 -0
  703. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/mcp_tasks.feature +0 -0
  704. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/media_picker_tiers.feature +0 -0
  705. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/migrated_host_gate.feature +0 -0
  706. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/output_hardening.feature +0 -0
  707. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_asset_tagging_steps.py +0 -0
  708. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_auth_login_steps.py +0 -0
  709. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_auth_steps.py +0 -0
  710. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_character_create_steps.py +0 -0
  711. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_character_read_steps.py +0 -0
  712. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_image_steps.py +0 -0
  713. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_image_upscale_steps.py +0 -0
  714. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_incident_diagnostics_steps.py +0 -0
  715. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_instructions_steps.py +0 -0
  716. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_locale_picker_include_steps.py +0 -0
  717. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_mcp_tasks_steps.py +0 -0
  718. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_media_picker_tiers_steps.py +0 -0
  719. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_migrated_host_gate_steps.py +0 -0
  720. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_output_hardening_steps.py +0 -0
  721. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_step_collision_guard.py +0 -0
  722. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_video_agent_ui_steps.py +0 -0
  723. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/test_video_chain_steps.py +0 -0
  724. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/video_agent_ui.feature +0 -0
  725. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/features/video_chain.feature +0 -0
  726. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/__init__.py +0 -0
  727. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/changelog_modal_page.html +0 -0
  728. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/doctor_env.py +0 -0
  729. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/flow_model_inventory.json +0 -0
  730. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/flow_project_listing_media.json +0 -0
  731. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/listing_payload.py +0 -0
  732. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/fixtures/seeded_catalog.py +0 -0
  733. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/__init__.py +0 -0
  734. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/test_grading.py +0 -0
  735. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/test_model.py +0 -0
  736. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/test_model_governance.py +0 -0
  737. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/test_registry.py +0 -0
  738. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/flow_selectors/test_report.py +0 -0
  739. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/image_batch/__init__.py +0 -0
  740. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/image_batch/test_image_manifest.py +0 -0
  741. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/image_batch/test_jitter_config.py +0 -0
  742. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/image_batch/test_observability_events.py +0 -0
  743. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/__init__.py +0 -0
  744. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/conftest.py +0 -0
  745. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/constants.py +0 -0
  746. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/test_expander_gateway.py +0 -0
  747. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/test_storage_gcs.py +0 -0
  748. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/integration/test_storage_s3.py +0 -0
  749. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/__init__.py +0 -0
  750. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/conftest.py +0 -0
  751. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_auth_status_tool.py +0 -0
  752. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_cli_parity.py +0 -0
  753. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_error_funnel.py +0 -0
  754. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_http_transport.py +0 -0
  755. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_known_issues_resource.py +0 -0
  756. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_no_spend.py +0 -0
  757. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_rate_limit_envelope.py +0 -0
  758. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_resources.py +0 -0
  759. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_server.py +0 -0
  760. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_setup.py +0 -0
  761. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_stdio_transport.py +0 -0
  762. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_tasks_extension.py +0 -0
  763. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_tools_helpers.py +0 -0
  764. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_tools_instructions.py +0 -0
  765. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/mcp/test_tools_wired.py +0 -0
  766. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  767. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_canary_classify.py +0 -0
  768. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_canary_reexec.py +0 -0
  769. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_capture_locale_invariants.py +0 -0
  770. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_check_materiality.py +0 -0
  771. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_check_release_artifacts.py +0 -0
  772. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_check_repo_hygiene.py +0 -0
  773. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_check_test_count.py +0 -0
  774. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_check_website_docs_pii.py +0 -0
  775. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_codex_plugin.py +0 -0
  776. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_generate_website_docs.py +0 -0
  777. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_incident_bundle_quality.py +0 -0
  778. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_materiality_backtest.py +0 -0
  779. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/scripts/test_workflow_hardening.py +0 -0
  780. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/__init__.py +0 -0
  781. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_catalog_sync.py +0 -0
  782. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_character_create_redaction.py +0 -0
  783. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_character_create_saga.py +0 -0
  784. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_character_gen_no_direct_post.py +0 -0
  785. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_doctor.py +0 -0
  786. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_media_attribution.py +0 -0
  787. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_mentions_observability.py +0 -0
  788. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_mentions_parse.py +0 -0
  789. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_mentions_resolve.py +0 -0
  790. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/services/test_resolve_and_apply.py +0 -0
  791. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/smoke/__init__.py +0 -0
  792. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/smoke/test_profile_account_smoke.py +0 -0
  793. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/smoke/test_real_flow.py +0 -0
  794. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_auth.py +0 -0
  795. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_browser_manager.py +0 -0
  796. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_chain.py +0 -0
  797. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_chain_manifest.py +0 -0
  798. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_cli_data.py +0 -0
  799. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_cli_project.py +0 -0
  800. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_config.py +0 -0
  801. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_conftest_isolation.py +0 -0
  802. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_data_queries.py +0 -0
  803. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_bundle.py +0 -0
  804. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_events.py +0 -0
  805. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_journal.py +0 -0
  806. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_recorder.py +0 -0
  807. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_retention.py +0 -0
  808. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_diagnostics_sanitize.py +0 -0
  809. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_documentation_gate.py +0 -0
  810. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_duration_tab_drift.py +0 -0
  811. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_entity_provenance.py +0 -0
  812. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_errors.py +0 -0
  813. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_errors_classification.py +0 -0
  814. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_image_batch_references.py +0 -0
  815. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_incident_generation_requests.py +0 -0
  816. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_json_output.py +0 -0
  817. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_marker_registry.py +0 -0
  818. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_media.py +0 -0
  819. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_observability.py +0 -0
  820. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_overlay_banner_dismissal.py +0 -0
  821. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_paths.py +0 -0
  822. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_playwright_pin.py +0 -0
  823. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_profile_lease.py +0 -0
  824. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_profile_lease_subprocess.py +0 -0
  825. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_profile_store.py +0 -0
  826. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_profile_store_locale.py +0 -0
  827. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_project_list_urls.py +0 -0
  828. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_self_documenting_errors.py +0 -0
  829. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_smoke.py +0 -0
  830. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/test_update_check.py +0 -0
  831. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/__init__.py +0 -0
  832. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_banned.py +0 -0
  833. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_expander.py +0 -0
  834. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_invocation.py +0 -0
  835. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_loader.py +0 -0
  836. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_registry.py +0 -0
  837. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_runtime.py +0 -0
  838. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/tools/test_spec.py +0 -0
  839. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/ui/test_app.py +0 -0
  840. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_codec.py +0 -0
  841. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_daemon.py +0 -0
  842. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_mcp_daemon_race.py +0 -0
  843. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_queue.py +0 -0
  844. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_queue_multiprocess.py +0 -0
  845. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/tests/worker/test_queue_reconciliation.py +0 -0
  846. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/ACCOUNT_SAFETY.md +0 -0
  847. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/ARCHITECTURE.md +0 -0
  848. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/AUTHENTICATION.md +0 -0
  849. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/CHARACTER.md +0 -0
  850. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/CONFIGURATION.md +0 -0
  851. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/DATA_LAYER.md +0 -0
  852. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/DEBUGGING.md +0 -0
  853. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/DEVELOPMENT.md +0 -0
  854. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/E2E_TESTING.md +0 -0
  855. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/EXTERNAL_STORAGE.md +0 -0
  856. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/INSTRUCTIONS.md +0 -0
  857. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/KNOWN_ISSUES.md +0 -0
  858. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/MCP.md +0 -0
  859. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/MEDIA_LIBRARY.md +0 -0
  860. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/MOVIE.md +0 -0
  861. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/PROMPT_EXPANSION.md +0 -0
  862. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/SECURITY.md +0 -0
  863. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/TOOLS.md +0 -0
  864. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/USAGE.md +0 -0
  865. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/USER_GUIDE.md +0 -0
  866. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/agents.md +0 -0
  867. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/index.md +0 -0
  868. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/installation.md +0 -0
  869. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/onboarding-mockup.html +0 -0
  870. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/onboarding.md +0 -0
  871. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/docs/stylesheets/extra.css +0 -0
  872. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/mkdocs.yml +0 -0
  873. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/requirements.in +0 -0
  874. {gflow_cli-0.66.2 → gflow_cli-0.66.3}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.66.2",
3
+ "version": "0.66.3",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.66.3] — 2026-09-03
11
+
12
+ ### Fixed
13
+
14
+ - **`<html lang>` was read before the app set it, so every account whose URL could not answer
15
+ resolved to `en` ([#651](https://github.com/ffroliva/gflow-cli/issues/651)).** Flow serves an
16
+ **`en` shell** and rewrites `lang` during hydration. The single early read added by
17
+ [#643](https://github.com/ffroliva/gflow-cli/issues/643) therefore returned the shell value —
18
+ and the accounts it hit are exactly the ones #643 was written for: those where the URL carries
19
+ no locale segment. Reported by
20
+ [@maipmacrothorax-75](https://github.com/maipmacrothorax-75) on a pt-BR account resolving `en`
21
+ while both pages served `<html lang="pt">`, with the mechanism offered explicitly as a guess.
22
+
23
+ The guess is confirmed, and it reproduces on the **old** host — so this was never a migration
24
+ bug. Measured on a pt account, two consecutive loads:
25
+
26
+ | t (ms) | `lang` | `readyState` |
27
+ |---|---|---|
28
+ | 887 | `en` | interactive |
29
+ | **1510** | `en` | **complete** |
30
+ | 2092 | `en` | complete |
31
+ | **2488** | **`pt`** | complete |
32
+
33
+ **`readyState` is not a usable signal** — it reaches `complete` a full second *before* the
34
+ flip, so the obvious "wait for complete, then read" would have shipped the same bug with more
35
+ code. The DOM node count oscillates (136 → 300 → 249 → 251) and does not discriminate either.
36
+ Nothing cheap predicts the flip, so `_resolve_account_locale` now **observes** it: read once,
37
+ bounded-wait for the value to change, re-read.
38
+
39
+ A timeout is an **answer**, not a failure — either the account's locale genuinely equals the
40
+ shell default, or the page never hydrated in the window. Both leave the first read as the best
41
+ available answer, which is exactly the previous behaviour, so the branch can never be worse
42
+ than what it replaces. It is logged as `client.account_locale_lang_unchanged` so the field can
43
+ tell the two apart. Cost: an account whose locale **is** the shell default pays the 4 s bound
44
+ once per process.
45
+
10
46
  ## [0.66.2] — 2026-09-03
11
47
 
12
48
  ### Fixed
@@ -3784,7 +3820,8 @@ shell-script template that branches on these codes.
3784
3820
 
3785
3821
  First skeleton. Not functional end-to-end yet.
3786
3822
 
3787
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.66.2...HEAD
3823
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.66.3...HEAD
3824
+ [0.66.3]: https://github.com/ffroliva/gflow-cli/compare/v0.66.2...v0.66.3
3788
3825
  [0.66.2]: https://github.com/ffroliva/gflow-cli/compare/v0.66.1...v0.66.2
3789
3826
  [0.66.1]: https://github.com/ffroliva/gflow-cli/compare/v0.66.0...v0.66.1
3790
3827
  [0.66.0]: https://github.com/ffroliva/gflow-cli/compare/v0.65.0...v0.66.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.66.2
3
+ Version: 0.66.3
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
@@ -162,6 +162,8 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
162
162
 
163
163
  **"What was live-verified for v0.66.0?"** → [LIVE_VERIFICATION_v0.66.0](LIVE_VERIFICATION_v0.66.0.md) — **#639 Flow's `flow.google.com` migration, verified 2026-09-03 on profile `ffroliva` at ZERO credits.** The maintainer's own account turned out to be inside the rollout, so the fix was proven against the real migrated frontend rather than a reconstructed DOM: a read-only probe of `flow.google.com/project/<id>` measured `i_total: 0` (independently reproducing the reporter's central measurement) and drove the production functions against the live page — `flow_host_kind: "migrated"`, `_check_logged_in: true` (it was `false` before the fix, i.e. a valid session read as logged-out), and `_mode_switch_error` returning `FlowHostMigratedError` / exit 36 / `retryable: true`. The flap is confirmed on ONE account: a credit-free `image t2i` minutes earlier landed on the OLD host and completed exit 0 with a real 768x1376 JPEG (`ffd8ffe0`, 401,939 bytes, Pillow dims matching the API claim), proving the rewritten host gate does not regress the old path. Also recorded: the migrated URL **drops `/fx/tools/flow` entirely** — it is `/project/<id>` — which is why a substring gate on `labs.google` could never match it; and the migrated composer is not control-less but exposes **no `data-testid`, zero ligature `<i>`, and 13 `button[aria-label]`** (`Settings trigger`, `Start generation`, …), recorded as recon for the follow-up WITH the caveat that `aria-label` is translated and therefore Tier-2 at best under the locale-invariance rule. One item is recorded as NOT verified rather than omitted: gflow **driving** the migrated frontend, which is out of scope and keeps #639 open. Verification also hit pre-existing [#561](https://github.com/ffroliva/gflow-cli/issues/561) (401 on `project.createProject`), A/B'd against unmodified `develop` to prove it was not this change, then routed around with an existing `--project`.
164
164
 
165
+ **"What was live-verified for v0.66.3?"** → [LIVE_VERIFICATION_v0.66.3](LIVE_VERIFICATION_v0.66.3.md) — the `<html lang>` hydration race, with the negative result that chose the design: **`readyState` reaches `complete` a full second BEFORE the attribute flips**, so "wait for complete, then read" would have shipped the same bug. Component and end-to-end measurements are reported separately on purpose. NOT verified: the migrated origin (fix proven on the old host, where the race also occurs) and the 4 s bound against a cold first load.
166
+
165
167
  **"What was live-verified for v0.66.2?"** → [LIVE_VERIFICATION_v0.66.2](LIVE_VERIFICATION_v0.66.2.md) — the old host proven live at zero credits (**exit 0**, real 768x1376 JPEG, twice), the locale cache measured **7.41 s → 2.66 s**, and the migrated path recorded as **NOT verified** because the rollout flapped back (72/72 navigations landed on `labs.google`). No time-to-exit-36 is claimed — this release exists because v0.66.1 reported one from the wrong entrypoint, so see also the correction block atop [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md).
166
168
 
167
169
  **"What was live-verified for v0.65.0?"** → [LIVE_VERIFICATION_v0.65.0](LIVE_VERIFICATION_v0.65.0.md) — the guard A/B (three runs, zero credits, control included); the `chain`/`movie` duration guards are validation that refuses **before** any transport call, so they are covered by a red state that reproduces the mid-spend crash in a test plus negative controls, and the reason they were not live-run is recorded rather than omitted.
@@ -153,18 +153,69 @@ the *cached* state. Because the lang-derived locale is deliberately not persiste
153
153
  unchanged by this branch — the earlier claim that they become "account-correct" was wrong and is
154
154
  retracted here rather than shipped.
155
155
 
156
+ ## Layer 6 — the migrated path, verified independently by the reporter
157
+
158
+ Everything above was measured on maintainer accounts that had flapped back to the old host. The
159
+ migrated path was verified by [@maipmacrothorax-75](https://github.com/maipmacrothorax-75) on a
160
+ permanently-migrated account — branch installed from git, reverted afterwards, zero credits,
161
+ posted to [#639](https://github.com/ffroliva/gflow-cli/issues/639).
162
+
163
+ | | v0.66.1 | branch, before the `mode_control` guard | v0.66.2 |
164
+ |---|---|---|---|
165
+ | total, per run | 57.0 / 58.3 / 57.0 s | 19.4 / 15.0 / 14.9 s | **4.08 – 4.26 s** |
166
+ | `ui_driver.migrated_host_bail` | **absent** | present, `at=detect_ui_mode` | present, **`at=mode_control`** |
167
+ | `mode_control.ensure_media_incomplete` | every run | every run | **never** |
168
+ | `ui_automation_video.selector_probe_failed` | every run | never | never |
169
+
170
+ Typical v0.66.2 timeline on a migrated load:
171
+
172
+ ```
173
+ 2.82 ui_automation.url_stable_after_goto
174
+ 3.44 ui_driver.migrated_host_bail at=mode_control (+0.62)
175
+ 4.09 error_raised FlowHostMigratedError, exit 36, retryable
176
+ ```
177
+
178
+ **~0.6 s from the host becoming knowable to the abort**; ~4 s total, essentially browser launch
179
+ plus navigation. Nine runs on the final build, `at=mode_control` every time.
180
+
181
+ Two things this settles that no maintainer measurement could:
182
+
183
+ 1. **The `at=` field earned itself.** The intermediate run bailed at `detect_ui_mode`, not
184
+ `exit_agent_mode` — which is how the reporter identified, from the log alone, that the
185
+ `exit_agent_mode` guard sat *after* the ~11 s dismissal rather than before it. A late review
186
+ angle found the same gap independently; the log field is what made it visible from outside
187
+ the codebase.
188
+ 2. **57 s → 4 s is real**, and it is the difference between a caller's retry loop being viable
189
+ and not.
190
+
191
+ **One unexplained anomaly, recorded because it was observed.** The first run after a fresh
192
+ install ended in `error_unhandled` at 3.42 s — after `setup_shared_page`, before
193
+ `entering_existing_project` — `exception_class: "Error"` (Playwright's base class), message
194
+ redacted to hashes. It did not reproduce; the other 8 runs on that build were clean exit 36. A
195
+ one-off that cannot be reproduced is not evidence, and it is here only so a second sighting has
196
+ something to match against.
197
+
156
198
  ## Recorded as NOT verified rather than omitted
157
199
 
158
- - **The migrated path firing fast.** 72/72 navigations landed on the old host, so no migrated load
159
- was available to time. The gate is proven by unit tests and A/B control, **not** by a live run.
160
- The instrument is committed; the honest next step is a later flap or a run from the reporter's
161
- permanently-migrated account.
162
- - **The achieved time-to-exit-36 on a real migrated run.** Unmeasured, and deliberately not
163
- estimated. The design does not depend on it — the guard sits where the run already blocks.
200
+ - ~~**The migrated path firing fast.**~~ **Now verified — see Layer 6.** This entry originally
201
+ said unverified because 72/72 navigations *from this machine* landed on the old host. That was
202
+ true of this machine and false of the project: the reporter had already run it on a
203
+ permanently-migrated account and posted the numbers to #639 before the tag was cut, and they
204
+ were not read in time. Kept rather than deleted — "I could not measure it" and "nobody measured
205
+ it" are different claims, and this doc conflated them.
164
206
  - **Driving the migrated frontend.** Still impossible. #639 stays open; this PR says `Refs`.
165
207
  - **A non-English profile recovering live.** `denon82` is cached `"pt"` (it genuinely redirects),
166
208
  so the lang-recovery path was exercised live only on `en`. The `pt` case is unit-tested.
167
209
  - **The `en-GB` → `en` region reduction where region is load-bearing** (`zh-Hans`/`zh-Hant`).
168
210
  Unchanged from v0.66.1, still only two locales observed.
211
+ - **A defect this verification found, shipped in v0.66.2 and not fixed by it.** On the reporter's
212
+ **pt-BR** account the locale resolves to `en`, while `document.documentElement.lang` reads `pt`
213
+ on both `flow.google.com/` and `flow.google.com/project/<id>`, `navigator.language` is `pt-BR`,
214
+ and the whole UI renders in Portuguese. The probe logs at ~1.63 s, before
215
+ `entering_existing_project` at ~2.31 s — early enough that it may be reading the initial HTML
216
+ shell before the app sets `lang`. **The mismatch is measured; the mechanism is a hypothesis and
217
+ was not instrumented.** This is precisely the population #643 was written for, so the
218
+ `<html lang>` fallback (shipped v0.66.1) can latch a locale the account does not use. Tracked
219
+ separately — it is not a migration bug.
169
220
  - **Full-suite coverage %.** The targeted suites ran without `--cov` (an unscoped `pytest --cov`
170
221
  OOMs this machine); the 80% floor is enforced by CI.
@@ -0,0 +1,97 @@
1
+ # Live Verification — v0.66.3 (`<html lang>` is read after hydration, not before)
2
+
3
+ **Date:** 2026-09-03 · **Accounts:** `denon82` (pt), `ffroliva` (en) · **Platform:** Windows 11, Chrome strategy
4
+ **Credits spent:** **0** — navigation and DOM reads only; nothing submits.
5
+
6
+ ## What had to be proven
7
+
8
+ One fix ([#651](https://github.com/ffroliva/gflow-cli/issues/651)): the account locale must come
9
+ from `<html lang>` **after** Flow's app has set it, not from the `en` shell it serves first.
10
+
11
+ ## Layer 1 — the defect, measured (this is what chose the design)
12
+
13
+ Sampling `document.documentElement.lang` after `page.goto(wait_until="domcontentloaded")` returns,
14
+ on a **pt** account, two consecutive loads (`scripts/dev/measure_html_lang_settle.py`):
15
+
16
+ | t (ms) | `lang` | `readyState` | DOM nodes |
17
+ |---|---|---|---|
18
+ | 887 | `en` | interactive | 136 |
19
+ | **1510** | `en` | **complete** | 300 |
20
+ | 2092 | `en` | complete | 249 |
21
+ | **2488** | **`pt`** | complete | 262 |
22
+ | 7398 | `pt` | complete | 251 |
23
+
24
+ Two negative results that mattered more than the positive one:
25
+
26
+ - **`readyState` is not a hydration signal for `lang`.** It reaches `complete` a full second
27
+ *before* the flip. "Wait for complete, then read" — the obvious fix — would have shipped the
28
+ same bug with more code.
29
+ - **DOM node count does not discriminate.** It oscillates 136 → 300 → 249 → 251 and settles
30
+ within 2 of its pre-flip value.
31
+
32
+ Nothing cheap predicts the flip, so the fix **observes** it.
33
+
34
+ ## Layer 2 — the fix, on a live page (COMPONENT measurement)
35
+
36
+ `scripts/dev/verify_lang_settle_fix.py`, part A. This calls the helper directly against a real
37
+ bootstrap page — **it is a component measurement and is labelled as one.**
38
+
39
+ ```
40
+ [A · COMPONENT — helper on a live page] profile=denon82
41
+ naive early read : 'en'
42
+ _settled_lang : 'pt' (+638 ms)
43
+ verdict : CAPTURED THE FLIP
44
+ ```
45
+
46
+ ## Layer 3 — the real bootstrap (END-TO-END measurement)
47
+
48
+ Part B, on the account that exercises the *timeout* branch — its locale equals the `en` shell, so
49
+ the attribute never changes:
50
+
51
+ ```
52
+ client.account_locale_lang_unchanged lang=en waited_ms=4000 reason=TimeoutError
53
+ client.account_locale_resolved locale=en source=html_lang
54
+ ```
55
+
56
+ Correct answer, and the cost is visible: **the 4 s bound, once per process** (bootstrap ~2.7 s →
57
+ ~6 s on this account). That is the price of not guessing, and it is bounded. The event name makes
58
+ "the shell value was already right" distinguishable from "we timed out" in any field log.
59
+
60
+ **Layers 2 and 3 are reported separately on purpose.** Collapsing a component number into a
61
+ user-facing claim is precisely the error corrected at the top of
62
+ [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md), and this release is not going to
63
+ repeat it one version later.
64
+
65
+ ## Layer 4 — offline
66
+
67
+ - Tests written red first; **A/B control**: neutering `_settled_lang` fails **exactly 3** — the
68
+ two new cases plus the probe-failure test, since the helper owns the error handling too.
69
+ - `1663 passed / 3 skipped` across `tests/api`, `tests/features`, `tests/mcp`, `tests/worker`.
70
+ - `ruff check` / `ruff format --check` clean on `src tests`; `pyright src` at the `develop`
71
+ baseline; repo hygiene, doc links, website-docs PII and the `website/docs` mirror all green.
72
+ - CI on [#652](https://github.com/ffroliva/gflow-cli/pull/652): **15/15**, including the
73
+ SonarCloud quality gate.
74
+
75
+ ## Layer 5 — MCP
76
+
77
+ No CLI leaf, option, or request-DTO field changed. The fix is in `FlowApiClient`, which the MCP
78
+ worker constructs identically to the CLI, so both surfaces inherit it and no `mcp/tools.py`
79
+ change is implied.
80
+
81
+ ## Recorded as NOT verified rather than omitted
82
+
83
+ - **A non-`en` account on the MIGRATED origin.** The fix is proven on the old host, where the
84
+ race also occurs — that is what made it testable at all. The reporter's pt-BR migrated account
85
+ is where it originally surfaced, and it has not been re-run there since the fix.
86
+ - **The 4 s bound against a cold first load.** One observed session had `lang` fail to flip
87
+ within 4 s on its first navigation, yet flip in 638 ms two seconds later. Either Flow served
88
+ English on that load (its URL settle also timed out, so no redirect either) or the bound is
89
+ short cold. Unresolved; `client.account_locale_lang_unchanged` is the signal that will tell us.
90
+ - **The `was=pt now=?` demotion introduced in v0.66.2.** Folding only the URL-derived segment
91
+ means a learned `pt` drops to PROVISIONAL whenever the URL settle times out. Self-healing on
92
+ the next redirecting run, and the locale is re-derived per run, so nothing is permanently lost
93
+ — but it is the same *shape* of demotion #643 complained about and deserves a decision.
94
+ - **Whether a wrong locale segment causes a redirect bounce** (`/fx/en/...` on a non-`en`
95
+ account) or merely an English UI. Only the reporter's account can settle this.
96
+ - **Full-suite coverage %.** Run without `--cov` (an unscoped `pytest --cov` OOMs this machine);
97
+ the 80% floor is enforced by CI.
@@ -4,6 +4,40 @@
4
4
 
5
5
  ## Current release
6
6
 
7
+ **v0.66.3 — alpha.** **gflow was reading Flow's locale off the `en` shell it serves before the
8
+ app rewrites it, so every account whose URL could not answer came back English.**
9
+
10
+ Flow serves an `en` shell and sets the real `<html lang>` during hydration. The single early read
11
+ added by [#643](https://github.com/ffroliva/gflow-cli/issues/643) therefore returned `en` — for
12
+ exactly the accounts #643 existed to help, the ones whose URL carries no locale segment. Reported
13
+ by [@maipmacrothorax-75](https://github.com/maipmacrothorax-75) on a pt-BR account resolving `en`
14
+ while both pages served `<html lang="pt">`, with the mechanism offered explicitly as a guess.
15
+
16
+ The guess was right, and it **reproduces on the old host** — so this was never a migration bug.
17
+ Measured, two consecutive loads:
18
+
19
+ | t (ms) | `lang` | `readyState` |
20
+ |---|---|---|
21
+ | 887 | `en` | interactive |
22
+ | **1510** | `en` | **complete** |
23
+ | 2092 | `en` | complete |
24
+ | **2488** | **`pt`** | complete |
25
+
26
+ The useful part of that table is the negative result: **`readyState` reaches `complete` a full
27
+ second before the flip**, so the obvious "wait for complete, then read" would have shipped the
28
+ same bug with more code. DOM node count oscillates and does not discriminate either. Nothing
29
+ cheap predicts the flip, so the resolver now **observes** it — read, bounded-wait for a change,
30
+ re-read — and treats a timeout as an *answer* (the shell value was already correct) rather than a
31
+ failure, logged distinctly so the field can tell the two apart.
32
+
33
+ Verification: [LIVE_VERIFICATION_v0.66.3](LIVE_VERIFICATION_v0.66.3.md). Proven at zero credits:
34
+ the helper captures the flip live (`en` → `pt`, +638 ms) and a real bootstrap on an `en` account
35
+ resolves correctly at the cost of the 4 s bound. Those two are reported **separately**, because
36
+ collapsing a component measurement into a user-facing claim is the mistake v0.66.1 made and
37
+ v0.66.2 corrected.
38
+
39
+ <details><summary>v0.66.2 — the fast-fail that had never fired, and a locale cache answering the wrong question</summary>
40
+
7
41
  **v0.66.2 — alpha.** **The fast-fail v0.66.1 announced had never once fired, and the locale
8
42
  cache was answering a question nobody asked it.**
9
43
 
@@ -42,11 +76,21 @@ day it shipped).
42
76
  Still not drivable — #639 stays open for that.
43
77
 
44
78
  Verification: [LIVE_VERIFICATION_v0.66.2](LIVE_VERIFICATION_v0.66.2.md). The old host is proven
45
- live at zero credits (**exit 0**, real 768x1376 JPEG, twice). **The migrated path is recorded as
46
- NOT verified**: the rollout flapped back mid-work and 72/72 navigations landed on `labs.google`,
47
- so the gate rests on unit tests and A/B controls, and **no time-to-exit-36 is claimed anywhere**.
48
- Given this release exists because a number was reported from the wrong entrypoint, inventing a
49
- replacement would have repeated the error.
79
+ live at zero credits (**exit 0**, real 768x1376 JPEG, twice). The **migrated** path — which no
80
+ maintainer account could reach, because the rollout flapped back mid-work — was verified by
81
+ [@maipmacrothorax-75](https://github.com/maipmacrothorax-75) on a permanently-migrated account:
82
+ **57 s → 4.08–4.26 s**, `ui_driver.migrated_host_bail` present with `at=mode_control` on all nine
83
+ runs, and the crop cascade and agent dismissal both gone. That measurement was posted to #639
84
+ before the tag was cut and was not read in time, so the shipped verification doc understated its
85
+ own result; the correction is recorded there rather than quietly applied.
86
+
87
+ **Found by that same verification and NOT fixed here:** on a pt-BR account the locale resolves
88
+ `en` while both pages serve `<html lang="pt">` — the probe appears to read before the app sets
89
+ the attribute. That is the population #643 was written for, so the `<html lang>` fallback can
90
+ latch a locale the account does not use. Tracked separately; it is not a migration bug.
91
+
92
+
93
+ </details>
50
94
 
51
95
  <details><summary>v0.66.1 — a fast-fail that never fired (superseded by v0.66.2)</summary>
52
96
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gflow-cli"
3
- version = "0.66.2"
3
+ version = "0.66.3"
4
4
  description = "Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -0,0 +1,81 @@
1
+ """Does `<html lang>` change between goto-return and hydration, and what signals it? (#651)
2
+
3
+ The reporter measured `locale=en` on a pt-BR account whose pages serve
4
+ `<html lang="pt">`, and offered the mechanism as an explicit guess: the probe reads
5
+ the initial HTML shell before the app sets `lang`.
6
+
7
+ Run 1 confirmed the race on the OLD host (no migrated account needed):
8
+ `en` until ~1.9 s, `pt` from ~2.9 s.
9
+
10
+ This run adds `readyState` and a DOM-node count alongside `lang`, to find a
11
+ *hydration signal* the fix can key on instead of a guessed timing constant.
12
+
13
+ Zero credits: navigation only.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import asyncio
19
+ import sys
20
+ from time import perf_counter
21
+ from typing import Any
22
+
23
+ sys.path.insert(0, r"C:\development\github\gflow-cli\src")
24
+ sys.path.insert(0, r"C:\development\github\gflow-cli\scripts\dev")
25
+
26
+ from gflow_cli.api import routes # noqa: E402
27
+ from gflow_cli.api.routes import locale_segment_from_lang_attr # noqa: E402
28
+
29
+ from _spike_common import build_client, resolve_profile_dir # noqa: E402, isort: skip
30
+
31
+ SAMPLES_MS = [0, 200, 400, 600, 900, 1200, 1600, 2000, 2400, 2800, 3200, 4000, 6000]
32
+
33
+ _SNAP = """() => ({
34
+ lang: document.documentElement.lang || '',
35
+ ready: document.readyState,
36
+ nodes: document.querySelectorAll('*').length
37
+ })"""
38
+
39
+
40
+ async def _sample(page: Any, label: str, url: str) -> None:
41
+ t0 = perf_counter()
42
+ await page.goto(url, wait_until="domcontentloaded", timeout=45_000)
43
+ rows: list[tuple[int, str, str | None, str, int]] = []
44
+ prev = 0
45
+ for target in SAMPLES_MS:
46
+ if target - prev > 0:
47
+ await page.wait_for_timeout(target - prev)
48
+ prev = target
49
+ try:
50
+ snap = await page.evaluate(_SNAP)
51
+ except Exception as exc: # noqa: BLE001
52
+ snap = {"lang": f"<{type(exc).__name__}>", "ready": "?", "nodes": -1}
53
+ rows.append(
54
+ (
55
+ round((perf_counter() - t0) * 1000),
56
+ snap["lang"],
57
+ locale_segment_from_lang_attr(snap["lang"]),
58
+ snap["ready"],
59
+ snap["nodes"],
60
+ )
61
+ )
62
+
63
+ print(f"\n--- {label} {url}")
64
+ print(f"{'t_ms':>7} {'lang':<8} {'seg':<8} {'readyState':<12} {'DOM nodes'}")
65
+ for ms, lang, seg, ready, nodes in rows:
66
+ print(f"{ms:>7} {lang!r:<8} {seg!r:<8} {ready:<12} {nodes}")
67
+
68
+
69
+ async def _main(profile: str) -> int:
70
+ pdir = resolve_profile_dir(profile)
71
+ async with build_client(pdir) as client:
72
+ page = client._page # noqa: SLF001 — dev instrument
73
+ assert page is not None
74
+ print(f"profile={profile} client-resolved locale={client._account_locale!r}") # noqa: SLF001
75
+ await _sample(page, "bootstrap", routes.EDITOR_BOOTSTRAP_URL)
76
+ await _sample(page, "bootstrap (2nd load)", routes.EDITOR_BOOTSTRAP_URL)
77
+ return 0
78
+
79
+
80
+ if __name__ == "__main__":
81
+ raise SystemExit(asyncio.run(_main(sys.argv[1] if len(sys.argv) > 1 else "denon82")))
@@ -0,0 +1,75 @@
1
+ """Live proof for #651 — `<html lang>` is read after hydration, not before.
2
+
3
+ Two measurements, deliberately kept distinct, because conflating them is the error
4
+ this whole line of work exists to correct (see the correction block atop
5
+ ``docs/LIVE_VERIFICATION_v0.66.1.md``):
6
+
7
+ **A — the helper, exercised against a live page.** ``_settled_lang`` is called
8
+ directly on a real bootstrap page of a **pt** account. This proves the flip is
9
+ captured: the naive early read returns ``en``, the fixed read returns ``pt``. It is
10
+ a component measurement and is labelled as one.
11
+
12
+ **B — the real bootstrap, end to end.** ``FlowApiClient.__aenter__`` on a latched
13
+ profile whose locale *equals* the shell default, which is the case that pays the
14
+ settle timeout. This is the user-visible cost, on the path a user actually takes.
15
+
16
+ Zero credits: navigation only.
17
+
18
+ uv run python scripts/dev/verify_lang_settle_fix.py denon82 ffroliva
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import asyncio
24
+ import sys
25
+ from pathlib import Path
26
+ from time import perf_counter
27
+ from typing import Any
28
+
29
+ sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "src"))
30
+
31
+ from gflow_cli.api import routes # noqa: E402
32
+
33
+ from _spike_common import build_client, resolve_profile_dir # noqa: E402, isort: skip
34
+
35
+
36
+ async def _component_check(profile: str) -> None:
37
+ """A — does the helper capture the post-hydration value on a live page?"""
38
+ async with build_client(resolve_profile_dir(profile)) as client:
39
+ page: Any = client._page # noqa: SLF001 — dev instrument
40
+ await page.goto(routes.EDITOR_BOOTSTRAP_URL, wait_until="domcontentloaded", timeout=45_000)
41
+
42
+ naive = await page.evaluate("() => document.documentElement.lang || ''")
43
+ t0 = perf_counter()
44
+ settled = await client._settled_lang(page) # type: ignore[attr-defined] # noqa: SLF001
45
+ ms = round((perf_counter() - t0) * 1000)
46
+
47
+ print(f"\n[A · COMPONENT — helper on a live page] profile={profile}")
48
+ print(f" naive early read : {naive!r}")
49
+ print(f" _settled_lang : {settled!r} (+{ms} ms)")
50
+ print(f" verdict : {'CAPTURED THE FLIP' if settled != naive else 'no flip seen'}")
51
+
52
+
53
+ async def _end_to_end(profile: str) -> None:
54
+ """B — what a real bootstrap costs on the account that pays the timeout."""
55
+ t0 = perf_counter()
56
+ async with build_client(resolve_profile_dir(profile)) as client:
57
+ ms = round((perf_counter() - t0) * 1000)
58
+ print(f"\n[B · END-TO-END — real bootstrap] profile={profile}")
59
+ print(f" resolved locale : {client._account_locale!r}") # noqa: SLF001
60
+ print(f" __aenter__ total : {ms} ms")
61
+
62
+
63
+ async def _main(flip_profile: str, shell_profile: str) -> int:
64
+ await _component_check(flip_profile)
65
+ await _end_to_end(shell_profile)
66
+ print(
67
+ "\nA is a component measurement; B is the user path. Reporting A's number as"
68
+ "\nthe user-visible one is precisely the v0.66.1 mistake."
69
+ )
70
+ return 0
71
+
72
+
73
+ if __name__ == "__main__":
74
+ args = sys.argv[1:] or ["denon82", "ffroliva"]
75
+ raise SystemExit(asyncio.run(_main(args[0], args[1])))
@@ -1,3 +1,3 @@
1
1
  """gflow-cli — unofficial CLI for Google Flow."""
2
2
 
3
- __version__ = "0.66.2"
3
+ __version__ = "0.66.3"
@@ -22,7 +22,7 @@ import time
22
22
  import uuid
23
23
  from dataclasses import replace as _dataclass_replace
24
24
  from datetime import datetime
25
- from typing import TYPE_CHECKING, Any, NoReturn, Self, TypeVar, cast
25
+ from typing import TYPE_CHECKING, Any, ClassVar, NoReturn, Self, TypeVar, cast
26
26
  from urllib.parse import quote, urlsplit, urlunsplit
27
27
 
28
28
  import structlog
@@ -849,11 +849,7 @@ class FlowApiClient:
849
849
  # returns None and `next_locale_state` DEMOTES an already-learned locale
850
850
  # to PROVISIONAL (measured: a pt account lost its "pt" on every migrated
851
851
  # load). Best-effort: a probe failure must never break navigation.
852
- try:
853
- lang = await page.evaluate("() => document.documentElement.lang || ''")
854
- except Exception as exc: # noqa: BLE001 - observation only
855
- logger.info("client.account_locale_lang_probe_failed", error=type(exc).__name__)
856
- lang = None
852
+ lang = await self._settled_lang(page)
857
853
  segment = routes.locale_segment_from_lang_attr(lang)
858
854
  if segment is not None:
859
855
  logger.info("client.account_locale_resolved", locale=segment, source="html_lang")
@@ -861,6 +857,66 @@ class FlowApiClient:
861
857
  logger.info("client.account_locale_unresolved", last_url=settled)
862
858
  return None, None
863
859
 
860
+ #: How long to wait for `<html lang>` to leave the server-default shell value
861
+ #: (#651). Measured on a pt account, two consecutive loads: the attribute reads
862
+ #: `en` until ~1.9 s and flips to `pt` at 2.26 / 2.49 s. 4 s leaves margin
863
+ #: without being open-ended; a slower network could still exceed it, which the
864
+ #: `lang_unchanged` event makes visible rather than silent.
865
+ _LANG_SETTLE_TIMEOUT_MS: ClassVar[float] = 4_000.0
866
+
867
+ async def _settled_lang(self, page: Any) -> str | None:
868
+ """Read ``<html lang>`` only after hydration has had a chance to set it (#651).
869
+
870
+ Flow serves an **`en` shell** and the app rewrites ``lang`` during
871
+ hydration, so a single early read returns ``en`` for every account. That is
872
+ not a migrated-origin quirk — it was measured on the OLD host:
873
+
874
+ =========== ========== ==============
875
+ t (ms) ``lang`` ``readyState``
876
+ =========== ========== ==============
877
+ 887 ``en`` interactive
878
+ 1510 ``en`` **complete**
879
+ 2092 ``en`` complete
880
+ **2488** **``pt``** complete
881
+ =========== ========== ==============
882
+
883
+ **``readyState`` is not a usable signal** — it reaches ``complete`` a full
884
+ second *before* the flip, so the obvious "wait for complete, then read" is
885
+ wrong. The DOM node count oscillates (136 → 300 → 249 → 251) and does not
886
+ discriminate either. Nothing cheap predicts the flip, so this observes it.
887
+
888
+ Cost: an account whose real locale IS the shell default never changes the
889
+ attribute and pays the full timeout once per process. That is the price of
890
+ not guessing, and it is bounded; the alternative shipped a wrong locale for
891
+ every account whose URL could not answer.
892
+ """
893
+ try:
894
+ first = await page.evaluate("() => document.documentElement.lang || ''")
895
+ except Exception as exc: # noqa: BLE001 - observation only
896
+ logger.info("client.account_locale_lang_probe_failed", error=type(exc).__name__)
897
+ return None
898
+ try:
899
+ await page.wait_for_function(
900
+ "initial => (document.documentElement.lang || '') !== initial",
901
+ arg=first,
902
+ timeout=self._LANG_SETTLE_TIMEOUT_MS,
903
+ )
904
+ after = await page.evaluate("() => document.documentElement.lang || ''")
905
+ except Exception as exc: # noqa: BLE001 - a timeout is an ANSWER, not a failure
906
+ # Either the account's locale genuinely equals the shell default, or the
907
+ # page never hydrated within the window. Both leave the first read as the
908
+ # best available answer — which is exactly the pre-#651 behaviour, so this
909
+ # branch can never be worse than what it replaces.
910
+ logger.info(
911
+ "client.account_locale_lang_unchanged",
912
+ lang=first,
913
+ waited_ms=self._LANG_SETTLE_TIMEOUT_MS,
914
+ reason=type(exc).__name__,
915
+ )
916
+ return first
917
+ logger.info("client.account_locale_lang_settled", was=first, now=after)
918
+ return after
919
+
864
920
  async def _launch_persistent_context(self, kwargs: JsonObject) -> BrowserContext:
865
921
  """Launch the persistent context; translate a launch-time crash into ProfileLockedError."""
866
922
  assert self._pw is not None