{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://solvyn.com/artifacts/solv-v0.1/portable-solv-v1.schema.json",
  "title": "Solvyn portable .solv manifest — solv-v1 interoperable core",
  "description": "Public draft schema for the producer-neutral interoperable core of the solv-v1 portable Case. Compatible producers may carry additional sealed metadata specific to their execution environment. This is not a ratified industry standard or a promise of frozen 1.0 compatibility.",
  "type": "object",
  "required": [
    "caseIds",
    "sealed",
    "config",
    "meta",
    "fixTrail",
    "cryptographicSeal"
  ],
  "properties": {
    "caseIds": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "sealed": {
      "const": true
    },
    "config": {
      "type": "object",
      "required": [
        "format"
      ],
      "properties": {
        "format": {
          "const": "solv-v1"
        },
        "profile": {
          "type": "string",
          "description": "Optional public interchange-profile identifier associated with the Case."
        },
        "continuity": {
          "type": "object",
          "properties": {
            "lineage_key": {
              "type": [
                "string",
                "null"
              ],
              "description": "Optional producer-defined lineage key grouping related Cases."
            },
            "prev_case_id": {
              "type": [
                "string",
                "null"
              ],
              "description": "Prior Case identity in the declared continuity chain, or null when none exists."
            },
            "prev_case_seal": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^sha256:[0-9a-f]{64}$",
              "description": "Full content seal of the prior Case in the declared continuity chain, or null when none exists."
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "meta": {
      "type": "object",
      "required": [
        "agent",
        "occurredAt",
        "hash",
        "narrative",
        "createdBy",
        "sourceType",
        "provenance",
        "datasetHash",
        "envHash",
        "domain",
        "system"
      ],
      "properties": {
        "agent": {
          "type": "string"
        },
        "occurredAt": {
          "type": "string",
          "format": "date-time"
        },
        "timeBasis": {
          "type": "string",
          "enum": [
            "world_time",
            "wall_clock"
          ],
          "description": "Optional basis for meta.occurredAt. wall_clock denotes a wall-clock date/time. world_time denotes a producer-defined simulated or logical environment clock. Absence remains valid for compatible earlier solv-v1 Cases. This field qualifies occurredAt only."
        },
        "hash": {
          "type": "string",
          "pattern": "^0x[0-9A-F]{12}$"
        },
        "integrityScore": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "deprecated": true,
          "description": "Legacy heuristic retained only for backwards compatibility. It is not cryptographic verification and is not recommended for newly produced Cases."
        },
        "narrative": {
          "type": "string"
        },
        "createdBy": {
          "type": "string"
        },
        "sourceType": {
          "type": "string"
        },
        "provenance": {
          "type": "string"
        },
        "datasetHash": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "envHash": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "domain": {
          "type": "string"
        },
        "system": {
          "type": "string"
        },
        "tickId": {
          "type": "integer",
          "deprecated": true,
          "description": "Legacy producer-specific execution ordinal retained for compatibility with existing solv-v1 Cases. It is not a timestamp and is not required by producer-neutral Cases."
        },
        "plain_summary": {
          "type": "string"
        },
        "evidence_index_ref": {
          "type": "string",
          "description": "Optional package-relative evidence-index reference. Meaningful only when the referenced companion artifact is actually supplied."
        },
        "human_readable_seal_explanation": {
          "type": "string",
          "description": "Optional human-readable explanation of the deterministic content seal and its trust boundary."
        },
        "verify_command": {
          "type": "string",
          "description": "Optional package-local verification command. Meaningful only when the referenced verifier actually travels with the package."
        },
        "verify_url": {
          "type": "string",
          "format": "uri",
          "description": "Optional producer verification endpoint that actually applies to the Case."
        },
        "synthetic_reference": {
          "type": "boolean",
          "description": "Optional declaration that the Case is a synthetic reference fixture."
        },
        "customer_data": {
          "type": "boolean",
          "description": "Optional declaration about inclusion of customer data."
        }
      },
      "additionalProperties": true
    },
    "fixTrail": {
      "type": "array",
      "description": "Compatibility field retained by solv-v1. Current sealed Cases are immutable; corrections or later findings receive separate Case identity and lineage rather than rewriting the sealed record."
    },
    "cryptographicSeal": {
      "type": "string",
      "pattern": "^sha256:[0-9a-f]{64}$"
    }
  },
  "additionalProperties": true
}
