gflow-cli 0.12.0__tar.gz → 0.13.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 (440) hide show
  1. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/workflows/ci.yml +1 -1
  2. gflow_cli-0.13.0/.github/workflows/governance-advisory.yml +33 -0
  3. gflow_cli-0.13.0/.github/workflows/governance-benchmark.yml +29 -0
  4. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/AGENTS.md +1 -1
  5. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/CHANGELOG.md +49 -2
  6. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/PKG-INFO +5 -3
  7. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/README.md +3 -1
  8. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/AGENT_GUIDE.md +76 -0
  9. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/CHARACTER.md +8 -9
  10. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/DATA_LAYER.md +0 -2
  11. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/DEVELOPMENT.md +1 -0
  12. gflow_cli-0.13.0/docs/GOVERNANCE_BENCHMARK.md +107 -0
  13. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/INDEX.md +5 -2
  14. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.12.0.md +8 -6
  15. gflow_cli-0.13.0/docs/LIVE_VERIFICATION_v0.13.0.md +60 -0
  16. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/PROJECT_STATUS.md +5 -2
  17. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/USAGE.md +31 -15
  18. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/USER_GUIDE.md +8 -7
  19. gflow_cli-0.13.0/docs/superpowers/plans/2026-06-01-governance-enforcement-advisory/PLAN.md +271 -0
  20. gflow_cli-0.13.0/docs/superpowers/plans/2026-06-04-character-create-recording.md +428 -0
  21. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/llms.txt +1 -1
  22. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/pyproject.toml +11 -4
  23. gflow_cli-0.13.0/scripts/ci/check_materiality.py +192 -0
  24. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/ci/check_repo_hygiene.py +51 -0
  25. gflow_cli-0.13.0/scripts/dev/_recording_client.py +40 -0
  26. gflow_cli-0.13.0/scripts/dev/materiality_backtest.py +223 -0
  27. gflow_cli-0.13.0/scripts/dev/record_flow_capture.py +271 -0
  28. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/gflow-cli/SKILL.md +10 -9
  29. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/pr-council-review/SKILL.md +1 -0
  30. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/__init__.py +1 -1
  31. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/client.py +72 -29
  32. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/routes.py +15 -3
  33. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_character.py +80 -0
  34. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_video.py +79 -19
  35. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/services/character_create.py +5 -5
  36. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client.py +31 -0
  37. gflow_cli-0.13.0/tests/api/test_client_delete_characters.py +52 -0
  38. gflow_cli-0.13.0/tests/api/test_client_launch_kwargs.py +35 -0
  39. gflow_cli-0.13.0/tests/api/test_routes_character.py +41 -0
  40. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_character.py +105 -2
  41. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_video.py +203 -0
  42. gflow_cli-0.13.0/tests/dev/test_record_flow_capture.py +88 -0
  43. gflow_cli-0.13.0/tests/dev/test_recording_client.py +31 -0
  44. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/conftest.py +13 -4
  45. gflow_cli-0.13.0/tests/e2e/test_i2v_flags_e2e.py +256 -0
  46. gflow_cli-0.13.0/tests/scripts/test_check_materiality.py +93 -0
  47. gflow_cli-0.13.0/tests/scripts/test_check_repo_hygiene.py +51 -0
  48. gflow_cli-0.13.0/tests/scripts/test_materiality_backtest.py +90 -0
  49. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/uv.lock +24 -24
  50. gflow_cli-0.12.0/.planning/issue-125-fix.md +0 -207
  51. gflow_cli-0.12.0/.planning/todos/pending/2026-05-11-add-project-logo-and-docs-site-promotion-plan.md +0 -38
  52. gflow_cli-0.12.0/.planning/todos/pending/pr-38-review.md +0 -8
  53. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-09-image-mvp-orchestration.md +0 -319
  54. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-09-image-mvp.md +0 -430
  55. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-09-video-mvp-orchestration.md +0 -387
  56. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-09-video-mvp.md +0 -2006
  57. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-10-phase-4-hardening-orchestration.md +0 -358
  58. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-10-phase-4-hardening.md +0 -2736
  59. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/2026-05-14-shell-multi-prompt-orchestration.md +0 -165
  60. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_ARCH.md +0 -34
  61. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_SEC_UX.md +0 -47
  62. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_CODE.md +0 -46
  63. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_GEMINI.md +0 -89
  64. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_SECURITY.md +0 -70
  65. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_PYTHON.md +0 -37
  66. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_SECURITY.md +0 -33
  67. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN.md +0 -1919
  68. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_CODE.md +0 -70
  69. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_FOLLOWUP.md +0 -36
  70. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_PLANNER.md +0 -66
  71. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY.md +0 -70
  72. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY_FOLLOWUP.md +0 -30
  73. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_FINAL_SEC_UX_VERIFIED.md +0 -30
  74. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_PLAN_SECURITY.md +0 -57
  75. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_SPEC_SECURITY.md +0 -37
  76. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/PLAN.md +0 -69
  77. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/orchestration.md +0 -20
  78. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-17-e2e-test-coverage.md +0 -463
  79. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-17-issue-15-auth-verification-fix.md +0 -1449
  80. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-17-issue-15-i2v-bearer-auth.md +0 -811
  81. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-17-issue-15-orchestration.md +0 -118
  82. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-18-video-phase0-submit-spike.md +0 -697
  83. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-19-video-phase-a-execution-state.md +0 -64
  84. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-19-video-phase-a-orchestration.md +0 -164
  85. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-19-video-phase-a-t2v.md +0 -2083
  86. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-20-video-download-t2v-cli.md +0 -784
  87. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-21-multi-image-prompt-orchestration.md +0 -632
  88. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-21-multi-image-prompt.md +0 -2410
  89. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-22-pr-38-review.md +0 -107
  90. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-22-stay-mounted-batch-session-plan.md +0 -1907
  91. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-23-locale-agnostic-selectors.md +0 -108
  92. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-24-data-layer.md +0 -2452
  93. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-30-l0-sapisidhash-aisandbox-auth.md +0 -697
  94. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-l0-bearer-pivot.md +0 -97
  95. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-l1-scene-compose.md +0 -1480
  96. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-scene-concat-extend.md +0 -100
  97. gflow_cli-0.12.0/docs/superpowers/plans/2026-06-02-character-creation-phase2.md +0 -293
  98. gflow_cli-0.12.0/docs/superpowers/plans/2026-06-02-character-creation.md +0 -300
  99. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-10-phase-4-hardening-design.md +0 -484
  100. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-14-shell-multi-prompt-design.md +0 -497
  101. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-15-auth-login-real-chrome-design.md +0 -45
  102. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-17-e2e-test-coverage-design.md +0 -190
  103. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-17-i2v-uploadimage-401-bearer-auth-design.md +0 -330
  104. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-17-issue-15-auth-verification-fix-design.md +0 -485
  105. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-17-issue-15-root-cause-findings.md +0 -87
  106. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-18-ui-automation-video-generation-design.md +0 -739
  107. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-21-multi-image-prompt-design.md +0 -457
  108. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-22-pr-38-review-design.md +0 -40
  109. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md +0 -389
  110. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-23-locale-agnostic-selectors.md +0 -66
  111. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-23-readme-v0.8.1-refresh-design.md +0 -359
  112. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-24-data-layer-design.md +0 -403
  113. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-27-public-event-surface-design.md +0 -397
  114. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-30-add-clip-scene-timeline-design.md +0 -195
  115. gflow_cli-0.12.0/tests/api/test_routes_character.py +0 -20
  116. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/README.md +0 -0
  117. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/active.md +0 -0
  118. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/branch-review.md +0 -0
  119. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/changelog.md +0 -0
  120. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/check.md +0 -0
  121. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/doc-review.md +0 -0
  122. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/known-issues.md +0 -0
  123. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/next.md +0 -0
  124. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/plan.md +0 -0
  125. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  126. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/predict.md +0 -0
  127. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/release.md +0 -0
  128. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/scenario.md +0 -0
  129. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.claude/commands/gflow/status.md +0 -0
  130. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.continue-here.md +0 -0
  131. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.env.template +0 -0
  132. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.gitattributes +0 -0
  133. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/CODEOWNERS +0 -0
  134. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  135. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/copilot-instructions.md +0 -0
  136. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/dependabot.yml +0 -0
  137. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/workflows/external-pr-triage.yml +0 -0
  138. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.github/workflows/release.yml +0 -0
  139. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.gitignore +0 -0
  140. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.gitleaks.toml +0 -0
  141. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.pre-commit-config.yaml +0 -0
  142. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/.secrets.baseline +0 -0
  143. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/CLAUDE.md +0 -0
  144. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/CONFIGURATION.md +0 -0
  145. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/CONTRIBUTING.md +0 -0
  146. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/DISCLAIMER.md +0 -0
  147. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/GEMINI.md +0 -0
  148. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/KNOWN_ISSUES.md +0 -0
  149. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/LICENSE +0 -0
  150. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/PLAN.md +0 -0
  151. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/RELEASE.md +0 -0
  152. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/ROADMAP.md +0 -0
  153. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/conftest.py +0 -0
  154. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docker-compose.yml +0 -0
  155. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/ARCHITECTURE.md +0 -0
  156. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/AUTHENTICATION.md +0 -0
  157. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/CHARACTER_RECON.md +0 -0
  158. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/CONFIGURATION.md +0 -0
  159. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/DEBUGGING.md +0 -0
  160. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/DEMOS.md +0 -0
  161. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/E2E_TESTING.md +0 -0
  162. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/EXTERNAL_STORAGE.md +0 -0
  163. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/GITHUB.md +0 -0
  164. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  165. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  166. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  167. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  168. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  169. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  170. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  171. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  172. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  173. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/SECURITY.md +0 -0
  174. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/assets/demo-split-pf.gif +0 -0
  175. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/assets/example-run.gif +0 -0
  176. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/superpowers/2026-05-17-issue-15-handover.md +0 -0
  177. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/superpowers/character-scenario.md +0 -0
  178. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/docs/superpowers/verifications/2026-05-11-phase-4-stage-g.md +0 -0
  179. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/README.md +0 -0
  180. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/batch_from_config.py +0 -0
  181. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/multi_prompt_t2i.py +0 -0
  182. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/sample_config.json +0 -0
  183. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/sample_prompts.txt +0 -0
  184. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/single_image_t2i.py +0 -0
  185. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/examples/workflow_chain.py +0 -0
  186. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/README.md +0 -0
  187. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/01_upload_image.json +0 -0
  188. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  189. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  190. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/04_archive_workflow.json +0 -0
  191. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/05_createProject.json +0 -0
  192. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/06_batchGenerateImages.json +0 -0
  193. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  194. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  195. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  196. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  197. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  198. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/12_create_scene.json +0 -0
  199. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  200. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/14_get_scene_workflows.json +0 -0
  201. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  202. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/ci/check_doc_links.py +0 -0
  203. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/debug_editor.py +0 -0
  204. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/debug_gen_settings.py +0 -0
  205. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/debug_settings.py +0 -0
  206. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/_spike_common.py +0 -0
  207. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/active_plan.py +0 -0
  208. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  209. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  210. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  211. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  212. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  213. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/capture_locale_invariants.py +0 -0
  214. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  215. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/character_create_spike.py +0 -0
  216. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/character_create_spike_v2.py +0 -0
  217. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/dump_character_selectors.js +0 -0
  218. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/monitor_pr_38.py +0 -0
  219. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/README.md +0 -0
  220. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/harness.py +0 -0
  221. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/tasks.json +0 -0
  222. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  223. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  224. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/dev/spike_patch_entity.py +0 -0
  225. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/diag_capture_flow_traffic.py +0 -0
  226. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/diag_recaptcha_mint.py +0 -0
  227. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/record_demo.ps1 +0 -0
  228. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/smoke_image.py +0 -0
  229. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/smoke_real_chrome_image.py +0 -0
  230. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/smoke_video_editor.py +0 -0
  231. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/smoke_worker_style.py +0 -0
  232. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/scripts/verify_chrome_auth_viability.py +0 -0
  233. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/README.md +0 -0
  234. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/plan/SKILL.md +0 -0
  235. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/predict/SKILL.md +0 -0
  236. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/scenario/SKILL.md +0 -0
  237. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/skills/status/SKILL.md +0 -0
  238. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/sonar-project.properties +0 -0
  239. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/__main__.py +0 -0
  240. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/_cli_helpers.py +0 -0
  241. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/__init__.py +0 -0
  242. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/_retry.py +0 -0
  243. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  244. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/character.py +0 -0
  245. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/dto.py +0 -0
  246. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/image.py +0 -0
  247. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/recaptcha.py +0 -0
  248. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/scene.py +0 -0
  249. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  250. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/_common.py +0 -0
  251. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  252. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/base.py +0 -0
  253. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  254. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  255. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  256. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  257. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  258. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  259. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/api/video.py +0 -0
  260. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/__init__.py +0 -0
  261. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/base.py +0 -0
  262. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/factory.py +0 -0
  263. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  264. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  265. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/strategies.py +0 -0
  266. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/verification.py +0 -0
  267. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/browser_manager.py +0 -0
  268. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/chain.py +0 -0
  269. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/chain_manifest.py +0 -0
  270. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli.py +0 -0
  271. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_data.py +0 -0
  272. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_image.py +0 -0
  273. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_models.py +0 -0
  274. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_run.py +0 -0
  275. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_scene.py +0 -0
  276. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/config.py +0 -0
  277. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/__init__.py +0 -0
  278. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/chain_repo.py +0 -0
  279. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  280. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  281. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  282. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  283. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  284. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  285. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  286. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/models.py +0 -0
  287. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/queries.py +0 -0
  288. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/recorder.py +0 -0
  289. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/redaction.py +0 -0
  290. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/repository.py +0 -0
  291. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/data/store.py +0 -0
  292. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/errors.py +0 -0
  293. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/exceptions.py +0 -0
  294. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/image_batch.py +0 -0
  295. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/json_output.py +0 -0
  296. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/manifest.py +0 -0
  297. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/media.py +0 -0
  298. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/observability.py +0 -0
  299. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/paths.py +0 -0
  300. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/profile_store.py +0 -0
  301. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/services/__init__.py +0 -0
  302. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/src/gflow_cli/storage.py +0 -0
  303. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tasks/lessons.md +0 -0
  304. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/test_assets/sample_batch.json +0 -0
  305. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/test_assets/sample_batch.tsv +0 -0
  306. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/test_assets/sample_batch_invalid.tsv +0 -0
  307. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/__init__.py +0 -0
  308. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/__init__.py +0 -0
  309. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/fixtures/character_gen_response.json +0 -0
  310. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  311. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  312. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  313. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_bearer_redaction.py +0 -0
  314. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_character.py +0 -0
  315. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client_character.py +0 -0
  316. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client_generate_character.py +0 -0
  317. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client_image.py +0 -0
  318. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client_patch_entity.py +0 -0
  319. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_client_scene.py +0 -0
  320. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_concurrency.py +0 -0
  321. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_dto.py +0 -0
  322. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_image.py +0 -0
  323. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_image_dto.py +0 -0
  324. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  325. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_recaptcha.py +0 -0
  326. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_retry.py +0 -0
  327. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_routes.py +0 -0
  328. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_routes_scene.py +0 -0
  329. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_sapisidhash_helper.py +0 -0
  330. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_scene_models.py +0 -0
  331. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/test_video.py +0 -0
  332. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/__init__.py +0 -0
  333. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_base.py +0 -0
  334. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_bearer.py +0 -0
  335. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_common.py +0 -0
  336. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  337. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_factory.py +0 -0
  338. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_fingerprint.py +0 -0
  339. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_sapisidhash.py +0 -0
  340. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_transport_timeout.py +0 -0
  341. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation.py +0 -0
  342. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  343. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  344. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  345. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  346. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/auth/strategies/test_factory.py +0 -0
  347. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/auth/strategies/test_strategies.py +0 -0
  348. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/auth/test_verification.py +0 -0
  349. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/__init__.py +0 -0
  350. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_auth_list.py +0 -0
  351. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_character_create.py +0 -0
  352. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_data.py +0 -0
  353. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_image.py +0 -0
  354. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  355. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_models.py +0 -0
  356. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_run.py +0 -0
  357. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_scene.py +0 -0
  358. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_cli_video_chain.py +0 -0
  359. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_error_handling.py +0 -0
  360. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_helpers.py +0 -0
  361. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  362. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/conftest.py +0 -0
  363. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/__init__.py +0 -0
  364. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_chain_repo.py +0 -0
  365. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_find_incomplete_character.py +0 -0
  366. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_models.py +0 -0
  367. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_packaging.py +0 -0
  368. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_recorder.py +0 -0
  369. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_recorder_character.py +0 -0
  370. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_redaction.py +0 -0
  371. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_repository.py +0 -0
  372. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_scene_persistence.py +0 -0
  373. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_settings_and_errors.py +0 -0
  374. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/data/test_store_migrations.py +0 -0
  375. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/__init__.py +0 -0
  376. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  377. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  378. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_chain_e2e.py +0 -0
  379. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_character_create_e2e.py +0 -0
  380. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  381. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  382. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  383. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_json_output_e2e.py +0 -0
  384. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  385. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_scene_compose_live.py +0 -0
  386. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_transports_e2e.py +0 -0
  387. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  388. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  389. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/__init__.py +0 -0
  390. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/auth.feature +0 -0
  391. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/auth_login.feature +0 -0
  392. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/character_create.feature +0 -0
  393. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/character_read.feature +0 -0
  394. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/conftest.py +0 -0
  395. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/image.feature +0 -0
  396. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_auth_login_steps.py +0 -0
  397. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_auth_steps.py +0 -0
  398. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_character_create_steps.py +0 -0
  399. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_character_read_steps.py +0 -0
  400. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_image_steps.py +0 -0
  401. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_step_collision_guard.py +0 -0
  402. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/test_video_chain_steps.py +0 -0
  403. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/features/video_chain.feature +0 -0
  404. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/fixtures/__init__.py +0 -0
  405. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/fixtures/seeded_catalog.py +0 -0
  406. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/image_batch/__init__.py +0 -0
  407. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/image_batch/test_image_manifest.py +0 -0
  408. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/image_batch/test_observability_events.py +0 -0
  409. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/integration/__init__.py +0 -0
  410. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/integration/conftest.py +0 -0
  411. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/integration/constants.py +0 -0
  412. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/integration/test_storage_gcs.py +0 -0
  413. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/integration/test_storage_s3.py +0 -0
  414. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  415. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/services/__init__.py +0 -0
  416. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/services/test_character_create_redaction.py +0 -0
  417. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/services/test_character_create_saga.py +0 -0
  418. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  419. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/smoke/__init__.py +0 -0
  420. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  421. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/smoke/test_real_flow.py +0 -0
  422. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_auth.py +0 -0
  423. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_browser_manager.py +0 -0
  424. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_chain.py +0 -0
  425. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_chain_manifest.py +0 -0
  426. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_cli_data.py +0 -0
  427. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_config.py +0 -0
  428. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_conftest_isolation.py +0 -0
  429. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_data_queries.py +0 -0
  430. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_documentation_gate.py +0 -0
  431. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_errors.py +0 -0
  432. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_errors_403.py +0 -0
  433. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_json_output.py +0 -0
  434. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_manifest.py +0 -0
  435. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_marker_registry.py +0 -0
  436. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_media.py +0 -0
  437. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_observability.py +0 -0
  438. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_paths.py +0 -0
  439. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_profile_store.py +0 -0
  440. {gflow_cli-0.12.0 → gflow_cli-0.13.0}/tests/test_smoke.py +0 -0
@@ -21,7 +21,7 @@ jobs:
21
21
  fetch-depth: 0 # full history so gitleaks can diff against base
22
22
 
23
23
  - name: Run gitleaks
24
- uses: gitleaks/gitleaks-action@v2
24
+ uses: gitleaks/gitleaks-action@v3
25
25
  env:
26
26
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27
27
 
@@ -0,0 +1,33 @@
1
+ name: Governance advisory
2
+
3
+ # Non-blocking governance signal: classifies touched paths (material vs routine)
4
+ # and surfaces a recommendation to run /gflow:predict + council review. It NEVER
5
+ # fails the build and is NOT a required check — mirrors the reference AI-DLC
6
+ # orchestrator's advisory-by-default risk gate. Hard enforcement (--block-on +
7
+ # branch protection) is a conscious, documented deferral.
8
+
9
+ on:
10
+ pull_request:
11
+
12
+ # Least privilege: the script writes to $GITHUB_STEP_SUMMARY (no token needed).
13
+ # read-only is sufficient; we do not post comments (which forks cannot do).
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ materiality:
19
+ name: Materiality + traceability (advisory)
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v6
23
+ with:
24
+ fetch-depth: 0 # full history so `git diff origin/<base>..HEAD` resolves
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v7
28
+
29
+ - name: Classify touched paths (advisory, never blocks)
30
+ run: |
31
+ git fetch --no-tags origin "${{ github.base_ref }}" || true
32
+ uv run python scripts/ci/check_materiality.py \
33
+ --base "origin/${{ github.base_ref }}"
@@ -0,0 +1,29 @@
1
+ name: Governance benchmark
2
+
3
+ # Periodic calibration of the advisory materiality gate. Replays git history and
4
+ # writes the false-positive / coverage report to the job summary. This is a
5
+ # DASHBOARD, not a gate: non-blocking, read-only, no token (fork-safe). See
6
+ # docs/GOVERNANCE_BENCHMARK.md.
7
+
8
+ on:
9
+ schedule:
10
+ - cron: "0 6 1 * *" # 06:00 UTC on the 1st of each month
11
+ workflow_dispatch: # manual run from the Actions tab
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ backtest:
18
+ name: Materiality gate backtest
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ with:
23
+ fetch-depth: 0 # full history — the backtest replays every commit
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v7
27
+
28
+ - name: Run backtest (advisory; writes to job summary)
29
+ run: uv run python scripts/dev/materiality_backtest.py >> "$GITHUB_STEP_SUMMARY"
@@ -9,7 +9,7 @@ Supported tools that auto-discover this file: Cursor, Codex, Aider, Jules, Devin
9
9
  - Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
10
10
  - Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
11
11
  - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_models.py`, `cli_run.py`, `cli_scene.py`, `cli_video.py`, `config.py`, `data/`, `errors.py`, `exceptions.py`, `image_batch.py`, `manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
- - Command surface: `gflow auth`, `gflow image` (t2i/i2i/upload), `gflow video` (t2v/i2v/r2v/batch/chain), `gflow character` (create/list/show/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), and `gflow data` (catalog queries).
12
+ - Command surface: `gflow auth`, `gflow image` (t2i/i2i/upload), `gflow video` (t2v/i2v/r2v/batch/chain), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), and `gflow data` (catalog queries).
13
13
  - Requires a Google AI Ultra or Pro subscription with Flow access. All generations bill against the user's own Google account.
14
14
 
15
15
  ## Headed-browser dependency (architectural reality)
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.13.0] — 2026-06-04
11
+
12
+ ### Added
13
+
14
+ - **`gflow character rm` — delete a Character entity (#150).**
15
+ `gflow character rm --project <id> (--id <entityId> | --name <name>) [-y/--yes] [--json]`
16
+ deletes a Character via `POST flow:batchDeleteAssets` (Bearer; **FREE** — no
17
+ reCAPTCHA, no credit). Resolves by id or exact name (ambiguous name exits
18
+ **11**); prompts for confirmation unless `--yes`/`--json`.
19
+
20
+ - **In-project governance enforcement (advisory-first).** Made the AI-driven
21
+ development flow followable and partly machine-enforced in-repo, modeled on the
22
+ reference AI-DLC governance orchestrator's advisory-by-default behavior:
23
+ ruff `T20` now bans raw `print()` in `src/`; an advisory branch-naming check and a
24
+ non-blocking materiality + traceability classifier (`scripts/ci/check_materiality.py`
25
+ + `governance-advisory.yml`) recommend `/gflow:predict` + council review when
26
+ sensitive paths (`auth/`, `api/transports/`, `api/client.py`, `_sapisidhash.py`,
27
+ `data/`, `recaptcha`) are touched, without ever blocking a merge. A
28
+ history-replay backtest (`scripts/dev/materiality_backtest.py`) calibrates the
29
+ gate — it measured a 1.1% false-positive rate (vs. a 20-30% estimate) and
30
+ raised fix-coverage from 61% to 74% by surfacing auth-token plumbing that lived
31
+ outside `auth/`. The backtest is a first-class, repeatable artifact (`--json`
32
+ mode, a monthly `governance-benchmark.yml` dashboard job) fully documented in
33
+ [`docs/GOVERNANCE_BENCHMARK.md`](docs/GOVERNANCE_BENCHMARK.md); the gate itself is
34
+ described in
35
+ [`docs/AGENT_GUIDE.md` § Governance & Enforcement](docs/AGENT_GUIDE.md#governance--enforcement).
36
+
37
+ ### Changed
38
+
39
+ - **`gflow video i2v` frame flags aligned with Flow UI terminology (#122).**
40
+ `--initial-frame FILE` is the new canonical flag for the start image (matches
41
+ Flow's "initial frame" label). `--end-frame FILE` replaces `--end-image` as the
42
+ canonical end-frame flag. `--end-image` is kept as a **deprecated alias** (emits
43
+ `DeprecationWarning`; will be removed in a future minor release). The positional
44
+ `IMAGE` argument remains supported for back-compatibility.
45
+
46
+ ### Fixed
47
+
48
+ - **Character editor 404 on non-English locales (#153).** `gflow character`'s
49
+ editor URL interpolated the locale verbatim, so the genuine default BCP-47
50
+ `en-US` produced `/fx/en-US/…`, which 404s the Flow character editor (only the
51
+ short primary subtag is a valid `/fx/<seg>/` segment). `character_editor_url`
52
+ now normalizes a BCP-47 tag to its lower-cased short segment (`en-US → en`,
53
+ `pt-BR → pt`), so the tool stays language-agnostic with the real default
54
+ locale.
55
+
10
56
  ## [0.12.0] — 2026-06-03
11
57
 
12
58
  ### Fixed
@@ -644,7 +690,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
644
690
  - `gflow image batch` now actually shares one Flow project across all
645
691
  prompts in a batch. Previously the `--same-project=1` flag was a no-op
646
692
  at the `ui_automation` transport layer; each prompt landed in its own
647
- Flow project. ([spec](docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md))
693
+ Flow project.
648
694
  - `gflow image t2i -n N` now makes one transport call using Flow's native
649
695
  xN count selector instead of fanning out N parallel single-image
650
696
  submissions. Closes [#14](https://github.com/ffroliva/gflow-cli/issues/14) part 1.
@@ -1356,7 +1402,8 @@ shell-script template that branches on these codes.
1356
1402
 
1357
1403
  First skeleton. Not functional end-to-end yet.
1358
1404
 
1359
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.12.0...HEAD
1405
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.13.0...HEAD
1406
+ [0.13.0]: https://github.com/ffroliva/gflow-cli/compare/v0.12.0...v0.13.0
1360
1407
  [0.12.0]: https://github.com/ffroliva/gflow-cli/compare/v0.11.0...v0.12.0
1361
1408
  [0.11.0]: https://github.com/ffroliva/gflow-cli/compare/v0.10.0...v0.11.0
1362
1409
  [0.10.0]: https://github.com/ffroliva/gflow-cli/compare/v0.9.1...v0.10.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.12.0
3
+ Version: 0.13.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
@@ -53,7 +53,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
53
53
  Requires-Dist: pyright>=1.1.0; extra == 'dev'
54
54
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
55
55
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
56
- Requires-Dist: ruff>=0.5.0; extra == 'dev'
56
+ Requires-Dist: ruff>=0.15.15; extra == 'dev'
57
57
  Provides-Extra: gcs
58
58
  Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
59
59
  Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
@@ -81,6 +81,7 @@ Description-Content-Type: text/markdown
81
81
  >
82
82
  > 🌐 **Headed-browser today.** gflow drives Flow via a persistent Playwright Chromium profile — Google's auth + reCAPTCHA gates currently require it. See [Architecture & current limitations](#architecture--current-limitations) for the contributor opportunity.
83
83
 
84
+
84
85
  ## Why gflow-cli?
85
86
 
86
87
  For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
@@ -141,10 +142,11 @@ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (W
141
142
  | **Storage & catalog** | [External Storage](docs/EXTERNAL_STORAGE.md) · [Data Layer](docs/DATA_LAYER.md) |
142
143
  | 🎭 **Characters** | [Characters](docs/CHARACTER.md) — reusable subjects (`gflow character`) |
143
144
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
144
- | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
145
+ | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
145
146
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
146
147
  | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
147
148
 
149
+
148
150
  ## For AI agents & LLMs
149
151
 
150
152
  gflow-cli ships three agent entry points — pick the one your tool reads first.
@@ -17,6 +17,7 @@
17
17
  >
18
18
  > 🌐 **Headed-browser today.** gflow drives Flow via a persistent Playwright Chromium profile — Google's auth + reCAPTCHA gates currently require it. See [Architecture & current limitations](#architecture--current-limitations) for the contributor opportunity.
19
19
 
20
+
20
21
  ## Why gflow-cli?
21
22
 
22
23
  For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
@@ -77,10 +78,11 @@ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (W
77
78
  | **Storage & catalog** | [External Storage](docs/EXTERNAL_STORAGE.md) · [Data Layer](docs/DATA_LAYER.md) |
78
79
  | 🎭 **Characters** | [Characters](docs/CHARACTER.md) — reusable subjects (`gflow character`) |
79
80
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
80
- | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
81
+ | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
81
82
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
82
83
  | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
83
84
 
85
+
84
86
  ## For AI agents & LLMs
85
87
 
86
88
  gflow-cli ships three agent entry points — pick the one your tool reads first.
@@ -53,6 +53,82 @@ Before merge, verify each item and record the evidence in the PR or final handof
53
53
  - **Git hygiene is clean:** branch targets `develop`, unrelated local changes are not included, commit messages contain no AI attribution, and generated artefacts stay out of git.
54
54
  - **Memory is updated:** durable project rules or operational lessons are written to agent memory before closing the work.
55
55
 
56
+ ## Governance & Enforcement
57
+
58
+ gflow-cli's AI-driven development flow is **followable in-repo**: the lifecycle is
59
+ documented here, and the rules that *can* be checked mechanically are. The model is
60
+ **advisory-first** — cheap, deterministic rules are hard-enforced; the
61
+ judgement-heavy gates (predict / council) are surfaced as non-blocking signals, not
62
+ gates you can game. (Patterned on the reference AI-DLC governance orchestrator, which
63
+ classifies-always but blocks only on an opt-in flag.)
64
+
65
+ ### The lifecycle
66
+
67
+ ```
68
+ /gflow:predict → /gflow:scenario → /gflow:plan → (implement) →
69
+ /gflow:branch-review or /gflow:pr-council-review → /gflow:check → /gflow:release
70
+ ```
71
+
72
+ Skip predict/scenario/plan for trivial fixes (< 10 lines, no boundary cross) and pure
73
+ doc changes. Everything else: assess before you build.
74
+
75
+ ### What is hard-enforced vs advisory
76
+
77
+ | Rule | Enforced by | Type |
78
+ |---|---|---|
79
+ | No `print()` in `src/` | ruff `T20` (`tests/**`, `scripts/**` exempt) | **hard** (CI lint) |
80
+ | Doc links resolve | `scripts/ci/check_doc_links.py` | **hard** (CI) |
81
+ | No tracked artefacts / hardcoded paths | `scripts/ci/check_repo_hygiene.py` | **hard** (CI + pre-commit) |
82
+ | Coverage ≥ 80% | `pytest --cov-fail-under` / SonarCloud | **hard** (CI) |
83
+ | Signed tags | release workflow | **hard** (CI) |
84
+ | Material-path list ↔ SKILL §1 in sync | `test_material_list_sync_passes_on_real_skill` | **hard** (CI) |
85
+ | Conventional branch prefix | `check_repo_hygiene.py::_check_branch_name` | **advisory** (warns; never blocks — platforms create `claude/*` / `dependabot/*` branches, and it no-ops in CI's detached-HEAD checkout) |
86
+ | predict / council on material paths | `governance-advisory.yml` + `check_materiality.py` | **advisory** (recommendation in the job summary) |
87
+ | Traceability (plan reference + tests) | `check_materiality.py` | **advisory** (report-only) |
88
+
89
+ ### Materiality coverage (path → recommended gate)
90
+
91
+ Touching these surfaces triggers an advisory recommendation to run predict + council.
92
+ The canonical list is `scripts/ci/check_materiality.py::MATERIAL_PATHS`; the priority
93
+ weights live in [`skills/pr-council-review/SKILL.md`](../skills/pr-council-review/SKILL.md) §1.
94
+
95
+ | Path | Why material | Recommended gate |
96
+ |---|---|---|
97
+ | `src/gflow_cli/auth/`, `recaptcha` | Google anti-bot / auth lifecycle | predict (security persona) + council |
98
+ | `src/gflow_cli/api/client.py`, `_sapisidhash.py` | Auth-token plumbing (Bearer / access-token / SAPISID) outside `auth/`; surfaced as a coverage gap by `scripts/dev/materiality_backtest.py` (3 historical fixes) | predict (security persona) + council |
99
+ | `src/gflow_cli/api/transports/` | Highest-risk transport surface; live-verify | predict + council (live-verify) |
100
+ | `src/gflow_cli/data/` | SQLite migration / data-loss risk | predict + council (migration safety) |
101
+
102
+ ### Non-blocking signals
103
+
104
+ The materiality and traceability surfaces are **informational only** — they never fail
105
+ the build and are not required checks. They guide behaviour; only the hard gates above
106
+ block a merge. Do not read the advisory job's red/green as a merge gate.
107
+
108
+ ### Calibrating the gate (is it worth the friction?)
109
+
110
+ The material-path list is **measured, not asserted**.
111
+ [`docs/GOVERNANCE_BENCHMARK.md`](GOVERNANCE_BENCHMARK.md) documents a history-replay
112
+ backtest (`scripts/dev/materiality_backtest.py`) that scores the gate on two axes —
113
+ false-positive friction and fix-coverage — and the loop for acting on the numbers.
114
+ Current baseline: **1.1% false positives, 73.7% fix-coverage**. Re-run it before
115
+ changing `MATERIAL_PATHS`.
116
+
117
+ ### Conscious deferral
118
+
119
+ Hard enforcement of the material-path gate (an opt-in `--block-on=material` flag plus a
120
+ branch-protection required check) is **deliberately deferred**, matching the reference
121
+ implementation's opt-in design — it is a future option, not an omission. The hook point
122
+ is reserved in `check_materiality.py` (which already classifies every change).
123
+
124
+ ### Satisfying a gate without Claude Code
125
+
126
+ Every gate enforces a **deliverable**, not a Claude-specific command. Non-Claude agents
127
+ (Cursor / Codex / Gemini CLI / Aider) and humans read the relevant `skills/<name>/SKILL.md`
128
+ directly and produce the same artifact — e.g. read `skills/predict/SKILL.md` and write the
129
+ 5-persona verdict into the PR, instead of running `/gflow:predict`.
130
+
56
131
  ## When in doubt
57
132
 
133
+
58
134
  Read [docs/INDEX.md](INDEX.md). It has a topic-shortcut block at the bottom that answers most "where do I find…?" questions in one hop.
@@ -8,8 +8,8 @@
8
8
  > built **greenfield off `develop`, NOT stacked on #123** (that branch is CONFLICTING and likeness-specific;
9
9
  > see [Design decisions](#11-design-decisions-post-predict)).
10
10
 
11
- > **Shipped scope:** `gflow character create` + `list` + `show` + `voices`. The reuse path
12
- > `gflow video --character` (Phase 3), `gflow image --character`, and `gflow character rm` are **not yet
11
+ > **Shipped scope:** `gflow character create` + `list` + `show` + `voices` + `rm`. The reuse path
12
+ > `gflow video --character` (Phase 3) and `gflow image --character` are **not yet
13
13
  > implemented** — see [Backlog](#14-backlog--not-yet-implemented).
14
14
 
15
15
  > **Status (2026-06-02, LIVE-VERIFIED):** the create saga + character-editor UI generation are **shipped**
@@ -260,8 +260,8 @@ both normalize to the canonical `Charon`) and sets `audioReferences[].presetVoic
260
260
  The `create` / `list` / `show` / `voices` commands below are **shipped and
261
261
  live-verified in v0.12.0** (the user-facing reference lives in
262
262
  [USAGE § `gflow character`](USAGE.md#gflow-character)). The `gflow video --character`
263
- reuse path, `gflow image --character`, and `gflow character rm` remain
264
- **backlog** (rows marked *not yet implemented*).
263
+ reuse path and `gflow image --character` remain **backlog** (rows marked *not
264
+ yet implemented*). `gflow character rm` is **shipped** (see the table below).
265
265
 
266
266
  | Command | Maps to |
267
267
  |---|---|
@@ -270,7 +270,7 @@ reuse path, `gflow image --character`, and `gflow character rm` remain
270
270
  | `gflow character show --project <id> (--id <entityId> \| --name <displayName>) [--json]` *(SHIPPED v0.12.0)* | projectInitialData (single); name collision → exit 11 with disambiguation hint |
271
271
  | `gflow character voices [--json]` *(SHIPPED v0.12.0)* | list the 29 preset voices (name / description / sample-url); language-agnostic discovery, mirrors `gflow models --json` |
272
272
  | `gflow video … --character <id>` *(repeatable → multi-ref)* | **not yet implemented** (Phase 3) — `referenceEntities` on `video:batchAsyncGenerateVideoReferenceImages` |
273
- | `gflow character rm <id>` | **not yet implemented** — entity delete verb uncaptured |
273
+ | `gflow character rm` (`--id`/`--name`) | **Shipped v0.13.0 (#150)** — `POST flow:batchDeleteAssets` (Bearer; FREE — no reCAPTCHA/credit) |
274
274
  | `gflow image … --character <id>` | **not yet implemented** — image-path `referenceEntities` uncaptured |
275
275
 
276
276
  All commands take **`--project <id>` (required)** — every endpoint (`createEntity`, `projectInitialData`,
@@ -305,7 +305,7 @@ never hard-code wire names in user-facing help — see [[cli-model-aliases-verif
305
305
  ## 10. Open items
306
306
 
307
307
  See [§14 Backlog — not yet implemented](#14-backlog--not-yet-implemented) for the consolidated list. In
308
- short: `gflow video --character` reuse (Phase 3), `gflow image --character`, `gflow character rm`, live voice
308
+ short: `gflow video --character` reuse (Phase 3), `gflow image --character`, live voice
309
309
  listing + `presetVoiceId` wire-case confirmation, custom-voice creation, `nanopro` picker live confirmation,
310
310
  and extra body angles. The optional creation-agent (`flowCreationAgent/sessions`,
311
311
  `flow.generateCharacterPrompt` archetypes) is not required for the scripted path; consider an `--archetype`
@@ -495,9 +495,8 @@ The following are explicitly **out of the shipped scope** and tracked for future
495
495
  - **Extra body angles beyond the built-in triptych.** The shipped body slot generates a single front/side/back
496
496
  triptych. Generating additional angles/poses (e.g. re-feeding the front view as a reference seed for a new
497
497
  slot) is a future enhancement.
498
- - **`gflow character rm` / `gflow image --character`.** The entity **delete** verb and the **image-path**
499
- reuse (`referenceEntities` on the image endpoint) are uncaptured deferred until their wire shapes are
500
- reverse-engineered.
498
+ - **`gflow image --character`.** The **image-path** reuse (`referenceEntities` on the image endpoint) is
499
+ uncaptured deferred until its wire shape is reverse-engineered. (`gflow character rm` is now shipped, #150.)
501
500
  - **Set the Flow editor title field** so the editor isn't "Untitled Character" (see [§13.1 Known issues](#131-known-issues)).
502
501
  Investigate either the UI title box (with a Ctrl+A merge-bug workaround) or finding the dedicated title
503
502
  field/endpoint that the editor widget reads from, distinct from `entityInfo.displayName`.
@@ -456,8 +456,6 @@ These are tracked in [`PLAN.md`](../PLAN.md) under the data-layer phase backlog.
456
456
 
457
457
  ## See also
458
458
 
459
- - [Spec](superpowers/specs/2026-05-24-data-layer-design.md) — original design document with goals, non-goals, and architectural rationale.
460
- - [Plan](superpowers/plans/2026-05-24-data-layer.md) — task-by-task implementation plan.
461
459
  - [`CONFIGURATION.md`](CONFIGURATION.md) — env-var reference.
462
460
  - [`EXTERNAL_STORAGE.md`](EXTERNAL_STORAGE.md) — S3, MinIO, and GCS output configuration.
463
461
  - [`USAGE.md`](USAGE.md) — `gflow data media` command reference.
@@ -131,6 +131,7 @@ This repo is actively developed with Claude Code (see [CLAUDE.md](../CLAUDE.md))
131
131
  ## See also
132
132
 
133
133
  - [CONTRIBUTING.md](../CONTRIBUTING.md) — TDD, quality gates, how to add a route, commit style
134
+ - [docs/GOVERNANCE_BENCHMARK.md](GOVERNANCE_BENCHMARK.md) — calibrating the advisory materiality gate (false-positive / coverage backtest)
134
135
  - [docs/GITHUB.md](GITHUB.md) — GitHub PR triage, external fork handling, SonarCloud scenarios
135
136
  - [RELEASE.md](../RELEASE.md) — release checklist, PyPI/GitHub publishing, tag protocol
136
137
  - [CHANGELOG.md](../CHANGELOG.md) — version history
@@ -0,0 +1,107 @@
1
+ # Governance benchmark — calibrating the materiality gate
2
+
3
+ > How we measure whether the advisory materiality gate
4
+ > ([`scripts/ci/check_materiality.py`](../scripts/ci/check_materiality.py)) is
5
+ > *worth its friction*, and how to act on the numbers. Companion to
6
+ > [AGENT_GUIDE § Governance & Enforcement](AGENT_GUIDE.md#governance--enforcement).
7
+
8
+ ## Why benchmark a governance gate
9
+
10
+ The gate flags changes to "material" paths (auth, transports, the auth-token
11
+ client, the data layer, reCAPTCHA) and recommends a `predict` + council pass. That
12
+ recommendation is only worth making if the gate is **well-aimed**: it should fire on
13
+ the code that actually breaks, and *not* nag people for trivial edits. Those are two
14
+ measurable properties, and guessing at them is how governance theatre starts. The
15
+ [predict council](../skills/predict/SKILL.md) *estimated* 20–30% false-positive
16
+ friction; the benchmark replaced that guess with a measured **~1%**.
17
+
18
+ ## The tool
19
+
20
+ [`scripts/dev/materiality_backtest.py`](../scripts/dev/materiality_backtest.py)
21
+ replays non-merge commits from real git history and scores the **exact gate that
22
+ ships** — it imports `is_material` from the classifier, so the benchmark and the gate
23
+ can never disagree.
24
+
25
+ ```bash
26
+ # Full history, human-readable Markdown
27
+ uv run python scripts/dev/materiality_backtest.py
28
+
29
+ # Machine-readable JSON (regression checks / CI snapshotting)
30
+ uv run python scripts/dev/materiality_backtest.py --json
31
+
32
+ # Scope to a window or a range
33
+ uv run python scripts/dev/materiality_backtest.py --limit 100
34
+ uv run python scripts/dev/materiality_backtest.py --range v0.10.0..HEAD
35
+ ```
36
+
37
+ ## What it measures
38
+
39
+ | Axis | Question | Metric | Want |
40
+ |---|---|---|---|
41
+ | **1 — friction** | Of commits touching a material path, how many were *trivial* (comment / blank / whitespace / rename only)? | false-positive rate | **low** |
42
+ | **2 — coverage** | Of `fix:` / `hotfix` / `revert` commits, how many touched a material path? | coverage % | **high** |
43
+
44
+ **Axis 1** judges "substantive" from a whitespace-insensitive (`git show -w`) diff of
45
+ the material files only, counting any added/removed line that is non-blank and not a
46
+ `#` comment. It therefore catches reformatting, comment-only, blank-line and
47
+ pure-rename churn. It does **not** detect Python docstring-only edits, so the reported
48
+ rate is a **conservative lower bound**.
49
+
50
+ **Axis 2** is a proxy: it assumes a `fix`/`revert` commit landing in a path means that
51
+ path was bug-prone. Fixes landing *outside* material paths are listed as **candidate
52
+ coverage gaps** — surfaces that bite us but the gate currently ignores.
53
+
54
+ ## Baseline
55
+
56
+ Re-run and compare against this when you change `MATERIAL_PATHS` or suspect drift.
57
+
58
+ | Metric | Value (as of 2026-06-03, 247 commits) |
59
+ |---|---|
60
+ | Material-path commits | 89 (36.0% of all commits) |
61
+ | **False-positive rate (Axis 1)** | **1.1%** (1 of 89) |
62
+ | Fix / revert commits | 57 |
63
+ | **Fix-coverage (Axis 2)** | **73.7%** (42 of 57) |
64
+
65
+ History of the gate's calibration:
66
+
67
+ - **Initial 4-path gate** (`auth/`, `api/transports/`, `data/`, `recaptcha`): FP 1.4%,
68
+ coverage 61.4%.
69
+ - **After adding `api/client.py` + `_sapisidhash.py`** (auth-token plumbing the
70
+ backtest surfaced as 3 historical fixes outside `auth/`): FP 1.1%, coverage 73.7%
71
+ — strictly better on both axes.
72
+
73
+ ## How to act on the numbers
74
+
75
+ - **Axis 1 climbs** (say > 10%) → the path-only gate is becoming too blunt. Either
76
+ tighten `MATERIAL_PATHS` to more specific files, or upgrade the gate to classify on
77
+ diff content (skip comment/rename-only changes). At ~1% today, this is **not**
78
+ warranted — a deliberate "don't build the complex thing" call backed by data.
79
+ - **Axis 2 is low / a clear pattern sits in the gap list** → a bug-prone surface is
80
+ unguarded. Add the specific file(s) to `MATERIAL_PATHS`. Keep it **precise** (name
81
+ the file, e.g. `api/client.py`) rather than broad (`api/`) so routine code stays
82
+ unflagged. Then update [`skills/pr-council-review/SKILL.md`](../skills/pr-council-review/SKILL.md)
83
+ §1 in the same commit — the `test_material_list_sync_passes_on_real_skill` test
84
+ fails the build if the constant and the prose drift apart.
85
+ - **Re-run after every change** and confirm both axes moved the right way before
86
+ committing. That is the calibration loop.
87
+
88
+ ### Known non-gaps (intentionally not flagged)
89
+
90
+ - The `scene` command surface shows occasional fixes but is a **feature** area, not a
91
+ security/data-integrity one — left routine on purpose.
92
+
93
+ ## Cadence & automation
94
+
95
+ - **On demand** — before adding/removing a material path, or when reviewing the gate.
96
+ - **Before a release** — a quick `uv run python scripts/dev/materiality_backtest.py`
97
+ is part of governance hygiene.
98
+ - **Automated** — [`.github/workflows/governance-benchmark.yml`](../.github/workflows/governance-benchmark.yml)
99
+ runs it monthly (and on `workflow_dispatch`) and writes the report to the job
100
+ summary. It is **non-blocking and read-only** (no token, fork-safe) — a dashboard,
101
+ not a gate.
102
+
103
+ ## See also
104
+
105
+ - [AGENT_GUIDE § Governance & Enforcement](AGENT_GUIDE.md#governance--enforcement) — the gate itself, hard-vs-advisory table.
106
+ - [`skills/pr-council-review/SKILL.md`](../skills/pr-council-review/SKILL.md) §1 — canonical material-path priority weights.
107
+ - [DEVELOPMENT.md](DEVELOPMENT.md) — quality gates and PR protocol.
@@ -10,6 +10,7 @@ Welcome to the `gflow-cli` documentation. This index is the routing layer: it te
10
10
  | [llms.txt](../llms.txt) | LLM-readable summary (llmstxt.org format) | A user pastes context about gflow into ChatGPT / Claude / Gemini |
11
11
  | [docs/PROJECT_STATUS.md](PROJECT_STATUS.md) | Full milestone history + lifecycle policy | Auditing where the project is in its lifecycle |
12
12
  | [docs/AGENT_GUIDE.md](AGENT_GUIDE.md) | Mandates and routing rules for AI agents (companion to AGENTS.md) | A coding agent needs the longer non-negotiable rules |
13
+ | [docs/GOVERNANCE_BENCHMARK.md](GOVERNANCE_BENCHMARK.md) | How the advisory materiality gate is measured (false-positive / coverage backtest) and calibrated | You're changing `MATERIAL_PATHS` or auditing whether the governance gate earns its friction |
13
14
  | [CLAUDE.md](../CLAUDE.md) | Claude Code's session memory hub (Claude-Code-specific protocol; delegates universal rules to AGENTS.md) | First time Claude Code opens the repo |
14
15
  | [PLAN.md](../PLAN.md) | Implementation plan (DDD / CQRS / phases / ADRs) | You want the architectural intent and roadmap |
15
16
  | [RELEASE.md](../RELEASE.md) | Release checklist, prerelease policy, PyPI/GitHub publishing protocol | Cutting or auditing a release |
@@ -57,11 +58,13 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
57
58
 
58
59
  ## Topic shortcuts
59
60
 
61
+ **"What's the governance flow, and which paths require predict/council?"** → [AGENT_GUIDE § Governance & Enforcement](AGENT_GUIDE.md#governance--enforcement)
62
+ **"Why did the materiality advisory flag my PR?"** → [AGENT_GUIDE § Materiality coverage](AGENT_GUIDE.md#materiality-coverage-path--recommended-gate)
60
63
  **"I just installed gflow — how do I get to my first video?"** → [USER_GUIDE § Journey 1](USER_GUIDE.md#journey-1--first-time-setup-10-minutes)
61
64
  **"How do I render 20 clips overnight with concurrency?"** → [USER_GUIDE § Journey 3](USER_GUIDE.md#journey-3--batch-video-with-concurrency)
62
65
  **"How much will this batch cost me in Veo credits?"** → [USER_GUIDE § Journey 10](USER_GUIDE.md#journey-10--budgeting-credits-before-a-batch-run)
63
66
  **"How do I feed gflow outputs into ffmpeg / a pipeline?"** → [USER_GUIDE § Journey 11](USER_GUIDE.md#journey-11--wiring-gflow-outputs-into-a-downstream-pipeline)
64
- **"How do I chain clips into one continuous video (last-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
67
+ **"How do I chain clips into one continuous video (initial-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
65
68
  **"How do I stitch existing clips into one extended .mp4 (credit-free, no ffmpeg)?"** → [USAGE § `gflow scene`](USAGE.md#gflow-scene)
66
69
  **"How do I create a reusable character (face + body) I can reuse across generations?"** → [USAGE § `gflow character`](USAGE.md#gflow-character) · design: [CHARACTER](CHARACTER.md)
67
70
  **"What preset voices can a character use?"** → run `gflow character voices` — see [USAGE § `gflow character voices`](USAGE.md#gflow-character-voices)
@@ -100,7 +103,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
100
103
  **"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
101
104
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
102
105
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
103
- **"What was actually live-verified for the latest release?"** → [LIVE_VERIFICATION_v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · prior: [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md)
106
+ **"What was actually live-verified for the latest release?"** → [LIVE_VERIFICATION_v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · prior: [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md)
104
107
  **"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
105
108
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
106
109
  **"What is the jitter matrix evidence for `gflow image batch`?"** → [`LIVE_VERIFICATION_image_batch.md`](LIVE_VERIFICATION_image_batch.md) — jitter matrix evidence for `gflow image batch` (always-same-project mode)
@@ -74,10 +74,12 @@ module list + command surface + exit-code range 3→21, `llms.txt`, `skills/gflo
74
74
 
75
75
  ## Post-tag evidence
76
76
 
77
- _To be filled after the tag is pushed and the release workflow publishes:_
77
+ Verified 2026-06-03 after the tag push:
78
78
 
79
- - [ ] CI `Release` workflow run — completed / success
80
- - [ ] GitHub Release published (`gh release view v0.12.0`)
81
- - [ ] PyPI shows `gflow-cli 0.12.0`
82
- - [ ] `pip install gflow-cli==0.12.0` in a clean venv imports and reports the right version
83
- - [ ] `main → develop` back-merge completed
79
+ - [x] CI `Release` workflow run — **completed / success** (run `26876149496`: Verify-signed-tag → Verify-version-match → Build → **Publish to PyPI** → Create GitHub Release, all green, with digital attestations).
80
+ - [x] GitHub Release published `gh release view v0.12.0`: not draft, not prerelease, published 2026-06-03 (<https://github.com/ffroliva/gflow-cli/releases/tag/v0.12.0>).
81
+ - [x] PyPI shows `gflow-cli 0.12.0` — `pypi.org/pypi/gflow-cli/json` → `info.version == 0.12.0`, present in `releases`.
82
+ - [x] **Clean-venv install of the published package** — fresh venv, `pip install gflow-cli==0.12.0` from PyPI: `import gflow_cli` `0.12.0`; `gflow --version` → `gflow, version 0.12.0`; `gflow models` renders the catalog. Confirms the published artifact is importable and the console entry point works.
83
+ - [x] `main → develop` back-merge completed — `git rev-list --count origin/develop..origin/main == 0` (branches aligned).
84
+
85
+ > **Not yet done (deliberate):** a live *generation* smoke with the published 0.12.0 (1 Imagen credit) and the paid `video chain` / `character create` e2e runs remain opt-in credit spends — `tests/e2e/test_{chain,character_create,scene_compose}*.py` exist but are gated. The character + scene paths were live-verified during their feature builds (2026-06-02 and the scene PRs); a published-package generation smoke is the strongest remaining proof and is tracked as a follow-up.
@@ -0,0 +1,60 @@
1
+ # Live verification — v0.13.0
2
+
3
+ > Evidence record for the v0.13.0 release. v0.13.0 focuses on CLI flag alignment with
4
+ > the Flow UI and internal technical hardening.
5
+
6
+ ## Summary
7
+
8
+ This release aligns the Image-to-Video (I2V) CLI surface with Google Flow's own terminology
9
+ and provides high-fidelity E2E verification of the CLI transport. It also integrates
10
+ in-project governance gates (ruff T20, materiality classification) to harden the
11
+ AI-driven development flow.
12
+
13
+ - **Verified by:** ffroliva (Gemini CLI)
14
+ - **Date:** 2026-06-04
15
+ - **gflow-cli version:** 0.13.0
16
+ - **Status:** 🟢 Green (unanimous council consensus + live E2E passing)
17
+
18
+ ## 1. Quality Gates
19
+
20
+ Observed — 2026-06-04, `chore/release-v0.13.0` branch:
21
+
22
+ - [x] **Lint/Format** — `ruff check` (0 errors), `ruff format` (no changes).
23
+ - [x] **Type Check** — `pyright src` (0 errors).
24
+ - [x] **Unit Tests** — `pytest` (1445 passed). Coverage: 88.44% (>= 80% requirement).
25
+
26
+ ## 2. Technical Hardening
27
+
28
+ - [x] **Click Greedy-Fill Fix** — The `i2v` command now robustly handles positional
29
+ argument collision when `--initial-frame` is used.
30
+ - [x] **Path Normalization** — `resolved_image` is normalized via `.resolve()` before
31
+ transport, ensuring consistent absolute paths in audit logs.
32
+ - [x] **Service Layer Typing** — `character_create` saga refactored to use
33
+ `TYPE_CHECKING` for `FlowApiClient`, eliminating manual casts and circular deps.
34
+
35
+ ## 3. E2E Evidence (Live Flow)
36
+
37
+ The following tests were executed against a live Google AI Pro account (`denon82` profile)
38
+ and verified to produce valid mp4 assets and correct automation events:
39
+
40
+ | Test | Criterion | Outcome |
41
+ |------|-----------|---------|
42
+ | `test_e2e_i2v_initial_frame_flag` | I2V-FLAG-1: `--initial-frame` routes to I2V, `frame_attached` event fires | **PASSED** |
43
+ | `test_e2e_i2v_positional_back_compat` | I2V-FLAG-2: Positional `IMAGE PROMPT` still functional | **PASSED** |
44
+ | `test_e2e_i2v_start_end_frame_flags` | I2V-FLAG-3: Interpolation path attaches both frames correctly | **PASSED** |
45
+
46
+ **Logs:** Verified `ui_automation_video.frame_attached` fired twice for the interpolation
47
+ path, confirming binding to the correct Flow editor slots.
48
+
49
+ ## 4. Documentation Audit
50
+
51
+ - [x] `CHANGELOG.md` updated and [0.13.0] section populated.
52
+ - [x] `README.md` link rot repaired (DISCLAIMER, PROJECT_STATUS, GITHUB).
53
+ - [x] All examples in `docs/` and `skills/` updated to use `--initial-frame` and `--out-dir`.
54
+ - [x] `docs/INDEX.md` routing updated.
55
+
56
+ ## 5. Deployment Readiness
57
+
58
+ - [x] `gh release view v0.13.0` (pending push)
59
+ - [x] PyPI publish (pending tag push)
60
+ - [x] **Clean-venv install** — `import gflow_cli` -> `0.13.0`.
@@ -4,9 +4,9 @@
4
4
 
5
5
  ## Current release
6
6
 
7
- **v0.12.0 — alpha.** A feature release adding three new command surfaces. **`gflow character`** mints reusable, project-scoped Flow **Character** entities — a named subject with reference images, an optional voice, and an optional personality — so the same subject appears consistently across generations (`create` / `list` / `show` / `voices`, #145); creation runs as a persist-before-spend, crash-recoverable saga and was live-verified end-to-end (face + triptych body, downloaded, read back). **`gflow scene`** composes ordered clips into a scene (Add Clip / Scenes) and renders a credit-free, server-side **extended video** via `runVideoFxConcatenation` (no local ffmpeg). **`gflow video chain`** renders a JSONL manifest of links into one continuous sequence — link 0 is a t2v generation, each later link an i2v seeded by the previous clip's extracted last frame (one credit per link; `--dry-run`, `--max-links`, `--resume-from`). This release also fixes create-project generation when Flow surfaces Agent mode as a docked chat panel. The v0.11.0/v0.10.0 baseline stands: Image (T2I / I2I / upload) + Video T2V / I2V / R2V live end-to-end on the `ui_automation` transport against live Pro/Ultra accounts, with a video `--model` picker (5 Veo models) and `--duration` / `--count`; machine-readable `--json` across every generation command plus a `gflow models` catalog; per-model reference-image caps for `i2i` and `r2v`; Google-account identity persisted per profile (issue #92); external cloud storage to S3 / MinIO / GCS via `GFLOW_CLI_STORAGE_URI`; and a `gflow data prune` maintenance command. Only video `batch` (manifest runner) is still queued for Phase B — use a shell for-loop until then ([USAGE](USAGE.md#gflow-video-batch)). Three earlier HTTP transport strategies live under `src/gflow_cli/api/transports/experimental/` (`evaluate_fetch` / `bearer` / `sapisidhash`); the production path is `ui_automation`.
7
+ **v0.13.0 — alpha.** High-fidelity CLI hardening and term alignment. **`gflow video i2v`** now uses the canonical `--initial-frame` and `--end-frame` flags (matching Flow's UI labels), with robust Click greedy-fill protection and positional backward compatibility. **In-project governance** (ruff T20, materiality classification) is now active to harden the AI-driven development flow. This release also refactors the **`character_create` saga** for improved type safety and documentation. Live-verified end-to-end on 2026-06-04 with the new flags and interpolation paths.
8
8
 
9
- **Develop (unreleased, post-v0.12.0):** *(empty — develop is the staging branch for the next release).*
9
+ **Develop (unreleased, post-v0.13.0):** *(empty — develop is the staging branch for the next release).*
10
10
 
11
11
  ## Milestone history
12
12
 
@@ -49,6 +49,9 @@
49
49
  | `gflow video i2v` routes to the Veo i2v endpoint (no silent T2V fallback) + `veo-lite` default (issue #125) | ✅ done (v0.11.0) |
50
50
  | Create-project generation works under Flow's "Agent" composer mode | ✅ done (v0.11.0) |
51
51
  | Image-model selection hardened for non-English Flow UIs (selector cascade, #94) | ✅ done (v0.11.0) |
52
+ | `gflow character rm` — free character deletion (#150) | ✅ done (v0.13.0) |
53
+ | Align I2V CLI flags with Flow UI Labels (`--initial-frame`) (#122) | ✅ done (v0.13.0) |
54
+ | In-project governance (ruff T20, materiality Classifier) | ✅ done (v0.13.0) |
52
55
  | `gflow character` — reusable Flow Character entities (`create`/`list`/`show`/`voices`), persist-before-spend saga (#145) | ✅ done (v0.12.0) |
53
56
  | `gflow scene` — Add Clip / Scenes compose + credit-free server-side extended video (`runVideoFxConcatenation`) | ✅ done (v0.12.0) |
54
57
  | `gflow video chain` — last-frame I2V chaining from a JSONL manifest (`--dry-run`/`--max-links`/`--resume-from`) | ✅ done (v0.12.0) |