{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://vectorstreamsystems.com/agents/system-spec.schema.json",
  "title": "MBEstudio agent-authored system specification",
  "description": "A bounded system specification compiled deterministically into the existing SysML profile. Dimensions use metres. Resource constraints compare named component attributes.",
  "type": "object", "additionalProperties": false,
  "required": ["name", "functions", "components", "allocations", "interfaces", "constraints", "requirements"],
  "properties": {
    "name": {"type":"string","minLength":1,"maxLength":120},
    "functions": {"type":"array","minItems":1,"maxItems":60,"items":{"type":"object","additionalProperties":false,"required":["id","description"],"properties":{"id":{"$ref":"#/definitions/id"},"description":{"$ref":"#/definitions/text"}}}},
    "components": {"type":"array","minItems":1,"maxItems":60,"items":{"type":"object","additionalProperties":false,"required":["id","description","size_m","attributes"],"properties":{"id":{"$ref":"#/definitions/id"},"description":{"$ref":"#/definitions/text"},"size_m":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"number","exclusiveMinimum":0,"maximum":10000}},"attributes":{"type":"array","maxItems":30,"items":{"type":"object","additionalProperties":false,"required":["id","value","unit"],"properties":{"id":{"$ref":"#/definitions/id"},"value":{"type":"number","minimum":-1000000000000,"maximum":1000000000000},"unit":{"$ref":"#/definitions/unit"}}}}}}},
    "allocations":{"type":"array","maxItems":120,"items":{"type":"object","additionalProperties":false,"required":["function","component"],"properties":{"function":{"$ref":"#/definitions/id"},"component":{"$ref":"#/definitions/id"}}}},
    "interfaces":{"type":"array","maxItems":120,"items":{"type":"object","additionalProperties":false,"required":["id","from","to","description"],"properties":{"id":{"$ref":"#/definitions/id"},"from":{"$ref":"#/definitions/id"},"to":{"$ref":"#/definitions/id"},"description":{"$ref":"#/definitions/text"}}}},
    "constraints":{"type":"array","maxItems":120,"items":{"$ref":"#/definitions/check"}},
    "requirements":{"type":"array","maxItems":120,"items":{"$ref":"#/definitions/check"}}
  },
  "definitions": {
    "id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,47}$"},
    "text":{"type":"string","minLength":1,"maxLength":1000},
    "unit":{"enum":["1","m","kg","s","W","J","A","V","Hz","Pa","K"]},
    "check":{"type":"object","additionalProperties":false,"required":["id","description","component","attribute","operator","value","unit"],"properties":{"id":{"$ref":"#/definitions/id"},"description":{"$ref":"#/definitions/text"},"component":{"$ref":"#/definitions/id"},"attribute":{"$ref":"#/definitions/id"},"operator":{"enum":["<=",">=","==","<",">"]},"value":{"type":"number","minimum":-1000000000000,"maximum":1000000000000},"unit":{"$ref":"#/definitions/unit"}}}
  }
}
