Skip to content

feat(catalogs): derive the video generation operation - #105

Merged
jackspirou merged 1 commit into
mainfrom
codex/videos-generations-operation
Aug 27, 2026
Merged

feat(catalogs): derive the video generation operation#105
jackspirou merged 1 commit into
mainfrom
codex/videos-generations-operation

Conversation

@jackspirou

Copy link
Copy Markdown
Member

What

Thirteen video-output offerings in the shipped catalog published no operation at all. A consumer that wanted to generate a video had no route to call and no price field to read.

This change adds videos-generations to the provider operation vocabulary and one entry to the media operation table. The derivation and the fact-consistency rule both read that table, so text in and video out with the video-gen tag now publishes the operation, and a model that claims the tag without the modalities fails validation.

Why the hand-written case goes away

validateModelFactConsistency carried a video-gen case that required video output to be present. The table rule requires the output set to be exactly [video] and the input to contain text. The table rule is strictly stronger, so deleting the hand-written case loses nothing and keeps one statement per fact.

The price was landing in the wrong field

DeepInfra reports one output_seconds price whatever the model produced, and the acquisition path recorded it under audio_gen unconditionally. video_gen existed in the schema and was never populated, so a consumer pricing a video job would have read an audio field.

applyGeneratedSecondPrice now keys the field on the model's declared output modality. Modalities are normalized before pricing runs (applyProviderFeaturesnormalizeOperationalModalitiesapplyProviderPricing), so the decision reads authoritative data. The seven persisted model files that carry a price move from audio_gen to video_gen, so the shipped catalog is right today rather than after the next refresh. The other six video models report no price.

Evidence

Check Result
go test ./... passes
make lint 0 issues
verify-catalog-dependency-direction.sh 8 passed, 0 failed
verify-catalog-package-ownership.sh 13 passed, 0 failed
verify-catalog-performance.sh passed
verify-go-file-sizes.sh passed
verify-package-layout.sh passed
verify-pure-go.sh passed
verify-consumer-deps.sh six modules pass
verify-action-pins.sh 8 references resolve
verify-provider-fixture-drift.sh UNVERIFIED: needs catalog-acquisition credentials this machine does not hold

TestEveryPublishedMediaOperationMatchesItsDefinition cross-checks the shipped catalog against the canonical table and now expects 13 offerings under videos-generations. TestTheResidualOfferingsAreRealtimeAlone replaces the video-and-realtime residual test: the residual is 3 realtime offerings and nothing else.

TestAPerSecondPriceLandsUnderTheOperationTheOutputNames holds the price routing, including the undeclared-output case that still falls to audio.

The pinned consumer artifact digest moves to f2110d24e0e54364f23a399decd1b518c2ada0602c517e03c57dd5b5a6a275f8 because the catalog payload changed.

https://claude.ai/code/session_0131AtNgj1Qagv2csZGuxPFM

A provider that generates a video answers with a job rather than a video,
so a consumer submits, polls, and collects. Nothing in the catalog named
that route, and thirteen video-output offerings published no operation at
all.

Add ProviderOperationVideosGenerations and one entry in the media
operation table. The derivation and the fact-consistency rule both read
that table, so text in and video out with the video-gen tag now both
publishes the operation and refuses a model that claims the tag without
the modalities. Delete the hand-written video case in
validateModelFactConsistency: the table rule requires an exact output set
where the old case required only presence, so one statement now decides
both what Starmap publishes and what it refuses.

Also route the per-second price. DeepInfra reports one output_seconds
field whatever the model produced, and the acquisition path recorded it
under audio_gen unconditionally, so video_gen existed in the schema and
was never populated. Key the field on the declared output modality, which
is already normalized when pricing runs, and migrate the seven persisted
model files that carry a price. The other six video models report none.

Claude-Session: https://claude.ai/code/session_0131AtNgj1Qagv2csZGuxPFM
@jackspirou
jackspirou merged commit 0414a3c into main Aug 27, 2026
5 of 6 checks passed
@jackspirou
jackspirou deleted the codex/videos-generations-operation branch August 27, 2026 14:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant