Skip to content

The documented chain manifest example is the crashing duration × model combination — in USAGE.md, the module docstring, and a passing test #635

Closed

Description

@ffroliva

Summary

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:

'{"prompt": "first", "model": "veo-lite", "duration": 4, "aspect": "16:9"}\n'

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.

Why this is filed separately from #634

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.

Verified against develop @ e5b36ee this session.

Refs #634, #630, #632.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentation

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions