You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The documented chain manifest example is the crashing duration × model combination — in USAGE.md, the module docstring, and a passing test #635
The canonical video chain manifest example we ship — in the user-facing docs, in the module docstring, and pinned by a test — is the exact combination that crashes mid-spend (#634). A user who copies the documented example loses credits and gets "Unexpected error".
The three places
1. docs/USAGE.md:847 (and its website/docs/USAGE.md mirror), under "JSONL manifest format":
{"prompt": "a lone wolf on a snowy ridge at dawn, cinematic", "model": "veo-lite", "duration": 4, "aspect": "16:9"}
veo-lite has no duration control (VideoModel.supports_duration() is True for OMNI_FLASH only), and chain.py:326 rejects omni_flash, so this line cannot succeed for any model substitution. The surrounding prose actively invites it: "model / duration / aspect are optional per-link overrides." For chains, duration is not an override — it is a crash.
2. src/gflow_cli/chain_manifest.py:5 — the module docstring carries the same line, so the in-code reference is wrong in the same way.
3. tests/test_chain_manifest.py:48 pins it as valid:
The test is not wrong about what it asserts — chain_manifest.py really does parse that line without complaint, because parsing is where the guard is missing. But it means the crashing combination has a green test standing behind it, which is how it survived review.
The docs fix stops the bleeding and ships in minutes; #634's guard is real work. They should not block each other. Note the two interact: once #634 lands, this example will fail at validation with exit 2 instead of mid-render — better, but still a wrong example to ship.
Suggested fix
Drop duration from the documented example and say plainly that per-link duration is unsupported in chains (rather than listing it as an optional override). Update the chain_manifest.py docstring to match, and re-point the test fixture — keeping a separate parse-level test for duration if the parser is still meant to accept the key.
Activity
fix(chain,movie): apply council review findings (#634, #635)
fix(chain,movie): reject duration × model before spending, not mid-run (