{
  "$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"required":["version","resources"],
  "properties":{
    "version":{"enum":[1,"1"]},"title":{"type":"string","maxLength":160},"description":{"type":"string","maxLength":1000},
    "resources":{"type":"array","minItems":1,"maxItems":150,"items":{"type":"object","additionalProperties":false,"required":["key","type"],"properties":{
      "key":{"$ref":"#/$defs/key"},"type":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,100}$"},"label":{"type":"string","maxLength":160},"zone":{"type":"string","minLength":1,"maxLength":80},"group":{"$ref":"#/$defs/key"},
      "attributes":{"type":"object","maxProperties":30,"propertyNames":{"pattern":"^[A-Za-z][A-Za-z0-9_]{0,47}$"},"additionalProperties":{"type":["string","number","boolean","null"],"maxLength":240}}
    }}},
    "groups":{"type":"array","maxItems":40,"items":{"type":"object","additionalProperties":false,"required":["key","label"],"properties":{"key":{"$ref":"#/$defs/key"},"label":{"type":"string","maxLength":160},"kind":{"type":"string","maxLength":32},"parent":{"$ref":"#/$defs/key"},"zone":{"type":"string","minLength":1,"maxLength":80}}}},
    "links":{"type":"array","maxItems":300,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"$ref":"#/$defs/key"},"to":{"$ref":"#/$defs/key"},"relation":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,47}$"},"evidence":{"enum":["explicit","inferred","unresolved"]},"plane":{"enum":["network","storage","dependency","logical"]}}}}
  },"$defs":{"key":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$"}}
}
