gflow-cli 0.58.0__tar.gz → 0.60.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 (812) hide show
  1. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.codex-plugin/plugin.json +1 -1
  2. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.env.template +7 -0
  3. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/ci.yml +57 -7
  4. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/deps-watch.yml +3 -1
  5. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/external-pr-triage.yml +9 -1
  6. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/governance-advisory.yml +11 -3
  7. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/governance-benchmark.yml +2 -1
  8. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/main-base-guard.yml +2 -0
  9. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/pages.yml +2 -0
  10. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/release.yml +8 -1
  11. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/scorecard.yml +1 -1
  12. gflow_cli-0.60.0/.github/workflows/selector-probe.yml +26 -0
  13. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/AGENTS.md +1 -1
  14. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/CHANGELOG.md +137 -1
  15. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/KNOWN_ISSUES.md +6 -4
  16. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/PKG-INFO +2 -2
  17. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +28 -4
  18. gflow_cli-0.60.0/deploy/logrotate-pr-triage +21 -0
  19. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/DATA_LAYER.md +24 -0
  20. {gflow_cli-0.58.0/website → gflow_cli-0.60.0}/docs/E2E_TESTING.md +159 -0
  21. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/GITHUB.md +87 -0
  22. gflow_cli-0.60.0/docs/INDEX.md +165 -0
  23. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.58.0.md +5 -2
  24. gflow_cli-0.60.0/docs/LIVE_VERIFICATION_v0.59.0.md +66 -0
  25. gflow_cli-0.60.0/docs/LIVE_VERIFICATION_v0.60.0.md +180 -0
  26. gflow_cli-0.60.0/docs/MEDIA_LIBRARY.md +188 -0
  27. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/PROJECT_STATUS.md +26 -1
  28. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/USAGE.md +140 -1
  29. gflow_cli-0.60.0/docs/superpowers/plans/2026-08-21-selector-registry.md +743 -0
  30. gflow_cli-0.60.0/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +171 -0
  31. gflow_cli-0.60.0/docs/superpowers/specs/2026-08-21-selector-registry-design.md +307 -0
  32. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/pyproject.toml +3 -3
  33. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/autopilot/Dockerfile.triage +4 -0
  34. gflow_cli-0.60.0/scripts/autopilot/entrypoint.sh +10 -0
  35. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/autopilot/package-lock.json +48 -36
  36. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/autopilot/package.json +1 -1
  37. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/autopilot/pr_triage_autopilot.py +105 -10
  38. gflow_cli-0.60.0/scripts/autopilot/run_sandboxed_review.sh +172 -0
  39. gflow_cli-0.60.0/scripts/canary/register_task.ps1 +79 -0
  40. gflow_cli-0.60.0/scripts/canary/run_canary.py +362 -0
  41. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_repo_hygiene.py +20 -6
  42. gflow_cli-0.60.0/scripts/dev/capture_project_listing.py +90 -0
  43. gflow_cli-0.60.0/scripts/dev/live_verify_policy_400_v060.py +142 -0
  44. gflow_cli-0.60.0/scripts/dev/spike_trpc_origin_referer_401.py +151 -0
  45. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/diag/README.md +1 -0
  46. gflow_cli-0.60.0/scripts/diag/diag_aisandbox_bearer.py +124 -0
  47. gflow_cli-0.60.0/scripts/probe/run_probe.py +210 -0
  48. gflow_cli-0.60.0/scripts/probe/spike_auth_matrix.py +131 -0
  49. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/__init__.py +1 -1
  50. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/client.py +145 -61
  51. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/_common.py +54 -0
  52. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/base.py +38 -2
  53. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/experimental/bearer.py +2 -0
  54. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +2 -0
  55. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +2 -0
  56. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/ui_automation.py +109 -28
  57. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/ui_automation_video.py +72 -10
  58. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli.py +2 -0
  59. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_data.py +257 -2
  60. gflow_cli-0.60.0/src/gflow_cli/cli_doctor.py +86 -0
  61. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_image.py +134 -2
  62. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_video.py +15 -0
  63. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/redaction.py +3 -1
  64. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/repository.py +172 -0
  65. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/store.py +79 -0
  66. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/diagnostics.py +72 -13
  67. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/errors.py +105 -1
  68. gflow_cli-0.60.0/src/gflow_cli/flow_selectors/__init__.py +1 -0
  69. gflow_cli-0.60.0/src/gflow_cli/flow_selectors/grading.py +51 -0
  70. gflow_cli-0.60.0/src/gflow_cli/flow_selectors/model.py +59 -0
  71. gflow_cli-0.60.0/src/gflow_cli/flow_selectors/registry.py +63 -0
  72. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/json_output.py +23 -0
  73. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/observability.py +14 -4
  74. gflow_cli-0.60.0/src/gflow_cli/services/catalog_sync.py +382 -0
  75. gflow_cli-0.60.0/src/gflow_cli/services/doctor.py +529 -0
  76. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_post_json_aisandbox_auth.py +74 -0
  77. gflow_cli-0.60.0/tests/api/transports/test_policy_400.py +185 -0
  78. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_ui_automation.py +16 -3
  79. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_ui_automation_batch.py +8 -8
  80. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_ui_automation_video.py +234 -0
  81. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/autopilot/test_pr_triage_autopilot.py +344 -2
  82. gflow_cli-0.60.0/tests/cli/test_cli_data_sync.py +243 -0
  83. gflow_cli-0.60.0/tests/cli/test_cli_doctor.py +264 -0
  84. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +122 -0
  85. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/conftest.py +31 -2
  86. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_redaction.py +7 -0
  87. gflow_cli-0.60.0/tests/data/test_repository.py +804 -0
  88. gflow_cli-0.60.0/tests/data/test_store.py +160 -0
  89. gflow_cli-0.60.0/tests/e2e/test_data_sync_names_e2e.py +208 -0
  90. gflow_cli-0.60.0/tests/e2e/test_refresh_on_miss_e2e.py +164 -0
  91. gflow_cli-0.60.0/tests/fixtures/doctor_env.py +58 -0
  92. gflow_cli-0.60.0/tests/fixtures/listing_payload.py +107 -0
  93. gflow_cli-0.60.0/tests/flow_selectors/test_grading.py +67 -0
  94. gflow_cli-0.60.0/tests/flow_selectors/test_model.py +37 -0
  95. gflow_cli-0.60.0/tests/flow_selectors/test_registry.py +47 -0
  96. gflow_cli-0.60.0/tests/flow_selectors/test_report.py +57 -0
  97. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_cli_parity.py +2 -0
  98. gflow_cli-0.60.0/tests/scripts/test_canary_classify.py +326 -0
  99. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_check_repo_hygiene.py +46 -2
  100. gflow_cli-0.60.0/tests/scripts/test_workflow_hardening.py +203 -0
  101. gflow_cli-0.60.0/tests/services/test_catalog_sync.py +572 -0
  102. gflow_cli-0.60.0/tests/services/test_doctor.py +577 -0
  103. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_errors_classification.py +9 -8
  104. gflow_cli-0.60.0/tests/test_incident_generation_requests.py +94 -0
  105. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_self_documenting_errors.py +34 -5
  106. gflow_cli-0.60.0/tests/tools/__init__.py +0 -0
  107. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/uv.lock +53 -53
  108. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/DATA_LAYER.md +24 -0
  109. {gflow_cli-0.58.0 → gflow_cli-0.60.0/website}/docs/E2E_TESTING.md +159 -0
  110. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/KNOWN_ISSUES.md +6 -4
  111. gflow_cli-0.60.0/website/docs/MEDIA_LIBRARY.md +188 -0
  112. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/USAGE.md +140 -1
  113. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/mkdocs.yml +1 -0
  114. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/requirements.txt +3 -3
  115. gflow_cli-0.58.0/docs/INDEX.md +0 -155
  116. gflow_cli-0.58.0/scripts/autopilot/entrypoint.sh +0 -9
  117. gflow_cli-0.58.0/scripts/autopilot/run_sandboxed_review.sh +0 -115
  118. gflow_cli-0.58.0/tests/data/test_repository.py +0 -418
  119. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.agents/plugins/marketplace.json +0 -0
  120. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/README.md +0 -0
  121. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/active.md +0 -0
  122. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/branch-review.md +0 -0
  123. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/changelog.md +0 -0
  124. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/check.md +0 -0
  125. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/doc-review.md +0 -0
  126. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  127. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  128. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/known-issues.md +0 -0
  129. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/live-verify.md +0 -0
  130. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/llm-council.md +0 -0
  131. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/next.md +0 -0
  132. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/plan.md +0 -0
  133. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  134. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/predict.md +0 -0
  135. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/release.md +0 -0
  136. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/scenario.md +0 -0
  137. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/sonar.md +0 -0
  138. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.claude/commands/gflow/status.md +0 -0
  139. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.gitattributes +0 -0
  140. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/CODEOWNERS +0 -0
  141. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  142. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/copilot-instructions.md +0 -0
  143. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/dependabot.yml +0 -0
  144. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.github/workflows/labels.yml +0 -0
  145. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.gitignore +0 -0
  146. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.gitleaks.toml +0 -0
  147. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.pre-commit-config.yaml +0 -0
  148. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/.secrets.baseline +0 -0
  149. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/CLAUDE.md +0 -0
  150. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/CONFIGURATION.md +0 -0
  151. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/CONTRIBUTING.md +0 -0
  152. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/DISCLAIMER.md +0 -0
  153. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/LICENSE +0 -0
  154. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/PLAN.md +0 -0
  155. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/README.md +0 -0
  156. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/RELEASE.md +0 -0
  157. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/ROADMAP.md +0 -0
  158. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/conftest.py +0 -0
  159. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docker-compose.yml +0 -0
  160. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/AGENT_GUIDE.md +0 -0
  161. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/AGENT_UI_E2E.md +0 -0
  162. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/AGENT_UI_RECON.md +0 -0
  163. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/ARCHITECTURE.md +0 -0
  164. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  165. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/AUTHENTICATION.md +0 -0
  166. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/CHARACTER.md +0 -0
  167. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/CHARACTER_RECON.md +0 -0
  168. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/CONFIGURATION.md +0 -0
  169. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/DEBUGGING.md +0 -0
  170. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/DEMOS.md +0 -0
  171. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/DEVELOPMENT.md +0 -0
  172. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/EXTERNAL_STORAGE.md +0 -0
  173. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  174. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  175. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/INSTRUCTIONS.md +0 -0
  176. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  177. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  178. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
  179. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  180. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  181. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  182. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  183. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  184. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  185. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  186. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  187. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  188. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  189. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  190. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  191. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  192. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  193. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  194. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  195. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  196. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  197. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  198. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  199. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  200. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  201. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  202. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  203. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  204. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  205. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  206. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  207. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  208. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  209. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  210. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  211. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  212. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  213. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  214. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  215. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
  216. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
  217. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
  218. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
  219. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
  220. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
  221. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
  222. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
  223. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
  224. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
  225. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
  226. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
  227. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
  228. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
  229. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
  230. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
  231. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  232. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  233. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  234. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  235. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  236. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/MCP.md +0 -0
  237. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/MOVIE.md +0 -0
  238. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/PROMPT_EXPANSION.md +0 -0
  239. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  240. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/SECURITY.md +0 -0
  241. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/TOOLS.md +0 -0
  242. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/USER_GUIDE.md +0 -0
  243. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/assets/demo-split-pf.gif +0 -0
  244. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/assets/example-run.gif +0 -0
  245. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/assets/examples.webp +0 -0
  246. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/medium_tutorial.md +0 -0
  247. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/schemas/movie-handoff.schema.json +0 -0
  248. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/sonar-cleanup-tracker.md +0 -0
  249. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  250. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  251. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  252. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  253. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  254. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  255. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  256. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  257. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  258. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  259. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  260. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  261. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  262. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  263. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  264. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  265. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  266. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  267. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  268. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
  269. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
  270. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
  271. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
  272. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
  273. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
  274. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
  275. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
  276. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
  277. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
  278. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
  279. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
  280. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
  281. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
  282. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
  283. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
  284. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
  285. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
  286. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
  287. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
  288. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
  289. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
  290. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  291. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  292. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  293. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  294. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  295. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  296. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  297. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  298. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  299. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
  300. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
  301. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
  302. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/eval/pr_triage_eval.py +0 -0
  303. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/eval/pr_triage_fixtures.json +0 -0
  304. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/README.md +0 -0
  305. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/batch_from_config.py +0 -0
  306. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/multi_prompt_t2i.py +0 -0
  307. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/sample_config.json +0 -0
  308. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/sample_prompts.txt +0 -0
  309. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/single_image_t2i.py +0 -0
  310. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/examples/workflow_chain.py +0 -0
  311. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/index.html +0 -0
  312. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/llms.txt +0 -0
  313. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/README.md +0 -0
  314. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/01_upload_image.json +0 -0
  315. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  316. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  317. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/04_archive_workflow.json +0 -0
  318. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/05_createProject.json +0 -0
  319. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/06_batchGenerateImages.json +0 -0
  320. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  321. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  322. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  323. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  324. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  325. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/12_create_scene.json +0 -0
  326. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  327. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/14_get_scene_workflows.json +0 -0
  328. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  329. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  330. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_doc_links.py +0 -0
  331. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_materiality.py +0 -0
  332. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_release_artifacts.py +0 -0
  333. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_test_count.py +0 -0
  334. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/check_website_docs_pii.py +0 -0
  335. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/ci/generate_website_docs.py +0 -0
  336. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/debug_editor.py +0 -0
  337. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/debug_gen_settings.py +0 -0
  338. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/debug_settings.py +0 -0
  339. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/_recording_client.py +0 -0
  340. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/_spike_common.py +0 -0
  341. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/active_plan.py +0 -0
  342. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  343. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
  344. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  345. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  346. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  347. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  348. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  349. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_locale_invariants.py +0 -0
  350. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
  351. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
  352. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
  353. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
  354. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  355. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/character_create_spike.py +0 -0
  356. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/character_create_spike_v2.py +0 -0
  357. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/dump_character_selectors.js +0 -0
  358. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/incident_bundle_quality.py +0 -0
  359. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
  360. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/make_project.py +0 -0
  361. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/materiality_backtest.py +0 -0
  362. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/patch_character.py +0 -0
  363. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/skillopt/README.md +0 -0
  364. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/skillopt/harness.py +0 -0
  365. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/skillopt/tasks.json +0 -0
  366. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/sonar-local-scan.sh +0 -0
  367. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  368. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  369. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  370. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_character_prompt_format.py +0 -0
  371. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  372. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  373. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  374. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  375. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_incident_live.py +0 -0
  376. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  377. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  378. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  379. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  380. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
  381. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  382. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  383. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  384. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  385. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  386. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  387. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  388. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
  389. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_patch_entity.py +0 -0
  390. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/dev/spike_patchright.py +0 -0
  391. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/diag/capture_flow_traffic.py +0 -0
  392. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/diag/memory_profile.py +0 -0
  393. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/diag/recaptcha_mint.py +0 -0
  394. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/diag/spike_387_openai_compat.py +0 -0
  395. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  396. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  397. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/record_demo.ps1 +0 -0
  398. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/smoke_image.py +0 -0
  399. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/smoke_video_editor.py +0 -0
  400. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/smoke_worker_style.py +0 -0
  401. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/spike_waf_camoufox.py +0 -0
  402. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/scripts/verify_chrome_auth_viability.py +0 -0
  403. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/README.md +0 -0
  404. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/changelog/SKILL.md +0 -0
  405. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/check/SKILL.md +0 -0
  406. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/doc-review/SKILL.md +0 -0
  407. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/gflow-cli/SKILL.md +0 -0
  408. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/issue-assessment/SKILL.md +0 -0
  409. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/issue-resolve/SKILL.md +0 -0
  410. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/known-issues/SKILL.md +0 -0
  411. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/live-verify/SKILL.md +0 -0
  412. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/llm-council/SKILL.md +0 -0
  413. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/plan/SKILL.md +0 -0
  414. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/pr-council-review/SKILL.md +0 -0
  415. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/predict/SKILL.md +0 -0
  416. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/release/SKILL.md +0 -0
  417. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/scenario/SKILL.md +0 -0
  418. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/sonar/SKILL.md +0 -0
  419. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/skills/status/SKILL.md +0 -0
  420. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/sonar-project.properties +0 -0
  421. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/__main__.py +0 -0
  422. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/_cli_helpers.py +0 -0
  423. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/__init__.py +0 -0
  424. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/_engine.py +0 -0
  425. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/_retry.py +0 -0
  426. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  427. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/character.py +0 -0
  428. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/dto.py +0 -0
  429. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/image.py +0 -0
  430. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/image_upscale.py +0 -0
  431. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/recaptcha.py +0 -0
  432. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/routes.py +0 -0
  433. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/scene.py +0 -0
  434. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  435. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  436. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  437. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  438. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  439. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  440. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  441. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  442. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  443. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/api/video.py +0 -0
  444. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/__init__.py +0 -0
  445. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/base.py +0 -0
  446. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/cookies.py +0 -0
  447. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/factory.py +0 -0
  448. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  449. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  450. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/strategies.py +0 -0
  451. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/auth/verification.py +0 -0
  452. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/browser_manager.py +0 -0
  453. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/chain.py +0 -0
  454. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/chain_manifest.py +0 -0
  455. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_character.py +0 -0
  456. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_instructions.py +0 -0
  457. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_models.py +0 -0
  458. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_movie.py +0 -0
  459. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_project.py +0 -0
  460. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_run.py +0 -0
  461. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_scene.py +0 -0
  462. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/cli_tools.py +0 -0
  463. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/composition.py +0 -0
  464. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/config.py +0 -0
  465. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/__init__.py +0 -0
  466. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/chain_repo.py +0 -0
  467. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  468. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  469. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  470. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  471. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  472. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  473. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  474. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  475. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  476. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  477. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/models.py +0 -0
  478. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/queries.py +0 -0
  479. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/data/recorder.py +0 -0
  480. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/exceptions.py +0 -0
  481. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/file_integrity.py +0 -0
  482. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/image_batch.py +0 -0
  483. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/__init__.py +0 -0
  484. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/prompts.py +0 -0
  485. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/resources.py +0 -0
  486. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/server.py +0 -0
  487. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/setup.py +0 -0
  488. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
  489. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/mcp/tools.py +0 -0
  490. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/media.py +0 -0
  491. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/movie_manifest.py +0 -0
  492. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/paths.py +0 -0
  493. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/profile_lease.py +0 -0
  494. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/profile_store.py +0 -0
  495. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/redaction.py +0 -0
  496. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/services/__init__.py +0 -0
  497. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/services/character_create.py +0 -0
  498. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/services/mentions.py +0 -0
  499. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/storage.py +0 -0
  500. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/__init__.py +0 -0
  501. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/banned.py +0 -0
  502. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  503. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  504. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  505. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  506. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/expander.py +0 -0
  507. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/invocation.py +0 -0
  508. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/loader.py +0 -0
  509. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/registry.py +0 -0
  510. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/runtime.py +0 -0
  511. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/tools/spec.py +0 -0
  512. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/ui/app.py +0 -0
  513. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/ui/server.py +0 -0
  514. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/update_check.py +0 -0
  515. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/winsec.py +0 -0
  516. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/worker/codec.py +0 -0
  517. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/worker/daemon.py +0 -0
  518. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/src/gflow_cli/worker/queue.py +0 -0
  519. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tasks/lessons.md +0 -0
  520. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/test_assets/sample_batch.json +0 -0
  521. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/test_assets/sample_batch.tsv +0 -0
  522. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/test_assets/sample_batch_invalid.tsv +0 -0
  523. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/__init__.py +0 -0
  524. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/__init__.py +0 -0
  525. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/fixtures/character_gen_response.json +0 -0
  526. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  527. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  528. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  529. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_bearer_redaction.py +0 -0
  530. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_character.py +0 -0
  531. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client.py +0 -0
  532. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_character.py +0 -0
  533. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_delete_characters.py +0 -0
  534. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_errors.py +0 -0
  535. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_generate_character.py +0 -0
  536. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_image.py +0 -0
  537. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_incidents.py +0 -0
  538. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_launch_kwargs.py +0 -0
  539. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_patch_entity.py +0 -0
  540. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_scene.py +0 -0
  541. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_client_upscale.py +0 -0
  542. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_concurrency.py +0 -0
  543. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_dto.py +0 -0
  544. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_engine.py +0 -0
  545. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_image.py +0 -0
  546. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_image_dto.py +0 -0
  547. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_image_upscale.py +0 -0
  548. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_recaptcha.py +0 -0
  549. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_retry.py +0 -0
  550. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_routes.py +0 -0
  551. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_routes_character.py +0 -0
  552. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_routes_scene.py +0 -0
  553. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_sapisidhash_helper.py +0 -0
  554. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_scene_models.py +0 -0
  555. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_video.py +0 -0
  556. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/test_video_request.py +0 -0
  557. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/__init__.py +0 -0
  558. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/conftest.py +0 -0
  559. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/drivers/__init__.py +0 -0
  560. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  561. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/drivers/test_classic.py +0 -0
  562. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/drivers/test_factory.py +0 -0
  563. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  564. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  565. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_base.py +0 -0
  566. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_bearer.py +0 -0
  567. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_common.py +0 -0
  568. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  569. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_factory.py +0 -0
  570. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_fingerprint.py +0 -0
  571. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_mode_control.py +0 -0
  572. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_sapisidhash.py +0 -0
  573. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  574. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_transport_timeout.py +0 -0
  575. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  576. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  577. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/strategies/test_factory.py +0 -0
  578. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/strategies/test_strategies.py +0 -0
  579. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/test_cookies.py +0 -0
  580. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/test_real_chrome.py +0 -0
  581. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/test_verification.py +0 -0
  582. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/auth/test_windows_acl.py +0 -0
  583. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/__init__.py +0 -0
  584. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_auth_status.py +0 -0
  585. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_auth_list.py +0 -0
  586. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_character.py +0 -0
  587. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_character_create.py +0 -0
  588. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_data.py +0 -0
  589. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_data_errors.py +0 -0
  590. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
  591. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_image.py +0 -0
  592. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  593. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  594. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_image_upscale.py +0 -0
  595. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_instructions.py +0 -0
  596. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_models.py +0 -0
  597. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_movie.py +0 -0
  598. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_run.py +0 -0
  599. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_scene.py +0 -0
  600. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_tools.py +0 -0
  601. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_video.py +0 -0
  602. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_cli_video_chain.py +0 -0
  603. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_error_handling.py +0 -0
  604. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_failure_funnel.py +0 -0
  605. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_helpers.py +0 -0
  606. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_incident_output.py +0 -0
  607. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_movie_manifest.py +0 -0
  608. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  609. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_predictable_output.py +0 -0
  610. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_settings_validation.py +0 -0
  611. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  612. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/composition/test_character.py +0 -0
  613. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/composition/test_compose_prompt.py +0 -0
  614. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/composition/test_handoff.py +0 -0
  615. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/composition/test_style_variants.py +0 -0
  616. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/composition/test_style_variants_e2e.py +0 -0
  617. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/__init__.py +0 -0
  618. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_chain_repo.py +0 -0
  619. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_failure_recording.py +0 -0
  620. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_find_incomplete_character.py +0 -0
  621. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_models.py +0 -0
  622. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_packaging.py +0 -0
  623. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_recorder.py +0 -0
  624. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_recorder_character.py +0 -0
  625. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_scene_persistence.py +0 -0
  626. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_settings_and_errors.py +0 -0
  627. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/data/test_store_migrations.py +0 -0
  628. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/dev/test_recording_client.py +0 -0
  629. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/__init__.py +0 -0
  630. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/conftest.py +0 -0
  631. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  632. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  633. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  634. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  635. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  636. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_chain_e2e.py +0 -0
  637. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_character_create_e2e.py +0 -0
  638. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
  639. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  640. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_daemon_e2e.py +0 -0
  641. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  642. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
  643. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  644. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  645. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  646. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  647. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
  648. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  649. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_json_output_e2e.py +0 -0
  650. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  651. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  652. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_project_naming_e2e.py +0 -0
  653. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_scene_compose_live.py +0 -0
  654. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
  655. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_tools_e2e.py +0 -0
  656. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_transports_e2e.py +0 -0
  657. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  658. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
  659. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  660. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/__init__.py +0 -0
  661. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/asset_tagging.feature +0 -0
  662. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/auth.feature +0 -0
  663. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/auth_login.feature +0 -0
  664. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/character_create.feature +0 -0
  665. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/character_read.feature +0 -0
  666. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/conftest.py +0 -0
  667. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/duration_tab_drift.feature +0 -0
  668. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/entity_provenance.feature +0 -0
  669. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/image.feature +0 -0
  670. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/image_batch_references.feature +0 -0
  671. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/image_upscale.feature +0 -0
  672. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/incident_diagnostics.feature +0 -0
  673. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/instructions.feature +0 -0
  674. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/locale_picker_include.feature +0 -0
  675. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/mcp_tasks.feature +0 -0
  676. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/media_picker_tiers.feature +0 -0
  677. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/output_hardening.feature +0 -0
  678. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_asset_tagging_steps.py +0 -0
  679. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_auth_login_steps.py +0 -0
  680. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_auth_steps.py +0 -0
  681. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_character_create_steps.py +0 -0
  682. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_character_read_steps.py +0 -0
  683. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_image_steps.py +0 -0
  684. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_image_upscale_steps.py +0 -0
  685. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  686. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_instructions_steps.py +0 -0
  687. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  688. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_mcp_tasks_steps.py +0 -0
  689. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
  690. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_output_hardening_steps.py +0 -0
  691. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_step_collision_guard.py +0 -0
  692. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  693. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/test_video_chain_steps.py +0 -0
  694. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/video_agent_ui.feature +0 -0
  695. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/features/video_chain.feature +0 -0
  696. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/fixtures/__init__.py +0 -0
  697. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/fixtures/seeded_catalog.py +0 -0
  698. {gflow_cli-0.58.0/tests/image_batch → gflow_cli-0.60.0/tests/flow_selectors}/__init__.py +0 -0
  699. {gflow_cli-0.58.0/tests/integration → gflow_cli-0.60.0/tests/image_batch}/__init__.py +0 -0
  700. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/image_batch/test_image_manifest.py +0 -0
  701. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/image_batch/test_jitter_config.py +0 -0
  702. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/image_batch/test_observability_events.py +0 -0
  703. {gflow_cli-0.58.0/tests/services → gflow_cli-0.60.0/tests/integration}/__init__.py +0 -0
  704. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/integration/conftest.py +0 -0
  705. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/integration/constants.py +0 -0
  706. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/integration/test_expander_gateway.py +0 -0
  707. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/integration/test_storage_gcs.py +0 -0
  708. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/integration/test_storage_s3.py +0 -0
  709. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/__init__.py +0 -0
  710. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/conftest.py +0 -0
  711. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_auth_status_tool.py +0 -0
  712. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_error_funnel.py +0 -0
  713. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_http_transport.py +0 -0
  714. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_known_issues_resource.py +0 -0
  715. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_no_spend.py +0 -0
  716. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
  717. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_resources.py +0 -0
  718. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_server.py +0 -0
  719. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_setup.py +0 -0
  720. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_stdio_transport.py +0 -0
  721. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_tasks_extension.py +0 -0
  722. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_tools_helpers.py +0 -0
  723. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_tools_instructions.py +0 -0
  724. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/mcp/test_tools_wired.py +0 -0
  725. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  726. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  727. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_check_materiality.py +0 -0
  728. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  729. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_check_test_count.py +0 -0
  730. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  731. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_codex_plugin.py +0 -0
  732. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_generate_website_docs.py +0 -0
  733. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
  734. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/scripts/test_materiality_backtest.py +0 -0
  735. {gflow_cli-0.58.0/tests/smoke → gflow_cli-0.60.0/tests/services}/__init__.py +0 -0
  736. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_character_create_redaction.py +0 -0
  737. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_character_create_saga.py +0 -0
  738. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  739. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_mentions_observability.py +0 -0
  740. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_mentions_parse.py +0 -0
  741. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_mentions_resolve.py +0 -0
  742. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/services/test_resolve_and_apply.py +0 -0
  743. {gflow_cli-0.58.0/tests/tools → gflow_cli-0.60.0/tests/smoke}/__init__.py +0 -0
  744. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  745. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/smoke/test_real_flow.py +0 -0
  746. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_auth.py +0 -0
  747. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_browser_manager.py +0 -0
  748. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_chain.py +0 -0
  749. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_chain_manifest.py +0 -0
  750. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_cli_data.py +0 -0
  751. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_cli_project.py +0 -0
  752. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_config.py +0 -0
  753. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_conftest_isolation.py +0 -0
  754. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_data_queries.py +0 -0
  755. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_bundle.py +0 -0
  756. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_events.py +0 -0
  757. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_journal.py +0 -0
  758. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_recorder.py +0 -0
  759. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_retention.py +0 -0
  760. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_diagnostics_sanitize.py +0 -0
  761. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_documentation_gate.py +0 -0
  762. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_duration_tab_drift.py +0 -0
  763. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_entity_provenance.py +0 -0
  764. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_errors.py +0 -0
  765. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_image_batch_references.py +0 -0
  766. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_json_output.py +0 -0
  767. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_marker_registry.py +0 -0
  768. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_media.py +0 -0
  769. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_observability.py +0 -0
  770. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_overlay_banner_dismissal.py +0 -0
  771. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_paths.py +0 -0
  772. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_playwright_pin.py +0 -0
  773. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_profile_lease.py +0 -0
  774. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_profile_lease_subprocess.py +0 -0
  775. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_profile_store.py +0 -0
  776. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_smoke.py +0 -0
  777. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/test_update_check.py +0 -0
  778. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_banned.py +0 -0
  779. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_expander.py +0 -0
  780. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_invocation.py +0 -0
  781. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_loader.py +0 -0
  782. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_registry.py +0 -0
  783. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_runtime.py +0 -0
  784. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/tools/test_spec.py +0 -0
  785. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/ui/test_app.py +0 -0
  786. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_codec.py +0 -0
  787. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_daemon.py +0 -0
  788. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  789. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_queue.py +0 -0
  790. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_queue_multiprocess.py +0 -0
  791. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/tests/worker/test_queue_reconciliation.py +0 -0
  792. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/ARCHITECTURE.md +0 -0
  793. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/AUTHENTICATION.md +0 -0
  794. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/CHARACTER.md +0 -0
  795. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/CONFIGURATION.md +0 -0
  796. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/DEBUGGING.md +0 -0
  797. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/DEVELOPMENT.md +0 -0
  798. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  799. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/INSTRUCTIONS.md +0 -0
  800. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/MCP.md +0 -0
  801. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/MOVIE.md +0 -0
  802. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  803. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/SECURITY.md +0 -0
  804. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/TOOLS.md +0 -0
  805. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/USER_GUIDE.md +0 -0
  806. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/agents.md +0 -0
  807. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/index.md +0 -0
  808. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/installation.md +0 -0
  809. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/onboarding-mockup.html +0 -0
  810. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/onboarding.md +0 -0
  811. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/docs/stylesheets/extra.css +0 -0
  812. {gflow_cli-0.58.0 → gflow_cli-0.60.0}/website/requirements.in +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gflow",
3
- "version": "0.58.0",
3
+ "version": "0.60.0",
4
4
  "description": "Reusable development and operations workflows for gflow-cli",
5
5
  "author": {
6
6
  "name": "Flavio Oliva",
@@ -143,6 +143,13 @@
143
143
  # editable/source installs. Set to 0 to disable.
144
144
  # GFLOW_CLI_UPDATE_CHECK=1
145
145
 
146
+ # Whether generation prompts (and the prompt-derived display names used as the
147
+ # picker search key) are stored in the local catalog — store | redacted.
148
+ # Under 'redacted', `gflow doctor` reports missing display names as info
149
+ # (backfill is deliberately suppressed) instead of warn, and name backfill via
150
+ # `gflow data sync --names` requires switching back to 'store' first.
151
+ # GFLOW_CLI_HISTORY_PROMPTS=store
152
+
146
153
  # MCP no-spend mode (#496): when set to 1, the MCP server (gflow mcp run AND
147
154
  # gflow serve) never registers the credit-spending generate tools — agents
148
155
  # cannot see them in tools/list. Equivalent to the --no-spend flag.
@@ -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
@@ -58,7 +58,7 @@ Or invoke the wrapper: `/gflow:check`.
58
58
 
59
59
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
60
60
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
61
- - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–31, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
61
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–31, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
62
62
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
63
63
  - **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
64
64
  - **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
@@ -7,6 +7,140 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.60.0] — 2026-08-25
11
+
12
+ ### Added
13
+
14
+ - **Selector registry + nightly CI drift probe
15
+ ([#404](https://github.com/ffroliva/gflow-cli/issues/404),
16
+ [#493](https://github.com/ffroliva/gflow-cli/issues/493),
17
+ [#313](https://github.com/ffroliva/gflow-cli/issues/313)).** New
18
+ `gflow_cli.flow_selectors` package: a structured, enumerable inventory of the
19
+ Flow DOM selectors gflow depends on (`Surface`, `Selector`) plus a pure
20
+ grader (`HIT` / `FALLBACK` / `AMBIGUOUS` / `MISS` / `EXPECTED_ABSENT`), so
21
+ selector drift is *named* rather than inferred from a failing test. A $0
22
+ probe (`scripts/probe/run_probe.py`, driven by the `selector-probe` workflow
23
+ on `schedule` + `workflow_dispatch` only) walks the registry against a live
24
+ editor: navigate and read only, never generates. Exit 0 clean / 1 drift /
25
+ 2 inconclusive — an expired token or dead project is never published as
26
+ drift.
27
+
28
+ - **Incident bundles record what was submitted
29
+ ([#528](https://github.com/ffroliva/gflow-cli/issues/528)).**
30
+ `network.json` gains a `generation_requests` array carrying a counts-only
31
+ summary of each outgoing generation submit (body size, reference-entity
32
+ count, reference-field count). The reference shape that triggers a policy 400
33
+ was previously visible only in the stderr stream, so bundles attached to an
34
+ issue could not be diagnosed. Counts and booleans only — no key names, field
35
+ values, or prompt text — matching the existing §5.3 retention boundary.
36
+
37
+ ### Changed
38
+
39
+ - **All labs.google requests now carry `origin`/`referer`
40
+ ([#578](https://github.com/ffroliva/gflow-cli/pull/578)).** Header
41
+ construction moved into a single `_request_headers()` shared by
42
+ `_post_json`/`_patch_json`/`_get_json`, which previously assembled headers
43
+ inline three times and could diverge per verb. The labs lane now sends the
44
+ same `origin`/`referer` every other lane already sent. A live A/B against
45
+ `project.createProject` showed these headers are **not** required — an
46
+ origin-less mutation still returns 200 — so this is consistency and
47
+ defence-in-depth, not a fix for any observed failure.
48
+
49
+ ### Fixed
50
+
51
+ - **Content-policy 400s are no longer misclassified as `WireFormatError`
52
+ ([#528](https://github.com/ffroliva/gflow-cli/issues/528)).** An HTTP 400 from
53
+ `flowMedia:batchGenerateImages` or `batchAsyncGenerateVideo*` now raises
54
+ `ContentPolicyError` with remediation that names the levers that actually
55
+ work — reduce to a single face-bearing reference, replace age-explicit person
56
+ descriptors with relational or role nouns — and states outright that
57
+ shortening the prompt does not help. Previously these surfaced as "the
58
+ request was rejected as malformed… retry with a simpler prompt text", which
59
+ sends operators down a path that cannot succeed. Same defect shape as
60
+ [#379](https://github.com/ffroliva/gflow-cli/issues/379) (429), one status
61
+ over, and the self-documenting-errors goal of
62
+ [#380](https://github.com/ffroliva/gflow-cli/issues/380).
63
+ - **Video generation gained the 429 branch the image path got in #379.** A
64
+ quota hit on `batchAsyncGenerateVideo*` raised `WireFormatError` instead of
65
+ `RateLimitError`, losing `Retry-After` and the retryable classification.
66
+ - **`generate_images_batch` no longer reports a bare, remediation-free
67
+ `GFlowError`** when every response failed — it classifies the first error the
68
+ same way the single-prompt path does.
69
+
70
+ ### Security
71
+
72
+ - **CI/CD supply-chain hardening
73
+ ([#565](https://github.com/ffroliva/gflow-cli/issues/565)).** Every
74
+ `actions/checkout` step now sets `persist-credentials: false` (12 existing
75
+ steps fixed across `ci.yml`, `deps-watch.yml`, `governance-advisory.yml`,
76
+ `governance-benchmark.yml`, `main-base-guard.yml`, `pages.yml` and
77
+ `release.yml`); the default leaves the job token in `.git/config` for the rest
78
+ of the job. No workflow needed it — releases publish over PyPI Trusted
79
+ Publishing (OIDC) and Pages deploys over `actions/deploy-pages`. A new
80
+ `workflow-audit` job runs [zizmor](https://github.com/zizmorcore/zizmor)
81
+ (pinned, `--offline`) over `.github/workflows/` on every push and PR, so the
82
+ class cannot come back. Its first run also caught two defects the manual pass
83
+ missed: `${{ github.base_ref }}` interpolated directly into a
84
+ `governance-advisory.yml` shell script (template injection — the value now
85
+ arrives through `env:`), and a shared uv cache restored by the publishing
86
+ release job (cache poisoning — caching is now off there). The
87
+ `pull_request_target` trigger in `external-pr-triage.yml` is suppressed inline
88
+ with its rationale, and a changelog-guard workflow was evaluated and declined
89
+ — both decisions recorded in
90
+ [docs/GITHUB.md § Workflow Security Gates](docs/GITHUB.md#workflow-security-gates).
91
+
92
+ ## [0.59.0] — 2026-08-16
93
+
94
+ ### Added
95
+
96
+ - **Refresh-on-miss: stale catalog names self-heal during generation
97
+ ([#546](https://github.com/ffroliva/gflow-cli/issues/546)).** When a UUID
98
+ reference's picker name-search misses (e.g. the asset was renamed in the
99
+ Flow UI after being cataloged), the transport now consults the credit-free
100
+ `flow.projectInitialData` listing once (~0.5 s) for the *current* name,
101
+ retries the search exactly once, and attaches the existing tile — instead
102
+ of silently downgrading to a duplicate upload. The fresh name is written
103
+ back with `sync.source = "refresh"` provenance (`store` history mode only;
104
+ `redacted` heals the run without touching disk). Applies to `image i2i
105
+ --ref <uuid>` and `video i2v` frame refs; any resolver failure is logged
106
+ and the pre-existing fallback chain proceeds unchanged. Completes the
107
+ [#543](https://github.com/ffroliva/gflow-cli/issues/543) freshness model —
108
+ see [MEDIA_LIBRARY § freshness](docs/MEDIA_LIBRARY.md).
109
+
110
+ - **`gflow doctor` — read-only pre-flight diagnostics
111
+ ([#542](https://github.com/ffroliva/gflow-cli/issues/542)).** Ten checks
112
+ across the catalog (missing display names / local files / sha256), the
113
+ database (migration drift, WAL state + `PRAGMA quick_check`), stuck
114
+ operations and queue tasks (24h recency threshold), and the environment
115
+ (deprecated env vars, missing Playwright Chromium, auth profiles without
116
+ cookies). Brew-doctor philosophy: diagnoses, never heals — nothing is
117
+ migrated, repaired, or written, and all DB access is strictly read-only.
118
+ Exit `0` when clean, `33` when any warn/fail finding is present (a
119
+ successful diagnosis, not an error class); internal errors keep their typed
120
+ codes (e.g. `16` for `DataStoreError`). `--json` emits an experimental
121
+ machine-readable envelope (`overall_status` + per-check `checks[]` entries).
122
+ Output is redaction-safe: rows are identified by UUID only, paths are
123
+ sanitized, and under `GFLOW_CLI_HISTORY_PROMPTS=redacted` the display-name
124
+ check reports info instead of warn. See
125
+ [USAGE § `gflow doctor`](docs/USAGE.md#gflow-doctor).
126
+
127
+ - **`gflow data sync --names` — reconcile catalog display names from Flow's
128
+ listing endpoint ([#543](https://github.com/ffroliva/gflow-cli/issues/543)).**
129
+ Sweeps nameless catalog rows project-by-project via the credit-free
130
+ `flow.projectInitialData` listing (~0.5s/project, session-cookie auth, no
131
+ generation surface) and writes back the display names the picker searches
132
+ by — restoring the [#529](https://github.com/ffroliva/gflow-cli/issues/529)
133
+ picker contract (search by name, verify by UUID) for rows recorded before
134
+ their caption existed. Rows whose media no longer exists remotely are
135
+ ghost-marked `sync.status = "missing_remote"` (tombstones, never deletions)
136
+ only when the listing is provably complete. Write-by-default with
137
+ `--dry-run` preview; scoped via `--project` / `--limit` / `--since` /
138
+ `--max-projects`; idempotent re-runs. Refuses under
139
+ `GFLOW_CLI_HISTORY_PROMPTS=redacted` (exit `11`); exit `34`
140
+ (`SyncPartialError`, retryable) when some projects fail mid-sweep. This is
141
+ the remediation `gflow doctor`'s missing-display-name check points at. See
142
+ [USAGE § `gflow data sync`](docs/USAGE.md#gflow-data-sync).
143
+
10
144
  ## [0.58.0] — 2026-08-16
11
145
 
12
146
  ### Fixed
@@ -3021,7 +3155,9 @@ shell-script template that branches on these codes.
3021
3155
 
3022
3156
  First skeleton. Not functional end-to-end yet.
3023
3157
 
3024
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.58.0...HEAD
3158
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...HEAD
3159
+ [0.60.0]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...v0.60.0
3160
+ [0.59.0]: https://github.com/ffroliva/gflow-cli/compare/v0.58.0...v0.59.0
3025
3161
  [0.58.0]: https://github.com/ffroliva/gflow-cli/compare/v0.57.1...v0.58.0
3026
3162
  [0.57.1]: https://github.com/ffroliva/gflow-cli/compare/v0.57.0...v0.57.1
3027
3163
  [0.57.0]: https://github.com/ffroliva/gflow-cli/compare/v0.56.0...v0.57.0
@@ -142,7 +142,7 @@ full-page media-library UI (#174) can fail earlier at `mode_switch_trigger`.
142
142
 
143
143
  ### Fresh generations may record without a `display_name` (async Flow caption)
144
144
 
145
- - **Status:** Open — tracked in [#543](https://github.com/ffroliva/gflow-cli/issues/543) (backfill command)
145
+ - **Status:** Mitigated — remedies shipped via [#543](https://github.com/ffroliva/gflow-cli/issues/543) and [#542](https://github.com/ffroliva/gflow-cli/issues/542)
146
146
  - **Affected:** UUID `--ref` / frame references to *just-generated* assets (v0.58.0+)
147
147
 
148
148
  Flow computes an asset's caption (`displayName`) asynchronously server-side, so
@@ -151,9 +151,11 @@ stores no name (observed live 2026-08-16 during the r2v e2e). Such rows skip
151
151
  the picker-selection path and use the integrity-verified local-file upload
152
152
  fallback instead — correct but a duplicate upload. Also by design, rows
153
153
  recorded before v0.58.0 and all rows under
154
- `GFLOW_CLI_HISTORY_PROMPTS=redacted` have no stored name. #543 proposes a
155
- credit-free, privacy-gated `gflow data backfill-names` command; #542's
156
- `gflow doctor` will surface the affected-row count.
154
+ `GFLOW_CLI_HISTORY_PROMPTS=redacted` have no stored name. **Remedies:**
155
+ `gflow data sync --names` (#543) backfills names credit-free from the Flow
156
+ listing endpoint (privacy-gated to `store` history mode), and `gflow doctor`
157
+ (#542) surfaces the affected-row count. Freshly generated rows whose caption
158
+ has not landed yet stay nameless until the next sync sweep.
157
159
 
158
160
  ### Video duration tab probe misses on the current Frames-submode DOM
159
161
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gflow-cli
3
- Version: 0.58.0
3
+ Version: 0.60.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
+ }
@@ -69,6 +69,30 @@ same treatment `character create` already gave them. Keep that in mind before
69
69
  adding a key here: anything prompt-derived must be hashed by its own builder
70
70
  (as `tool` does) rather than relying on column-level redaction.
71
71
 
72
+ ### Asset `metadata_json.sync.*` provenance (#543)
73
+
74
+ `assets.metadata_json` carries a `sync` object recording what
75
+ `gflow data sync --names` did to the row and when — so a restored name is
76
+ distinguishable from one recorded at generation time, and a ghost mark carries
77
+ its own audit trail:
78
+
79
+ | Key | Shape | Writer |
80
+ |---|---|---|
81
+ | `sync.named_at` | UTC ISO timestamp | `DataRepository.set_asset_display_name` — set (with `$.display_name`) when a sync sweep writes or overwrites the name; skipped when the stored name is already identical, so re-runs never churn the timestamp |
82
+ | `sync.source` | `"sync"` \| `"refresh"` | Same writer, same statement — provenance for the name value: `"sync"` from a bulk `gflow data sync --names` sweep; `"refresh"` from the refresh-on-miss resolver (#546, `cli_image`), which writes back the freshly fetched name after a picker miss |
83
+ | `sync.status` | `"missing_remote"` | `DataRepository.mark_asset_missing_remote` — the ghost tombstone, set only when a **complete** remote listing lacks the asset; rows are flagged, never deleted, and tombstoned rows are excluded from later sweeps; cleared automatically if the media reappears in a listing |
84
+ | `sync.checked_at` | UTC ISO timestamp | Same writer — when the absence was last confirmed |
85
+
86
+ All four are written via single-statement atomic `json_set` updates that
87
+ preserve unrelated metadata keys. See
88
+ [USAGE § `gflow data sync`](USAGE.md#gflow-data-sync).
89
+
90
+ Two caveats: an in-flight generation's recorder completion can overwrite
91
+ `metadata_json` written concurrently by a sync sweep — self-healing, since the
92
+ row simply re-enters the next sweep. And the nested `sync.*` stamps rely on
93
+ SQLite's `json_set` auto-creating intermediate objects; a very old system
94
+ SQLite (pre-json1 era, roughly < 3.9) may silently no-op them.
95
+
72
96
  ### What is NOT recorded
73
97
 
74
98
  - Signed CDN URLs (e.g., `fifeUrl?Signature=...`) — they expire and contain bearer-style tokens.