gflow-cli 0.38.1__tar.gz → 0.40.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.
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/AGENTS.md +1 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/CHANGELOG.md +60 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/CLAUDE.md +1 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/PKG-INFO +1 -1
- gflow_cli-0.40.0/docs/ASSET_TAGGING_RECON.md +203 -0
- {gflow_cli-0.38.1/website → gflow_cli-0.40.0}/docs/CHARACTER.md +25 -14
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/DATA_LAYER.md +61 -2
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/INDEX.md +7 -2
- gflow_cli-0.40.0/docs/LIVE_VERIFICATION_v0.39.0.md +70 -0
- gflow_cli-0.40.0/docs/LIVE_VERIFICATION_v0.40.0.md +96 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/PROJECT_STATUS.md +22 -1
- gflow_cli-0.40.0/docs/REFERENCE_STRATEGIES.md +113 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/USAGE.md +12 -0
- gflow_cli-0.40.0/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +306 -0
- gflow_cli-0.40.0/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +202 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/pyproject.toml +1 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/ci/check_doc_links.py +2 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/_common.py +25 -6
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/ui_automation_video.py +1 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/chain.py +47 -2
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_data.py +39 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_image.py +84 -19
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_movie.py +29 -8
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_run.py +22 -10
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_video.py +71 -15
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/queries.py +111 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/recorder.py +201 -9
- gflow_cli-0.40.0/src/gflow_cli/data/redaction.py +89 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/image_batch.py +56 -3
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/mcp/tools.py +16 -2
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/observability.py +10 -2
- gflow_cli-0.40.0/src/gflow_cli/services/mentions.py +415 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/worker/daemon.py +74 -14
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_common.py +20 -0
- gflow_cli-0.40.0/tests/cli/test_cli_data_errors.py +84 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_image.py +3 -2
- gflow_cli-0.40.0/tests/cli/test_failure_funnel.py +154 -0
- gflow_cli-0.40.0/tests/data/test_failure_recording.py +392 -0
- gflow_cli-0.40.0/tests/e2e/test_asset_tagging_e2e.py +160 -0
- gflow_cli-0.40.0/tests/features/asset_tagging.feature +39 -0
- gflow_cli-0.40.0/tests/features/test_asset_tagging_steps.py +283 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_image_steps.py +1 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_locale_picker_include_steps.py +1 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_cli_parity.py +1 -0
- gflow_cli-0.40.0/tests/services/test_mentions_observability.py +92 -0
- gflow_cli-0.40.0/tests/services/test_mentions_parse.py +92 -0
- gflow_cli-0.40.0/tests/services/test_mentions_resolve.py +242 -0
- gflow_cli-0.40.0/tests/services/test_resolve_and_apply.py +100 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_chain.py +36 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_data_queries.py +45 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/worker/test_daemon.py +38 -2
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/uv.lock +1 -1
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/DATA_LAYER.md +57 -2
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/USAGE.md +14 -2
- gflow_cli-0.38.1/src/gflow_cli/data/redaction.py +0 -48
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.env.template +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.gitattributes +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.gitignore +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/.secrets.baseline +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/GEMINI.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/LICENSE +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/RELEASE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/ROADMAP.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docker-compose.yml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/MCP.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/index.html +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/llms.txt +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/smoke_real_chrome_image.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/README.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/sonar-project.properties +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/client.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_config.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_errors_403.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_manifest.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_media.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0/website}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/index.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/quickstart.md +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.38.1 → gflow_cli-0.40.0}/website/mkdocs.yml +0 -0
|
@@ -116,6 +116,7 @@ The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each ski
|
|
|
116
116
|
|
|
117
117
|
- **Architecture & target shape** → [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
118
118
|
- **Mandates & routing rules** → [docs/AGENT_GUIDE.md](docs/AGENT_GUIDE.md)
|
|
119
|
+
- **Referencing assets** (`@Name` mention vs `--reference-entity` vs `--ref`) → [docs/REFERENCE_STRATEGIES.md](docs/REFERENCE_STRATEGIES.md)
|
|
119
120
|
- **Full docs index** → [docs/INDEX.md](docs/INDEX.md)
|
|
120
121
|
- **Known issues** (read before touching auth / reCAPTCHA) → [KNOWN_ISSUES.md](KNOWN_ISSUES.md)
|
|
121
122
|
- **Current task** → `/gflow:status` · **Create a feature plan** → `/gflow:plan <feature>` · **Full roadmap** → [PLAN.md](PLAN.md)
|
|
@@ -7,6 +7,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.40.0] — 2026-07-19
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Prompt `@`-mention resolution for asset tagging** ([#344]): `@Name` in a
|
|
15
|
+
t2i/i2i/video prompt resolves to a staged, taggable character entity
|
|
16
|
+
(`services/mentions.py`), across the `image`/`video` CLI paths, the async
|
|
17
|
+
worker, and MCP tools. Media-asset (non-character) `@`-mentions also work,
|
|
18
|
+
but on the **image path only** — video-path media mentions are Phase 3. A
|
|
19
|
+
bare character with no reference images is rejected early with a clear
|
|
20
|
+
error instead of failing deep in the UI attach. De-tagged prompts are
|
|
21
|
+
persisted to the catalog. See
|
|
22
|
+
[`docs/REFERENCE_STRATEGIES.md`](docs/REFERENCE_STRATEGIES.md) for
|
|
23
|
+
`@`-mention vs `--reference-entity` vs `--ref`, and
|
|
24
|
+
[`docs/LIVE_VERIFICATION_v0.40.0.md`](docs/LIVE_VERIFICATION_v0.40.0.md)
|
|
25
|
+
for the live e2e evidence.
|
|
26
|
+
|
|
27
|
+
[#344]: https://github.com/ffroliva/gflow-cli/issues/344
|
|
28
|
+
|
|
29
|
+
## [0.39.0] — 2026-07-19
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **Failed generations are now persisted to the local catalog** ([#341]):
|
|
34
|
+
every paid-generation path (`video t2v/i2v/r2v`, `video chain`,
|
|
35
|
+
`image t2i/i2i`, multi-prompt t2i, `gflow run`, `image batch`, `movie run`,
|
|
36
|
+
and the async worker) records a terminal `status="failed"` operation row —
|
|
37
|
+
with a stable `error_type` derived from the exception's RFC 9457
|
|
38
|
+
`problem_type` (`waf-rejection`, `content-policy`, `auth-expired`, ...) and
|
|
39
|
+
a redacted `error_detail` — before the error propagates. WAF-403 block
|
|
40
|
+
onset, duration, and recovery windows are now measurable instead of
|
|
41
|
+
reconstructed from memory.
|
|
42
|
+
- New `gflow data list errors [--profile] [--limit] [--offset] [--json]`
|
|
43
|
+
subcommand: browse failed operations newest-first (Rich table on a TTY,
|
|
44
|
+
JSONL otherwise).
|
|
45
|
+
- Videos whose poll completes with a Flow-reported failure
|
|
46
|
+
(`succeeded=false`, e.g. `PUBLIC_ERROR_UNSAFE_GENERATION`) are now recorded
|
|
47
|
+
as `failed` with `error_type=generation-failed` — previously they were
|
|
48
|
+
recorded as `succeeded` (all paths: CLI, chain, movie, worker).
|
|
49
|
+
|
|
50
|
+
### Security
|
|
51
|
+
|
|
52
|
+
- `error_detail` values are scrubbed before persistence
|
|
53
|
+
(`Bearer`/`SAPISIDHASH` tokens, auth-cookie pairs, signed URLs; 500-char
|
|
54
|
+
cap) and non-`GFlowError` messages are stored only as SHA-256 hashes.
|
|
55
|
+
Prompts on failed rows honor `GFLOW_CLI_HISTORY_PROMPTS`; note `store` mode
|
|
56
|
+
therefore also stores prompts of content-policy-rejected generations.
|
|
57
|
+
- The experimental REST transports (`bearer`, `sapisidhash`,
|
|
58
|
+
`evaluate_fetch`) now redact response bodies BEFORE truncating them into
|
|
59
|
+
exception messages, closing a partial-secret leak into logs and (new) the
|
|
60
|
+
catalog DB.
|
|
61
|
+
- The worker queue's `generation_queue.error_json` now applies the same
|
|
62
|
+
redaction: `GFlowError` details are scrubbed and non-`GFlowError` messages
|
|
63
|
+
are stored as SHA-256 hashes instead of raw text.
|
|
64
|
+
|
|
65
|
+
[#341]: https://github.com/ffroliva/gflow-cli/issues/341
|
|
66
|
+
|
|
10
67
|
## [0.38.1] — 2026-07-17
|
|
11
68
|
|
|
12
69
|
### Fixed
|
|
@@ -2053,7 +2110,9 @@ shell-script template that branches on these codes.
|
|
|
2053
2110
|
|
|
2054
2111
|
First skeleton. Not functional end-to-end yet.
|
|
2055
2112
|
|
|
2056
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2113
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...HEAD
|
|
2114
|
+
[0.40.0]: https://github.com/ffroliva/gflow-cli/compare/v0.39.0...v0.40.0
|
|
2115
|
+
[0.39.0]: https://github.com/ffroliva/gflow-cli/compare/v0.38.1...v0.39.0
|
|
2057
2116
|
[0.38.1]: https://github.com/ffroliva/gflow-cli/compare/v0.38.0...v0.38.1
|
|
2058
2117
|
[0.38.0]: https://github.com/ffroliva/gflow-cli/compare/v0.37.0...v0.38.0
|
|
2059
2118
|
[0.37.0]: https://github.com/ffroliva/gflow-cli/compare/v0.36.0...v0.37.0
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- Current task / where we left off → `/gflow:status`
|
|
15
15
|
- Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
|
|
16
16
|
- Touching auth or reCAPTCHA → `/gflow:known-issues`
|
|
17
|
+
- Referencing a saved asset (`@Name` mention vs `--ref`/`--reference-entity`) → [docs/REFERENCE_STRATEGIES.md](docs/REFERENCE_STRATEGIES.md)
|
|
17
18
|
- Cutting a release → `/gflow:release`
|
|
18
19
|
- Before any commit → `/gflow:check`
|
|
19
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.40.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
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Asset tagging (`@` mentions) — research & integration design
|
|
2
|
+
|
|
3
|
+
> **Status:** VERIFIED-with-capture · **Branch:** `claude/google-flow-asset-tagging-r3aqjb`
|
|
4
|
+
> **Convention:** this is the integration recon doc for the `@`-mention surface, following the
|
|
5
|
+
> `<FEATURE>_RECON.md` pattern ([INDEX § recon docs](INDEX.md)). Wire-payload sections are
|
|
6
|
+
> VERIFIED as of 2026-07-18.
|
|
7
|
+
> **Related:** [CHARACTER.md](CHARACTER.md) (entity model, `referenceEntities` wire), [MOVIE.md](MOVIE.md)
|
|
8
|
+
> (entity-attach mechanism), [AGENT_UI_RECON.md](AGENT_UI_RECON.md) (agentic cohort), [INSTRUCTIONS.md](INSTRUCTIONS.md).
|
|
9
|
+
|
|
10
|
+
## 1. What the feature is (product research)
|
|
11
|
+
|
|
12
|
+
In Flow's prompt box, typing **`@`** opens a dropdown of the project's assets. Selecting one inserts a
|
|
13
|
+
mention chip into the prompt text; the model then anchors on that specific asset instead of inventing a
|
|
14
|
+
new one. Three asset classes are taggable:
|
|
15
|
+
|
|
16
|
+
| Tag | Asset class | gflow equivalent today |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `@CharacterName` | Saved project **Character** (entity) | `gflow character` entities — `referenceEntities` on the wire (VERIFIED, [CHARACTER § 6.6](CHARACTER.md#66-videobatchasyncgeneratevideoreferenceimages-reuse)) |
|
|
19
|
+
| `@me` | Personal **Avatar / likeness** (face + voice scan, I/O 2026) | `referenceLikenesses` — **region-gated**; `GET /v1/flow/likeness:checkEligibility` returns `REGION` for our accounts ([CHARACTER § 1.1](CHARACTER.md#11-how-it-works-plain-language)) |
|
|
20
|
+
| `@AssetName` | Uploaded/generated **ingredient** (image, object, style ref) | `--ref` on `video r2v` (local path only, upload-every-time — #314) and `image i2i` (path **or** in-project media UUID, zero re-upload) — `referenceImages[{mediaId, imageUsageType:IMAGE_USAGE_TYPE_ASSET}]` (VERIFIED wire shape) |
|
|
21
|
+
|
|
22
|
+
Product-side facts from public sources (Google Flow Help, blog.google "5 tips for Flow", I/O 2026
|
|
23
|
+
coverage):
|
|
24
|
+
|
|
25
|
+
- The dropdown **searches uploaded assets by name** — it is a name→asset resolver over the project's
|
|
26
|
+
asset library, the same library the "Video Ingredients" mode and SceneBuilder draw from.
|
|
27
|
+
- `@me` requires the one-time avatar scan (read numbers aloud + head turn); the likeness is stored on the
|
|
28
|
+
Google Account and referenced across Gemini/Flow. Regional gating applies (matches our
|
|
29
|
+
`likeness:checkEligibility` finding).
|
|
30
|
+
- Community guidance: consistency holds best when the reference image has a **clean, uncluttered
|
|
31
|
+
background**; drift (clothing/face shifts) still occurs under heavy motion — tagging anchors identity,
|
|
32
|
+
it does not eliminate drift.
|
|
33
|
+
|
|
34
|
+
Sources: [Google Flow Help — Create videos](https://support.google.com/flow/answer/16353334?hl=en) ·
|
|
35
|
+
[blog.google — 5 tips for Flow](https://blog.google/technology/ai/flow-video-tips/) ·
|
|
36
|
+
[I/O 2026 avatar coverage](https://nokiapoweruser.com/google-io-gemini-avatar-web-flow-android-update/) ·
|
|
37
|
+
[vidau.ai Flow 2026 guide](https://www.vidau.ai/google-flow-ai-update-2026-complete-guide/).
|
|
38
|
+
(Several guides are WAF-walled to bots; facts above were cross-checked across at least two sources.)
|
|
39
|
+
|
|
40
|
+
## 2. What gflow already owns (VERIFIED against shipped code)
|
|
41
|
+
|
|
42
|
+
The `@` feature is **not a new wire capability** — it is a new *UI affordance* over reference mechanisms
|
|
43
|
+
gflow has already reverse-engineered and partially shipped:
|
|
44
|
+
|
|
45
|
+
1. **Entity references ride today.** `gflow movie run` attaches a CHARACTER entity by opening the
|
|
46
|
+
resource picker, right-clicking the tile addressed as `data-tile-id="fe_id_<entityId>"`, and choosing
|
|
47
|
+
the include-in-prompt action (`PICKER_CONTEXT_INCLUDE`, locale-free icon tier — `ui_automation_video.py`).
|
|
48
|
+
The submit then carries `referenceEntities:[{entityId}]`, echoed back in
|
|
49
|
+
`workflows[].videoData.videoGenerationEntityInputs[].entityId`, asserted by `_assert_entities_attached`
|
|
50
|
+
([MOVIE § Character consistency](MOVIE.md#character-consistency-how-the-entity-rides)).
|
|
51
|
+
2. **Image references ride today — with one path-specific gap.** `gflow video r2v --ref` stages
|
|
52
|
+
`referenceImages` from **local paths only** (`click.Path(exists=True)`; upload-every-time by design —
|
|
53
|
+
#314). UUID-addressed zero-re-upload selection of existing assets is live-verified on
|
|
54
|
+
`image i2i --ref` (v0.26.0) and `video i2v` frame refs (shipped v0.32.0, live-verified v0.33.0 —
|
|
55
|
+
#287) — but an **r2v** UUID-selection
|
|
56
|
+
primitive does not exist yet, so media mentions on the *video* path are net-new transport work.
|
|
57
|
+
3. **Image-path character reuse already ships.** `gflow image t2i/i2i --reference-entity` puts
|
|
58
|
+
`referenceEntities:[{entityId}]` on the image submit — wire shape captured live 2026-06-08
|
|
59
|
+
(`api/image.py`) and asserted by `_assert_image_entities_attached`. (CHARACTER.md §14's
|
|
60
|
+
"image-path `referenceEntities` uncaptured" bullet was stale; corrected in this PR.) What's missing
|
|
61
|
+
is only the name-based `@` syntax over it.
|
|
62
|
+
4. **Name→asset resolution exists.** `flow.projectInitialData` returns entities with `displayName`
|
|
63
|
+
([CHARACTER § 6.5](CHARACTER.md#65-flowprojectinitialdata-listshow)); the local catalog records
|
|
64
|
+
generated-image `display_name` (v0.26.0). This is exactly the lookup the `@` dropdown performs.
|
|
65
|
+
5. **The prompt box is a Slate editor.** `_send_prompt` targets
|
|
66
|
+
`div[role="textbox"][data-slate-editor="true"]` and uses `keyboard.insert_text` (one `beforeinput`
|
|
67
|
+
event, Slate-native). A mention chip is a **non-text Slate node** — `insert_text` alone can never
|
|
68
|
+
create one.
|
|
69
|
+
6. **Diagnostics are pre-staged.** The image-submit capture already probes for `referenceEntit` in POST
|
|
70
|
+
bodies (`mentions_reference_entities`, `ui_automation.py`) — built for the #170 submit backstop and
|
|
71
|
+
directly reusable here.
|
|
72
|
+
|
|
73
|
+
**Gaps the `@` feature would close:**
|
|
74
|
+
|
|
75
|
+
- `gflow video --character` (Phase 3 backlog, [CHARACTER § 14](CHARACTER.md#14-backlog--not-yet-implemented)) — single-command character reuse outside the movie pipeline.
|
|
76
|
+
- Name-based reference syntax everywhere — the image path already has id-based `--reference-entity`;
|
|
77
|
+
nothing accepts an asset *name*.
|
|
78
|
+
- Inline, per-prompt asset naming (`"@Zoro hands @Mika the sword"`) — today references are flag-level
|
|
79
|
+
(whole-generation), not positional in the prompt text.
|
|
80
|
+
- Media mentions on the **video** path — requires the missing r2v UUID-selection primitive (item 2).
|
|
81
|
+
|
|
82
|
+
## 3. Wire serialization verdict (VERIFIED — H1)
|
|
83
|
+
|
|
84
|
+
Spike results confirmed:
|
|
85
|
+
|
|
86
|
+
- **H1 — flags-equivalent (VERIFIED):** the chip's display text lands as plain text inside
|
|
87
|
+
`structuredPrompt.parts[].text`, and the referenced asset is added to `referenceEntities` /
|
|
88
|
+
`referenceImages` exactly as the picker path does. The chip is UI sugar; position in the prompt is not
|
|
89
|
+
semantically encoded on the wire. Thus, gflow can synthesize identical payloads with the
|
|
90
|
+
**already-live-verified attach primitives** (Option B) and does not need to drive the dropdown.
|
|
91
|
+
- **H2 — positional parts (REJECTED):** `structuredPrompt.parts` does not interleave mention parts; it is plain text.
|
|
92
|
+
- `@me` maps to `referenceLikenesses` — **held** as region-ineligible.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
Agent-mode nuance: in the **agentic cohort** ([AGENT_UI_RECON.md](AGENT_UI_RECON.md)) the prompt feeds a
|
|
96
|
+
reasoning agent, which may resolve `@Name` text itself even without a chip. The spike should test both
|
|
97
|
+
cohorts; classic is the contract-bearing path.
|
|
98
|
+
|
|
99
|
+
## 4. Integration options
|
|
100
|
+
|
|
101
|
+
> Option letters below are local to this doc — they do **not** correspond to CHARACTER.md § 11's
|
|
102
|
+
> "Option A/B" (which named direct-REST vs UI-driven *generation* transports).
|
|
103
|
+
|
|
104
|
+
| | Option A — drive the dropdown | Option B — CLI-side mention parsing → existing attach primitives | Option C — direct REST |
|
|
105
|
+
|---|---|---|---|
|
|
106
|
+
| Mechanism | Type prompt up to `@`, pause, let Flow's dropdown open, select entry (structural selectors), continue typing | Parse `@Name` tokens CLI-side; resolve names via `projectInitialData` + media catalog; attach via shipped picker/UUID primitives; submit prompt with names as plain text | Build `referenceEntities`/mention parts ourselves and POST |
|
|
107
|
+
| Fidelity | Exact — Flow's JS builds the chip | Equivalent **iff H1**; loses positional semantics if H2 | n/a |
|
|
108
|
+
| New selector surface | High (dropdown container, search behavior, per-type entries, both cohorts, all locales) | **Zero** — reuses `fe_id_<entityId>` tiles + `PICKER_CONTEXT_INCLUDE` + UUID picker, all live-verified | n/a |
|
|
109
|
+
| Risk | New drift surface; dropdown is keystroke-timing sensitive (Slate `insert_text` won't trigger it — needs real per-char typing around `@`) | Name-resolution ambiguity (duplicate display names) — solvable with exit-11 disambiguation, same as `character show --name` | **DEAD** — generation POSTs are reCAPTCHA-walled (403, spike-proven) |
|
|
110
|
+
|
|
111
|
+
**Recommendation: Option B first, gated on a capture spike that decides H1 vs H2.** If H1 holds
|
|
112
|
+
(likely — the picker path already produces accepted `referenceEntities` submits), gflow gets `@` mentions
|
|
113
|
+
with no new UI automation at all: the feature becomes a *prompt-syntax resolver* in front of
|
|
114
|
+
live-verified machinery. Option A is the fallback only if H2 is proven **and** positional semantics
|
|
115
|
+
demonstrably change output.
|
|
116
|
+
|
|
117
|
+
## 5. Proposed CLI surface (Phase 1, post-spike)
|
|
118
|
+
|
|
119
|
+
Inline mentions in the prompt on generation commands, mirroring Flow's own syntax:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
gflow video t2v "@CaptainZoro walking through a rain-soaked neon city, tracking shot" --project <id>
|
|
123
|
+
gflow video r2v "@Zoro hands @Mika the sword" --project <id> # multi-ref (cap-checked)
|
|
124
|
+
gflow image i2i "@logo on a black tee, studio light" --project <id>
|
|
125
|
+
gflow movie run film.toml # scene prompts may carry @mentions
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Rules:
|
|
129
|
+
|
|
130
|
+
- **Grammar:** `@` + longest match against project asset names (chip names may contain spaces —
|
|
131
|
+
resolver tries greedy longest-match, then falls back to single-token). `@@` escapes a literal `@`;
|
|
132
|
+
email-like tokens (`a@b.com`) are never treated as mentions (require `@` at token start).
|
|
133
|
+
- **Resolution order:** CHARACTER entities (`projectInitialData.displayName`, case-insensitive) →
|
|
134
|
+
project media assets by `display_name` (catalog first, live listing fallback). Unknown mention →
|
|
135
|
+
exit 11 `ConfigurationError` listing available names; ambiguous → exit 11 with disambiguation
|
|
136
|
+
(same contract as `character show --name`).
|
|
137
|
+
- **`@me`:** check `likeness:checkEligibility` and fail with a clear "avatar likeness is region-gated /
|
|
138
|
+
not supported yet" hint (exit 11). Never silently drop.
|
|
139
|
+
- **Semantics:** each resolved mention stages the corresponding reference (entity-attach or UUID
|
|
140
|
+
`--ref`), deduped against explicitly passed `--ref` / `--reference-entity` flags; model reference caps
|
|
141
|
+
(`reference_cap_for`) enforced pre-submit. Prompt text keeps the name (minus `@`) so the model sees the
|
|
142
|
+
sentence Flow's chip would render.
|
|
143
|
+
- **Provenance:** record resolved mentions in `metadata_json` as `{name, kind, id}` (ids always;
|
|
144
|
+
names hashed under `GFLOW_CLI_HISTORY_PROMPTS=redacted` — see the spec § 6); structlog event per
|
|
145
|
+
resolution (`mention_resolved`, `mention_unresolved`).
|
|
146
|
+
- **MCP & CLI symmetry:** mention parsing lives in a shared service (`services/`), so the MCP generation
|
|
147
|
+
tools get it for free; parity enforced by `tests/mcp/test_cli_parity.py` (AGENTS.md § MCP & CLI Schema
|
|
148
|
+
Symmetry).
|
|
149
|
+
- Optional explicit form for scripts that don't want magic prompt parsing: `--tag NAME` (repeatable),
|
|
150
|
+
semantically identical to an `@NAME` mention — **Phase 3** (see § 8); not part of the first delivery.
|
|
151
|
+
|
|
152
|
+
## 6. Spike plan (pre-implementation, ~1–2 Veo/Imagen credits)
|
|
153
|
+
|
|
154
|
+
`scripts/dev/spike_mention_capture.py`, run live on denon82 (same pattern as
|
|
155
|
+
`spike_movie_attach_payload.py`):
|
|
156
|
+
|
|
157
|
+
1. **T-1 (0 credits):** in a crowded project, focus the prompt box, real-keystroke `@` (per-char
|
|
158
|
+
`keyboard.type`, not `insert_text`), dump the dropdown DOM (container role, tile addressing — is it
|
|
159
|
+
`fe_id_<id>` again?, search filtering, asset-type sections). *(Agentic-cohort repeat: optional —
|
|
160
|
+
Option-A prep only; run it only if H2 is proven.)*
|
|
161
|
+
2. **T-2 (0 credits, optional):** select a character mention, then dump the Slate document (chip node
|
|
162
|
+
shape) — `document.querySelector('[data-slate-editor]')` innerHTML + Slate data attrs. *Only needed
|
|
163
|
+
if the T-3/T-4 POST captures are ambiguous, or if Option A is ever pursued.*
|
|
164
|
+
3. **T-3 (1 credit, image):** submit with one character mention; capture the POST body
|
|
165
|
+
(`mentions_reference_entities` probe + full `requests[0]` keys) and diff it against a
|
|
166
|
+
`--reference-entity` submit body (already-captured shape, `api/image.py`). **Decides H1 vs H2** for
|
|
167
|
+
the image path: an identical body = H1.
|
|
168
|
+
4. **T-4 (1 credit, video, optional if T-3 is conclusive):** same for `t2v`; diff against the known
|
|
169
|
+
picker-attach body from the movie captures.
|
|
170
|
+
5. **T-5 (0 credits):** mention an *uploaded ingredient* (not a character); capture whether it lands in
|
|
171
|
+
`referenceImages` and with which `imageUsageType`.
|
|
172
|
+
|
|
173
|
+
Exit criteria: **one of three verdicts recorded here** — H1, H2, or **INCONCLUSIVE** (no chip could be
|
|
174
|
+
produced under automation, or captures ambiguous, or mixed per-path results — record per-path verdicts
|
|
175
|
+
separately in that case). INCONCLUSIVE or mixed is treated like H2 for gating: STOP and re-run
|
|
176
|
+
`/gflow:predict` with the evidence before implementation. Dropdown selector table (locale-free tiers)
|
|
177
|
+
appended if — and only if — Option A is ever needed.
|
|
178
|
+
|
|
179
|
+
## 7. Risks & open questions
|
|
180
|
+
|
|
181
|
+
- **H2 positional parts** would force dropdown automation (Option A) — new selector surface on a
|
|
182
|
+
keystroke-sensitive widget, both cohorts, plus locale variance. Mitigated by spike-first gating.
|
|
183
|
+
- **Name collisions / renames:** display names are not unique; Flow's dropdown disambiguates visually,
|
|
184
|
+
a CLI cannot — exit-11 disambiguation (by id) is mandatory, and manifests should prefer ids.
|
|
185
|
+
- **Agentic cohort drift:** the agentic composer may render mentions differently or resolve them
|
|
186
|
+
server-side; the #174 include-lands-but-never-submits A/B applies to any staged-reference path —
|
|
187
|
+
reuse `ENTITY_ATTACH_DRIFT_HINT` backstops.
|
|
188
|
+
- **`@me`:** blocked on likeness eligibility (REGION) — ship detection + honest error only.
|
|
189
|
+
- **Prompt-expansion interaction:** `--tool creative-director` rewrites prompts — mentions must be
|
|
190
|
+
extracted **before** expansion and re-validated after (the expander must not invent or destroy tags);
|
|
191
|
+
simplest rule: resolve mentions first, pass the de-tagged text to the tool.
|
|
192
|
+
- **Movie style blocks / instructions cards:** `[style]` composition appends text — ensure composition
|
|
193
|
+
never corrupts `@` tokens (escaping tests).
|
|
194
|
+
|
|
195
|
+
## 8. Phasing
|
|
196
|
+
|
|
197
|
+
| Phase | Deliverable | Gate |
|
|
198
|
+
|---|---|---|
|
|
199
|
+
| 0 | This recon doc | — |
|
|
200
|
+
| 1 | Capture spike (§6) → H1/H2 verdict recorded here | `/gflow:predict` on the chosen option |
|
|
201
|
+
| 2 | Mention resolver service + inline mentions — characters on `video t2v/r2v` (entity attach) and characters + media on `image t2i/i2i` (`--reference-entity` / UUID `--ref` paths) — + MCP parity + docs/tests | `/gflow:plan asset-tagging`, TDD, live e2e per verification-ledger norms |
|
|
202
|
+
| 3 | `movie` manifest mentions; `--tag` explicit form; **video-path media mentions** (requires the new r2v UUID-selection primitive); close `video --character` backlog via the same resolver | live e2e |
|
|
203
|
+
| 4 (held) | `@me` likeness — revisit when `checkEligibility` stops returning `REGION` | — |
|
|
@@ -8,9 +8,11 @@
|
|
|
8
8
|
> built **greenfield off `develop`, NOT stacked on #123** (that branch is CONFLICTING and likeness-specific;
|
|
9
9
|
> see [Design decisions](#11-design-decisions-post-predict)).
|
|
10
10
|
|
|
11
|
-
> **Shipped scope:** `gflow character create` + `list` + `show` + `voices` + `rm`.
|
|
12
|
-
> `
|
|
13
|
-
>
|
|
11
|
+
> **Shipped scope:** `gflow character create` + `list` + `show` + `voices` + `rm`. Name-based reuse via
|
|
12
|
+
> `@Name` prompt mentions is **shipped** (v0.40.0, [#344](https://github.com/ffroliva/gflow-cli/issues/344))
|
|
13
|
+
> for both `image` and `video` paths — see [REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md). An explicit
|
|
14
|
+
> `--character <id>` **flag** on `gflow video` (a separate, repeatable-ref delivery mechanism) remains
|
|
15
|
+
> **not yet implemented** — see [Backlog](#14-backlog--not-yet-implemented).
|
|
14
16
|
|
|
15
17
|
> **Status (2026-06-02, LIVE-VERIFIED):** the create saga + character-editor UI generation are **shipped**
|
|
16
18
|
> and verified end-to-end on denon82 (face + front/side/back triptych body, both reference slots bound,
|
|
@@ -259,9 +261,11 @@ both normalize to the canonical `Charon`) and sets `audioReferences[].presetVoic
|
|
|
259
261
|
|
|
260
262
|
The `create` / `list` / `show` / `voices` commands below are **shipped and
|
|
261
263
|
live-verified in v0.12.0** (the user-facing reference lives in
|
|
262
|
-
[USAGE § `gflow character`](USAGE.md#gflow-character)).
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
[USAGE § `gflow character`](USAGE.md#gflow-character)). Name-based reuse via
|
|
265
|
+
`@Name` prompt mentions is **shipped** (v0.40.0, #344) on both the image and
|
|
266
|
+
video paths. An explicit `--character <id>` **flag** on `gflow video`
|
|
267
|
+
remains **backlog** (row marked *not yet implemented*). `gflow character rm`
|
|
268
|
+
is **shipped** (see the table below).
|
|
265
269
|
|
|
266
270
|
| Command | Maps to |
|
|
267
271
|
|---|---|
|
|
@@ -269,9 +273,10 @@ yet implemented*). `gflow character rm` is **shipped** (see the table below).
|
|
|
269
273
|
| `gflow character list --project <id> [--json]` *(SHIPPED v0.12.0)* | projectInitialData → entities[CHARACTER] |
|
|
270
274
|
| `gflow character show --project <id> (--id <entityId> \| --name <displayName>) [--json]` *(SHIPPED v0.12.0)* | projectInitialData (single); name collision → exit 11 with disambiguation hint |
|
|
271
275
|
| `gflow character voices [--json]` *(SHIPPED v0.12.0)* | list the 29 preset voices (name / description / sample-url); language-agnostic discovery, mirrors `gflow models --json` |
|
|
272
|
-
| `gflow video … --character <id>` *(repeatable → multi-ref)* | **not yet implemented** (Phase 3) — `referenceEntities` on `video:batchAsyncGenerateVideoReferenceImages` |
|
|
276
|
+
| `gflow video … --character <id>` *(repeatable → multi-ref, explicit flag)* | **not yet implemented** (Phase 3) — `referenceEntities` on `video:batchAsyncGenerateVideoReferenceImages` |
|
|
273
277
|
| `gflow character rm` (`--id`/`--name`) | **Shipped v0.13.0 (#150)** — `POST flow:batchDeleteAssets` (Bearer; FREE — no reCAPTCHA/credit) |
|
|
274
|
-
| `gflow image … --character <id>` |
|
|
278
|
+
| `gflow image … --character <id>` *(explicit flag)* | id-based reuse **shipped** as `gflow image t2i/i2i --reference-entity <id>` (wire captured 2026-06-08, `api/image.py`) |
|
|
279
|
+
| `@Name` in a t2i/i2i/video prompt | name-based mention resolution **shipped v0.40.0 (#344)** — resolves to the staged character entity, works on both image and video paths; see [REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md) |
|
|
275
280
|
|
|
276
281
|
All commands take **`--project <id>` (required)** — every endpoint (`createEntity`, `projectInitialData`,
|
|
277
282
|
reuse) is project-scoped; mirrors `gflow scene` / `gflow data` ergonomics. Use `--id`/`--name` flags, never a
|
|
@@ -305,7 +310,8 @@ never hard-code wire names in user-facing help — see [[cli-model-aliases-verif
|
|
|
305
310
|
## 10. Open items
|
|
306
311
|
|
|
307
312
|
See [§14 Backlog — not yet implemented](#14-backlog--not-yet-implemented) for the consolidated list. In
|
|
308
|
-
short: `gflow video
|
|
313
|
+
short: an explicit `--character <id>` flag on `gflow video` reuse (Phase 3; `@Name` prompt mentions
|
|
314
|
+
already ship this on both image and video, see #344), live voice
|
|
309
315
|
listing + `presetVoiceId` wire-case confirmation, custom-voice creation, `nanopro` picker live confirmation,
|
|
310
316
|
and extra body angles. The optional creation-agent (`flowCreationAgent/sessions`,
|
|
311
317
|
`flow.generateCharacterPrompt` archetypes) is not required for the scripted path; consider an `--archetype`
|
|
@@ -490,14 +496,19 @@ The following are explicitly **out of the shipped scope** and tracked for future
|
|
|
490
496
|
- **Model-picker live confirmation.** `--model nanopro` is wired **best-effort / non-fatal** (a picker miss
|
|
491
497
|
warns and continues rather than failing); an explicit live run is needed to confirm `nanopro` is actually
|
|
492
498
|
selected in the character editor.
|
|
493
|
-
- **`gflow video --character
|
|
494
|
-
|
|
495
|
-
(
|
|
499
|
+
- **`gflow video --character <id>` (explicit flag, Phase 3).** Reuse a character in a video generation via
|
|
500
|
+
an explicit repeatable `--character <id>` flag, as a `referenceEntities` alternative to `@Name` prompt
|
|
501
|
+
mentions (which already work on the video path, shipped v0.40.0/#344). Wire protocol is captured (§5,
|
|
502
|
+
§6.6) but the flag-based command is **not yet built**.
|
|
496
503
|
- **Extra body angles beyond the built-in triptych.** The shipped body slot generates a single front/side/back
|
|
497
504
|
triptych. Generating additional angles/poses (e.g. re-feeding the front view as a reference seed for a new
|
|
498
505
|
slot) is a future enhancement.
|
|
499
|
-
-
|
|
500
|
-
|
|
506
|
+
- ~~**`gflow image --character` (name-based).**~~ **Shipped v0.40.0 (#344)** as `@Name` prompt mentions
|
|
507
|
+
(`services/mentions.py`), on both image and video paths for character references. The image-path wire
|
|
508
|
+
shape (`gflow image t2i/i2i --reference-entity <id>`) shipped earlier (live capture 2026-06-08,
|
|
509
|
+
`api/image.py`; asserted by `_assert_image_entities_attached`). See
|
|
510
|
+
[REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md) for the decision guide across all three mechanisms.
|
|
511
|
+
(`gflow character rm` is now shipped, #150.)
|
|
501
512
|
- **Set the Flow editor title field** so the editor isn't "Untitled Character" (see [§13.1 Known issues](#131-known-issues)).
|
|
502
513
|
Investigate either the UI title box (with a Ctrl+A merge-bug workaround) or finding the dedicated title
|
|
503
514
|
field/endpoint that the editor widget reads from, distinct from `entityInfo.displayName`.
|
|
@@ -133,6 +133,39 @@ For T2V the sequence is split: `record_started_video(...)` fires the moment the
|
|
|
133
133
|
|
|
134
134
|
For batches, each row is recorded individually in a per-row `try/except DataStoreError`, so one row's persistence failure does not stop the rest of the batch.
|
|
135
135
|
|
|
136
|
+
### Failure recording (#341, v0.39.0+)
|
|
137
|
+
|
|
138
|
+
Failed generations are first-class catalog citizens: every paid-generation
|
|
139
|
+
orchestrator records a terminal `status="failed"` operation row before
|
|
140
|
+
re-raising the error. The funnel covers `video t2v/i2v/r2v`, `video chain`
|
|
141
|
+
(per-link, via the `on_link_failed` hook), `image t2i/i2i`, multi-prompt
|
|
142
|
+
t2i / `gflow run` / `image batch` manifest rows, `movie run` scenes, and the
|
|
143
|
+
async worker (which mirrors its `generation_queue.error_json` failure into
|
|
144
|
+
`operations` — the operations table owns terminal truth).
|
|
145
|
+
|
|
146
|
+
- `error_type` is the last segment of the exception's RFC 9457 `problem_type`
|
|
147
|
+
URI (`waf-rejection`, `content-policy`, `auth-expired`,
|
|
148
|
+
`transport-timeout`, ...) — the taxonomy is declared per `GFlowError`
|
|
149
|
+
subclass, never hand-mapped. Non-`GFlowError` exceptions store the class
|
|
150
|
+
name, with `error_detail` reduced to a SHA-256 hash of the message (never
|
|
151
|
+
the text — it may carry tokens).
|
|
152
|
+
- Video failures UPDATE every `on_started` STARTED row to `failed` (a
|
|
153
|
+
`count>1` request fires the callback per output — no sibling row is
|
|
154
|
+
stranded); failures before `on_started`, and all image failures, INSERT a
|
|
155
|
+
fresh row with full request metadata.
|
|
156
|
+
- A poll that COMPLETES with a Flow-reported failure (`succeeded=false`) is
|
|
157
|
+
recorded as `failed` with `error_type=generation-failed` and the
|
|
158
|
+
`failure_reasons` as detail — not as a success.
|
|
159
|
+
- The write itself is best-effort: `record_failed_operation_safe` wraps it in
|
|
160
|
+
a broad warn-only guard (`failure_record_skipped` structlog event) so a
|
|
161
|
+
data-layer fault can never mask the generation error or change the exit code.
|
|
162
|
+
- The character-create saga deliberately keeps its STARTED rows for resume —
|
|
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).
|
|
168
|
+
|
|
136
169
|
---
|
|
137
170
|
|
|
138
171
|
## Persistence-failure handling
|
|
@@ -179,6 +212,20 @@ The hash is always stored so you can correlate without the plaintext.
|
|
|
179
212
|
|
|
180
213
|
This means the recorder OWNS redaction — call sites cannot leak signed URLs into the DB even by accident, because `OperationRecorder` always pipes metadata through `redact_metadata` before writing.
|
|
181
214
|
|
|
215
|
+
### `error_detail` redaction (#341)
|
|
216
|
+
|
|
217
|
+
Failure rows persist the exception's Problem-Details `detail` string through
|
|
218
|
+
[`redact_error_detail`](../src/gflow_cli/data/redaction.py): free-text
|
|
219
|
+
`Bearer …` / `SAPISIDHASH …` tokens and auth-cookie pairs become
|
|
220
|
+
`<redacted:secret>`, URLs carrying signed-query markers become
|
|
221
|
+
`<redacted:url>`, and the result is truncated to 500 chars post-redaction as
|
|
222
|
+
defense-in-depth. The experimental REST transports also redact response bodies
|
|
223
|
+
BEFORE truncating them into exception messages, so a clipped secret can't
|
|
224
|
+
reach the DB. Non-`GFlowError` details are stored only as SHA-256 hashes.
|
|
225
|
+
Prompts on FAILED rows honor `GFLOW_CLI_HISTORY_PROMPTS` exactly like success
|
|
226
|
+
rows — note that in `store` mode this includes prompts of content-policy
|
|
227
|
+
REJECTED generations (the same opt-in that stores successful prompts).
|
|
228
|
+
|
|
182
229
|
### What the DB still contains
|
|
183
230
|
|
|
184
231
|
Even with `redacted` mode and metadata stripping, the DB stores: profile names, Flow project/media/workflow/operation IDs, local file paths or cloud URIs, asset dimensions/seeds/timestamps, model and aspect choices, and prompt hashes. If your threat model requires hiding even profile-level activity, exclude `<GFLOW_CLI_HOME>/gflow.db` from backups or set `GFLOW_CLI_DB_PATH` to a per-task ephemeral location.
|
|
@@ -189,7 +236,7 @@ See [`SECURITY.md`](SECURITY.md) for the broader threat model.
|
|
|
189
236
|
|
|
190
237
|
## Querying the data layer
|
|
191
238
|
|
|
192
|
-
### `gflow data list {projects,images,videos,profiles}` — browse the catalog (v0.9.0+)
|
|
239
|
+
### `gflow data list {projects,images,videos,profiles,errors}` — browse the catalog (v0.9.0+)
|
|
193
240
|
|
|
194
241
|
```bash
|
|
195
242
|
# Newest 20 projects across all profiles
|
|
@@ -206,9 +253,14 @@ gflow data list videos --json | jq '.media_id'
|
|
|
206
253
|
|
|
207
254
|
# Profiles with at least one recorded generation
|
|
208
255
|
gflow data list profiles
|
|
256
|
+
|
|
257
|
+
# Failed generations, newest first (#341): when, which command/mode/model,
|
|
258
|
+
# stable error_type (waf-rejection, content-policy, ...) + redacted detail.
|
|
259
|
+
# The dataset for WAF-cadence and reliability analysis.
|
|
260
|
+
gflow data list errors --profile denon82 --json | jq '{started_at, error_type}'
|
|
209
261
|
```
|
|
210
262
|
|
|
211
|
-
Flags shared by all
|
|
263
|
+
Flags shared by all five subcommands:
|
|
212
264
|
|
|
213
265
|
| Flag | Default | Notes |
|
|
214
266
|
|---|---|---|
|
|
@@ -392,6 +444,13 @@ All three are subclasses of `GFlowError` and re-exported through `gflow_cli.exce
|
|
|
392
444
|
|
|
393
445
|
See [`errors.py::EXIT_CODE_MAP`](../src/gflow_cli/errors.py) for the complete exit-code mapping.
|
|
394
446
|
|
|
447
|
+
Distinct from the above (which are errors OF the data layer), the
|
|
448
|
+
`operations.error_type` column stores the taxonomy of RECORDED generation
|
|
449
|
+
failures — the last segment of each exception's `problem_type` URI. Common
|
|
450
|
+
values: `waf-rejection` (HTTP 403 / WAF), `content-policy`, `auth-expired`,
|
|
451
|
+
`transport-timeout`, `wire-format`, `rate-limit`, `ui-mode-unavailable`
|
|
452
|
+
(cohort pin), `media-attribution`. Query them with `gflow data list errors`.
|
|
453
|
+
|
|
395
454
|
---
|
|
396
455
|
|
|
397
456
|
## Extending the data layer
|
|
@@ -36,6 +36,7 @@ Welcome to the `gflow-cli` documentation. This index is the routing layer: it te
|
|
|
36
36
|
| **[docs/SECURITY.md](SECURITY.md)** | What secrets are stored where, threat model, hardening | Audit, code review, multi-user machines |
|
|
37
37
|
| **[docs/DATA_LAYER.md](DATA_LAYER.md)** | Local SQLite catalog: goals, schema, recording flow, redaction, `gflow data` CLI, migrations, extension guide | Anything touching `gflow_cli.data`, debugging missing rows, building I2V/repair tooling, auditing what is stored |
|
|
38
38
|
| **[docs/CHARACTER.md](CHARACTER.md)** | Characters feature spec & system design: domain model, endpoint/cost matrix, sequence diagrams, JSON payloads (I/O), CLI surface, reuse via `referenceEntities` (#145) | Working on `gflow character`, reusing a character in generations, or understanding Flow's character wire protocol |
|
|
39
|
+
| **[docs/REFERENCE_STRATEGIES.md](REFERENCE_STRATEGIES.md)** | How to reference an asset: `@Name` mention vs `--reference-entity` vs `--ref` — the two-axis model (identity vs image), same-wire+dedupe rule, per-path support matrix, image-less-entity prerequisite, agent rule | Deciding how to tag a saved character/asset in a prompt, or wiring `@`-mentions into a generation |
|
|
39
40
|
| **[docs/MOVIE.md](MOVIE.md)** | `gflow movie` — multi-scene character-consistent films: manifest format, run lifecycle (browser stays open through generate→poll→download), entity-attach mechanism (Personagens right-click), resume/handoff, credits | Working on `gflow movie`, debugging scene generation, or understanding the character-entity attach + consistency model |
|
|
40
41
|
| **[docs/TOOLS.md](TOOLS.md)** | Tools framework: the `gflow tools list/show/run` group, the `--tool/-t` option on generation commands, the TOML tool schema, how a tool is defined, "My Tools" user-authored tools, MCP exposure + §61 parity | Working on `gflow_cli.tools`, adding a built-in or user tool, or wiring `--tool` into a command |
|
|
41
42
|
| **[docs/INSTRUCTIONS.md](INSTRUCTIONS.md)** | Agent Instructions: project-brief cards for Flow's Agent Mode — the mechanism (enabled cards steer generation via the reasoning path), ephemeral `-i` vs persistent cards, the `gflow instructions` CRUD surface with the single generic `--ref` (image **or** character), and the 3-layer pipeline | Working on `-i`/agent instructions, the `gflow instructions` group, or understanding how the project brief anchors generations |
|
|
@@ -43,12 +44,15 @@ Welcome to the `gflow-cli` documentation. This index is the routing layer: it te
|
|
|
43
44
|
| **[docs/PROMPT_EXPANSION.md](PROMPT_EXPANSION.md)** | The `creative-director` tool: 5-component formula, 15 domain styles, banned-keyword policy, Gemini endpoint + I/O, never-fatal contract, `expanded_prompt` + `metadata_json.tool` provenance/redaction, config | Using or debugging `--tool creative-director`, editing the tool TOML, or auditing recorded prompt provenance |
|
|
44
45
|
| **[docs/IMAGE_UPSCALE_RECON.md](IMAGE_UPSCALE_RECON.md)** | `gflow image upscale` wire protocol: `upsampleImage` endpoint, full clientContext (projectId/sessionId/tool/userPaygateTier), reCAPTCHA action `IMAGE_GENERATION`, inline base64 response, 4K Ultra-gating, REST-is-dead proof | Working on `gflow image upscale`, debugging the 403/reCAPTCHA path, or understanding Flow's image-upscale wire protocol (#171) |
|
|
45
46
|
| **[docs/AGENT_UI_RECON.md](AGENT_UI_RECON.md)** | Agentic Flow UI cohort: classic-vs-agentic DOM signature, server-side + volatile (flapping) A/B gating (no client-readable flag), why `_exit_agent_mode` fails, runtime-DOM-detection recommendation | Touching `_exit_agent_mode` / composer mode-switch, diagnosing exit 23 selector drift, or understanding Flow's agentic-UI A/B (#183/#174) |
|
|
47
|
+
| **[docs/ASSET_TAGGING_RECON.md](ASSET_TAGGING_RECON.md)** | `@`-mention asset tagging research & integration design: what Flow's `@CharacterName`/`@me`/`@ingredient` tags are, how they map onto the already-verified `referenceEntities`/`referenceImages` wire, the H1-vs-H2 serialization hypothesis, the CLI-side mention-resolver proposal, and the pre-implementation capture spike plan | Working on inline `@` mentions in prompts, `video --character` reuse, or planning the mention-capture spike |
|
|
46
48
|
| **[tasks/lessons.md](../tasks/lessons.md)** | Running notebook of patterns + reviewer findings, dated and traced to commits | Starting a new phase; debugging "why did the council flag this?" |
|
|
47
49
|
| **[skills/README.md](../skills/README.md)** | Installable agent skill docs (gflow-cli, predict, pr-council-review, scenario) — cross-tool portable Markdown consumed by Claude Code, Cursor, Codex, Gemini CLI, Aider, etc. | Any agent wanting to use gflow-cli correctly |
|
|
48
50
|
| **[scripts/dev/skillopt/README.md](../scripts/dev/skillopt/README.md)** | SkillOpt mock harness — rollout→score loop for measuring and improving skill doc accuracy across multiple LLM providers | Measuring a skill edit's impact; comparing Claude vs GPT-4o vs Gemini on gflow tasks |
|
|
49
51
|
| **[scripts/diag/README.md](../scripts/diag/README.md)** | Diagnostic investigation scripts — run against a live authenticated profile to capture wire samples, measure Chrome memory, or mint reCAPTCHA tokens | Running a one-off investigation against a live Flow session; establishing baseline measurements for issue #155 |
|
|
50
52
|
| [docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md](superpowers/specs/2026-07-04-pr-triage-autopilot-design.md) | PR-triage autopilot design spec: Stage 0/1 gate, Docker sandboxing, Telegram and audit ledger | Reviewing or auditing the automated PR-triage setup |
|
|
51
53
|
| [docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md](superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md) | Implementation plan for the PR-Triage Autopilot | Tracking task-by-task execution |
|
|
54
|
+
| [docs/superpowers/specs/2026-07-18-asset-tagging-design.md](superpowers/specs/2026-07-18-asset-tagging-design.md) | Asset-tagging (`@`-mention) design spec: mention grammar, resolution contract, Option-B architecture, error taxonomy, spike gate | Reviewing or implementing the `@`-mention feature |
|
|
55
|
+
| [docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md](superpowers/plans/2026-07-18-asset-tagging/PLAN.md) | Task-by-task implementation plan for asset tagging (spike gate → resolver → CLI/MCP → live e2e) | Tracking task-by-task execution of the `@`-mention feature |
|
|
52
56
|
|
|
53
57
|
## Agent commands
|
|
54
58
|
|
|
@@ -84,6 +88,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
84
88
|
**"How do I chain clips into one continuous video (initial-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
|
|
85
89
|
**"How do I stitch existing clips into one extended .mp4 (credit-free, no ffmpeg)?"** → [USAGE § `gflow scene`](USAGE.md#gflow-scene)
|
|
86
90
|
**"How do I create a reusable character (face + body) I can reuse across generations?"** → [USAGE § `gflow character`](USAGE.md#gflow-character) · design: [CHARACTER](CHARACTER.md)
|
|
91
|
+
**"Should I use an `@mention`, `--reference-entity`, or `--ref` to tag an asset?"** → [REFERENCE_STRATEGIES](REFERENCE_STRATEGIES.md) — saved named identity → `@Name`/`--reference-entity`; one-off image → `--ref`
|
|
87
92
|
**"How do I turn a terse prompt into a vivid one before generating?"** → `--tool creative-director:style=cinema` on any generation command — see [PROMPT_EXPANSION](PROMPT_EXPANSION.md) · framework: [TOOLS](TOOLS.md)
|
|
88
93
|
**"What tools are available and what styles do they support?"** → run `gflow tools list` / `gflow tools show creative-director` — see [TOOLS](TOOLS.md)
|
|
89
94
|
**"How do I make Flow's agent follow a style/reference across a project's generations?"** → agent instruction cards — ephemeral `-i "text"` (shipped) or the persistent `gflow instructions` group with a generic `--ref` (image or character), see [INSTRUCTIONS](INSTRUCTIONS.md)
|
|
@@ -125,8 +130,8 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
125
130
|
**"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
|
|
126
131
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
127
132
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
128
|
-
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_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)
|
|
129
|
-
**"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.
|
|
133
|
+
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_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)
|
|
134
|
+
**"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)).
|
|
130
135
|
**"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)
|
|
131
136
|
**"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
|
|
132
137
|
**"What is the jitter matrix evidence for `gflow image batch`?"** → [`LIVE_VERIFICATION_image_batch.md`](LIVE_VERIFICATION_image_batch.md) — jitter matrix evidence for `gflow image batch` (always-same-project mode)
|