gflow-cli 0.75.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 (1137) hide show
  1. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/dependabot.yml +20 -0
  3. gflow_cli-0.77.0/.github/workflows/mcp-registry.yml +132 -0
  4. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/release.yml +42 -5
  5. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/AGENTS.md +4 -4
  6. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/CHANGELOG.md +188 -1
  7. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/PKG-INFO +3 -1
  8. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/README.md +2 -0
  9. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/RELEASE.md +34 -0
  10. gflow_cli-0.77.0/docker/Dockerfile +53 -0
  11. gflow_cli-0.77.0/docker/Dockerfile.test +17 -0
  12. gflow_cli-0.77.0/docker/README.md +215 -0
  13. gflow_cli-0.77.0/docker/docker-compose.yml +70 -0
  14. gflow_cli-0.77.0/docker/dockerignore.example +10 -0
  15. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/AGENT_UI_E2E.md +2 -2
  16. gflow_cli-0.77.0/docs/CONTAINER.md +142 -0
  17. {gflow_cli-0.75.0/website → gflow_cli-0.77.0}/docs/DEBUGGING.md +31 -12
  18. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/DISTRIBUTION.md +114 -23
  19. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/INDEX.md +5 -2
  20. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_data_layer.md +2 -2
  21. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_image_batch.md +2 -2
  22. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.52.0.md +3 -3
  23. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.54.0.md +2 -2
  24. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.75.0.md +30 -11
  25. gflow_cli-0.77.0/docs/LIVE_VERIFICATION_v0.76.0.md +129 -0
  26. gflow_cli-0.77.0/docs/LIVE_VERIFICATION_v0.77.0.md +187 -0
  27. gflow_cli-0.77.0/docs/MARKETPLACES.md +135 -0
  28. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/MCP.md +4 -2
  29. gflow_cli-0.77.0/docs/PROJECT_STATUS.md +165 -0
  30. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/USAGE.md +1 -0
  31. {gflow_cli-0.75.0/website → gflow_cli-0.77.0}/docs/USER_GUIDE.md +8 -1
  32. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +46 -0
  33. gflow_cli-0.77.0/docs/superpowers/spikes/2026-09-15-container-transport-viability.md +129 -0
  34. gflow_cli-0.77.0/docs/superpowers/spikes/2026-09-15-unentitled-account-signal.md +158 -0
  35. gflow_cli-0.77.0/docs/superpowers/spikes/2026-09-16-networkidle-costs-3x-it-does-not-hang.md +132 -0
  36. gflow_cli-0.77.0/glama.json +17 -0
  37. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/.claude-plugin/plugin.json +1 -1
  38. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/pyproject.toml +1 -1
  39. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_doc_links.py +11 -1
  40. gflow_cli-0.77.0/scripts/ci/check_fork_pr_ci.py +110 -0
  41. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_repo_hygiene.py +11 -4
  42. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/generate_website_docs.py +4 -1
  43. gflow_cli-0.77.0/scripts/dev/spike_flow_unavailable_signal.py +208 -0
  44. gflow_cli-0.77.0/scripts/dev/spike_networkidle_bootstrap_cost.py +186 -0
  45. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/server.json +2 -2
  46. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/pr-council-review/SKILL.md +54 -1
  47. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/release/SKILL.md +33 -3
  48. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/__init__.py +1 -1
  49. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/_common.py +78 -7
  50. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/migrated_composer.py +1 -1
  51. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/ui_automation.py +10 -2
  52. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/ui_automation_video.py +7 -0
  53. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/verification.py +121 -0
  54. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/errors.py +38 -0
  55. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/daemon.py +4 -1
  56. gflow_cli-0.77.0/tests/api/transports/test_flow_access_unavailable.py +242 -0
  57. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_navigation_settled.py +13 -0
  58. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/test_verification.py +158 -0
  59. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_landing_state_diagnosis_bdd.py +122 -1
  60. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/landing_state_diagnosis.feature +28 -0
  61. gflow_cli-0.77.0/tests/mcp/test_payload_key_round_trip.py +198 -0
  62. gflow_cli-0.77.0/tests/scripts/test_check_fork_pr_ci.py +94 -0
  63. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_workflow_hardening.py +132 -0
  64. gflow_cli-0.77.0/tests/test_dockerfile_version_pin.py +86 -0
  65. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_errors_classification.py +6 -6
  66. gflow_cli-0.77.0/tests/test_glama_build_spec.py +142 -0
  67. gflow_cli-0.77.0/tests/test_release_version_sites.py +113 -0
  68. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_daemon.py +78 -0
  69. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/uv.lock +4 -4
  70. {gflow_cli-0.75.0 → gflow_cli-0.77.0/website}/docs/DEBUGGING.md +31 -12
  71. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/MCP.md +4 -2
  72. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/USAGE.md +1 -0
  73. {gflow_cli-0.75.0 → gflow_cli-0.77.0/website}/docs/USER_GUIDE.md +8 -1
  74. gflow_cli-0.75.0/docs/PROJECT_STATUS.md +0 -1265
  75. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.agents/plugins/marketplace.json +0 -0
  76. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/README.md +0 -0
  77. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/active.md +0 -0
  78. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/branch-review.md +0 -0
  79. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/changelog.md +0 -0
  80. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/check.md +0 -0
  81. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/doc-review.md +0 -0
  82. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  83. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  84. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/known-issues.md +0 -0
  85. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/live-verify.md +0 -0
  86. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/llm-council.md +0 -0
  87. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/next.md +0 -0
  88. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/plan.md +0 -0
  89. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  90. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/predict.md +0 -0
  91. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/release.md +0 -0
  92. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/scenario.md +0 -0
  93. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/sonar.md +0 -0
  94. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/spike.md +0 -0
  95. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude/commands/gflow/status.md +0 -0
  96. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.claude-plugin/marketplace.json +0 -0
  97. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.env.template +0 -0
  98. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.gitattributes +0 -0
  99. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/CODEOWNERS +0 -0
  100. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/FUNDING.yml +0 -0
  101. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  102. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/copilot-instructions.md +0 -0
  103. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/ci.yml +0 -0
  104. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/deps-watch.yml +0 -0
  105. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/external-pr-triage.yml +0 -0
  106. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/governance-advisory.yml +0 -0
  107. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/governance-benchmark.yml +0 -0
  108. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/labels.yml +0 -0
  109. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/main-base-guard.yml +0 -0
  110. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/pages.yml +0 -0
  111. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/scorecard.yml +0 -0
  112. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/selector-probe.yml +0 -0
  113. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/sponsors.yml +0 -0
  114. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.github/workflows/star-history-watch.yml +0 -0
  115. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.gitignore +0 -0
  116. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.gitleaks.toml +0 -0
  117. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.pre-commit-config.yaml +0 -0
  118. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/.secrets.baseline +0 -0
  119. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/CLAUDE.md +0 -0
  120. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/CONFIGURATION.md +0 -0
  121. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/CONTRIBUTING.md +0 -0
  122. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/DISCLAIMER.md +0 -0
  123. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/KNOWN_ISSUES.md +0 -0
  124. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/LICENSE +0 -0
  125. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/PLAN.md +0 -0
  126. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/ROADMAP.md +0 -0
  127. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/conftest.py +0 -0
  128. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/deploy/logrotate-pr-triage +0 -0
  129. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docker-compose.yml +0 -0
  130. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/ACCOUNT_SAFETY.md +0 -0
  131. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/AGENT_GUIDE.md +0 -0
  132. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/AGENT_UI_RECON.md +0 -0
  133. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/ARCHITECTURE.md +0 -0
  134. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  135. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/AUTHENTICATION.md +0 -0
  136. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/CHARACTER.md +0 -0
  137. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/CHARACTER_RECON.md +0 -0
  138. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/CONFIGURATION.md +0 -0
  139. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/DATA_LAYER.md +0 -0
  140. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/DEMOS.md +0 -0
  141. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/DEVELOPMENT.md +0 -0
  142. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/E2E_TESTING.md +0 -0
  143. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/EXTERNAL_STORAGE.md +0 -0
  144. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/GITHUB.md +0 -0
  145. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  146. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  147. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/INSTRUCTIONS.md +0 -0
  148. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  149. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
  150. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  151. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  152. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  153. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  154. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  155. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  156. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  157. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  158. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  159. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  160. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  161. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  162. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  163. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  164. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  165. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  166. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  167. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  168. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  169. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  170. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  171. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  172. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  173. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  174. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  175. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  176. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  177. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  178. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  179. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  180. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  181. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  182. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  183. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  184. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  185. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  186. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  187. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  188. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  189. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  190. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  191. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  192. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  193. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  194. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  195. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  196. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  197. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  198. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  199. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  200. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  201. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  202. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
  203. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
  204. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
  205. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
  206. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
  207. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
  208. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
  209. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
  210. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
  211. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
  212. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
  213. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
  214. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
  215. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
  216. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  217. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
  218. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.71.0.md +0 -0
  219. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.71.1.md +0 -0
  220. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.72.0.md +0 -0
  221. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.0.md +0 -0
  222. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.1.md +0 -0
  223. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.73.2.md +0 -0
  224. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.74.0.md +0 -0
  225. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  226. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  227. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  228. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  229. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/MEDIA_LIBRARY.md +0 -0
  230. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/MOVIE.md +0 -0
  231. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/PROMPT_EXPANSION.md +0 -0
  232. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  233. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/SECURITY.md +0 -0
  234. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/SPONSORS.md +0 -0
  235. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/TOOLS.md +0 -0
  236. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/assets/demo-split-pf.gif +0 -0
  237. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/assets/example-run.gif +0 -0
  238. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/assets/examples.webp +0 -0
  239. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/medium_tutorial.md +0 -0
  240. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/schemas/movie-handoff.schema.json +0 -0
  241. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/sonar-cleanup-tracker.md +0 -0
  242. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/README.md +0 -0
  243. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
  244. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
  245. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
  246. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
  247. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
  248. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
  249. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
  250. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
  251. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
  252. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
  253. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
  254. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
  255. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
  256. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -0
  257. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
  258. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
  259. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
  260. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
  261. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ligature-carrier-differs-by-host.md +0 -0
  262. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
  263. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
  264. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +0 -0
  265. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
  266. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
  267. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
  268. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
  269. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
  270. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
  271. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
  272. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
  273. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
  274. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
  275. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
  276. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-signing.md +0 -0
  277. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
  278. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
  279. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
  280. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
  281. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
  282. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
  283. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
  284. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
  285. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
  286. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
  287. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
  288. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
  289. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
  290. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
  291. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  292. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  293. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  294. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  295. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  296. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  297. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  298. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  299. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  300. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  301. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  302. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  303. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  304. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  305. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  306. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  307. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  308. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  309. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  310. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  311. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  312. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  313. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  314. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  315. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  316. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  317. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  318. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  319. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  320. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  321. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  322. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  323. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  324. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  325. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  326. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  327. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  328. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  329. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  330. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  331. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  332. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
  333. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
  334. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
  335. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
  336. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/plans/2026-09-14-community-feedback-uplift/PLAN.md +0 -0
  337. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  338. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  339. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  340. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  341. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  342. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  343. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
  344. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
  345. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
  346. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
  347. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  348. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  349. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  350. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  351. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  352. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  353. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
  354. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
  355. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
  356. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
  357. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
  358. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
  359. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
  360. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
  361. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +0 -0
  362. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +0 -0
  363. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +0 -0
  364. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +0 -0
  365. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +0 -0
  366. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md +0 -0
  367. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-composer-agent-mode-hides-settings.md +0 -0
  368. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md +0 -0
  369. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-queue-is-readable-on-zzl0ze.md +0 -0
  370. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-08-migrated-upload-fails-two-ways.md +0 -0
  371. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-10-about-redirect-stability.md +0 -0
  372. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-10-migrated-click-blocked.md +0 -0
  373. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-decided-client-side.md +0 -0
  374. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-about-redirect-is-stable-for-an-account.md +0 -0
  375. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-migrated-cookie-bar-blocks-the-composer.md +0 -0
  376. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-11-nano2-lite-capability.md +0 -0
  377. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-13-frames-picker-confirm.md +0 -0
  378. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-credits-on-migrated-host.md +0 -0
  379. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-generation-wire-no-push-channel.md +0 -0
  380. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-two-domain-protocol-survey.md +0 -0
  381. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/docs/superpowers/spikes/2026-09-14-video-poll-is-a-fixed-client-timer.md +0 -0
  382. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/README.md +0 -0
  383. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/batch_from_config.py +0 -0
  384. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/multi_prompt_t2i.py +0 -0
  385. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/sample_config.json +0 -0
  386. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/sample_prompts.txt +0 -0
  387. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/single_image_t2i.py +0 -0
  388. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/examples/workflow_chain.py +0 -0
  389. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/index.html +0 -0
  390. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/llms.txt +0 -0
  391. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/mempalace.yaml +0 -0
  392. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/README.md +0 -0
  393. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/.mcp.json +0 -0
  394. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/gflow-cli/SKILL.md +0 -0
  395. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/SKILL.md +0 -0
  396. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/clip_qa.py +0 -0
  397. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/composition.md +0 -0
  398. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/consistency.md +0 -0
  399. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/failure-modes.md +0 -0
  400. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/plugins/gflow/skills/video-production/tasks.json +0 -0
  401. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/README.md +0 -0
  402. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/01_upload_image.json +0 -0
  403. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  404. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  405. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/04_archive_workflow.json +0 -0
  406. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/05_createProject.json +0 -0
  407. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/06_batchGenerateImages.json +0 -0
  408. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  409. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  410. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  411. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  412. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  413. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/12_create_scene.json +0 -0
  414. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  415. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/14_get_scene_workflows.json +0 -0
  416. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  417. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/canary/register_task.ps1 +0 -0
  418. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/canary/run_canary.py +0 -0
  419. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_council_memory.py +0 -0
  420. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_materiality.py +0 -0
  421. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_release_artifacts.py +0 -0
  422. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_test_count.py +0 -0
  423. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/check_website_docs_pii.py +0 -0
  424. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/generate_plugin_skills.py +0 -0
  425. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/ci/update_sponsors.py +0 -0
  426. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/debug_editor.py +0 -0
  427. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/debug_gen_settings.py +0 -0
  428. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/debug_settings.py +0 -0
  429. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/_recording_client.py +0 -0
  430. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/_spike_common.py +0 -0
  431. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/__init__.py +0 -0
  432. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/bench.py +0 -0
  433. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/domain.py +0 -0
  434. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/judge.py +0 -0
  435. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/acceptance/settings.py +0 -0
  436. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/active_plan.py +0 -0
  437. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  438. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  439. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  440. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  441. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  442. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  443. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  444. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_locale_invariants.py +0 -0
  445. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  446. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
  447. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
  448. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
  449. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
  450. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +0 -0
  451. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
  452. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
  453. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_project_listing.py +0 -0
  454. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  455. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  456. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  457. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  458. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/character_create_spike.py +0 -0
  459. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/character_create_spike_v2.py +0 -0
  460. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/dump_character_selectors.js +0 -0
  461. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/README.md +0 -0
  462. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
  463. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
  464. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
  465. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
  466. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
  467. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
  468. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
  469. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
  470. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
  471. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
  472. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
  473. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/incident_bundle_quality.py +0 -0
  474. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  475. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
  476. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/live_verify_video_model_select.py +0 -0
  477. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/make_project.py +0 -0
  478. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/materiality_backtest.py +0 -0
  479. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/measure_html_lang_settle.py +0 -0
  480. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/measure_locale_probe.py +0 -0
  481. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
  482. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/patch_character.py +0 -0
  483. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/README.md +0 -0
  484. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/harness.py +0 -0
  485. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/skillopt/tasks.json +0 -0
  486. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/sonar-local-scan.sh +0 -0
  487. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  488. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_about_redirect_cause.py +0 -0
  489. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_about_redirect_stability.py +0 -0
  490. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_cdp_har_without_node.py +0 -0
  491. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_changelog_capture.py +0 -0
  492. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  493. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  494. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_character_editor_ready_gate.py +0 -0
  495. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  496. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_credits_migrated_surface.py +0 -0
  497. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_entity_submit_rpcs.py +0 -0
  498. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_model_recon.py +0 -0
  499. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
  500. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_route_capture.py +0 -0
  501. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
  502. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
  503. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_format_prompt_effect.py +0 -0
  504. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_frames_picker_confirm.py +0 -0
  505. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_generation_wire_survey.py +0 -0
  506. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_host_lane.py +0 -0
  507. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_model_attribution.py +0 -0
  508. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  509. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  510. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  511. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  512. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_incident_live.py +0 -0
  513. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  514. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  515. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  516. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  517. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  518. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_ligature_carrier_sweep.py +0 -0
  519. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_locale_poison.py +0 -0
  520. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
  521. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
  522. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
  523. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
  524. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
  525. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
  526. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_click_blocked.py +0 -0
  527. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_composer_arms.py +0 -0
  528. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_composer_mode_axis.py +0 -0
  529. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_cookie_bar.py +0 -0
  530. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
  531. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
  532. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_entity_submit.py +0 -0
  533. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
  534. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
  535. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_image_capability.py +0 -0
  536. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_image_submit.py +0 -0
  537. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_picker_option_kind.py +0 -0
  538. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_queue_read.py +0 -0
  539. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
  540. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_submit_anchor.py +0 -0
  541. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
  542. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_upload_wire.py +0 -0
  543. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
  544. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
  545. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  546. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  547. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_model_inventory.py +0 -0
  548. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  549. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  550. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  551. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  552. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  553. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_nano2_lite_capability.py +0 -0
  554. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  555. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_patch_entity.py +0 -0
  556. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_patchright.py +0 -0
  557. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_playwright_chrome_login.py +0 -0
  558. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_project_media_status.py +0 -0
  559. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
  560. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_two_domain_protocol_survey.py +0 -0
  561. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/spike_video_tab_dom.py +0 -0
  562. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
  563. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/verify_language_agnostic.py +0 -0
  564. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
  565. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/dev/verify_model_attribution.py +0 -0
  566. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/README.md +0 -0
  567. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/capture_flow_traffic.py +0 -0
  568. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
  569. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/memory_profile.py +0 -0
  570. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/recaptcha_mint.py +0 -0
  571. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  572. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  573. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  574. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/probe/run_probe.py +0 -0
  575. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/probe/spike_auth_matrix.py +0 -0
  576. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/record_demo.ps1 +0 -0
  577. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/smoke_image.py +0 -0
  578. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/smoke_video_editor.py +0 -0
  579. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/smoke_worker_style.py +0 -0
  580. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/spike_waf_camoufox.py +0 -0
  581. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/scripts/verify_chrome_auth_viability.py +0 -0
  582. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/README.md +0 -0
  583. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/changelog/SKILL.md +0 -0
  584. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/check/SKILL.md +0 -0
  585. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/doc-review/SKILL.md +0 -0
  586. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/gflow-cli/SKILL.md +0 -0
  587. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/issue-assessment/SKILL.md +0 -0
  588. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/issue-resolve/SKILL.md +0 -0
  589. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/known-issues/SKILL.md +0 -0
  590. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/live-verify/SKILL.md +0 -0
  591. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/llm-council/SKILL.md +0 -0
  592. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/plan/SKILL.md +0 -0
  593. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/predict/SKILL.md +0 -0
  594. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/scenario/SKILL.md +0 -0
  595. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/sonar/SKILL.md +0 -0
  596. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/spike/SKILL.md +0 -0
  597. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/status/SKILL.md +0 -0
  598. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/SKILL.md +0 -0
  599. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/clip_qa.py +0 -0
  600. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/composition.md +0 -0
  601. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/consistency.md +0 -0
  602. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/failure-modes.md +0 -0
  603. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/skills/video-production/tasks.json +0 -0
  604. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/sonar-project.properties +0 -0
  605. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/__main__.py +0 -0
  606. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/_cli_helpers.py +0 -0
  607. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/__init__.py +0 -0
  608. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_engine.py +0 -0
  609. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_retry.py +0 -0
  610. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  611. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/character.py +0 -0
  612. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/client.py +0 -0
  613. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/credits.py +0 -0
  614. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/dto.py +0 -0
  615. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/extend_chain.py +0 -0
  616. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/image.py +0 -0
  617. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/image_upscale.py +0 -0
  618. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/recaptcha.py +0 -0
  619. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/routes.py +0 -0
  620. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/scene.py +0 -0
  621. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  622. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  623. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/base.py +0 -0
  624. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/batchexecute.py +0 -0
  625. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  626. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  627. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  628. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  629. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  630. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  631. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  632. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  633. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  634. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  635. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/video.py +0 -0
  636. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/api/video_extend.py +0 -0
  637. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/__init__.py +0 -0
  638. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/base.py +0 -0
  639. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/cookies.py +0 -0
  640. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/factory.py +0 -0
  641. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  642. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  643. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/auth/strategies.py +0 -0
  644. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/browser_manager.py +0 -0
  645. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/chain.py +0 -0
  646. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/chain_manifest.py +0 -0
  647. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli.py +0 -0
  648. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_character.py +0 -0
  649. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_credits.py +0 -0
  650. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_data.py +0 -0
  651. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_doctor.py +0 -0
  652. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_image.py +0 -0
  653. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_instructions.py +0 -0
  654. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_models.py +0 -0
  655. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_movie.py +0 -0
  656. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_project.py +0 -0
  657. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_run.py +0 -0
  658. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_scene.py +0 -0
  659. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_tools.py +0 -0
  660. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_update.py +0 -0
  661. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/cli_video.py +0 -0
  662. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/composition.py +0 -0
  663. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/config.py +0 -0
  664. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/__init__.py +0 -0
  665. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/chain_repo.py +0 -0
  666. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  667. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  668. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  669. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  670. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  671. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  672. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  673. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  674. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  675. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  676. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/models.py +0 -0
  677. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/queries.py +0 -0
  678. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/recorder.py +0 -0
  679. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/redaction.py +0 -0
  680. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/repository.py +0 -0
  681. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/data/store.py +0 -0
  682. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/diagnostics.py +0 -0
  683. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/exceptions.py +0 -0
  684. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/file_integrity.py +0 -0
  685. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
  686. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
  687. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/model.py +0 -0
  688. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
  689. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/image_batch.py +0 -0
  690. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/json_output.py +0 -0
  691. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/__init__.py +0 -0
  692. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/prompts.py +0 -0
  693. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/resources.py +0 -0
  694. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/server.py +0 -0
  695. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/setup.py +0 -0
  696. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  697. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/mcp/tools.py +0 -0
  698. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/media.py +0 -0
  699. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/movie_manifest.py +0 -0
  700. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/observability.py +0 -0
  701. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/paths.py +0 -0
  702. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/profile_lease.py +0 -0
  703. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/profile_store.py +0 -0
  704. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/redaction.py +0 -0
  705. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/__init__.py +0 -0
  706. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/catalog_sync.py +0 -0
  707. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/character_create.py +0 -0
  708. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/credits.py +0 -0
  709. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/doctor.py +0 -0
  710. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/services/mentions.py +0 -0
  711. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/storage.py +0 -0
  712. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/__init__.py +0 -0
  713. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/banned.py +0 -0
  714. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  715. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  716. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  717. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  718. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/expander.py +0 -0
  719. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/invocation.py +0 -0
  720. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/loader.py +0 -0
  721. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/registry.py +0 -0
  722. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/runtime.py +0 -0
  723. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/tools/spec.py +0 -0
  724. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/ui/app.py +0 -0
  725. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/ui/server.py +0 -0
  726. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/update_check.py +0 -0
  727. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/winsec.py +0 -0
  728. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/codec.py +0 -0
  729. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/src/gflow_cli/worker/queue.py +0 -0
  730. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tasks/lessons.md +0 -0
  731. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/test_assets/sample_batch.json +0 -0
  732. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/test_assets/sample_batch.tsv +0 -0
  733. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/test_assets/sample_batch_invalid.tsv +0 -0
  734. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/__init__.py +0 -0
  735. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/__init__.py +0 -0
  736. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/fixtures/character_gen_response.json +0 -0
  737. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  738. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
  739. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  740. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  741. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_bearer_redaction.py +0 -0
  742. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_bootstrap_chooser.py +0 -0
  743. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_character.py +0 -0
  744. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_character_readback_fallback.py +0 -0
  745. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client.py +0 -0
  746. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_character.py +0 -0
  747. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_delete_characters.py +0 -0
  748. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_errors.py +0 -0
  749. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_extend.py +0 -0
  750. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_generate_character.py +0 -0
  751. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_image.py +0 -0
  752. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_incidents.py +0 -0
  753. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_launch_kwargs.py +0 -0
  754. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_locale_cache.py +0 -0
  755. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_migrated_mint.py +0 -0
  756. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_patch_entity.py +0 -0
  757. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_scene.py +0 -0
  758. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_client_upscale.py +0 -0
  759. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_concurrency.py +0 -0
  760. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_credits.py +0 -0
  761. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_credits_http.py +0 -0
  762. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_dto.py +0 -0
  763. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_engine.py +0 -0
  764. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_extend_chain.py +0 -0
  765. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_image.py +0 -0
  766. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_image_dto.py +0 -0
  767. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_image_upscale.py +0 -0
  768. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  769. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_recaptcha.py +0 -0
  770. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_retry.py +0 -0
  771. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_routes.py +0 -0
  772. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_routes_character.py +0 -0
  773. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_routes_locale.py +0 -0
  774. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_routes_scene.py +0 -0
  775. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_sapisidhash_helper.py +0 -0
  776. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_scene_models.py +0 -0
  777. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_video.py +0 -0
  778. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_video_extend.py +0 -0
  779. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_video_request.py +0 -0
  780. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/test_video_status_poll.py +0 -0
  781. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/__init__.py +0 -0
  782. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/conftest.py +0 -0
  783. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/__init__.py +0 -0
  784. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  785. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_classic.py +0 -0
  786. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_factory.py +0 -0
  787. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  788. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_agent_only_composer.py +0 -0
  789. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  790. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_base.py +0 -0
  791. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_batchexecute.py +0 -0
  792. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_bearer.py +0 -0
  793. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_character_model_picker.py +0 -0
  794. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_click_attribution.py +0 -0
  795. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_common.py +0 -0
  796. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  797. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_factory.py +0 -0
  798. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_fingerprint.py +0 -0
  799. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ligature_carrier.py +0 -0
  800. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_locale_navigation.py +0 -0
  801. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_composer.py +0 -0
  802. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_dispatch.py +0 -0
  803. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
  804. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_images.py +0 -0
  805. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_r2v.py +0 -0
  806. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_migrated_route.py +0 -0
  807. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_mode_control.py +0 -0
  808. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_model_selection_loud.py +0 -0
  809. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_new_project_cta_migrated.py +0 -0
  810. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_overlay_precondition.py +0 -0
  811. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_policy_400.py +0 -0
  812. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_sapisidhash.py +0 -0
  813. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  814. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_transport_timeout.py +0 -0
  815. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation.py +0 -0
  816. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  817. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  818. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  819. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  820. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
  821. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/strategies/test_factory.py +0 -0
  822. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/strategies/test_strategies.py +0 -0
  823. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/test_account_autoselect.py +0 -0
  824. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/test_cookies.py +0 -0
  825. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/test_real_chrome.py +0 -0
  826. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/auth/test_windows_acl.py +0 -0
  827. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/__init__.py +0 -0
  828. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_auth_status.py +0 -0
  829. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_auth_error_paths.py +0 -0
  830. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_auth_list.py +0 -0
  831. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_character.py +0 -0
  832. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_character_create.py +0 -0
  833. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_credits.py +0 -0
  834. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data.py +0 -0
  835. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_errors.py +0 -0
  836. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  837. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_data_sync.py +0 -0
  838. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_doctor.py +0 -0
  839. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image.py +0 -0
  840. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  841. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  842. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_upscale.py +0 -0
  843. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  844. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_instructions.py +0 -0
  845. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_models.py +0 -0
  846. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_movie.py +0 -0
  847. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_run.py +0 -0
  848. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_scene.py +0 -0
  849. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_tools.py +0 -0
  850. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video.py +0 -0
  851. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video_chain.py +0 -0
  852. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_cli_video_extend.py +0 -0
  853. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_error_handling.py +0 -0
  854. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_failure_funnel.py +0 -0
  855. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_helpers.py +0 -0
  856. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_incident_output.py +0 -0
  857. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_movie_manifest.py +0 -0
  858. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  859. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_predictable_output.py +0 -0
  860. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_run_with_handlers_context_leak.py +0 -0
  861. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
  862. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_settings_validation.py +0 -0
  863. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  864. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/composition/test_character.py +0 -0
  865. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/composition/test_compose_prompt.py +0 -0
  866. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/composition/test_handoff.py +0 -0
  867. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/composition/test_style_variants.py +0 -0
  868. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/composition/test_style_variants_e2e.py +0 -0
  869. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/conftest.py +0 -0
  870. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/__init__.py +0 -0
  871. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_chain_repo.py +0 -0
  872. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_failure_recording.py +0 -0
  873. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_find_incomplete_character.py +0 -0
  874. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_models.py +0 -0
  875. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_null_columns_stay_null.py +0 -0
  876. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_packaging.py +0 -0
  877. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_recorder.py +0 -0
  878. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_recorder_character.py +0 -0
  879. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_redaction.py +0 -0
  880. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_repository.py +0 -0
  881. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_scene_persistence.py +0 -0
  882. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_settings_and_errors.py +0 -0
  883. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_store.py +0 -0
  884. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/data/test_store_migrations.py +0 -0
  885. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/dev/test_recording_client.py +0 -0
  886. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/__init__.py +0 -0
  887. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/conftest.py +0 -0
  888. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_account_chooser_e2e.py +0 -0
  889. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  890. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  891. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  892. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  893. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  894. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_chain_e2e.py +0 -0
  895. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_character_create_e2e.py +0 -0
  896. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_character_mcp_parity_e2e.py +0 -0
  897. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  898. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_click_attribution_bdd.py +0 -0
  899. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  900. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_credits_e2e.py +0 -0
  901. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
  902. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_daemon_e2e.py +0 -0
  903. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  904. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  905. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_e2e_env_isolation.py +0 -0
  906. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  907. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  908. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  909. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  910. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  911. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  912. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  913. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_insufficient_credits_e2e.py +0 -0
  914. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_json_output_e2e.py +0 -0
  915. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  916. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  917. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_migrated_host_e2e.py +0 -0
  918. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
  919. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  920. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  921. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_scene_compose_live.py +0 -0
  922. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  923. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_tools_e2e.py +0 -0
  924. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_transports_e2e.py +0 -0
  925. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  926. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  927. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  928. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/__init__.py +0 -0
  929. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/asset_tagging.feature +0 -0
  930. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/auth.feature +0 -0
  931. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/auth_login.feature +0 -0
  932. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/character_create.feature +0 -0
  933. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/character_read.feature +0 -0
  934. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/click_attribution.feature +0 -0
  935. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/conftest.py +0 -0
  936. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/credits.feature +0 -0
  937. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/duration_tab_drift.feature +0 -0
  938. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/entity_provenance.feature +0 -0
  939. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/image.feature +0 -0
  940. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/image_batch_references.feature +0 -0
  941. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/image_upscale.feature +0 -0
  942. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/incident_diagnostics.feature +0 -0
  943. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/instructions.feature +0 -0
  944. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/latched_locale_recovery.feature +0 -0
  945. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/locale_picker_include.feature +0 -0
  946. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/mcp_tasks.feature +0 -0
  947. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/media_picker_tiers.feature +0 -0
  948. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/migrated_driver.feature +0 -0
  949. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/migrated_host_gate.feature +0 -0
  950. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/migrated_host_images.feature +0 -0
  951. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/migrated_i2v.feature +0 -0
  952. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/output_hardening.feature +0 -0
  953. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_asset_tagging_steps.py +0 -0
  954. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_auth_login_steps.py +0 -0
  955. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_auth_steps.py +0 -0
  956. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_character_create_steps.py +0 -0
  957. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_character_read_steps.py +0 -0
  958. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_credits_steps.py +0 -0
  959. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_e2e_binding_guard.py +0 -0
  960. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_image_steps.py +0 -0
  961. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_image_upscale_steps.py +0 -0
  962. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  963. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_instructions_steps.py +0 -0
  964. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  965. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  966. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  967. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_migrated_driver_steps.py +0 -0
  968. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
  969. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_migrated_host_images_steps.py +0 -0
  970. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_migrated_i2v_steps.py +0 -0
  971. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_output_hardening_steps.py +0 -0
  972. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_step_collision_guard.py +0 -0
  973. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  974. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/test_video_chain_steps.py +0 -0
  975. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/video_agent_ui.feature +0 -0
  976. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/features/video_chain.feature +0 -0
  977. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/__init__.py +0 -0
  978. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/changelog_modal_page.html +0 -0
  979. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/doctor_env.py +0 -0
  980. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/flow_model_inventory.json +0 -0
  981. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/flow_project_listing_media.json +0 -0
  982. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/listing_payload.py +0 -0
  983. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/fixtures/seeded_catalog.py +0 -0
  984. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/__init__.py +0 -0
  985. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_grading.py +0 -0
  986. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_model.py +0 -0
  987. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_model_governance.py +0 -0
  988. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_registry.py +0 -0
  989. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/flow_selectors/test_report.py +0 -0
  990. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/image_batch/__init__.py +0 -0
  991. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/image_batch/test_image_manifest.py +0 -0
  992. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/image_batch/test_jitter_config.py +0 -0
  993. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/image_batch/test_observability_events.py +0 -0
  994. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/__init__.py +0 -0
  995. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/conftest.py +0 -0
  996. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/constants.py +0 -0
  997. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/test_expander_gateway.py +0 -0
  998. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/test_storage_gcs.py +0 -0
  999. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/integration/test_storage_s3.py +0 -0
  1000. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/__init__.py +0 -0
  1001. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/conftest.py +0 -0
  1002. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_auth_status_tool.py +0 -0
  1003. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_character_tools.py +0 -0
  1004. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_cli_parity.py +0 -0
  1005. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_credits_tool.py +0 -0
  1006. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_error_funnel.py +0 -0
  1007. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_http_transport.py +0 -0
  1008. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_known_issues_resource.py +0 -0
  1009. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
  1010. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_no_spend.py +0 -0
  1011. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  1012. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
  1013. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_resources.py +0 -0
  1014. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_serve_auth.py +0 -0
  1015. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_server.py +0 -0
  1016. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_setup.py +0 -0
  1017. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_stdio_transport.py +0 -0
  1018. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_tasks_extension.py +0 -0
  1019. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_helpers.py +0 -0
  1020. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_instructions.py +0 -0
  1021. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/mcp/test_tools_wired.py +0 -0
  1022. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  1023. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_canary_classify.py +0 -0
  1024. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_canary_reexec.py +0 -0
  1025. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  1026. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
  1027. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_council_memory.py +0 -0
  1028. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_materiality.py +0 -0
  1029. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  1030. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  1031. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_test_count.py +0 -0
  1032. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  1033. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_codex_plugin.py +0 -0
  1034. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_extract_har_summary.py +0 -0
  1035. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_frame_acceptance.py +0 -0
  1036. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_generate_website_docs.py +0 -0
  1037. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  1038. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_materiality_backtest.py +0 -0
  1039. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_skillopt_scoring.py +0 -0
  1040. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_spike_page_pool.py +0 -0
  1041. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_spike_profile_lease.py +0 -0
  1042. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/scripts/test_update_sponsors.py +0 -0
  1043. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/__init__.py +0 -0
  1044. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_catalog_sync.py +0 -0
  1045. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_character_create_redaction.py +0 -0
  1046. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_character_create_saga.py +0 -0
  1047. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  1048. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_credits.py +0 -0
  1049. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_doctor.py +0 -0
  1050. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_media_attribution.py +0 -0
  1051. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_mentions_observability.py +0 -0
  1052. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_mentions_parse.py +0 -0
  1053. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_mentions_resolve.py +0 -0
  1054. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/services/test_resolve_and_apply.py +0 -0
  1055. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/smoke/__init__.py +0 -0
  1056. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  1057. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/smoke/test_real_flow.py +0 -0
  1058. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_auth.py +0 -0
  1059. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_browser_manager.py +0 -0
  1060. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_chain.py +0 -0
  1061. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_chain_manifest.py +0 -0
  1062. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_cli_data.py +0 -0
  1063. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_cli_project.py +0 -0
  1064. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_cli_update.py +0 -0
  1065. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_config.py +0 -0
  1066. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_conftest_isolation.py +0 -0
  1067. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_data_queries.py +0 -0
  1068. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_bundle.py +0 -0
  1069. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_events.py +0 -0
  1070. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_journal.py +0 -0
  1071. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_recorder.py +0 -0
  1072. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_retention.py +0 -0
  1073. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_diagnostics_sanitize.py +0 -0
  1074. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_documentation_gate.py +0 -0
  1075. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_duration_tab_drift.py +0 -0
  1076. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_entity_provenance.py +0 -0
  1077. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_errors.py +0 -0
  1078. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_image_batch_references.py +0 -0
  1079. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_incident_generation_requests.py +0 -0
  1080. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_json_output.py +0 -0
  1081. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_marker_registry.py +0 -0
  1082. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_media.py +0 -0
  1083. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_observability.py +0 -0
  1084. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_overlay_banner_dismissal.py +0 -0
  1085. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_paths.py +0 -0
  1086. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_playwright_pin.py +0 -0
  1087. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_plugin_manifests.py +0 -0
  1088. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_profile_lease.py +0 -0
  1089. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_profile_lease_subprocess.py +0 -0
  1090. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_profile_store.py +0 -0
  1091. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_profile_store_locale.py +0 -0
  1092. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_project_list_urls.py +0 -0
  1093. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_rich_markup_safety.py +0 -0
  1094. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_self_documenting_errors.py +0 -0
  1095. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_server_json.py +0 -0
  1096. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_smoke.py +0 -0
  1097. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/test_update_check.py +0 -0
  1098. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/__init__.py +0 -0
  1099. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_banned.py +0 -0
  1100. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_expander.py +0 -0
  1101. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_invocation.py +0 -0
  1102. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_loader.py +0 -0
  1103. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_registry.py +0 -0
  1104. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_runtime.py +0 -0
  1105. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/tools/test_spec.py +0 -0
  1106. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/ui/test_app.py +0 -0
  1107. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_codec.py +0 -0
  1108. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  1109. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_queue.py +0 -0
  1110. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_queue_multiprocess.py +0 -0
  1111. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/tests/worker/test_queue_reconciliation.py +0 -0
  1112. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
  1113. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/ARCHITECTURE.md +0 -0
  1114. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/AUTHENTICATION.md +0 -0
  1115. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/CHARACTER.md +0 -0
  1116. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/CONFIGURATION.md +0 -0
  1117. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/DATA_LAYER.md +0 -0
  1118. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/DEVELOPMENT.md +0 -0
  1119. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/E2E_TESTING.md +0 -0
  1120. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  1121. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/INSTRUCTIONS.md +0 -0
  1122. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/KNOWN_ISSUES.md +0 -0
  1123. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  1124. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/MOVIE.md +0 -0
  1125. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  1126. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/SECURITY.md +0 -0
  1127. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/SPONSORS.md +0 -0
  1128. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/TOOLS.md +0 -0
  1129. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/agents.md +0 -0
  1130. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/index.md +0 -0
  1131. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/installation.md +0 -0
  1132. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/onboarding-mockup.html +0 -0
  1133. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/onboarding.md +0 -0
  1134. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/docs/stylesheets/extra.css +0 -0
  1135. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/mkdocs.yml +0 -0
  1136. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/requirements.in +0 -0
  1137. {gflow_cli-0.75.0 → gflow_cli-0.77.0}/website/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.75.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",
@@ -88,6 +88,26 @@ updates:
88
88
  - "version-update:semver-minor"
89
89
  - "version-update:semver-patch"
90
90
 
91
+ # Docker — the base image in docker/Dockerfile (python:3.14-slim).
92
+ #
93
+ # This covers the FROM line and nothing else. Dependabot has no view into packages
94
+ # installed by a RUN, so `google-chrome-stable` is NOT tracked here: it is pulled
95
+ # unpinned from Google's apt repo, which keeps only the current build, and a rebuild
96
+ # is what picks up a newer Chrome. The gflow-cli version is pinned separately via
97
+ # `ARG GFLOW_VERSION` and gated by tests/test_dockerfile_version_pin.py, so between
98
+ # the three of them every input to the image has a named owner.
99
+ - package-ecosystem: "docker"
100
+ directory: "/docker"
101
+ schedule:
102
+ interval: "weekly"
103
+ day: "monday"
104
+ time: "08:00"
105
+ timezone: "Europe/Lisbon"
106
+ open-pull-requests-limit: 3
107
+ # Kept in sync with .github/workflows/labels.yml — see the note above.
108
+ labels:
109
+ - "dependencies"
110
+
91
111
  # GitHub Actions
92
112
  - package-ecosystem: "github-actions"
93
113
  directory: "/"
@@ -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 }}
@@ -74,8 +74,8 @@ If you can help unblock a pure HTTP transport (especially for video generation,
74
74
 
75
75
  Run these gates in order before every commit:
76
76
 
77
- ```powershell
78
- $env:PYTHONUTF8=1
77
+ ```bash
78
+ export PYTHONUTF8=1 # Windows PowerShell: $env:PYTHONUTF8 = "1"
79
79
  uv run python scripts/ci/check_repo_hygiene.py
80
80
  uv run python scripts/ci/check_doc_links.py
81
81
  uv run python scripts/ci/check_website_docs_pii.py
@@ -108,7 +108,7 @@ the five other mirror axes), which no command here can check and no CI gate can
108
108
 
109
109
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
110
110
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
111
- - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–38, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`, 37 `InsufficientCreditsError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
111
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–39, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`, 37 `InsufficientCreditsError`, 39 `FlowAccessUnavailableError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
112
112
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
113
113
  - **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
114
114
  - **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
@@ -339,7 +339,7 @@ content in a vendor directory.
339
339
  **Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
340
340
  then start a new session:
341
341
 
342
- ```powershell
342
+ ```bash
343
343
  codex plugin marketplace add .
344
344
  codex plugin add gflow@gflow-cli
345
345
  ```
@@ -7,6 +7,191 @@ 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
+
95
+ ## [0.76.0] — 2026-09-16
96
+
97
+ ### Fixed
98
+
99
+ - **The containerised sign-in now works on Windows, and no longer points at a service that
100
+ does not exist.** `docker/docker-compose.yml` hard-coded the X11 socket at
101
+ `/tmp/.X11-unix` and told non-Linux users to "use the VNC service below instead" — there
102
+ is no VNC service; the file defines `login`, `gflow` and `serve`. On Windows 11 + WSL2 the
103
+ display is real but lives elsewhere: WSLg publishes a live `X0` socket at
104
+ `/mnt/wslg/.X11-unix` with `DISPLAY=:0`, while `/tmp/.X11-unix` inside that distro is an
105
+ empty directory, so the default mounted nothing and Chrome exited against a display that
106
+ was not there. The mount is now `${X11_SOCKET:-/tmp/.X11-unix}`, unchanged for Linux, and
107
+ `docker/README.md` documents the WSL invocation plus the two prerequisites that actually
108
+ bite (run it from inside WSL, and enable Docker's WSL integration for that distro).
109
+ - **The container image no longer silently installs a stale gflow.** `docker/Dockerfile`
110
+ hardcoded `pip install gflow-cli==0.75.0` with nothing tying it to `pyproject.toml`, so
111
+ the next release would have left the image on the old version while
112
+ `docker/README.md`'s verification table went on quoting the new one. The version is now
113
+ an `ARG` gated by `tests/test_dockerfile_version_pin.py`. That gate also asserts the
114
+ ARG's **position**: declared above the Chrome layer it would invalidate ~1.6 GB of apt
115
+ cache on every version bump, so the ordering is a cache contract, not style. The base
116
+ image is now tracked by Dependabot (`docker` ecosystem); Chrome stays unpinned, with the
117
+ reason and the refresh command written down rather than left implicit.
118
+ - **An account with no Flow access was told gflow's selectors had drifted, and asked to
119
+ file a frontend bug.** Google Flow needs an age-verified account in a supported region
120
+ on a Google AI Plus, Pro or Ultra plan (or a qualifying Workspace plan). An account
121
+ without one is served Flow's own "you don't have access" screen instead of the app, and
122
+ gflow had no route for that state, so the editor sweep reported the only thing it could
123
+ see: the settings trigger never appeared. Measured on a newly created free Google
124
+ account, 2026-09-15, as an **A/B through the same command** — the probe neutered, then
125
+ restored, on live Flow:
126
+
127
+ | | exit | class | what the user is told |
128
+ |---|---|---|---|
129
+ | before | 23 | `UiSelectorDriftError` | *"Google may have updated their frontend … file a bug at github.com/ffroliva/gflow-cli/issues"* — on `https://flow.google.com/unavailable`, after a 30 s wait, **with an incident bundle containing a screenshot of the account's own page** for the user to attach |
130
+ | after | 39 | `FlowAccessUnavailableError` | *"This Google account cannot reach Flow"*, naming the subscription and linking Google's eligibility page |
131
+
132
+ The guard goes in `raise_if_known_landing()`, already the single chokepoint for "we
133
+ landed somewhere unexpected" and shared by all three raise sites (the labs gallery
134
+ sweep, the labs prompt-box sweep, and the migrated composer's `ensure_editor`), so every
135
+ command that drives the Flow editor is covered by the one change. It now probes the DOM
136
+ before it reads the URL. Verified live at $0 on that account: `ui_driver.known_landing
137
+ kind=unavailable at=migrated.ensure_editor`, exit 39, nothing submitted.
138
+
139
+ Detection is by Angular component, not by path or status code, because the spike
140
+ ([`2026-09-15-unentitled-account-signal`](docs/superpowers/spikes/2026-09-15-unentitled-account-signal.md))
141
+ pre-registered four candidate signals and refuted all four. There is no entitlement field
142
+ on the session wire; `flow.google.com/` answers **HTTP 200** and performs the hop
143
+ client-side, so there is no 3xx to key on; and the path is not stable — `/unavailable`
144
+ and `/u/8/unavailable` were both observed, the second carrying Google's account-index
145
+ segment, which gflow does not parse anywhere. What is stable is Flow's own
146
+ `<flow-pinhole-unavailable-screen>`, rendered inside `aisandbox-root`, and unlike the
147
+ screen's prose it is locale-invariant by construction (AGENTS.md Tier 1). The probe is
148
+ total: a page that cannot be queried, or a locator that raises, reports "not seen" rather
149
+ than displacing the caller's own diagnosis.
150
+
151
+ **What this does not fix, and why — measured, not assumed.** The same account run
152
+ *without* `--project` never reaches the editor at all: it takes the labs REST arm and
153
+ dies at `labs.google/fx/api/trpc/project.createProject` with **HTTP 401**, which is still
154
+ reported as `AuthExpiredError` (exit 3) telling the user to log in again. `gflow auth
155
+ login` (exit 8) and `gflow auth status` (exit 1) are wrong in the same way. All three read
156
+ an oracle that cannot answer the question: `labs.google/fx/api/auth/session` returns 200
157
+ with an empty `user` for an abandoned sign-in *and* for an account with no entitlement,
158
+ and a REST 401 looks identical to an expired session. The discriminator exists only in
159
+ the DOM, and on the login path Chrome has already closed by the time the verdict runs, so
160
+ there is no page left to ask. Routing those means a browser probe on the auth path — a
161
+ separate change, on a surface `AGENTS.md` gates behind its own spike. (`gflow credits
162
+ user` exit 3 on that account is [#795](https://github.com/ffroliva/gflow-cli/issues/795),
163
+ a different real bug. `gflow project list` returning `{"projects": [], "total": 0}` was
164
+ never wrong — it lists the local SQLite catalog and never contacts Flow.)
165
+
166
+ - **An MCP agent's `project_name` is finally used.** `gflow_generate_image` and
167
+ `gflow_generate_video` accept a `project_name` and document it as the title for a freshly
168
+ created Flow project, but the worker read a different key (`project_title`) that nothing in
169
+ the repository has ever written. Every supplied name was silently dropped and each new
170
+ project was created as the hardcoded fallback `gflow-cli images` instead. Dead since the
171
+ parameter shipped on 2026-07-26 — the daemon's read predated it by four days, and the
172
+ feature wired up a new key rather than the one already being read. The CLI was unaffected.
173
+
174
+ ### Added
175
+
176
+ - **The Official MCP Registry listing now publishes itself.** A new `MCP Registry` workflow runs
177
+ on `release: published` — after `release.yml` has uploaded the wheel, which matters because
178
+ `mcp-publisher` proves namespace ownership by reading the `mcp-name:` token out of the
179
+ *published* PyPI README. It authenticates with **GitHub Actions OIDC**, so no personal access
180
+ token is created, stored or handed to the registry, and the `mcp-publisher` download is pinned
181
+ by version *and* sha256 since that job holds `id-token: write`. `workflow_dispatch` is there
182
+ for a re-run when a release's PyPI upload succeeded but the registry publish did not. Registry
183
+ listings feed the downstream directories: PulseMCP ingests it and GitHub's MCP gallery is built
184
+ on it.
185
+ - **A gate for the MCP→worker payload-key round trip (#628).** `tests/mcp/test_cli_parity.py`
186
+ checks parity at the command and option level; neither can see the queue payload, where a
187
+ key written under one name and read under another type-checks, lints, passes every test and
188
+ does nothing at runtime. The new `tests/mcp/test_payload_key_round_trip.py` extracts the keys
189
+ `mcp/tools.py` writes and the keys anything under `worker/` reads, and fails on any written
190
+ key the worker never reads. It found the `project_name` defect above on its first run. The
191
+ extractors carry their own tests against synthetic sources, so the gate is proven able to go
192
+ red rather than merely observed green (precedent: a dead `output` param the queue never read,
193
+ found by hand in a v0.48.0 pre-release audit, #495).
194
+
10
195
  ## [0.75.0] — 2026-09-15
11
196
 
12
197
  ### Added
@@ -5101,7 +5286,9 @@ shell-script template that branches on these codes.
5101
5286
 
5102
5287
  First skeleton. Not functional end-to-end yet.
5103
5288
 
5104
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.75.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
5291
+ [0.76.0]: https://github.com/ffroliva/gflow-cli/compare/v0.75.0...v0.76.0
5105
5292
  [0.75.0]: https://github.com/ffroliva/gflow-cli/compare/v0.74.0...v0.75.0
5106
5293
  [0.74.0]: https://github.com/ffroliva/gflow-cli/compare/v0.73.2...v0.74.0
5107
5294
  [0.73.2]: https://github.com/ffroliva/gflow-cli/compare/v0.73.1...v0.73.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.75.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/
@@ -102,6 +102,7 @@ Description-Content-Type: text/markdown
102
102
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
103
103
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=coverage)](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
104
104
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ffroliva/gflow-cli/badge)](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
105
+ [![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/ffroliva/gflow-cli)
105
106
 
106
107
  <!-- Gold sponsors appear here: filled by scripts/ci/update_sponsors.py, empty until there is one. -->
107
108
  <!-- sponsors-gold:start -->
@@ -189,6 +190,7 @@ Reproduce the recording with [`scripts/record_demo.ps1`](scripts/record_demo.ps1
189
190
  | 🎭 **Characters** | [Characters](docs/CHARACTER.md), reusable subjects (`gflow character`) |
190
191
  | 🤖 **Agentic & automation** | [Instructions](docs/INSTRUCTIONS.md) (`gflow instructions`, persistent brief cards) · [Movie](docs/MOVIE.md) (`gflow movie`, multi-scene manifests) · [Tools](docs/TOOLS.md) (`--tool`, prompt rewriting) · [MCP server](docs/MCP.md) (`gflow mcp run` / `gflow serve`) |
191
192
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
193
+ | 📣 **Where to install from** | [Marketplaces](docs/MARKETPLACES.md) (every channel and what each actually delivers) · [Container](docs/CONTAINER.md) (why the image introspects but cannot generate) |
192
194
  | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
193
195
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
194
196
  | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
@@ -16,6 +16,7 @@
16
16
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
17
17
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ffroliva_gflow-cli&metric=coverage)](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
18
18
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ffroliva/gflow-cli/badge)](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
19
+ [![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/ffroliva/gflow-cli)
19
20
 
20
21
  <!-- Gold sponsors appear here: filled by scripts/ci/update_sponsors.py, empty until there is one. -->
21
22
  <!-- sponsors-gold:start -->
@@ -103,6 +104,7 @@ Reproduce the recording with [`scripts/record_demo.ps1`](scripts/record_demo.ps1
103
104
  | 🎭 **Characters** | [Characters](docs/CHARACTER.md), reusable subjects (`gflow character`) |
104
105
  | 🤖 **Agentic & automation** | [Instructions](docs/INSTRUCTIONS.md) (`gflow instructions`, persistent brief cards) · [Movie](docs/MOVIE.md) (`gflow movie`, multi-scene manifests) · [Tools](docs/TOOLS.md) (`--tool`, prompt rewriting) · [MCP server](docs/MCP.md) (`gflow mcp run` / `gflow serve`) |
105
106
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
107
+ | 📣 **Where to install from** | [Marketplaces](docs/MARKETPLACES.md) (every channel and what each actually delivers) · [Container](docs/CONTAINER.md) (why the image introspects but cannot generate) |
106
108
  | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
107
109
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
108
110
  | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
@@ -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
 
@@ -0,0 +1,53 @@
1
+ # Spike image v2: REAL Google Chrome, not Playwright's bundled Chromium.
2
+ #
3
+ # gflow's own gate (browser_manager.is_playwright_chrome_channel_available) accepts
4
+ # exactly one Linux path for channel="chrome": /opt/google/chrome/chrome. That is where
5
+ # the google-chrome-stable .deb installs, so this image satisfies gflow's detector and
6
+ # not merely Playwright's.
7
+ # 3.14, not 3.11. 3.11 is only the project's requires-python FLOOR — a reason for the
8
+ # minimum SUPPORTED version, not for a runtime image.
9
+ #
10
+ # CI's matrix is ["3.11","3.12","3.13"], so 3.14 is not covered by the suite. That matters
11
+ # less here than it looks: a container pins its interpreter, so this is deterministic
12
+ # rather than an ambient version that might surprise someone. The gap is closed by
13
+ # verifying the image's actual runtime contract below rather than by staying on an older
14
+ # interpreter — see docker/README.md § "Verified on this image".
15
+ FROM python:3.14-slim
16
+
17
+ ENV PYTHONUNBUFFERED=1 \
18
+ GFLOW_CLI_UPDATE_CHECK=false \
19
+ GFLOW_CLI_HOME=/data/gflow
20
+
21
+ RUN apt-get update && apt-get install -y --no-install-recommends \
22
+ xvfb xauth ca-certificates curl gnupg \
23
+ && curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \
24
+ | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg \
25
+ && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main" \
26
+ > /etc/apt/sources.list.d/google-chrome.list \
27
+ && apt-get update && apt-get install -y --no-install-recommends google-chrome-stable \
28
+ && rm -rf /var/lib/apt/lists/*
29
+
30
+ # The version lives in an ARG so a bump is a one-line change (or `--build-arg`), and
31
+ # `tests/test_dockerfile_version_pin.py` fails when this default drifts from
32
+ # pyproject.toml — otherwise the image silently keeps installing an old release while
33
+ # docker/README.md goes on claiming the new one was verified.
34
+ #
35
+ # Declared HERE rather than beside FROM, and the placement is load-bearing. Measured
36
+ # 2026-09-15 with an A/B on a throwaway image, using a unique marker so no stale cache
37
+ # entry could match:
38
+ #
39
+ # ARG after the expensive layer -> that layer CACHED on a version bump
40
+ # ARG before the expensive layer -> that layer REBUILT
41
+ #
42
+ # Chrome above is most of this image's ~1.6 GB, so the wrong placement would turn every
43
+ # gflow bump into a full Chrome reinstall. Keep this ARG below the apt layer.
44
+ #
45
+ # Deliberately NOT pinned: google-chrome-stable. Chrome's apt repo keeps only the current
46
+ # build, so a pinned version stops resolving within weeks. The trade-off is that this
47
+ # layer caches indefinitely and a rebuild is what picks up a newer Chrome.
48
+ ARG GFLOW_VERSION=0.77.0
49
+ RUN pip install --no-cache-dir "gflow-cli==${GFLOW_VERSION}"
50
+
51
+ VOLUME ["/data"]
52
+ WORKDIR /data
53
+ CMD ["gflow", "--help"]
@@ -0,0 +1,17 @@
1
+ # Runs gflow's OWN offline suite inside the container, on the image's interpreter.
2
+ # This is what turns "CI does not test 3.14" from a caveat into a measurement.
3
+ FROM python:3.14-slim
4
+ ENV PYTHONUNBUFFERED=1 PYTHONUTF8=1 GFLOW_CLI_UPDATE_CHECK=false UV_LINK_MODE=copy
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ xvfb xauth ca-certificates curl gnupg git \
7
+ && curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \
8
+ | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg \
9
+ && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main" \
10
+ > /etc/apt/sources.list.d/google-chrome.list \
11
+ && apt-get update && apt-get install -y --no-install-recommends google-chrome-stable \
12
+ && rm -rf /var/lib/apt/lists/*
13
+ RUN curl -LsSf https://astral.sh/uv/install.sh | UV_INSTALL_DIR=/usr/local/bin sh
14
+ WORKDIR /app
15
+ COPY . /app
16
+ RUN uv sync --frozen 2>/dev/null || uv sync
17
+ CMD ["uv","run","python","-m","pytest","-q","--no-cov","-p","no:cacheprovider"]