* fix(generation): refuse supplied media fields a provider cannot carry
* fix(media): probe selected tools in their execution environment
* fix(credentials): use native file replacement across processes
* fix(runtime): distinguish tool preparation from process startup
* fix(cli): bootstrap from the physical distribution directory
Every workspace manifest omitted a license field, so a scanner reading
the published repository would resolve all 90 of them as unknown. Both
Python services went further and declared plain Apache-2.0, which is
looser than the LICENSE they actually ship under.
Package bytes feed the example package locks, so adding the field
invalidated all three; refreshed them. Only closureDigest and artifacts
move — same 31 selected packages, nothing added or removed.
Also record what the READMEs never said: ffmpeg is a real prerequisite
for a Build and had zero mentions, and the media Lambda layer is a GPL
FFmpeg build. That build is deliberate — libx264 is GPL-only and the
encode path requires it — and it stays lawful only because the operator
builds and deploys it into their own account. Publishing a prebuilt
layer would break that, so the boundary is now written down.
Rename the author frontend around Markup, replace PromptKit with graph-native Text templates, and keep video typography in its own package. Wire ordinary Text through explicit graph edges into model and visible consumers, refresh examples, locks, tests, and architecture documentation.
The root test/ directory was outside the test glob, so three docs-site timing
tests had never run. The KIE README still described author 'modes', which
capability-per-exact-model replaced, and four generation helpers were exported
without a caller.
What an exact generation model accepts is fixed when the model is trained; no
service reselling it can widen or narrow that. Only the wire field names and the
endpoint splitting belong to a service.
An exact-model package now declares a closed svml.generation-ports@1 table, and
every request uses one svml.generation-request@1 envelope keyed by those port
names. A Provider contributes only a svml.generation-wire-mapping@1: which of
its fields carries each port, and which of its endpoints serves which port
combination. @narratage/provider-kie therefore imports no model package; its 313
hand-written translations become eleven mapping records, and a repository test
proves each mapping covers every declared port before any paid call.
Capability now means exact model, so mode unions disappear into port presence
and the count falls from sixteen to eleven. Request schemas, semantic validators
and author Surface bounds are all derived from the port table, removing the
duplicated reference cap and the standard-only 1080p branch.
The recorded limits were rechecked against KIE, and Seedance and MiniMax also
against ByteDance, fal and MiniMax's own specifications; several were wrong.
Reference modalities carry separate capacities, Grok runs 6-30s rather than
1-15s, Seedream takes 3000 prompt characters rather than 20000, GPT Image has a
resolution input, and the deprecated return_last_frame field is no longer sent.
Narratage (narration + montage) is the project, framework, npm scope
(@narratage/*) and CLI command. SVML remains the name of its markup
language, so file suffixes (.svml/.svs/.svrun), source Headers and
svml.* wire format ids are intentionally unchanged. Example locks are
regenerated because package manifests participate in artifact digests.
The @0/@2/@4 numbers were rewrite-internal draft counters, not released
format versions. No external consumer or persisted data depends on them,
so the first public format of every id is @1. Negative-format tests use
@9 as the deliberately unknown version. Example package and runtime
locks are regenerated because format ids participate in digests.
Remove payload lineage coupling, load deployment adapters from locked packages, add explicit artifact lifecycle tooling, and keep image/media execution behind replaceable endpoints. Refresh the executable examples and architecture records to match the implemented boundaries.