gflow-cli 0.43.0__tar.gz → 0.45.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 (683) hide show
  1. gflow_cli-0.45.0/.agents/plugins/marketplace.json +20 -0
  2. gflow_cli-0.45.0/.codex-plugin/plugin.json +34 -0
  3. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.pre-commit-config.yaml +3 -1
  4. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/AGENTS.md +32 -1
  5. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CHANGELOG.md +137 -1
  6. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CONTRIBUTING.md +16 -0
  7. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/KNOWN_ISSUES.md +49 -16
  8. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/PKG-INFO +2 -2
  9. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/RELEASE.md +2 -1
  10. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/CHARACTER.md +20 -10
  11. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/CHARACTER_RECON.md +70 -0
  12. {gflow_cli-0.43.0/website → gflow_cli-0.45.0}/docs/CONFIGURATION.md +3 -3
  13. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DATA_LAYER.md +40 -5
  14. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/INDEX.md +3 -1
  15. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.43.0.md +3 -2
  16. gflow_cli-0.45.0/docs/LIVE_VERIFICATION_v0.44.0.md +37 -0
  17. gflow_cli-0.45.0/docs/LIVE_VERIFICATION_v0.45.0.md +138 -0
  18. {gflow_cli-0.43.0/website → gflow_cli-0.45.0}/docs/MOVIE.md +6 -3
  19. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/PROJECT_STATUS.md +9 -2
  20. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/USAGE.md +10 -7
  21. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +130 -0
  22. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +176 -0
  23. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +126 -0
  24. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +49 -0
  25. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +198 -0
  26. gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +90 -0
  27. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/pyproject.toml +3 -3
  28. gflow_cli-0.45.0/scripts/dev/spike_character_prompt_format.py +121 -0
  29. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/gflow-cli/SKILL.md +2 -1
  30. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/release/SKILL.md +12 -3
  31. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/__init__.py +1 -1
  32. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/_cli_helpers.py +24 -0
  33. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_retry.py +28 -5
  34. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/client.py +100 -14
  35. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/routes.py +1 -0
  36. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/ui_automation.py +500 -48
  37. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/ui_automation_video.py +1 -0
  38. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli.py +2 -0
  39. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_character.py +14 -0
  40. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_data.py +123 -9
  41. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_image.py +74 -12
  42. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_movie.py +17 -12
  43. gflow_cli-0.45.0/src/gflow_cli/cli_project.py +214 -0
  44. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_video.py +56 -32
  45. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/queries.py +79 -18
  46. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/repository.py +99 -1
  47. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/errors.py +27 -22
  48. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/tools.py +46 -7
  49. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/profile_lease.py +6 -2
  50. gflow_cli-0.45.0/src/gflow_cli/redaction.py +14 -0
  51. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/character_create.py +6 -0
  52. gflow_cli-0.45.0/tests/api/test_client_errors.py +113 -0
  53. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_generate_character.py +14 -2
  54. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_retry.py +10 -0
  55. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation.py +61 -0
  56. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_character_editor.py +609 -52
  57. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_character_create.py +51 -0
  58. gflow_cli-0.45.0/tests/cli/test_cli_data_errors_retention.py +202 -0
  59. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image.py +1 -1
  60. gflow_cli-0.45.0/tests/cli/test_cli_image_uuid_ref_enrichment.py +218 -0
  61. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_movie.py +51 -8
  62. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_video_chain.py +166 -7
  63. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_error_handling.py +2 -2
  64. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_helpers.py +54 -0
  65. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_chain_e2e.py +4 -2
  66. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_character_create_e2e.py +84 -0
  67. gflow_cli-0.45.0/tests/e2e/test_image_uuid_ref_e2e.py +207 -0
  68. gflow_cli-0.45.0/tests/e2e/test_project_naming_e2e.py +184 -0
  69. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_image_steps.py +1 -0
  70. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_video_agent_ui_steps.py +16 -0
  71. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_video_chain_steps.py +54 -6
  72. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/video_chain.feature +12 -2
  73. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_cli_parity.py +6 -0
  74. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_helpers.py +34 -0
  75. gflow_cli-0.45.0/tests/scripts/test_codex_plugin.py +73 -0
  76. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_incident_bundle_quality.py +3 -3
  77. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_create_saga.py +34 -0
  78. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_gen_no_direct_post.py +1 -0
  79. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_cli_data.py +24 -0
  80. gflow_cli-0.45.0/tests/test_cli_project.py +212 -0
  81. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_data_queries.py +42 -0
  82. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_retention.py +7 -1
  83. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_errors.py +69 -0
  84. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_json_output.py +2 -0
  85. gflow_cli-0.45.0/tests/test_overlay_banner_dismissal.py +174 -0
  86. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_lease.py +22 -0
  87. gflow_cli-0.45.0/tests/test_self_documenting_errors.py +114 -0
  88. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/uv.lock +25 -25
  89. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/CHARACTER.md +20 -10
  90. {gflow_cli-0.43.0 → gflow_cli-0.45.0/website}/docs/CONFIGURATION.md +3 -3
  91. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DATA_LAYER.md +40 -5
  92. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/KNOWN_ISSUES.md +49 -16
  93. {gflow_cli-0.43.0 → gflow_cli-0.45.0/website}/docs/MOVIE.md +6 -3
  94. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/USAGE.md +10 -7
  95. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/AUDIT.md +0 -116
  96. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/PLAN.md +0 -773
  97. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/SCENARIO.md +0 -207
  98. gflow_cli-0.43.0/docs/superpowers/specs/2026-07-22-private-incident-diagnostics-design.md +0 -605
  99. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/README.md +0 -0
  100. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/active.md +0 -0
  101. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/branch-review.md +0 -0
  102. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/changelog.md +0 -0
  103. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/check.md +0 -0
  104. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/doc-review.md +0 -0
  105. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  106. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  107. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/known-issues.md +0 -0
  108. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/live-verify.md +0 -0
  109. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/llm-council.md +0 -0
  110. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/next.md +0 -0
  111. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/plan.md +0 -0
  112. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  113. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/predict.md +0 -0
  114. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/release.md +0 -0
  115. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/scenario.md +0 -0
  116. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/sonar.md +0 -0
  117. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/status.md +0 -0
  118. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.env.template +0 -0
  119. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitattributes +0 -0
  120. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/CODEOWNERS +0 -0
  121. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  122. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/copilot-instructions.md +0 -0
  123. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/dependabot.yml +0 -0
  124. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/ci.yml +0 -0
  125. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/external-pr-triage.yml +0 -0
  126. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/governance-advisory.yml +0 -0
  127. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/governance-benchmark.yml +0 -0
  128. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/main-base-guard.yml +0 -0
  129. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/pages.yml +0 -0
  130. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/release.yml +0 -0
  131. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitignore +0 -0
  132. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitleaks.toml +0 -0
  133. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.secrets.baseline +0 -0
  134. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CLAUDE.md +0 -0
  135. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CONFIGURATION.md +0 -0
  136. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/DISCLAIMER.md +0 -0
  137. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/LICENSE +0 -0
  138. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/PLAN.md +0 -0
  139. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/README.md +0 -0
  140. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/ROADMAP.md +0 -0
  141. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/conftest.py +0 -0
  142. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  143. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docker-compose.yml +0 -0
  144. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_GUIDE.md +0 -0
  145. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_UI_E2E.md +0 -0
  146. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_UI_RECON.md +0 -0
  147. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/ARCHITECTURE.md +0 -0
  148. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  149. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AUTHENTICATION.md +0 -0
  150. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEBUGGING.md +0 -0
  151. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEMOS.md +0 -0
  152. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEVELOPMENT.md +0 -0
  153. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/E2E_TESTING.md +0 -0
  154. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/EXTERNAL_STORAGE.md +0 -0
  155. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/GITHUB.md +0 -0
  156. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  157. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  158. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/INSTRUCTIONS.md +0 -0
  159. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  160. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  161. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  162. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  163. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  164. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  165. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  166. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  167. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  168. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  169. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  170. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  171. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  172. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  173. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  174. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  175. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  176. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  177. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  178. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  179. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  180. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  181. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  182. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  183. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  184. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  185. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  186. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  187. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  188. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  189. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  190. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  191. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  192. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  193. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  194. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  195. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  196. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  197. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  198. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  199. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  200. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  201. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  202. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/MCP.md +0 -0
  203. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/PROMPT_EXPANSION.md +0 -0
  204. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  205. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/SECURITY.md +0 -0
  206. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/TOOLS.md +0 -0
  207. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/USER_GUIDE.md +0 -0
  208. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/demo-split-pf.gif +0 -0
  209. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/example-run.gif +0 -0
  210. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/examples.webp +0 -0
  211. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/medium_tutorial.md +0 -0
  212. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/schemas/movie-handoff.schema.json +0 -0
  213. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/sonar-cleanup-tracker.md +0 -0
  214. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  215. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  216. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  217. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  218. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  219. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  220. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  221. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  222. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  223. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  224. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  225. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  226. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  227. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  228. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  229. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  230. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  231. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  232. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  233. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  234. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  235. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  236. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  237. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  238. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  239. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  240. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  241. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  242. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/eval/pr_triage_eval.py +0 -0
  243. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/eval/pr_triage_fixtures.json +0 -0
  244. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/README.md +0 -0
  245. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/batch_from_config.py +0 -0
  246. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/multi_prompt_t2i.py +0 -0
  247. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/sample_config.json +0 -0
  248. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/sample_prompts.txt +0 -0
  249. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/single_image_t2i.py +0 -0
  250. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/workflow_chain.py +0 -0
  251. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/index.html +0 -0
  252. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/llms.txt +0 -0
  253. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/README.md +0 -0
  254. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/01_upload_image.json +0 -0
  255. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  256. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  257. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/04_archive_workflow.json +0 -0
  258. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/05_createProject.json +0 -0
  259. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/06_batchGenerateImages.json +0 -0
  260. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  261. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  262. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  263. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  264. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  265. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/12_create_scene.json +0 -0
  266. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  267. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/14_get_scene_workflows.json +0 -0
  268. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  269. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/Dockerfile.triage +0 -0
  270. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/entrypoint.sh +0 -0
  271. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  272. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  273. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  274. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_doc_links.py +0 -0
  275. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_materiality.py +0 -0
  276. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_release_artifacts.py +0 -0
  277. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_repo_hygiene.py +0 -0
  278. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_website_docs_pii.py +0 -0
  279. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/generate_website_docs.py +0 -0
  280. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_editor.py +0 -0
  281. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_gen_settings.py +0 -0
  282. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_settings.py +0 -0
  283. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/_recording_client.py +0 -0
  284. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/_spike_common.py +0 -0
  285. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/active_plan.py +0 -0
  286. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  287. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  288. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  289. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  290. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  291. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  292. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_locale_invariants.py +0 -0
  293. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  294. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/character_create_spike.py +0 -0
  295. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/character_create_spike_v2.py +0 -0
  296. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/dump_character_selectors.js +0 -0
  297. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/incident_bundle_quality.py +0 -0
  298. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/make_project.py +0 -0
  299. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/materiality_backtest.py +0 -0
  300. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/monitor_pr_38.py +0 -0
  301. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/patch_character.py +0 -0
  302. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/README.md +0 -0
  303. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/harness.py +0 -0
  304. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/tasks.json +0 -0
  305. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/sonar-local-scan.sh +0 -0
  306. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  307. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  308. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  309. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  310. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  311. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  312. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  313. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_incident_live.py +0 -0
  314. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  315. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  316. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  317. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  318. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  319. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  320. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  321. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  322. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  323. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  324. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  325. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_patch_entity.py +0 -0
  326. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_patchright.py +0 -0
  327. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/README.md +0 -0
  328. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/capture_flow_traffic.py +0 -0
  329. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/memory_profile.py +0 -0
  330. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/recaptcha_mint.py +0 -0
  331. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  332. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  333. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/record_demo.ps1 +0 -0
  334. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_image.py +0 -0
  335. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_video_editor.py +0 -0
  336. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_worker_style.py +0 -0
  337. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/spike_waf_camoufox.py +0 -0
  338. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/verify_chrome_auth_viability.py +0 -0
  339. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/README.md +0 -0
  340. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/changelog/SKILL.md +0 -0
  341. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/check/SKILL.md +0 -0
  342. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/doc-review/SKILL.md +0 -0
  343. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/issue-assessment/SKILL.md +0 -0
  344. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/issue-resolve/SKILL.md +0 -0
  345. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/known-issues/SKILL.md +0 -0
  346. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/live-verify/SKILL.md +0 -0
  347. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/llm-council/SKILL.md +0 -0
  348. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/plan/SKILL.md +0 -0
  349. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/pr-council-review/SKILL.md +0 -0
  350. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/predict/SKILL.md +0 -0
  351. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/scenario/SKILL.md +0 -0
  352. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/sonar/SKILL.md +0 -0
  353. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/status/SKILL.md +0 -0
  354. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/sonar-project.properties +0 -0
  355. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/__main__.py +0 -0
  356. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/__init__.py +0 -0
  357. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_engine.py +0 -0
  358. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  359. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/character.py +0 -0
  360. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/dto.py +0 -0
  361. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/image.py +0 -0
  362. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/image_upscale.py +0 -0
  363. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/recaptcha.py +0 -0
  364. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/scene.py +0 -0
  365. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  366. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/_common.py +0 -0
  367. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  368. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/base.py +0 -0
  369. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  370. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  371. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  372. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  373. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  374. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  375. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  376. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  377. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  378. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  379. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/video.py +0 -0
  380. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/__init__.py +0 -0
  381. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/base.py +0 -0
  382. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/cookies.py +0 -0
  383. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/factory.py +0 -0
  384. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  385. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  386. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/strategies.py +0 -0
  387. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/verification.py +0 -0
  388. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/browser_manager.py +0 -0
  389. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/chain.py +0 -0
  390. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/chain_manifest.py +0 -0
  391. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_instructions.py +0 -0
  392. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_models.py +0 -0
  393. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_run.py +0 -0
  394. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_scene.py +0 -0
  395. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_tools.py +0 -0
  396. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/composition.py +0 -0
  397. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/config.py +0 -0
  398. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/__init__.py +0 -0
  399. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/chain_repo.py +0 -0
  400. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  401. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  402. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  403. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  404. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  405. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  406. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  407. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  408. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  409. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  410. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/models.py +0 -0
  411. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/recorder.py +0 -0
  412. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/redaction.py +0 -0
  413. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/store.py +0 -0
  414. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/diagnostics.py +0 -0
  415. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/exceptions.py +0 -0
  416. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/image_batch.py +0 -0
  417. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/json_output.py +0 -0
  418. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/__init__.py +0 -0
  419. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/prompts.py +0 -0
  420. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/resources.py +0 -0
  421. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/server.py +0 -0
  422. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/media.py +0 -0
  423. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/movie_manifest.py +0 -0
  424. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/observability.py +0 -0
  425. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/paths.py +0 -0
  426. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/profile_store.py +0 -0
  427. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/__init__.py +0 -0
  428. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/mentions.py +0 -0
  429. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/storage.py +0 -0
  430. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/__init__.py +0 -0
  431. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/banned.py +0 -0
  432. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  433. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  434. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  435. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  436. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/expander.py +0 -0
  437. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/invocation.py +0 -0
  438. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/loader.py +0 -0
  439. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/registry.py +0 -0
  440. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/runtime.py +0 -0
  441. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/spec.py +0 -0
  442. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/ui/app.py +0 -0
  443. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/ui/server.py +0 -0
  444. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/codec.py +0 -0
  445. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/daemon.py +0 -0
  446. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/queue.py +0 -0
  447. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tasks/lessons.md +0 -0
  448. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch.json +0 -0
  449. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch.tsv +0 -0
  450. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch_invalid.tsv +0 -0
  451. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/__init__.py +0 -0
  452. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/__init__.py +0 -0
  453. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/fixtures/character_gen_response.json +0 -0
  454. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  455. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  456. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  457. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_bearer_redaction.py +0 -0
  458. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_character.py +0 -0
  459. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client.py +0 -0
  460. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_character.py +0 -0
  461. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_delete_characters.py +0 -0
  462. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_image.py +0 -0
  463. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_incidents.py +0 -0
  464. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_launch_kwargs.py +0 -0
  465. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_patch_entity.py +0 -0
  466. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_scene.py +0 -0
  467. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_upscale.py +0 -0
  468. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_concurrency.py +0 -0
  469. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_dto.py +0 -0
  470. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_engine.py +0 -0
  471. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image.py +0 -0
  472. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image_dto.py +0 -0
  473. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image_upscale.py +0 -0
  474. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  475. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_recaptcha.py +0 -0
  476. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes.py +0 -0
  477. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes_character.py +0 -0
  478. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes_scene.py +0 -0
  479. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_sapisidhash_helper.py +0 -0
  480. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_scene_models.py +0 -0
  481. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_video.py +0 -0
  482. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_video_request.py +0 -0
  483. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/__init__.py +0 -0
  484. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/conftest.py +0 -0
  485. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/__init__.py +0 -0
  486. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  487. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_classic.py +0 -0
  488. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_factory.py +0 -0
  489. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  490. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  491. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_base.py +0 -0
  492. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_bearer.py +0 -0
  493. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_common.py +0 -0
  494. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  495. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_factory.py +0 -0
  496. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_fingerprint.py +0 -0
  497. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_mode_control.py +0 -0
  498. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_sapisidhash.py +0 -0
  499. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  500. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_transport_timeout.py +0 -0
  501. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  502. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  503. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  504. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/strategies/test_factory.py +0 -0
  505. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/strategies/test_strategies.py +0 -0
  506. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_cookies.py +0 -0
  507. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_real_chrome.py +0 -0
  508. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_verification.py +0 -0
  509. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  510. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/__init__.py +0 -0
  511. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_auth_list.py +0 -0
  512. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_character.py +0 -0
  513. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_data.py +0 -0
  514. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_data_errors.py +0 -0
  515. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  516. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  517. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_upscale.py +0 -0
  518. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_instructions.py +0 -0
  519. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_models.py +0 -0
  520. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_run.py +0 -0
  521. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_scene.py +0 -0
  522. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_tools.py +0 -0
  523. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_video.py +0 -0
  524. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_failure_funnel.py +0 -0
  525. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_incident_output.py +0 -0
  526. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_movie_manifest.py +0 -0
  527. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  528. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_settings_validation.py +0 -0
  529. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  530. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_character.py +0 -0
  531. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_compose_prompt.py +0 -0
  532. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_handoff.py +0 -0
  533. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_style_variants.py +0 -0
  534. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_style_variants_e2e.py +0 -0
  535. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/conftest.py +0 -0
  536. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/__init__.py +0 -0
  537. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_chain_repo.py +0 -0
  538. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_failure_recording.py +0 -0
  539. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_find_incomplete_character.py +0 -0
  540. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_models.py +0 -0
  541. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_packaging.py +0 -0
  542. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_recorder.py +0 -0
  543. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_recorder_character.py +0 -0
  544. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_redaction.py +0 -0
  545. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_repository.py +0 -0
  546. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_scene_persistence.py +0 -0
  547. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_settings_and_errors.py +0 -0
  548. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_store_migrations.py +0 -0
  549. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/dev/test_recording_client.py +0 -0
  550. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/__init__.py +0 -0
  551. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/conftest.py +0 -0
  552. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  553. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  554. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  555. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  556. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  557. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  558. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_daemon_e2e.py +0 -0
  559. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  560. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  561. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  562. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  563. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  564. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  565. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_json_output_e2e.py +0 -0
  566. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  567. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  568. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_scene_compose_live.py +0 -0
  569. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_tools_e2e.py +0 -0
  570. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_transports_e2e.py +0 -0
  571. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  572. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  573. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/__init__.py +0 -0
  574. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/asset_tagging.feature +0 -0
  575. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/auth.feature +0 -0
  576. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/auth_login.feature +0 -0
  577. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/character_create.feature +0 -0
  578. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/character_read.feature +0 -0
  579. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/conftest.py +0 -0
  580. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/image.feature +0 -0
  581. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/image_upscale.feature +0 -0
  582. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/incident_diagnostics.feature +0 -0
  583. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/instructions.feature +0 -0
  584. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/locale_picker_include.feature +0 -0
  585. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_asset_tagging_steps.py +0 -0
  586. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_auth_login_steps.py +0 -0
  587. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_auth_steps.py +0 -0
  588. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_character_create_steps.py +0 -0
  589. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_character_read_steps.py +0 -0
  590. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_image_upscale_steps.py +0 -0
  591. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  592. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_instructions_steps.py +0 -0
  593. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  594. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_step_collision_guard.py +0 -0
  595. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/video_agent_ui.feature +0 -0
  596. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/fixtures/__init__.py +0 -0
  597. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/fixtures/seeded_catalog.py +0 -0
  598. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/__init__.py +0 -0
  599. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_image_manifest.py +0 -0
  600. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_jitter_config.py +0 -0
  601. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_observability_events.py +0 -0
  602. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/__init__.py +0 -0
  603. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/conftest.py +0 -0
  604. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/constants.py +0 -0
  605. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/test_storage_gcs.py +0 -0
  606. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/test_storage_s3.py +0 -0
  607. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/__init__.py +0 -0
  608. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/conftest.py +0 -0
  609. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_server.py +0 -0
  610. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_stdio_transport.py +0 -0
  611. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_instructions.py +0 -0
  612. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_wired.py +0 -0
  613. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  614. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  615. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_materiality.py +0 -0
  616. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  617. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  618. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  619. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_generate_website_docs.py +0 -0
  620. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_materiality_backtest.py +0 -0
  621. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/__init__.py +0 -0
  622. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_create_redaction.py +0 -0
  623. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_observability.py +0 -0
  624. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_parse.py +0 -0
  625. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_resolve.py +0 -0
  626. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_resolve_and_apply.py +0 -0
  627. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/__init__.py +0 -0
  628. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  629. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/test_real_flow.py +0 -0
  630. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_auth.py +0 -0
  631. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_browser_manager.py +0 -0
  632. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_chain.py +0 -0
  633. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_chain_manifest.py +0 -0
  634. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_config.py +0 -0
  635. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_conftest_isolation.py +0 -0
  636. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_bundle.py +0 -0
  637. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_events.py +0 -0
  638. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_journal.py +0 -0
  639. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_recorder.py +0 -0
  640. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_sanitize.py +0 -0
  641. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_documentation_gate.py +0 -0
  642. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_errors_classification.py +0 -0
  643. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_marker_registry.py +0 -0
  644. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_media.py +0 -0
  645. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_observability.py +0 -0
  646. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_paths.py +0 -0
  647. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_lease_subprocess.py +0 -0
  648. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_store.py +0 -0
  649. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_smoke.py +0 -0
  650. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/__init__.py +0 -0
  651. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_banned.py +0 -0
  652. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_expander.py +0 -0
  653. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_invocation.py +0 -0
  654. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_loader.py +0 -0
  655. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_registry.py +0 -0
  656. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_runtime.py +0 -0
  657. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_spec.py +0 -0
  658. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/ui/test_app.py +0 -0
  659. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_codec.py +0 -0
  660. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_daemon.py +0 -0
  661. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  662. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue.py +0 -0
  663. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue_multiprocess.py +0 -0
  664. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue_reconciliation.py +0 -0
  665. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/ARCHITECTURE.md +0 -0
  666. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/AUTHENTICATION.md +0 -0
  667. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DEBUGGING.md +0 -0
  668. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DEVELOPMENT.md +0 -0
  669. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/E2E_TESTING.md +0 -0
  670. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  671. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/INSTRUCTIONS.md +0 -0
  672. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/MCP.md +0 -0
  673. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  674. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/SECURITY.md +0 -0
  675. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/TOOLS.md +0 -0
  676. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/USER_GUIDE.md +0 -0
  677. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/agents.md +0 -0
  678. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/index.md +0 -0
  679. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/installation.md +0 -0
  680. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/onboarding-mockup.html +0 -0
  681. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/onboarding.md +0 -0
  682. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/stylesheets/extra.css +0 -0
  683. {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/mkdocs.yml +0 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "gflow-cli",
3
+ "interface": {
4
+ "displayName": "gflow-cli"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "gflow",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Developer Tools"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "gflow",
3
+ "version": "0.45.0",
4
+ "description": "Reusable development and operations workflows for gflow-cli",
5
+ "author": {
6
+ "name": "Flavio Oliva",
7
+ "url": "https://github.com/ffroliva"
8
+ },
9
+ "homepage": "https://github.com/ffroliva/gflow-cli",
10
+ "repository": "https://github.com/ffroliva/gflow-cli",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "gflow-cli",
14
+ "codex",
15
+ "google-flow"
16
+ ],
17
+ "skills": "./skills/",
18
+ "interface": {
19
+ "displayName": "gflow-cli",
20
+ "shortDescription": "Develop, validate, review, and operate gflow-cli.",
21
+ "longDescription": "Project workflows for planning, validation, issue handling, reviews, releases, and Google Flow CLI operations.",
22
+ "developerName": "Flavio Oliva",
23
+ "category": "Developer Tools",
24
+ "capabilities": [
25
+ "Interactive",
26
+ "Write"
27
+ ],
28
+ "websiteURL": "https://github.com/ffroliva/gflow-cli",
29
+ "defaultPrompt": [
30
+ "Show the current gflow-cli task with $gflow:status.",
31
+ "Run the gflow-cli quality gates with $gflow:check."
32
+ ]
33
+ }
34
+ }
@@ -23,8 +23,10 @@
23
23
  default_stages: [pre-commit]
24
24
 
25
25
  repos:
26
+ # Keep this rev in lockstep with the `ruff==` pin in pyproject.toml. A hook that
27
+ # formats with an older ruff than CI checks with will fight CI on every commit.
26
28
  - repo: https://github.com/astral-sh/ruff-pre-commit
27
- rev: v0.11.10
29
+ rev: v0.16.0
28
30
  hooks:
29
31
  - id: ruff
30
32
  args: [--fix]
@@ -81,6 +81,23 @@ These rules exist because docs alone don't bind under momentum: a "check open PR
81
81
  - **If a claim can't be verified in the current environment, it's LIKELY — not CONFIRMED.** Keep the issue open, reference it with `Refs #N` (not `Closes #N`), and ship diagnostics rather than a blind fix. When you can't reproduce it, hand the fix to whoever can.
82
82
  - **This project reverse-engineers a blackbox.** gflow-cli doesn't own Google Flow — it drives real Flow through inspected HAR/DOM/browser-log behavior. Offline checks (types, lint, unit/BDD tests) verify *our* code does what we think it does; they cannot verify Flow still behaves the way we captured it. Every feature that touches a generation path is **live-verified**, not just offline-tested, before it's called done — see `/gflow:live-verify`.
83
83
 
84
+ ## Standard Workflow Sequence
85
+
86
+ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase pipeline from issue discovery to public release:
87
+
88
+ | Phase | Skill / Command | Purpose | Output Artifact |
89
+ |---|---|---|---|
90
+ | 1. Triage | `/gflow:issue-assessment <N>` | Read-only issue analysis & root cause hypothesis | `issue_assessment_<N>.md` |
91
+ | 2. Pre-Implementation | `/gflow:predict <proposal>` | Adversarial audit (D14 YAGNI, security, risks) | GO / CAUTION / STOP verdict |
92
+ | 3. BDD Scaffolding | `/gflow:scenario <feature>` | Edge-case explorer & BDD Gherkin spec | `Scenario:` blocks & test scaffold |
93
+ | 4. Implementation Plan | `/gflow:plan <feature>` | Task-by-task atomic implementation plan | `docs/superpowers/plans/<date>-<slug>/PLAN.md` |
94
+ | 5. Council Review | `/gflow:pr-council-review` / `llm-council` | Multi-dimensional audit across 6 core dimensions | Consensus verdict report |
95
+ | 6. Task Execution | `/gflow:status` | Track unchecked tasks during TDD execution | Next unchecked task |
96
+ | 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
97
+ | 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
98
+ | 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
99
+ | 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
100
+
84
101
  ## Skills reference (cross-tool)
85
102
 
86
103
  The `skills/` directory ships installable agent skill docs in plain Markdown with YAML frontmatter. Any agent can consume them directly:
@@ -109,7 +126,21 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
109
126
  only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
110
127
  content in a vendor directory.
111
128
 
112
- **Cursor / Aider / Codex / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
129
+ **Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
130
+ then start a new session:
131
+
132
+ ```powershell
133
+ codex plugin marketplace add .
134
+ codex plugin add gflow@gflow-cli
135
+ ```
136
+
137
+ Invoke skills with Codex's `$` syntax, for example `$gflow:status`, `$gflow:check`, or
138
+ `$gflow:pr-council-review`. Codex reserves slash commands for its own command surface; the
139
+ Claude Code spelling `/gflow:*` is therefore intentionally not reproduced. The Codex IDE
140
+ extension does not currently load plugins, so IDE-only users should include the relevant
141
+ `skills/<name>/SKILL.md` directly.
142
+
143
+ **Cursor / Aider / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
113
144
  **Claude Code:** the `/gflow:` slash commands in `.claude/commands/gflow/` are auto-discovered when the project is open — no extra setup needed. To register a skill globally, copy the command file to `~/.claude/commands/`.
114
145
  **Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
115
146
 
@@ -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.45.0] — 2026-07-28
11
+
12
+ ### Fixed
13
+
14
+ - **`gflow character create` binds portraits to the character again (#395).**
15
+ Two independent defects made every character generation land as a plain
16
+ project image, leaving the character empty:
17
+ 1. **Overlay dismissal Escaped Flow's own UI.** `[role='dialog']` and
18
+ `[role='alert']` had been added to the overlay detector, but Flow's
19
+ character composer (and the media picker) carry those roles — so gflow
20
+ pressed Escape on the app itself, the generation went out without
21
+ `entityContext`, and Flow filed the image against the project with no
22
+ `parentEntityId`. Those two selectors are removed; `[role='banner']` and
23
+ the announcement matcher remain, so the original banner-dismissal intent
24
+ is intact.
25
+ 2. **The character route could bounce back to the project page.** Flow
26
+ redirects `/project/{id}/character/{entityId}` when the entity is not yet
27
+ queryable — a race gflow loses by navigating immediately after
28
+ `flow.createEntity`. Because the project page also mounts a prompt box,
29
+ the old readiness check was satisfied on the wrong surface and the prompt
30
+ was typed into the **project** composer. gflow now verifies it actually
31
+ came to rest on the character route, re-navigating a few times and failing
32
+ loudly rather than generating on the wrong surface.
33
+
34
+ Verified live 2026-07-28 in both directions on the same account, plus a
35
+ read-back showing the character carrying its name and `thumbnail_media_id`.
36
+ The wire contract is documented in
37
+ [CHARACTER_RECON](docs/CHARACTER_RECON.md#entity-binding-entitycontext-captured-live-2026-07-28).
38
+
39
+ - **`gflow image i2i --ref <UUID>` no longer fails when the asset is out of the
40
+ picker's reach (#393).** Flow's media picker is scoped to the active project
41
+ and its search does **not** index media UUIDs (confirmed live 2026-07-27:
42
+ both UUID search tiers returned zero tiles), so a `--ref` pointing at an asset
43
+ in another project — or buried deep in a virtualised grid — could not be
44
+ selected, and a bare `--ref <uuid>` carried no local file to fall back on. The
45
+ CLI now resolves each UUID ref against the local catalog and attaches its
46
+ recorded file, so the transport uploads those exact bytes instead of failing
47
+ the run. Verified live as a controlled A/B on identical input: exit 9 before,
48
+ exit 0 with the upload fallback after. Enrichment is best-effort (unknown
49
+ asset, unavailable catalog, or deleted file leaves the ref untouched) and the
50
+ **fail-loud contract is unchanged** — a reference that cannot be bound still
51
+ aborts the generation rather than silently producing an unreferenced image.
52
+ - **A Flow web-app crash on the character-editor route is now reported as
53
+ such.** `gflow character create` surfaced Flow's client-side crash as
54
+ `RuntimeError: Character editor not ready: prompt textbox not visible`, which
55
+ blames a selector that was never on the page. The existing crash classifier is
56
+ now consulted at that gate too, yielding the typed, retryable `FlowAppError`
57
+ (exit 31). Observed live 2026-07-27 via the incident bundle's `ui.json`
58
+ (`title.category: flow_app_crash`).
59
+ - **Character binding failures say what actually happened.** When Flow returns a
60
+ workflow that is not bound to the character entity, the error read "Unexpected
61
+ response shape from Flow", sending readers after a wire-format bug. It now
62
+ states that Flow filed the image as a plain project image and the character
63
+ has no portrait. The guard remains strict — verified live that unbound runs
64
+ leave the entity as "Untitled Character" with a null thumbnail.
65
+ - **Tier-aware credit confirmations:** `gflow video chain` and `gflow movie run`
66
+ no longer present pending work as an exact one-credit-per-link/scene charge.
67
+ Plans, confirmation prompts, `--dry-run` output, Click help, and current docs
68
+ now report the count of *pending video operations* and direct operators to
69
+ Google Flow for current model/duration/tier pricing, which varies by account
70
+ tier and Flow policy. Execution, resume/stale accounting, `--yes`, JSON
71
+ output, flags, and exit codes are unchanged.
72
+
73
+ ### Added
74
+
75
+ - **Top Banner & Modal Dismissal (#369):** Expanded `_detect_overlay` and
76
+ `_dismiss_blocking_overlays` in `ui_automation.py` to detect top banners,
77
+ alert bars, and announcement dialogs (`[role='banner']`, `[role='alert']`,
78
+ `[role='dialog']`, `div:has-text('What\'s new')`), force-clicking locale-stable
79
+ close/clear/Got-it buttons and falling back to Escape before automation tasks.
80
+ - **`gflow character create --format-prompt` (#383):** Opt-in flag that clicks
81
+ Flow's in-editor **Format** button before submitting, letting Flow rewrite the
82
+ prompt into its character prompt-engineering shape. Applies to both the face and
83
+ body slots. Best-effort by design — if the button is not found the prompt is
84
+ submitted as typed rather than failing the generation. The selector cascade is
85
+ anchored on the locale-stable `personal_recommendations` Material Symbols
86
+ ligature (confirmed against live DOM 2026-07-27), not the "Format" label, which
87
+ Flow localises to the Chrome profile language. Flow ships the button `disabled`
88
+ on an empty prompt, so the driver checks enabled-ness — a disabled button is
89
+ still *visible*, and clicking one would stall on Playwright's actionability wait.
90
+ - **Self-documenting error remediation & provider message pass-through (#380):** Added default `remediation_hint` strings across domain exception classes (`WireFormatError`, `ContentPolicyError`, `RateLimitError`, `DataStoreError`, `SceneConcatError`, `FrameExtractionError`), extracted and sanitized provider error messages from Google Flow tRPC/REST responses, and enriched MCP tool error envelopes and Rich CLI error displays with actionable recovery guidance at failure time.
91
+
92
+ ## [0.44.0] — 2026-07-26
93
+
94
+ ### Added
95
+
96
+ - **Dual-Side Project Naming & Management (`gflow project`)** (#381). Added
97
+ `gflow project` subcommand group (`list`, `show`, `rename`, `create`),
98
+ `--project-name` / `--project-title` options across `gflow image` and `gflow video`
99
+ generation commands, prompt slugging for scratch projects, and dual-side title sync
100
+ updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep.
101
+ - **Namespaced Codex project skills.** The canonical workflows under `skills/`
102
+ now ship as a repo-local, skills-only Codex plugin. Register and install it
103
+ with `codex plugin marketplace add .` followed by
104
+ `codex plugin add gflow@gflow-cli`, then invoke workflows such as
105
+ `$gflow:status`, `$gflow:check`, and `$gflow:pr-council-review` in a new
106
+ Codex CLI or desktop-app session. Claude Code's `/gflow:*` commands and the
107
+ agent-agnostic skill files remain unchanged.
108
+ - **`gflow data errors` — bounded retention + export for failed-operation
109
+ history** (#345). `gflow data errors export [--older-than AGE] [-o FILE]`
110
+ dumps failed operations as JSONL (unbounded, newest-first) for offline
111
+ archival — also closing the export path deferred from #341. `gflow data
112
+ errors prune --older-than AGE [--dry-run]` deletes failures older than AGE
113
+ (`90d` / `24h` / `30m`); `--older-than` is **required** and there is no
114
+ automatic/background pruning — deletion is always an explicit operator
115
+ action. Both honor `--profile` and the exit-16 `DataStoreError` convention.
116
+
117
+ ### Fixed
118
+
119
+ - **`gflow character create` safely activates the current Create-Body
120
+ composer.** Flow can autosave the body triptych over the stored portrait
121
+ prompt when the mode switch has not settled (observed live 2026-07-25 on
122
+ 0.43.0). Current Flow reuses one Slate editor and exposes Create Body through
123
+ the locale-independent `accessibility_new` icon beside the portrait image;
124
+ gflow now clicks that scoped mode control, requires a new generated-face
125
+ reference chip to mount, and verifies the shared editor owns focus **before
126
+ any clearing or typing**. Readback failures abort before submit. The older
127
+ `add_2`/second-box cohort remains supported through its count-rise gate.
128
+ Post-type isolation still aborts before the credited submit. Live DOM
129
+ evidence and the one-box failure were captured on 2026-07-26. Face-only
130
+ creates are unchanged.
131
+
132
+ - **Profile-lock remediation message** now names the real cause and recovery.
133
+ `ProfileLockedError` (exit 11) previously told operators to "wait for it to
134
+ finish" — implying an unbounded wait — and to hunt for a `gflow`/Chrome
135
+ process. In practice a blocking lock is a kernel *advisory* lock held by a
136
+ **live** process (often a `python.exe` a `chrome.exe` scan misses); the OS
137
+ releases it the instant the holder dies, so a leftover lock *file* never
138
+ blocks acquisition. The message now points to the recorded owner PID
139
+ (surfaced locally since v0.43.0) and says to just retry when nothing is
140
+ running. The lock itself is unchanged — auto-reclaim was considered and
141
+ rejected as unsafe (an unlink→new-inode race could put two browsers on one
142
+ profile, the exact corruption the lease prevents). Refs #370.
143
+
10
144
  ## [0.43.0] — 2026-07-23
11
145
 
12
146
  ### Added
@@ -2332,7 +2466,9 @@ shell-script template that branches on these codes.
2332
2466
 
2333
2467
  First skeleton. Not functional end-to-end yet.
2334
2468
 
2335
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...HEAD
2469
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.45.0...HEAD
2470
+ [0.45.0]: https://github.com/ffroliva/gflow-cli/compare/v0.44.0...v0.45.0
2471
+ [0.44.0]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...v0.44.0
2336
2472
  [0.43.0]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...v0.43.0
2337
2473
  [0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
2338
2474
  [0.41.0]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...v0.41.0
@@ -11,6 +11,22 @@ uv sync --extra dev
11
11
  uv run playwright install chromium
12
12
  ```
13
13
 
14
+ ### Codex project skills
15
+
16
+ Codex CLI and the Codex desktop app can install the repository's canonical `skills/`
17
+ workflows as the `gflow` plugin. From the repository root, run:
18
+
19
+ ```bash
20
+ codex plugin marketplace add .
21
+ codex plugin add gflow@gflow-cli
22
+ ```
23
+
24
+ Start a new Codex session after installation, then invoke a workflow with `$gflow:<skill>`
25
+ (for example, `$gflow:status`, `$gflow:check`, or `$gflow:pr-council-review`). Claude Code
26
+ continues to use the equivalent `/gflow:*` commands. The Codex IDE extension does not
27
+ currently load plugins; include the relevant `skills/<name>/SKILL.md` directly when using
28
+ that surface.
29
+
14
30
  ## Test-driven development (mandatory)
15
31
 
16
32
  `gflow-cli` is built test-first. Every change must include tests, and CI rejects PRs that lower coverage.
@@ -31,22 +31,27 @@ targeted dismissal once the next occurrence is captured. **Workaround:**
31
31
  re-run the command; open the project once manually in Chrome to consume the
32
32
  banner.
33
33
 
34
- ### Reported stale profile lock blocks acquisition (unreproduced)
35
-
36
- - **Status:** Open ([#370](https://github.com/ffroliva/gflow-cli/issues/370))
37
- - **Severity:** Medium (blocks the profile until resolved) · **Affected:** `ProfileLease` acquisition (exit 11)
38
-
39
- A user report of `ProfileLockedError` with no apparently-live owner. Not
40
- reproduced: in every observed case the kernel advisory lock was held by a
41
- real process (e.g. a pytest child that outlived its parent shell). The
42
- kernel lock is authoritative — a merely *stale metadata file* cannot block
43
- acquisition, and gflow will never auto-delete a lock file or kill a
44
- recorded PID based on metadata. Since v0.43.0, contention reports the
45
- recorded owner's PID and observed start time locally (lock-file metadata
46
- now starts at offset 1 so Windows contenders can read it while byte 0 is
47
- kernel-locked), and a metadata-only incident bundle is written before any
48
- Chrome launch. **Workaround:** find and close the owning process (the
49
- error's local output names its PID), or use a different `--profile`.
34
+ ### Profile lock reported as "held by another process" with no obvious owner
35
+
36
+ - **Status:** Resolved ([#370](https://github.com/ffroliva/gflow-cli/issues/370)) · remediation message clarified
37
+ - **Severity:** Low (by design; fails closed — never corrupts) · **Affected:** `ProfileLease` acquisition (exit 11)
38
+
39
+ `ProfileLockedError` can surface when no `chrome.exe` / `gflow` process is
40
+ obvious. This is **working as intended, not a stale-file bug.** The profile
41
+ lock is a kernel *advisory* byte-range lock, which the OS releases the instant
42
+ its holder dies — so a leftover lock *file* can never block acquisition. If
43
+ `acquire` is blocked, a **live** process genuinely holds it, most often a
44
+ `python.exe` (a prior gflow run, or a pytest child that outlived its shell)
45
+ that a scan for `chrome.exe` misses. gflow deliberately never auto-deletes a
46
+ lock file or kills a recorded PID from metadata: an unlink→new-inode race could
47
+ put two browsers on one profile — the exact corruption the lease exists to
48
+ prevent. Since v0.43.0 contention reports the recorded owner's PID and observed
49
+ start time locally (metadata starts at offset 1 so Windows contenders can read
50
+ it while byte 0 is kernel-locked), and the remediation message now names the
51
+ live-owner reality and tells you to just retry when nothing is running.
52
+ **Workaround:** close the process at the PID the error prints
53
+ (`Get-Process -Id <pid>` / `ps -p <pid>`, then `Stop-Process -Id <pid>` /
54
+ `kill <pid>`), or use a different `--profile`.
50
55
 
51
56
  ### Unexplained image-generation HTTP 400 (observed live 2026-07-22)
52
57
 
@@ -819,6 +824,34 @@ gflow image batch ./batch-b.tsv --profile personal
819
824
 
820
825
  ## Resolved
821
826
 
827
+ ### `character create` generated portraits that never bound to the character — RESOLVED in v0.45.0
828
+
829
+ - **Status:** Resolved ([#395](https://github.com/ffroliva/gflow-cli/issues/395)) · **Severity:** Was-High · **Was-affecting:** v0.44.0 and unreleased `develop` · **Fixed in:** v0.45.0
830
+
831
+ Every `gflow character create` spent an Imagen credit, produced an image, and
832
+ left the character empty ("Untitled Character", null thumbnail). Flow filed the
833
+ generation as an ordinary project image because the request carried no
834
+ `entityContext`. Two independent gflow defects caused it:
835
+
836
+ 1. **Overlay dismissal Escaped Flow's own UI.** `[role='dialog']` and
837
+ `[role='alert']` had been added to the overlay detector, but Flow's character
838
+ composer — and the media picker — carry those roles. gflow pressed Escape on
839
+ the app itself and the submit lost its entity context.
840
+ 2. **The character route could bounce to the project page.** Flow redirects
841
+ `/project/{id}/character/{entityId}` while the entity is not yet queryable
842
+ (gflow navigates immediately after `flow.createEntity`). The project page
843
+ also mounts a prompt box, so the readiness gate passed on the wrong surface
844
+ and the prompt was typed into the **project** composer.
845
+
846
+ Both are fixed: the two over-broad selectors are gone (banner detection intact),
847
+ and the transport now verifies it came to rest on the character route,
848
+ re-navigating and then failing loudly instead of generating on the wrong
849
+ surface. The `parentEntityId` guard that surfaced this was correct throughout —
850
+ it refused to report a portrait-less character as success.
851
+
852
+ Wire contract: [CHARACTER_RECON § entity binding](docs/CHARACTER_RECON.md#entity-binding-entitycontext-captured-live-2026-07-28).
853
+ Evidence: [LIVE_VERIFICATION_v0.45.0 §2](docs/LIVE_VERIFICATION_v0.45.0.md).
854
+
822
855
  ### `gflow video`'s manifest-driven batch subcommand didn't skip already-completed entries — RESOLVED as obsolete
823
856
 
824
857
  - **Status:** Resolved (obsolete) · **Severity:** Was-Medium · **Was-affecting:** v0.2.0a1 through the command's removal · **Fixed in:** n/a — removed in production-readiness hardening (see `fix: remove nonfunctional video batch command`)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.43.0
3
+ Version: 0.45.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.15.22; extra == 'dev'
61
+ Requires-Dist: ruff==0.16.0; 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'
@@ -85,13 +85,14 @@ python -m pip install --pre gflow-cli
85
85
  see the root-doc allowlist.)
86
86
  6. Update the version in:
87
87
  - `pyproject.toml`
88
+ - `.codex-plugin/plugin.json`
88
89
  - `src/gflow_cli/__init__.py`
89
90
  - any tests that assert the package version
90
91
  7. Move user-visible changes from `CHANGELOG.md` `[Unreleased]` into a dated
91
92
  release section.
92
93
  8. Commit the release prep:
93
94
  ```bash
94
- git add pyproject.toml src/gflow_cli/__init__.py CHANGELOG.md tests docs
95
+ git add pyproject.toml .codex-plugin/plugin.json src/gflow_cli/__init__.py CHANGELOG.md tests docs
95
96
  git commit -m "chore(release): vX.Y.Z"
96
97
  ```
97
98
  9. Tag and push. **Must be a signed annotated tag** (`-s`) — `.github/workflows/release.yml` rejects unsigned or lightweight tags. Requires a GPG or SSH signing key registered with your GitHub account.
@@ -38,12 +38,22 @@ seeding the second step with the first:
38
38
 
39
39
  1. **Face (slot 0).** gflow submits your `--face-prompt` and Flow generates the **face** image. This becomes
40
40
  the character's first reference image.
41
- 2. **Body (slot 1).** gflow clicks the editor's slot-add ("+") button, which **auto-attaches the just-generated
42
- face image as the reference seed** for the new slot. gflow then submits its **own self-contained
41
+ 2. **Body (slot 1).** gflow activates the editor's Create-Body mode, which **auto-attaches the just-generated
42
+ face image as the reference seed**. gflow then submits its **own self-contained
43
43
  front/side/back triptych prompt** (it wraps your `--body-prompt` body/outfit description). Because the face
44
44
  is attached as the seed, a **single credited generation** produces all three body angles — front, side, and
45
45
  back — that match the face.
46
46
 
47
+ The character editor is a **two-mode surface** ("Portrait" / "Create Body"). Current Flow reuses one Slate
48
+ editor across both modes, so gflow anchors Create Body by the locale-independent `accessibility_new` icon
49
+ beside the portrait-image button and requires a new generated-face reference chip to mount before using the
50
+ shared box. Older cohorts that mount a second prompt box remain supported through a Slate-count-rise gate. In
51
+ both cases gflow verifies the selected
52
+ body box still owns focus **before clearing or typing**. If the structural mode signal or focus check fails,
53
+ the body step aborts before any autosaved prompt edit; post-type isolation failures abort before the credited
54
+ submit. This guards the race that corrupted a stored portrait prompt live on 2026-07-25/0.43.0. Re-run
55
+ `gflow character create` to retry; the saga reuses the entity and completed face slot (§4).
56
+
47
57
  The result: two generations (face + body-triptych), the body kept on-model by the face seed. Everything else —
48
58
  naming the character, setting the voice/personality, and saving — is free metadata (REST), not generation. See
49
59
  §4 for the full saga and §6.2 for the wire payload.
@@ -269,7 +279,7 @@ is **shipped** (see the table below).
269
279
 
270
280
  | Command | Maps to |
271
281
  |---|---|
272
- | `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the slot-add reference), so one body generation yields all three angles. Generated images are **downloaded** to storage; the result reports each slot's local path. |
282
+ | `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the body-mode reference), so one body generation yields all three angles. Generated images are **downloaded** to storage; the result reports each slot's local path. |
273
283
  | `gflow character list --project <id> [--json]` *(SHIPPED v0.12.0)* | projectInitialData → entities[CHARACTER] |
274
284
  | `gflow character show --project <id> (--id <entityId> \| --name <displayName>) [--json]` *(SHIPPED v0.12.0)* | projectInitialData (single); name collision → exit 11 with disambiguation hint |
275
285
  | `gflow character voices [--json]` *(SHIPPED v0.12.0)* | list the 29 preset voices (name / description / sample-url); language-agnostic discovery, mirrors `gflow models --json` |
@@ -403,7 +413,7 @@ Built by `routes.character_editor_url(locale, projectId, entityId)`. The **`/fx/
403
413
  without it Flow 404s (caught by spike T-A; the fix sourced the URL from `LABS_FX_BASE`). Navigating to this
404
414
  URL (not the new-project flow) is what makes Flow's JS set `entityContext` on the generation. Name / voice /
405
415
  personality are REST `PATCH flow/entities`. The only *new* generation selectors are the prompt/submit (already
406
- owned by gflow) and the slot-add.
416
+ owned by gflow) and the body-mode activation/settle signals.
407
417
 
408
418
  | Purpose | Selector | Conf. |
409
419
  |---|---|---|
@@ -413,7 +423,7 @@ owned by gflow) and the slot-add.
413
423
  | Name field | `input[placeholder]` — localized placeholder; **do NOT rely on the text** (structural: it is the editor's lone placeholdered input) | **VERIFIED** |
414
424
  | Personality field | the panel `textarea` (localized placeholder) — **prefer REST PATCH** | **VERIFIED** |
415
425
  | Slot 0 image (face) | aria-label `"Imagem do personagem 1"` — **localized**, note only (do not load-bear on the text) | med (localized) |
416
- | **Slot-add (body / slot 1)** | `add_2` google-symbols ligature; the editor has **TWO** `add_2` buttons → slot-add is **`.nth(1)`** (`_CHARACTER_SLOT_ADD_SELECTOR = "button:has(i.google-symbols:text('add_2'))"`). The **first** `add_2` is the gallery "+ New project" CTA → positional disambiguation. ⚠️ confirm `.nth(1)` in the live body-gen e2e (Task 12). | **VERIFIED** (selector) / ⚠️ ordering |
426
+ | **Body mode (slot 1)** | Current cohort: portrait-image sibling `button:has(img) + button:has(i.google-symbols:text-is('accessibility_new'))`; settle signal: a newly mounted generated-media card with an `img` and exact `cancel` icon. Legacy cohort fallback: icon-only `[role=button]` carrying exact `add_2`, followed by Slate-box count rise. No localized button text or positional index. | **VERIFIED** live 2026-07-26 |
417
427
  | Model picker (char editor) | `button[aria-haspopup='menu']:has(i.google-symbols:text-is('arrow_drop_down'))` *(normal editor uses `crop_16_9`)* | **VERIFIED** |
418
428
  | Voice picker | `voice_selection` google-symbols ligature | **VERIFIED** (ligature) |
419
429
  | Personagens nav (project) | `button:has(i.google-symbols:text-is('accessibility_new'))` (cards are `div[role=button]`; tag disambiguates) | high |
@@ -421,10 +431,10 @@ owned by gflow) and the slot-add.
421
431
  | Picker tab → Personagens | `[role=dialog] button[role=tab]:has(i.google-symbols:text-is('accessibility_new'))` | high |
422
432
  | **Picker "include in command"** | primary `button` in the dialog footer — **no ligature → structural anchor (last/primary dialog button)**; only appears *after* an option is selected | low ⚠️ |
423
433
 
424
- ⚠️ **Documented risk (Task-12 e2e):** the slot-add `.nth(1)` ordering and the picker include button (no
425
- ligature, localized text only) are positional/structural anchors that must be confirmed under a live non-EN
426
- locale. Slot 0's `"Imagem do personagem N"` aria-label is **localized** — used as a note, never as a
427
- load-bearing selector.
434
+ ⚠️ **Documented risk (Task-12 e2e):** the picker include button (no ligature, localized text only) remains a
435
+ positional/structural anchor to confirm under a live non-EN locale. Body mode no longer uses the stale
436
+ `.nth(1)` selector; its mode and settle icons are locale-independent. Slot 0's `"Imagem do personagem N"`
437
+ aria-label is **localized** — used as a note, never as a load-bearing selector.
428
438
 
429
439
  Shared chrome already automated by gflow (reuse as-is): `add_2` (+/Criar add-media → opens picker),
430
440
  `arrow_forward` (submit), the Slate prompt box, model dropdown, `check`/Concluir.
@@ -472,7 +482,7 @@ table → test mapping):
472
482
 
473
483
  **Remaining LIVE-e2e-only (Task 12):** the live binding/recovery/UTF-8 e2e on denon82 — real
474
484
  `parentEntityId == entityId` against Flow's wire, mid-saga crash recovery against the real DB, and the
475
- slot-add `.nth(1)` + picker-include structural selectors under a non-EN locale.
485
+ body-mode icon/reference settle signals + picker-include structural selectors under a non-EN locale.
476
486
 
477
487
  ## 13.1 Known issues
478
488
 
@@ -82,6 +82,76 @@ calls on the same `workflowId`, chaining `imageInputs` (BASE_IMAGE = prior outpu
82
82
  This is the SAME endpoint family gflow's existing image transport already drives — the new bits are
83
83
  `tool:"PINHOLE"`, `imageInputs` types, and the `parentEntityId`/workflow binding.
84
84
 
85
+ ## Entity binding: `entityContext` (captured live 2026-07-28)
86
+
87
+ **The generation request must carry `entityContext`, or Flow files the image as a
88
+ plain project image and the character stays empty.** Captured from Flow's own UI
89
+ via a CDP-attached real Chrome (`gflow-agent-browser-spike`, `navigator.webdriver:
90
+ false`) while driving the plain **New Character** flow.
91
+
92
+ `POST /v1/projects/{projectId}/flowMedia:batchGenerateImages`
93
+
94
+ ```jsonc
95
+ {
96
+ "clientContext": { "projectId": "…", "tool": "PINHOLE", "sessionId": "…" },
97
+ "mediaGenerationContext": {
98
+ "batchId": "…",
99
+ "entityContext": {
100
+ "entityId": "1e6c558e-87be-4aa7-8a21-ffb7efa43bbd",
101
+ "characterSlot": { "imageReferenceIndex": 0 } // 0 = portrait/face, 1 = body
102
+ }
103
+ },
104
+ "useNewMedia": true,
105
+ "requests": [ { "imageModelName": "NARWHAL", "structuredPrompt": {…}, "seed": …, "imageInputs": [] } ]
106
+ }
107
+ ```
108
+
109
+ Response — bound on the first try:
110
+
111
+ ```jsonc
112
+ "workflows": [ { "name": "30551aa7-…", "projectId": "…", "parentEntityId": "1e6c558e-…" } ]
113
+ ```
114
+
115
+ ### Which surface produces it
116
+
117
+ The composer Flow renders depends on whether the character already HAS a
118
+ portrait, not on which URL you arrived by:
119
+
120
+ | Character state | Composer placeholder | Sends `entityContext`? |
121
+ |---|---|---|
122
+ | Empty (no portrait yet) | *"Describe your character…"* | **Yes** — this is the creation composer, on `/characters` **and** on `/character/{entityId}` |
123
+ | Populated (portrait exists) | *"What do you want to change?"* | Edit surface — refines the existing portrait |
124
+
125
+ Both entry points reach the creation composer for an empty character, and both
126
+ bind. Verified live 2026-07-28: driving `/project/{id}/character/{entityId}` for
127
+ a pre-created empty entity produced `entityContext` in the request and
128
+ `parentEntityId` in the response — including for an entity gflow itself had
129
+ created minutes earlier. Entity age is not a factor.
130
+
131
+ `flow.createEntity` may be called by Flow (the **New Character** flow does it
132
+ itself, returning `displayName: "Untitled Character"`) or by the client
133
+ beforehand; gflow pre-creates and deep-links, which is fine. After the
134
+ generation Flow issues `PATCH /v1/flowWorkflows/{id}` twice
135
+ (`metadata.displayName`, then `metadata.primaryMediaId`) — the same commit gflow
136
+ already performs. Flow never asks for a name up front: the user renames
137
+ afterwards via the ✏️ next to the title, and "Character Info (optional)"
138
+ (*"Describe how your character acts…"*) is a separate free-text field.
139
+
140
+ **What actually broke gflow (#395)** was therefore NOT the choice of entry
141
+ point. Two client-side defects suppressed `entityContext` on a surface that
142
+ would otherwise have sent it:
143
+
144
+ 1. **Overlay dismissal pressed Escape on the composer.** `[role='dialog']` and
145
+ `[role='alert']` in the overlay detector matched Flow's own character
146
+ composer (and the media picker), so gflow dismissed the app itself.
147
+ 2. **The character route could bounce back to the project page** while the
148
+ entity was not yet queryable. The project page also mounts a prompt box, so
149
+ the readiness gate passed on the wrong surface and the prompt was typed into
150
+ the **project** composer.
151
+
152
+ With both fixed, the deep-linked editor binds reliably. See
153
+ [LIVE_VERIFICATION_v0.45.0 §2](LIVE_VERIFICATION_v0.45.0.md).
154
+
85
155
  ## Gaps
86
156
 
87
157
  1. ✅ **RESOLVED — Entity create.** `POST /fx/api/trpc/flow.createEntity` `{json:{projectId}}` →
@@ -343,9 +343,9 @@ each link in turn, so total wallclock is the sum of all link waits).
343
343
  |---|---|---|
344
344
  | `--model` | `veo-lite` | `veo-lite` / `veo-fast` / `veo-quality` / `veo-lite-lp`. `omni-flash` is rejected — it can't seed i2v links (issue #125). |
345
345
  | `--max-links N` | unset | Cap link count; exit 11 (`ConfigurationError`) if the manifest has more. A spend guardrail. |
346
- | `-y` / `--yes` | off | Skip the per-credit cost confirmation prompt. |
347
- | `--dry-run` | off | Print the plan + credit estimate and spend nothing. |
348
- | `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-paid links are skipped (not re-billed). |
346
+ | `-y` / `--yes` | off | Skip the pending video operation confirmation prompt. |
347
+ | `--dry-run` | off | Print the pending video operation plan and submit nothing. |
348
+ | `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-completed links are skipped (not regenerated). |
349
349
  | `--jitter F` | `0.0` | Random `0..F` second pause **between** links (anti-bot cadence; never before link 0). |
350
350
  | `--seed-offset MS` | `0` | Extract the seed frame this many ms before EOF (fade-to-black guard). |
351
351
  | `--aspect` | `9:16` | `9:16` / `16:9`. Applied uniformly to every link (continuity requirement). |