Trace

EntityDraftv1.0.0-rc.2

A trace: what one run of a flow or an algorithm did: what it used, each step, what it made, and the verdict. Its terms follow W3C PROV where they map: agents (prov:wasAssociatedWith), inputs (prov:used), outputs (prov:generated).

https://opendevelopmentstandards.org/schema/1.0.0-rc.2/core/Trace.json

Fields

Every entity also has the fields of the Entity base. The first row lists them.

From the Entity baseidnamedescriptionidentifierslinkscreatedAtupdatedAt
  • idRequired
    textnot empty

    The record's id: unique within the document. Fields that point at the record hold this id.

  • name
    text

    The name people use for the record.

  • description
    text

    What the record is, in words.

  • identifiers

    Ids the record has in other systems.

  • links

    Open-ended links to other records.

  • createdAt
    date-time (RFC 3339)

    When the record was created, in its producer's system.

  • updatedAt
    date-time (RFC 3339)

    When the record last changed, in its producer's system.

  • flow

    The flow that ran.

  • flowVersion
    text

    The flow's version when it ran.

  • framework

    The framework the run judged against.

  • statusRequired
    One ofthe codes below

    How the run ended.

    completed
    The run reached its end.
    blocked
    The run waits for a person's decision.
    failed
    The run stopped on an error.
  • summary
    text

    What the run found, in words.

  • startedAt
    date-time (RFC 3339)

    When the run started.

  • endedAt
    date-time (RFC 3339)

    When the run ended.

  • agents
    List ofAgent

    Who or what ran or took part in the run.

  • inputs
    List ofId ofany record

    The ids of the records the run used.

  • outputs
    List ofId ofany record

    The ids of the records the run made, such as evidence.

  • algorithms

    The algorithm versions that ran.

  • parametersconfidential
    object with any keys

    The run's full settings, such as a solver's grid and its turbulence settings.

  • inputsHash
    textmatches ^[0-9a-f]{64}$

    The SHA-256 of the canonical JSON (RFC 8785) of the run's inputs, in lower-case hex.

  • snapshot

    The file that holds the run's full inputs.

  • draft
    true or false

    True when the run is a draft and not for release.

  • scenarioValuesconfidential

    The values the run was given, with who set each one.

  • steps
    List ofTraceStep

    What each step did, in the order the steps ran.

  • verdict
  • justification
  • findings

    Findings about the run as a whole.

  • comparisons

    Comparisons the run made, such as a validation run against benchmarks.

  • controls

    The controls the run had to meet.

Agent

One agent of a run.

  • agentRequired
    Id ofany record

    The id of the stakeholder or algorithm.

  • role
    text

    The part it played, such as author, reviewer or engine.

ScenarioValue

One value a run was given.

  • keyRequired
    textnot empty

    The value's key.

  • value
    numberortextortrue or falseornullorList ofnumberortextortrue or falseornull

    The value: a number, text, true or false, or a list of these.

  • setBy
    One ofthe codes below

    Who set the value.

    flow
    The flow.
    person
    A person, for this run.
    default
    A default of the producer.
    context
    The context the run was given.

StepValue

A value a step read or wrote.

  • nameRequired
    textnot empty

    The input's or output's name on the step.

  • quantity

    What the value describes, from a quantities vocabulary, such as a_weighted_sound_pressure_level. With it, the value uses the term's unit.

  • value

    The value, when it is one amount or a list of amounts. A list or an object that is not an amount is in data; one too large to write here sits in a File (file).

  • count
    whole numberat least 0

    The number of items of a list, or of fields of an object.

  • records
    List ofId ofany record

    The records the value stands for, in order, such as the receptors a step read or the evidence it wrote.

  • data
    object with any keysorList ofvalues

    The list or the object itself, as the producer wrote it, when it is not one amount. With it, a reader needs no other file to repeat the step. A value too large to write here sits in a File, under value.file.

  • snapshotKey
    text

    Where the full value sits in the snapshot.

  • variable
    text

    The variable the value came from.

  • sources
    List ofnullorobject, fields below

    Where the value came from, when another trace of the document wrote it: one item for each item of the value's list, or one item for one amount. An item names the trace and the name it wrote the value under; null names no source. A check compares each item with what that trace wrote.

  • fallback
    object, fields below

    When the step filled an empty input from a fallback: what it read and the value it ran with.

    • typeRequired
      One ofthe codes below

      What the step read instead.

      parameters
      The run's parameters.
      scenario
      A scenario value, under `key`.
      engine_default
      A constant in the engine.
    • key
      text

      The key read.

    • value

      The value the step ran with.

TraceStep

What one step did in a run.

  • stepRequired

    The step that ran.

  • agent
    Id ofany record

    The id of who or what did the step.

  • startedAt
    date-time (RFC 3339)

    When the step started.

  • endedAt
    date-time (RFC 3339)

    When the step ended.

  • summary
    text

    What the step did, in words.

  • sealed
    true or false

    True when the step was sealed: its inputs and outputs are here, its internals are not.

  • inputs
    List ofStepValue

    What the step read.

  • outputs
    List ofStepValue

    What the step wrote.

  • decision
    object, fields below

    For a decision: what it tested and where the flow went.

    • edge

      The edge the flow took.

    • evaluated
      numberortextortrue or falseornull

      The value the decision tested.

    • branches
      List ofobject, fields below

      Each edge the decision could take, and whether it matched and was taken.

      • edgeRequired

        The edge.

      • label
        text

        Its label.

      • matched
        true or false

        True when its when held.

      • taken
        true or false

        True when the flow took it.

  • traces
    List ofId ofTrace

    For a flow step: the runs the step started, in order.

  • oversight
    object, fields below

    A person's approval of the step.

    • required
      true or false

      True when a person had to approve the step.

    • status
      One ofthe codes below

      Where the approval stands.

      pending
      Not decided yet.
      approved
      A person approved it.
      rejected
      A person rejected it.
    • approvedBy

      Who decided.

    • approvedAt
      date-time (RFC 3339)

      When they decided.

    • authority

      The rule that asks for the approval.

  • findings

    Findings about the step.

Verdict

The run's verdict against its criteria. Leave it out when the run judged nothing.

  • levelRequired
    One ofthe codes below

    The verdict. The worst result decides: one criterion that is not met makes it fail, and the run's verdict is the worst level of its subjects that have one.

    pass
    Every criterion judged is met.
    partial
    No criterion judged failed, and at least one is met only in part, such as with a warning or a condition.
    fail
    At least one criterion judged is not met.
  • subjects
    List ofobject, fields below

    The verdict for each thing judged, such as each receptor. A subject that was not judged has no level.

    • nameRequired
      text

      What was judged, such as one receptor.

    • level
      One ofthe codes below

      Its verdict. Leave it out when the subject was not judged.

      pass
      Every criterion judged is met.
      partial
      No criterion judged failed, and at least one is met only in part, such as with a warning or a condition.
      fail
      At least one criterion judged is not met.
    • reason
      text

      Why the subject has no level, when it was not judged.

    • counts
      object, fields below

      How many criteria had each verdict.

      • pass
        whole numberat least 0

        Criteria met.

      • partial
        whole numberat least 0

        Criteria partly met.

      • fail
        whole numberat least 0

        Criteria not met.

    • total
      whole numberat least 0

      How many criteria were judged.

  • basis
    text

    Why the verdict is what it is, in words.

  • variables
    List oftext

    The variables the verdict rests on.

Justification

Why the run's outcome follows from its inputs.

  • summary
    text

    Why the outcome follows, in words.

  • inputs
    List oftext

    The inputs the outcome rests on.

  • citations

    The published works the outcome rests on.

Links

Points at Records whose ids this record holds, with the field that holds each.

Held by Records that embed this one, with their field that holds it.

Examples

An id that another example defines opens that record.

Full example

{
  "id": "trace-0412-night",
  "flow": "flow-d038",
  "flowVersion": "3",
  "framework": "framework-d038",
  "status": "completed",
  "startedAt": "2026-07-20T16:02:11Z",
  "endedAt": "2026-07-20T16:02:19Z",
  "agents": [
    {
      "agent": "stakeholder-consultant",
      "role": "author"
    },
    {
      "agent": "algorithm-iso9613",
      "role": "engine"
    }
  ],
  "inputs": [
    "feature-wellsite",
    "feature-dwelling",
    "weather-2026-07-14T22"
  ],
  "outputs": [
    "evidence-predicted-night"
  ],
  "algorithms": [
    "algorithm-iso9613"
  ],
  "inputsHash": "9f2c1e4b7a0d3c5e8f6a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f5a6",
  "steps": [
    {
      "step": "step-propagation",
      "sealed": true,
      "outputs": [
        {
          "name": "receptor_levels",
          "value": {
            "amount": [
              36.4
            ],
            "unit": "dB"
          }
        }
      ]
    }
  ],
  "verdict": {
    "level": "pass",
    "basis": "Every dwelling meets the night-time permissible sound level."
  }
}
Show 1 more example

Minimal example: the required fields only

{
  "id": "trace-1",
  "status": "completed"
}

Changes and file

Changes

  1. 0.1.0 First version.

Schema file

Show the JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://opendevelopmentstandards.org/schema/1.0.0-rc.2/core/Trace.json",
  "title": "Trace",
  "description": "A trace: what one run of a flow or an algorithm did: what it used, each step, what it made, and the verdict. Its terms follow W3C PROV where they map: agents (prov:wasAssociatedWith), inputs (prov:used), outputs (prov:generated).",
  "$ref": "Entity.json",
  "type": "object",
  "properties": {
    "flow": {
      "type": "string",
      "minLength": 1,
      "x-ods-ref": "Flow",
      "description": "The flow that ran."
    },
    "flowVersion": {
      "type": "string",
      "description": "The flow's version when it ran."
    },
    "framework": {
      "type": "string",
      "minLength": 1,
      "x-ods-ref": "Framework",
      "description": "The framework the run judged against."
    },
    "status": {
      "type": "string",
      "enum": [
        "completed",
        "blocked",
        "failed"
      ],
      "description": "How the run ended.",
      "x-ods-options": [
        {
          "value": "completed",
          "title": "Completed",
          "description": "The run reached its end."
        },
        {
          "value": "blocked",
          "title": "Blocked",
          "description": "The run waits for a person's decision."
        },
        {
          "value": "failed",
          "title": "Failed",
          "description": "The run stopped on an error."
        }
      ]
    },
    "summary": {
      "type": "string",
      "description": "What the run found, in words."
    },
    "startedAt": {
      "type": "string",
      "format": "date-time",
      "description": "When the run started."
    },
    "endedAt": {
      "type": "string",
      "format": "date-time",
      "description": "When the run ended."
    },
    "agents": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Agent"
      },
      "description": "Who or what ran or took part in the run."
    },
    "inputs": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "x-ods-ref": "*"
      },
      "description": "The ids of the records the run used."
    },
    "outputs": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "x-ods-ref": "*"
      },
      "description": "The ids of the records the run made, such as evidence."
    },
    "algorithms": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "x-ods-ref": "Algorithm"
      },
      "description": "The algorithm versions that ran."
    },
    "parameters": {
      "type": "object",
      "x-ods-open": true,
      "description": "The run's full settings, such as a solver's grid and its turbulence settings.",
      "x-ods-personal": "confidential"
    },
    "inputsHash": {
      "type": "string",
      "description": "The SHA-256 of the canonical JSON (RFC 8785) of the run's inputs, in lower-case hex.",
      "pattern": "^[0-9a-f]{64}$"
    },
    "snapshot": {
      "type": "string",
      "minLength": 1,
      "x-ods-ref": "File",
      "description": "The file that holds the run's full inputs."
    },
    "draft": {
      "type": "boolean",
      "description": "True when the run is a draft and not for release."
    },
    "scenarioValues": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ScenarioValue"
      },
      "description": "The values the run was given, with who set each one.",
      "x-ods-personal": "confidential"
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TraceStep"
      },
      "description": "What each step did, in the order the steps ran."
    },
    "verdict": {
      "$ref": "#/$defs/Verdict"
    },
    "justification": {
      "$ref": "#/$defs/Justification"
    },
    "findings": {
      "type": "array",
      "items": {
        "$ref": "Finding.json"
      },
      "description": "Findings about the run as a whole."
    },
    "comparisons": {
      "type": "array",
      "items": {
        "$ref": "Comparison.json"
      },
      "description": "Comparisons the run made, such as a validation run against benchmarks."
    },
    "controls": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "x-ods-ref": "Control"
      },
      "description": "The controls the run had to meet."
    }
  },
  "required": [
    "status"
  ],
  "patternProperties": {
    "^x-": {}
  },
  "unevaluatedProperties": false,
  "$defs": {
    "Agent": {
      "type": "object",
      "properties": {
        "agent": {
          "type": "string",
          "description": "The id of the stakeholder or algorithm.",
          "minLength": 1,
          "x-ods-ref": "*"
        },
        "role": {
          "type": "string",
          "description": "The part it played, such as author, reviewer or engine."
        }
      },
      "required": [
        "agent"
      ],
      "description": "One agent of a run.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    },
    "ScenarioValue": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "The value's key.",
          "minLength": 1
        },
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string"
            },
            {
              "type": "boolean"
            },
            {
              "type": "null"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          ],
          "description": "The value: a number, text, true or false, or a list of these."
        },
        "setBy": {
          "type": "string",
          "enum": [
            "flow",
            "person",
            "default",
            "context"
          ],
          "description": "Who set the value.",
          "x-ods-options": [
            {
              "value": "flow",
              "title": "Flow",
              "description": "The flow."
            },
            {
              "value": "person",
              "title": "Person",
              "description": "A person, for this run."
            },
            {
              "value": "default",
              "title": "Default",
              "description": "A default of the producer."
            },
            {
              "value": "context",
              "title": "Context",
              "description": "The context the run was given."
            }
          ]
        }
      },
      "required": [
        "key"
      ],
      "description": "One value a run was given.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    },
    "StepValue": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The input's or output's name on the step.",
          "minLength": 1
        },
        "quantity": {
          "type": "string",
          "pattern": "^[a-z0-9]+(_[a-z0-9]+)*(\\.[a-z0-9]+(_[a-z0-9]+)*)*$",
          "x-ods-vocabulary": "*/quantities",
          "description": "What the value describes, from a quantities vocabulary, such as `a_weighted_sound_pressure_level`. With it, the value uses the term's unit."
        },
        "value": {
          "$ref": "Value.json",
          "description": "The value, when it is one amount or a list of amounts. A list or an object that is not an amount is in `data`; one too large to write here sits in a File (`file`)."
        },
        "count": {
          "type": "integer",
          "minimum": 0,
          "description": "The number of items of a list, or of fields of an object."
        },
        "records": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "x-ods-ref": "*"
          },
          "description": "The records the value stands for, in order, such as the receptors a step read or the evidence it wrote."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "x-ods-open": true
            },
            {
              "type": "array"
            }
          ],
          "description": "The list or the object itself, as the producer wrote it, when it is not one amount. With it, a reader needs no other file to repeat the step. A value too large to write here sits in a File, under `value.file`."
        },
        "snapshotKey": {
          "type": "string",
          "description": "Where the full value sits in the snapshot."
        },
        "variable": {
          "type": "string",
          "description": "The variable the value came from."
        },
        "sources": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "trace": {
                    "type": "string",
                    "minLength": 1,
                    "x-ods-ref": "Trace",
                    "description": "The trace that wrote the value."
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "description": "The name that trace wrote it under. The last value of that name counts."
                  }
                },
                "required": [
                  "trace",
                  "name"
                ],
                "patternProperties": {
                  "^x-": {}
                },
                "unevaluatedProperties": false
              }
            ]
          },
          "description": "Where the value came from, when another trace of the document wrote it: one item for each item of the value's list, or one item for one amount. An item names the trace and the name it wrote the value under; null names no source. A check compares each item with what that trace wrote."
        },
        "fallback": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "parameters",
                "scenario",
                "engine_default"
              ],
              "description": "What the step read instead.",
              "x-ods-options": [
                {
                  "value": "parameters",
                  "title": "Parameters",
                  "description": "The run's parameters."
                },
                {
                  "value": "scenario",
                  "title": "Scenario",
                  "description": "A scenario value, under `key`."
                },
                {
                  "value": "engine_default",
                  "title": "Engine default",
                  "description": "A constant in the engine."
                }
              ]
            },
            "key": {
              "type": "string",
              "description": "The key read."
            },
            "value": {
              "$ref": "Value.json",
              "description": "The value the step ran with."
            }
          },
          "required": [
            "type"
          ],
          "description": "When the step filled an empty input from a fallback: what it read and the value it ran with.",
          "patternProperties": {
            "^x-": {}
          },
          "unevaluatedProperties": false
        }
      },
      "required": [
        "name"
      ],
      "description": "A value a step read or wrote.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    },
    "TraceStep": {
      "type": "object",
      "properties": {
        "step": {
          "type": "string",
          "minLength": 1,
          "x-ods-ref": "Step",
          "description": "The step that ran."
        },
        "agent": {
          "type": "string",
          "description": "The id of who or what did the step.",
          "x-ods-ref": "*"
        },
        "startedAt": {
          "type": "string",
          "format": "date-time",
          "description": "When the step started."
        },
        "endedAt": {
          "type": "string",
          "format": "date-time",
          "description": "When the step ended."
        },
        "summary": {
          "type": "string",
          "description": "What the step did, in words."
        },
        "sealed": {
          "type": "boolean",
          "description": "True when the step was sealed: its inputs and outputs are here, its internals are not."
        },
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/StepValue"
          },
          "description": "What the step read."
        },
        "outputs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/StepValue"
          },
          "description": "What the step wrote."
        },
        "decision": {
          "type": "object",
          "properties": {
            "edge": {
              "type": "string",
              "minLength": 1,
              "x-ods-ref": "Edge",
              "description": "The edge the flow took."
            },
            "evaluated": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The value the decision tested."
            },
            "branches": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "edge": {
                    "type": "string",
                    "minLength": 1,
                    "x-ods-ref": "Edge",
                    "description": "The edge."
                  },
                  "label": {
                    "type": "string",
                    "description": "Its label."
                  },
                  "matched": {
                    "type": "boolean",
                    "description": "True when its `when` held."
                  },
                  "taken": {
                    "type": "boolean",
                    "description": "True when the flow took it."
                  }
                },
                "required": [
                  "edge"
                ],
                "patternProperties": {
                  "^x-": {}
                },
                "unevaluatedProperties": false
              },
              "description": "Each edge the decision could take, and whether it matched and was taken."
            }
          },
          "description": "For a decision: what it tested and where the flow went.",
          "patternProperties": {
            "^x-": {}
          },
          "unevaluatedProperties": false
        },
        "traces": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "x-ods-ref": "Trace"
          },
          "description": "For a flow step: the runs the step started, in order."
        },
        "oversight": {
          "type": "object",
          "properties": {
            "required": {
              "type": "boolean",
              "description": "True when a person had to approve the step."
            },
            "status": {
              "type": "string",
              "enum": [
                "pending",
                "approved",
                "rejected"
              ],
              "description": "Where the approval stands.",
              "x-ods-options": [
                {
                  "value": "pending",
                  "title": "Pending",
                  "description": "Not decided yet."
                },
                {
                  "value": "approved",
                  "title": "Approved",
                  "description": "A person approved it."
                },
                {
                  "value": "rejected",
                  "title": "Rejected",
                  "description": "A person rejected it."
                }
              ]
            },
            "approvedBy": {
              "type": "string",
              "minLength": 1,
              "x-ods-ref": "Stakeholder",
              "description": "Who decided."
            },
            "approvedAt": {
              "type": "string",
              "format": "date-time",
              "description": "When they decided."
            },
            "authority": {
              "$ref": "Citation.json",
              "description": "The rule that asks for the approval."
            }
          },
          "description": "A person's approval of the step.",
          "patternProperties": {
            "^x-": {}
          },
          "unevaluatedProperties": false
        },
        "findings": {
          "type": "array",
          "items": {
            "$ref": "Finding.json"
          },
          "description": "Findings about the step."
        }
      },
      "required": [
        "step"
      ],
      "description": "What one step did in a run.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    },
    "Verdict": {
      "type": "object",
      "properties": {
        "level": {
          "type": "string",
          "enum": [
            "pass",
            "partial",
            "fail"
          ],
          "description": "The verdict. The worst result decides: one criterion that is not met makes it fail, and the run's verdict is the worst level of its subjects that have one.",
          "x-ods-options": [
            {
              "value": "pass",
              "title": "Pass",
              "description": "Every criterion judged is met."
            },
            {
              "value": "partial",
              "title": "Partial",
              "description": "No criterion judged failed, and at least one is met only in part, such as with a warning or a condition."
            },
            {
              "value": "fail",
              "title": "Fail",
              "description": "At least one criterion judged is not met."
            }
          ]
        },
        "subjects": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "What was judged, such as one receptor."
              },
              "level": {
                "type": "string",
                "enum": [
                  "pass",
                  "partial",
                  "fail"
                ],
                "description": "Its verdict. Leave it out when the subject was not judged.",
                "x-ods-options": [
                  {
                    "value": "pass",
                    "title": "Pass",
                    "description": "Every criterion judged is met."
                  },
                  {
                    "value": "partial",
                    "title": "Partial",
                    "description": "No criterion judged failed, and at least one is met only in part, such as with a warning or a condition."
                  },
                  {
                    "value": "fail",
                    "title": "Fail",
                    "description": "At least one criterion judged is not met."
                  }
                ]
              },
              "reason": {
                "type": "string",
                "description": "Why the subject has no level, when it was not judged."
              },
              "counts": {
                "type": "object",
                "properties": {
                  "pass": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Criteria met."
                  },
                  "partial": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Criteria partly met."
                  },
                  "fail": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Criteria not met."
                  }
                },
                "description": "How many criteria had each verdict.",
                "patternProperties": {
                  "^x-": {}
                },
                "unevaluatedProperties": false
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "description": "How many criteria were judged."
              }
            },
            "required": [
              "name"
            ],
            "patternProperties": {
              "^x-": {}
            },
            "unevaluatedProperties": false
          },
          "description": "The verdict for each thing judged, such as each receptor. A subject that was not judged has no level."
        },
        "basis": {
          "type": "string",
          "description": "Why the verdict is what it is, in words."
        },
        "variables": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The variables the verdict rests on."
        }
      },
      "required": [
        "level"
      ],
      "description": "The run's verdict against its criteria. Leave it out when the run judged nothing.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    },
    "Justification": {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string",
          "description": "Why the outcome follows, in words."
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The inputs the outcome rests on."
        },
        "citations": {
          "type": "array",
          "items": {
            "$ref": "Citation.json"
          },
          "description": "The published works the outcome rests on."
        }
      },
      "description": "Why the run's outcome follows from its inputs.",
      "patternProperties": {
        "^x-": {}
      },
      "unevaluatedProperties": false
    }
  },
  "examples": [
    {
      "id": "trace-1",
      "status": "completed"
    },
    {
      "id": "trace-0412-night",
      "flow": "flow-d038",
      "flowVersion": "3",
      "framework": "framework-d038",
      "status": "completed",
      "startedAt": "2026-07-20T16:02:11Z",
      "endedAt": "2026-07-20T16:02:19Z",
      "agents": [
        {
          "agent": "stakeholder-consultant",
          "role": "author"
        },
        {
          "agent": "algorithm-iso9613",
          "role": "engine"
        }
      ],
      "inputs": [
        "feature-wellsite",
        "feature-dwelling",
        "weather-2026-07-14T22"
      ],
      "outputs": [
        "evidence-predicted-night"
      ],
      "algorithms": [
        "algorithm-iso9613"
      ],
      "inputsHash": "9f2c1e4b7a0d3c5e8f6a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f5a6",
      "steps": [
        {
          "step": "step-propagation",
          "sealed": true,
          "outputs": [
            {
              "name": "receptor_levels",
              "value": {
                "amount": [
                  36.4
                ],
                "unit": "dB"
              }
            }
          ]
        }
      ],
      "verdict": {
        "level": "pass",
        "basis": "Every dwelling meets the night-time permissible sound level."
      }
    }
  ],
  "x-ods-status": "draft",
  "x-ods-kind": "entity",
  "x-ods-module": "core",
  "x-ods-changes": {
    "0.1.0": "First version."
  }
}