Problem
The content model is gaining a Variants concept, but every existing consumer — deliverers, validators, CAS refcounting and GC — still reads .Files. A manifest that declares variants would be accepted by ingestion and then silently mishandled downstream, because nothing in the pipeline understands the resolved-variant shape yet.
Why this is first
This is a fail-closed gate that buys time for the real migration (see the .Files → ResolvedArtifact issue). Until that migration lands, this gate is the only protection against a provider publishing a Variants manifest and corrupting refcounting or GC state.
It must land before any provider is able to publish such a manifest, not after.
Proposed approach
- Reject manifests declaring variants at ingestion, explicitly and loudly — no partial handling, no best-effort fallback.
- Bump the manifest schema version so the rejection is attributable to a known version rather than a parse failure.
- Error message should name the migration as the unblock condition, so the rejection is self-explaining when a provider hits it.
Acceptance criteria
- A manifest declaring variants is rejected at ingestion with a clear, actionable error.
- Manifest version is bumped and the gate keys off it.
- Existing single-variant manifests are unaffected.
- Test coverage for both the rejection path and the unaffected legacy path.
Notes
Ships inside stack PR 2 (feat/platform-neutral-model).
Problem
The content model is gaining a
Variantsconcept, but every existing consumer — deliverers, validators, CAS refcounting and GC — still reads.Files. A manifest that declares variants would be accepted by ingestion and then silently mishandled downstream, because nothing in the pipeline understands the resolved-variant shape yet.Why this is first
This is a fail-closed gate that buys time for the real migration (see the
.Files→ResolvedArtifactissue). Until that migration lands, this gate is the only protection against a provider publishing aVariantsmanifest and corrupting refcounting or GC state.It must land before any provider is able to publish such a manifest, not after.
Proposed approach
Acceptance criteria
Notes
Ships inside stack PR 2 (
feat/platform-neutral-model).