gflow-cli 0.76.0__tar.gz → 0.77.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1138) hide show
  1. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.codex-plugin/plugin.json +1 -1
  2. gflow_cli-0.77.0/.github/workflows/mcp-registry.yml +132 -0
  3. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/release.yml +42 -5
  4. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/CHANGELOG.md +87 -1
  5. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/PKG-INFO +1 -1
  6. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/RELEASE.md +34 -0
  7. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker/Dockerfile +1 -1
  8. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/DISTRIBUTION.md +42 -11
  9. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/INDEX.md +1 -1
  10. gflow_cli-0.77.0/docs/LIVE_VERIFICATION_v0.77.0.md +187 -0
  11. gflow_cli-0.77.0/docs/PROJECT_STATUS.md +165 -0
  12. gflow_cli-0.77.0/docs/superpowers/spikes/2026-09-16-networkidle-costs-3x-it-does-not-hang.md +132 -0
  13. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/.claude-plugin/plugin.json +1 -1
  14. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/pyproject.toml +1 -1
  15. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_repo_hygiene.py +11 -4
  16. gflow_cli-0.77.0/scripts/dev/spike_networkidle_bootstrap_cost.py +186 -0
  17. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/server.json +2 -2
  18. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/pr-council-review/SKILL.md +43 -1
  19. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/release/SKILL.md +33 -3
  20. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/__init__.py +1 -1
  21. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/verification.py +121 -0
  22. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_navigation_settled.py +13 -0
  23. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/test_verification.py +158 -0
  24. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_workflow_hardening.py +132 -0
  25. gflow_cli-0.77.0/tests/test_release_version_sites.py +113 -0
  26. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/uv.lock +4 -4
  27. gflow_cli-0.76.0/.github/workflows/mcp-registry.yml +0 -70
  28. gflow_cli-0.76.0/docs/PROJECT_STATUS.md +0 -1309
  29. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.agents/plugins/marketplace.json +0 -0
  30. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/README.md +0 -0
  31. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/active.md +0 -0
  32. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/branch-review.md +0 -0
  33. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/changelog.md +0 -0
  34. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/check.md +0 -0
  35. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/doc-review.md +0 -0
  36. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  37. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  38. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/known-issues.md +0 -0
  39. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/live-verify.md +0 -0
  40. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/llm-council.md +0 -0
  41. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/next.md +0 -0
  42. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/plan.md +0 -0
  43. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  44. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/predict.md +0 -0
  45. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/release.md +0 -0
  46. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/scenario.md +0 -0
  47. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/sonar.md +0 -0
  48. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/spike.md +0 -0
  49. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude/commands/gflow/status.md +0 -0
  50. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.claude-plugin/marketplace.json +0 -0
  51. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.env.template +0 -0
  52. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.gitattributes +0 -0
  53. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/CODEOWNERS +0 -0
  54. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/FUNDING.yml +0 -0
  55. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  56. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/copilot-instructions.md +0 -0
  57. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/dependabot.yml +0 -0
  58. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/ci.yml +0 -0
  59. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/deps-watch.yml +0 -0
  60. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/external-pr-triage.yml +0 -0
  61. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/governance-advisory.yml +0 -0
  62. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/governance-benchmark.yml +0 -0
  63. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/labels.yml +0 -0
  64. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/main-base-guard.yml +0 -0
  65. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/pages.yml +0 -0
  66. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/scorecard.yml +0 -0
  67. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/selector-probe.yml +0 -0
  68. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/sponsors.yml +0 -0
  69. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.github/workflows/star-history-watch.yml +0 -0
  70. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.gitignore +0 -0
  71. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.gitleaks.toml +0 -0
  72. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.pre-commit-config.yaml +0 -0
  73. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/.secrets.baseline +0 -0
  74. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/AGENTS.md +0 -0
  75. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/CLAUDE.md +0 -0
  76. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/CONFIGURATION.md +0 -0
  77. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/CONTRIBUTING.md +0 -0
  78. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/DISCLAIMER.md +0 -0
  79. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/KNOWN_ISSUES.md +0 -0
  80. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/LICENSE +0 -0
  81. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/PLAN.md +0 -0
  82. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/README.md +0 -0
  83. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/ROADMAP.md +0 -0
  84. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/conftest.py +0 -0
  85. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/deploy/logrotate-pr-triage +0 -0
  86. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker/Dockerfile.test +0 -0
  87. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker/README.md +0 -0
  88. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker/docker-compose.yml +0 -0
  89. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker/dockerignore.example +0 -0
  90. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docker-compose.yml +0 -0
  91. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/ACCOUNT_SAFETY.md +0 -0
  92. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/AGENT_GUIDE.md +0 -0
  93. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/AGENT_UI_E2E.md +0 -0
  94. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/AGENT_UI_RECON.md +0 -0
  95. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/ARCHITECTURE.md +0 -0
  96. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  97. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/AUTHENTICATION.md +0 -0
  98. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/CHARACTER.md +0 -0
  99. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/CHARACTER_RECON.md +0 -0
  100. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/CONFIGURATION.md +0 -0
  101. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/CONTAINER.md +0 -0
  102. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/DATA_LAYER.md +0 -0
  103. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/DEBUGGING.md +0 -0
  104. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/DEMOS.md +0 -0
  105. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/DEVELOPMENT.md +0 -0
  106. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/E2E_TESTING.md +0 -0
  107. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/EXTERNAL_STORAGE.md +0 -0
  108. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/GITHUB.md +0 -0
  109. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  110. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  111. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/INSTRUCTIONS.md +0 -0
  112. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  113. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  114. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  115. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
  116. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  117. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  118. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  119. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  120. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  121. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  122. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  123. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  124. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  125. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  126. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  127. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  128. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  129. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  130. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  131. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  132. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  133. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  134. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  135. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  136. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  137. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  138. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  139. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  140. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  141. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  142. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  143. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  144. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  145. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  146. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  147. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  148. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  149. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  150. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  151. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  152. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  153. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  154. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  155. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  156. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  157. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  158. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  159. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  160. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  161. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  162. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  163. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  164. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  165. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  166. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  167. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  168. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  169. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  170. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  171. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  172. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  173. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  174. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  175. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  176. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
  177. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
  178. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
  179. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
  180. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
  181. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
  182. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
  183. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
  184. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  185. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
  186. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.71.0.md +0 -0
  187. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.71.1.md +0 -0
  188. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.72.0.md +0 -0
  189. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.0.md +0 -0
  190. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.1.md +0 -0
  191. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.2.md +0 -0
  192. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.74.0.md +0 -0
  193. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.75.0.md +0 -0
  194. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.76.0.md +0 -0
  195. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  196. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  197. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  198. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  199. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/MARKETPLACES.md +0 -0
  200. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/MCP.md +0 -0
  201. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/MEDIA_LIBRARY.md +0 -0
  202. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/MOVIE.md +0 -0
  203. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/PROMPT_EXPANSION.md +0 -0
  204. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  205. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/SECURITY.md +0 -0
  206. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/SPONSORS.md +0 -0
  207. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/TOOLS.md +0 -0
  208. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/USAGE.md +0 -0
  209. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/USER_GUIDE.md +0 -0
  210. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/assets/demo-split-pf.gif +0 -0
  211. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/assets/example-run.gif +0 -0
  212. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/assets/examples.webp +0 -0
  213. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/medium_tutorial.md +0 -0
  214. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/schemas/movie-handoff.schema.json +0 -0
  215. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/sonar-cleanup-tracker.md +0 -0
  216. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/README.md +0 -0
  217. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
  218. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
  219. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
  220. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
  221. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
  222. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
  223. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
  224. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
  225. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
  226. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
  227. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
  228. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
  229. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
  230. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -0
  231. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
  232. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
  233. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
  234. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
  235. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ligature-carrier-differs-by-host.md +0 -0
  236. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
  237. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
  238. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +0 -0
  239. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
  240. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
  241. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
  242. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
  243. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
  244. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
  245. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
  246. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
  247. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
  248. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
  249. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
  250. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-signing.md +0 -0
  251. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
  252. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
  253. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
  254. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
  255. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
  256. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
  257. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
  258. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
  259. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
  260. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
  261. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
  262. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
  263. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
  264. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
  265. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
  266. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  267. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  268. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  269. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  270. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  271. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  272. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  273. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  274. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  275. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  276. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  277. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  278. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  279. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  280. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  281. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  282. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  283. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  284. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  285. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  286. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  287. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  288. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  289. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  290. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  291. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  292. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  293. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  294. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  295. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  296. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  297. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  298. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  299. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  300. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  301. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  302. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  303. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  304. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  305. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  306. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  307. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  308. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  309. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  310. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
  311. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-14-community-feedback-uplift/PLAN.md +0 -0
  312. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  313. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  314. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  315. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  316. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  317. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  318. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  319. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  320. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  321. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  322. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  323. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  324. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  325. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  326. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  327. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  328. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  329. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
  330. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
  331. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
  332. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
  333. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
  334. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
  335. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
  336. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +0 -0
  337. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +0 -0
  338. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +0 -0
  339. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +0 -0
  340. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +0 -0
  341. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md +0 -0
  342. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-composer-agent-mode-hides-settings.md +0 -0
  343. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md +0 -0
  344. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-queue-is-readable-on-zzl0ze.md +0 -0
  345. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-upload-fails-two-ways.md +0 -0
  346. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-10-about-redirect-stability.md +0 -0
  347. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-10-migrated-click-blocked.md +0 -0
  348. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-decided-client-side.md +0 -0
  349. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-stable-for-an-account.md +0 -0
  350. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-migrated-cookie-bar-blocks-the-composer.md +0 -0
  351. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-nano2-lite-capability.md +0 -0
  352. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-13-frames-picker-confirm.md +0 -0
  353. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-credits-on-migrated-host.md +0 -0
  354. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-generation-wire-no-push-channel.md +0 -0
  355. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-two-domain-protocol-survey.md +0 -0
  356. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-video-poll-is-a-fixed-client-timer.md +0 -0
  357. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-15-container-transport-viability.md +0 -0
  358. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-15-unentitled-account-signal.md +0 -0
  359. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/README.md +0 -0
  360. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/batch_from_config.py +0 -0
  361. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/multi_prompt_t2i.py +0 -0
  362. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/sample_config.json +0 -0
  363. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/sample_prompts.txt +0 -0
  364. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/single_image_t2i.py +0 -0
  365. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/examples/workflow_chain.py +0 -0
  366. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/glama.json +0 -0
  367. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/index.html +0 -0
  368. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/llms.txt +0 -0
  369. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/mempalace.yaml +0 -0
  370. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/README.md +0 -0
  371. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/.mcp.json +0 -0
  372. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/gflow-cli/SKILL.md +0 -0
  373. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/SKILL.md +0 -0
  374. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/clip_qa.py +0 -0
  375. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/composition.md +0 -0
  376. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/consistency.md +0 -0
  377. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/failure-modes.md +0 -0
  378. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/tasks.json +0 -0
  379. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/README.md +0 -0
  380. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/01_upload_image.json +0 -0
  381. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  382. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  383. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/04_archive_workflow.json +0 -0
  384. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/05_createProject.json +0 -0
  385. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/06_batchGenerateImages.json +0 -0
  386. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  387. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  388. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  389. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  390. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  391. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/12_create_scene.json +0 -0
  392. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  393. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/14_get_scene_workflows.json +0 -0
  394. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  395. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/canary/register_task.ps1 +0 -0
  396. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/canary/run_canary.py +0 -0
  397. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_council_memory.py +0 -0
  398. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_doc_links.py +0 -0
  399. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_fork_pr_ci.py +0 -0
  400. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_materiality.py +0 -0
  401. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_release_artifacts.py +0 -0
  402. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_test_count.py +0 -0
  403. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/check_website_docs_pii.py +0 -0
  404. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/generate_plugin_skills.py +0 -0
  405. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/generate_website_docs.py +0 -0
  406. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/ci/update_sponsors.py +0 -0
  407. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/debug_editor.py +0 -0
  408. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/debug_gen_settings.py +0 -0
  409. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/debug_settings.py +0 -0
  410. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/_recording_client.py +0 -0
  411. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/_spike_common.py +0 -0
  412. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/__init__.py +0 -0
  413. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/bench.py +0 -0
  414. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/domain.py +0 -0
  415. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/judge.py +0 -0
  416. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/settings.py +0 -0
  417. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/active_plan.py +0 -0
  418. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  419. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  420. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  421. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  422. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  423. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  424. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  425. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_locale_invariants.py +0 -0
  426. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  427. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
  428. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
  429. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
  430. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
  431. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +0 -0
  432. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
  433. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
  434. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_project_listing.py +0 -0
  435. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  436. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  437. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  438. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  439. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/character_create_spike.py +0 -0
  440. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/character_create_spike_v2.py +0 -0
  441. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/dump_character_selectors.js +0 -0
  442. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/README.md +0 -0
  443. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
  444. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
  445. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
  446. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
  447. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
  448. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
  449. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
  450. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
  451. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
  452. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
  453. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
  454. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/incident_bundle_quality.py +0 -0
  455. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  456. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  457. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  458. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/make_project.py +0 -0
  459. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/materiality_backtest.py +0 -0
  460. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/measure_html_lang_settle.py +0 -0
  461. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/measure_locale_probe.py +0 -0
  462. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
  463. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/patch_character.py +0 -0
  464. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/README.md +0 -0
  465. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/harness.py +0 -0
  466. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/tasks.json +0 -0
  467. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/sonar-local-scan.sh +0 -0
  468. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  469. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_about_redirect_cause.py +0 -0
  470. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_about_redirect_stability.py +0 -0
  471. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_cdp_har_without_node.py +0 -0
  472. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_changelog_capture.py +0 -0
  473. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  474. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  475. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_character_editor_ready_gate.py +0 -0
  476. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  477. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_credits_migrated_surface.py +0 -0
  478. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_entity_submit_rpcs.py +0 -0
  479. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_model_recon.py +0 -0
  480. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  481. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_route_capture.py +0 -0
  482. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
  483. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
  484. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_flow_unavailable_signal.py +0 -0
  485. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_format_prompt_effect.py +0 -0
  486. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_frames_picker_confirm.py +0 -0
  487. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_generation_wire_survey.py +0 -0
  488. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_host_lane.py +0 -0
  489. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_model_attribution.py +0 -0
  490. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  491. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  492. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  493. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  494. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_incident_live.py +0 -0
  495. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  496. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  497. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  498. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  499. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  500. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_ligature_carrier_sweep.py +0 -0
  501. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_locale_poison.py +0 -0
  502. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
  503. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
  504. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
  505. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
  506. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
  507. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
  508. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_click_blocked.py +0 -0
  509. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_composer_arms.py +0 -0
  510. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_composer_mode_axis.py +0 -0
  511. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_cookie_bar.py +0 -0
  512. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
  513. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
  514. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_entity_submit.py +0 -0
  515. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
  516. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
  517. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_image_capability.py +0 -0
  518. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_image_submit.py +0 -0
  519. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_picker_option_kind.py +0 -0
  520. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_queue_read.py +0 -0
  521. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
  522. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_submit_anchor.py +0 -0
  523. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
  524. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_upload_wire.py +0 -0
  525. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
  526. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
  527. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  528. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  529. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_model_inventory.py +0 -0
  530. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  531. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  532. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  533. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  534. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  535. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_nano2_lite_capability.py +0 -0
  536. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  537. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_patch_entity.py +0 -0
  538. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_patchright.py +0 -0
  539. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_playwright_chrome_login.py +0 -0
  540. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_project_media_status.py +0 -0
  541. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  542. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_two_domain_protocol_survey.py +0 -0
  543. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  544. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
  545. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/verify_language_agnostic.py +0 -0
  546. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  547. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/dev/verify_model_attribution.py +0 -0
  548. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/README.md +0 -0
  549. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/capture_flow_traffic.py +0 -0
  550. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  551. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/memory_profile.py +0 -0
  552. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/recaptcha_mint.py +0 -0
  553. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  554. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  555. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  556. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/probe/run_probe.py +0 -0
  557. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/probe/spike_auth_matrix.py +0 -0
  558. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/record_demo.ps1 +0 -0
  559. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/smoke_image.py +0 -0
  560. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/smoke_video_editor.py +0 -0
  561. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/smoke_worker_style.py +0 -0
  562. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/spike_waf_camoufox.py +0 -0
  563. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/scripts/verify_chrome_auth_viability.py +0 -0
  564. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/README.md +0 -0
  565. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/changelog/SKILL.md +0 -0
  566. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/check/SKILL.md +0 -0
  567. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/doc-review/SKILL.md +0 -0
  568. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/gflow-cli/SKILL.md +0 -0
  569. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/issue-assessment/SKILL.md +0 -0
  570. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/issue-resolve/SKILL.md +0 -0
  571. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/known-issues/SKILL.md +0 -0
  572. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/live-verify/SKILL.md +0 -0
  573. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/llm-council/SKILL.md +0 -0
  574. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/plan/SKILL.md +0 -0
  575. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/predict/SKILL.md +0 -0
  576. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/scenario/SKILL.md +0 -0
  577. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/sonar/SKILL.md +0 -0
  578. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/spike/SKILL.md +0 -0
  579. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/status/SKILL.md +0 -0
  580. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/SKILL.md +0 -0
  581. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/clip_qa.py +0 -0
  582. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/composition.md +0 -0
  583. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/consistency.md +0 -0
  584. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/failure-modes.md +0 -0
  585. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/skills/video-production/tasks.json +0 -0
  586. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/sonar-project.properties +0 -0
  587. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/__main__.py +0 -0
  588. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/_cli_helpers.py +0 -0
  589. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/__init__.py +0 -0
  590. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_engine.py +0 -0
  591. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_retry.py +0 -0
  592. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  593. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/character.py +0 -0
  594. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/client.py +0 -0
  595. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/credits.py +0 -0
  596. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/dto.py +0 -0
  597. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/extend_chain.py +0 -0
  598. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/image.py +0 -0
  599. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/image_upscale.py +0 -0
  600. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/recaptcha.py +0 -0
  601. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/routes.py +0 -0
  602. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/scene.py +0 -0
  603. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  604. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/_common.py +0 -0
  605. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  606. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/base.py +0 -0
  607. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/batchexecute.py +0 -0
  608. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  609. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  610. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  611. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  612. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  613. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  614. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  615. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  616. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  617. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/migrated_composer.py +0 -0
  618. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  619. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  620. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  621. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/video.py +0 -0
  622. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/api/video_extend.py +0 -0
  623. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/__init__.py +0 -0
  624. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/base.py +0 -0
  625. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/cookies.py +0 -0
  626. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/factory.py +0 -0
  627. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  628. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  629. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/strategies.py +0 -0
  630. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/browser_manager.py +0 -0
  631. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/chain.py +0 -0
  632. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/chain_manifest.py +0 -0
  633. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli.py +0 -0
  634. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_character.py +0 -0
  635. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_credits.py +0 -0
  636. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_data.py +0 -0
  637. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_doctor.py +0 -0
  638. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_image.py +0 -0
  639. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_instructions.py +0 -0
  640. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_models.py +0 -0
  641. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_movie.py +0 -0
  642. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_project.py +0 -0
  643. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_run.py +0 -0
  644. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_scene.py +0 -0
  645. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_tools.py +0 -0
  646. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_update.py +0 -0
  647. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_video.py +0 -0
  648. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/composition.py +0 -0
  649. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/config.py +0 -0
  650. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/__init__.py +0 -0
  651. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/chain_repo.py +0 -0
  652. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  653. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  654. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  655. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  656. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  657. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  658. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  659. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  660. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  661. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  662. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/models.py +0 -0
  663. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/queries.py +0 -0
  664. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/recorder.py +0 -0
  665. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/redaction.py +0 -0
  666. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/repository.py +0 -0
  667. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/data/store.py +0 -0
  668. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/diagnostics.py +0 -0
  669. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/errors.py +0 -0
  670. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/exceptions.py +0 -0
  671. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/file_integrity.py +0 -0
  672. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  673. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  674. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  675. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  676. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/image_batch.py +0 -0
  677. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/json_output.py +0 -0
  678. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/__init__.py +0 -0
  679. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/prompts.py +0 -0
  680. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/resources.py +0 -0
  681. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/server.py +0 -0
  682. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/setup.py +0 -0
  683. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  684. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/tools.py +0 -0
  685. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/media.py +0 -0
  686. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/movie_manifest.py +0 -0
  687. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/observability.py +0 -0
  688. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/paths.py +0 -0
  689. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/profile_lease.py +0 -0
  690. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/profile_store.py +0 -0
  691. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/redaction.py +0 -0
  692. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/__init__.py +0 -0
  693. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  694. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/character_create.py +0 -0
  695. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/credits.py +0 -0
  696. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/doctor.py +0 -0
  697. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/services/mentions.py +0 -0
  698. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/storage.py +0 -0
  699. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/__init__.py +0 -0
  700. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/banned.py +0 -0
  701. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  702. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  703. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  704. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  705. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/expander.py +0 -0
  706. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/invocation.py +0 -0
  707. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/loader.py +0 -0
  708. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/registry.py +0 -0
  709. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/runtime.py +0 -0
  710. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/spec.py +0 -0
  711. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/ui/app.py +0 -0
  712. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/ui/server.py +0 -0
  713. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/update_check.py +0 -0
  714. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/winsec.py +0 -0
  715. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/codec.py +0 -0
  716. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/daemon.py +0 -0
  717. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/queue.py +0 -0
  718. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tasks/lessons.md +0 -0
  719. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/test_assets/sample_batch.json +0 -0
  720. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/test_assets/sample_batch.tsv +0 -0
  721. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/test_assets/sample_batch_invalid.tsv +0 -0
  722. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/__init__.py +0 -0
  723. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/__init__.py +0 -0
  724. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/fixtures/character_gen_response.json +0 -0
  725. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  726. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  727. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  728. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  729. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_bearer_redaction.py +0 -0
  730. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_bootstrap_chooser.py +0 -0
  731. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_character.py +0 -0
  732. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_character_readback_fallback.py +0 -0
  733. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client.py +0 -0
  734. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_character.py +0 -0
  735. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_delete_characters.py +0 -0
  736. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_errors.py +0 -0
  737. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_extend.py +0 -0
  738. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_generate_character.py +0 -0
  739. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_image.py +0 -0
  740. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_incidents.py +0 -0
  741. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_launch_kwargs.py +0 -0
  742. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_locale_cache.py +0 -0
  743. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_migrated_mint.py +0 -0
  744. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_patch_entity.py +0 -0
  745. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_scene.py +0 -0
  746. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_client_upscale.py +0 -0
  747. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_concurrency.py +0 -0
  748. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_credits.py +0 -0
  749. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_credits_http.py +0 -0
  750. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_dto.py +0 -0
  751. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_engine.py +0 -0
  752. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_extend_chain.py +0 -0
  753. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_image.py +0 -0
  754. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_image_dto.py +0 -0
  755. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_image_upscale.py +0 -0
  756. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  757. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_recaptcha.py +0 -0
  758. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_retry.py +0 -0
  759. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_routes.py +0 -0
  760. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_routes_character.py +0 -0
  761. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_routes_locale.py +0 -0
  762. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_routes_scene.py +0 -0
  763. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_sapisidhash_helper.py +0 -0
  764. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_scene_models.py +0 -0
  765. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_video.py +0 -0
  766. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_video_extend.py +0 -0
  767. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_video_request.py +0 -0
  768. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/test_video_status_poll.py +0 -0
  769. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/__init__.py +0 -0
  770. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/conftest.py +0 -0
  771. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/__init__.py +0 -0
  772. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  773. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_classic.py +0 -0
  774. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_factory.py +0 -0
  775. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  776. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_agent_only_composer.py +0 -0
  777. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  778. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_base.py +0 -0
  779. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_batchexecute.py +0 -0
  780. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_bearer.py +0 -0
  781. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_character_model_picker.py +0 -0
  782. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_click_attribution.py +0 -0
  783. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_common.py +0 -0
  784. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  785. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_factory.py +0 -0
  786. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_fingerprint.py +0 -0
  787. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_flow_access_unavailable.py +0 -0
  788. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ligature_carrier.py +0 -0
  789. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_locale_navigation.py +0 -0
  790. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_composer.py +0 -0
  791. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_dispatch.py +0 -0
  792. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
  793. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_images.py +0 -0
  794. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_r2v.py +0 -0
  795. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_route.py +0 -0
  796. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_mode_control.py +0 -0
  797. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  798. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_new_project_cta_migrated.py +0 -0
  799. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  800. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_policy_400.py +0 -0
  801. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_sapisidhash.py +0 -0
  802. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  803. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_transport_timeout.py +0 -0
  804. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation.py +0 -0
  805. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  806. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  807. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  808. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  809. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  810. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/strategies/test_factory.py +0 -0
  811. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/strategies/test_strategies.py +0 -0
  812. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/test_account_autoselect.py +0 -0
  813. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/test_cookies.py +0 -0
  814. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/test_real_chrome.py +0 -0
  815. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/auth/test_windows_acl.py +0 -0
  816. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/__init__.py +0 -0
  817. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_auth_status.py +0 -0
  818. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_auth_error_paths.py +0 -0
  819. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_auth_list.py +0 -0
  820. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_character.py +0 -0
  821. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_character_create.py +0 -0
  822. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_credits.py +0 -0
  823. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data.py +0 -0
  824. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_errors.py +0 -0
  825. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  826. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_sync.py +0 -0
  827. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_doctor.py +0 -0
  828. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image.py +0 -0
  829. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  830. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  831. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_upscale.py +0 -0
  832. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  833. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_instructions.py +0 -0
  834. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_models.py +0 -0
  835. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_movie.py +0 -0
  836. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_run.py +0 -0
  837. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_scene.py +0 -0
  838. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_tools.py +0 -0
  839. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video.py +0 -0
  840. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video_chain.py +0 -0
  841. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video_extend.py +0 -0
  842. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_error_handling.py +0 -0
  843. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_failure_funnel.py +0 -0
  844. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_helpers.py +0 -0
  845. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_incident_output.py +0 -0
  846. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_movie_manifest.py +0 -0
  847. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  848. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_predictable_output.py +0 -0
  849. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_run_with_handlers_context_leak.py +0 -0
  850. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  851. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_settings_validation.py +0 -0
  852. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  853. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/composition/test_character.py +0 -0
  854. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/composition/test_compose_prompt.py +0 -0
  855. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/composition/test_handoff.py +0 -0
  856. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/composition/test_style_variants.py +0 -0
  857. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/composition/test_style_variants_e2e.py +0 -0
  858. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/conftest.py +0 -0
  859. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/__init__.py +0 -0
  860. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_chain_repo.py +0 -0
  861. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_failure_recording.py +0 -0
  862. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_find_incomplete_character.py +0 -0
  863. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_models.py +0 -0
  864. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_null_columns_stay_null.py +0 -0
  865. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_packaging.py +0 -0
  866. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_recorder.py +0 -0
  867. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_recorder_character.py +0 -0
  868. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_redaction.py +0 -0
  869. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_repository.py +0 -0
  870. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_scene_persistence.py +0 -0
  871. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_settings_and_errors.py +0 -0
  872. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_store.py +0 -0
  873. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/data/test_store_migrations.py +0 -0
  874. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/dev/test_recording_client.py +0 -0
  875. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/__init__.py +0 -0
  876. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/conftest.py +0 -0
  877. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_account_chooser_e2e.py +0 -0
  878. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  879. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  880. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  881. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  882. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  883. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_chain_e2e.py +0 -0
  884. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_character_create_e2e.py +0 -0
  885. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_character_mcp_parity_e2e.py +0 -0
  886. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  887. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_click_attribution_bdd.py +0 -0
  888. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  889. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_credits_e2e.py +0 -0
  890. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
  891. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_daemon_e2e.py +0 -0
  892. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  893. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  894. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_e2e_env_isolation.py +0 -0
  895. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  896. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  897. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  898. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  899. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  900. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  901. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  902. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_insufficient_credits_e2e.py +0 -0
  903. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_json_output_e2e.py +0 -0
  904. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_landing_state_diagnosis_bdd.py +0 -0
  905. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  906. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  907. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_migrated_host_e2e.py +0 -0
  908. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
  909. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  910. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  911. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_scene_compose_live.py +0 -0
  912. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  913. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_tools_e2e.py +0 -0
  914. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_transports_e2e.py +0 -0
  915. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  916. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  917. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  918. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/__init__.py +0 -0
  919. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/asset_tagging.feature +0 -0
  920. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/auth.feature +0 -0
  921. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/auth_login.feature +0 -0
  922. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/character_create.feature +0 -0
  923. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/character_read.feature +0 -0
  924. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/click_attribution.feature +0 -0
  925. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/conftest.py +0 -0
  926. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/credits.feature +0 -0
  927. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/duration_tab_drift.feature +0 -0
  928. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/entity_provenance.feature +0 -0
  929. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/image.feature +0 -0
  930. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/image_batch_references.feature +0 -0
  931. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/image_upscale.feature +0 -0
  932. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/incident_diagnostics.feature +0 -0
  933. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/instructions.feature +0 -0
  934. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/landing_state_diagnosis.feature +0 -0
  935. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/latched_locale_recovery.feature +0 -0
  936. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/locale_picker_include.feature +0 -0
  937. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/mcp_tasks.feature +0 -0
  938. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/media_picker_tiers.feature +0 -0
  939. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/migrated_driver.feature +0 -0
  940. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/migrated_host_gate.feature +0 -0
  941. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/migrated_host_images.feature +0 -0
  942. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/migrated_i2v.feature +0 -0
  943. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/output_hardening.feature +0 -0
  944. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_asset_tagging_steps.py +0 -0
  945. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_auth_login_steps.py +0 -0
  946. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_auth_steps.py +0 -0
  947. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_character_create_steps.py +0 -0
  948. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_character_read_steps.py +0 -0
  949. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_credits_steps.py +0 -0
  950. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_e2e_binding_guard.py +0 -0
  951. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_image_steps.py +0 -0
  952. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_image_upscale_steps.py +0 -0
  953. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  954. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_instructions_steps.py +0 -0
  955. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  956. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  957. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  958. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_migrated_driver_steps.py +0 -0
  959. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
  960. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_migrated_host_images_steps.py +0 -0
  961. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_migrated_i2v_steps.py +0 -0
  962. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_output_hardening_steps.py +0 -0
  963. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_step_collision_guard.py +0 -0
  964. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  965. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/test_video_chain_steps.py +0 -0
  966. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/video_agent_ui.feature +0 -0
  967. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/features/video_chain.feature +0 -0
  968. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/__init__.py +0 -0
  969. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/changelog_modal_page.html +0 -0
  970. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/doctor_env.py +0 -0
  971. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/flow_model_inventory.json +0 -0
  972. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  973. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/listing_payload.py +0 -0
  974. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/fixtures/seeded_catalog.py +0 -0
  975. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/__init__.py +0 -0
  976. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_grading.py +0 -0
  977. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_model.py +0 -0
  978. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_model_governance.py +0 -0
  979. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_registry.py +0 -0
  980. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_report.py +0 -0
  981. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/image_batch/__init__.py +0 -0
  982. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/image_batch/test_image_manifest.py +0 -0
  983. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/image_batch/test_jitter_config.py +0 -0
  984. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/image_batch/test_observability_events.py +0 -0
  985. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/__init__.py +0 -0
  986. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/conftest.py +0 -0
  987. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/constants.py +0 -0
  988. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/test_expander_gateway.py +0 -0
  989. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/test_storage_gcs.py +0 -0
  990. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/integration/test_storage_s3.py +0 -0
  991. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/__init__.py +0 -0
  992. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/conftest.py +0 -0
  993. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_auth_status_tool.py +0 -0
  994. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_character_tools.py +0 -0
  995. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_cli_parity.py +0 -0
  996. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_credits_tool.py +0 -0
  997. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_error_funnel.py +0 -0
  998. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_http_transport.py +0 -0
  999. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_known_issues_resource.py +0 -0
  1000. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
  1001. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_no_spend.py +0 -0
  1002. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_payload_key_round_trip.py +0 -0
  1003. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  1004. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
  1005. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_resources.py +0 -0
  1006. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_serve_auth.py +0 -0
  1007. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_server.py +0 -0
  1008. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_setup.py +0 -0
  1009. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_stdio_transport.py +0 -0
  1010. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_tasks_extension.py +0 -0
  1011. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_helpers.py +0 -0
  1012. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_instructions.py +0 -0
  1013. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_wired.py +0 -0
  1014. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  1015. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_canary_classify.py +0 -0
  1016. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_canary_reexec.py +0 -0
  1017. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  1018. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
  1019. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_council_memory.py +0 -0
  1020. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_fork_pr_ci.py +0 -0
  1021. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_materiality.py +0 -0
  1022. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  1023. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  1024. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_test_count.py +0 -0
  1025. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  1026. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_codex_plugin.py +0 -0
  1027. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_extract_har_summary.py +0 -0
  1028. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_frame_acceptance.py +0 -0
  1029. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_generate_website_docs.py +0 -0
  1030. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  1031. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_materiality_backtest.py +0 -0
  1032. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_skillopt_scoring.py +0 -0
  1033. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_spike_page_pool.py +0 -0
  1034. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_spike_profile_lease.py +0 -0
  1035. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/scripts/test_update_sponsors.py +0 -0
  1036. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/__init__.py +0 -0
  1037. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_catalog_sync.py +0 -0
  1038. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_character_create_redaction.py +0 -0
  1039. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_character_create_saga.py +0 -0
  1040. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  1041. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_credits.py +0 -0
  1042. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_doctor.py +0 -0
  1043. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_media_attribution.py +0 -0
  1044. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_mentions_observability.py +0 -0
  1045. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_mentions_parse.py +0 -0
  1046. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_mentions_resolve.py +0 -0
  1047. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/services/test_resolve_and_apply.py +0 -0
  1048. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/smoke/__init__.py +0 -0
  1049. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  1050. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/smoke/test_real_flow.py +0 -0
  1051. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_auth.py +0 -0
  1052. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_browser_manager.py +0 -0
  1053. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_chain.py +0 -0
  1054. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_chain_manifest.py +0 -0
  1055. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_cli_data.py +0 -0
  1056. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_cli_project.py +0 -0
  1057. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_cli_update.py +0 -0
  1058. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_config.py +0 -0
  1059. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_conftest_isolation.py +0 -0
  1060. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_data_queries.py +0 -0
  1061. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_bundle.py +0 -0
  1062. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_events.py +0 -0
  1063. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_journal.py +0 -0
  1064. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_recorder.py +0 -0
  1065. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_retention.py +0 -0
  1066. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_diagnostics_sanitize.py +0 -0
  1067. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_dockerfile_version_pin.py +0 -0
  1068. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_documentation_gate.py +0 -0
  1069. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_duration_tab_drift.py +0 -0
  1070. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_entity_provenance.py +0 -0
  1071. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_errors.py +0 -0
  1072. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_errors_classification.py +0 -0
  1073. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_glama_build_spec.py +0 -0
  1074. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_image_batch_references.py +0 -0
  1075. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_incident_generation_requests.py +0 -0
  1076. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_json_output.py +0 -0
  1077. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_marker_registry.py +0 -0
  1078. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_media.py +0 -0
  1079. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_observability.py +0 -0
  1080. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_overlay_banner_dismissal.py +0 -0
  1081. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_paths.py +0 -0
  1082. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_playwright_pin.py +0 -0
  1083. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_plugin_manifests.py +0 -0
  1084. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_profile_lease.py +0 -0
  1085. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_profile_lease_subprocess.py +0 -0
  1086. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_profile_store.py +0 -0
  1087. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_profile_store_locale.py +0 -0
  1088. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_project_list_urls.py +0 -0
  1089. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_rich_markup_safety.py +0 -0
  1090. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_self_documenting_errors.py +0 -0
  1091. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_server_json.py +0 -0
  1092. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_smoke.py +0 -0
  1093. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/test_update_check.py +0 -0
  1094. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/__init__.py +0 -0
  1095. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_banned.py +0 -0
  1096. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_expander.py +0 -0
  1097. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_invocation.py +0 -0
  1098. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_loader.py +0 -0
  1099. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_registry.py +0 -0
  1100. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_runtime.py +0 -0
  1101. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/tools/test_spec.py +0 -0
  1102. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/ui/test_app.py +0 -0
  1103. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_codec.py +0 -0
  1104. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_daemon.py +0 -0
  1105. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  1106. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_queue.py +0 -0
  1107. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_queue_multiprocess.py +0 -0
  1108. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/tests/worker/test_queue_reconciliation.py +0 -0
  1109. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  1110. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/ARCHITECTURE.md +0 -0
  1111. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/AUTHENTICATION.md +0 -0
  1112. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/CHARACTER.md +0 -0
  1113. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/CONFIGURATION.md +0 -0
  1114. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/DATA_LAYER.md +0 -0
  1115. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/DEBUGGING.md +0 -0
  1116. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/DEVELOPMENT.md +0 -0
  1117. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/E2E_TESTING.md +0 -0
  1118. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  1119. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/INSTRUCTIONS.md +0 -0
  1120. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/KNOWN_ISSUES.md +0 -0
  1121. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/MCP.md +0 -0
  1122. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  1123. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/MOVIE.md +0 -0
  1124. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  1125. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/SECURITY.md +0 -0
  1126. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/SPONSORS.md +0 -0
  1127. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/TOOLS.md +0 -0
  1128. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/USAGE.md +0 -0
  1129. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/USER_GUIDE.md +0 -0
  1130. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/agents.md +0 -0
  1131. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/index.md +0 -0
  1132. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/installation.md +0 -0
  1133. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/onboarding-mockup.html +0 -0
  1134. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/onboarding.md +0 -0
  1135. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/docs/stylesheets/extra.css +0 -0
  1136. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/mkdocs.yml +0 -0
  1137. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/requirements.in +0 -0
  1138. {gflow_cli-0.76.0 → gflow_cli-0.77.0}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.76.0",
3
+ "version": "0.77.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -0,0 +1,132 @@
1
+ name: MCP Registry
2
+
3
+ # Publishes server.json to the Official MCP Registry — the listing that feeds the
4
+ # downstream directories (PulseMCP ingests it; GitHub's MCP gallery is built on it).
5
+ #
6
+ # This is CALLED by release.yml (`uses:` + `needs: build-and-publish`), never triggered
7
+ # by an event. Two reasons, both learned the hard way:
8
+ #
9
+ # 1. `on: release: published` does not work here. release.yml creates the Release with
10
+ # the default GITHUB_TOKEN, and GitHub starts no workflow runs from
11
+ # GITHUB_TOKEN-created events — so it never fired once, on any release, with nothing
12
+ # going red (#841). Creating the Release with a user PAT would fix that, at the price
13
+ # of a credential that expires every 366 days on a path that runs a handful of times
14
+ # a year. A call has no such fuse.
15
+ # 2. Ordering. `mcp-publisher` proves namespace ownership by reading the `mcp-name:`
16
+ # token out of the PUBLISHED PyPI README, and PyPI metadata is frozen per release, so
17
+ # the wheel must be up first. `needs: build-and-publish` enforces that structurally,
18
+ # rather than by two files happening to agree about step order.
19
+ #
20
+ # Being called also pins the publish to the release TAG, so server.json is the released
21
+ # one — the wrong-ref hazard that republished 0.75.0 over 0.76.0 (#841) cannot arise on
22
+ # this path at all. It still can on a hand dispatch, which is what the guard below is for.
23
+ #
24
+ # Registry auth is GitHub Actions OIDC: the runner exchanges its own short-lived identity
25
+ # token for registry credentials, which is why this needs `id-token: write` and nothing
26
+ # else. No token of any kind is stored for, or handed to, the registry.
27
+
28
+ on:
29
+ workflow_call:
30
+ inputs:
31
+ version:
32
+ description: "Version being published, with or without a leading `v`. Must match server.json on the checked-out ref."
33
+ required: true
34
+ type: string
35
+ # Manual re-run, e.g. a release whose registry publish failed after PyPI succeeded.
36
+ # `version` is REQUIRED because a dispatch publishes whatever the REF carries:
37
+ # dispatching `develop` before the release back-merge lands republishes the PREVIOUS
38
+ # version, green, with nothing downstream noticing. That happened on v0.76.0 (#841).
39
+ workflow_dispatch:
40
+ inputs:
41
+ version:
42
+ description: "Version to publish, e.g. 0.76.0. Must match server.json on the dispatched ref."
43
+ required: true
44
+ type: string
45
+
46
+ # Write scopes live at JOB level (Scorecard Token-Permissions: a workflow-level
47
+ # write grant reaches every job, current and future).
48
+ permissions:
49
+ contents: read
50
+
51
+ jobs:
52
+ publish:
53
+ runs-on: ubuntu-latest
54
+ permissions:
55
+ contents: read
56
+ id-token: write # OIDC exchange with registry.modelcontextprotocol.io
57
+ env:
58
+ # Pinned by version AND digest: this step runs in a job holding id-token
59
+ # write and publishes publicly under io.github.ffroliva, so a moved tag
60
+ # must not silently change the binary that does it.
61
+ MCP_PUBLISHER_VERSION: "1.8.1"
62
+ MCP_PUBLISHER_SHA256: "a06c9096dcb9727c13555b6be26c7effa707b01f06a4c561ba7a3635443cf2cc"
63
+ steps:
64
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
65
+ with:
66
+ persist-credentials: false
67
+
68
+ - name: server.json must carry the version being published
69
+ # The repo-side agreement (pyproject == __init__ == plugin.json == uv.lock ==
70
+ # server.json) is already a merge gate in check_repo_hygiene.py, so the only way
71
+ # these disagree is publishing from the WRONG REF — which is exactly what
72
+ # happened on v0.76.0 (#841) and what this catches.
73
+ #
74
+ # `inputs` is documented for exactly the two triggers this workflow declares.
75
+ env:
76
+ EXPECTED_VERSION: ${{ inputs.version }}
77
+ run: |
78
+ set -euo pipefail
79
+ expected="${EXPECTED_VERSION#v}"
80
+ if [ -z "${expected}" ]; then
81
+ echo "::error::No version to check against (neither a dispatch input nor a release tag). Refusing to publish."
82
+ exit 1
83
+ fi
84
+ # Checked explicitly: a missing file would otherwise abort on jq's own error
85
+ # and lose the diagnostic below, which is the part an operator needs.
86
+ if [ ! -f server.json ]; then
87
+ echo "::error::server.json is absent on this ref — nothing to publish."
88
+ exit 1
89
+ fi
90
+ # A pre-release must never become the registry's ACTIVE listing — that is what
91
+ # PulseMCP and GitHub's MCP gallery ingest. release.yml skips the call for one,
92
+ # so reaching here means a hand dispatch asked for it explicitly. Refuse anyway.
93
+ case "${expected}" in
94
+ *-*|*a*|*b*|*rc*)
95
+ echo "::error::${expected} is a pre-release. Publishing it would make it the registry's active listing."
96
+ exit 1
97
+ ;;
98
+ esac
99
+ declared=$(jq -r '.version' server.json)
100
+ packaged=$(jq -r '[.packages[]?.version] | join(", ")' server.json)
101
+ if ! jq -e --arg v "${expected}" '.version == $v and all(.packages[]?.version; . == $v)' server.json >/dev/null; then
102
+ echo "::error::Publishing ${expected}, but server.json on this ref declares ${declared} (packages: ${packaged})."
103
+ echo "::error::A dispatch publishes whatever the REF carries. Dispatch the release tag, or wait for the back-merge to land on develop (#841)."
104
+ exit 1
105
+ fi
106
+ echo "server.json declares ${declared} on every version site — matches the version being published."
107
+
108
+ - name: Install mcp-publisher
109
+ env:
110
+ GH_TOKEN: ${{ github.token }}
111
+ run: |
112
+ set -euo pipefail
113
+ archive="${RUNNER_TEMP}/mcp-publisher_linux_amd64.tar.gz"
114
+ gh release download "v${MCP_PUBLISHER_VERSION}" \
115
+ --repo modelcontextprotocol/registry \
116
+ --pattern 'mcp-publisher_linux_amd64.tar.gz' \
117
+ --output "${archive}" --clobber
118
+ echo "${MCP_PUBLISHER_SHA256} ${archive}" | sha256sum -c -
119
+ tar -xzf "${archive}" -C "${RUNNER_TEMP}" mcp-publisher
120
+ "${RUNNER_TEMP}/mcp-publisher" --version
121
+ echo "${RUNNER_TEMP}" >> "${GITHUB_PATH}"
122
+
123
+ - name: Validate server.json
124
+ # Never `init` here: it only writes a TEMPLATE server.json, refuses when a
125
+ # real one exists, and exits 1 — which would abort the run before login.
126
+ run: mcp-publisher validate
127
+
128
+ - name: Authenticate with the registry (GitHub Actions OIDC)
129
+ run: mcp-publisher login github-oidc
130
+
131
+ - name: Publish
132
+ run: mcp-publisher publish
@@ -16,6 +16,8 @@ jobs:
16
16
  permissions:
17
17
  contents: write # for creating GitHub Releases
18
18
  id-token: write # for PyPI Trusted Publishing (OIDC)
19
+ outputs:
20
+ prerelease: ${{ steps.tag_kind.outputs.prerelease }}
19
21
  environment:
20
22
  name: pypi
21
23
  url: https://pypi.org/p/gflow-cli
@@ -64,6 +66,25 @@ jobs:
64
66
  exit 1
65
67
  fi
66
68
 
69
+ - name: Classify the tag
70
+ # Single source of truth for prerelease-ness. It gates BOTH the GitHub Release
71
+ # flag and whether the MCP Registry publish runs at all; as two copies of the
72
+ # same four-clause expression those would eventually disagree.
73
+ # - semver suffixes: v1.2.3-alpha1, v1.2.3-rc1, v1.2.3-beta1 (any '-')
74
+ # - PEP 440 suffixes: v1.2.3a1, v1.2.3b1, v1.2.3rc1 (any a / b / rc)
75
+ # Stable tags like v1.2.3 contain none of these.
76
+ id: tag_kind
77
+ env:
78
+ TAG: ${{ github.ref_name }}
79
+ run: |
80
+ set -euo pipefail
81
+ case "${TAG}" in
82
+ *-*|*a*|*b*|*rc*) prerelease=true ;;
83
+ *) prerelease=false ;;
84
+ esac
85
+ echo "prerelease=${prerelease}" >> "${GITHUB_OUTPUT}"
86
+ echo "${TAG} -> prerelease=${prerelease}"
87
+
67
88
  - name: Build
68
89
  run: uv build
69
90
 
@@ -77,8 +98,24 @@ jobs:
77
98
  with:
78
99
  generate_release_notes: true
79
100
  files: dist/*
80
- # Pre-release detection covers both conventions:
81
- # - semver suffixes: v1.2.3-alpha1, v1.2.3-rc1, v1.2.3-beta1 (any '-' qualifies)
82
- # - PEP 440 suffixes: v1.2.3a1, v1.2.3b1, v1.2.3rc1 (any 'a' / 'b' / 'rc')
83
- # Stable tags like v1.2.3 contain none of these substrings.
84
- prerelease: ${{ contains(github.ref_name, '-') || contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
101
+ prerelease: ${{ steps.tag_kind.outputs.prerelease == 'true' }}
102
+
103
+ mcp-registry:
104
+ # The registry listing is part of the release, not a follow-up, so it is CALLED here
105
+ # rather than triggered by the Release above. `on: release: published` never fired
106
+ # once: the Release is created with the default GITHUB_TOKEN, and GitHub starts no
107
+ # workflow runs from GITHUB_TOKEN-created events (#841). A user PAT would fix that
108
+ # and add a 366-day expiry to a path that runs a few times a year; a call adds none.
109
+ #
110
+ # `needs:` is also what guarantees the ordering mcp-publisher requires — it reads the
111
+ # `mcp-name:` token from the PUBLISHED PyPI README, so the wheel must be up first.
112
+ # And the call runs against this TAG, so server.json is the released one.
113
+ needs: build-and-publish
114
+ # A pre-release must never become the registry's ACTIVE listing.
115
+ if: needs.build-and-publish.outputs.prerelease != 'true'
116
+ permissions:
117
+ contents: read
118
+ id-token: write # OIDC exchange with registry.modelcontextprotocol.io
119
+ uses: ./.github/workflows/mcp-registry.yml
120
+ with:
121
+ version: ${{ github.ref_name }}
@@ -7,6 +7,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.77.0] — 2026-09-16
11
+
12
+ ### Fixed
13
+
14
+ - **Accounts Flow moved to `flow.google.com` could not sign in at all.** Verification used
15
+ exactly one oracle — `labs.google/fx/api/auth/session` — which answers `200 {}` forever for
16
+ a migrated account, so a perfectly usable Flow workspace reported *"Signed in to Google, but
17
+ not to the Flow app"* and gflow refused every command. A total lockout, not a degraded
18
+ feature. When labs declines **and** the profile carries a `flow.google.com` app-session
19
+ cookie, gflow now confirms the session against the host that actually serves the app.
20
+
21
+ The cookie only **gates** that check; it never decides one. A cookie on disk outlives a
22
+ password change or a "sign out of all devices", so the decision is where the request lands:
23
+ a revoked session is redirected off `myaccount.google.com`, which is server-attested in a
24
+ way page content is not. The account's address is a display label only, so a page reshape
25
+ cannot cost a user their login.
26
+
27
+ **Google Workspace accounts are covered.** An earlier revision gated authentication on an
28
+ `@gmail.com`-only pattern, which silently declined every custom domain — `dev@axelate.io`,
29
+ `user@mycompany.com`, even `user@googlemail.com` — leaving this bug open for them while
30
+ appearing fixed. `docs/AUTHENTICATION.md` documents Workspace SSO as supported.
31
+ Live-verified on a Workspace account: `AUTHENTICATED`, correct address, 2/2.
32
+
33
+ **This also prevents a profile downgrade.** A failed verification rolled the Chrome marker
34
+ back, flipping `channel_for_profile` from `chrome` to `None` and silently demoting
35
+ generation to bundled Chromium on a profile created with `--browser chrome`. The rollback is
36
+ gated on `not verified`, so a verification that now succeeds never triggers it. Measured
37
+ before and after on the same profile, same cookies: exit 8 / marker gone -> exit 0 / marker
38
+ intact. ([#791](https://github.com/ffroliva/gflow-cli/issues/791),
39
+ [#796](https://github.com/ffroliva/gflow-cli/issues/796))
40
+ - **Three lists of "the release version sites" disagreed, and one lived inside the gate that
41
+ catches the disagreement.** `check_repo_hygiene.py`'s docstring said three files, its own
42
+ `_check_version_agreement` checked five (six occurrences), and `skills/release/SKILL.md`
43
+ named a fourth set omitting `server.json` and `uv.lock` — so a release engineer met each
44
+ omission as a gate failure at the point of highest pressure. There are in fact **seven
45
+ sites across three separate gates**, and no list knew them all; coverage was complete, but
46
+ discoverability was not. The skill now carries the one canonical table, its staging step
47
+ stages all seven, and `tests/test_release_version_sites.py` **parses** that table rather
48
+ than restating it — a constant would have been the fourth disagreeing copy.
49
+ ([#839](https://github.com/ffroliva/gflow-cli/issues/839))
50
+
51
+ ### Changed
52
+
53
+ - **`wait_until="networkidle"` on the `ui_automation` bootstrap is documented, not removed.**
54
+ [#836](https://github.com/ffroliva/gflow-cli/issues/836) proposed dropping it, on the theory
55
+ that a held-open connection made it burn the full 45 s ceiling. Measured on a live profile,
56
+ 5 navigations per arm: it fires every time and reached the ceiling **0/5**, so there is no
57
+ hang — but it costs **3422 ms mean against 1022 ms** for the prescribed pattern, with 4x the
58
+ spread. Removing it turned the #580/#584 navigation ratchet red: both call sites are in that
59
+ test's exemption set by name, because `goto(domcontentloaded)` returns 591–797 ms *before*
60
+ Flow's locale redirect lands and `networkidle` is what absorbs it. The issue read two call
61
+ sites with different constraints as one contradiction. The measurement and the probe ship so
62
+ the next reader finds them instead of re-deriving this.
63
+
64
+ - **The MCP Registry publish never ran — not once, on any release that shipped with it.**
65
+ `mcp-registry.yml` triggered on `release: published`, but `release.yml` creates the Release
66
+ with the default `GITHUB_TOKEN`, and GitHub starts no workflow runs from
67
+ `GITHUB_TOKEN`-created events. Measured on v0.76.0: a real Release published
68
+ (`draft=false`, `prerelease=false`), the workflow file on the default branch, and
69
+ `gh run list --workflow=mcp-registry.yml` returning **zero runs, ever**. The trigger was
70
+ structurally dead rather than mistimed, so it would not have begun working at the next
71
+ release. `release.yml` now **calls** the workflow (`uses:` + `needs: build-and-publish`)
72
+ instead of relying on an event, so there is nothing for the token rule to block. A
73
+ user-owned PAT on the Release step was the alternative and was rejected on maintenance
74
+ grounds: fine-grained tokens expire after at most 366 days, which puts a scheduled failure
75
+ on a path that runs a handful of times a year. `needs:` also enforces the ordering
76
+ `mcp-publisher` requires — it reads the `mcp-name:` token from the *published* PyPI README —
77
+ which previously rested on two files agreeing about step order. Registry authentication is
78
+ unchanged: GitHub Actions OIDC, with no token stored for or handed to the registry.
79
+ ([#841](https://github.com/ffroliva/gflow-cli/issues/841))
80
+ - **A manual registry dispatch could publish a superseded version, green, with nothing
81
+ noticing.** A dispatch publishes whatever `server.json` says *on the dispatched ref*.
82
+ Dispatching `develop` after the v0.76.0 tag but before the back-merge landed republished
83
+ `0.75.0` to the registry, and the run succeeded. Both triggers now take a required `version`
84
+ input, asserted against every version field in `server.json`, and fail the run on a
85
+ mismatch instead of publishing. ([#841](https://github.com/ffroliva/gflow-cli/issues/841))
86
+ - **A pre-release would have become the MCP Registry's *active* listing.** `release.yml` fires
87
+ on every `v*.*.*` tag, including `v1.2.3rc1`, and that listing is what PulseMCP and GitHub's
88
+ MCP gallery ingest. While the publish was dead this was latent; repairing it would have
89
+ armed it. The call is now skipped for pre-releases, and the workflow refuses a pre-release
90
+ version outright if one reaches it by hand. The prerelease classification has a single
91
+ definition shared by the GitHub Release flag and the registry gate, rather than two copies
92
+ of the same expression that would drift. Found by council review, not in production.
93
+ ([#841](https://github.com/ffroliva/gflow-cli/issues/841))
94
+
10
95
  ## [0.76.0] — 2026-09-16
11
96
 
12
97
  ### Fixed
@@ -5201,7 +5286,8 @@ shell-script template that branches on these codes.
5201
5286
 
5202
5287
  First skeleton. Not functional end-to-end yet.
5203
5288
 
5204
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.76.0...HEAD
5289
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.77.0...HEAD
5290
+ [0.77.0]: https://github.com/ffroliva/gflow-cli/compare/v0.76.0...v0.77.0
5205
5291
  [0.76.0]: https://github.com/ffroliva/gflow-cli/compare/v0.75.0...v0.76.0
5206
5292
  [0.75.0]: https://github.com/ffroliva/gflow-cli/compare/v0.74.0...v0.75.0
5207
5293
  [0.74.0]: https://github.com/ffroliva/gflow-cli/compare/v0.73.2...v0.74.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.76.0
3
+ Version: 0.77.0
4
4
  Summary: CLI and MCP server for Google Flow — drive Veo text-to-video, image-to-video and Imagen image generation from the terminal.
5
5
  Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
6
  Project-URL: Documentation, https://ffroliva.github.io/gflow-cli/
@@ -24,6 +24,40 @@ When a tag matching `v*.*.*` is pushed, GitHub Actions:
24
24
  4. Creates a GitHub Release and attaches the built artifacts.
25
25
  5. Marks tags containing PEP 440 alpha, beta, or release-candidate markers as
26
26
  GitHub prereleases.
27
+ 6. Publishes `server.json` to the Official MCP Registry — `release.yml` **calls**
28
+ `mcp-registry.yml` with `needs: build-and-publish`. Full releases only; the call is
29
+ skipped for prereleases so an `rc` never becomes the registry's active listing.
30
+
31
+ ### Why the registry publish is called, not triggered
32
+
33
+ Worth knowing before anyone "tidies" it into an event trigger. It used to hang off
34
+ `on: release: published`, and it **never fired once**, on any release, with nothing going
35
+ red ([#841](https://github.com/ffroliva/gflow-cli/issues/841)): GitHub starts no workflow
36
+ runs from events created with the default `GITHUB_TOKEN`, which is what creates the Release
37
+ in step 4.
38
+
39
+ A user PAT on that step would also fix it, and was rejected: fine-grained tokens expire
40
+ after at most 366 days, so it puts a scheduled failure on a path that runs a handful of
41
+ times a year. **There is no secret to rotate in the current design.** `needs:` additionally
42
+ enforces the ordering `mcp-publisher` requires — it reads the `mcp-name:` token out of the
43
+ *published* PyPI README, so the wheel has to be up first — and the call runs against the
44
+ release tag, so `server.json` is always the released one.
45
+
46
+ ### If the release job fails after PyPI
47
+
48
+ The PyPI upload is step 3 and the Release is step 4, so a failure in between leaves the wheel
49
+ **already published**. `pypa/gh-action-pypi-publish` runs without `skip-existing`, so re-running
50
+ the workflow fails on the duplicate filename, and re-tagging is not permitted. Recover by hand:
51
+
52
+ ```bash
53
+ gh release create vX.Y.Z --generate-notes dist/*
54
+ gh workflow run mcp-registry.yml --ref vX.Y.Z -f version=X.Y.Z
55
+ ```
56
+
57
+ The registry publish needs its own dispatch because it hangs off the release job via
58
+ `needs:`, so a failed release job means it never ran. Dispatch it against the **tag** — a
59
+ branch publishes whatever `server.json` that branch carries, which is how v0.76.0
60
+ republished 0.75.0.
27
61
 
28
62
  ## Prerelease Versus Full Release
29
63
 
@@ -45,7 +45,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
45
45
  # Deliberately NOT pinned: google-chrome-stable. Chrome's apt repo keeps only the current
46
46
  # build, so a pinned version stops resolving within weeks. The trade-off is that this
47
47
  # layer caches indefinitely and a rebuild is what picks up a newer Chrome.
48
- ARG GFLOW_VERSION=0.76.0
48
+ ARG GFLOW_VERSION=0.77.0
49
49
  RUN pip install --no-cache-dir "gflow-cli==${GFLOW_VERSION}"
50
50
 
51
51
  VOLUME ["/data"]
@@ -24,7 +24,7 @@ channel no longer accepts anything).
24
24
  | Channel | Audience | Submit via | Status | Last verified |
25
25
  |---|---|---|---|---|
26
26
  | [PyPI](https://pypi.org/project/gflow-cli/) | Python users, every downstream scraper | `uv publish` (release) | listed | 2026-09-14 |
27
- | [Official MCP Registry](https://registry.modelcontextprotocol.io) | Agent devs; feeds other registries | `mcp-publisher`, automated on release (#829) | **automated first run is v0.76.0's own release job** | 2026-09-16 |
27
+ | [Official MCP Registry](https://registry.modelcontextprotocol.io) | Agent devs; feeds other registries | `mcp-publisher`, called by `release.yml` (#829; wiring repaired in #841) | **listed** · `0.76.0` active · automation repaired but **not yet exercised** — v0.77.0 is its first real run | 2026-09-16 |
28
28
  | [Glama](https://glama.ai/mcp/servers/ffroliva/gflow-cli) | Broad MCP audience (87k servers) | Web form | **listed** · claimed · rated **A** · release **0.75.0** published · Auto-Release on | 2026-09-15 |
29
29
  | [MCP Market](https://mcpmarket.com/server/gflow-cli) | Consumer discovery | — (crawled us) | **listed** | 2026-09-14 |
30
30
  | [skills.sh](https://skills.sh/ffroliva/gflow-cli) | Cross-agent skill users | — (telemetry) | **listed** | 2026-09-14 |
@@ -55,17 +55,46 @@ channel no longer accepts anything).
55
55
  Ranked by reach per hour of work. The eight submissions are out; what is left is gated on one
56
56
  thing, and it is not a distribution task.
57
57
 
58
+ > ⚠️ **Repaired in #841, and v0.77.0 is the first release that will actually test it.**
59
+ > For every release through v0.76.0 the registry publish never fired. It hung off
60
+ > `release: published`, but `release.yml` creates the Release with the default
61
+ > `GITHUB_TOKEN`, and GitHub starts no workflow runs from `GITHUB_TOKEN`-created events.
62
+ > Measured on v0.76.0 — a real Release published, and the workflow had **zero runs, ever**
63
+ > ([#841](https://github.com/ffroliva/gflow-cli/issues/841)). v0.76.0 was published by hand.
64
+ >
65
+ > **It is now called, not triggered.** `release.yml` invokes `mcp-registry.yml` directly
66
+ > (`uses:` + `needs: build-and-publish`). No event, so nothing for the token rule to block —
67
+ > and no credential to rotate. A user PAT was the other way to fix it and was rejected on
68
+ > maintenance grounds: a 366-day expiry on a path that runs a few times a year is another
69
+ > scheduled silent-ish failure, which is the shape of the bug being fixed.
70
+ >
71
+ > `needs:` is also what enforces the ordering — `mcp-publisher` reads the `mcp-name:` token
72
+ > from the **published** PyPI README, so the wheel must be up first. And the call runs
73
+ > against the release **tag**, so the wrong-ref hazard below cannot arise on this path.
74
+ >
75
+ > **Pre-releases are excluded.** `release.yml` fires on every `v*.*.*` tag including
76
+ > `v1.2.3rc1`, and an `rc` must never become the registry's *active* listing — the one
77
+ > PulseMCP and GitHub's MCP gallery ingest. The call is skipped for them, and the workflow
78
+ > refuses a pre-release version outright if one ever reaches it by hand.
79
+ >
80
+ > **The manual path remains, and its ordering hazard is unchanged.** `gh workflow run
81
+ > mcp-registry.yml --ref <ref> -f version=X.Y.Z` publishes whatever `server.json` says **on
82
+ > that ref**, so dispatching `develop` before the release back-merge lands republishes the
83
+ > *previous* version. That happened on v0.76.0. The `version` input is now required and
84
+ > asserted against `server.json`, so the mismatch fails the run instead of publishing green.
85
+
58
86
  1. **Publish to the Official MCP Registry** — the one that feeds the others (PulseMCP ingests it;
59
- GitHub's gallery is built on it). **v0.75.0 is the release that unblocks it**, and this document
87
+ GitHub's gallery is built on it). **v0.75.0 was the release that unblocked it**, and this document
60
88
  ships in it: PyPI metadata is frozen per release, so the rewritten summary, the three sidebar
61
89
  links and the ten classifiers take effect on that upload, and `mcp-publisher` can only verify
62
90
  ownership once the `mcp-name:` token is in the *published* README.
63
91
 
64
- **This is now automated.** `.github/workflows/mcp-registry.yml` runs on `release: published`,
65
- which fires after `release.yml` has uploaded the wheel, and authenticates with GitHub Actions
66
- OIDC no PAT, no device-code flow, no human step. It becomes live once it reaches the default
67
- branch at the next release; `v0.75.0` itself therefore still needed either one manual publish or
68
- the arrival of `v0.76.0`.
92
+ **This is automated as of #841** — it was not before, and v0.76.0 went out by hand.
93
+ `release.yml` calls `.github/workflows/mcp-registry.yml` as a reusable workflow, with
94
+ `needs: build-and-publish` so it runs after the wheel is on PyPI, and it authenticates to
95
+ the registry with GitHub Actions OIDC **no token is stored for, or handed to, the
96
+ registry, and none is needed to trigger it.** The call runs against the release tag, so the
97
+ publish always carries the released `server.json`.
69
98
  2. **Check Glama after the next release.** The Dockerfile is built and 0.75.0 is released, which
70
99
  met punkpeye's Glama gate. Auto-Release is meant to publish each GitHub release by itself, but
71
100
  it has never fired for us yet, and an unpinned build has already used a commit hours out of
@@ -107,7 +136,7 @@ Absolutising them fixes it, but `scripts/ci/check_doc_links.py` validates relati
107
136
  disk and would stop checking them — so the fix is absolutise **plus** teach the checker to map our
108
137
  own `blob/main/` URLs back to paths. Tracked, not done here.
109
138
 
110
- ### Official MCP Registry — submit as soon as v0.75.0 is on PyPI
139
+ ### Official MCP Registry — listed since v0.75.0, automated since #841
111
140
 
112
141
  Schema `2025-12-11`, read live. `ServerDetail` requires `name`, `description`, `version`;
113
142
  `description` is capped at **100 characters**; `name` must match `^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$`
@@ -131,9 +160,11 @@ so `uvx gflow-cli mcp run` works — which is also what a user types first, the
131
160
  just installed.
132
161
 
133
162
  Publishing runs in CI: `.github/workflows/mcp-registry.yml`, on `release: published` (plus
134
- `workflow_dispatch` for a re-run). It authenticates with **GitHub Actions OIDC**, so no personal
135
- access token is ever created or handed to the registry, and the `mcp-publisher` download is pinned
136
- by version *and* sha256 because that job holds `id-token: write`.
163
+ `workflow_dispatch -f version=X.Y.Z` for a re-run). It authenticates with **GitHub Actions OIDC**,
164
+ so **no token is ever handed to the registry**, and the `mcp-publisher` download is pinned by
165
+ version *and* sha256 because that job holds `id-token: write`. **No personal access token is
166
+ involved anywhere in this path** — not for the registry, and not to start the workflow: it is
167
+ called by `release.yml` rather than triggered by an event (#841).
137
168
 
138
169
  The equivalent by hand, if you ever need it locally:
139
170
 
@@ -169,7 +169,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
169
169
  **"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
170
170
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
171
171
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
172
- **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.76.0](LIVE_VERIFICATION_v0.76.0.md) (**a diagnostics-and-distribution release, verified 2026-09-16 at ZERO cost — no Veo credits, no image generation, no Flow submit.** The decisive arm is #833's **negative** control, run first-hand on two real accounts rather than relayed: `flow-pinhole-unavailable-screen` is **0** on both `ffroliva` and `denon82` while `aisandbox-root` is **1**, so the guard does not fire on accounts that HAVE Flow access and the zero is a real absence rather than a page that never booted — a guard with only a positive arm is indistinguishable from one that is permanently on. Both accounts settled at **`/about`**, which is the state that broke this release's *withdrawn* #791 oracle, and the exit-39 signal reads a component that only exists on the unavailable screen, so `/about` cannot mimic it. mcpservers.org is verified with a **404 negative control** because the listing 403s to `curl` and a naive check would have called the link dead. **#791 is NOT in this release and was withdrawn rather than deferred**: a fix passed eight council dimensions and was then refuted by a five-day-old spike nobody had routed to it — Flow's `/about` hop is decided client-side with zero requests to Flow, and *"the backend grants access while the frontend declines to open it"* (#756), so the probe would have reported authenticated users as logged out, reintroducing #791 as its own cure; the e2e caught it by going red on a live account whose state moved mid-session. **Two rows are blocked by the platform rather than by effort:** the Docker sign-in needs a WSL-integrated Docker host, and the MCP Registry publish cannot be observed until this very tag reaches `main`, since both triggers resolve the workflow from the default branch.) · previous: [LIVE_VERIFICATION_v0.75.0](LIVE_VERIFICATION_v0.75.0.md) (**a distribution-and-hardening release, verified 2026-09-15 on `ffroliva` at ZERO cost — no Veo credits, no image generation, no Flow submit.** The `gflow serve` token fix is an **A/B against the released 0.74.0 wheel from PyPI**, not a diff read: the token was *set* in both arms, so the probe measures whether it is checked — before, `no token 200/200` with 13 tools listed and `wrong 200/200`; after, `401/401` with zero tools and `WWW-Authenticate: Bearer realm="gflow"`, while the correct token still gets 200. Loopback DNS-rebinding was re-confirmed at **421**/**403** because the fix forwards the bind host and getting that wrong would silently disable protection that works today — and an earlier draft of the accompanying advisory claimed that protection was *disabled*, a false claim caught by measuring rather than re-reading. #813's guard is verified against a **real wheel in a real venv installed without extras**, the arm first proving it is in that state (`av present: False PIL present: False`); the decisive row is that a **nonexistent** manifest still exits **20** on the dependency error rather than file-not-found, which is what shows the guard precedes the manifest read and not merely the generation. The Rich escape fix is verified on the **console render separated from the structlog JSON** — matching the JSON line would have been a false pass, since `--json` was never affected — with a **neutered control** through the same Rich version reproducing the bug exactly: `UNESCAPED -> pip install 'gflow-cli'` against `ESCAPED -> pip install 'gflow-cli[chain]'`. Also: `gflow-cli.exe` exists in the built wheel so `uvx gflow-cli` resolves at all, and the wheel carries 138 entries with **zero** ZIP duplicates. **Three items recorded as NOT verified rather than omitted:** a successful multi-link `chain` run spends Veo credits and stays outstanding e2e debt on #813 — what changed is the refusal path, which *is* verified; `gflow credits` against a working balance is impossible here because the account still returns 401, pre-existing **#795** and unrelated to this release; and the SSE arm of the token fix was exercised on loopback only, a deliberate scope limit, since binding a LAN address to test it would put an authenticated daemon on a live network for the run. **Two rows are blocked by the platform rather than by effort:** the PyPI metadata and the MCP Registry listing are both unobservable until this release is uploaded — PyPI renders the last artefact's metadata, and `mcp-publisher` reads its ownership token out of the *published* README.) · previous: [LIVE_VERIFICATION_v0.74.0](LIVE_VERIFICATION_v0.74.0.md) (**the migrated driver's run-unique uploads and its Frames-picker confirm, plus the `credits` remediation, verified 2026-09-14 on `ffroliva` at ZERO cost — every arm is a read or an upload-and-stop.** The confirm branch is the interesting one: this cohort's picker closes on its own, so the branch would never execute against live Flow by accident, and the e2e drives `FRAME_COMMIT_GRACE_S` to **0.001** so the grace expires before Flow can auto-close and **every** run enters it — the difference between a named blocker and an unrun claim. A *genuinely stuck* picker still cannot be produced here and stays `Refs #792`, verifier the reporter. #795 was verified on the cohort it is for, because this account is now in it — `auth status` green, `credits user` exit **3** with `detail` `credits endpoint returned 401` and `route: credits`, where v0.73.2 printed the class-default *"SAPISID cookie missing… re-run `gflow auth login`"*, advice that is wrong in every word there and that can roll a profile's strategy marker back and start the #791 spiral; the `credits list --json` envelope carries the per-profile `remediation_hint` that used to be dropped. **Two items recorded as NOT verified rather than omitted:** #799's exit-25 raise site needs an account in the agent-only cohort — the maintainer's accounts are served `flow.google.com` but still have the recoverable agent chip, so the state is structurally unreachable on them, a named blocker and #799 stays open; and neither `r2v` nor `i2i` had its own attach path driven to completion — `r2v` was not attempted (its e2e spends Veo credits), while `i2i` **was** attempted twice and failed both times at exit 23, before reaching the code under test, because the `--project` UUID came from `gflow project list` (the aisandbox catalog) and those ids 404 on `flow.google.com` — a harness error, recorded rather than dropped, which left a side finding: gflow reports Flow's own `/404?reason=project` as `UiSelectorDriftError`, blaming our selectors for Flow's 404. **#791 is not fixed and was not attempted blind** — all nine local profiles were probed at $0 and none is in the #791 state (SAPISID + a live `flow.google.com` session + no labs NextAuth token); four print its exact symptom string and none of them is it, because that string is also what a stale profile says.) · previous: [LIVE_VERIFICATION_v0.73.2](LIVE_VERIFICATION_v0.73.2.md) (**the blank incident bundle, reproduced and then cured by a committed e2e test, 2026-09-12 on `ffroliva` at ZERO cost — every arm fails before submit.** The decisive layer is an **A/B run through the same instrument**, not an inspection: on `develop` the new test FAILS in 46.3 s and prints the bundle it got — `tag_counts.div = 0`, `title.length = 0`, `host_category = "other"`, a 4,254-byte screenshot — which is field-for-field the signature [#792](https://github.com/ffroliva/gflow-cli/issues/792) reported from a different account, a different OS and a different command; on the fix it PASSES in 37.8 s with `div` **25**, `title.length` **81**, `host_category` **`flow_app`**, `route` `/404` and a 38.4 KB screenshot. Both arms exit **23** on the same `.settings-trigger-button` drift at `flow.google.com/404?reason=project`, so the arms differ only in what was *captured*, never in what failed. **The reporter's own bundle contained the refutation of their diagnosis**: viewport 1280x720 is `client.py`'s client-owned page, not the 1920x1080 a stray transport tab would have — it was always the driven page, photographed one navigation too late, and the portrait correlation had no mechanism behind it. The existing quality benchmark could not have caught this: it captures deliberately on a **healthy** page, so it graded only bundles that were never at risk. **Recorded as NOT verified rather than omitted:** #796's `PROFILE_MARKER_MISSING` is offline-only because its live trigger is a cookie-store **decryption** failure, which does not occur on Windows/DPAPI — it is the macOS Keychain path of [#768](https://github.com/ffroliva/gflow-cli/issues/768), a **named external blocker**, and the issue stays open; a synthetic attempt to force it failed informatively, since a corrupt store raises `sqlite3.DatabaseError`, bypasses the marker gate and still prints "check network connectivity" — the same misdirection from a different trigger, untouched here. #795's remediation string is unit-asserted only, and the *other* half of #795 — `credits` being labs-only on migrated accounts — is **not fixed**.) · previous: [LIVE_VERIFICATION_v0.73.1](LIVE_VERIFICATION_v0.73.1.md) (**Google's `glue` consent bar covering the migrated composer, measured and then cured, 2026-09-11 on `ci-probe` for one image generation and no Veo credits.** The premise was nearly rejected: both prior sightings of that selector in this repo are labs.google, and the 2026-09-10 spike had read 159 DOM samples on this exact host and project and watched the click land 3/3 — it simply never looked for a cookie bar. Seventeen hours later the bar was up: `position: fixed`, `z-index: 1000`, spanning y 547-655 of a 655 px viewport, with `elementFromPoint` over the settings trigger AND over the image submit both returning `span#glue-cookie-notification-bar-1-label` in **0 of 5** rendered samples hit-testable. **The control arm is what makes it a cure rather than a coincidence**: the same probe re-run through the driver's own `_dismiss_cookie_bar` restored both controls to **4/4**, one attempt, no error. A full `gflow image t2i` then ran end to end on the merged code — `status: ok`, a 807,761-byte `ffd8ffe0` JPEG that Pillow reads as 1376x768 RGB, matching the requested 16:9 and the reply's own dimensions, with `migrated.editor_ready` at 2.0 s and **no** `cookie_bar_not_dismissed`. A side finding the control arm produced by accident: the bar's buttons are `__accept` then `__reject` in DOM order, so anything taking "the first button" accepts cookies for the operator — the shipped fix anchors on reject. **Three items recorded as NOT verified rather than omitted:** the cure against a live bar outside the browser, because this release's own control arm consumed the consent on the only profile that had it; **prevalence**, because the second profile never reached an editor (both arms redirected to `/about`) so it is one account blocked and one already-consented, and KNOWN_ISSUES says so rather than generalising from n=1; and the video path live, which shares the identical function on the identical control but spends Veo credits.) · previous: [LIVE_VERIFICATION_v0.73.0](LIVE_VERIFICATION_v0.73.0.md) (**four error paths that stopped lying about what went wrong, verified 2026-09-10 on `ci-probe` and `denon82` at $0 — no run below reaches a Veo submit.** The decisive arm is an **A/B**, not an inspection: the pre-fix run printed an `accounts.google.com` challenge URL together with the OAuth `state` and `client_id`, and the identical command after the fix gave the same exit 38 and the same landing named with **five secret matches down to zero** — reading the post-fix output alone would only have shown that *these* secrets were absent. A second arm **falsified a claim already written into PR #775's body**: it said the change fixed the RED canary, and the live run showed `denon82` had moved to `accounts.google.com` mid-run, a landing the classifier excluded **by design**, with a unit test encoding the wrong reason — the offline suite was green throughout and could not have caught it. #776's happy path is verified by a real `gflow image t2i` (exit 0, 367 135-byte JPEG, `image_settings_applied` and `prompt_typed` both present, so **three of the four converted click sites** clicked successfully through the new helper); its **failure** path is real Chromium driving a page we wrote, which proves the mechanism and explicitly **not** that Flow still produces that state. **Three items recorded as NOT verified rather than omitted:** the `/about` redirect stopped reproducing (**0/5**, reported as *unmeasured* rather than argued into a retry flag), the `/fx/api/auth/*` landing moved before the run reached it, and #764's *success* path — an external contribution whose error boundary this release verifies but whose auto-selection needs an account currently behind a Google password challenge. The fourth converted click site is the **video** submit, unrun because it spends Veo credits, named rather than implied.) · previous: [LIVE_VERIFICATION_v0.72.0](LIVE_VERIFICATION_v0.72.0.md) (**auto-closing `gflow auth login`, verified 2026-09-09 on a migrated account at $0 across six runs.** Four paths: auto-close fires (`probe=in_context` at `elapsed_s` **84.8**, reproduced 3x), a manual close still verifies from disk (exit 0, never exit 12), `--browser auto` selects and completes, and a window closed **mid-2FA** is noticed in **2 s** (exit 8) where it previously ran the full 600 s deadline with the session endpoint touched **zero** times. **Two runs were discarded rather than counted**, and that is the useful part: the first returned exit 0 at `elapsed_s: 0.2` because a throwaway profile had survived the previous session and nobody signed in — a cached session reading as a clean pass — and three attempts at the manual-close path all returned exit 0 while being the *auto-close* path in disguise, separable only by an **absent** `probe=in_context`. The manual path was obtained by widening the poll interval for one run so the competing branch could not fire; the 2FA path by killing the profile's own Chrome, because hand-timing lost every race on a host that completes passkey sign-in in ~15 s. **Recorded as NOT verified rather than omitted:** the migrated-host image slice (#692) was **re-run this cycle** — CLI `t2i` PASSED first-hand on a moved account, while the queued-MCP `i2i` twin failed with a typed non-retryable exit 27 whose **cause is unknown** — some dialog opened after the file was chosen and no `maseQ` left the page, on an account that has ALREADY consented, so the message's "most likely the one-time upload-terms dialog" does not fit; no incident bundle was written, so nothing names the dialog, and it is filed for a spike rather than guessed; the subprocess fallback is unit-tested only; and the OAuth-callback *mechanism* behind the poll fix is **inferred, not proven** — a host-only gate does not exclude NextAuth's callback, since it runs on the app's own origin, yet all four sign-ins passed under it, so #769 carries the spike that would settle it.) · previous: [LIVE_VERIFICATION_v0.71.1](LIVE_VERIFICATION_v0.71.1.md) (**two migrated-host error paths stopped blaming the wrong thing, 2026-09-08, $0 across three profiles.** The agent-mode recovery landed earlier in this same release (#749) and worked, but its first cut collapsed three outcomes into one message — chip clicked / chip found but click blocked / chip clicked and mode still on — so a modal eating the click sent users to toggle a chip that was never the problem, and genuine selector drift *after* the mode was left was filed under an account setting the driver had already changed. Verified by an e2e that drives the account INTO agent mode and carries its own neutered-selector control; run **twice**, because review fixes landed after the first run and it no longer covered the code. **The larger find:** an account's FIRST upload on this host is blocked by Flow's one-time *"Rights to use this image"* dialog, which renders *after* the file chooser hands the file over — so `_dismiss_dialog` never sees it and the driver spent 60 s waiting for a request the page had already declined to make, then advised re-encoding the image. Six runs on `ci-probe` close the chain: guard fires while the dialog is up → owner-authorised accept → uploads (`media_id 8914400f`) → fresh session uploads clean with `dialog: None`. The order was forced, because the dialog is one-off and accepting it destroys the failing state — so the guard was written and verified BEFORE anything was clicked, and its firing branch is now unrepeatable here. `maseQ` is confirmed **not** renamed (six uploads, three profiles), killing #719's top hypothesis. Also: Flow's queue listing is on **`Zzl0ze`**, not the `jwpduf`/`as29s` progress polls, and two `abra_r2v_8s` records sat at status 6 for ~20 h unseen by any CLI command (#741). Three documents are corrected rather than patched — a KNOWN_ISSUES entry that told #719's reader this dialog did not affect gflow-cli, and a v0.71.0 host label calling `ci-probe` *labs* when it is migrated, which helped a credit-based theory survive four runs. Recorded as NOT verified: #719's second failure shape — an upload request that leaves the page and is never answered, ~1 run in 4 — which is unfixed and keeps #719 open.) · previous: [LIVE_VERIFICATION_v0.71.0](LIVE_VERIFICATION_v0.71.0.md) (**`gflow character create --voice` verified end to end for the first time, 2026-09-07 on profile `ffroliva`.** Before this release a repo-wide grep for `--voice` across `tests/e2e/` matched **nothing** — every voice test was a unit test of the hardcoded `VOICES` constant and the one that looked live parsed a fixture, so a voice that silently failed to attach was invisible to the whole suite while the command exited 0. A live create + `character show` read-back settles a contradiction between two of our own documents: `sent='Charon' stored='Charon' identical=True`, so the Capitalized canonical form round-trips and `CHARACTER_RECON.md`'s "preset id is the lowercased name" does not describe today's wire. Both docs also now record that `personalityNotes` is **Agent-scoped** per Flow's own editor copy, not a control on the audio engine. **A claim that was in the code is overturned:** the `_unported_form` entity guard said the submit "never produces a reply" and that the backend refuses — in fact `MZZa6b` replies with a null payload and the generation is **accepted and queued** (Flow types it `abra_r2v_8s` and renders it); the failure is the *observer*, which waits out `SUBMIT_REPLY_BUDGET_S` (60 s, calibrated on 4.0–4.6 s replies against an idle queue) and exits 9 while the video is still rendering. The guard stays until the observer is fixed, because a timeout reported on a healthy generation is worse than an explicit refusal. Also verified: credit shortfall reports exit **37** with `_raise_if_out_of_credits` called from **both** give-up paths — and it is *short for the selected model*, not empty (the measured account held **50** and asked for `veo-quality`, which costs **100**); the "+ New project" CTA anchored structurally on `add` (Tier-1 matches **1** where every previous entry matched **0**, control 47 ligature nodes) after this same release first asserted the control did not exist and a $0 run disproved it in one click; and the incident-bundle DOM dump de-blinded — it queried `i.google-symbols` only, so **every bundle a migrated user sent carried an empty ligature list**, which is why #727 and #731 stayed invisible. One item recorded as NOT verified rather than omitted: whether a bound character's **voice reaches rendered audio** (#738) — attachment is proven, application is not, because no entity-bound generation has yet returned a file to measure. The blocker is no longer credits or account access but retrieval, and the measurement is pre-calibrated: plate-bound takes of one character gave **88 / 103 / 118 Hz** against a **4.3 Hz** engine noise floor, so an applied Algenib should sit near its sample's **163.3 Hz**.) · previous: [LIVE_VERIFICATION_v0.70.0](LIVE_VERIFICATION_v0.70.0.md) (**reference-to-video on the migrated `flow.google.com` host, verified 2026-09-06 on profile `denon82`.** Three r2v runs bound their references every time; the decisive one is semantic rather than structural — two hand-drawn reference images went in and the clip came back carrying the same marker strokes, face and paper texture, which is what separates "Flow bound the reference" from "Flow accepted and ignored it". A four-beat, two-character piece was then produced end to end and joined with the concat filter: 19.000s, 1280x576, `clip_qa` **ok**, A/V **+0.000s**, both actors recognisable across every cut from one face plate plus the canon repeated verbatim. Also verified as exit-code corrections on the real CLI: `-o <existing directory>` now exits **2 in 0.8s** instead of exit 1 after ~2 min **and a billed, orphaned clip**; `character create` on a moved account exits **36 immediately** instead of a bare `RuntimeError` exit 1 after a 20s wait. Four items recorded as NOT verified rather than omitted: #692's original failure could not be reproduced [the reporter's own re-run was on a build without the fix, so it shows the failure is intermittent, not that the fix works]; Flow CHARACTER entities were never exercised because `character create` cannot run on any account available here; `image`/`scene`/`movie`/`extend` all exit 36 on the migrated host and no unmoved account exists here; and the sign-in-interstitial fidelity question from #699 has no bundle evidence either way.) · previous: [LIVE_VERIFICATION_v0.68.0](LIVE_VERIFICATION_v0.68.0.md) (`gflow update` self-upgrading a real `uv tool` and a real `pipx` install from their own running `gflow.exe` to the PyPI release, Windows 11, zero credits — see its own row below) · previous: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (the migrated `flow.google.com` driver — see its own row below) · previous: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
172
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.77.0](LIVE_VERIFICATION_v0.77.0.md) (**the migrated-host login lockout (#791), verified as a controlled A/B on a real Google **Workspace** account at ZERO cost — same profile, same cookies untouched between arms, so the only variable is the code: exit 8 with the Chrome marker rolled back and `channel_for_profile` collapsed to `None`, then exit 0 with the marker intact and the account recorded. The refusal path is measured too — of 10 local profiles, 5 reproduce #791 and exactly one carries both required cookies: 4 refusals, 1 upgrade, 0 false positives. v0.76.0 recorded this fix as **withdrawn**; the approach that shipped is a different one, server-attested on the landing URL rather than on client-rendered DOM. An earlier revision gated auth on an `@gmail.com`-only pattern that silently declined every custom domain — the account used here is one, which is why this is its verification. **#796 is reproduced and prevented**, not merely reported: it was filed as *'not yet reproduced end-to-end'*. **Two rows are named blockers, not omissions:** the MCP Registry publish (#841) cannot be rehearsed before a real tag push, so this release is its first exercise; and the migrated-host generation e2e cannot run here at all — every account bounces to `/about`, A/B-controlled against `develop` so it is not mistaken for a regression.) · previous: [LIVE_VERIFICATION_v0.76.0](LIVE_VERIFICATION_v0.76.0.md) (**a diagnostics-and-distribution release, verified 2026-09-16 at ZERO cost — no Veo credits, no image generation, no Flow submit.** The decisive arm is #833's **negative** control, run first-hand on two real accounts rather than relayed: `flow-pinhole-unavailable-screen` is **0** on both `ffroliva` and `denon82` while `aisandbox-root` is **1**, so the guard does not fire on accounts that HAVE Flow access and the zero is a real absence rather than a page that never booted — a guard with only a positive arm is indistinguishable from one that is permanently on. Both accounts settled at **`/about`**, which is the state that broke this release's *withdrawn* #791 oracle, and the exit-39 signal reads a component that only exists on the unavailable screen, so `/about` cannot mimic it. mcpservers.org is verified with a **404 negative control** because the listing 403s to `curl` and a naive check would have called the link dead. **#791 is NOT in this release and was withdrawn rather than deferred**: a fix passed eight council dimensions and was then refuted by a five-day-old spike nobody had routed to it — Flow's `/about` hop is decided client-side with zero requests to Flow, and *"the backend grants access while the frontend declines to open it"* (#756), so the probe would have reported authenticated users as logged out, reintroducing #791 as its own cure; the e2e caught it by going red on a live account whose state moved mid-session. **Two rows are blocked by the platform rather than by effort:** the Docker sign-in needs a WSL-integrated Docker host, and the MCP Registry publish cannot be observed until this very tag reaches `main`, since both triggers resolve the workflow from the default branch.) · previous: [LIVE_VERIFICATION_v0.75.0](LIVE_VERIFICATION_v0.75.0.md) (**a distribution-and-hardening release, verified 2026-09-15 on `ffroliva` at ZERO cost — no Veo credits, no image generation, no Flow submit.** The `gflow serve` token fix is an **A/B against the released 0.74.0 wheel from PyPI**, not a diff read: the token was *set* in both arms, so the probe measures whether it is checked — before, `no token 200/200` with 13 tools listed and `wrong 200/200`; after, `401/401` with zero tools and `WWW-Authenticate: Bearer realm="gflow"`, while the correct token still gets 200. Loopback DNS-rebinding was re-confirmed at **421**/**403** because the fix forwards the bind host and getting that wrong would silently disable protection that works today — and an earlier draft of the accompanying advisory claimed that protection was *disabled*, a false claim caught by measuring rather than re-reading. #813's guard is verified against a **real wheel in a real venv installed without extras**, the arm first proving it is in that state (`av present: False PIL present: False`); the decisive row is that a **nonexistent** manifest still exits **20** on the dependency error rather than file-not-found, which is what shows the guard precedes the manifest read and not merely the generation. The Rich escape fix is verified on the **console render separated from the structlog JSON** — matching the JSON line would have been a false pass, since `--json` was never affected — with a **neutered control** through the same Rich version reproducing the bug exactly: `UNESCAPED -> pip install 'gflow-cli'` against `ESCAPED -> pip install 'gflow-cli[chain]'`. Also: `gflow-cli.exe` exists in the built wheel so `uvx gflow-cli` resolves at all, and the wheel carries 138 entries with **zero** ZIP duplicates. **Three items recorded as NOT verified rather than omitted:** a successful multi-link `chain` run spends Veo credits and stays outstanding e2e debt on #813 — what changed is the refusal path, which *is* verified; `gflow credits` against a working balance is impossible here because the account still returns 401, pre-existing **#795** and unrelated to this release; and the SSE arm of the token fix was exercised on loopback only, a deliberate scope limit, since binding a LAN address to test it would put an authenticated daemon on a live network for the run. **Two rows are blocked by the platform rather than by effort:** the PyPI metadata and the MCP Registry listing are both unobservable until this release is uploaded — PyPI renders the last artefact's metadata, and `mcp-publisher` reads its ownership token out of the *published* README.) · previous: [LIVE_VERIFICATION_v0.74.0](LIVE_VERIFICATION_v0.74.0.md) (**the migrated driver's run-unique uploads and its Frames-picker confirm, plus the `credits` remediation, verified 2026-09-14 on `ffroliva` at ZERO cost — every arm is a read or an upload-and-stop.** The confirm branch is the interesting one: this cohort's picker closes on its own, so the branch would never execute against live Flow by accident, and the e2e drives `FRAME_COMMIT_GRACE_S` to **0.001** so the grace expires before Flow can auto-close and **every** run enters it — the difference between a named blocker and an unrun claim. A *genuinely stuck* picker still cannot be produced here and stays `Refs #792`, verifier the reporter. #795 was verified on the cohort it is for, because this account is now in it — `auth status` green, `credits user` exit **3** with `detail` `credits endpoint returned 401` and `route: credits`, where v0.73.2 printed the class-default *"SAPISID cookie missing… re-run `gflow auth login`"*, advice that is wrong in every word there and that can roll a profile's strategy marker back and start the #791 spiral; the `credits list --json` envelope carries the per-profile `remediation_hint` that used to be dropped. **Two items recorded as NOT verified rather than omitted:** #799's exit-25 raise site needs an account in the agent-only cohort — the maintainer's accounts are served `flow.google.com` but still have the recoverable agent chip, so the state is structurally unreachable on them, a named blocker and #799 stays open; and neither `r2v` nor `i2i` had its own attach path driven to completion — `r2v` was not attempted (its e2e spends Veo credits), while `i2i` **was** attempted twice and failed both times at exit 23, before reaching the code under test, because the `--project` UUID came from `gflow project list` (the aisandbox catalog) and those ids 404 on `flow.google.com` — a harness error, recorded rather than dropped, which left a side finding: gflow reports Flow's own `/404?reason=project` as `UiSelectorDriftError`, blaming our selectors for Flow's 404. **#791 is not fixed and was not attempted blind** — all nine local profiles were probed at $0 and none is in the #791 state (SAPISID + a live `flow.google.com` session + no labs NextAuth token); four print its exact symptom string and none of them is it, because that string is also what a stale profile says.) · previous: [LIVE_VERIFICATION_v0.73.2](LIVE_VERIFICATION_v0.73.2.md) (**the blank incident bundle, reproduced and then cured by a committed e2e test, 2026-09-12 on `ffroliva` at ZERO cost — every arm fails before submit.** The decisive layer is an **A/B run through the same instrument**, not an inspection: on `develop` the new test FAILS in 46.3 s and prints the bundle it got — `tag_counts.div = 0`, `title.length = 0`, `host_category = "other"`, a 4,254-byte screenshot — which is field-for-field the signature [#792](https://github.com/ffroliva/gflow-cli/issues/792) reported from a different account, a different OS and a different command; on the fix it PASSES in 37.8 s with `div` **25**, `title.length` **81**, `host_category` **`flow_app`**, `route` `/404` and a 38.4 KB screenshot. Both arms exit **23** on the same `.settings-trigger-button` drift at `flow.google.com/404?reason=project`, so the arms differ only in what was *captured*, never in what failed. **The reporter's own bundle contained the refutation of their diagnosis**: viewport 1280x720 is `client.py`'s client-owned page, not the 1920x1080 a stray transport tab would have — it was always the driven page, photographed one navigation too late, and the portrait correlation had no mechanism behind it. The existing quality benchmark could not have caught this: it captures deliberately on a **healthy** page, so it graded only bundles that were never at risk. **Recorded as NOT verified rather than omitted:** #796's `PROFILE_MARKER_MISSING` is offline-only because its live trigger is a cookie-store **decryption** failure, which does not occur on Windows/DPAPI — it is the macOS Keychain path of [#768](https://github.com/ffroliva/gflow-cli/issues/768), a **named external blocker**, and the issue stays open; a synthetic attempt to force it failed informatively, since a corrupt store raises `sqlite3.DatabaseError`, bypasses the marker gate and still prints "check network connectivity" — the same misdirection from a different trigger, untouched here. #795's remediation string is unit-asserted only, and the *other* half of #795 — `credits` being labs-only on migrated accounts — is **not fixed**.) · previous: [LIVE_VERIFICATION_v0.73.1](LIVE_VERIFICATION_v0.73.1.md) (**Google's `glue` consent bar covering the migrated composer, measured and then cured, 2026-09-11 on `ci-probe` for one image generation and no Veo credits.** The premise was nearly rejected: both prior sightings of that selector in this repo are labs.google, and the 2026-09-10 spike had read 159 DOM samples on this exact host and project and watched the click land 3/3 — it simply never looked for a cookie bar. Seventeen hours later the bar was up: `position: fixed`, `z-index: 1000`, spanning y 547-655 of a 655 px viewport, with `elementFromPoint` over the settings trigger AND over the image submit both returning `span#glue-cookie-notification-bar-1-label` in **0 of 5** rendered samples hit-testable. **The control arm is what makes it a cure rather than a coincidence**: the same probe re-run through the driver's own `_dismiss_cookie_bar` restored both controls to **4/4**, one attempt, no error. A full `gflow image t2i` then ran end to end on the merged code — `status: ok`, a 807,761-byte `ffd8ffe0` JPEG that Pillow reads as 1376x768 RGB, matching the requested 16:9 and the reply's own dimensions, with `migrated.editor_ready` at 2.0 s and **no** `cookie_bar_not_dismissed`. A side finding the control arm produced by accident: the bar's buttons are `__accept` then `__reject` in DOM order, so anything taking "the first button" accepts cookies for the operator — the shipped fix anchors on reject. **Three items recorded as NOT verified rather than omitted:** the cure against a live bar outside the browser, because this release's own control arm consumed the consent on the only profile that had it; **prevalence**, because the second profile never reached an editor (both arms redirected to `/about`) so it is one account blocked and one already-consented, and KNOWN_ISSUES says so rather than generalising from n=1; and the video path live, which shares the identical function on the identical control but spends Veo credits.) · previous: [LIVE_VERIFICATION_v0.73.0](LIVE_VERIFICATION_v0.73.0.md) (**four error paths that stopped lying about what went wrong, verified 2026-09-10 on `ci-probe` and `denon82` at $0 — no run below reaches a Veo submit.** The decisive arm is an **A/B**, not an inspection: the pre-fix run printed an `accounts.google.com` challenge URL together with the OAuth `state` and `client_id`, and the identical command after the fix gave the same exit 38 and the same landing named with **five secret matches down to zero** — reading the post-fix output alone would only have shown that *these* secrets were absent. A second arm **falsified a claim already written into PR #775's body**: it said the change fixed the RED canary, and the live run showed `denon82` had moved to `accounts.google.com` mid-run, a landing the classifier excluded **by design**, with a unit test encoding the wrong reason — the offline suite was green throughout and could not have caught it. #776's happy path is verified by a real `gflow image t2i` (exit 0, 367 135-byte JPEG, `image_settings_applied` and `prompt_typed` both present, so **three of the four converted click sites** clicked successfully through the new helper); its **failure** path is real Chromium driving a page we wrote, which proves the mechanism and explicitly **not** that Flow still produces that state. **Three items recorded as NOT verified rather than omitted:** the `/about` redirect stopped reproducing (**0/5**, reported as *unmeasured* rather than argued into a retry flag), the `/fx/api/auth/*` landing moved before the run reached it, and #764's *success* path — an external contribution whose error boundary this release verifies but whose auto-selection needs an account currently behind a Google password challenge. The fourth converted click site is the **video** submit, unrun because it spends Veo credits, named rather than implied.) · previous: [LIVE_VERIFICATION_v0.72.0](LIVE_VERIFICATION_v0.72.0.md) (**auto-closing `gflow auth login`, verified 2026-09-09 on a migrated account at $0 across six runs.** Four paths: auto-close fires (`probe=in_context` at `elapsed_s` **84.8**, reproduced 3x), a manual close still verifies from disk (exit 0, never exit 12), `--browser auto` selects and completes, and a window closed **mid-2FA** is noticed in **2 s** (exit 8) where it previously ran the full 600 s deadline with the session endpoint touched **zero** times. **Two runs were discarded rather than counted**, and that is the useful part: the first returned exit 0 at `elapsed_s: 0.2` because a throwaway profile had survived the previous session and nobody signed in — a cached session reading as a clean pass — and three attempts at the manual-close path all returned exit 0 while being the *auto-close* path in disguise, separable only by an **absent** `probe=in_context`. The manual path was obtained by widening the poll interval for one run so the competing branch could not fire; the 2FA path by killing the profile's own Chrome, because hand-timing lost every race on a host that completes passkey sign-in in ~15 s. **Recorded as NOT verified rather than omitted:** the migrated-host image slice (#692) was **re-run this cycle** — CLI `t2i` PASSED first-hand on a moved account, while the queued-MCP `i2i` twin failed with a typed non-retryable exit 27 whose **cause is unknown** — some dialog opened after the file was chosen and no `maseQ` left the page, on an account that has ALREADY consented, so the message's "most likely the one-time upload-terms dialog" does not fit; no incident bundle was written, so nothing names the dialog, and it is filed for a spike rather than guessed; the subprocess fallback is unit-tested only; and the OAuth-callback *mechanism* behind the poll fix is **inferred, not proven** — a host-only gate does not exclude NextAuth's callback, since it runs on the app's own origin, yet all four sign-ins passed under it, so #769 carries the spike that would settle it.) · previous: [LIVE_VERIFICATION_v0.71.1](LIVE_VERIFICATION_v0.71.1.md) (**two migrated-host error paths stopped blaming the wrong thing, 2026-09-08, $0 across three profiles.** The agent-mode recovery landed earlier in this same release (#749) and worked, but its first cut collapsed three outcomes into one message — chip clicked / chip found but click blocked / chip clicked and mode still on — so a modal eating the click sent users to toggle a chip that was never the problem, and genuine selector drift *after* the mode was left was filed under an account setting the driver had already changed. Verified by an e2e that drives the account INTO agent mode and carries its own neutered-selector control; run **twice**, because review fixes landed after the first run and it no longer covered the code. **The larger find:** an account's FIRST upload on this host is blocked by Flow's one-time *"Rights to use this image"* dialog, which renders *after* the file chooser hands the file over — so `_dismiss_dialog` never sees it and the driver spent 60 s waiting for a request the page had already declined to make, then advised re-encoding the image. Six runs on `ci-probe` close the chain: guard fires while the dialog is up → owner-authorised accept → uploads (`media_id 8914400f`) → fresh session uploads clean with `dialog: None`. The order was forced, because the dialog is one-off and accepting it destroys the failing state — so the guard was written and verified BEFORE anything was clicked, and its firing branch is now unrepeatable here. `maseQ` is confirmed **not** renamed (six uploads, three profiles), killing #719's top hypothesis. Also: Flow's queue listing is on **`Zzl0ze`**, not the `jwpduf`/`as29s` progress polls, and two `abra_r2v_8s` records sat at status 6 for ~20 h unseen by any CLI command (#741). Three documents are corrected rather than patched — a KNOWN_ISSUES entry that told #719's reader this dialog did not affect gflow-cli, and a v0.71.0 host label calling `ci-probe` *labs* when it is migrated, which helped a credit-based theory survive four runs. Recorded as NOT verified: #719's second failure shape — an upload request that leaves the page and is never answered, ~1 run in 4 — which is unfixed and keeps #719 open.) · previous: [LIVE_VERIFICATION_v0.71.0](LIVE_VERIFICATION_v0.71.0.md) (**`gflow character create --voice` verified end to end for the first time, 2026-09-07 on profile `ffroliva`.** Before this release a repo-wide grep for `--voice` across `tests/e2e/` matched **nothing** — every voice test was a unit test of the hardcoded `VOICES` constant and the one that looked live parsed a fixture, so a voice that silently failed to attach was invisible to the whole suite while the command exited 0. A live create + `character show` read-back settles a contradiction between two of our own documents: `sent='Charon' stored='Charon' identical=True`, so the Capitalized canonical form round-trips and `CHARACTER_RECON.md`'s "preset id is the lowercased name" does not describe today's wire. Both docs also now record that `personalityNotes` is **Agent-scoped** per Flow's own editor copy, not a control on the audio engine. **A claim that was in the code is overturned:** the `_unported_form` entity guard said the submit "never produces a reply" and that the backend refuses — in fact `MZZa6b` replies with a null payload and the generation is **accepted and queued** (Flow types it `abra_r2v_8s` and renders it); the failure is the *observer*, which waits out `SUBMIT_REPLY_BUDGET_S` (60 s, calibrated on 4.0–4.6 s replies against an idle queue) and exits 9 while the video is still rendering. The guard stays until the observer is fixed, because a timeout reported on a healthy generation is worse than an explicit refusal. Also verified: credit shortfall reports exit **37** with `_raise_if_out_of_credits` called from **both** give-up paths — and it is *short for the selected model*, not empty (the measured account held **50** and asked for `veo-quality`, which costs **100**); the "+ New project" CTA anchored structurally on `add` (Tier-1 matches **1** where every previous entry matched **0**, control 47 ligature nodes) after this same release first asserted the control did not exist and a $0 run disproved it in one click; and the incident-bundle DOM dump de-blinded — it queried `i.google-symbols` only, so **every bundle a migrated user sent carried an empty ligature list**, which is why #727 and #731 stayed invisible. One item recorded as NOT verified rather than omitted: whether a bound character's **voice reaches rendered audio** (#738) — attachment is proven, application is not, because no entity-bound generation has yet returned a file to measure. The blocker is no longer credits or account access but retrieval, and the measurement is pre-calibrated: plate-bound takes of one character gave **88 / 103 / 118 Hz** against a **4.3 Hz** engine noise floor, so an applied Algenib should sit near its sample's **163.3 Hz**.) · previous: [LIVE_VERIFICATION_v0.70.0](LIVE_VERIFICATION_v0.70.0.md) (**reference-to-video on the migrated `flow.google.com` host, verified 2026-09-06 on profile `denon82`.** Three r2v runs bound their references every time; the decisive one is semantic rather than structural — two hand-drawn reference images went in and the clip came back carrying the same marker strokes, face and paper texture, which is what separates "Flow bound the reference" from "Flow accepted and ignored it". A four-beat, two-character piece was then produced end to end and joined with the concat filter: 19.000s, 1280x576, `clip_qa` **ok**, A/V **+0.000s**, both actors recognisable across every cut from one face plate plus the canon repeated verbatim. Also verified as exit-code corrections on the real CLI: `-o <existing directory>` now exits **2 in 0.8s** instead of exit 1 after ~2 min **and a billed, orphaned clip**; `character create` on a moved account exits **36 immediately** instead of a bare `RuntimeError` exit 1 after a 20s wait. Four items recorded as NOT verified rather than omitted: #692's original failure could not be reproduced [the reporter's own re-run was on a build without the fix, so it shows the failure is intermittent, not that the fix works]; Flow CHARACTER entities were never exercised because `character create` cannot run on any account available here; `image`/`scene`/`movie`/`extend` all exit 36 on the migrated host and no unmoved account exists here; and the sign-in-interstitial fidelity question from #699 has no bundle evidence either way.) · previous: [LIVE_VERIFICATION_v0.68.0](LIVE_VERIFICATION_v0.68.0.md) (`gflow update` self-upgrading a real `uv tool` and a real `pipx` install from their own running `gflow.exe` to the PyPI release, Windows 11, zero credits — see its own row below) · previous: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (the migrated `flow.google.com` driver — see its own row below) · previous: [LIVE_VERIFICATION_v0.64.0](LIVE_VERIFICATION_v0.64.0.md) (**#626 `--model omni-flash --end-frame` — first+last interpolation on Omni 1.1 Flash, verified 2026-09-02.** The guard this release removes was evidence-gated, so it was retired on evidence: a route-aborted submit capture on **two distinct Google accounts** (`ffroliva`, `denon82`) fired `video:batchAsyncGenerateVideoStartAndEndImage` with `startImage` AND `endImage` non-null at **zero credits**, ruling out a single-account artifact. The decisive layer is semantic, not structural: the paid 4s generation's **last frame IS the supplied end image** and its first frame is the start image — two visibly different subjects — which is the only check that distinguishes "Flow bound the end frame" from "Flow accepted and ignored it", and which layers 1–4 would pass either way. Render: 4.01s / 720×1280 / h264+aac / 2.4 MB, `MEDIA_GENERATION_STATUS_SUCCESSFUL`. The static capability table is **deleted**, not corrected — it went stale silently once and would again; a post-submit route check (`_assert_i2v_route`) now fails a run whose end frame Flow dropped back to the `StartImage` route, catching a rollback on any account without anyone re-reading a support page. One item is recorded as NOT verified rather than omitted: `--duration 10` + end frame is **submit-verified only** (`duration_set seconds=10` on the correct route with both images bound), because the status poll returned HTTP 401 mid-run and a retry 401'd at `project.create` before submitting — [#561](https://github.com/ffroliva/gflow-cli/issues/561), pre-existing, so verification was stopped rather than spending further credits on an environmental fault.) · previous: [LIVE_VERIFICATION_v0.63.0](LIVE_VERIFICATION_v0.63.0.md) (**`gflow video extend` — continuing a clip past Flow's 8s ceiling, verified 2026-09-01 on profile `ffroliva`, 20 Veo credits.** The decisive observation is that segment 2's `source_media_id` **is** segment 1's `media_id` (`0c9364f3…` seeded from `b9458021…`, then `648f9291…` seeded from `0c9364f3…`) — tail-only chaining, which no mock can establish; had it re-seeded from the source, the output would have been two divergent continuations of the same moment instead of one continuous shot. `extend_model_resolved` logged `candidate_count=99` against `SERVICE_TIER_INTERMEDIATE`, proving the key came from the live capability listing rather than a constant, and plan cost matched actual spend (`20 credits total, balance 875` → `Extended — 2/2 segment(s), 20 credits`). Render: 23.02s / 1280×720 / 24fps / h264+aac. **The run found a defect the offline suite is structurally incapable of seeing:** an extend segment carries **7.000000s** of content, not the 8 Flow advertises and bills, so server-side concat pads every internal seam with a frozen frame and digital silence (15s at −75.1 dB against −29 neighbours, reproduced on a second independent render) — filed in KNOWN_ISSUES with the three questions that must be answered before any clamp, and the reason `--extend N` on t2v/i2v was deliberately NOT shipped. Seven items are recorded as NOT verified rather than omitted: portrait `9:16`, `--aspect` against a mismatched source, chains longer than 2 segments, `--resume-from` against a live partial scene, the insufficient-credits refusal, a live Ctrl+C, and `OperationKind.EXTEND` rows.) · previous: [LIVE_VERIFICATION_v0.62.1](LIVE_VERIFICATION_v0.62.1.md) (**#604 `--model omni-flash` selects again after Flow's `Omni Flash` → `Omni 1.1 Flash` rename, verified 2026-08-30 on profile `ffroliva` at ZERO Veo credits.** The production `_select_video_model` was driven against the real picker: the shipped selector resolves verbatim — `model_selected model=omni_flash via="[role='menuitem']:has-text('Omni'):has-text('Flash'):not(:has-text('[Lower Priority]'))"` — and all six cases came back as expected: the four offered tiers SELECT, a tier Flow does not offer REFUSES, and a deliberately ambiguous selector REFUSES rather than resolving `.first`. Selection happens before submit, so the whole matrix is free. The transport's own refusal diagnostic read the live menu back as `Omni 1.1 Flash / Veo 3.1 - Lite / Fast / Quality`, independently corroborating the fixture. Four items are recorded as NOT verified rather than omitted: the rename *direction* [the `Omni Flash` baseline is a different account, locale and date], an actual `Omni ... [Lower Priority]` entry [Flow has never offered one], a full credit-spending generation on omni-flash, and #539's absence question, which stays open.) · previous: [LIVE_VERIFICATION_v0.62.0](LIVE_VERIFICATION_v0.62.0.md) (**#595 `auto` ≡ `classic` for images, verified 2026-08-28 on profile `ci-probe` — an account Flow had moved to the agentic cohort the day before — at ZERO Veo credits.** With no flags and no env vars the run logged `ui_driver.ui_mode.attempt_exit_agent` → `ui_driver.bound mode=classic ui_mode=classic` and generated a real 768x1376 JPEG (exit 0); the day before, the identical command on the same account bound `auto`→`agentic` and failed. The same log independently closed **#183**: `mode_switch_trigger` and `image_mode_tab`, the selectors it reported as unfindable, both matched. #591 was proven against the real 500-row catalog — **0** occurrences of the string `"None"`, 31 proper JSON `null`s, over a catalog holding 119 NULL-bearing rows. #592 shows exactly one `client.account_locale_cached` per command. Three items are recorded as NOT verified rather than omitted: the exit-28 abort on a *pinned* agentic account, the #597 batch inter-prompt guard, and any fresh announcement modal — the last two because all three accounts have already acked the current changelog, so no modal can be raised until Google ships the next one.) · previous: [LIVE_VERIFICATION_v0.61.0](LIVE_VERIFICATION_v0.61.0.md) (**#539 video-model refusal + #586 image-model refusal and server-side attribution, verified 2026-08-26/27 on profile `denon82`, ONE Veo generation total** — the video fix was proven by a **zero-credit A/B against the stashed pre-fix source running on live Flow**: the old code returned SELECTED for `veo-lite-lp`, a model Flow does not offer to this account, and for a deliberately ambiguous selector matching 3 entries; the new code refuses both with exit 18 naming what Flow offered. Model selection happens before submit, so refusals cost nothing and the A/B was free. The happy path still generates: `--model omni-flash` → exit 0, a real 2.2 MB `ftypisom` mp4, catalog recording `omni_flash`. Two items are recorded as NOT verified rather than omitted: three of #584's four navigation-settle sites were never exercised [no bearer refresh occurred in these runs], and #582's canary self-re-exec has its first real exercise tonight. Also falsified: #539's recorded note that the video picker uses a different trigger — the two constants are byte-identical strings, and the repeated empty menu captures were the capture's own fault.) · previous: [LIVE_VERIFICATION_v0.60.0](LIVE_VERIFICATION_v0.60.0.md)
173
173
  **"Was the playwright upper bound raised, and on what evidence?"** → [LIVE_VERIFICATION_playwright_1.61](LIVE_VERIFICATION_playwright_1.61.md) (**`>=1.59.0,<1.60.0` → `>=1.61.0,<1.62.0` verified 2026-08-05, 1 Imagen + 1 Veo credit** — the 2026-08-03 regression that motivated the bound does NOT reproduce on 1.61.0: a live `i2v` drove the full chain with `image_uploaded status=200` → `frame_attached` → `generate_captured status=200` with `startImage` parsed, where **1.62.0 hung silently at exactly that upload step**; live `i2i` local-ref attach passed outright [96.7s]. **1.62.0 stays excluded** — never root-caused. Also found, A/B-proven pre-existing on BOTH 1.59.0 and 1.61.0: Flow dropped the duration-tab UI, so **`--duration` is currently broken for i2v** — `UiSelectorDriftError` fires correctly [refusing rather than silently accepting Flow's default, #288] but the selector needs re-deriving; that is why the i2v proof was driven via the CLI without `--duration`, and Flow's own server-side `PUBLIC_ERROR_VIDEO_GENERATION_TIMED_OUT` means no finished mp4 is claimed).
174
174
  **"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
175
175
  **"What was live-verified for v0.66.1?"** → [LIVE_VERIFICATION_v0.66.1](LIVE_VERIFICATION_v0.66.1.md) — **the two migrated-origin fixes, verified 2026-09-03 on profile `ffroliva` at ZERO credits, on BOTH sides of what was then read as a flapping rollout** (superseded 2026-09-04: the handoff is a one-way per-account flag and exit 36 is non-retryable since). On a real `flow.google.com` load `get_ui_driver` raised `FlowHostMigratedError` in **0 ms** (was ~36 s: ~8 s detect window + ~24 s crop cascade + 4 s URL settle), exit 36, `retryable: true` (then; `false` since 2026-09-04), `ui_driver.migrated_host_bail` logged; `await_url_settled` returned `null` in **0 ms** (measured 4018 ms before); and the locale was recovered as `en` from `html lang=en-GB` where the URL gave `null`. The no-regression half is the stronger evidence: minutes later the same command landed on the OLD host and completed **exit 0** with a real 768x1376 JPEG in 42.2 s, proving the host guard is scoped and does not short-circuit the working path. Three items recorded as NOT verified rather than omitted: driving the migrated frontend (still impossible, #639 stays open), the pt-BR recovery live (measured `html lang=pt` on `denon82` but exercised live only on `en-GB`), and the `en-GB`→`en` region reduction against a locale where region is load-bearing (`zh-Hans`/`zh-Hant`) — only two locales observed.