{
  "isError" : false,
  "request" : {
    "file" : "a.ek9",
    "line" : 10
  },
  "response" : {
    "afferent" : [ ],
    "anchor" : {
      "detail" : "E05150",
      "file" : "a.ek9",
      "fullyQualifiedName" : "purity.probe.a::Derived.calc()",
      "label" : "Derived.calc()",
      "line" : 10,
      "verdict" : "fixable"
    },
    "availableChanges" : [ "add-pure" ],
    "calleeNames" : [ ],
    "callerNames" : [ ],
    "change" : "add-pure",
    "changeKind" : "purity",
    "contract" : [ {
      "detail" : "contract root",
      "file" : "a.ek9",
      "fullyQualifiedName" : "purity.probe.a::Base.calc()",
      "label" : "Base.calc()",
      "line" : 6,
      "verdict" : "root"
    }, {
      "detail" : "override — aligns to root",
      "file" : "a.ek9",
      "fullyQualifiedName" : "purity.probe.a::Derived.calc()",
      "label" : "Derived.calc()",
      "line" : 10,
      "verdict" : "fixable"
    } ],
    "efferent" : [ ],
    "meta" : {
      "serverMs" : "<timing>"
    },
    "note" : "Read-only preview. 'verdict' and the closures are the SAME the fix tool applies; drive the change with ek9_fix_purity_contract using the matching mode.",
    "status" : "ok",
    "summary" : {
      "afferent" : 0,
      "cascadeThreshold" : 25,
      "contract" : 2,
      "efferent" : 0
    },
    "verdict" : "ready"
  },
  "scenario" : "e05150_contract_axis",
  "tool" : "query_purity_impact"
}
