{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "urn:mime:saved-form:mime.lock/6",
 "title": "MIME saved form, mime.lock/6",
 "description": "What a build wrote beside the document: the environment, the entries and their distributions, the derived seeds, the hashes, the resolved record, the derived graph, the stage, the record files by material and the reference outputs; and, where there are any, the remote assets and the files that travel as references.\n\nGenerated from the closed TypedDicts of mime.saved for editors. MIME's loader is the authority: this schema is a second reader of the same annotations and differs from the loader as follows.\n- duplicate-key-in-lock: A mapping of the lock that holds one key twice: MIME's one reader of the lock refuses it (a reader keeping the first value would read another lock than one keeping the last), and a schema sees the data a parser made of the text, in which one of the two values is already gone.\n- integral-float: An integer written with a zero fractional part (a seed of three written as three point nought): the loader refuses it as not an integer, and JSON Schema counts it an integer.\n- non-finite: A number that is not finite (NaN or an infinity): both readers take it as a number, and strict JSON cannot hold it. The document's writer refuses one; on a load, only a later check of the value itself refuses it, where one exists (a run's step must be finite).\n- earlier-form: A document or a lock of an earlier form of the saved form: the loader reads it under the current form, upgrading it, and each schema describes the current form alone, so it refuses the earlier form's schema id (and any key the current form renamed).\n- meaning: A value of the right shape that names nothing or the wrong thing: a unit, a registered entry and its version, a setting, a record or a file, a lock's file names and package names, a run's duration that is not a whole number of base steps. The shape is all either reader checks; the load refuses these later, each by its own code.",
 "$ref": "#/$defs/Lock",
 "$defs": {
  "AssetDoc": {
   "type": "object",
   "description": "An asset by name, with the sha256 of the contents the experiment was written against (``{asset: dejongh_mlp_v2, sha256: ...}``): a load refuses other contents under that name.",
   "properties": {
    "asset": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    }
   },
   "required": [
    "asset",
    "sha256"
   ],
   "additionalProperties": false
  },
  "AssetRecord": {
   "type": "object",
   "description": "An asset an experiment's entries read: where it is read from and the sha256 of its contents.",
   "properties": {
    "source": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    }
   },
   "required": [
    "sha256",
    "source"
   ],
   "additionalProperties": false
  },
  "ChosenDoc": {
   "type": "object",
   "description": "A value the experimenter chose, with why (``chosen(...)``): ``{chosen: <text>}``.",
   "properties": {
    "chosen": {
     "type": "string"
    }
   },
   "required": [
    "chosen"
   ],
   "additionalProperties": false
  },
  "ConditionDoc": {
   "type": "object",
   "description": "An operating condition every record is read at: its value and tolerance in SI, with their unit, and the value's reason where it carries one.",
   "properties": {
    "value": {
     "type": "number"
    },
    "plus_minus": {
     "type": "number"
    },
    "unit": {
     "type": "string"
    },
    "reason": {
     "$ref": "#/$defs/ReasonDoc"
    }
   },
   "required": [
    "plus_minus",
    "unit",
    "value"
   ],
   "additionalProperties": false
  },
  "ControllerReadRecord": {
   "type": "object",
   "description": "A controller's read as the build resolved it: the path, its class (``state`` or ``observation``) and what that class means, and the node field the run reads.",
   "properties": {
    "path": {
     "type": "string"
    },
    "read_class": {
     "enum": [
      "state",
      "observation"
     ]
    },
    "meaning": {
     "type": "string"
    },
    "node": {
     "type": "string"
    },
    "field": {
     "type": "string"
    }
   },
   "required": [
    "field",
    "meaning",
    "node",
    "path",
    "read_class"
   ],
   "additionalProperties": false
  },
  "ControllerWriteRecord": {
   "type": "object",
   "description": "A controller's write as the build resolved it: the command path, and the node input it feeds as an external input of the graph.",
   "properties": {
    "path": {
     "type": "string"
    },
    "node": {
     "type": "string"
    },
    "field": {
     "type": "string"
    }
   },
   "required": [
    "field",
    "node",
    "path"
   ],
   "additionalProperties": false
  },
  "CpuRecordDoc": {
   "type": "object",
   "description": "The CPU a build ran on (``mime.env.CpuRecord``'s keys and types): its model and the hash of its flags.",
   "properties": {
    "model": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    },
    "flags_sha256": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "required": [
    "flags_sha256",
    "model"
   ],
   "additionalProperties": false
  },
  "CustomLicenceDoc": {
   "type": "object",
   "description": "A custom licence by its ``LicenseRef-`` id: its title, its https link, and what a person says it allows (``unknown`` or ``not_permitted``; a licence that permits is a permission).",
   "properties": {
    "title": {
     "type": "string"
    },
    "url": {
     "type": "string"
    },
    "redistribution": {
     "enum": [
      "not_permitted",
      "unknown"
     ]
    }
   },
   "required": [
    "redistribution",
    "title",
    "url"
   ],
   "additionalProperties": false
  },
  "DefaultRecord": {
   "type": "object",
   "description": "A default the build took: its kind, the value, and the entry whose setting it is (``drag 0.3.0``; ``None`` for a run setting). Never its rule's or basis's words, so a reworded basis refuses no saved folder.",
   "properties": {
    "kind": {
     "enum": [
      "determined",
      "convention",
      "numerical",
      "undeclared"
     ]
    },
    "value": {
     "$ref": "#/$defs/SettingValue"
    },
    "entry": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "required": [
    "entry",
    "kind",
    "value"
   ],
   "additionalProperties": false
  },
  "DerivedRecord": {
   "type": "object",
   "description": "The derived graph, saved with its hash: MADDENING's description of it, arrays by content hash.",
   "properties": {
    "physics": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/Json"
     }
    },
    "observations": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/Json"
     }
    }
   },
   "required": [
    "observations",
    "physics"
   ],
   "additionalProperties": false
  },
  "DescriptionRecord": {
   "type": "object",
   "description": "A chain segment's description as read: the file and its SHA-256, every element by its group (read and used, recognised and not used, refused) as ``{kind: [paths]}``, the refused elements read past with their reasons, and the links read as massless.",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    },
    "used": {
     "type": "object",
     "additionalProperties": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    },
    "unused": {
     "type": "object",
     "additionalProperties": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    },
    "refused": {
     "type": "object",
     "additionalProperties": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    },
    "acknowledged": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "massless": {
     "type": "array",
     "items": {
      "type": "string"
     }
    }
   },
   "required": [
    "acknowledged",
    "file",
    "massless",
    "refused",
    "sha256",
    "unused",
    "used"
   ],
   "additionalProperties": false
  },
  "EntryRecord": {
   "type": "object",
   "description": "One entry the experiment uses, and the distribution it came from, so that a lab's entry pins its own package.",
   "properties": {
    "kind": {
     "enum": [
      "interaction",
      "observation",
      "dynamics",
      "field provider",
      "controller",
      "drive",
      "geometry"
     ]
    },
    "name": {
     "type": "string"
    },
    "version": {
     "type": "string"
    },
    "distribution": {
     "type": "string"
    },
    "distribution_version": {
     "type": "string"
    }
   },
   "required": [
    "distribution",
    "distribution_version",
    "kind",
    "name",
    "version"
   ],
   "additionalProperties": false
  },
  "EnvironmentRecord": {
   "type": "object",
   "description": "What a build ran under. A load compares it and reports every difference; it never refuses on one. Besides the versions, the platform, the device and the precision: the GPU (``None`` on a CPU) and the CPU, the matmul precision, XLA's flags and whether they turn its deterministic GPU mode on, the runner's own record of strings, which MIME stores and compares and never reads, and the runner's information, strings it stores and never compares (a workspace's image ID, a client's version).",
   "properties": {
    "mime": {
     "type": "string"
    },
    "maddening": {
     "type": "string"
    },
    "openmaterica": {
     "type": "string"
    },
    "usd_core": {
     "type": "string"
    },
    "jax": {
     "type": "string"
    },
    "jaxlib": {
     "type": "string"
    },
    "python": {
     "type": "string"
    },
    "platform": {
     "type": "string"
    },
    "device": {
     "type": "string"
    },
    "x64": {
     "type": "boolean"
    },
    "prng": {
     "type": "string"
    },
    "gpu": {
     "anyOf": [
      {
       "$ref": "#/$defs/GpuRecordDoc"
      },
      {
       "type": "null"
      }
     ]
    },
    "cpu": {
     "$ref": "#/$defs/CpuRecordDoc"
    },
    "matmul_precision": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    },
    "xla_flags": {
     "type": "string"
    },
    "deterministic": {
     "type": "boolean"
    },
    "runner": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "runner_info": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    }
   },
   "required": [
    "cpu",
    "deterministic",
    "device",
    "gpu",
    "jax",
    "jaxlib",
    "maddening",
    "matmul_precision",
    "mime",
    "openmaterica",
    "platform",
    "prng",
    "python",
    "runner",
    "runner_info",
    "usd_core",
    "x64",
    "xla_flags"
   ],
   "additionalProperties": false
  },
  "FileDoc": {
   "type": "object",
   "description": "A file an entry reads (a robot's description), by its path below the document's folder, where ``save`` writes it, with the SHA-256 of its bytes (``{file: descriptions/<pin prefix>-ar4.urdf, sha256: ...}``): an entry reading other bytes is refused.",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    }
   },
   "required": [
    "file",
    "sha256"
   ],
   "additionalProperties": false
  },
  "GeometryRecord": {
   "type": "object",
   "description": "A structure's geometry kind as the build resolved it: every setting, defaults included.",
   "properties": {
    "name": {
     "type": "string"
    },
    "version": {
     "type": "string"
    },
    "settings": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/SettingValue"
     }
    }
   },
   "required": [
    "name",
    "settings",
    "version"
   ],
   "additionalProperties": false
  },
  "GpuRecordDoc": {
   "type": "object",
   "description": "The GPU a build ran on (``mime.env.GpuRecord``'s keys and types, which a test holds together): JAX's device kind, the driver's release, and the CUDA driver's, CUDA runtime's and cuDNN's versions as JAX reports them.",
   "properties": {
    "device_kind": {
     "type": "string"
    },
    "driver": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    },
    "cuda_driver": {
     "anyOf": [
      {
       "type": "integer"
      },
      {
       "type": "null"
      }
     ]
    },
    "cuda_runtime": {
     "anyOf": [
      {
       "type": "integer"
      },
      {
       "type": "null"
      }
     ]
    },
    "cudnn": {
     "anyOf": [
      {
       "type": "integer"
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "required": [
    "cuda_driver",
    "cuda_runtime",
    "cudnn",
    "device_kind",
    "driver"
   ],
   "additionalProperties": false
  },
  "GroupDoc": {
   "type": "object",
   "description": "A group of settings written together (``Lubrication(epsilon=...)``), by its registered group name, with its settings written differently from their defaults; a group holds no group.",
   "properties": {
    "group": {
     "type": "string"
    },
    "settings": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/GroupedValue"
     }
    }
   },
   "required": [
    "group",
    "settings"
   ],
   "additionalProperties": false
  },
  "GroupRecord": {
   "type": "object",
   "properties": {
    "nodes": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "tolerance": {
     "type": "number"
    },
    "max_iterations": {
     "type": "integer"
    },
    "requested_by": {
     "type": "array",
     "items": {
      "type": "string"
     }
    }
   },
   "required": [
    "max_iterations",
    "nodes",
    "requested_by",
    "tolerance"
   ],
   "additionalProperties": false
  },
  "GroupedValue": {
   "anyOf": [
    {
     "type": "null"
    },
    {
     "type": "boolean"
    },
    {
     "type": "integer"
    },
    {
     "type": "number"
    },
    {
     "type": "string"
    },
    {
     "type": "array",
     "items": {
      "$ref": "#/$defs/GroupedValue"
     }
    },
    {
     "$ref": "#/$defs/QuantityDoc"
    },
    {
     "$ref": "#/$defs/AssetDoc"
    },
    {
     "$ref": "#/$defs/FileDoc"
    }
   ]
  },
  "HashRecord": {
   "type": "object",
   "description": "``document``: the document in canonical JSON. ``input``: the document with the resolved record, the entries and the canonical order, which a load must reproduce exactly. ``derived`` and ``observations``: the graph built, physics and observations apart.",
   "properties": {
    "recipe": {
     "type": "string"
    },
    "document": {
     "type": "string"
    },
    "input": {
     "type": "string"
    },
    "derived": {
     "type": "string"
    },
    "observations": {
     "type": "string"
    }
   },
   "required": [
    "derived",
    "document",
    "input",
    "observations",
    "recipe"
   ],
   "additionalProperties": false
  },
  "ItemRecord": {
   "type": "object",
   "description": "An item the profile left pending or lists: what it is about, and the finding codes it covers.",
   "properties": {
    "target": {
     "type": "string"
    },
    "codes": {
     "type": "array",
     "items": {
      "type": "string"
     }
    }
   },
   "required": [
    "codes",
    "target"
   ],
   "additionalProperties": false
  },
  "Json": {
   "anyOf": [
    {
     "type": "null"
    },
    {
     "type": "boolean"
    },
    {
     "type": "integer"
    },
    {
     "type": "number"
    },
    {
     "type": "string"
    },
    {
     "type": "array",
     "items": {
      "$ref": "#/$defs/Json"
     }
    },
    {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/Json"
     }
    }
   ]
  },
  "Lock": {
   "type": "object",
   "description": "What a build wrote beside the document: the environment, the entries and their distributions, the derived seeds, the hashes, the resolved record, the derived graph, the stage, the record files by material and the reference outputs; and, where there are any, the remote assets and the files that travel as references.",
   "properties": {
    "schema": {
     "const": "mime.lock/6"
    },
    "environment": {
     "$ref": "#/$defs/EnvironmentRecord"
    },
    "entries": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/EntryRecord"
     }
    },
    "seeds": {
     "type": "object",
     "additionalProperties": {
      "type": "object",
      "additionalProperties": {
       "type": "integer"
      }
     }
    },
    "hashes": {
     "$ref": "#/$defs/HashRecord"
    },
    "resolved": {
     "$ref": "#/$defs/ResolvedRecord"
    },
    "derived": {
     "$ref": "#/$defs/DerivedRecord"
    },
    "stage": {
     "$ref": "#/$defs/StageRecord"
    },
    "records": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/RecordFileRecord"
     }
    },
    "reference": {
     "$ref": "#/$defs/ReferenceRecord"
    },
    "assets": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RemoteAssetRecord"
     }
    },
    "referenced_files": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "visuals": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ManifestRecord"
     }
    },
    "publication": {
     "$ref": "#/$defs/PublicationRecord"
    }
   },
   "required": [
    "derived",
    "entries",
    "environment",
    "hashes",
    "records",
    "reference",
    "resolved",
    "schema",
    "seeds",
    "stage"
   ],
   "additionalProperties": false
  },
  "MagnetRecord": {
   "type": "object",
   "description": "A body's magnet as resolved: its part's prim, its model, its direction in the part's frame and in the body's, and where the direction came from.",
   "properties": {
    "part": {
     "type": "string"
    },
    "model": {
     "type": "string"
    },
    "in_part": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "in_body": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "source": {
     "type": "string"
    }
   },
   "required": [
    "in_body",
    "in_part",
    "model",
    "part",
    "source"
   ],
   "additionalProperties": false
  },
  "ManifestFileRecord": {
   "type": "object",
   "description": "How a description names one of a manifest's files: the record's name, and its git blob where it has one.",
   "properties": {
    "asset": {
     "type": "string"
    },
    "git_blob": {
     "type": "string"
    }
   },
   "required": [
    "asset"
   ],
   "additionalProperties": false
  },
  "ManifestRecord": {
   "type": "object",
   "description": "A manifest of the meshes the stage draws, as the lock holds it (``mime.assets``'s ``mime.asset_manifest/1``): its name, title, credit and notice, each record whole, and how a description names each file. No tier: each record's is the verdict of its licence.",
   "properties": {
    "format": {
     "const": "mime.asset_manifest/1"
    },
    "name": {
     "type": "string"
    },
    "title": {
     "type": "string"
    },
    "credit": {
     "type": "string"
    },
    "notice": {
     "type": "string"
    },
    "licences": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/CustomLicenceDoc"
     }
    },
    "upstream": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "archives": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "archive_checked": {
     "type": "string"
    },
    "assets": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RemoteAssetRecord"
     }
    },
    "files": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ManifestFileRecord"
     }
    }
   },
   "required": [
    "archives",
    "assets",
    "credit",
    "files",
    "format",
    "name",
    "notice",
    "title"
   ],
   "additionalProperties": false
  },
  "PartRecord": {
   "type": "object",
   "description": "A body's part as resolved: its solid with every setting, its volume, its centroid and its frame's rotation in the body's frame, its inertia per unit mass about its centroid in the body's frame, the part it lies inside, its material, and whether it is a magnet.",
   "properties": {
    "solid": {
     "$ref": "#/$defs/GeometryRecord"
    },
    "volume": {
     "type": "number"
    },
    "centre": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "rotation": {
     "type": "array",
     "items": {
      "type": "array",
      "items": {
       "type": "number"
      }
     }
    },
    "inertia_per_mass": {
     "type": "array",
     "items": {
      "type": "array",
      "items": {
       "type": "number"
      }
     }
    },
    "inside": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    },
    "material": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    },
    "magnet": {
     "type": "boolean"
    }
   },
   "required": [
    "centre",
    "inertia_per_mass",
    "inside",
    "magnet",
    "material",
    "rotation",
    "solid",
    "volume"
   ],
   "additionalProperties": false
  },
  "PendingDoc": {
   "type": "object",
   "description": "A reason left pending (``pending()``): ``{pending: true}``.",
   "properties": {
    "pending": {
     "const": true
    }
   },
   "required": [
    "pending"
   ],
   "additionalProperties": false
  },
  "PublicationRecord": {
   "type": "object",
   "description": "The record a published bundle is, as ``mime push`` writes it into the lock it packs (outside the input hash): the service, the version's record and DOI, its concept's record and, where the service stated it when the bundle was packed, the concept's DOI (a first version's is minted only when it is published), and the version's number.",
   "properties": {
    "service": {
     "type": "string"
    },
    "record": {
     "type": "string"
    },
    "doi": {
     "type": "string"
    },
    "concept": {
     "type": "string"
    },
    "concept_doi": {
     "type": "string"
    },
    "version": {
     "type": "integer"
    }
   },
   "required": [
    "concept",
    "doi",
    "record",
    "service",
    "version"
   ],
   "additionalProperties": false
  },
  "QuantityDoc": {
   "type": "object",
   "description": "A quantity as SI value and SI unit symbol (``{value: 0.02, unit: s}``), with its reason where it carries one.",
   "properties": {
    "value": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ]
    },
    "unit": {
     "type": "string"
    },
    "reason": {
     "$ref": "#/$defs/ReasonDoc"
    }
   },
   "required": [
    "unit",
    "value"
   ],
   "additionalProperties": false
  },
  "ReadRecord": {
   "type": "object",
   "description": "One read of a record: the request as sent (the record by its id, version and content hash, the field, the operating conditions and the requirement), OpenMaterica's status and reasons as it gave them, how the build used the verdict, and the value it took or the bounds it read.",
   "properties": {
    "material": {
     "type": "string"
    },
    "field": {
     "type": "string"
    },
    "request": {
     "$ref": "#/$defs/Json"
    },
    "status": {
     "type": "string"
    },
    "reasons": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "use": {
     "type": "string"
    },
    "value": {
     "type": "number"
    },
    "bounds": {
     "type": "array",
     "items": {
      "type": "number"
     }
    }
   },
   "required": [
    "field",
    "material",
    "reasons",
    "request",
    "status",
    "use"
   ],
   "additionalProperties": false
  },
  "ReasonDoc": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "$ref": "#/$defs/PendingDoc"
    },
    {
     "$ref": "#/$defs/ChosenDoc"
    }
   ]
  },
  "RecordDoc": {
   "type": "object",
   "description": "A record file the experiment names: its file below the document's folder, where ``save`` writes it, the SHA-256 of its bytes, and the record's id, version and content hash. A reference: never a value from it.",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    },
    "id": {
     "type": "string"
    },
    "version": {
     "type": "string"
    },
    "content_hash": {
     "type": "string"
    }
   },
   "required": [
    "content_hash",
    "file",
    "id",
    "sha256",
    "version"
   ],
   "additionalProperties": false
  },
  "RecordFileRecord": {
   "type": "object",
   "description": "A record file the saved form carries: its file below the folder and the SHA-256 of its bytes.",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    }
   },
   "required": [
    "file",
    "sha256"
   ],
   "additionalProperties": false
  },
  "ReferenceRecord": {
   "type": "object",
   "description": "The golden outputs ``verify`` reruns against: every field of every node over the first ``steps`` steps, in ``file``, with the tolerance used across environments (within one environment they match bit for bit).",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    },
    "steps": {
     "type": "integer"
    },
    "rtol": {
     "type": "number"
    },
    "atol": {
     "type": "number"
    }
   },
   "required": [
    "atol",
    "file",
    "rtol",
    "sha256",
    "steps"
   ],
   "additionalProperties": false
  },
  "RegistrationRecord": {
   "type": "object",
   "properties": {
    "id": {
     "type": "string"
    },
    "kind": {
     "type": "string"
    },
    "subject": {
     "type": "string"
    }
   },
   "required": [
    "id",
    "kind",
    "subject"
   ],
   "additionalProperties": false
  },
  "RemoteAssetRecord": {
   "type": "object",
   "description": "An asset as the lock names it, the full record (``mime.assets``'s ``AssetRecord``; a test holds the two together): the five keys every record has, and from version 6 each one the record states (its credit, role, kind and derivation, notice, custom licences, version, citation, and the packages that provide the adapters its locations need). Locations are tried in order; the lock holds only the record's own, never a machine's locations file's.",
   "properties": {
    "name": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    },
    "size": {
     "type": "integer"
    },
    "licence": {
     "type": "string"
    },
    "locations": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "credit": {
     "type": "string"
    },
    "role": {
     "enum": [
      "results",
      "presentation"
     ]
    },
    "kind": {
     "enum": [
      "authored",
      "measured",
      "derived"
     ]
    },
    "derivation": {
     "type": "string"
    },
    "notice": {
     "type": "string"
    },
    "licences": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/CustomLicenceDoc"
     }
    },
    "version": {
     "type": "string"
    },
    "citation": {
     "type": "string"
    },
    "adapters": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    }
   },
   "required": [
    "licence",
    "locations",
    "name",
    "sha256",
    "size"
   ],
   "additionalProperties": false
  },
  "ResolvedController": {
   "type": "object",
   "description": "The controller as the build resolved it: its mode by number, its period and latency in base steps with the rule the latency follows, each read with its class and each write with the input it feeds.",
   "properties": {
    "mode": {
     "type": "integer"
    },
    "every": {
     "type": "integer"
    },
    "latency": {
     "type": "integer"
    },
    "rule": {
     "type": "string"
    },
    "reads": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ControllerReadRecord"
     }
    },
    "writes": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ControllerWriteRecord"
     }
    }
   },
   "required": [
    "every",
    "latency",
    "mode",
    "reads",
    "rule",
    "writes"
   ],
   "additionalProperties": false
  },
  "ResolvedEntry": {
   "type": "object",
   "description": "One declared entry as the build resolved it: every setting, defaults included; a body's initial state in SI; the declared gradient status of what it built, its rung's where its rungs declare their own; the nodes it built and how many base steps each takes.",
   "properties": {
    "kind": {
     "type": "string"
    },
    "name": {
     "type": "string"
    },
    "version": {
     "type": "string"
    },
    "differentiability": {
     "type": "string"
    },
    "binds": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "settings": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/SettingValue"
     }
    },
    "initial": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/SettingValue"
     }
    },
    "nodes": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "every": {
     "type": "integer"
    }
   },
   "required": [
    "binds",
    "differentiability",
    "every",
    "initial",
    "kind",
    "name",
    "nodes",
    "settings",
    "version"
   ],
   "additionalProperties": false
  },
  "ResolvedMaterials": {
   "type": "object",
   "description": "The conditions, each record's pins, every read the values rest on, and each body's parts.",
   "properties": {
    "conditions": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ConditionDoc"
     }
    },
    "records": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/RecordDoc"
     }
    },
    "reads": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ReadRecord"
     }
    },
    "parts": {
     "type": "object",
     "additionalProperties": {
      "type": "object",
      "additionalProperties": {
       "$ref": "#/$defs/PartRecord"
      }
     }
    }
   },
   "required": [
    "conditions",
    "parts",
    "reads",
    "records"
   ],
   "additionalProperties": false
  },
  "ResolvedProfile": {
   "type": "object",
   "description": "What the profile made of the experiment, each in a canonical order (by target, then code): the profile, each item left pending (what the stamp names), every waiver with a pending basis, each default taken by path, each setting's source by path, what the profile lists, and the values given as the experimenter's own choice, each with its declared role.",
   "properties": {
    "profile": {
     "type": "string"
    },
    "pending": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ItemRecord"
     }
    },
    "waivers": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WaiverRecord"
     }
    },
    "defaults": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/DefaultRecord"
     }
    },
    "sources": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ReasonDoc"
     }
    },
    "listed": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ItemRecord"
     }
    },
    "changes": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    }
   },
   "required": [
    "changes",
    "defaults",
    "listed",
    "pending",
    "profile",
    "sources",
    "waivers"
   ],
   "additionalProperties": false
  },
  "ResolvedRecord": {
   "type": "object",
   "description": "What the build derived from the document: what a reader needs to see what ran without that version's code, and what a load compares item by item.",
   "properties": {
    "vocabulary": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "run": {
     "$ref": "#/$defs/ResolvedRun"
    },
    "things": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "entries": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ResolvedEntry"
     }
    },
    "order": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "registrations": {
     "type": "object",
     "additionalProperties": {
      "type": "array",
      "items": {
       "$ref": "#/$defs/RegistrationRecord"
      }
     }
    },
    "slots": {
     "type": "object",
     "additionalProperties": {
      "type": "array",
      "items": {
       "$ref": "#/$defs/SlotRecord"
      }
     }
    },
    "groups": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/GroupRecord"
     }
    },
    "values": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/ValueRecord"
     }
    },
    "geometry": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/GeometryRecord"
     }
    },
    "fills": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "assets": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/AssetRecord"
     }
    },
    "scene": {
     "$ref": "#/$defs/ResolvedScene"
    },
    "materials": {
     "$ref": "#/$defs/ResolvedMaterials"
    },
    "descriptions": {
     "type": "object",
     "additionalProperties": {
      "$ref": "#/$defs/DescriptionRecord"
     }
    },
    "controller": {
     "anyOf": [
      {
       "$ref": "#/$defs/ResolvedController"
      },
      {
       "type": "null"
      }
     ]
    },
    "profile": {
     "$ref": "#/$defs/ResolvedProfile"
    }
   },
   "required": [
    "assets",
    "controller",
    "descriptions",
    "entries",
    "fills",
    "geometry",
    "groups",
    "materials",
    "order",
    "profile",
    "registrations",
    "run",
    "scene",
    "slots",
    "things",
    "values",
    "vocabulary"
   ],
   "additionalProperties": false
  },
  "ResolvedRun": {
   "type": "object",
   "description": "The run settings in SI, the world frame with gravity's vector derived, and how a run executes.",
   "properties": {
    "experiment": {
     "type": "string"
    },
    "dt": {
     "type": "number"
    },
    "seed": {
     "type": "integer"
    },
    "up": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "gravity": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "structure": {
     "type": "string"
    }
   },
   "required": [
    "dt",
    "experiment",
    "gravity",
    "seed",
    "structure",
    "up"
   ],
   "additionalProperties": false
  },
  "ResolvedScene": {
   "type": "object",
   "description": "The scene as resolved: up, the stage's unit and metres per unit, every thing's prim, the things bound to a prim an asset brings in, and each body's magnets by their key.",
   "properties": {
    "up": {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    "units": {
     "type": "string"
    },
    "meters_per_unit": {
     "type": "number"
    },
    "prims": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "bound": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "magnets": {
     "type": "object",
     "additionalProperties": {
      "type": "object",
      "additionalProperties": {
       "$ref": "#/$defs/MagnetRecord"
      }
     }
    }
   },
   "required": [
    "bound",
    "magnets",
    "meters_per_unit",
    "prims",
    "units",
    "up"
   ],
   "additionalProperties": false
  },
  "SettingValue": {
   "anyOf": [
    {
     "type": "null"
    },
    {
     "type": "boolean"
    },
    {
     "type": "integer"
    },
    {
     "type": "number"
    },
    {
     "type": "string"
    },
    {
     "type": "array",
     "items": {
      "$ref": "#/$defs/SettingValue"
     }
    },
    {
     "$ref": "#/$defs/QuantityDoc"
    },
    {
     "$ref": "#/$defs/AssetDoc"
    },
    {
     "$ref": "#/$defs/FileDoc"
    },
    {
     "$ref": "#/$defs/GroupDoc"
    }
   ]
  },
  "SlotRecord": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string"
    },
    "reader": {
     "type": "string"
    },
    "interfaces": {
     "type": "array",
     "items": {
      "type": "string"
     }
    }
   },
   "required": [
    "interfaces",
    "name",
    "reader"
   ],
   "additionalProperties": false
  },
  "StageRecord": {
   "type": "object",
   "description": "The stage the build wrote: its file below the folder and its SHA-256, every layer it references, by its file below the folder, with its SHA-256, and the version of the stage writer that wrote it (``mime.scene.STAGE_WRITER``; a lock written before it was recorded holds none). The stage's identity.",
   "properties": {
    "file": {
     "type": "string"
    },
    "sha256": {
     "type": "string"
    },
    "layers": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "writer": {
     "type": "integer"
    }
   },
   "required": [
    "file",
    "layers",
    "sha256"
   ],
   "additionalProperties": false
  },
  "ValueRecord": {
   "type": "object",
   "description": "A value of a thing the entries read: in SI, where it came from (``declared in the experiment``, a record, its parts) and why, the ids that read it, and one line per input it was read or derived from.",
   "properties": {
    "value": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ]
    },
    "unit": {
     "type": "string"
    },
    "source": {
     "type": "string"
    },
    "reason": {
     "type": "string"
    },
    "read_by": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "details": {
     "type": "array",
     "items": {
      "type": "string"
     }
    }
   },
   "required": [
    "details",
    "read_by",
    "reason",
    "source",
    "unit",
    "value"
   ],
   "additionalProperties": false
  },
  "WaiverRecord": {
   "type": "object",
   "description": "A waiver the build rests on with a pending basis: what it waives, the codes it covers, its basis, and whether the profile generated it or the experiment declared it.",
   "properties": {
    "target": {
     "type": "string"
    },
    "reasons": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "basis": {
     "$ref": "#/$defs/ReasonDoc"
    },
    "generated": {
     "type": "boolean"
    }
   },
   "required": [
    "basis",
    "generated",
    "reasons",
    "target"
   ],
   "additionalProperties": false
  }
 }
}
