Skip to main content
Glama

verify_performance

Prove or fail declared performance requirements with uncertainty bands, returning pass, fail, or indeterminate verdicts and recording evidence on the part.

Instructions

Prove (or fail to prove) every requirement declared with declare_performance — the step that turns "a solver printed 0.29" into a claim with a band and a provenance.

A verdict has THREE states. pass and fail each require the measurement's whole uncertainty band to sit on one side of the limit; a band that straddles it is indeterminate, meaning "escalate", not "probably fine". A correlation reading Cd = 0.28 ± 10 % against a limit of 0.30 spans 0.252–0.308 and has NOT shown the part passes — collapsing that to a pass is how a spec silently goes unmet.

tier picks the evidence:

  • 'screen' — each requirement's cheap estimator only. Milliseconds, no solver.

  • 'solver' — the real solve for every requirement.

  • 'auto' (default) — screen first, escalate only what the screen could not decide or what declares fidelity_floor: 'solver'. This is the ladder that keeps a design loop cheap: cheap measurements eliminate candidates, solves confirm survivors.

Trust is part of the measurement, not a footnote: trust: {converged: true} or a band_max_pct cap makes an unconverged (or insufficiently mesh-converged) solve come back indeterminate with the reason, never pass.

Solver-tier measurements are asynchronous, so this returns EITHER the finished verdict (screen-only, or everything already decided) or {job_id, status, pending, results} — poll job_result for the completed verdict. Never raises on a failing requirement; a failure is a row.

Every verdict is also RECORDED on the part, stamped with a geometry signature of the shape it measured (#261). That record is what merge_assembly, substitutability_check and component_contract_check consult, since a gate has to answer synchronously and this may not have: an in-flight solve records rows the gates read as unverified, and editing the part invalidates the signature so they read stale — never a pass on either path.

Returns {handle, tier, ok, n_requirements, passed, failed, indeterminate, escalate, results: [{name, tier, metric, state, measured, limit, band_pct, worst_case, best_case, margin, margin_pct, detail, trust_reasons?, screen?, job_id?}]}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tierNoauto
handleYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so extensively: the three-state verdict semantics (including why a straddling band must be indeterminate, not pass), the trust/convergence rule that forces indeterminate rather than pass, the asynchronous solver-tier behavior with a required poll of job_result, and the guarantee that a failing requirement never raises. It also discloses the side effect of recording verdicts on the part with a geometry signature, and that in-flight solves and edits produce unverified/stale reads at downstream gates — exactly the behavioral context annotations would otherwise supply.

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 is front-loaded in the first sentence, and the description proceeds in logical blocks (verdict states, tier ladder, trust, async, recording, returns). It is long and occasionally rhetorical ('collapsing that to a pass is how a spec silently goes unmet'), but most sentences convey decision-relevant behavior rather than filler.

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, asynchronous, multi-state verification tool with no annotations, no output schema, and 0% schema coverage, the description supplies everything material: the meaning of each verdict state, the tier ladder, trust/convergence handling, async polling, side effects on the part, and an explicit return shape. Nothing an agent needs to invoke it correctly is missing.

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 description coverage is 0%, so the description must compensate and it does so for `tier` with a detailed explanation of each mode and the default. The `handle` parameter, however, is never described — its meaning (the part handle) is only inferable from context. Strong on one of two parameters, silent on the other.

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 opening sentence states a specific verb and resource — prove or fail to prove requirements declared with declare_performance — and frames the tool as the counterpart to that sibling. It further distinguishes itself by naming the gates (merge_assembly, substitutability_check, component_contract_check) that consume its records rather than perform the verification. An agent can identify this tool without opening a schema.

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

Usage Guidelines4/5

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

The `tier` block gives explicit when-to-use guidance for each mode ('screen' for cheap elimination, 'solver' for real solves, 'auto' as the default ladder), and it explains the escalation logic. It also implicitly routes agents to job_result for async polling. It does not contrast with the adjacent verify_intent / verify_contract / verify_feature tools, so the sibling differentiation is partial rather than complete.

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

Deploy Server

Other Tools