Skip to content

cora-mcp-verify

verify_fix’s result: the verdict on a fix of one issue, from a rescan of the issue’s page in the browser and viewport it was found in. It gives the element’s accessibility-tree entries the verdict compared, the attempts at the issue so far and what to do next. The call records the attempt in the issue’s remediation loop, and the rescan as a run of its own.

Each version lists its fields, then a section for each object they hold, headed by its path, in which [] stands for each entry of a list. Where objects of several kinds share a path, each kind has a section, named by the field that tells them apart. A field marked required is in every object of its kind, and the description of any other says when it is absent.

The version this release writes. Its JSON Schema is schemas/cora-mcp-verify/v1.json in the @vispero/cora package and at https://cora.vispero.com/docs/0.10/schemas/cora-mcp-verify/v1.json.

  • format (“cora-mcp-verify”, required): The result’s format, always cora-mcp-verify.
  • version (1, required): The version of cora-mcp’s tool surface, which every result and error of its tools declares.
  • issue (string, required): The issue’s ID, as the call named it, which may be any ID the issue’s loop has held.
  • verdict (“fixed”, “still-failing”, “suppressed” or “inconclusive”, required): The verdict on the fix: fixed when the rescan covered the rule where the element is and no longer finds the issue there, and the element is still exposed to assistive technology, or only pruned by the browser as a node of no interest; still-failing when the rescan still finds it, under listedAs; suppressed when the fix hid the element from assistive technology rather than fixing it, such as with aria-hidden, display: none or an empty alt; or inconclusive when the rescan cannot judge the fix, with reason saying why. A fixed verdict means the rule no longer finds the issue, not that the element is accessible.
  • reason (object): Why the rescan cannot judge the fix, as a code and a sentence, the sentence cut short, ending with …, when it is long; present exactly when verdict is inconclusive.
  • listedAs (string): The ID the rescan lists the issue under, which explain_finding takes with the rescan’s run; present exactly when verdict is still-failing. It differs from issue when the fix changed what the ID is computed from, such as the element’s opening tag on an app built with CORA’s source stamps or Angular’s source locations.
  • report (true): true when verdict is still-failing and cora scan’s report of the rescan lists the issue, under listedAs, as report-only: its violations are of rules the project’s rule selection sets to report on their page, beside any in a page state an agent reached, so its findings are shown but never fail CI’s gate and are never baselined. Absent otherwise, as on an issue still found that needs review, and for every other verdict, since the rescan then finds no issue.
  • accepted (true): true when verdict is still-failing and the project’s baseline accepts the issue as the rescan lists it, under listedAs, as cora scan counts it, so CI’s gate does not fail on it. Absent otherwise, as on a page state an agent reached, which no gate compares with a baseline.
  • unsettled (object): The settle timeout that passed, when the rescan’s page did not settle before it was scanned, so the verdict may judge a page still changing; absent when the page settled.
  • before (object, required): The element’s entry in the browser’s accessibility tree when the issue’s loop started, as the scan that started it read the element, or why it has none. Its texts from the page are cut short, ending with …, when they are long, and its states, or an excluded entry’s reasons, are kept in order while the list has room, each cut short too.
  • after (object, required): The element’s entry in the rescan’s accessibility tree, or why it has none, cut as before is. The rescan finds the element by the path and selector the loop recorded or, on an app built with CORA’s source stamps or Angular’s source locations, when they lead to no element, by the one element whose stamp or location starts where its opening tag did.
  • attempts (integer, required): How many attempts at the issue its loop has recorded, this one included.
  • next (“continue”, “done” or “escalate”, required): What to do next, by the loop’s policy: continue fixing the issue, done once this attempt fixed it, or escalate it to a person once the attempts its loop allows have not fixed it.
  • run (string, required): The ID of the rescan’s run, which explain_finding takes: its start time and eight random characters, such as 20261005T221403123Z-k3j9x2ab.
  • file (string, required): The rescan’s run file, a cora-results file in the state directory’s runs/ (.cora/runs/ by default): its path relative to the project root when it is inside the project, and absolute otherwise.
  • code (“not-covered”, “evidence-unavailable”, “element-missing” or “unclear-exclusion”, required): Why, as a code: not-covered when the rescan did not run the issue’s rule where its element is, on its page in its browser and viewport, or ran it there only in part; evidence-unavailable when an accessibility entry the verdict needs could not be read, or the rescan finds the rule on an element it cannot tell apart from the one the loop follows; element-missing when the element the loop follows is not on the page at its path and selector, and its source stamp, where its opening tag has one, leads to no single element; and unclear-exclusion when the browser leaves the element out of its accessibility tree for a reason that shows neither a fix nor a hidden element, such as a modal dialog open over it.
  • detail (string, required): The reason in a sentence, such as the rule the rescan did not run and the page it did not run it on.
  • timeout (integer, required): The settle timeout that passed before the page settled, in milliseconds: the config’s page.settle.timeout for the page.

Also at: after

  • status (“missing”, required): What became of the element’s entry: missing when its reference leads to no single element, excluded when the browser leaves the element out of the tree, included when the tree holds it, and unavailable when the entry could not be read.

Also at: after

  • status (“excluded”, required): What became of the element’s entry: missing when its reference leads to no single element, excluded when the browser leaves the element out of the tree, included when the tree holds it, and unavailable when the entry could not be read.
  • reasons (array of strings, required): The browser’s names for why it leaves the element out, at least one, such as notRendered or ariaHiddenElement. An open set, which differs between browser versions.

Also at: after

  • status (“included”, required): What became of the element’s entry: missing when its reference leads to no single element, excluded when the browser leaves the element out of the tree, included when the tree holds it, and unavailable when the entry could not be read.
  • role (string, required): The element’s role in the tree, such as button.
  • name (string, required): The accessible name; empty when the element has none.
  • description (string): The accessible description; absent when the element has none.
  • states (object of string, number or boolean, required): Each asserted property’s value by its name, such as focusable: true; a property that is not asserted has no key. A tristate, such as checked or pressed, is true, false or mixed as a string, and a number stays a number.

Also at: after

  • status (“unavailable”, required): What became of the element’s entry: missing when its reference leads to no single element, excluded when the browser leaves the element out of the tree, included when the tree holds it, and unavailable when the entry could not be read.
  • reason (“facet-absent”, “failed” or “timed-out”, required): Why the entry could not be read: facet-absent when the browser cannot give one, as only Chromium gives accessibility entries; failed when reading it failed on this element; and timed-out when the capture’s time ran out first.