gflow-cli 0.59.0__tar.gz → 0.61.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 (830) hide show
  1. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/ci.yml +57 -7
  3. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/deps-watch.yml +3 -1
  4. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/external-pr-triage.yml +9 -1
  5. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/governance-advisory.yml +11 -3
  6. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/governance-benchmark.yml +2 -1
  7. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/main-base-guard.yml +2 -0
  8. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/pages.yml +2 -0
  9. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/release.yml +8 -1
  10. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/scorecard.yml +1 -1
  11. gflow_cli-0.61.0/.github/workflows/selector-probe.yml +26 -0
  12. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/CHANGELOG.md +177 -1
  13. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/PKG-INFO +2 -2
  14. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +28 -4
  15. gflow_cli-0.61.0/deploy/logrotate-pr-triage +21 -0
  16. {gflow_cli-0.59.0/website → gflow_cli-0.61.0}/docs/E2E_TESTING.md +159 -0
  17. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/GITHUB.md +87 -0
  18. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/INDEX.md +8 -2
  19. gflow_cli-0.61.0/docs/LIVE_VERIFICATION_v0.60.0.md +180 -0
  20. gflow_cli-0.61.0/docs/LIVE_VERIFICATION_v0.61.0.md +164 -0
  21. gflow_cli-0.61.0/docs/superpowers/plans/2026-08-21-selector-registry.md +743 -0
  22. gflow_cli-0.61.0/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +171 -0
  23. gflow_cli-0.61.0/docs/superpowers/specs/2026-08-21-selector-registry-design.md +307 -0
  24. gflow_cli-0.61.0/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +168 -0
  25. gflow_cli-0.61.0/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +139 -0
  26. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/pyproject.toml +3 -3
  27. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/autopilot/Dockerfile.triage +4 -0
  28. gflow_cli-0.61.0/scripts/autopilot/entrypoint.sh +10 -0
  29. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/autopilot/package-lock.json +48 -36
  30. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/autopilot/package.json +1 -1
  31. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/autopilot/pr_triage_autopilot.py +105 -10
  32. gflow_cli-0.61.0/scripts/autopilot/run_sandboxed_review.sh +172 -0
  33. gflow_cli-0.61.0/scripts/canary/register_task.ps1 +79 -0
  34. gflow_cli-0.61.0/scripts/canary/run_canary.py +419 -0
  35. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_repo_hygiene.py +20 -6
  36. gflow_cli-0.61.0/scripts/dev/live_verify_policy_400_v060.py +142 -0
  37. gflow_cli-0.61.0/scripts/dev/live_verify_video_model_select.py +108 -0
  38. gflow_cli-0.61.0/scripts/dev/spike_model_inventory.py +158 -0
  39. gflow_cli-0.61.0/scripts/dev/spike_trpc_origin_referer_401.py +151 -0
  40. gflow_cli-0.61.0/scripts/dev/spike_video_tab_dom.py +102 -0
  41. gflow_cli-0.61.0/scripts/dev/verify_language_agnostic.py +113 -0
  42. gflow_cli-0.61.0/scripts/dev/verify_locale_navigation_race.py +111 -0
  43. gflow_cli-0.61.0/scripts/dev/verify_model_attribution.py +82 -0
  44. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/diag/README.md +1 -0
  45. gflow_cli-0.61.0/scripts/diag/diag_aisandbox_bearer.py +124 -0
  46. gflow_cli-0.61.0/scripts/probe/run_probe.py +210 -0
  47. gflow_cli-0.61.0/scripts/probe/spike_auth_matrix.py +131 -0
  48. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/__init__.py +1 -1
  49. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/client.py +91 -63
  50. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/routes.py +68 -5
  51. gflow_cli-0.61.0/src/gflow_cli/api/transports/_common.py +327 -0
  52. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/base.py +31 -0
  53. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/classic.py +5 -1
  54. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +8 -0
  55. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +4 -0
  56. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/ui_automation.py +262 -67
  57. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/ui_automation_video.py +100 -61
  58. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_character.py +9 -3
  59. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/diagnostics.py +72 -13
  60. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/errors.py +57 -1
  61. gflow_cli-0.61.0/src/gflow_cli/flow_selectors/__init__.py +1 -0
  62. gflow_cli-0.61.0/src/gflow_cli/flow_selectors/grading.py +51 -0
  63. gflow_cli-0.61.0/src/gflow_cli/flow_selectors/model.py +59 -0
  64. gflow_cli-0.61.0/src/gflow_cli/flow_selectors/registry.py +63 -0
  65. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/services/catalog_sync.py +80 -7
  66. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/services/character_create.py +5 -2
  67. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_generate_character.py +28 -5
  68. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_post_json_aisandbox_auth.py +74 -0
  69. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_routes_character.py +16 -4
  70. gflow_cli-0.61.0/tests/api/test_routes_locale.py +68 -0
  71. gflow_cli-0.61.0/tests/api/transports/test_locale_navigation.py +148 -0
  72. gflow_cli-0.61.0/tests/api/transports/test_model_selection_loud.py +192 -0
  73. gflow_cli-0.61.0/tests/api/transports/test_navigation_settled.py +94 -0
  74. gflow_cli-0.61.0/tests/api/transports/test_policy_400.py +185 -0
  75. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation.py +85 -60
  76. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_batch.py +8 -8
  77. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_video.py +64 -19
  78. gflow_cli-0.61.0/tests/api/transports/test_video_model_selection_loud.py +179 -0
  79. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/autopilot/test_pr_triage_autopilot.py +344 -2
  80. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/conftest.py +26 -2
  81. gflow_cli-0.61.0/tests/fixtures/flow_model_inventory.json +23 -0
  82. gflow_cli-0.61.0/tests/fixtures/flow_project_listing_media.json +54 -0
  83. gflow_cli-0.61.0/tests/flow_selectors/test_grading.py +67 -0
  84. gflow_cli-0.61.0/tests/flow_selectors/test_model.py +37 -0
  85. gflow_cli-0.61.0/tests/flow_selectors/test_model_governance.py +250 -0
  86. gflow_cli-0.61.0/tests/flow_selectors/test_registry.py +47 -0
  87. gflow_cli-0.61.0/tests/flow_selectors/test_report.py +57 -0
  88. gflow_cli-0.61.0/tests/scripts/test_canary_classify.py +326 -0
  89. gflow_cli-0.61.0/tests/scripts/test_canary_reexec.py +133 -0
  90. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_check_repo_hygiene.py +46 -2
  91. gflow_cli-0.61.0/tests/scripts/test_workflow_hardening.py +203 -0
  92. gflow_cli-0.61.0/tests/services/test_media_attribution.py +91 -0
  93. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_errors_classification.py +9 -8
  94. gflow_cli-0.61.0/tests/test_incident_generation_requests.py +94 -0
  95. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_self_documenting_errors.py +34 -5
  96. gflow_cli-0.61.0/tests/tools/__init__.py +0 -0
  97. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/uv.lock +53 -53
  98. {gflow_cli-0.59.0 → gflow_cli-0.61.0/website}/docs/E2E_TESTING.md +159 -0
  99. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/requirements.txt +3 -3
  100. gflow_cli-0.59.0/scripts/autopilot/entrypoint.sh +0 -9
  101. gflow_cli-0.59.0/scripts/autopilot/run_sandboxed_review.sh +0 -115
  102. gflow_cli-0.59.0/src/gflow_cli/api/transports/_common.py +0 -137
  103. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.agents/plugins/marketplace.json +0 -0
  104. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/README.md +0 -0
  105. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/active.md +0 -0
  106. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/branch-review.md +0 -0
  107. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/changelog.md +0 -0
  108. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/check.md +0 -0
  109. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/doc-review.md +0 -0
  110. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  111. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  112. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/known-issues.md +0 -0
  113. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/live-verify.md +0 -0
  114. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/llm-council.md +0 -0
  115. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/next.md +0 -0
  116. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/plan.md +0 -0
  117. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  118. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/predict.md +0 -0
  119. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/release.md +0 -0
  120. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/scenario.md +0 -0
  121. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/sonar.md +0 -0
  122. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.claude/commands/gflow/status.md +0 -0
  123. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.env.template +0 -0
  124. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.gitattributes +0 -0
  125. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/CODEOWNERS +0 -0
  126. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  127. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/copilot-instructions.md +0 -0
  128. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/dependabot.yml +0 -0
  129. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.github/workflows/labels.yml +0 -0
  130. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.gitignore +0 -0
  131. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.gitleaks.toml +0 -0
  132. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.pre-commit-config.yaml +0 -0
  133. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/.secrets.baseline +0 -0
  134. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/AGENTS.md +0 -0
  135. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/CLAUDE.md +0 -0
  136. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/CONFIGURATION.md +0 -0
  137. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/CONTRIBUTING.md +0 -0
  138. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/DISCLAIMER.md +0 -0
  139. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/KNOWN_ISSUES.md +0 -0
  140. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/LICENSE +0 -0
  141. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/PLAN.md +0 -0
  142. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/README.md +0 -0
  143. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/RELEASE.md +0 -0
  144. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/ROADMAP.md +0 -0
  145. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/conftest.py +0 -0
  146. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docker-compose.yml +0 -0
  147. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/AGENT_GUIDE.md +0 -0
  148. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/AGENT_UI_E2E.md +0 -0
  149. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/AGENT_UI_RECON.md +0 -0
  150. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/ARCHITECTURE.md +0 -0
  151. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  152. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/AUTHENTICATION.md +0 -0
  153. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/CHARACTER.md +0 -0
  154. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/CHARACTER_RECON.md +0 -0
  155. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/CONFIGURATION.md +0 -0
  156. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/DATA_LAYER.md +0 -0
  157. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/DEBUGGING.md +0 -0
  158. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/DEMOS.md +0 -0
  159. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/DEVELOPMENT.md +0 -0
  160. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/EXTERNAL_STORAGE.md +0 -0
  161. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  162. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  163. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/INSTRUCTIONS.md +0 -0
  164. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  165. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  166. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  167. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  168. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  169. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  170. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  171. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  172. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  173. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  174. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  175. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  176. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  177. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  178. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  179. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  180. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  181. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  182. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  183. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  184. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  185. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  186. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  187. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  188. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  189. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  190. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  191. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  192. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  193. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  194. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  195. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  196. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  197. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  198. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  199. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  200. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  201. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  202. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  203. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  204. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  205. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  206. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  207. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  208. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  209. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  210. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  211. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  212. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  213. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  214. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  215. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  216. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  217. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  218. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  219. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
  220. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
  221. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  222. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  223. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  224. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  225. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  226. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/MCP.md +0 -0
  227. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/MEDIA_LIBRARY.md +0 -0
  228. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/MOVIE.md +0 -0
  229. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/PROJECT_STATUS.md +0 -0
  230. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/PROMPT_EXPANSION.md +0 -0
  231. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  232. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/SECURITY.md +0 -0
  233. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/TOOLS.md +0 -0
  234. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/USAGE.md +0 -0
  235. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/USER_GUIDE.md +0 -0
  236. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/assets/demo-split-pf.gif +0 -0
  237. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/assets/example-run.gif +0 -0
  238. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/assets/examples.webp +0 -0
  239. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/medium_tutorial.md +0 -0
  240. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/schemas/movie-handoff.schema.json +0 -0
  241. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/sonar-cleanup-tracker.md +0 -0
  242. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  243. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  244. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  245. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  246. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  247. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  248. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  249. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  250. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  251. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  252. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  253. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  254. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  255. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  256. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  257. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  258. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  259. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  260. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  261. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  262. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  263. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  264. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  265. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  266. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  267. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  268. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  269. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  270. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  271. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  272. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  273. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  274. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  275. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  276. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  277. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  278. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  279. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  280. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  281. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  282. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  283. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  284. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  285. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  286. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  287. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  288. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  289. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  290. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  291. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  292. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  293. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  294. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  295. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/eval/pr_triage_eval.py +0 -0
  296. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/eval/pr_triage_fixtures.json +0 -0
  297. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/README.md +0 -0
  298. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/batch_from_config.py +0 -0
  299. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/multi_prompt_t2i.py +0 -0
  300. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/sample_config.json +0 -0
  301. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/sample_prompts.txt +0 -0
  302. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/single_image_t2i.py +0 -0
  303. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/examples/workflow_chain.py +0 -0
  304. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/index.html +0 -0
  305. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/llms.txt +0 -0
  306. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/README.md +0 -0
  307. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/01_upload_image.json +0 -0
  308. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  309. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  310. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/04_archive_workflow.json +0 -0
  311. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/05_createProject.json +0 -0
  312. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/06_batchGenerateImages.json +0 -0
  313. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  314. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  315. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  316. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  317. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  318. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/12_create_scene.json +0 -0
  319. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  320. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/14_get_scene_workflows.json +0 -0
  321. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  322. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  323. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_doc_links.py +0 -0
  324. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_materiality.py +0 -0
  325. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_release_artifacts.py +0 -0
  326. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_test_count.py +0 -0
  327. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/check_website_docs_pii.py +0 -0
  328. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/ci/generate_website_docs.py +0 -0
  329. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/debug_editor.py +0 -0
  330. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/debug_gen_settings.py +0 -0
  331. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/debug_settings.py +0 -0
  332. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/_recording_client.py +0 -0
  333. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/_spike_common.py +0 -0
  334. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/active_plan.py +0 -0
  335. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  336. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  337. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  338. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  339. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  340. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  341. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  342. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_locale_invariants.py +0 -0
  343. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  344. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_project_listing.py +0 -0
  345. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  346. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  347. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  348. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  349. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/character_create_spike.py +0 -0
  350. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/character_create_spike_v2.py +0 -0
  351. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/dump_character_selectors.js +0 -0
  352. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/incident_bundle_quality.py +0 -0
  353. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  354. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/make_project.py +0 -0
  355. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/materiality_backtest.py +0 -0
  356. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/patch_character.py +0 -0
  357. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/README.md +0 -0
  358. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/harness.py +0 -0
  359. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/skillopt/tasks.json +0 -0
  360. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/sonar-local-scan.sh +0 -0
  361. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  362. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  363. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  364. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  365. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  366. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  367. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  368. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  369. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_incident_live.py +0 -0
  370. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  371. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  372. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  373. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  374. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  375. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  376. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  377. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  378. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  379. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  380. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  381. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  382. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  383. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_patch_entity.py +0 -0
  384. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/dev/spike_patchright.py +0 -0
  385. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/diag/capture_flow_traffic.py +0 -0
  386. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/diag/memory_profile.py +0 -0
  387. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/diag/recaptcha_mint.py +0 -0
  388. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  389. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  390. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  391. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/record_demo.ps1 +0 -0
  392. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/smoke_image.py +0 -0
  393. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/smoke_video_editor.py +0 -0
  394. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/smoke_worker_style.py +0 -0
  395. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/spike_waf_camoufox.py +0 -0
  396. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/scripts/verify_chrome_auth_viability.py +0 -0
  397. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/README.md +0 -0
  398. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/changelog/SKILL.md +0 -0
  399. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/check/SKILL.md +0 -0
  400. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/doc-review/SKILL.md +0 -0
  401. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/gflow-cli/SKILL.md +0 -0
  402. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/issue-assessment/SKILL.md +0 -0
  403. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/issue-resolve/SKILL.md +0 -0
  404. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/known-issues/SKILL.md +0 -0
  405. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/live-verify/SKILL.md +0 -0
  406. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/llm-council/SKILL.md +0 -0
  407. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/plan/SKILL.md +0 -0
  408. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/pr-council-review/SKILL.md +0 -0
  409. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/predict/SKILL.md +0 -0
  410. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/release/SKILL.md +0 -0
  411. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/scenario/SKILL.md +0 -0
  412. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/sonar/SKILL.md +0 -0
  413. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/skills/status/SKILL.md +0 -0
  414. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/sonar-project.properties +0 -0
  415. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/__main__.py +0 -0
  416. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/_cli_helpers.py +0 -0
  417. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/__init__.py +0 -0
  418. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_engine.py +0 -0
  419. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_retry.py +0 -0
  420. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  421. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/character.py +0 -0
  422. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/dto.py +0 -0
  423. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/image.py +0 -0
  424. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/image_upscale.py +0 -0
  425. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/recaptcha.py +0 -0
  426. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/scene.py +0 -0
  427. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  428. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  429. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  430. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  431. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  432. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  433. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  434. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  435. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  436. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/api/video.py +0 -0
  437. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/__init__.py +0 -0
  438. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/base.py +0 -0
  439. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/cookies.py +0 -0
  440. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/factory.py +0 -0
  441. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  442. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  443. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/strategies.py +0 -0
  444. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/auth/verification.py +0 -0
  445. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/browser_manager.py +0 -0
  446. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/chain.py +0 -0
  447. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/chain_manifest.py +0 -0
  448. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli.py +0 -0
  449. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_data.py +0 -0
  450. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_doctor.py +0 -0
  451. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_image.py +0 -0
  452. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_instructions.py +0 -0
  453. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_models.py +0 -0
  454. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_movie.py +0 -0
  455. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_project.py +0 -0
  456. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_run.py +0 -0
  457. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_scene.py +0 -0
  458. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_tools.py +0 -0
  459. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/cli_video.py +0 -0
  460. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/composition.py +0 -0
  461. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/config.py +0 -0
  462. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/__init__.py +0 -0
  463. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/chain_repo.py +0 -0
  464. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  465. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  466. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  467. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  468. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  469. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  470. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  471. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  472. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  473. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  474. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/models.py +0 -0
  475. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/queries.py +0 -0
  476. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/recorder.py +0 -0
  477. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/redaction.py +0 -0
  478. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/repository.py +0 -0
  479. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/data/store.py +0 -0
  480. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/exceptions.py +0 -0
  481. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/file_integrity.py +0 -0
  482. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/image_batch.py +0 -0
  483. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/json_output.py +0 -0
  484. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/__init__.py +0 -0
  485. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/prompts.py +0 -0
  486. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/resources.py +0 -0
  487. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/server.py +0 -0
  488. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/setup.py +0 -0
  489. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  490. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/mcp/tools.py +0 -0
  491. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/media.py +0 -0
  492. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/movie_manifest.py +0 -0
  493. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/observability.py +0 -0
  494. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/paths.py +0 -0
  495. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/profile_lease.py +0 -0
  496. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/profile_store.py +0 -0
  497. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/redaction.py +0 -0
  498. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/services/__init__.py +0 -0
  499. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/services/doctor.py +0 -0
  500. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/services/mentions.py +0 -0
  501. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/storage.py +0 -0
  502. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/__init__.py +0 -0
  503. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/banned.py +0 -0
  504. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  505. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  506. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  507. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  508. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/expander.py +0 -0
  509. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/invocation.py +0 -0
  510. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/loader.py +0 -0
  511. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/registry.py +0 -0
  512. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/runtime.py +0 -0
  513. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/tools/spec.py +0 -0
  514. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/ui/app.py +0 -0
  515. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/ui/server.py +0 -0
  516. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/update_check.py +0 -0
  517. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/winsec.py +0 -0
  518. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/codec.py +0 -0
  519. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/daemon.py +0 -0
  520. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/src/gflow_cli/worker/queue.py +0 -0
  521. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tasks/lessons.md +0 -0
  522. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/test_assets/sample_batch.json +0 -0
  523. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/test_assets/sample_batch.tsv +0 -0
  524. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/test_assets/sample_batch_invalid.tsv +0 -0
  525. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/__init__.py +0 -0
  526. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/__init__.py +0 -0
  527. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/fixtures/character_gen_response.json +0 -0
  528. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  529. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  530. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  531. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_bearer_redaction.py +0 -0
  532. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_character.py +0 -0
  533. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client.py +0 -0
  534. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_character.py +0 -0
  535. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_delete_characters.py +0 -0
  536. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_errors.py +0 -0
  537. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_image.py +0 -0
  538. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_incidents.py +0 -0
  539. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_launch_kwargs.py +0 -0
  540. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_patch_entity.py +0 -0
  541. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_scene.py +0 -0
  542. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_client_upscale.py +0 -0
  543. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_concurrency.py +0 -0
  544. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_dto.py +0 -0
  545. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_engine.py +0 -0
  546. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_image.py +0 -0
  547. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_image_dto.py +0 -0
  548. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_image_upscale.py +0 -0
  549. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_recaptcha.py +0 -0
  550. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_retry.py +0 -0
  551. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_routes.py +0 -0
  552. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_routes_scene.py +0 -0
  553. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_sapisidhash_helper.py +0 -0
  554. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_scene_models.py +0 -0
  555. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_video.py +0 -0
  556. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/test_video_request.py +0 -0
  557. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/__init__.py +0 -0
  558. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/conftest.py +0 -0
  559. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/__init__.py +0 -0
  560. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  561. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_classic.py +0 -0
  562. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_factory.py +0 -0
  563. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  564. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  565. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_base.py +0 -0
  566. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_bearer.py +0 -0
  567. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_common.py +0 -0
  568. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  569. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_factory.py +0 -0
  570. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_fingerprint.py +0 -0
  571. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_mode_control.py +0 -0
  572. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_sapisidhash.py +0 -0
  573. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  574. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_transport_timeout.py +0 -0
  575. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  576. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  577. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/strategies/test_factory.py +0 -0
  578. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/strategies/test_strategies.py +0 -0
  579. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/test_cookies.py +0 -0
  580. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/test_real_chrome.py +0 -0
  581. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/test_verification.py +0 -0
  582. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/auth/test_windows_acl.py +0 -0
  583. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/__init__.py +0 -0
  584. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_auth_status.py +0 -0
  585. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_auth_list.py +0 -0
  586. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_character.py +0 -0
  587. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_character_create.py +0 -0
  588. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data.py +0 -0
  589. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_errors.py +0 -0
  590. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  591. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_data_sync.py +0 -0
  592. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_doctor.py +0 -0
  593. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image.py +0 -0
  594. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  595. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  596. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_upscale.py +0 -0
  597. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
  598. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_instructions.py +0 -0
  599. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_models.py +0 -0
  600. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_movie.py +0 -0
  601. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_run.py +0 -0
  602. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_scene.py +0 -0
  603. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_tools.py +0 -0
  604. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_video.py +0 -0
  605. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_cli_video_chain.py +0 -0
  606. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_error_handling.py +0 -0
  607. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_failure_funnel.py +0 -0
  608. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_helpers.py +0 -0
  609. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_incident_output.py +0 -0
  610. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_movie_manifest.py +0 -0
  611. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  612. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_predictable_output.py +0 -0
  613. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_settings_validation.py +0 -0
  614. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  615. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/composition/test_character.py +0 -0
  616. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/composition/test_compose_prompt.py +0 -0
  617. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/composition/test_handoff.py +0 -0
  618. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/composition/test_style_variants.py +0 -0
  619. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/composition/test_style_variants_e2e.py +0 -0
  620. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/__init__.py +0 -0
  621. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_chain_repo.py +0 -0
  622. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_failure_recording.py +0 -0
  623. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_find_incomplete_character.py +0 -0
  624. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_models.py +0 -0
  625. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_packaging.py +0 -0
  626. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_recorder.py +0 -0
  627. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_recorder_character.py +0 -0
  628. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_redaction.py +0 -0
  629. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_repository.py +0 -0
  630. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_scene_persistence.py +0 -0
  631. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_settings_and_errors.py +0 -0
  632. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_store.py +0 -0
  633. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/data/test_store_migrations.py +0 -0
  634. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/dev/test_recording_client.py +0 -0
  635. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/__init__.py +0 -0
  636. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/conftest.py +0 -0
  637. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  638. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  639. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  640. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  641. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  642. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_chain_e2e.py +0 -0
  643. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_character_create_e2e.py +0 -0
  644. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  645. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  646. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_daemon_e2e.py +0 -0
  647. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  648. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
  649. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  650. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  651. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  652. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  653. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  654. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  655. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  656. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_json_output_e2e.py +0 -0
  657. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  658. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  659. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  660. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
  661. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_scene_compose_live.py +0 -0
  662. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  663. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_tools_e2e.py +0 -0
  664. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_transports_e2e.py +0 -0
  665. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  666. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  667. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  668. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/__init__.py +0 -0
  669. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/asset_tagging.feature +0 -0
  670. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/auth.feature +0 -0
  671. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/auth_login.feature +0 -0
  672. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/character_create.feature +0 -0
  673. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/character_read.feature +0 -0
  674. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/conftest.py +0 -0
  675. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/duration_tab_drift.feature +0 -0
  676. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/entity_provenance.feature +0 -0
  677. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/image.feature +0 -0
  678. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/image_batch_references.feature +0 -0
  679. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/image_upscale.feature +0 -0
  680. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/incident_diagnostics.feature +0 -0
  681. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/instructions.feature +0 -0
  682. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/locale_picker_include.feature +0 -0
  683. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/mcp_tasks.feature +0 -0
  684. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/media_picker_tiers.feature +0 -0
  685. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/output_hardening.feature +0 -0
  686. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_asset_tagging_steps.py +0 -0
  687. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_auth_login_steps.py +0 -0
  688. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_auth_steps.py +0 -0
  689. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_character_create_steps.py +0 -0
  690. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_character_read_steps.py +0 -0
  691. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_image_steps.py +0 -0
  692. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_image_upscale_steps.py +0 -0
  693. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  694. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_instructions_steps.py +0 -0
  695. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  696. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  697. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  698. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_output_hardening_steps.py +0 -0
  699. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_step_collision_guard.py +0 -0
  700. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  701. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/test_video_chain_steps.py +0 -0
  702. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/video_agent_ui.feature +0 -0
  703. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/features/video_chain.feature +0 -0
  704. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/fixtures/__init__.py +0 -0
  705. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/fixtures/doctor_env.py +0 -0
  706. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/fixtures/listing_payload.py +0 -0
  707. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/fixtures/seeded_catalog.py +0 -0
  708. {gflow_cli-0.59.0/tests/image_batch → gflow_cli-0.61.0/tests/flow_selectors}/__init__.py +0 -0
  709. {gflow_cli-0.59.0/tests/integration → gflow_cli-0.61.0/tests/image_batch}/__init__.py +0 -0
  710. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/image_batch/test_image_manifest.py +0 -0
  711. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/image_batch/test_jitter_config.py +0 -0
  712. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/image_batch/test_observability_events.py +0 -0
  713. {gflow_cli-0.59.0/tests/services → gflow_cli-0.61.0/tests/integration}/__init__.py +0 -0
  714. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/integration/conftest.py +0 -0
  715. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/integration/constants.py +0 -0
  716. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/integration/test_expander_gateway.py +0 -0
  717. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/integration/test_storage_gcs.py +0 -0
  718. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/integration/test_storage_s3.py +0 -0
  719. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/__init__.py +0 -0
  720. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/conftest.py +0 -0
  721. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_auth_status_tool.py +0 -0
  722. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_cli_parity.py +0 -0
  723. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_error_funnel.py +0 -0
  724. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_http_transport.py +0 -0
  725. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_known_issues_resource.py +0 -0
  726. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_no_spend.py +0 -0
  727. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  728. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_resources.py +0 -0
  729. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_server.py +0 -0
  730. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_setup.py +0 -0
  731. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_stdio_transport.py +0 -0
  732. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_tasks_extension.py +0 -0
  733. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_helpers.py +0 -0
  734. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_instructions.py +0 -0
  735. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/mcp/test_tools_wired.py +0 -0
  736. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  737. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  738. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_check_materiality.py +0 -0
  739. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  740. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_check_test_count.py +0 -0
  741. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  742. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_codex_plugin.py +0 -0
  743. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_generate_website_docs.py +0 -0
  744. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  745. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/scripts/test_materiality_backtest.py +0 -0
  746. {gflow_cli-0.59.0/tests/smoke → gflow_cli-0.61.0/tests/services}/__init__.py +0 -0
  747. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_catalog_sync.py +0 -0
  748. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_character_create_redaction.py +0 -0
  749. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_character_create_saga.py +0 -0
  750. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  751. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_doctor.py +0 -0
  752. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_mentions_observability.py +0 -0
  753. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_mentions_parse.py +0 -0
  754. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_mentions_resolve.py +0 -0
  755. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/services/test_resolve_and_apply.py +0 -0
  756. {gflow_cli-0.59.0/tests/tools → gflow_cli-0.61.0/tests/smoke}/__init__.py +0 -0
  757. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  758. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/smoke/test_real_flow.py +0 -0
  759. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_auth.py +0 -0
  760. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_browser_manager.py +0 -0
  761. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_chain.py +0 -0
  762. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_chain_manifest.py +0 -0
  763. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_cli_data.py +0 -0
  764. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_cli_project.py +0 -0
  765. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_config.py +0 -0
  766. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_conftest_isolation.py +0 -0
  767. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_data_queries.py +0 -0
  768. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_bundle.py +0 -0
  769. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_events.py +0 -0
  770. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_journal.py +0 -0
  771. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_recorder.py +0 -0
  772. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_retention.py +0 -0
  773. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_diagnostics_sanitize.py +0 -0
  774. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_documentation_gate.py +0 -0
  775. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_duration_tab_drift.py +0 -0
  776. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_entity_provenance.py +0 -0
  777. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_errors.py +0 -0
  778. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_image_batch_references.py +0 -0
  779. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_json_output.py +0 -0
  780. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_marker_registry.py +0 -0
  781. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_media.py +0 -0
  782. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_observability.py +0 -0
  783. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_overlay_banner_dismissal.py +0 -0
  784. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_paths.py +0 -0
  785. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_playwright_pin.py +0 -0
  786. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_profile_lease.py +0 -0
  787. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_profile_lease_subprocess.py +0 -0
  788. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_profile_store.py +0 -0
  789. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_smoke.py +0 -0
  790. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/test_update_check.py +0 -0
  791. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_banned.py +0 -0
  792. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_expander.py +0 -0
  793. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_invocation.py +0 -0
  794. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_loader.py +0 -0
  795. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_registry.py +0 -0
  796. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_runtime.py +0 -0
  797. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/tools/test_spec.py +0 -0
  798. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/ui/test_app.py +0 -0
  799. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_codec.py +0 -0
  800. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_daemon.py +0 -0
  801. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  802. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_queue.py +0 -0
  803. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_queue_multiprocess.py +0 -0
  804. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/tests/worker/test_queue_reconciliation.py +0 -0
  805. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/ARCHITECTURE.md +0 -0
  806. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/AUTHENTICATION.md +0 -0
  807. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/CHARACTER.md +0 -0
  808. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/CONFIGURATION.md +0 -0
  809. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/DATA_LAYER.md +0 -0
  810. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/DEBUGGING.md +0 -0
  811. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/DEVELOPMENT.md +0 -0
  812. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  813. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/INSTRUCTIONS.md +0 -0
  814. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/KNOWN_ISSUES.md +0 -0
  815. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/MCP.md +0 -0
  816. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/MEDIA_LIBRARY.md +0 -0
  817. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/MOVIE.md +0 -0
  818. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  819. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/SECURITY.md +0 -0
  820. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/TOOLS.md +0 -0
  821. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/USAGE.md +0 -0
  822. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/USER_GUIDE.md +0 -0
  823. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/agents.md +0 -0
  824. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/index.md +0 -0
  825. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/installation.md +0 -0
  826. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/onboarding-mockup.html +0 -0
  827. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/onboarding.md +0 -0
  828. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/docs/stylesheets/extra.css +0 -0
  829. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/mkdocs.yml +0 -0
  830. {gflow_cli-0.59.0 → gflow_cli-0.61.0}/website/requirements.in +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.59.0",
3
+ "version": "0.61.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -26,6 +26,7 @@ jobs:
26
26
  steps:
27
27
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
28
28
  with:
29
+ persist-credentials: false
29
30
  fetch-depth: 0 # full history so gitleaks can diff against base
30
31
 
31
32
  - name: Run gitleaks
@@ -39,8 +40,10 @@ jobs:
39
40
  runs-on: ubuntu-latest
40
41
  steps:
41
42
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
43
+ with:
44
+ persist-credentials: false
42
45
  - name: Install uv
43
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
46
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
44
47
  - name: Audit locked dependencies for known CVEs
45
48
  # Fails the build on any known advisory. Accept later via: pip-audit --ignore-vuln <GHSA-id>
46
49
  #
@@ -57,6 +60,42 @@ jobs:
57
60
  # dependabot ecosystem — bump by hand when it drifts).
58
61
  uvx pip-audit==2.10.1 -r requirements-audit.txt
59
62
 
63
+ # ── Security gate: static analysis of the workflows themselves ───────────
64
+ # Everything else in this file audits the Python we ship. Nothing audited the
65
+ # CI that ships it, and CI is a supply-chain surface in its own right: it
66
+ # holds a repository token, it publishes to PyPI, and its inputs (branch
67
+ # names, PR titles, fork content) are attacker-controllable text.
68
+ #
69
+ # zizmor is what turns that into a gate. It found real defects on its first
70
+ # run over this repo (#565): 12 checkouts persisting the job token into the
71
+ # workspace, and `${{ github.base_ref }}` interpolated straight into a
72
+ # governance-advisory shell script. Both are fixed; this job is what stops
73
+ # them coming back one copy-pasted step at a time.
74
+ workflow-audit:
75
+ name: Workflow audit (zizmor)
76
+ runs-on: ubuntu-latest
77
+ steps:
78
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
79
+ with:
80
+ persist-credentials: false
81
+
82
+ - name: Install uv
83
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
84
+
85
+ - name: Audit workflows (zizmor)
86
+ # --offline: the online audits need a GH token and reach the network, so
87
+ # they would make this gate non-deterministic and unrunnable on fork
88
+ # PRs. Action freshness/pinning is already covered by Dependabot plus
89
+ # Scorecard's Pinned-Dependencies check.
90
+ # --min-severity low: informational findings are advisory, not defects.
91
+ # The one open today is `superfluous-actions` on
92
+ # softprops/action-gh-release; rewriting the release publisher is not
93
+ # a hardening change and is deliberately declined (docs/GITHUB.md).
94
+ # Version pinned for a reproducible gate — uvx has no Dependabot
95
+ # ecosystem, so bump it by hand (the pin is asserted by
96
+ # tests/scripts/test_workflow_hardening.py, which fails if the two drift).
97
+ run: uvx zizmor==1.29.0 --offline --min-severity low .github/workflows/
98
+
60
99
  # ── Supply-chain gate: resolve WITHOUT the lockfile ───────────────────────
61
100
  # Every other job installs via `uv sync`, which honours uv.lock. That means CI
62
101
  # never exercises the version RANGES in pyproject.toml — the exact blind spot
@@ -73,9 +112,11 @@ jobs:
73
112
  runs-on: ubuntu-latest
74
113
  steps:
75
114
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
115
+ with:
116
+ persist-credentials: false
76
117
 
77
118
  - name: Install uv
78
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
119
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
79
120
 
80
121
  - name: Set up Python
81
122
  run: uv python install 3.13
@@ -127,18 +168,24 @@ jobs:
127
168
  python-version: ["3.11", "3.12", "3.13"]
128
169
  steps:
129
170
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
171
+ with:
172
+ persist-credentials: false
130
173
 
131
174
  - name: Install uv
132
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
175
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
133
176
 
134
177
  - name: Set up Python
135
178
  run: uv python install ${{ matrix.python-version }}
136
179
 
180
+ # --frozen: install from the committed uv.lock without re-resolving it.
181
+ # Plain `uv sync` REWRITES uv.lock in place, which would silently repair
182
+ # the exact version drift the hygiene gate below exists to catch.
137
183
  - name: Install deps
138
- run: uv sync --extra dev
184
+ run: uv sync --frozen --extra dev
139
185
 
140
- - name: Repo hygiene (no artefacts, no hardcoded paths)
141
- run: uv run python scripts/ci/check_repo_hygiene.py
186
+ # --no-sync for the same reason: `uv run` re-locks before running.
187
+ - name: Repo hygiene (no artefacts, no hardcoded paths, version lockstep)
188
+ run: uv run --no-sync python scripts/ci/check_repo_hygiene.py
142
189
 
143
190
  - name: Documentation links
144
191
  run: uv run python scripts/ci/check_doc_links.py
@@ -196,9 +243,11 @@ jobs:
196
243
  os: [windows-latest, macos-latest, ubuntu-latest]
197
244
  steps:
198
245
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
246
+ with:
247
+ persist-credentials: false
199
248
 
200
249
  - name: Install uv
201
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
250
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
202
251
 
203
252
  - name: Set up Python
204
253
  run: uv python install 3.13
@@ -237,6 +286,7 @@ jobs:
237
286
  steps:
238
287
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
239
288
  with:
289
+ persist-credentials: false
240
290
  fetch-depth: 0 # shallow clones break blame / new-code detection
241
291
 
242
292
  - name: Download coverage report
@@ -29,9 +29,11 @@ jobs:
29
29
  runs-on: ubuntu-latest
30
30
  steps:
31
31
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
32
+ with:
33
+ persist-credentials: false
32
34
 
33
35
  - name: Install uv
34
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
36
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
35
37
 
36
38
  - name: Set up Python
37
39
  run: uv python install 3.13
@@ -1,7 +1,15 @@
1
1
  name: External PR Triage
2
2
 
3
+ # `pull_request_target` is deliberate and is the reason this file is the
4
+ # highest-risk surface in the repo: labelling a fork's PR needs a token forks
5
+ # cannot be given, and `pull_request` does not have one. The trigger is only
6
+ # unsafe when the workflow CHECKS OUT or EXECUTES the untrusted head — this one
7
+ # never does: there is no `actions/checkout` step at all, every PR field is read
8
+ # from `context.payload` inside github-script, and permissions are scoped to
9
+ # `issues`/`pull-requests` write. Keep all three properties or drop the
10
+ # suppression with them.
3
11
  on:
4
- pull_request_target:
12
+ pull_request_target: # zizmor: ignore[dangerous-triggers]
5
13
  types: [opened, reopened, synchronize, ready_for_review, edited]
6
14
 
7
15
  permissions:
@@ -21,13 +21,21 @@ jobs:
21
21
  steps:
22
22
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
23
23
  with:
24
+ persist-credentials: false
24
25
  fetch-depth: 0 # full history so `git diff origin/<base>..HEAD` resolves
25
26
 
26
27
  - name: Install uv
27
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
28
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
28
29
 
29
30
  - name: Classify touched paths (advisory, never blocks)
31
+ # BASE_REF arrives through `env:`, never interpolated into the script
32
+ # body: a branch name is attacker-supplied text, and `${{ ... }}` is
33
+ # substituted before the shell ever sees it (zizmor: template-injection).
34
+ # The fetch is belt-and-braces — `fetch-depth: 0` above already brings
35
+ # the base branch down — and needs no credential on a public repo.
36
+ env:
37
+ BASE_REF: ${{ github.base_ref }}
30
38
  run: |
31
- git fetch --no-tags origin "${{ github.base_ref }}" || true
39
+ git fetch --no-tags origin "$BASE_REF" || true
32
40
  uv run python scripts/ci/check_materiality.py \
33
- --base "origin/${{ github.base_ref }}"
41
+ --base "origin/$BASE_REF"
@@ -20,10 +20,11 @@ jobs:
20
20
  steps:
21
21
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
22
22
  with:
23
+ persist-credentials: false
23
24
  fetch-depth: 0 # full history — the backtest replays every commit
24
25
 
25
26
  - name: Install uv
26
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
27
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
27
28
 
28
29
  - name: Run backtest (advisory; writes to job summary)
29
30
  run: uv run python scripts/dev/materiality_backtest.py >> "$GITHUB_STEP_SUMMARY"
@@ -31,6 +31,8 @@ jobs:
31
31
  runs-on: ubuntu-latest
32
32
  steps:
33
33
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
34
+ with:
35
+ persist-credentials: false
34
36
  - name: Verify release artifacts
35
37
  env:
36
38
  BASE_REF: ${{ github.base_ref }}
@@ -27,6 +27,8 @@ jobs:
27
27
  runs-on: ubuntu-latest
28
28
  steps:
29
29
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
30
+ with:
31
+ persist-credentials: false
30
32
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
31
33
  with:
32
34
  python-version: "3.12"
@@ -25,10 +25,17 @@ jobs:
25
25
  steps:
26
26
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
27
27
  with:
28
+ persist-credentials: false
28
29
  fetch-depth: 0
29
30
 
30
31
  - name: Install uv
31
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
32
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
33
+ with:
34
+ # This is the one workflow that publishes artefacts (PyPI + GitHub
35
+ # Release), so it must not restore a cache any other workflow can
36
+ # write: a poisoned entry would reach a signed release. Releases are
37
+ # rare; the cold resolve costs seconds (zizmor: cache-poisoning).
38
+ enable-cache: false
32
39
 
33
40
  - name: Set up Python
34
41
  run: uv python install 3.12
@@ -47,6 +47,6 @@ jobs:
47
47
  retention-days: 5
48
48
 
49
49
  - name: Upload to code-scanning
50
- uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
50
+ uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
51
51
  with:
52
52
  sarif_file: results.sarif
@@ -0,0 +1,26 @@
1
+ name: Selector drift probe
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 5 * * *"
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ probe:
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 15
15
+ if: github.repository == 'ffroliva/gflow-cli'
16
+ steps:
17
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
18
+ with: { persist-credentials: false }
19
+ - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
20
+ - run: uv sync --frozen
21
+ - run: uv run playwright install chromium --with-deps
22
+ - name: Probe
23
+ env:
24
+ GFLOW_CI_SESSION_TOKEN: ${{ secrets.GFLOW_CI_SESSION_TOKEN }}
25
+ GFLOW_CI_PROJECT_ID: ${{ secrets.GFLOW_CI_PROJECT_ID }}
26
+ run: uv run python scripts/probe/run_probe.py --surface editor
@@ -7,6 +7,180 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.61.0] — 2026-08-27
11
+
12
+ ### Fixed
13
+
14
+ - **A requested image model that cannot be selected no longer generates silently
15
+ on a different one ([#586](https://github.com/ffroliva/gflow-cli/issues/586)).**
16
+ `_select_image_model` swallowed every failure, logged a warning, and let the
17
+ generation proceed on whatever the project's picker already held. Observed
18
+ live: `--model imagen4` produced an image on `NARWHAL` and exited **0** —
19
+ confirmed three ways (log, catalog, and `imageModelName` in a HAR). Flow has
20
+ removed `Imagen 4` from its picker, and `has-text('Nano Banana 2')` had become
21
+ ambiguous with the newly-offered `Nano Banana 2 Lite`, so `.first` resolved by
22
+ DOM order. A missing or ambiguous selector now raises `UiSelectorDriftError`
23
+ (exit 23) naming what Flow actually offered, before anything is submitted.
24
+
25
+ - **A requested video model that cannot be selected no longer generates on a
26
+ different one — and charges for it
27
+ ([#539](https://github.com/ffroliva/gflow-cli/issues/539)).** `_select_video_model`
28
+ refused only on i2v-with-frames; a plain `t2v`/`r2v` miss logged "Flow default
29
+ model applies" and returned, so the run generated on whatever the picker already
30
+ held and spent that tier's credits — veo-quality costs 100 against veo-lite's 10.
31
+ Read live, Flow's picker offers exactly `Omni Flash` / `Veo 3.1 - Lite` / `Fast` /
32
+ `Quality`, so `--model veo-lite-lp` matched nothing and was a reachable,
33
+ credit-spending wrong-model path. Every miss is now fatal (exit 18) naming what
34
+ Flow offered, and an **ambiguous** selector is refused rather than resolved with
35
+ `.first`, which picks by DOM order across tiers that differ 10x in cost. Unlike
36
+ the image arm, refusing is unambiguous here: `--model` defaults to `None` on
37
+ every video command, so reaching the picker means a model was explicitly asked
38
+ for. Verified with a zero-credit A/B against live Flow — the pre-fix code
39
+ returned success for a model Flow does not offer; the new code refuses.
40
+
41
+ - **Four more navigations settle before acting on the page
42
+ ([#584](https://github.com/ffroliva/gflow-cli/issues/584)).** #580 settled the
43
+ three sites it touched; an audit of every `page.goto` found four more with the
44
+ same defect. The worst is `evaluate_fetch.refresh_auth`, which re-navigates to
45
+ refresh page-context tokens and reported success while the page was still
46
+ moving. Two more (`evaluate_fetch` setup, `sapisidhash` fingerprint capture)
47
+ run `page.evaluate` immediately after navigating, where a mid-flight redirect
48
+ raises "Execution context was destroyed" rather than failing quietly. The
49
+ fourth (`_enter_editor`'s gallery return) ran `_bypass_onboarding` — real
50
+ button clicks — on a page about to navigate away. A new AST-based test pins
51
+ every `goto` to a following settle, so the audit does not have to be redone
52
+ by hand.
53
+
54
+ - **The nightly canary now runs the version of itself that it just pulled
55
+ ([#582](https://github.com/ffroliva/gflow-cli/issues/582)).** `run_canary.py
56
+ --pull` fast-forwards the checkout and then keeps executing the copy Python
57
+ loaded at startup, so every runner change was silently one night late. This was
58
+ not theoretical: #572 added `-o junit_logging=all` so a preserved RED would
59
+ carry the structlog line that decides #561, and the next run pulled it and
60
+ still produced a RED with zero log output — three REDs untriageable, and the
61
+ failure reads as "the fix did not work". The runner now re-runs itself once
62
+ when a successful pull changed its own source, guarded by both an env var and
63
+ a content digest (either alone prevents a loop), via `subprocess.run` rather
64
+ than `os.execv` so Task Scheduler still sees one process and the real exit code.
65
+
66
+ - **Editor navigation no longer races a locale redirect on non-`en` accounts
67
+ ([#580](https://github.com/ffroliva/gflow-cli/issues/580)).** `_enter_editor`
68
+ built its URL from a hardcoded `locale="en-US"` that no caller ever overrode,
69
+ so every account was sent to `/fx/en/...`. On a pt-BR account Flow redirects
70
+ that to `/fx/pt/...` **after `page.goto` has already returned** — leaving
71
+ overlay dismissal and prompt submission running against a page about to be
72
+ navigated away. That is how [#395](https://github.com/ffroliva/gflow-cli/issues/395)'s
73
+ "character-route bounce" presented. The client now learns the account's real
74
+ locale from where Flow itself lands (the only trustworthy source: `auth/session`
75
+ carries no locale, and `navigator.language` reports the value gflow sets when
76
+ launching the context), hands it to the transport through the typed
77
+ `TransportSetup` seam, and an independent settle-wait tolerates any redirect we
78
+ did not predict. An unresolved locale omits the segment rather than guessing.
79
+ `gflow character create --locale` now defaults to the account's locale instead
80
+ of `en-US`; the previous hardcoded default meant the character editor — the
81
+ surface #395 was reported against — was still routed to `/fx/en/...` on every
82
+ account, and the character route never waited for a settle at all.
83
+
84
+ Live-verified on a pt-BR account with a control arm: the fix navigates
85
+ race-free while the pre-fix path still redirects. Accounts Flow does not
86
+ redirect (e.g. `en`) skip the wait entirely after a single bounded probe, so
87
+ they pay no per-navigation cost.
88
+
89
+ ### Added
90
+
91
+ - **Server-side model attribution
92
+ ([#586](https://github.com/ffroliva/gflow-cli/issues/586)).**
93
+ `parse_media_attribution` reads `modelNameType` / `seed` / `aspectRatio` from
94
+ the `flow.projectInitialData` listing gflow already fetches — the same payload
95
+ the sync path walks for `name` and discards the rest of. This matters most on
96
+ the **agentic** arm, where those fields were previously synthesised from our
97
+ own request because they live in a Web-Worker SSE stream Playwright cannot
98
+ observe; "not visible to the page" was never the same as "unknowable". Verified
99
+ live: an agentic run that requested `GEM_PIX_2` was attributed `NARWHAL` by the
100
+ server, with a real seed where the catalog held `0`.
101
+
102
+ ## [0.60.0] — 2026-08-25
103
+
104
+ ### Added
105
+
106
+ - **Selector registry + nightly CI drift probe
107
+ ([#404](https://github.com/ffroliva/gflow-cli/issues/404),
108
+ [#493](https://github.com/ffroliva/gflow-cli/issues/493),
109
+ [#313](https://github.com/ffroliva/gflow-cli/issues/313)).** New
110
+ `gflow_cli.flow_selectors` package: a structured, enumerable inventory of the
111
+ Flow DOM selectors gflow depends on (`Surface`, `Selector`) plus a pure
112
+ grader (`HIT` / `FALLBACK` / `AMBIGUOUS` / `MISS` / `EXPECTED_ABSENT`), so
113
+ selector drift is *named* rather than inferred from a failing test. A $0
114
+ probe (`scripts/probe/run_probe.py`, driven by the `selector-probe` workflow
115
+ on `schedule` + `workflow_dispatch` only) walks the registry against a live
116
+ editor: navigate and read only, never generates. Exit 0 clean / 1 drift /
117
+ 2 inconclusive — an expired token or dead project is never published as
118
+ drift.
119
+
120
+ - **Incident bundles record what was submitted
121
+ ([#528](https://github.com/ffroliva/gflow-cli/issues/528)).**
122
+ `network.json` gains a `generation_requests` array carrying a counts-only
123
+ summary of each outgoing generation submit (body size, reference-entity
124
+ count, reference-field count). The reference shape that triggers a policy 400
125
+ was previously visible only in the stderr stream, so bundles attached to an
126
+ issue could not be diagnosed. Counts and booleans only — no key names, field
127
+ values, or prompt text — matching the existing §5.3 retention boundary.
128
+
129
+ ### Changed
130
+
131
+ - **All labs.google requests now carry `origin`/`referer`
132
+ ([#578](https://github.com/ffroliva/gflow-cli/pull/578)).** Header
133
+ construction moved into a single `_request_headers()` shared by
134
+ `_post_json`/`_patch_json`/`_get_json`, which previously assembled headers
135
+ inline three times and could diverge per verb. The labs lane now sends the
136
+ same `origin`/`referer` every other lane already sent. A live A/B against
137
+ `project.createProject` showed these headers are **not** required — an
138
+ origin-less mutation still returns 200 — so this is consistency and
139
+ defence-in-depth, not a fix for any observed failure.
140
+
141
+ ### Fixed
142
+
143
+ - **Content-policy 400s are no longer misclassified as `WireFormatError`
144
+ ([#528](https://github.com/ffroliva/gflow-cli/issues/528)).** An HTTP 400 from
145
+ `flowMedia:batchGenerateImages` or `batchAsyncGenerateVideo*` now raises
146
+ `ContentPolicyError` with remediation that names the levers that actually
147
+ work — reduce to a single face-bearing reference, replace age-explicit person
148
+ descriptors with relational or role nouns — and states outright that
149
+ shortening the prompt does not help. Previously these surfaced as "the
150
+ request was rejected as malformed… retry with a simpler prompt text", which
151
+ sends operators down a path that cannot succeed. Same defect shape as
152
+ [#379](https://github.com/ffroliva/gflow-cli/issues/379) (429), one status
153
+ over, and the self-documenting-errors goal of
154
+ [#380](https://github.com/ffroliva/gflow-cli/issues/380).
155
+ - **Video generation gained the 429 branch the image path got in #379.** A
156
+ quota hit on `batchAsyncGenerateVideo*` raised `WireFormatError` instead of
157
+ `RateLimitError`, losing `Retry-After` and the retryable classification.
158
+ - **`generate_images_batch` no longer reports a bare, remediation-free
159
+ `GFlowError`** when every response failed — it classifies the first error the
160
+ same way the single-prompt path does.
161
+
162
+ ### Security
163
+
164
+ - **CI/CD supply-chain hardening
165
+ ([#565](https://github.com/ffroliva/gflow-cli/issues/565)).** Every
166
+ `actions/checkout` step now sets `persist-credentials: false` (12 existing
167
+ steps fixed across `ci.yml`, `deps-watch.yml`, `governance-advisory.yml`,
168
+ `governance-benchmark.yml`, `main-base-guard.yml`, `pages.yml` and
169
+ `release.yml`); the default leaves the job token in `.git/config` for the rest
170
+ of the job. No workflow needed it — releases publish over PyPI Trusted
171
+ Publishing (OIDC) and Pages deploys over `actions/deploy-pages`. A new
172
+ `workflow-audit` job runs [zizmor](https://github.com/zizmorcore/zizmor)
173
+ (pinned, `--offline`) over `.github/workflows/` on every push and PR, so the
174
+ class cannot come back. Its first run also caught two defects the manual pass
175
+ missed: `${{ github.base_ref }}` interpolated directly into a
176
+ `governance-advisory.yml` shell script (template injection — the value now
177
+ arrives through `env:`), and a shared uv cache restored by the publishing
178
+ release job (cache poisoning — caching is now off there). The
179
+ `pull_request_target` trigger in `external-pr-triage.yml` is suppressed inline
180
+ with its rationale, and a changelog-guard workflow was evaluated and declined
181
+ — both decisions recorded in
182
+ [docs/GITHUB.md § Workflow Security Gates](docs/GITHUB.md#workflow-security-gates).
183
+
10
184
  ## [0.59.0] — 2026-08-16
11
185
 
12
186
  ### Added
@@ -3073,7 +3247,9 @@ shell-script template that branches on these codes.
3073
3247
 
3074
3248
  First skeleton. Not functional end-to-end yet.
3075
3249
 
3076
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...HEAD
3250
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...HEAD
3251
+ [0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
3252
+ [0.60.0]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...v0.60.0
3077
3253
  [0.59.0]: https://github.com/ffroliva/gflow-cli/compare/v0.58.0...v0.59.0
3078
3254
  [0.58.0]: https://github.com/ffroliva/gflow-cli/compare/v0.57.1...v0.58.0
3079
3255
  [0.57.1]: https://github.com/ffroliva/gflow-cli/compare/v0.57.0...v0.57.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.59.0
3
+ Version: 0.61.0
4
4
  Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
5
5
  Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
6
  Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
58
58
  Requires-Dist: pyright>=1.1.0; extra == 'dev'
59
59
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
60
60
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
61
- Requires-Dist: ruff==0.16.2; extra == 'dev'
61
+ Requires-Dist: ruff==0.16.4; extra == 'dev'
62
62
  Provides-Extra: gcs
63
63
  Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
64
64
  Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
@@ -16,6 +16,8 @@ The autopilot orchestrator (`scripts/autopilot/pr_triage_autopilot.py`) runs as
16
16
  | `TELEGRAM_USER_ID` | Autopilot orchestrator (host) | The chat ID to receive triage alert messages. |
17
17
  | `PR_TRIAGE_ENGINE` | Autopilot orchestrator (host), optional | Review engine selector. Default `council-claude`; any other value exits at startup (`council-multi-cli` is reserved backlog). |
18
18
  | `HERMES_OPS_DIR` | Autopilot orchestrator (host), optional | Location of the hermes-ops checkout hosting the Resend email notifier. Default `/opt/hermes-ops`. |
19
+ | `GH_SANDBOX_TOKEN` | Review **container** | Fine-grained **read-only** PAT for the repo under review. The container only reads the PR; the host posts the comment. If unset the orchestrator falls back and raises an alert rather than degrading silently. Stored in the SOPS secret store. |
20
+ | `GFLOW_TRIAGE_MEMORY_DIR` | Autopilot orchestrator (host), optional | Council memory directory mounted read-only for D5. Set it only to override the XDG default (`$XDG_DATA_HOME/gflow-cli/memory`, i.e. `~/.local/share/gflow-cli/memory`). **Never put a machine-specific path in the cron line** — see §2. |
19
21
  | `RESEND_API_KEY` | Email notifier (hermes-ops) | Resend API key consumed by `$HERMES_OPS_DIR/scripts/notify/email_notify.py`. |
20
22
  | `HERMES_NOTIFY_EMAIL_TO` | Email notifier (hermes-ops) | Recipient address for high-signal triage emails. |
21
23
  | `HERMES_NOTIFY_EMAIL_FROM` | Email notifier (hermes-ops) | Verified sender address for the Resend account. |
@@ -28,8 +30,19 @@ The autopilot orchestrator (`scripts/autopilot/pr_triage_autopilot.py`) runs as
28
30
 
29
31
  Deploy the following layout on the VPS:
30
32
  - `/opt/gflow-cli`: Dedicated git repository checkout representing the active branch.
31
- - `/opt/experience-vault`: Host experience vault directory structure.
32
- - `/opt/experience-vault/projects/C--development-github-gflow-cli/memory`: The project-specific memory namespace to mount.
33
+ - `~hermes/.local/share/gflow-cli/memory`: Council memory namespace, mounted read-only into the sandbox for dimension D5.
34
+
35
+ Create the memory directory once, as the user the cron runs under:
36
+
37
+ ```bash
38
+ sudo -u hermes mkdir -p ~hermes/.local/share/gflow-cli/memory
39
+ ```
40
+
41
+ An **empty** directory is a valid deployment — D5 then reports that no memory is available, and the other 13 dimensions run normally. Populate it only if you want the council to consult durable project memory.
42
+
43
+ > **The memory path is resolved by the orchestrator, never hardcoded.** Precedence is `--memory-dir` > `$GFLOW_TRIAGE_MEMORY_DIR` > `$XDG_DATA_HOME/gflow-cli/memory` (XDG default, falling back to `~/.local/share`). `XDG_DATA_HOME` is the correct slot per the XDG Base Directory Specification: council memory is durable knowledge that should be backed up, not regenerable cache or throwaway state.
44
+ >
45
+ > The orchestrator validates the resolved path on the host and refuses to start with an actionable error if it is missing, rather than failing later inside the container.
33
46
 
34
47
  ---
35
48
 
@@ -51,7 +64,7 @@ Ensure `iptables` is installed on the host VPS. If `iptables` permissions are wi
51
64
  Configure a cron job checking every hour on the hour under the `hermes` system user:
52
65
 
53
66
  ```cron
54
- 0 * * * * set -a; . /opt/hermes/.env 2>/dev/null; set +a; cd /opt/gflow-cli && uv run python scripts/autopilot/pr_triage_autopilot.py --repo-dir /opt/gflow-cli --memory-dir /opt/experience-vault/projects/C--development-github-gflow-cli/memory >> /var/log/hermes/pr_triage.log 2>&1
67
+ 0 * * * * set -a; . /opt/hermes/.env 2>/dev/null; set +a; cd /opt/gflow-cli && uv run python scripts/autopilot/pr_triage_autopilot.py --repo-dir /opt/gflow-cli >> /var/log/hermes/pr_triage.log 2>&1
55
68
  ```
56
69
 
57
70
  Sourcing `/opt/hermes/.env` first (`set -a` exports everything it defines) is what delivers `GH_COMMENT_TOKEN`, `TELEGRAM_*`, and the `RESEND_API_KEY` / `HERMES_NOTIFY_EMAIL_*` vars to the process. Without it the email channel silently disables itself, and without `GH_COMMENT_TOKEN` the run exits 1.
@@ -83,6 +96,17 @@ Do **NOT** register the orchestrator directly via `hermes cron create --script p
83
96
  - **(a) Plain crontab** — the line above, under the `hermes` system user.
84
97
  - **(b) Thin shim in `HERMES_HOME/scripts/`** — a script that does `cd /opt/gflow-cli && exec uv run python scripts/autopilot/pr_triage_autopilot.py "$@"` (mirrors the existing EV ops-health shim pattern), registered with `hermes cron create "1h" --no-agent --script <shim> --deliver telegram`.
85
98
 
99
+ ### Log rotation
100
+
101
+ `pr_triage.log` grows without bound otherwise. Install once, as root:
102
+
103
+ ```bash
104
+ install -m 644 /opt/gflow-cli/deploy/logrotate-pr-triage /etc/logrotate.d/pr-triage
105
+ logrotate --debug /etc/logrotate.d/pr-triage # dry-run
106
+ ```
107
+
108
+ Scoped to `pr_triage.log` alone — the rest of `/var/log/hermes/` belongs to hermes-ops, and two packages rotating one glob is how logs get silently truncated.
109
+
86
110
  ### Check Logs & Status
87
111
  - **Log Location**: `/var/log/hermes/pr_triage.log`
88
112
  - **Triage Ledger**: `/opt/gflow-cli/pr_triage_ledger.jsonl` tracks verdicts and failure states.
@@ -110,5 +134,5 @@ If a PR enters the `FAILED_PERMANENT` state in `pr_triage_ledger.jsonl` due to 3
110
134
  2. Fix the underlying environmental or syntax issue.
111
135
  3. To trigger a re-review, delete or edit the `FAILED_PERMANENT` entries for that PR number/SHA in `pr_triage_ledger.jsonl`, then run the script manually:
112
136
  ```bash
113
- uv run python scripts/autopilot/pr_triage_autopilot.py --repo-dir /opt/gflow-cli --memory-dir /opt/experience-vault/projects/C--development-github-gflow-cli/memory
137
+ uv run python scripts/autopilot/pr_triage_autopilot.py --repo-dir /opt/gflow-cli
114
138
  ```
@@ -0,0 +1,21 @@
1
+ # logrotate config for the PR-Triage Autopilot log.
2
+ #
3
+ # Install on the VPS as root:
4
+ # install -m 644 /opt/gflow-cli/deploy/logrotate-pr-triage /etc/logrotate.d/pr-triage
5
+ # logrotate --debug /etc/logrotate.d/pr-triage # dry-run to verify
6
+ #
7
+ # Scoped to pr_triage.log alone, not /var/log/hermes/*.log: the rest of that
8
+ # directory belongs to hermes-ops, and two packages rotating the same glob is
9
+ # how you get silently truncated logs.
10
+ /var/log/hermes/pr_triage.log {
11
+ weekly
12
+ rotate 8
13
+ compress
14
+ delaycompress
15
+ missingok
16
+ notifempty
17
+ # The hourly cron reopens the file on each tick, but copytruncate keeps
18
+ # rotation safe if the orchestrator is ever run as a long-lived process.
19
+ copytruncate
20
+ su hermes hermes
21
+ }