gflow-cli 0.27.1__tar.gz → 0.28.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 (511) hide show
  1. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/CHANGELOG.md +27 -1
  2. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/PKG-INFO +1 -1
  3. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/INDEX.md +1 -1
  4. gflow_cli-0.28.0/docs/LIVE_VERIFICATION_v0.28.0.md +59 -0
  5. gflow_cli-0.28.0/docs/superpowers/plans/2026-07-08-agentic-instructions/PLAN.md +329 -0
  6. gflow_cli-0.28.0/docs/superpowers/plans/2026-07-08-agentic-instructions/spike-findings.md +210 -0
  7. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/pyproject.toml +1 -1
  8. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/__init__.py +1 -1
  9. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/client.py +48 -1
  10. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/image.py +73 -0
  11. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/drivers/agentic.py +114 -8
  12. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/ui_automation.py +15 -0
  13. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_image.py +39 -2
  14. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/mcp/tools.py +5 -0
  15. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/worker/daemon.py +39 -2
  16. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client.py +54 -1
  17. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_image.py +53 -0
  18. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/drivers/test_agentic.py +166 -7
  19. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_ui_automation.py +71 -1
  20. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_image.py +88 -0
  21. gflow_cli-0.28.0/tests/e2e/test_live_agentic_instructions.py +132 -0
  22. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_video_agent_ui_steps.py +253 -3
  23. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/video_agent_ui.feature +24 -1
  24. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/test_server.py +1 -1
  25. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/worker/test_daemon.py +46 -0
  26. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/uv.lock +1 -1
  27. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/README.md +0 -0
  28. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/active.md +0 -0
  29. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/branch-review.md +0 -0
  30. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/changelog.md +0 -0
  31. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/check.md +0 -0
  32. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/doc-review.md +0 -0
  33. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  34. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  35. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/known-issues.md +0 -0
  36. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/next.md +0 -0
  37. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/plan.md +0 -0
  38. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  39. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/predict.md +0 -0
  40. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/release.md +0 -0
  41. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/scenario.md +0 -0
  42. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/sonar.md +0 -0
  43. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.claude/commands/gflow/status.md +0 -0
  44. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.env.template +0 -0
  45. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.gitattributes +0 -0
  46. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/CODEOWNERS +0 -0
  47. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  48. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/copilot-instructions.md +0 -0
  49. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/dependabot.yml +0 -0
  50. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/ci.yml +0 -0
  51. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/external-pr-triage.yml +0 -0
  52. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/governance-advisory.yml +0 -0
  53. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/governance-benchmark.yml +0 -0
  54. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/main-base-guard.yml +0 -0
  55. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.github/workflows/release.yml +0 -0
  56. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.gitignore +0 -0
  57. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.gitleaks.toml +0 -0
  58. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.pre-commit-config.yaml +0 -0
  59. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/.secrets.baseline +0 -0
  60. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/AGENTS.md +0 -0
  61. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/CLAUDE.md +0 -0
  62. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/CONFIGURATION.md +0 -0
  63. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/CONTRIBUTING.md +0 -0
  64. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/DISCLAIMER.md +0 -0
  65. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/GEMINI.md +0 -0
  66. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/KNOWN_ISSUES.md +0 -0
  67. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/LICENSE +0 -0
  68. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/PLAN.md +0 -0
  69. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/README.md +0 -0
  70. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/RELEASE.md +0 -0
  71. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/ROADMAP.md +0 -0
  72. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/conftest.py +0 -0
  73. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docker-compose.yml +0 -0
  74. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/AGENT_GUIDE.md +0 -0
  75. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/AGENT_UI_E2E.md +0 -0
  76. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/AGENT_UI_RECON.md +0 -0
  77. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/ARCHITECTURE.md +0 -0
  78. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/AUTHENTICATION.md +0 -0
  79. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/CHARACTER.md +0 -0
  80. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/CHARACTER_RECON.md +0 -0
  81. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/CONFIGURATION.md +0 -0
  82. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/DATA_LAYER.md +0 -0
  83. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/DEBUGGING.md +0 -0
  84. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/DEMOS.md +0 -0
  85. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/DEVELOPMENT.md +0 -0
  86. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/E2E_TESTING.md +0 -0
  87. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/EXTERNAL_STORAGE.md +0 -0
  88. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/GITHUB.md +0 -0
  89. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  90. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  91. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  92. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  93. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  94. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  95. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  96. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  97. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  98. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  99. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  100. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  101. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  102. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  103. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  104. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  105. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  106. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  107. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  108. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  109. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  110. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  111. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  112. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  113. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  114. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  115. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  116. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/MCP.md +0 -0
  117. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/MOVIE.md +0 -0
  118. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/PROJECT_STATUS.md +0 -0
  119. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/PROMPT_EXPANSION.md +0 -0
  120. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/SECURITY.md +0 -0
  121. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/TOOLS.md +0 -0
  122. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/USAGE.md +0 -0
  123. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/USER_GUIDE.md +0 -0
  124. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/assets/demo-split-pf.gif +0 -0
  125. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/assets/example-run.gif +0 -0
  126. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/assets/examples.webp +0 -0
  127. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/medium_tutorial.md +0 -0
  128. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/schemas/movie-handoff.schema.json +0 -0
  129. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/sonar-cleanup-tracker.md +0 -0
  130. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  131. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  132. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  133. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  134. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  135. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  136. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  137. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  138. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  139. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  140. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  141. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  142. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/README.md +0 -0
  143. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/batch_from_config.py +0 -0
  144. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/multi_prompt_t2i.py +0 -0
  145. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/sample_config.json +0 -0
  146. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/sample_prompts.txt +0 -0
  147. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/single_image_t2i.py +0 -0
  148. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/examples/workflow_chain.py +0 -0
  149. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/llms.txt +0 -0
  150. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/README.md +0 -0
  151. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/01_upload_image.json +0 -0
  152. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  153. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  154. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/04_archive_workflow.json +0 -0
  155. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/05_createProject.json +0 -0
  156. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/06_batchGenerateImages.json +0 -0
  157. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  158. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  159. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  160. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  161. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  162. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/12_create_scene.json +0 -0
  163. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  164. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/14_get_scene_workflows.json +0 -0
  165. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  166. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/ci/check_doc_links.py +0 -0
  167. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/ci/check_materiality.py +0 -0
  168. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/ci/check_repo_hygiene.py +0 -0
  169. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/debug_editor.py +0 -0
  170. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/debug_gen_settings.py +0 -0
  171. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/debug_settings.py +0 -0
  172. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/_recording_client.py +0 -0
  173. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/_spike_common.py +0 -0
  174. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/active_plan.py +0 -0
  175. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  176. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  177. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  178. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  179. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  180. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  181. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/capture_locale_invariants.py +0 -0
  182. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  183. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/character_create_spike.py +0 -0
  184. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/character_create_spike_v2.py +0 -0
  185. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/dump_character_selectors.js +0 -0
  186. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/make_project.py +0 -0
  187. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/materiality_backtest.py +0 -0
  188. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/monitor_pr_38.py +0 -0
  189. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/patch_character.py +0 -0
  190. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/skillopt/README.md +0 -0
  191. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/skillopt/harness.py +0 -0
  192. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/skillopt/tasks.json +0 -0
  193. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  194. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  195. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  196. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  197. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  198. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  199. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  200. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  201. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  202. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  203. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  204. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  205. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  206. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_patch_entity.py +0 -0
  207. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/dev/spike_patchright.py +0 -0
  208. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/diag/README.md +0 -0
  209. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/diag/capture_flow_traffic.py +0 -0
  210. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/diag/memory_profile.py +0 -0
  211. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/diag/recaptcha_mint.py +0 -0
  212. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  213. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  214. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/record_demo.ps1 +0 -0
  215. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/smoke_image.py +0 -0
  216. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/smoke_real_chrome_image.py +0 -0
  217. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/smoke_video_editor.py +0 -0
  218. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/smoke_worker_style.py +0 -0
  219. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/scripts/verify_chrome_auth_viability.py +0 -0
  220. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/README.md +0 -0
  221. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/gflow-cli/SKILL.md +0 -0
  222. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/issue-assessment/SKILL.md +0 -0
  223. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/issue-resolve/SKILL.md +0 -0
  224. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/plan/SKILL.md +0 -0
  225. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/pr-council-review/SKILL.md +0 -0
  226. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/predict/SKILL.md +0 -0
  227. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/scenario/SKILL.md +0 -0
  228. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/skills/status/SKILL.md +0 -0
  229. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/sonar-project.properties +0 -0
  230. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/__main__.py +0 -0
  231. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/_cli_helpers.py +0 -0
  232. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/__init__.py +0 -0
  233. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/_engine.py +0 -0
  234. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/_retry.py +0 -0
  235. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  236. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/character.py +0 -0
  237. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/dto.py +0 -0
  238. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/image_upscale.py +0 -0
  239. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/recaptcha.py +0 -0
  240. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/routes.py +0 -0
  241. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/scene.py +0 -0
  242. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  243. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/_common.py +0 -0
  244. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  245. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/base.py +0 -0
  246. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  247. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  248. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  249. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  250. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  251. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  252. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  253. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  254. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  255. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/api/video.py +0 -0
  256. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/__init__.py +0 -0
  257. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/base.py +0 -0
  258. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/cookies.py +0 -0
  259. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/factory.py +0 -0
  260. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  261. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  262. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/strategies.py +0 -0
  263. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/auth/verification.py +0 -0
  264. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/browser_manager.py +0 -0
  265. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/chain.py +0 -0
  266. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/chain_manifest.py +0 -0
  267. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli.py +0 -0
  268. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_character.py +0 -0
  269. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_data.py +0 -0
  270. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_models.py +0 -0
  271. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_movie.py +0 -0
  272. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_run.py +0 -0
  273. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_scene.py +0 -0
  274. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_tools.py +0 -0
  275. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/cli_video.py +0 -0
  276. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/composition.py +0 -0
  277. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/config.py +0 -0
  278. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/__init__.py +0 -0
  279. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/chain_repo.py +0 -0
  280. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  281. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  282. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  283. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  284. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  285. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  286. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  287. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  288. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  289. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/models.py +0 -0
  290. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/queries.py +0 -0
  291. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/recorder.py +0 -0
  292. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/redaction.py +0 -0
  293. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/repository.py +0 -0
  294. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/data/store.py +0 -0
  295. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/errors.py +0 -0
  296. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/exceptions.py +0 -0
  297. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/image_batch.py +0 -0
  298. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/json_output.py +0 -0
  299. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/manifest.py +0 -0
  300. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/mcp/__init__.py +0 -0
  301. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/mcp/prompts.py +0 -0
  302. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/mcp/resources.py +0 -0
  303. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/mcp/server.py +0 -0
  304. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/media.py +0 -0
  305. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/movie_manifest.py +0 -0
  306. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/observability.py +0 -0
  307. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/paths.py +0 -0
  308. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/profile_store.py +0 -0
  309. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/services/__init__.py +0 -0
  310. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/services/character_create.py +0 -0
  311. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/storage.py +0 -0
  312. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/__init__.py +0 -0
  313. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/banned.py +0 -0
  314. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  315. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  316. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/expander.py +0 -0
  317. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/invocation.py +0 -0
  318. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/loader.py +0 -0
  319. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/registry.py +0 -0
  320. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/runtime.py +0 -0
  321. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/tools/spec.py +0 -0
  322. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/ui/app.py +0 -0
  323. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/ui/server.py +0 -0
  324. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/src/gflow_cli/worker/queue.py +0 -0
  325. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tasks/lessons.md +0 -0
  326. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/test_assets/sample_batch.json +0 -0
  327. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/test_assets/sample_batch.tsv +0 -0
  328. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/test_assets/sample_batch_invalid.tsv +0 -0
  329. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/__init__.py +0 -0
  330. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/__init__.py +0 -0
  331. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/fixtures/character_gen_response.json +0 -0
  332. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  333. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  334. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  335. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_bearer_redaction.py +0 -0
  336. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_character.py +0 -0
  337. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_character.py +0 -0
  338. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_delete_characters.py +0 -0
  339. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_generate_character.py +0 -0
  340. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_image.py +0 -0
  341. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_launch_kwargs.py +0 -0
  342. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_patch_entity.py +0 -0
  343. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_scene.py +0 -0
  344. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_client_upscale.py +0 -0
  345. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_concurrency.py +0 -0
  346. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_dto.py +0 -0
  347. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_engine.py +0 -0
  348. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_image_dto.py +0 -0
  349. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_image_upscale.py +0 -0
  350. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  351. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_recaptcha.py +0 -0
  352. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_retry.py +0 -0
  353. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_routes.py +0 -0
  354. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_routes_character.py +0 -0
  355. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_routes_scene.py +0 -0
  356. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_sapisidhash_helper.py +0 -0
  357. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_scene_models.py +0 -0
  358. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_video.py +0 -0
  359. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/test_video_request.py +0 -0
  360. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/__init__.py +0 -0
  361. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/conftest.py +0 -0
  362. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/drivers/__init__.py +0 -0
  363. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/drivers/test_factory.py +0 -0
  364. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_base.py +0 -0
  365. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_bearer.py +0 -0
  366. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_common.py +0 -0
  367. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  368. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_factory.py +0 -0
  369. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_fingerprint.py +0 -0
  370. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_sapisidhash.py +0 -0
  371. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_transport_timeout.py +0 -0
  372. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  373. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  374. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  375. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  376. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/auth/strategies/test_factory.py +0 -0
  377. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/auth/strategies/test_strategies.py +0 -0
  378. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/auth/test_cookies.py +0 -0
  379. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/auth/test_verification.py +0 -0
  380. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/__init__.py +0 -0
  381. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_auth_list.py +0 -0
  382. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_character.py +0 -0
  383. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_character_create.py +0 -0
  384. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_data.py +0 -0
  385. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  386. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  387. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_image_upscale.py +0 -0
  388. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_models.py +0 -0
  389. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_movie.py +0 -0
  390. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_run.py +0 -0
  391. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_scene.py +0 -0
  392. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_tools.py +0 -0
  393. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_video.py +0 -0
  394. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_cli_video_chain.py +0 -0
  395. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_error_handling.py +0 -0
  396. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_helpers.py +0 -0
  397. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_movie_manifest.py +0 -0
  398. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  399. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_settings_validation.py +0 -0
  400. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  401. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/composition/test_character.py +0 -0
  402. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/composition/test_compose_prompt.py +0 -0
  403. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/composition/test_handoff.py +0 -0
  404. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/composition/test_style_variants.py +0 -0
  405. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/composition/test_style_variants_e2e.py +0 -0
  406. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/conftest.py +0 -0
  407. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/__init__.py +0 -0
  408. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_chain_repo.py +0 -0
  409. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_find_incomplete_character.py +0 -0
  410. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_models.py +0 -0
  411. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_packaging.py +0 -0
  412. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_recorder.py +0 -0
  413. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_recorder_character.py +0 -0
  414. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_redaction.py +0 -0
  415. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_repository.py +0 -0
  416. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_scene_persistence.py +0 -0
  417. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_settings_and_errors.py +0 -0
  418. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/data/test_store_migrations.py +0 -0
  419. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/dev/test_recording_client.py +0 -0
  420. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/__init__.py +0 -0
  421. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/conftest.py +0 -0
  422. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  423. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  424. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_chain_e2e.py +0 -0
  425. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_character_create_e2e.py +0 -0
  426. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_daemon_e2e.py +0 -0
  427. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  428. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  429. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  430. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  431. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_json_output_e2e.py +0 -0
  432. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  433. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_scene_compose_live.py +0 -0
  434. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_tools_e2e.py +0 -0
  435. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_transports_e2e.py +0 -0
  436. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  437. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  438. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/__init__.py +0 -0
  439. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/auth.feature +0 -0
  440. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/auth_login.feature +0 -0
  441. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/character_create.feature +0 -0
  442. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/character_read.feature +0 -0
  443. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/conftest.py +0 -0
  444. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/image.feature +0 -0
  445. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/image_upscale.feature +0 -0
  446. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/locale_picker_include.feature +0 -0
  447. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_auth_login_steps.py +0 -0
  448. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_auth_steps.py +0 -0
  449. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_character_create_steps.py +0 -0
  450. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_character_read_steps.py +0 -0
  451. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_image_steps.py +0 -0
  452. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_image_upscale_steps.py +0 -0
  453. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  454. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_step_collision_guard.py +0 -0
  455. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/test_video_chain_steps.py +0 -0
  456. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/features/video_chain.feature +0 -0
  457. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/fixtures/__init__.py +0 -0
  458. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/fixtures/seeded_catalog.py +0 -0
  459. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/image_batch/__init__.py +0 -0
  460. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/image_batch/test_image_manifest.py +0 -0
  461. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/image_batch/test_observability_events.py +0 -0
  462. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/integration/__init__.py +0 -0
  463. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/integration/conftest.py +0 -0
  464. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/integration/constants.py +0 -0
  465. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/integration/test_storage_gcs.py +0 -0
  466. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/integration/test_storage_s3.py +0 -0
  467. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/__init__.py +0 -0
  468. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/conftest.py +0 -0
  469. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/test_stdio_transport.py +0 -0
  470. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/test_tools_helpers.py +0 -0
  471. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/mcp/test_tools_wired.py +0 -0
  472. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  473. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  474. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/scripts/test_check_materiality.py +0 -0
  475. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  476. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/scripts/test_materiality_backtest.py +0 -0
  477. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/services/__init__.py +0 -0
  478. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/services/test_character_create_redaction.py +0 -0
  479. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/services/test_character_create_saga.py +0 -0
  480. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  481. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/smoke/__init__.py +0 -0
  482. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  483. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/smoke/test_real_flow.py +0 -0
  484. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_auth.py +0 -0
  485. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_browser_manager.py +0 -0
  486. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_chain.py +0 -0
  487. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_chain_manifest.py +0 -0
  488. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_cli_data.py +0 -0
  489. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_config.py +0 -0
  490. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_conftest_isolation.py +0 -0
  491. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_data_queries.py +0 -0
  492. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_documentation_gate.py +0 -0
  493. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_errors.py +0 -0
  494. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_errors_403.py +0 -0
  495. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_json_output.py +0 -0
  496. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_manifest.py +0 -0
  497. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_marker_registry.py +0 -0
  498. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_media.py +0 -0
  499. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_observability.py +0 -0
  500. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_paths.py +0 -0
  501. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_profile_store.py +0 -0
  502. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/test_smoke.py +0 -0
  503. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/__init__.py +0 -0
  504. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_banned.py +0 -0
  505. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_expander.py +0 -0
  506. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_invocation.py +0 -0
  507. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_loader.py +0 -0
  508. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_registry.py +0 -0
  509. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_runtime.py +0 -0
  510. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/tools/test_spec.py +0 -0
  511. {gflow_cli-0.27.1 → gflow_cli-0.28.0}/tests/ui/test_app.py +0 -0
@@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.28.0] — 2026-07-08
11
+
12
+ ### Added
13
+
14
+ - **Agent instructions (`-i` / `--instruction`) now actually steer generation.** On an
15
+ agentic-cohort Flow session, `gflow image t2i "…" -i "Every image is a flat 2D crayon
16
+ drawing"` makes the agent adopt that style (live-verified end-to-end). Instruction cards are
17
+ synced to the project's Agent brief via `PATCH /v1/projects/{id}/agentInfo`, and the agent
18
+ folds every **enabled** card into the generation. Cards carry distinct titles and may
19
+ reference image assets. Persistent CRUD (`gflow instructions`) and movie-manifest wiring are
20
+ planned follow-ups.
21
+
22
+ ### Fixed
23
+
24
+ - **Instructions were silently inert (agentic transport).** Two root causes, both found via a
25
+ live spike: (1) the composer used an imperative `"Generate N images: …"` directive that the
26
+ agent passes to the image tool verbatim, bypassing the brief — now phrased conversationally
27
+ so the agent's reasoning step applies the cards; (2) the brief-level master switch
28
+ `project_brief.enabled` was never set (defaults off on a fresh project → all cards ignored) —
29
+ now enabled whenever cards are synced. Also fixes a wrong PATCH content-type
30
+ (`application/json+protobuf` → HTTP 400, silently) and a hardcoded per-card title that
31
+ collapsed every card to one name.
32
+ - **`-i` no longer no-ops without warning on a classic-cohort session:** a clear warning is now
33
+ emitted (instructions only apply on agentic sessions).
34
+
10
35
  ## [0.27.1] — 2026-07-07
11
36
 
12
37
  ### Fixed
@@ -1844,7 +1869,8 @@ shell-script template that branches on these codes.
1844
1869
 
1845
1870
  First skeleton. Not functional end-to-end yet.
1846
1871
 
1847
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.27.1...HEAD
1872
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.28.0...HEAD
1873
+ [0.28.0]: https://github.com/ffroliva/gflow-cli/compare/v0.27.1...v0.28.0
1848
1874
  [0.27.1]: https://github.com/ffroliva/gflow-cli/compare/v0.27.0...v0.27.1
1849
1875
  [0.27.0]: https://github.com/ffroliva/gflow-cli/compare/v0.26.0...v0.27.0
1850
1876
  [0.26.0]: https://github.com/ffroliva/gflow-cli/compare/v0.25.0...v0.26.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.27.1
3
+ Version: 0.28.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
@@ -120,7 +120,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
120
120
  **"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
121
121
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
122
122
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
123
- **"What was actually live-verified for the latest release?"** → latest: [LIVE_VERIFICATION_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)
123
+ **"What was actually live-verified for the latest release?"** → latest: [LIVE_VERIFICATION_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)
124
124
  **"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.
125
125
  **"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)
126
126
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
@@ -0,0 +1,59 @@
1
+ # Live Verification — v0.28.0
2
+
3
+ Release date: 2026-07-08. Headline: **Agent instructions (`-i` / `--instruction`) now actually steer agentic image generation** (PR #263).
4
+
5
+ Verification run: 2026-07-08, live Flow against profile `ffroliva` (agentic cohort), Windows, `.venv` build of the release tree. **Credit-spending:** this release changes the live agentic generation path, so it was exercised end-to-end against real Flow (image generation).
6
+
7
+ ## Scope
8
+
9
+ | Change | Surface | Verdict |
10
+ |---|---|---|
11
+ | Conversational `_compose_directive` (engages the agent's reasoning path) | `api/transports/drivers/agentic.py` | ✅ Live: enabled card applied |
12
+ | Reconcile sets brief master switch `project_brief.enabled=true` + `text/plain` content-type + status-checked | `api/transports/drivers/agentic.py` | ✅ Live: 200, no `patch_failed` |
13
+ | `AgentInstruction.title` / `resolved_title()` + shared `build_agent_brief_cards()` | `api/image.py` | ✅ Unit tests |
14
+ | `patch_agent_info` returns echoed `projectBrief` | `api/client.py` | ✅ Unit tests |
15
+ | Warn when `-i` used on a classic-cohort session | `api/transports/ui_automation.py` | ✅ Unit tests (both cohorts) |
16
+
17
+ ## Live scenario
18
+
19
+ `tests/e2e/test_live_agentic_instructions.py` (`-m e2e_image`, `GFLOW_CLI_FORCE_AGENT_UI=1`)
20
+ drove the REAL transport: create project → force agent → reconcile PATCH → conversational
21
+ submit → DOM scrape. Prompt was **style-neutral** ("a cat sitting on a wooden chair next to
22
+ a window") with a single **enabled** instruction card: "Every image MUST be rendered as a
23
+ flat 2D children's crayon drawing on textured paper…". Any crayon styling can therefore only
24
+ have come from the card.
25
+
26
+ ## Evidence ledger (5-layer)
27
+
28
+ 1. **File count:** exactly one image file written per generation (`<media_id>.jpg`).
29
+ 2. **Magic bytes:** the downloaded file passed the container sniff (`_image_kind` → `jpeg`).
30
+ 3. **Shape:** a valid landscape (16:9) render; agentic DOM scrape reports `(0,0)` sentinel
31
+ dimensions by design (wire dims are Web-Worker-delegated), so shape is confirmed visually.
32
+ 4. **Structlog invariants:** `ui_driver.bound mode=agentic` fired (not classic);
33
+ `agentic_driver.reconcile_instructions.patch` fired; **no**
34
+ `agentic_driver.reconcile_instructions.patch_failed` (content-type/auth regression guard).
35
+ 5. **User-confirmable artifact:** the generated image is an **unmistakable children's crayon
36
+ drawing** (waxy strokes, textured paper, primary palette) — visually confirmed to match the
37
+ enabled card, from a prompt containing zero style words. A control generation with the crayon
38
+ instruction in the *prompt* (not the card) confirmed the model can render crayon, isolating
39
+ the card (not a model limitation) as the applied factor.
40
+
41
+ ### Negative control (mechanism proof)
42
+
43
+ - Imperative `"Generate one image: …"` directive + same enabled card → **photorealistic**
44
+ (brief bypassed). Conversational phrasing → **crayon** (brief applied). This isolated the
45
+ phrasing fix. A follow-up run isolated the second fix: with cards synced but
46
+ `project_brief.enabled` unset → photorealistic; with the master switch on → crayon.
47
+
48
+ ## Gates
49
+
50
+ Local: `ruff check` 0 errors · `ruff format` clean · `pyright src` 0 errors · unit + BDD suites
51
+ green. CI on PR #263: tests (3.11/3.12/3.13) + **SonarCloud quality gate** all green
52
+ (new-code coverage ≥ 80%).
53
+
54
+ ## Known follow-ups (not in this release)
55
+
56
+ - `gflow instructions` persistent CRUD subcommand.
57
+ - `movie.toml` per-scene instruction wiring.
58
+ - `GFLOW_CLI_FORCE_AGENT_UI` binding is ~50/50 flaky on fresh projects (may bind classic).
59
+ - H4: reference images (`imageReferenceMediaIds`) on cards — untested.
@@ -0,0 +1,329 @@
1
+ # API-Driven & Relational Agentic Instructions Implementation Plan
2
+
3
+ > **For agentic workers:** Run `/gflow:status --feature agentic-instructions` to find the next
4
+ > unchecked task. Implement one task at a time. Run `/gflow:check` before every commit.
5
+
6
+ **Goal:** Implement a programmatic, API-driven, and relational instructions management system in the Google Flow Agentic transport, coordinating reference assets across individual generations and multi-scene movies.
7
+
8
+ **Architecture:**
9
+ We will shift from DOM-based automation inside Playwright to direct REST API calls using `PATCH /v1/projects/{projectId}/agentInfo`, which is project-scoped and supports relational asset attachments (`imageReferenceMediaIds`). We will expose this relational schema on the image/video DTOs, integrate it with the background worker, add `movie.toml` scene-level mapping, and conclude with a systematic developer skills audit.
10
+
11
+ **Predict verdict:** GO — confidence 9/10
12
+
13
+ **Risk register:**
14
+ | Severity | Risk | Mitigation |
15
+ |---|---|---|
16
+ | Medium | API signature drift on Google Flow backend | Scope tests to verify response status and keep Playwright DOM fallback logic in place |
17
+ | Low | Invalid media ID attachments | Pre-flight check verifies that any attached `imageReferenceMediaIds` are active in the project's media catalog |
18
+
19
+ ---
20
+
21
+ ## File structure
22
+
23
+ ### New files
24
+ ```
25
+ tests/e2e/test_live_agentic_instructions.py
26
+ Live verification tests for the instructions lifecycle and image generation.
27
+ ```
28
+
29
+ ### Modified files
30
+ ```
31
+ src/gflow_cli/api/client.py
32
+ Add patch_agent_info endpoint method.
33
+ src/gflow_cli/api/image.py
34
+ Extend AgentInstruction and GenerateImageRequest DTOs.
35
+ src/gflow_cli/api/transports/drivers/agentic.py
36
+ Update configure_image_settings to call patch_agent_info instead of driving DOM.
37
+ src/gflow_cli/movie_manifest.py
38
+ Integrate scene-specific instructions sync before generating each scene's clips.
39
+ skills/*
40
+ Audit and synchronize all agent skills with the latest codebase architecture.
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Task 1 — Unit Test & Mock Scaffold (test scaffold)
46
+
47
+ **What:** Create unit test mocks verifying relational instructions serialization and the `patch_agent_info` method wrapper.
48
+
49
+ **Files:**
50
+ - `tests/api/transports/drivers/test_agentic.py` — Mock testing for driver-API integration.
51
+ - `tests/worker/test_daemon.py` — Verify relational instructions extraction from background queue payload.
52
+
53
+ **Steps:**
54
+ - [x] Write mock DTO serialization tests for `AgentInstruction` containing `image_media_ids`.
55
+ - [x] Add assertions ensuring the driver correctly calls the `patch_agent_info` client method with structured payloads.
56
+
57
+ **Tests created (red):**
58
+ - [x] `test_agent_instruction_serialization_with_references`
59
+ - [x] `test_driver_reconcile_dispatches_patch_payload`
60
+
61
+ ---
62
+
63
+ ## Task 2 — BDD Feature & Step Scaffold (test scaffold)
64
+
65
+ **What:** Write BDD scenarios to verify relational instructions coordination in Cucumber features.
66
+
67
+ **Files:**
68
+ - `tests/features/video_agent_ui.feature` — Append scenarios for multi-instruction asset mapping.
69
+ - `tests/features/test_video_agent_ui_steps.py` — Implement step definitions simulating the mock server responses.
70
+
71
+ **Steps:**
72
+ - [x] Write Cucumber scenario for syncing relational instructions.
73
+ - [x] Mock the tRPC and REST responses for project brief updates.
74
+
75
+ **Tests created (red):**
76
+ - [x] Scenario: "Syncing instructions containing reference image IDs"
77
+ - [x] Scenario: "Toggling active/inactive states of relational cards"
78
+
79
+ ---
80
+
81
+ ## Task 3 — Relational Instructions API Client Implementation (implementation)
82
+
83
+ **What:** Implement direct `FlowApiClient` methods for patching agent settings.
84
+
85
+ **Files:**
86
+ - `src/gflow_cli/api/client.py` — Implement `patch_agent_info(project_id, enabled, cards)`.
87
+ - `src/gflow_cli/api/image.py` — Update `AgentInstruction` class attributes.
88
+
89
+ **Steps:**
90
+ - [x] Add `image_media_ids` and `character_ids` fields to `AgentInstruction`.
91
+ - [x] Implement `patch_agent_info` using the REST route `PATCH /v1/projects/{projectId}/agentInfo`.
92
+ - [x] Support `updateMask` parameters to selectively update `project_brief.enabled` and `project_brief.cards`.
93
+
94
+ ---
95
+
96
+ ## Task 4 — Driver and Worker Integration (integration)
97
+
98
+ **What:** Update `AgenticFlowUiDriver` and the daemon worker to use the new API client method.
99
+
100
+ **Files:**
101
+ - `src/gflow_cli/api/transports/drivers/agentic.py` — Call `patch_agent_info` inside `configure_image_settings`.
102
+ - `src/gflow_cli/worker/daemon.py` — Parse relational assets from task queue and forward them.
103
+
104
+ **Steps:**
105
+ - [x] Modify `configure_image_settings` to bypass DOM loop reconciliation and call the client REST endpoint directly.
106
+ - [x] Refactor background daemon payload builder to support `image_media_ids` mapping.
107
+
108
+ ---
109
+
110
+ ## Task 5 — Live Agentic Image Generation Spike (spike)
111
+
112
+ **What:** Validate empirically that the REST PATCH → generate round-trip works as expected
113
+ before writing any more production code. Run a real T2I generation on an agentic profile
114
+ with instructions ON vs OFF. Confirm cards influence output and that the `enabled: false`
115
+ soft-disable is respected by the model.
116
+
117
+ **Files:**
118
+ - `C:\development\github\gflow-agent-browser-spike\instructions_spike.py` — standalone spike script.
119
+
120
+ **Steps:**
121
+ - [x] Run `scripts/probe-agent-mode.ps1` on an active Flow browser session to inspect and verify all Agent Mode and sidebar DOM selectors, attributes, and roles.
122
+ - [x] Write spike: create project, PATCH two cards (one enabled, one disabled), generate one image, inspect output. (`scratch/spike_instructions_phase_a.py` + live Chrome; project `6b714c4e…`.)
123
+ - [x] Confirm `enabled: false` card does NOT appear to influence generation. (Confirmed — disabled noir card never injected.)
124
+ - [ ] ~~Confirm `imageReferenceMediaIds` on a card actually anchors the model's visual style.~~ Deferred — not tested; plausible via the reasoning path. Probe later with an uploaded asset.
125
+ - [x] Document findings in `spike-findings.md` (pass/fail per hypothesis).
126
+ - [ ] **Spike Fallback:** If reference media IDs are ignored, specify the fallback to degrade gracefully (using them only for UI catalog context, with warning logged).
127
+
128
+ **Gate:** ✅ MET (with redesign requirement). All hypotheses have observed answers.
129
+
130
+ **Spike outcome (2026-07-08):** Cards DO steer output (H1/H2/H3 confirmed) **but only
131
+ through the agent's reasoning path.** An imperative `"Generate N image(s): {prompt}"`
132
+ directive is passed to the image tool verbatim → brief ignored; a conversational
133
+ request → agent rewrites the tool prompt and injects enabled cards. **Load-bearing
134
+ consequence:** the transport made instructions inert on the CLI for TWO reasons
135
+ (both found live via the e2e; both fixed in this branch):
136
+ - `_compose_directive` used the imperative form → now conversational (`"Make me a picture of {prompt} …"`).
137
+ - `_reconcile_instructions` never set the brief-level **master switch**
138
+ `project_brief.enabled` (defaults OFF on a fresh project → all cards ignored) → now
139
+ PATCHes `updateMask=project_brief.enabled,project_brief.cards` with `enabled:true`.
140
+ - `_reconcile_instructions` content-type `application/json+protobuf` (silent 400)
141
+ → `text/plain`; response status now checked/warned.
142
+ - Per-card `title` hardcode → `AgentInstruction.title` + `resolved_title()`, via a
143
+ shared `build_agent_brief_cards()` used by both PATCH paths.
144
+ - `patch_agent_info` now returns the echoed `projectBrief` (no `GET /agentInfo`; it 404s).
145
+
146
+ **Live e2e (Task 9, done early):** `tests/e2e/test_live_agentic_instructions.py`
147
+ (`-m e2e_image`, `GFLOW_CLI_FORCE_AGENT_UI=1`) drives the real transport and was run
148
+ to a **verified crayon drawing** from a style-neutral prompt — cards steer output
149
+ end-to-end. Known follow-up: `GFLOW_CLI_FORCE_AGENT_UI` binding is ~50/50 flaky (may
150
+ bind classic and silently skip instructions). See `spike-findings.md`.
151
+
152
+ ---
153
+
154
+ ## Task 6 — `gflow instructions` Docs-First Spec (docs-first)
155
+
156
+ **What:** Write all user-facing documentation BEFORE implementing the subcommand.
157
+ The docs become the acceptance criteria for Task 7. This forces the design to be
158
+ coherent and agent-readable before a single implementation line is written.
159
+
160
+ **Design decisions locked in (do not reopen without a predict):**
161
+ - `-i "text"` on generation commands = ephemeral text-only card, always creates, never looks up.
162
+ - `gflow instructions` = persistent CRUD on project-scoped cards, supports refs and characters.
163
+ - No UUID inputs at the CLI; title matching is case-insensitive, fail-fast on ambiguity.
164
+ - `--project proj-id` on generation commands selects which project's active cards to use.
165
+ - Cards with `enabled: false` stay in the project but are ignored by the model.
166
+
167
+ **Files:**
168
+ - `docs/INSTRUCTIONS.md` — full user-facing guide: what instruction cards are, the
169
+ three-layer pipeline (setup → generate → compose), examples, movie context.
170
+ - `skills/gflow-cli/SKILL.md` — add a **Pipeline** section documenting the layered
171
+ sequence so AI agents always call setup before generation.
172
+ - `docs/USAGE.md` — add `gflow instructions` to the command surface section.
173
+ - `docs/INDEX.md` — register the new `INSTRUCTIONS.md` documentation file.
174
+ - `docs/superpowers/plans/2026-07-08-agentic-instructions/PLAN.md` — update this file
175
+ (Task 5b spec section).
176
+
177
+ **Steps:**
178
+ - [ ] Write `docs/INSTRUCTIONS.md` covering:
179
+ - What an instruction card is and why it is credits-free to set up.
180
+ - The three-layer pipeline: project context → generation → movie composition.
181
+ - Full `gflow instructions` command surface with annotated examples.
182
+ - Ephemeral `-i` vs persistent card distinction.
183
+ - `--project` flag semantics for generation commands.
184
+ - Typical agent-driven workflow (numbered steps, machine-readable).
185
+ - [ ] Update `skills/gflow-cli/SKILL.md` — add Pipeline section (with explicit project ID discovery guidance and "DO NOT" rules).
186
+ - [ ] Update `docs/USAGE.md` — add `gflow instructions` command surface entry.
187
+ - [ ] Update `docs/INDEX.md` — register link to `docs/INSTRUCTIONS.md`.
188
+ - [ ] Run `scripts/ci/check_doc_links.py` — all internal links must resolve.
189
+
190
+ **Gate:** Docs reviewed and approved before any Task 7 implementation starts.
191
+
192
+ ---
193
+
194
+ ## Task 7 — `gflow instructions` Subcommand Implementation (implementation)
195
+
196
+ **What:** Implement the `gflow instructions` Click subcommand group based on the
197
+ Task 6 spec. Strictly no scope creep — implement exactly what the docs say.
198
+
199
+ **Files:**
200
+ - `src/gflow_cli/cli_instructions.py` — new module with Click group + subcommands.
201
+ - `src/gflow_cli/cli.py` — register `gflow instructions` group.
202
+ - `src/gflow_cli/api/client.py` — add `get_agent_info()` for list/enable/disable lookups.
203
+ - `src/gflow_cli/cli_image.py` / `src/gflow_cli/cli_video.py` — add `--project` option.
204
+ - `tests/test_cli_instructions.py` — unit tests for all subcommands.
205
+ - `tests/features/instructions.feature` — BDD feature definitions for subcommands.
206
+ - `tests/features/test_instructions_steps.py` — BDD step definitions.
207
+
208
+ **Subcommands:**
209
+ ```
210
+ gflow instructions add TITLE --text TEXT [--ref PATH]... [--character ID]... [--project ID]
211
+ gflow instructions list [--project ID] [--json]
212
+ gflow instructions enable TITLE [--project ID]
213
+ gflow instructions disable TITLE [--project ID]
214
+ gflow instructions rm TITLE [--project ID]
215
+ gflow instructions apply FILE [--project ID] # declarative full-sync from TOML/JSON
216
+ gflow instructions toggle-mode [--on/--off] [--project ID] # toggle project-level Agentic mode
217
+ ```
218
+
219
+ **Steps:**
220
+ - [ ] Implement `get_agent_info(project_id)` client method returning a typed DTO (`ProjectBrief`).
221
+ - [ ] Implement `gflow instructions add` (upload refs → get media UUIDs → PATCH cards).
222
+ - [ ] Implement `gflow instructions list` with Rich table output and `--json` flag.
223
+ - [ ] Implement `gflow instructions enable` / `disable` (title match, case-insensitive, fail-fast).
224
+ - [ ] Implement `gflow instructions rm` (remove matching card, PATCH remaining).
225
+ - [ ] Implement `gflow instructions apply FILE` (declarative full-replace idempotent sync from TOML/JSON manifest).
226
+ - [ ] Implement `gflow instructions toggle-mode` (programmatic toggle of project-level Agentic mode).
227
+ - [ ] Add `--project proj-id` to `gflow image t2i` / `i2i` / `gflow video` commands.
228
+ - [ ] Gracefully handle classic UI projects in `gflow instructions` — fail-fast with clean HTTP error reporting.
229
+ - [ ] **UI Visual Consistency:** Ensure the driver's `configure_image_settings` clicks the `article_spark` button if the agent sidebar is closed, ensuring the browser Page visually reflects active cards.
230
+ - [ ] Ensure MCP schema symmetry: mirror all subcommands in MCP tool definitions (CI gate).
231
+ - [ ] Create `tests/features/instructions.feature` and verify CLI subcommands via BDD tests.
232
+ - [ ] All new commands covered by unit tests.
233
+ - [ ] Run `/gflow:check` — all gates green.
234
+
235
+ ---
236
+
237
+ ## Task 8 — Movie Manifest Integration (movie)
238
+
239
+ **What:** Integrate instruction card management into `gflow movie` so each scene can
240
+ declare its own instruction context declaratively in `movie.toml`.
241
+
242
+ **Files:**
243
+ - `src/gflow_cli/movie_manifest.py` — parse `[instructions]` and `[[scene.instructions]]` blocks.
244
+ - `src/gflow_cli/cli_movie.py` — inject `gflow instructions apply` step before each scene's generation.
245
+ - `docs/MOVIE.md` — document the `instructions` blocks in the manifest format.
246
+
247
+ **Steps:**
248
+ - [ ] Define `movie.toml` schema for global + per-scene instruction blocks:
249
+ ```toml
250
+ [instructions]
251
+ # Applied to all scenes unless overridden.
252
+ [[instructions.card]]
253
+ title = "Cinematic Lighting"
254
+ text = "Volumetric cinematic light from camera-left"
255
+ ref = "./refs/mood.jpg"
256
+ enabled = true
257
+
258
+ [[scene]]
259
+ prompt = "hero emerges from fog"
260
+ [scene.instructions]
261
+ disable = ["Cinematic Lighting"]
262
+ [[scene.instructions.card]]
263
+ title = "Fog Atmosphere"
264
+ text = "Dense volumetric fog, low contrast"
265
+ ```
266
+ - [ ] Implement manifest parser for the new blocks.
267
+ - [ ] Inject a pre-generation `PATCH agentInfo` call for each scene's instruction diff.
268
+ - [ ] Update `docs/MOVIE.md` with the new schema.
269
+ - [ ] BDD scenario: multi-scene movie with per-scene instruction override.
270
+
271
+ ---
272
+
273
+ ## Task 9 — E2E Verification (e2e)
274
+
275
+ **What:** Live integration test covering the full instructions lifecycle and a real
276
+ generation using the established context.
277
+
278
+ **Files:**
279
+ - `tests/e2e/test_live_agentic_instructions.py` — full create-patch-generate-teardown lifecycle.
280
+
281
+ **Steps:**
282
+ - [ ] Write `test_live_agentic_instructions.py`:
283
+ - Create a project.
284
+ - Add two instruction cards (one with a reference image).
285
+ - Enable one, disable the other.
286
+ - Generate one image (`gflow image t2i`).
287
+ - Assert generation succeeds and returns a valid `GeneratedImage`.
288
+ - Teardown: delete cards.
289
+ - [ ] Mark test `@pytest.mark.live` and `@pytest.mark.e2e`.
290
+ - [ ] Document run instructions in `docs/TESTING.md`.
291
+
292
+ ---
293
+
294
+ ## Task 10 — Re-assess and Optimize Developer Skills (skills audit)
295
+
296
+ **What:** Systematically review and update all agent skills to reflect the full
297
+ evolved architecture including the new instruction pipeline, `gflow instructions`
298
+ subcommand, and layered project context model.
299
+
300
+ **Files:**
301
+ - `skills/gflow-cli/SKILL.md` — primary update (Pipeline section added in Task 6).
302
+ - `skills/predict/SKILL.md`, `skills/scenario/SKILL.md`, `skills/plan/SKILL.md`,
303
+ `skills/status/SKILL.md`, `skills/pr-council-review/SKILL.md` — audit each.
304
+
305
+ **Steps:**
306
+ - [ ] Scan all skills and compare against current codebase: commands, transports, APIs, DTOs.
307
+ - [ ] Identify stale: legacy DOM transport descriptions, missing `gflow instructions`, old REST routes.
308
+ - [ ] Update each skill to correctly describe current components (SQLite ledger, daemon workers,
309
+ REST API, new `gflow instructions` subcommand, layered pipeline model).
310
+ - [ ] Verify all YAML frontmatter, internal links, and cross-references resolve correctly.
311
+ - [ ] Run `scripts/ci/check_doc_links.py` — merge gate.
312
+
313
+ ---
314
+
315
+ ## Definition of done
316
+
317
+ - [ ] All task steps checked off
318
+ - [ ] `/gflow:check` green (ruff / format / pyright / pytest ≥ 80% coverage)
319
+ - [ ] `CHANGELOG.md` `[Unreleased]` section updated
320
+ - [ ] `docs/INSTRUCTIONS.md` created and registered in `docs/INDEX.md`
321
+ - [ ] `skills/gflow-cli/SKILL.md` Pipeline section present
322
+ - [ ] `docs/USAGE.md` covers `gflow instructions` command surface
323
+ - [ ] `docs/MOVIE.md` documents `[instructions]` manifest blocks
324
+ - [ ] BDD feature files cover all scenarios (including CLI subcommands in `tests/features/instructions.feature`)
325
+ - [ ] MCP schema symmetry test passes (CI gate)
326
+ - [ ] Live spike findings documented in `spike-findings.md`
327
+ - [ ] Documented link check (`scripts/ci/check_doc_links.py`) passes without errors
328
+ - [ ] No `# TODO` in diff without a tracked issue link
329
+