Skip to main content
Glama

Verify a Claim About a Change

verify_claim
Read-onlyIdempotent

Validates a structured claim about a code change by diffing baseline and changed analysis sessions, returning confirmed, refuted, or indeterminate with reason and evidence.

Instructions

Verify a structured claim about a change by diffing two analyzed sessions (baseline → changed). Supported claim types (MVP): 'no_new_api' (no types/methods were ADDED AND no method signatures changed) and 'symbol_removed_unused' (the named symbol was removed AND had no usages in the baseline's static fan-in graph). Returns a verdict of confirmed / refuted / indeterminate with a reason + evidence. NOTE THE SCOPE OF 'no_new_api': it is about ADDITIONS and SIGNATURE CHANGES, so a REMOVAL does not refute it - a change set that only deletes public API is legitimately 'confirmed'. Removals are therefore never silent: the reason states the boundary and every removal the same diff records is listed as evidence, prefixed '-'. For the removal question ask verify_claim(symbol_removed_unused), or diff_public_contract (outside the default profile's pool). Conservative in BOTH directions: what the diff cannot prove is never falsely confirmed - and never falsely refuted either, because 'was not removed' is a claim about the change that is only made once the string resolves to something this diff could report on. A name that resolves to nothing, a property/field/event/enum member (the diff models types and methods only), and the simple name of a removed type the diff had to render by its FULL name because it is ambiguous, each return 'indeterminate' naming that cause - not a confident 'was not removed'. A removed method whose only baseline callers called an interface or abstract member it implemented (find_usages' viaContract) is 'indeterminate' too: such a call ran its body only when the instance was of its type, and the reason says whether that credit was exact. Baseline and changed must be two states: the same session twice, or two sessions of one solution with an equal file-set hash and an empty diff, answers 'indeterminate' and says so. Unsupported claim types return indeterminate.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "baselineSessionId": "<baselineSessionId>",
      "changedSessionId": "<changedSessionId>",
      "claimType": "<claimType>"
    },
    "name": "verify_claim"
  }
}

Input Schema

NameRequiredDescriptionDefault
symbolNoThe symbol name the claim is about (required for symbol_removed_unused) - a bare name or the qualified Type.Member form, the same strings find_usages / impact_of_change / find_tests_for resolve. A removed type whose simple name is ambiguous solution-wide is recorded under its FULL name; pass that full name for it. A namespace-qualified TYPE name is accepted here even when nothing was removed - this tool resolves it against the baseline's declared type identities, which the fan-in tools (simple name only) do not, and the answer then names the simple name to carry on with. A dotted name no namespace declares stays unresolved rather than falling back to whatever type carries its last segment.
claimTypeYesClaim type: 'no_new_api' or 'symbol_removed_unused'.
changedSessionIdYesThe changed session_id (after the change).
baselineSessionIdYesThe baseline session_id (before the change).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only annotations, it discloses verdict states, evidence behavior, conservative indeterminate causes, session-state requirements, ambiguity handling, and viaContract limitations. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and supported claim types are front-loaded, and the detail is mostly justified by the tool's complexity. However, the description is dense and repetitive in places, especially around the conservative indeterminate cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex verification tool with no output schema, the description explains return values, indeterminate conditions, evidence, and edge cases thoroughly. An agent has enough information to call it correctly and interpret likely outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for `symbol`, including required usage for symbol_removed_unused and accepted qualified-name forms. It also explains claim-type behavior beyond the schema enum-like text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: verify a structured claim about a change by diffing two analyzed sessions. It names the supported claim types and distinguishes this tool from alternatives such as diff_public_contract and find_usages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use each claim type, when to use the alternative diff_public_contract, and that unsupported claim types return indeterminate. The 'no_new_api' scope note directly prevents misuse for removal questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.