Skip to content

feat(schemas): Model Plane store manifests (T7-2, resolves #242) - #245

Merged
mdheller merged 2 commits into
mainfrom
feat/t7-model-manifests
Aug 2, 2026
Merged

feat(schemas): Model Plane store manifests (T7-2, resolves #242)#245
mdheller merged 2 commits into
mainfrom
feat/t7-model-manifests

Conversation

@mdheller

Copy link
Copy Markdown
Contributor

Resolves#242 (part of #241). Adds the two content-addressed store manifests the Model Plane spec §IV places beside the weights.

Added

  • schemas/ModelManifest.json — base-model store manifest (modelDigest key, architecture, quantization, format, tokenizer digest, context length, default tier, modalities, license, signature).
  • schemas/ModelAdapterManifest.json — LoRA adapter manifest (adapterDigest, baseModelDigest, task, rank, alpha, target modules, eval-report digest, license, signature).
  • Examples, README rows, CHANGELOG, docs/adr/0016-model-plane-store-manifests.md.

Decisions (from #242)

  • Named ModelAdapterManifest, not AdapterManifest — avoids collision with AdapterDescriptor (connector/actuation adapters).
  • Complement, not replace, SourceOSModelCarryRef — the carry-ref is a governance/policy reference that points AT a manifest digest (modelRef); the manifest is the content-addressed store truth and back-links via carryRefs.

Teeth (verified both ways)

  • ModelManifest invalid without a signature (SEAM-014).
  • ModelAdapterManifest invalid without baseModelDigest (SEAM-017) or signature.
  • Both require an SPDX license → MIT/Apache-only rule checkable before wiring; non-SPDX uses LicenseRef-<name> (visibly not Apache/MIT). Closes spec OQ3 at the contract layer.

Validation

  • Compile + examples pass; 4/4 negative teeth tests pass; duplicate-$id clean.

⚠️ Do not auto-merge — awaiting Copilot review.

…erManifest (T7-2)
Resolves#242. Content-addressed store manifests complementing (not duplicating)
SourceOSModelCarryRef. ModelAdapterManifest named to avoid AdapterDescriptor
collision. Teeth verified both ways: ModelManifest invalid w/o signature
(SEAM-014); ModelAdapterManifest invalid w/o baseModelDigest (SEAM-017) or
signature; both require SPDX license (MIT/Apache-only checkable, closes OQ3).
See ADR-0016.
CopilotAI review requested due to automatic review settings August 2, 2026 18:29

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds two new JSON Schemas and canonical examples for content-addressed Model Plane store manifests (base model + LoRA adapter), documenting the design decision in ADR-0016 and registering the new types in the schemas README and CHANGELOG. This fits the repo’s role as the normative contract layer by defining the store-level “what the weights are” manifests as distinct from governance/policy references like SourceOSModelCarryRef.

Changes:

  • Add ModelManifest and ModelAdapterManifest schemas (required signature + license, adapter binds to a base-model digest).
  • Add canonical examples for both manifests.
  • Document the decision in ADR-0016 and list the new types in schemas/README.md + CHANGELOG.md.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
schemas/README.mdRegisters the two new schema types and updates the “canonical examples / ADRs” pointers.
schemas/ModelManifest.jsonIntroduces the base-model store manifest schema.
schemas/ModelAdapterManifest.jsonIntroduces the LoRA adapter store manifest schema (base-model binding, adapter metadata).
examples/model-manifest.jsonCanonical example for ModelManifest.
examples/model-adapter-manifest.jsonCanonical example for ModelAdapterManifest.
docs/adr/0016-model-plane-store-manifests.mdRecords the design decision and reconciliation with existing types.
CHANGELOG.mdNotes the addition of the new manifest contracts + examples + ADR.

Comment threadschemas/ModelAdapterManifest.json
Comment threadschemas/ModelManifest.json Outdated
"tokenizerDigest": { "type": ["string", "null"], "pattern": "^sha256:[a-fA-F0-9]{64}$", "description": "Content-addressed digest of the tokenizer, or null when the tokenizer is embedded in the weights." },
"contextLength": { "type": ["integer", "null"], "minimum": 0, "description": "Maximum context length in tokens, or null when unknown." },
"defaultTier": { "type": ["string", "null"], "enum": ["T0", "T1", "T2", "T3", "T4", null], "description": "The Model Plane tier this model is normally resident at." },
"modalities": { "type": "array", "description": "Modalities the model serves.", "items": { "type": "string", "enum": ["text", "code", "embedding", "reranking", "vision", "audio", "video", "multimodal"] } },

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b5da77ftargetModules now required with minItems:1+uniqueItems:true; modalities minItems:1+uniqueItems:true when present. Negative tests (empty/missing/duplicate) all reject. Thanks.

Comment threadschemas/ModelAdapterManifest.json Outdated
"task": { "type": "string", "description": "Task the adapter specializes, e.g. summarization, translation-de-en, agent_classification." },
"rank": { "type": "integer", "minimum": 1, "description": "LoRA rank (r)." },
"alpha": { "type": "number", "exclusiveMinimum": 0, "description": "LoRA scaling factor (alpha)." },
"targetModules": { "type": "array", "description": "Attention/MLP submodules the adapter targets, e.g. q_proj, v_proj, o_proj, gate_proj.", "items": { "type": "string" } },

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b5da77ftargetModules now required with minItems:1+uniqueItems:true; modalities minItems:1+uniqueItems:true when present. Negative tests (empty/missing/duplicate) all reject. Thanks.

- ModelAdapterManifest.targetModules now required + minItems:1 + uniqueItems
(a LoRA adapter that doesn't declare target modules is not applicable)
- ModelManifest.modalities minItems:1 + uniqueItems when present
Negative tests added for empty/missing/duplicate cases.
@mdheller
mdheller merged commit fe24cf7 into mainAug 2, 2026
7 checks passed
@mdheller
mdheller deleted the feat/t7-model-manifests branch August 2, 2026 18:39
@mdhellermdheller mentioned this pull request Aug 2, 2026
20 tasks
Sign up for freeto 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.

T7-2 DECISION: ModelManifest / AdapterManifest vs SourceOSModelCarryRef

2 participants

@mdheller