A new engine release¶
Supporting a new engine release changes no schema. It means writing a new rules pack: the release's accepted values and the rules that read them, registered under the release's version string.
A pack is found by exact match on the scenario's engine_version. Packs exist for
0.29.0 and 0.31.0. A scenario that names
0.29.1 gets no rules until a pack is registered under 0.29.1, even though a 0.29.0
pack exists.
Steps¶
- Copy the latest pack. Create a package under
rules/, such asrules/v0_33/, from the newest existing pack, and set itsVersionconstant to the release's exact version string, such as"0.33.0". - Change what moved. Update each constant that differs in the new release: backend
names, cache dtypes, graph modes, speculative methods, connectors, quantization methods,
thresholds. Change a rule's body only if the engine's behavior changed. Add or remove a
rule if a check appeared or went away. Every rule states, in its
Becausetext, what breaks without it. - Register it. Add
rules.Register(v0_33.Pack())to theinitfunction in the root package'sregister.go. Packs are registered in that one file rather than from each pack's owninit, so the set of known versions does not depend on which pack packages a build happens to import. -
Check it against the source. Carry over
source_test.goand adjust it to the new release's file layout. Run it against a checkout of the release:It fails on any difference in either direction: a value the pack accepts that the engine does not, or one the engine accepts that the pack does not. From the 0.31.0 pack on it also re-derives the speculative-method lists, and pins the message of each startup refusal a rule encodes, so a release that drops one fails the test.
-
Add its CI job. Copy the
constants-against-enginejob in.github/workflows/ci.yaml, pinned to the new release's tag, and point it at the new pack's package only. Leave the existing jobs alone: each pack is checked against its own release, and a job running every pack against one tag fails on the others. - Regenerate the documentation. Run
go run ./internal/docgenfrom the repository root. The new pack appears in Rules packs. If the pack adds a field torules.Pack, docgen fails until the field has a label in itspackFieldsmap. - Leave the old pack alone. A scenario pinned to the old version must keep meaning what it meant. Correct it only where it misdescribes its own release.
What does not change¶
Nothing in spec/ or kernel/ changes. A field check holds in every release; a check that
holds in some releases and not others belongs in a pack. The refusal of prefill-context
parallelism combined with data parallelism is an example. vLLM 0.29.0 refuses it and later
releases support it, so it is the rule pcp-excludes-data-parallelism in the 0.29.0 pack,
not a field check.