merge: T004 solution.schema.json v1
This commit is contained in:
commit
478410d7c8
1 changed files with 239 additions and 0 deletions
239
schemas/solution.schema.json
Normal file
239
schemas/solution.schema.json
Normal file
|
|
@ -0,0 +1,239 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.machinemachine.ai/m2/market-registry/schemas/solution.schema.json",
|
||||||
|
"title": "Solution",
|
||||||
|
"description": "The installable bundle manifest for the m2 marketplace. Frozen v1 contract (specs/001-market-first-wedge/data-model.md, research.md R3).",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"schema_version": {
|
||||||
|
"const": "m2.solution.v1"
|
||||||
|
},
|
||||||
|
"solution_id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^sol_[a-z0-9-]+$"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"intent": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"behavior": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"tools": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"memory_schema": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deployment": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "recipe.yaml ref + entrypoint + verify command",
|
||||||
|
"properties": {
|
||||||
|
"recipe_ref": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"entrypoint": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"verify_command": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["recipe_ref", "entrypoint", "verify_command"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"applicability": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "fedlearn-compatible applicability constraints",
|
||||||
|
"properties": {
|
||||||
|
"image_classes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"roles": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tool_requirements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"tenant_scope": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "'m2-core' for shared/free, or a tenant id for tenant-scoped work"
|
||||||
|
},
|
||||||
|
"owner_initiated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"scrub_status": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"double_scrubbed": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"evidence": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"source": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"excerpt": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"machine": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"session": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tokens": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"wall_time": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["source"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content_hash": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^sha256:[a-f0-9]{64}$"
|
||||||
|
},
|
||||||
|
"price": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"amount": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"currency": {
|
||||||
|
"const": "m2cr"
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["fixed"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["amount", "currency", "model"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"seller": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "operator_id"
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"terms": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"major_version_coverage": {
|
||||||
|
"const": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["terms", "major_version_coverage"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"revenue_split": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"platform_pct": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"schema_version",
|
||||||
|
"solution_id",
|
||||||
|
"name",
|
||||||
|
"summary",
|
||||||
|
"intent",
|
||||||
|
"deployment",
|
||||||
|
"applicability",
|
||||||
|
"tenant_scope",
|
||||||
|
"evidence",
|
||||||
|
"content_hash",
|
||||||
|
"price",
|
||||||
|
"seller",
|
||||||
|
"license"
|
||||||
|
],
|
||||||
|
"additionalProperties": false,
|
||||||
|
"if": {
|
||||||
|
"properties": {
|
||||||
|
"tenant_scope": {
|
||||||
|
"const": "m2-core"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["tenant_scope"]
|
||||||
|
},
|
||||||
|
"else": {
|
||||||
|
"properties": {
|
||||||
|
"owner_initiated": {
|
||||||
|
"const": true
|
||||||
|
},
|
||||||
|
"scrub_status": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"double_scrubbed": {
|
||||||
|
"const": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["double_scrubbed"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["owner_initiated", "scrub_status"]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue