{
  "openontologyConformance": "0.1",
  "description": "Conformance fixtures for LogicSRC OpenOntology. A third-party implementation can run these against the published JSON Schemas with no LogicSRC code: every valid fixture must validate, every invalid fixture must fail.",
  "valid": [
    {
      "fixture": "valid/manifest.json",
      "kind": "openontology-manifest"
    },
    {
      "fixture": "valid/namespace.json",
      "kind": "openontology-namespace"
    },
    {
      "fixture": "valid/entity-type.json",
      "kind": "openontology-entity-type"
    },
    {
      "fixture": "valid/property.json",
      "kind": "openontology-property"
    },
    {
      "fixture": "valid/relationship-type.json",
      "kind": "openontology-relationship-type"
    },
    {
      "fixture": "valid/constraint.json",
      "kind": "openontology-constraint"
    },
    {
      "fixture": "valid/query.json",
      "kind": "openontology-query"
    },
    {
      "fixture": "valid/query-adhoc.json",
      "kind": "openontology-query"
    },
    {
      "fixture": "valid/action.json",
      "kind": "openontology-action"
    },
    {
      "fixture": "valid/entity.json",
      "kind": "openontology-entity"
    },
    {
      "fixture": "valid/claim-relationship.json",
      "kind": "openontology-claim"
    },
    {
      "fixture": "valid/claim-value.json",
      "kind": "openontology-claim"
    },
    {
      "fixture": "valid/source.json",
      "kind": "openontology-source"
    },
    {
      "fixture": "valid/evidence.json",
      "kind": "openontology-evidence"
    },
    {
      "fixture": "valid/changeset.json",
      "kind": "openontology-changeset"
    },
    {
      "fixture": "valid/review.json",
      "kind": "openontology-review"
    },
    {
      "fixture": "valid/approval.json",
      "kind": "openontology-approval"
    },
    {
      "fixture": "valid/event.json",
      "kind": "openontology-event"
    }
  ],
  "invalid": [
    {
      "fixture": "invalid/claim-both-objects.json",
      "kind": "openontology-claim",
      "mustFail": true,
      "reason": "A claim object carries an entity reference or a typed value, never both."
    },
    {
      "fixture": "invalid/claim-unknown-status.json",
      "kind": "openontology-claim",
      "mustFail": true,
      "reason": "status must be one of the six declared claim states."
    },
    {
      "fixture": "invalid/claim-confidence-out-of-range.json",
      "kind": "openontology-claim",
      "mustFail": true,
      "reason": "confidence must be between 0 and 1."
    },
    {
      "fixture": "invalid/claim-extra-property.json",
      "kind": "openontology-claim",
      "mustFail": true,
      "reason": "Undeclared properties are rejected; extensions must go in the namespaced extensions object."
    },
    {
      "fixture": "invalid/entity-missing-canonical-name.json",
      "kind": "openontology-entity",
      "mustFail": true,
      "reason": "canonicalName is required on every entity."
    },
    {
      "fixture": "invalid/manifest-no-maintainer.json",
      "kind": "openontology-manifest",
      "mustFail": true,
      "reason": "At least one maintainer is required."
    },
    {
      "fixture": "invalid/manifest-bad-version.json",
      "kind": "openontology-manifest",
      "mustFail": true,
      "reason": "Package versions must be semantic versions."
    },
    {
      "fixture": "invalid/manifest-bad-id.json",
      "kind": "openontology-manifest",
      "mustFail": true,
      "reason": "Package ids are lowercase kebab-case."
    },
    {
      "fixture": "invalid/relationship-no-range.json",
      "kind": "openontology-relationship-type",
      "mustFail": true,
      "reason": "A relationship type must declare at least one allowed object type."
    },
    {
      "fixture": "invalid/evidence-unknown-selector.json",
      "kind": "openontology-evidence",
      "mustFail": true,
      "reason": "Evidence selectors must use one of the declared machine-readable shapes."
    },
    {
      "fixture": "invalid/changeset-empty-operations.json",
      "kind": "openontology-changeset",
      "mustFail": true,
      "reason": "A change set must contain at least one operation."
    },
    {
      "fixture": "invalid/changeset-unknown-op.json",
      "kind": "openontology-changeset",
      "mustFail": true,
      "reason": "Hard deletion is not an operation; use retract-claim or archive-entity."
    },
    {
      "fixture": "invalid/action-no-permissions.json",
      "kind": "openontology-action",
      "mustFail": true,
      "reason": "Actions must declare the scopes they require."
    }
  ]
}
