{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Trailstate Route Object",
  "version": "0.3",
  "canonical": "https://trailstate.org/grammar/",
  "description": "ASCII Face Routing trailstate object for browser-native AI provenance playback.",
  "type": "object",
  "required": [
    "format",
    "route"
  ],
  "properties": {
    "format": {
      "const": "trailstate-0.3"
    },
    "route": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "o-vvv-o",
          "o-www-o",
          "ovvv-o",
          "o-vvvo",
          "x-vvv-x",
          "q-vvv-p",
          "n-vvv-n",
          "0-vvv-0",
          "p-vvv-q",
          "o-mmm-o",
          "u-vvv-u",
          "d-vvv-b",
          "b-vvv-d"
        ]
      },
      "minItems": 1
    },
    "steps": {
      "type": "array"
    },
    "conflict_present": {
      "type": "boolean"
    },
    "playback_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "states": [
    {
      "state": "o-vvv-o",
      "label": "ROOT FIELD",
      "meaning": "Root field / home state",
      "phase": "root",
      "domain": "https://o-vvv-o.com",
      "conflict": false
    },
    {
      "state": "o-www-o",
      "label": "OPEN WEB",
      "meaning": "Broad web retrieval / noisy scan",
      "phase": "retrieval",
      "domain": "https://o-www-o.com",
      "conflict": false
    },
    {
      "state": "ovvv-o",
      "label": "SCOUT",
      "meaning": "Scout state / contextual search",
      "phase": "retrieval",
      "domain": "https://ovvv-o.com",
      "conflict": false
    },
    {
      "state": "o-vvvo",
      "label": "RETURN",
      "meaning": "Return state / continuity back to field",
      "phase": "continuity",
      "domain": "https://o-vvvo.com",
      "conflict": false
    },
    {
      "state": "x-vvv-x",
      "label": "CONFLICT",
      "meaning": "Conflict detected / contradiction / hallucination risk",
      "phase": "conflict",
      "domain": "https://x-vvv-x.com",
      "conflict": true
    },
    {
      "state": "q-vvv-p",
      "label": "QUESTION",
      "meaning": "Question state / uncertainty made explicit",
      "phase": "question",
      "domain": "https://q-vvv-p.com",
      "conflict": false
    },
    {
      "state": "n-vvv-n",
      "label": "FOCUS",
      "meaning": "Narrowing / focus / validation path",
      "phase": "validation",
      "domain": "https://n-vvv-n.com",
      "conflict": false
    },
    {
      "state": "0-vvv-0",
      "label": "TRUTH PARSE",
      "meaning": "Clean parse / canonical validation",
      "phase": "validation",
      "domain": "https://0-vvv-0.com",
      "conflict": false
    },
    {
      "state": "p-vvv-q",
      "label": "ANSWER RESOLVED",
      "meaning": "Resolved answer / synthesis",
      "phase": "resolution",
      "domain": "https://p-vvv-q.com",
      "conflict": false
    },
    {
      "state": "o-mmm-o",
      "label": "INGEST",
      "meaning": "Ingest / load into memory",
      "phase": "memory",
      "domain": "https://o-mmm-o.com",
      "conflict": false
    },
    {
      "state": "u-vvv-u",
      "label": "ARCHIVE",
      "meaning": "Archive / dormant saved state",
      "phase": "archive",
      "domain": "https://u-vvv-u.com",
      "conflict": false
    },
    {
      "state": "d-vvv-b",
      "label": "OBJECT HELD",
      "meaning": "Object-bound context held",
      "phase": "object",
      "domain": "https://d-vvv-b.com",
      "conflict": false
    },
    {
      "state": "b-vvv-d",
      "label": "OBJECT RELEASED",
      "meaning": "Object released to field",
      "phase": "object",
      "domain": "https://b-vvv-d.com",
      "conflict": false
    }
  ]
}