gflow-cli 0.43.0__tar.gz → 0.44.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 (670) hide show
  1. gflow_cli-0.44.0/.agents/plugins/marketplace.json +20 -0
  2. gflow_cli-0.44.0/.codex-plugin/plugin.json +34 -0
  3. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/AGENTS.md +15 -1
  4. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CHANGELOG.md +54 -1
  5. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CONTRIBUTING.md +16 -0
  6. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/KNOWN_ISSUES.md +21 -16
  7. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/PKG-INFO +1 -1
  8. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/RELEASE.md +2 -1
  9. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CHARACTER.md +20 -10
  10. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DATA_LAYER.md +40 -5
  11. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/INDEX.md +1 -1
  12. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.43.0.md +3 -2
  13. gflow_cli-0.44.0/docs/LIVE_VERIFICATION_v0.44.0.md +37 -0
  14. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/PROJECT_STATUS.md +2 -2
  15. gflow_cli-0.44.0/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +176 -0
  16. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/pyproject.toml +1 -1
  17. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/release/SKILL.md +12 -3
  18. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/__init__.py +1 -1
  19. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/_cli_helpers.py +24 -0
  20. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_retry.py +28 -5
  21. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/client.py +15 -4
  22. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/routes.py +1 -0
  23. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation.py +317 -44
  24. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation_video.py +1 -0
  25. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli.py +2 -0
  26. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_data.py +123 -9
  27. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_image.py +22 -10
  28. gflow_cli-0.44.0/src/gflow_cli/cli_project.py +214 -0
  29. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_video.py +33 -16
  30. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/queries.py +79 -18
  31. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/repository.py +99 -1
  32. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/errors.py +5 -3
  33. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/tools.py +25 -6
  34. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_lease.py +6 -2
  35. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_retry.py +10 -0
  36. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation.py +61 -0
  37. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_character_editor.py +410 -51
  38. gflow_cli-0.44.0/tests/cli/test_cli_data_errors_retention.py +202 -0
  39. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image.py +1 -1
  40. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_helpers.py +27 -0
  41. gflow_cli-0.44.0/tests/e2e/test_project_naming_e2e.py +184 -0
  42. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_image_steps.py +1 -0
  43. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_video_agent_ui_steps.py +2 -0
  44. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_cli_parity.py +6 -0
  45. gflow_cli-0.44.0/tests/scripts/test_codex_plugin.py +73 -0
  46. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_incident_bundle_quality.py +3 -3
  47. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_cli_data.py +24 -0
  48. gflow_cli-0.44.0/tests/test_cli_project.py +212 -0
  49. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_data_queries.py +42 -0
  50. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_retention.py +7 -1
  51. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_lease.py +22 -0
  52. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/uv.lock +1 -1
  53. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/CHARACTER.md +20 -10
  54. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DATA_LAYER.md +40 -5
  55. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/KNOWN_ISSUES.md +21 -16
  56. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/AUDIT.md +0 -116
  57. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/PLAN.md +0 -773
  58. gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/SCENARIO.md +0 -207
  59. gflow_cli-0.43.0/docs/superpowers/specs/2026-07-22-private-incident-diagnostics-design.md +0 -605
  60. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/README.md +0 -0
  61. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/active.md +0 -0
  62. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/branch-review.md +0 -0
  63. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/changelog.md +0 -0
  64. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/check.md +0 -0
  65. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/doc-review.md +0 -0
  66. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  67. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  68. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/known-issues.md +0 -0
  69. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/live-verify.md +0 -0
  70. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/llm-council.md +0 -0
  71. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/next.md +0 -0
  72. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/plan.md +0 -0
  73. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  74. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/predict.md +0 -0
  75. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/release.md +0 -0
  76. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/scenario.md +0 -0
  77. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/sonar.md +0 -0
  78. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/status.md +0 -0
  79. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.env.template +0 -0
  80. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitattributes +0 -0
  81. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/CODEOWNERS +0 -0
  82. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  83. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/copilot-instructions.md +0 -0
  84. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/dependabot.yml +0 -0
  85. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/ci.yml +0 -0
  86. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/external-pr-triage.yml +0 -0
  87. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/governance-advisory.yml +0 -0
  88. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/governance-benchmark.yml +0 -0
  89. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/main-base-guard.yml +0 -0
  90. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/pages.yml +0 -0
  91. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/release.yml +0 -0
  92. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitignore +0 -0
  93. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitleaks.toml +0 -0
  94. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.pre-commit-config.yaml +0 -0
  95. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.secrets.baseline +0 -0
  96. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CLAUDE.md +0 -0
  97. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CONFIGURATION.md +0 -0
  98. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/DISCLAIMER.md +0 -0
  99. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/LICENSE +0 -0
  100. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/PLAN.md +0 -0
  101. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/README.md +0 -0
  102. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/ROADMAP.md +0 -0
  103. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/conftest.py +0 -0
  104. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  105. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docker-compose.yml +0 -0
  106. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_GUIDE.md +0 -0
  107. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_UI_E2E.md +0 -0
  108. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_UI_RECON.md +0 -0
  109. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/ARCHITECTURE.md +0 -0
  110. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  111. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AUTHENTICATION.md +0 -0
  112. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CHARACTER_RECON.md +0 -0
  113. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CONFIGURATION.md +0 -0
  114. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEBUGGING.md +0 -0
  115. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEMOS.md +0 -0
  116. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEVELOPMENT.md +0 -0
  117. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/E2E_TESTING.md +0 -0
  118. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/EXTERNAL_STORAGE.md +0 -0
  119. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/GITHUB.md +0 -0
  120. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  121. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  122. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/INSTRUCTIONS.md +0 -0
  123. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  124. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  125. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  126. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  127. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  128. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  129. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  130. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  131. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  132. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  133. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  134. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  135. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  136. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  137. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  138. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  139. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  140. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  141. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  142. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  143. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  144. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  145. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  146. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  147. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  148. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  149. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  150. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  151. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  152. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  153. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  154. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  155. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  156. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  157. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  158. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  159. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  160. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  161. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  162. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  163. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  164. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  165. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  166. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/MCP.md +0 -0
  167. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/MOVIE.md +0 -0
  168. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/PROMPT_EXPANSION.md +0 -0
  169. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  170. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/SECURITY.md +0 -0
  171. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/TOOLS.md +0 -0
  172. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/USAGE.md +0 -0
  173. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/USER_GUIDE.md +0 -0
  174. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/demo-split-pf.gif +0 -0
  175. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/example-run.gif +0 -0
  176. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/examples.webp +0 -0
  177. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/medium_tutorial.md +0 -0
  178. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/schemas/movie-handoff.schema.json +0 -0
  179. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/sonar-cleanup-tracker.md +0 -0
  180. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  181. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  182. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  183. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  184. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  185. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  186. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  187. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  188. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  189. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  190. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  191. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  192. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  193. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  194. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  195. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  196. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  197. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  198. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  199. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  200. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  201. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  202. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  203. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  204. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  205. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  206. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  207. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  208. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/eval/pr_triage_eval.py +0 -0
  209. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/eval/pr_triage_fixtures.json +0 -0
  210. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/README.md +0 -0
  211. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/batch_from_config.py +0 -0
  212. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/multi_prompt_t2i.py +0 -0
  213. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/sample_config.json +0 -0
  214. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/sample_prompts.txt +0 -0
  215. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/single_image_t2i.py +0 -0
  216. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/workflow_chain.py +0 -0
  217. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/index.html +0 -0
  218. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/llms.txt +0 -0
  219. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/README.md +0 -0
  220. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/01_upload_image.json +0 -0
  221. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  222. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  223. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/04_archive_workflow.json +0 -0
  224. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/05_createProject.json +0 -0
  225. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/06_batchGenerateImages.json +0 -0
  226. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  227. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  228. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  229. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  230. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  231. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/12_create_scene.json +0 -0
  232. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  233. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/14_get_scene_workflows.json +0 -0
  234. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  235. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/Dockerfile.triage +0 -0
  236. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/entrypoint.sh +0 -0
  237. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  238. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  239. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  240. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_doc_links.py +0 -0
  241. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_materiality.py +0 -0
  242. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_release_artifacts.py +0 -0
  243. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_repo_hygiene.py +0 -0
  244. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_website_docs_pii.py +0 -0
  245. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/generate_website_docs.py +0 -0
  246. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_editor.py +0 -0
  247. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_gen_settings.py +0 -0
  248. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_settings.py +0 -0
  249. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/_recording_client.py +0 -0
  250. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/_spike_common.py +0 -0
  251. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/active_plan.py +0 -0
  252. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  253. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  254. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  255. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  256. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  257. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  258. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_locale_invariants.py +0 -0
  259. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  260. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike.py +0 -0
  261. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike_v2.py +0 -0
  262. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/dump_character_selectors.js +0 -0
  263. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/incident_bundle_quality.py +0 -0
  264. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/make_project.py +0 -0
  265. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/materiality_backtest.py +0 -0
  266. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/monitor_pr_38.py +0 -0
  267. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/patch_character.py +0 -0
  268. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/README.md +0 -0
  269. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/harness.py +0 -0
  270. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/tasks.json +0 -0
  271. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/sonar-local-scan.sh +0 -0
  272. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  273. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  274. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  275. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  276. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  277. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  278. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  279. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_incident_live.py +0 -0
  280. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  281. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  282. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  283. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  284. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  285. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  286. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  287. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  288. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  289. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  290. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  291. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_patch_entity.py +0 -0
  292. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_patchright.py +0 -0
  293. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/README.md +0 -0
  294. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/capture_flow_traffic.py +0 -0
  295. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/memory_profile.py +0 -0
  296. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/recaptcha_mint.py +0 -0
  297. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  298. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  299. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/record_demo.ps1 +0 -0
  300. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_image.py +0 -0
  301. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_video_editor.py +0 -0
  302. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_worker_style.py +0 -0
  303. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/spike_waf_camoufox.py +0 -0
  304. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/verify_chrome_auth_viability.py +0 -0
  305. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/README.md +0 -0
  306. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/changelog/SKILL.md +0 -0
  307. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/check/SKILL.md +0 -0
  308. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/doc-review/SKILL.md +0 -0
  309. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/gflow-cli/SKILL.md +0 -0
  310. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/issue-assessment/SKILL.md +0 -0
  311. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/issue-resolve/SKILL.md +0 -0
  312. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/known-issues/SKILL.md +0 -0
  313. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/live-verify/SKILL.md +0 -0
  314. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/llm-council/SKILL.md +0 -0
  315. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/plan/SKILL.md +0 -0
  316. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/pr-council-review/SKILL.md +0 -0
  317. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/predict/SKILL.md +0 -0
  318. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/scenario/SKILL.md +0 -0
  319. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/sonar/SKILL.md +0 -0
  320. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/status/SKILL.md +0 -0
  321. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/sonar-project.properties +0 -0
  322. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/__main__.py +0 -0
  323. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/__init__.py +0 -0
  324. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_engine.py +0 -0
  325. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  326. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/character.py +0 -0
  327. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/dto.py +0 -0
  328. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image.py +0 -0
  329. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image_upscale.py +0 -0
  330. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/recaptcha.py +0 -0
  331. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/scene.py +0 -0
  332. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  333. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_common.py +0 -0
  334. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  335. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/base.py +0 -0
  336. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  337. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  338. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  339. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  340. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  341. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  342. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  343. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  344. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  345. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  346. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/video.py +0 -0
  347. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/__init__.py +0 -0
  348. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/base.py +0 -0
  349. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/cookies.py +0 -0
  350. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/factory.py +0 -0
  351. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  352. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  353. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/strategies.py +0 -0
  354. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/verification.py +0 -0
  355. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/browser_manager.py +0 -0
  356. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/chain.py +0 -0
  357. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/chain_manifest.py +0 -0
  358. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_character.py +0 -0
  359. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_instructions.py +0 -0
  360. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_models.py +0 -0
  361. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_movie.py +0 -0
  362. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_run.py +0 -0
  363. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_scene.py +0 -0
  364. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_tools.py +0 -0
  365. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/composition.py +0 -0
  366. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/config.py +0 -0
  367. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/__init__.py +0 -0
  368. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/chain_repo.py +0 -0
  369. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  370. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  371. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  372. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  373. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  374. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  375. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  376. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  377. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  378. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  379. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/models.py +0 -0
  380. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/recorder.py +0 -0
  381. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/redaction.py +0 -0
  382. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/store.py +0 -0
  383. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/diagnostics.py +0 -0
  384. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/exceptions.py +0 -0
  385. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/image_batch.py +0 -0
  386. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/json_output.py +0 -0
  387. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/__init__.py +0 -0
  388. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/prompts.py +0 -0
  389. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/resources.py +0 -0
  390. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/server.py +0 -0
  391. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/media.py +0 -0
  392. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/movie_manifest.py +0 -0
  393. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/observability.py +0 -0
  394. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/paths.py +0 -0
  395. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_store.py +0 -0
  396. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/__init__.py +0 -0
  397. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/character_create.py +0 -0
  398. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/mentions.py +0 -0
  399. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/storage.py +0 -0
  400. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/__init__.py +0 -0
  401. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/banned.py +0 -0
  402. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  403. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  404. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  405. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  406. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/expander.py +0 -0
  407. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/invocation.py +0 -0
  408. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/loader.py +0 -0
  409. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/registry.py +0 -0
  410. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/runtime.py +0 -0
  411. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/spec.py +0 -0
  412. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/app.py +0 -0
  413. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/server.py +0 -0
  414. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/codec.py +0 -0
  415. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/daemon.py +0 -0
  416. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/queue.py +0 -0
  417. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tasks/lessons.md +0 -0
  418. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch.json +0 -0
  419. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch.tsv +0 -0
  420. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch_invalid.tsv +0 -0
  421. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/__init__.py +0 -0
  422. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/__init__.py +0 -0
  423. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/fixtures/character_gen_response.json +0 -0
  424. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  425. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  426. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  427. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_bearer_redaction.py +0 -0
  428. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_character.py +0 -0
  429. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client.py +0 -0
  430. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_character.py +0 -0
  431. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_delete_characters.py +0 -0
  432. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_generate_character.py +0 -0
  433. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_image.py +0 -0
  434. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_incidents.py +0 -0
  435. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_launch_kwargs.py +0 -0
  436. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_patch_entity.py +0 -0
  437. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_scene.py +0 -0
  438. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_upscale.py +0 -0
  439. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_concurrency.py +0 -0
  440. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_dto.py +0 -0
  441. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_engine.py +0 -0
  442. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image.py +0 -0
  443. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image_dto.py +0 -0
  444. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image_upscale.py +0 -0
  445. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  446. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_recaptcha.py +0 -0
  447. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes.py +0 -0
  448. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes_character.py +0 -0
  449. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes_scene.py +0 -0
  450. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_sapisidhash_helper.py +0 -0
  451. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_scene_models.py +0 -0
  452. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_video.py +0 -0
  453. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_video_request.py +0 -0
  454. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/__init__.py +0 -0
  455. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/conftest.py +0 -0
  456. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/__init__.py +0 -0
  457. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  458. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_classic.py +0 -0
  459. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_factory.py +0 -0
  460. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  461. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
  462. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_base.py +0 -0
  463. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_bearer.py +0 -0
  464. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_common.py +0 -0
  465. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  466. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_factory.py +0 -0
  467. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_fingerprint.py +0 -0
  468. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_mode_control.py +0 -0
  469. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_sapisidhash.py +0 -0
  470. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  471. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_transport_timeout.py +0 -0
  472. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  473. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  474. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  475. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_factory.py +0 -0
  476. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_strategies.py +0 -0
  477. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_cookies.py +0 -0
  478. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_real_chrome.py +0 -0
  479. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_verification.py +0 -0
  480. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  481. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/__init__.py +0 -0
  482. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_auth_list.py +0 -0
  483. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character.py +0 -0
  484. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character_create.py +0 -0
  485. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data.py +0 -0
  486. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data_errors.py +0 -0
  487. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  488. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  489. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_upscale.py +0 -0
  490. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_instructions.py +0 -0
  491. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_models.py +0 -0
  492. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_movie.py +0 -0
  493. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_run.py +0 -0
  494. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_scene.py +0 -0
  495. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_tools.py +0 -0
  496. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video.py +0 -0
  497. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video_chain.py +0 -0
  498. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_error_handling.py +0 -0
  499. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_failure_funnel.py +0 -0
  500. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_incident_output.py +0 -0
  501. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest.py +0 -0
  502. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  503. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_settings_validation.py +0 -0
  504. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  505. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_character.py +0 -0
  506. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_compose_prompt.py +0 -0
  507. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_handoff.py +0 -0
  508. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants.py +0 -0
  509. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants_e2e.py +0 -0
  510. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/conftest.py +0 -0
  511. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/__init__.py +0 -0
  512. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_chain_repo.py +0 -0
  513. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_failure_recording.py +0 -0
  514. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_find_incomplete_character.py +0 -0
  515. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_models.py +0 -0
  516. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_packaging.py +0 -0
  517. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_recorder.py +0 -0
  518. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_recorder_character.py +0 -0
  519. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_redaction.py +0 -0
  520. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_repository.py +0 -0
  521. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_scene_persistence.py +0 -0
  522. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_settings_and_errors.py +0 -0
  523. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_store_migrations.py +0 -0
  524. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/dev/test_recording_client.py +0 -0
  525. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/__init__.py +0 -0
  526. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/conftest.py +0 -0
  527. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  528. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  529. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  530. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  531. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  532. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_chain_e2e.py +0 -0
  533. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_character_create_e2e.py +0 -0
  534. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  535. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_daemon_e2e.py +0 -0
  536. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  537. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  538. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  539. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  540. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  541. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
  542. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_json_output_e2e.py +0 -0
  543. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  544. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  545. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_scene_compose_live.py +0 -0
  546. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_tools_e2e.py +0 -0
  547. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_transports_e2e.py +0 -0
  548. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  549. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  550. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/__init__.py +0 -0
  551. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/asset_tagging.feature +0 -0
  552. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/auth.feature +0 -0
  553. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/auth_login.feature +0 -0
  554. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/character_create.feature +0 -0
  555. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/character_read.feature +0 -0
  556. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/conftest.py +0 -0
  557. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/image.feature +0 -0
  558. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/image_upscale.feature +0 -0
  559. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/incident_diagnostics.feature +0 -0
  560. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/instructions.feature +0 -0
  561. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/locale_picker_include.feature +0 -0
  562. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_asset_tagging_steps.py +0 -0
  563. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_auth_login_steps.py +0 -0
  564. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_auth_steps.py +0 -0
  565. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_character_create_steps.py +0 -0
  566. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_character_read_steps.py +0 -0
  567. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_image_upscale_steps.py +0 -0
  568. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
  569. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_instructions_steps.py +0 -0
  570. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  571. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_step_collision_guard.py +0 -0
  572. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_video_chain_steps.py +0 -0
  573. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/video_agent_ui.feature +0 -0
  574. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/video_chain.feature +0 -0
  575. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/fixtures/__init__.py +0 -0
  576. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/fixtures/seeded_catalog.py +0 -0
  577. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/__init__.py +0 -0
  578. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_image_manifest.py +0 -0
  579. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_jitter_config.py +0 -0
  580. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_observability_events.py +0 -0
  581. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/__init__.py +0 -0
  582. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/conftest.py +0 -0
  583. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/constants.py +0 -0
  584. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/test_storage_gcs.py +0 -0
  585. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/test_storage_s3.py +0 -0
  586. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/__init__.py +0 -0
  587. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/conftest.py +0 -0
  588. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_server.py +0 -0
  589. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_stdio_transport.py +0 -0
  590. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_helpers.py +0 -0
  591. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_instructions.py +0 -0
  592. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_wired.py +0 -0
  593. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  594. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  595. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_materiality.py +0 -0
  596. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  597. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  598. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
  599. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_generate_website_docs.py +0 -0
  600. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_materiality_backtest.py +0 -0
  601. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/__init__.py +0 -0
  602. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_create_redaction.py +0 -0
  603. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_create_saga.py +0 -0
  604. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  605. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_observability.py +0 -0
  606. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_parse.py +0 -0
  607. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_resolve.py +0 -0
  608. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_resolve_and_apply.py +0 -0
  609. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/__init__.py +0 -0
  610. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  611. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/test_real_flow.py +0 -0
  612. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_auth.py +0 -0
  613. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_browser_manager.py +0 -0
  614. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_chain.py +0 -0
  615. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_chain_manifest.py +0 -0
  616. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_config.py +0 -0
  617. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_conftest_isolation.py +0 -0
  618. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_bundle.py +0 -0
  619. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_events.py +0 -0
  620. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_journal.py +0 -0
  621. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_recorder.py +0 -0
  622. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_sanitize.py +0 -0
  623. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_documentation_gate.py +0 -0
  624. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_errors.py +0 -0
  625. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_errors_classification.py +0 -0
  626. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_json_output.py +0 -0
  627. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_marker_registry.py +0 -0
  628. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_media.py +0 -0
  629. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_observability.py +0 -0
  630. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_paths.py +0 -0
  631. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_lease_subprocess.py +0 -0
  632. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_store.py +0 -0
  633. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_smoke.py +0 -0
  634. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/__init__.py +0 -0
  635. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_banned.py +0 -0
  636. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_expander.py +0 -0
  637. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_invocation.py +0 -0
  638. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_loader.py +0 -0
  639. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_registry.py +0 -0
  640. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_runtime.py +0 -0
  641. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_spec.py +0 -0
  642. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/ui/test_app.py +0 -0
  643. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_codec.py +0 -0
  644. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_daemon.py +0 -0
  645. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  646. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue.py +0 -0
  647. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue_multiprocess.py +0 -0
  648. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue_reconciliation.py +0 -0
  649. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/ARCHITECTURE.md +0 -0
  650. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/AUTHENTICATION.md +0 -0
  651. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/CONFIGURATION.md +0 -0
  652. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DEBUGGING.md +0 -0
  653. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DEVELOPMENT.md +0 -0
  654. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/E2E_TESTING.md +0 -0
  655. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  656. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/INSTRUCTIONS.md +0 -0
  657. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/MCP.md +0 -0
  658. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/MOVIE.md +0 -0
  659. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  660. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/SECURITY.md +0 -0
  661. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/TOOLS.md +0 -0
  662. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/USAGE.md +0 -0
  663. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/USER_GUIDE.md +0 -0
  664. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/agents.md +0 -0
  665. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/index.md +0 -0
  666. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/installation.md +0 -0
  667. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/onboarding-mockup.html +0 -0
  668. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/onboarding.md +0 -0
  669. {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/stylesheets/extra.css +0 -0
  670. {gflow_cli-0.43.0 → gflow_cli-0.44.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.44.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
+ }
@@ -109,7 +109,21 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
109
109
  only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
110
110
  content in a vendor directory.
111
111
 
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.
112
+ **Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
113
+ then start a new session:
114
+
115
+ ```powershell
116
+ codex plugin marketplace add .
117
+ codex plugin add gflow@gflow-cli
118
+ ```
119
+
120
+ Invoke skills with Codex's `$` syntax, for example `$gflow:status`, `$gflow:check`, or
121
+ `$gflow:pr-council-review`. Codex reserves slash commands for its own command surface; the
122
+ Claude Code spelling `/gflow:*` is therefore intentionally not reproduced. The Codex IDE
123
+ extension does not currently load plugins, so IDE-only users should include the relevant
124
+ `skills/<name>/SKILL.md` directly.
125
+
126
+ **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
127
  **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
128
  **Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
115
129
 
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.44.0] — 2026-07-26
11
+
12
+ ### Added
13
+
14
+ - **Dual-Side Project Naming & Management (`gflow project`)** (#381). Added
15
+ `gflow project` subcommand group (`list`, `show`, `rename`, `create`),
16
+ `--project-name` / `--project-title` options across `gflow image` and `gflow video`
17
+ generation commands, prompt slugging for scratch projects, and dual-side title sync
18
+ updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep.
19
+ - **Namespaced Codex project skills.** The canonical workflows under `skills/`
20
+ now ship as a repo-local, skills-only Codex plugin. Register and install it
21
+ with `codex plugin marketplace add .` followed by
22
+ `codex plugin add gflow@gflow-cli`, then invoke workflows such as
23
+ `$gflow:status`, `$gflow:check`, and `$gflow:pr-council-review` in a new
24
+ Codex CLI or desktop-app session. Claude Code's `/gflow:*` commands and the
25
+ agent-agnostic skill files remain unchanged.
26
+ - **`gflow data errors` — bounded retention + export for failed-operation
27
+ history** (#345). `gflow data errors export [--older-than AGE] [-o FILE]`
28
+ dumps failed operations as JSONL (unbounded, newest-first) for offline
29
+ archival — also closing the export path deferred from #341. `gflow data
30
+ errors prune --older-than AGE [--dry-run]` deletes failures older than AGE
31
+ (`90d` / `24h` / `30m`); `--older-than` is **required** and there is no
32
+ automatic/background pruning — deletion is always an explicit operator
33
+ action. Both honor `--profile` and the exit-16 `DataStoreError` convention.
34
+
35
+ ### Fixed
36
+
37
+ - **`gflow character create` safely activates the current Create-Body
38
+ composer.** Flow can autosave the body triptych over the stored portrait
39
+ prompt when the mode switch has not settled (observed live 2026-07-25 on
40
+ 0.43.0). Current Flow reuses one Slate editor and exposes Create Body through
41
+ the locale-independent `accessibility_new` icon beside the portrait image;
42
+ gflow now clicks that scoped mode control, requires a new generated-face
43
+ reference chip to mount, and verifies the shared editor owns focus **before
44
+ any clearing or typing**. Readback failures abort before submit. The older
45
+ `add_2`/second-box cohort remains supported through its count-rise gate.
46
+ Post-type isolation still aborts before the credited submit. Live DOM
47
+ evidence and the one-box failure were captured on 2026-07-26. Face-only
48
+ creates are unchanged.
49
+
50
+ - **Profile-lock remediation message** now names the real cause and recovery.
51
+ `ProfileLockedError` (exit 11) previously told operators to "wait for it to
52
+ finish" — implying an unbounded wait — and to hunt for a `gflow`/Chrome
53
+ process. In practice a blocking lock is a kernel *advisory* lock held by a
54
+ **live** process (often a `python.exe` a `chrome.exe` scan misses); the OS
55
+ releases it the instant the holder dies, so a leftover lock *file* never
56
+ blocks acquisition. The message now points to the recorded owner PID
57
+ (surfaced locally since v0.43.0) and says to just retry when nothing is
58
+ running. The lock itself is unchanged — auto-reclaim was considered and
59
+ rejected as unsafe (an unlink→new-inode race could put two browsers on one
60
+ profile, the exact corruption the lease prevents). Refs #370.
61
+
10
62
  ## [0.43.0] — 2026-07-23
11
63
 
12
64
  ### Added
@@ -2332,7 +2384,8 @@ shell-script template that branches on these codes.
2332
2384
 
2333
2385
  First skeleton. Not functional end-to-end yet.
2334
2386
 
2335
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...HEAD
2387
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.44.0...HEAD
2388
+ [0.44.0]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...v0.44.0
2336
2389
  [0.43.0]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...v0.43.0
2337
2390
  [0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
2338
2391
  [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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.43.0
3
+ Version: 0.44.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
@@ -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
 
@@ -161,10 +161,12 @@ async worker (which mirrors its `generation_queue.error_json` failure into
161
161
  data-layer fault can never mask the generation error or change the exit code.
162
162
  - The character-create saga deliberately keeps its STARTED rows for resume —
163
163
  it is excluded from the failure funnel by design.
164
- - `failed` rows accumulate without an automatic cap in this release: `gflow
165
- data prune` targets stale in-flight/completed entries, not failed-operation
166
- history. Bounded retention and a dedicated export are tracked in
167
- [#345](https://github.com/ffroliva/gflow-cli/issues/345).
164
+ - `failed` rows have **no automatic cap** by design — there is no background
165
+ pruning. Use `gflow data errors prune --older-than <age>` for explicit
166
+ retention and `gflow data errors export` to archive history first (see
167
+ [`data errors`](#gflow-data-errors--bounded-retention--export-345) below,
168
+ [#345](https://github.com/ffroliva/gflow-cli/issues/345)). Note `gflow data
169
+ prune` is unrelated: it targets stale `local_files`, not failure history.
168
170
 
169
171
  ---
170
172
 
@@ -300,6 +302,39 @@ gflow data prune
300
302
  Only **local files** (where `storage_provider` is NULL) are scanned; cloud-stored
301
303
  assets are ignored to prevent accidental pruning of remote objects.
302
304
 
305
+ ### `gflow data errors` — bounded retention + export (#345)
306
+
307
+ Maintain the failed-operation history (the `data list errors` funnel). Two
308
+ subcommands, both explicit operator actions — there is **no automatic/background
309
+ pruning**.
310
+
311
+ ```bash
312
+ # Archive every failure as JSONL (unbounded; newest-first) before deleting
313
+ gflow data errors export -o failures.jsonl
314
+
315
+ # Archive only the slice you are about to prune
316
+ gflow data errors export --older-than 90d -o old-failures.jsonl
317
+
318
+ # Preview what a retention prune would delete (no changes)
319
+ gflow data errors prune --older-than 90d --dry-run
320
+
321
+ # Delete failures older than 90 days
322
+ gflow data errors prune --older-than 90d
323
+ ```
324
+
325
+ - `--older-than` takes an age like `90d` / `24h` / `30m` (`d` days, `h` hours,
326
+ `m` minutes; positive integers only). It is **required** on `prune` so
327
+ deletion is always a deliberate age choice; on `export` it is optional
328
+ (default: all failures).
329
+ - `--profile NAME` scopes either command to one profile.
330
+ - `export` writes JSONL to `-o/--output FILE`, or to stdout when omitted —
331
+ reusing the same serialization as `data list errors --json`.
332
+ - Deletion errors map to **exit 16** (`DataStoreError`), consistent with the
333
+ rest of `gflow data`.
334
+
335
+ Archive first if you need the failure history for offline WAF-cadence /
336
+ reliability analysis — pruning is irreversible.
337
+
303
338
  ### `gflow data media <media_id>` — read a single asset
304
339
 
305
340
  ```
@@ -507,7 +542,7 @@ Live tests (`@pytest.mark.live`) and E2E tests (`@pytest.mark.e2e`) are opt-in a
507
542
  - **`gflow data ls` / `gflow data show <operation_id>`** — richer browsing without leaving the terminal.
508
543
  - **Cost tracking** — once enough operation metadata is reliable, surface "credits spent this month" per profile / model / aspect.
509
544
  - **Postgres / Supabase adapter** — for users running gflow on shared workers or wanting cross-machine sync. The repository surface is already designed for this swap.
510
- - **`gflow data export`** — dump the catalog as JSON / Parquet for downstream analytics.
545
+ - **`gflow data export`** (full catalog → JSON / Parquet) — the failed-operation slice shipped as `gflow data errors export` (JSONL, #345); a full-catalog / Parquet dump for downstream analytics is still open.
511
546
 
512
547
  These are tracked in [`PLAN.md`](../PLAN.md) under the data-layer phase backlog.
513
548
 
@@ -133,7 +133,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
133
133
  **"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
134
134
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
135
135
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
136
- **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit** — real-editor recorder bundle 19/19 checks [structural DOM + host-category reduction + leak-scan clean on real traffic, honest `har_state`], real two-process contention → exit-11 metadata-only bundle with owner evidence and no reclaim, a real credit-free t2i proving no-incident-on-success, and the approved paid `veo-lite` T2V [S43] — HTTP-200 submission, `MEDIA_GENERATION_STATUS_SUCCESSFUL`, 2.3 MB `ftyp` mp4, catalog provenance, no incident bundle, lease re-acquirable — one lifecycle proven, availability soak explicitly NOT claimed). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
136
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.44.0](LIVE_VERIFICATION_v0.44.0.md) (**#381 dual-side project management & Playwright Chromium transport live-verified 2026-07-26** — real-editor project creation + rename tRPC server/DOM sync, prompt slugging, `gflow project` subcommand family, HTTP 429 adaptive backoff, and full E2E test suite). Prior: [v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit**). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
137
137
  **"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
138
138
  **"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
139
139
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
@@ -1,7 +1,8 @@
1
1
  # Live verification — v0.43.0 (private incident diagnostics)
2
2
 
3
- > Evidence for the design's §10.3 live matrix
4
- > (`docs/superpowers/specs/2026-07-22-private-incident-diagnostics-design.md`).
3
+ > Evidence for the private incident diagnostics live matrix (the design spec was
4
+ > consolidated into `docs/ARCHITECTURE.md`, `docs/SECURITY.md`, and
5
+ > `docs/DEBUGGING.md` at the v0.43.0 release; original in git history).
5
6
  > Offline coverage (2,600+ tests incl. 43-scenario traceability) verifies
6
7
  > gflow-cli's own behavior; this document records what was proven against
7
8
  > **real Google Flow**. Harness:
@@ -0,0 +1,37 @@
1
+ # Live Verification Evidence — v0.44.0
2
+
3
+ > **Release:** `v0.44.0`
4
+ > **Date:** 2026-07-26
5
+ > **Primary Features Verified:** Dual-side project naming & management (`gflow project`), prompt slugging, HTTP 429 adaptive backoff / rate-limit recovery, and Playwright Chromium live transport integration.
6
+
7
+ ---
8
+
9
+ ## 1. Executive Summary & Verification Matrix
10
+
11
+ | Feature / System | Scope | Execution Target | Evidence Ledger | Verdict |
12
+ |---|---|---|---|---|
13
+ | **Dual-Side Project Naming (#381)** | Project creation with `--project-name` & title rename propagation | Live Playwright Chromium + Google Flow tRPC API (`project.createProject` & `project.renameProject`) | `tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_live_browser_e2e` (11.97s) | **GREEN** |
14
+ | **Prompt Slugging (#381)** | Auto-deriving 40-char prompt slugs for scratch projects | Pure helper function `slugify_project_name` | `tests/cli/test_helpers.py` & `test_slugify_project_name_e2e` | **GREEN** |
15
+ | **`gflow project` Subcommands (#381)** | `list`, `show`, `rename`, `create` subcommands | Click CLI runner & SQLite catalog repository | `tests/test_cli_project.py` (11/11 unit tests) | **GREEN** |
16
+ | **HTTP 429 Rate Limit Recovery (#384)** | Adaptive backoff and `RateLimitError` handling | `FlowApiClient` transport error handler | Unit suite & `test_ui_automation.py` | **GREEN** |
17
+ | **Codex Plugin Skills** | Repo-local `$gflow:*` skills | `.codex-plugin/plugin.json` | Manifest validation & CLI gates | **GREEN** |
18
+
19
+ ---
20
+
21
+ ## 2. Live Playwright Chromium Execution Transcript & Invariants
22
+
23
+ ```text
24
+ tests/e2e/test_project_naming_e2e.py::test_slugify_project_name_e2e PASSED [ 25%]
25
+ tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_dual_side_e2e PASSED [ 50%]
26
+ tests/e2e/test_project_naming_e2e.py::test_project_cli_subcommands_e2e PASSED [ 75%]
27
+ tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_live_browser_e2e PASSED [100%]
28
+
29
+ ============================= 4 passed in 11.97s ==============================
30
+ ```
31
+
32
+ ### 5-Layer Verification Ledger
33
+ 1. **File Count:** 4 files created/updated (`src/gflow_cli/cli_project.py`, `tests/test_cli_project.py`, `tests/e2e/test_project_naming_e2e.py`, `PLAN.md`).
34
+ 2. **Wire Protocol Invariant:** Live tRPC routes `https://labs.google/fx/api/trpc/project.createProject` and `project.renameProject` executed via Playwright Chromium page session.
35
+ 3. **Database Provenance:** SQLite catalog `projects` table updated in lockstep with `title` column and `repo.get_project()` read-back matching server state.
36
+ 4. **CLI Table / JSON Schema Parity:** `gflow project list` and `gflow project show` verified across Rich table rendering and machine-readable JSON envelopes.
37
+ 5. **Quality Gates:** 100% green across `check_repo_hygiene.py`, `check_doc_links.py`, `check_website_docs_pii.py`, `ruff check`, `ruff format`, `pyright src`, and test suite.
@@ -4,9 +4,9 @@
4
4
 
5
5
  ## Current release
6
6
 
7
- **v0.43.0 — alpha.** **Private incident diagnostics (#369/#370/#174/#183).** Relevant operational failures — Flow app crashes, agentic-cohort / UI-mode errors, selector drift, transport timeouts, WAF/network/wire-format errors, profile-lock contention, unexpected exceptions — now automatically write a bounded, **private** incident bundle under `<GFLOW_CLI_HOME>/incidents/` (`GFLOW_CLI_INCIDENT_CAPTURE`, default **on**): an allowlisted `manifest.json`, structural `ui.json`, `network.json` / `browser.json` ring journals (host categories / canonical routes / status codes / lengths only — never prompts, tokens, cookies, bodies, or signed URLs), and a `sensitive/screenshot.png` for UI-state failures. Nothing is ever uploaded — remote MCP / HTTP / worker error envelopes carry only an opaque `{id, capture_status}` while the local CLI prints the bundle path; retention is bounded (50 bundles / 250 MiB) and validates ownership before pruning. Also: profile-lock owner evidence (offset-1 versioned lease metadata — PID + observed start time, per-command HMAC identities, no reclaim/kill), retryable-parity for `FlowAppError` / `FlowAgentUiError` across CLI-JSON / MCP / worker via one shared `errors.is_retryable()`, clean-fail on Flow's media-library / agentic cohort (`FlowAgentUiError`) and web-app crashes (`FlowAppError` exit 31), an experimental-transport self-lockout guard, and a `website/docs/` PII-leak CI gate. 2689 tests pass; live-verified against real Flow (real-editor recorder bundle 19/19 checks, real two-process contention → owner-evidence bundle, and an approved paid `veo-lite` T2V, all credit-accounted). See [LIVE_VERIFICATION_v0.43.0.md](LIVE_VERIFICATION_v0.43.0.md).
7
+ **v0.44.0 — alpha.** **Dual-side project naming & management (#381).** Feature set includes `gflow project` subcommand family (`list`, `show`, `rename`, `create`), `--project-name` / `--project-title` options across `gflow image` (`t2i`, `i2i`) and `gflow video` (`t2v`, `i2v`, `r2v`) generation commands, prompt slugging for scratch projects, dual-side title sync updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep, HTTP 429 adaptive backoff / `RateLimitError` recovery (#384), character body prompt composer fixes (#378), and a repo-local Codex plugin (`$gflow:*` skills). Verified via full test suite and live Playwright Chromium E2E transport test. See [LIVE_VERIFICATION_v0.44.0.md](LIVE_VERIFICATION_v0.44.0.md).
8
8
 
9
- **Develop (unreleased, post-v0.43.0):** *(empty — develop is the staging branch for the next release).*
9
+ **Develop (unreleased, post-v0.44.0):** *(empty — develop is the staging branch for the next release).*
10
10
 
11
11
  <details><summary>v0.42.0 — content-safety classification + Antigravity coding agent (#359/#360/#361)</summary>
12
12