PerfLens MCP Server
This PerfLens MCP server enables evidence-driven Linux performance analysis. You can:
Analyze profiles from folded stacks,
perf scriptoutput, orperf.datafiles (analyze_profile).Inspect hotspots: list, get details (dominant call paths, classifications, source locations), and explore call paths (
list_hotspots,get_hotspot_details,get_call_paths).Classify hotspots (
classify_hotspots) and build complete diagnosis bundles with evidence (build_diagnosis_bundle).Read stored JSON artifacts in paginated chunks (
read_artifact_page).Resolve binary module offsets to source locations (
resolve_source) and retrieve bounded source context (get_source_context).Normalize and compare benchmark results from pyperf, Google Benchmark, or hyperfine (
analyze_benchmark,compare_benchmarks).Compare two profile analyses to highlight performance differences (
compare_profiles).Actively collect perf data (record, stat, sched, lock, off‑CPU) with explicit authorization (
collect_profile).
All tools operate under a typed permission model (read‑only, write artifacts, process execution, active collection) for safe usage.
Provides evidence-driven performance analysis for Linux applications, including profiling, hotspot classification, source resolution, and benchmark comparison.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PerfLens MCP Serveranalyze perf.data and show hotspots"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PerfLens
Evidence-driven Linux performance analysis with a CLI, MCP Server, and project Skills for Codex, Claude Code, OpenCode, and local GitHub Copilot clients. 基于证据的 Linux 性能分析工具,支持 Codex、Claude Code、OpenCode 与本地 GitHub Copilot 客户端。
简体中文 | English
First installation: read Installation and first use. Do not extract the wheel; install it with pipx or uv.
After DEB installation, sudo perflens-admin setup selects the host Collector mode.
perflens init then detects that safely deployed mode per project. See the
Collector privilege-mode lifecycle for dry-runs,
switching, rollback, and project resynchronization.
See the Collector and user-space-lock roadmap for the
current maturity boundary and phased extension plan. Release v0.3.1 local-Docker single-process
support is specified separately in the Docker process guide.
The v0.3.2 bounded build-and-optimize contract is tracked in the
Docker optimization guide.
See the trustworthy perf evidence pipeline for raw-input binding,
conversion provenance, quality gates, and Agent-facing verification.
PerfLens is an evidence-driven performance-analysis toolkit for Linux applications and coding agents.
Release v0.3.2 supports Milestones 0 through 9:
streaming FlameGraph-compatible folded stack input;
deterministic self and inclusive hotspot aggregation;
root-to-leaf call-path aggregation;
symbol plus DSO grouping (DSO is explicitly
unknownfor standard folded input);bounded parse diagnostics and versioned JSON artifacts;
a production CLI with path checks, stable error output, resource limits, and crash-durable file-and-directory-synced atomic writes;
streaming parsing of explicitly-fielded
perf scripttext;perf.dataconversion through an allowlisted systemperfprocess;bounded subprocess output, stderr diagnostics, timeouts, and process-group cleanup.
ELF Build ID/debug capability inspection and verified module-offset symbolization;
bounded workspace source context and container/build path mapping;
generic candidate-only classification, evidence bundles, and Markdown reports.
an official-SDK MCP server with typed, paginated tools and server-side authorization;
a repository Performance Analysis Skill for evidence-constrained Agent workflows.
profile and repeated-benchmark comparison with environment comparability checks;
pyperf, Google Benchmark, and hyperfine JSON normalization;
default-off, explicitly authorized
stat/recordcollection. Release v0.3.0 also provides a separate target-filtered Trace Helper and verifiedsched/off_cpu/lockpipeline through the opt-infull_diagnosticsfeature profile.v0.3.1 project-scoped discovery and authorized collection for one process in a local Linux Docker Engine, including cgroup v2 context, bounded container symbol mapping, managed temporary test containers, and evidence-matched A/B comparison.
v0.3.2 opt-in
bounded_optimization_session: one reviewed confirmation can cover a fixed baseline build, evidence-guided collection, build snapshots whose changes are restricted tomutable_paths, up to three candidate rebuilds, and deterministic matched A/B validation under hard budgets. A non-verified final candidate is retained only after a fresh human disposition choice; that choice is recorded without upgrading the evidence verdict. The Agent/client sandbox, not PerfLens, enforces filesystem write permission.
It does not include an AI/LLM API, Web UI, source-code patch tool, general-purpose benchmark runner, or custom agent framework. In an authorized optimization session, the external Agent edits only reviewed mutable paths and the fixed workload contract supplies correctness/Benchmark output.
Install
PerfLens requires Python 3.12 or newer.
For a GitHub release, download the wheel and install it as an isolated tool:
pipx install ./perflens-0.3.2-py3-none-any.whl
# or
uv tool install ./perflens-0.3.2-py3-none-any.whlThen opt one project in. Other projects do not see the Skill or MCP server:
cd /absolute/path/to/project
perflens initFor a project that intentionally profiles a local Docker workload, initialize the project with:
perflens init --dockerThis writes a project-owned perflens-setup/container-workload.toml policy. It does not install
or start Docker, join the Docker group, build/pull an image, deploy a Collector, or grant execution.
The Skill uses typed MCP discovery, authorization, collection, and comparison tools only after the
user confirms either one run or a bounded in-memory session.
This activates Codex and Claude Code by default. Select one of them with
--client codex or --client claude-code; use --client opencode for OpenCode,
or --client copilot for both Copilot CLI and VS Code Copilot Agent. Use --read-only when the
project should analyze existing evidence without automatic collection.
Repeat --client to select several clients for one project. To make that selection the default
for future plain init calls, run, for example,
perflens client-defaults --client codex --client claude-code --client copilot.
This writes strict ~/.config/perflens/config.toml; if it is absent, the built-in default remains
Codex plus Claude Code. Explicit init --client ... values override it for one invocation.
Claude Code and Copilot CLI share .mcp.json; onboarding validates one identical ownership copy
and updates the shared entry atomically when both are selected.
Rerun with perflens init --update when upgrading managed integration or
changing collection gates. Update mode requires a matching setup.json, updates
only recorded client entries and marked blocks, and refuses
to overwrite a modified Skill or unverified client configuration. The managed
perflens-setup directory is rebuilt and must not contain user files; unexpected
entries cause refusal, while staged Collector assets are preserved unless
regeneration is explicitly requested. With no explicit --client, update preserves the current
project's recorded client set. Detach a no-longer-needed client before
updating with a narrower --client selection.
Follow the generated NEXT_STEPS.md. See Installation and first use for the complete beginner flow.
Onboarding safely selects the native /usr/bin or wheel /opt/perflens layout,
so copy the exact generated deployment command instead of guessing paths.
It installs only project-scoped integration: Codex uses .codex/config.toml, Claude Code
uses .mcp.json and .claude/skills, OpenCode uses .opencode/opencode.json, and the
local Copilot suite uses .mcp.json plus .vscode/mcp.json. Codex, OpenCode, and Copilot
share .agents/skills.
Existing unrelated configuration is preserved; user-level global configuration
is not modified.
Before package uninstall, preview perflens detach --project <project> --dry-run, then repeat without --dry-run. By default it removes verified
selected-client MCP entries and unchanged project Skills while preserving
onboarding, analysis evidence, and system Collector data. Use --keep-skills
to detach MCP only or --client to select one client.
Debian 13 users can instead install the native, offline .deb packages. See
Debian packages for the split main/Collector flow.
Version 0.2.0 also adds explicit paranoid3_helper: an unprivileged Python Broker passes typed PID
plans to a bounded root Rust Helper while perf_event_paranoid=3 remains unchanged. It is never
enabled automatically and requires administrator acknowledgement of the bounded root,
CAP_SYS_ADMIN, and CAP_SYS_PTRACE risk.
Release v0.3.0 adds a separate Trace Helper, in-kernel target filtering, deterministic
sched/off-CPU/lock analysis, and the full_diagnostics lifecycle. The existing privileged
stat/record Helper remains limited to stat/record. See the
Collector and user-space-lock roadmap. Release v0.3.1
adds the local-Docker single-process target runtime while the four runtime-lock adapters remain
planned for v0.4.0. Docker support is limited to a local Linux Engine, cgroup v2, an explicit
process, and fixed project policy; it excludes arbitrary Docker arguments, remote engines,
Compose/Kubernetes, image build/pull, and whole-container perf aggregation. Checked-in Runtime
Lock public contracts are groundwork, not available adapters. See the
v0.3.1 Docker process guide.
Release v0.3.2 adds the separately opt-in, benchmark-required bounded Docker optimization session.
It does not build during preview, does not grant arbitrary Docker access, and never authorizes
commit, push, tags, or releases. See the
v0.3.2 Docker optimization guide.
Run a read-only readiness summary at any time:
perflens status --project /absolute/path/to/projectHuman-facing command help is Chinese-first as well. Run perflens --help,
perflens setup --help, or perflens-admin --help when needed. Stable English
command and option names are unchanged, and subcommand help documents duration,
resource, archive-selection, and authorization boundaries.
When automatic collection is configured and local access is available, this also performs a bounded, read-only health handshake. It verifies the Collector PID/UID with kernel peer credentials and reports stale, unreachable, or wrong-identity sockets instead of declaring them ready.
Domain failures are Chinese-first for people. Automation should use the global
perflens --json-errors <command> ... option or set
PERFLENS_JSON_ERRORS=1 to preserve the versioned JSON error artifact.
perflens doctor follows the same human-first principle: add --json for its
versioned capability artifact or --output <new-file.json> to save it safely.
Its five-mode output diagnoses local permission prerequisites; it does not prove that the
independent Collector or any requested host mode passed real collection acceptance.
After administrator deployment and a fresh login, verify the Collector without finding a PID:
perflens accept-collector --authorize-host-acceptanceThe default output is a concise Chinese pass summary with hardware-PMU,
software-counting, and cpu-clock sampling status plus the evidence path,
hash, metric count, and conclusion boundary. If hardware PMU evidence is not
useful, automatic collection stays within the same PID, duration, and output
bounds and continues with fixed software events. The result explicitly rules
out IPC, hardware cache-miss, and branch-miss claims. Use --json for complete
machine-readable output or --output ./collector-acceptance.json to preserve a
new versioned evidence file.
With the v0.3.0 full_diagnostics profile, the same command also requires substantive
target evidence, deterministic analysis, and replay verification for sched, off-CPU, and lock.
Empty evidence or failed conservation does not pass. The packaged fixed eBPF filters authorized
TGID/TIDs in kernel and never falls back to perf -a.
The wheel installation commands provide perflens, perflens-mcp, the optional
perflens-collector, and the explicit administrator entry point
perflens-admin. Confirm the release:
perflens --version
perflens-mcp --version
perflens-collector --version
perflens-admin --versionInstalling directly from a source checkout is also supported:
python -m pip install .For development with uv:
uv sync --all-groupsRelated MCP server: perf-mcp
Analyze folded stacks
perflens analyze-folded \
--input tests/fixtures/folded/normal.folded \
--output build/analysis.jsonInput follows standard folded syntax:
main;worker;parse;malloc 182
main;worker;compute 271Frames are normalized to root → leaf. The final frame receives self weight.
Every unique (symbol, DSO) in a sample receives inclusive weight once, so
recursive frames cannot make a function-level inclusive percentage exceed
100%. Frame occurrences are counted separately.
Standard folded text has no DSO, PID/TID, CPU, timestamp, event, or source
metadata. PerfLens records these fields as unknown; it never infers them from
symbol names. Each folded line is one weighted stack record, not weight
individual samples.
Analyze perf profiles
For existing text, generate the supported stable field set and analyze it:
perf script --ns \
-F comm,pid,tid,cpu,time,event,period,ip,sym,dso,srcline \
-i perf.data > profile.perf-script
perflens analyze-perf-script \
--input profile.perf-script \
--output build/analysis.jsonOr let PerfLens run the same read-only conversion:
perflens analyze-perf-data \
--input perf.data \
--output build/analysis.jsonanalyze-perf-data never records, attaches to a process, or requests root. It
invokes an absolute, allowlisted perf executable without a shell. Use
--perf-path when several versions are installed and --timeout-seconds to
lower the conversion deadline.
Inspect symbols and build evidence
perflens inspect-elf --input build/app --output build/elf.json
perflens resolve-source \
--binary build/app \
--module-offset 0x1234 \
--output build/source.json
perflens classify \
--analysis build/analysis.json \
--output build/diagnosis.json
perflens report \
--analysis build/analysis.json \
--problem "Throughput regression" \
--metric "requests/second" \
--output build/report.mdSource resolution requires a verified module-relative offset. A runtime IP by
itself is never rebased heuristically. PerfLens prefers a long-lived
llvm-symbolizer JSON provider, then falls back to a long-lived addr2line
provider. Cache identity includes Build ID, module offset, and resolver version.
Classification rules label investigation candidates only. Generated reports keep direct observations, missing evidence, forbidden conclusions, and A/B validation requirements separate.
Compare profiles and benchmarks
perflens compare-profiles \
--baseline build/baseline-analysis.json \
--candidate build/candidate-analysis.json \
--output build/profile-comparison.json \
--markdown-output build/profile-comparison.md
perflens normalize-benchmark \
--input benchmark-hyperfine.json \
--output build/benchmark.json
perflens compare-benchmarks \
--baseline build/baseline-benchmark.json \
--candidate build/candidate-benchmark.json \
--output build/benchmark-comparison.jsonProfile percentage changes describe the selected event distribution, not absolute elapsed time. Benchmark comparisons require repeated samples, check environment differences, apply a practical-impact threshold, and emit only candidate improvement/regression states.
Explicitly authorized active collection
Active collection is disabled by default. A CLI invocation requires both a confirmation switch and the exact per-call authorization phrase:
perflens collect-profile \
--mode record \
--executable /absolute/path/to/app \
--target-arg=--workload \
--data-output build/profile.data \
--metadata-output build/collection.json \
--authorize-target \
--authorization I_EXPLICITLY_AUTHORIZE_TARGET_PROFILINGRelease 0.3.0 supports record and stat; stat uses an independent typed
metric adapter and derives IPC when cycles and instructions are available.
The v0.3.0 full_diagnostics profile adds sched, off_cpu, and lock through a separate
Trace Helper and produces dedicated verified artifacts. The existing paranoid=3 Rust
Helper remains strictly stat/record-only. Package installation never enables advanced modes;
an administrator selects the profile and runs real acceptance. PID attachment requires --pid, a bounded duration,
--authorize-pid-attach, and the separate phrase
I_EXPLICITLY_AUTHORIZE_PID_ATTACH. PerfLens never invokes sudo or changes
kernel policy. See MCP server and Skill setup for the
additional MCP startup gates.
For an approved live PID, PerfLens can automatically inspect permissions, create a short-lived PID-bound plan, execute it once through a separately policy-enforcing Collector Broker, and analyze the result. See automatic collection. The MCP server and Agent remain unprivileged. The Collector also enforces cumulative spool byte/file quotas and a filesystem free-space reserve; exhaustion denies new work without deleting old evidence.
Each Collector instance permits exactly one ordinary UID. Sharing its
perflens group and spool across callers would expose group-readable profiles
between users and is rejected.
After deployment, perflens-admin spool-status gives a read-only Chinese
summary of spool usage, filesystem reserve, and currently reservable output;
add --json for the versioned machine-readable artifact.
Evidence is never age-deleted automatically. Administrators can use the archive-then-prune workflow to create a bounded stored ZIP with a versioned manifest and per-file SHA-256, preserve all sources, verify both copies with a dry run, and only then explicitly authorize removal of exact matching source inodes. It selects the Broker or private Rust Helper spool from the deployed privilege mode and binds that mode and path into the manifest. The archive remains intact and Agents must not schedule pruning.
Administrators can tune the bilingual policy without memorizing a manual
restart sequence: copy it to a separate mode-0600 candidate, run
perflens-admin update-policy --config <candidate> --dry-run, then repeat with
sudo. The command atomically applies and health-checks the policy, rolls back
on activation failure, and refuses UID, fixed-spool, or privilege-mode migration.
Switching between cap_perfmon and paranoid3_helper requires a reviewed
undeploy and redeploy because the managed service topology is different.
Deploy and upgrade require a bounded, read-only Collector health round trip and
verify the responding PID/UID through kernel credentials. A stale, wrong-owner,
or unlistened socket pathname is not readiness. perflens-admin deploy prints a
Chinese dry-run or success summary by default; add --json for the complete
versioned artifact.
After installing a new release, run sudo perflens-admin upgrade --dry-run and
then sudo perflens-admin upgrade. The explicit flow preserves policy and spool
data, replaces only a verified managed unit, restarts the service, and attempts
unit rollback on activation failure.
After one administrator-reviewed deployment, users do not need to discover a PID. They may ask the Skill to optimize the current project, approve one exact executable and argument list, and let the ordinary-user launcher obtain the new PID internally. The Collector still receives only a short-lived PID-bound plan; the project workload never runs with Collector privilege.
See product deployment for configurable service assets, real Collector verification, upgrades, and uninstall behavior.
Use MCP with the Skill
The normal path is perflens init, which activates only the selected project.
For separate, advanced steps, install the bundled Skill for a specific client:
perflens install-skill --project /absolute/path/to/workspace
perflens install-skill --client claude-code --project /absolute/path/to/workspace
perflens install-skill --client opencode --project /absolute/path/to/workspace
perflens install-skill --client copilot --project /absolute/path/to/workspaceThe command creates .claude/skills/perflens for Claude Code or the shared
.agents/skills/perflens for the other clients, and refuses to overwrite an existing Skill.
To print a project-scoped MCP configuration:
perflens codex-config --workspace /absolute/path/to/workspace
perflens claude-config --workspace /absolute/path/to/workspaceAdd --allow-process-execution only when perf.data conversion or source
symbolization is required. Review the printed TOML before adding it to the
project's .codex/config.toml.
From a source checkout, the equivalent direct registration is:
mkdir -p perflens-results
codex mcp add perflens -- \
"$PWD/.venv/bin/perflens-mcp" \
--allowed-root "$PWD" \
--artifact-root "$PWD/perflens-results" \
--allow-writesRestart Codex, then ask:
$perflens analyze ./profile.folded and report direct evidence, candidates, and missing evidence.For Claude Code, perflens init installs the project Skill under
.claude/skills/perflens and safely merges perflens
into the project .mcp.json. Claude Code asks the user to trust a project MCP
server before first use. Invoke it with /perflens.
See MCP server and Skill setup for permissions, project-scoped configuration, process-execution opt-in, and the full tool flow.
Resource limits
Defaults are intentionally explicit:
input file: 1 GiB;
logical records: 10 million;
line length: 1 MiB;
stack depth: 4,096;
unique frames: 2 million;
unique call paths: 1 million;
retained warnings: 100;
emitted hotspots: 10,000;
emitted call paths: 1,000.
Limits can be lowered from the CLI. Exceeding structural limits fails with a structured error rather than silently dropping exact data. Malformed individual records are skipped and reported with bounded line previews.
Exit codes
Code | Meaning |
0 | success |
2 | invalid CLI usage or input |
3 | unsupported or malformed profile |
4 | resource limit exceeded |
5 | output/path safety failure |
6 | external tool failure or timeout |
70 | unexpected internal failure |
Development checks
uv run ruff check .
uv run pyright
uv run pytest --cov=perflens
uv build
uv run pip-auditThe reproducible performance harness is:
uv run python tests/performance/benchmark_folded.py \
--records 1000 100000 1000000 \
--repetitions 3See docs/performance-budget.md for the recorded environment and baseline.
See release readiness, release process, real-world profile acceptance, and known issues, and troubleshooting, the v0.3.2 Docker optimization regression playbook, and the Collector and user-space-lock roadmap, the v0.3.1 Docker process roadmap, plus the perf evidence pipeline for final verification evidence, published-version workarounds, and operational failure guidance.
Chinese maintainer documentation is available in the
development guide,
architecture guide,
compatibility matrix,
known limitations,
real-world acceptance record,
security policy, and
release-readiness record. Every document under
docs/ that has an English version now links to a corresponding Simplified
Chinese version.
Known limitations
Folded input cannot distinguish identically named functions from different DSOs because the format omits DSO metadata.
Percentages describe selected event weight, not wall-clock duration.
Call paths are exact up to the configured unique-path limit.
Symbol names are preserved with only conservative compiler-suffix cleanup.
A hotspot is an observation, not a confirmed root cause.
perf.dataportability remains dependent on the installedperfversion and access to matching DSOs/symbols; preserved unknown frames make gaps explicit.Active collection depends on kernel perf permissions. An ordinary process is blocked by
perf_event_paranoid=3; an installed Collector may still pass its separate host acceptance, including an explicitly reported software fallback.Release v0.3.0 produces scheduler-delay, off-CPU interval, and low-level lock/futex-candidate artifacts through the opt-in
full_diagnosticsprofile. It cannot promote a futex candidate to a language lock, invent owner/hold time without pairs, or cover every user-space fast path.Release v0.3.1 Docker collection is limited to one explicit process in a local Linux Engine with cgroup v2 and explicit project/session authorization. It excludes remote Engines, Docker Desktop VMs, Compose/Kubernetes, image build/pull, arbitrary Docker arguments, and whole-container perf aggregation; container-wide cgroup deltas are context rather than process-exclusive evidence.
Available Tools
38 toolsanalyze_benchmarkAIdempotent
Normalize a supported benchmark JSON file and store the typed artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| source_format | No | auto | |
| benchmark_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds that the tool stores a typed artifact, which implies persistence and mutation, consistent with readOnlyHint=false. No contradiction exists, but the description does not clarify further behavioral details such as overwrite semantics or handling of unsupported formats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently communicates the core action and result, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and the idempotent annotation helps, the description is too thin for a tool with three parameters and a format-selection enum. It does not explain how to choose source_format, the role of benchmark_name, or what 'store the typed artifact' means in terms of side effects or artifact naming. The agent is left to infer too much.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters, but it never mentions path, source_format, or benchmark_name. The schema's enum values and parameter names offer some self-evident meaning, but the description does not explain how source_format auto-detection works, what benchmark_name is for, or what path should point to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('normalize') and resource ('supported benchmark JSON file'), and states a concrete outcome ('store the typed artifact'). This distinguishes it from sibling analysis tools like analyze_profile or analyze_collection, which focus on different resources or operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to benchmark JSON files and normalization/storage, so an agent can infer the general use case. However, it provides no explicit when-to-use versus alternatives, no exclusions, and no guidance on when another tool like compare_benchmarks or analyze_collection would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_collectionCIdempotent
Analyze a stored CPU record collection artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already convey idempotentHint=true and destructiveHint=false, but the description adds no behavioral context beyond the generic verb 'analyze.' It does not disclose whether the tool creates artifacts, mutates state, requires permissions, or has any side effects, and readOnlyHint=false leaves room for such side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. It earns its place by naming the resource, though it is slightly under-specified in terms of behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema covers return-value details, but the description still leaves major gaps: what analysis actually involves, when to choose this tool over an inspection or trace-analysis sibling, and whether the operation is side-effect-free. Given the large sibling set, this is not complete enough for an agent to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It adds some meaning by indicating that collection_id refers to a stored CPU record collection artifact, but it does not explain how to obtain a valid ID, what format it takes, or any constraints. For a single self-named parameter this is minimally adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('analyze') and identifies a concrete resource ('a stored CPU record collection artifact'), so an agent can tell it operates on stored CPU record collections. However, it does not specify what kind of analysis is performed, which weakens differentiation from similar-looking sibling tools like analyze_trace_evidence or analyze_benchmark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. It does not mention context like inspecting collection capabilities, analyzing traces, verifying analyses, or building diagnosis bundles, so the agent must infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_profileCIdempotent
Analyze an allowed folded, perf-script, or perf.data profile and store JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| source_type | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey idempotency and non-destructiveness. The description adds the side-effect of storing JSON output, but it does not explain what 'allowed' means, whether existing output is overwritten, or any permissions needed. This is a modest addition beyond annotations with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It earns its place, though 'allowed' is slightly ambiguous. Overall, concise and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The existing output schema partly relieves the need to describe return values, but the tool is left incomplete: no path semantics, no source_type behavior, no prerequisites, and no differentiation from analyze_collection. An agent given only this description would likely guess at required inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain both parameters. It partially enumerates the accepted profile kinds (folded, perf-script, perf.data), which maps to the source_type enum, but it never describes the required 'path' parameter or the 'auto' default. The hyphen/underscore mismatch between the description and the enum values further weakens clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Analyze'), a resource ('folded, perf-script, or perf.data profile'), and an outcome ('store JSON'). It is clear enough to distinguish from collection or comparison tools, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. It does not distinguish this tool from closely related siblings such as analyze_collection, collect_profile, or compare_profiles, leaving the agent to infer when this specific analysis is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_trace_evidenceAIdempotent
Deterministically analyze a stored, normalized sched/off-CPU/lock TraceEvidence artifact and verify it before Agent use.
| Name | Required | Description | Default |
|---|---|---|---|
| trace_evidence_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false but readOnlyHint=false. The description adds determinism and the verify-before-use context, which is useful. However, it does not disclose whether verification writes state, requires special permissions, or has other side effects, which matters given readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the action and resource, then adds the verification purpose. Every phrase earns its place: deterministic, stored, normalized, artifact type, and before Agent use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema and idempotent annotation, the description is largely complete: it states the input, the artifact type, and the intended timing. The main missing piece is clarity on side effects given readOnlyHint=false, but the output schema and annotations absorb much of the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It references TraceEvidence artifact, making trace_evidence_id's role mostly inferable as the identifier of that artifact. But it does not explain where the ID comes from, its format, or any validation requirements, leaving a modest gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('analyze') and identifies a precise resource: a stored, normalized sched/off-CPU/lock TraceEvidence artifact. It also adds the intended gate, 'verify it before Agent use.' However, it does not explicitly differentiate from sibling tools like verify_trace_analysis or verify_analysis, which may overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use this tool on a stored, normalized TraceEvidence artifact before Agent consumption. It implies a precondition and timing, but it does not mention alternatives or when-not-to-use conditions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
authorize_docker_optimization_sessionBDestructive
Authorize the exact Docker optimization Preview once. This stores a process-local secret and permits only its fixed paths, build recipe, modes, and budgets; it does not itself build, run, profile, modify source, commit, push, tag, or release.
| Name | Required | Description | Default |
|---|---|---|---|
| preview_id | Yes | ||
| authorization | Yes | ||
| preview_content_sha256 | Yes | ||
| authorization_summary_sha256 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| budget | Yes | |
| recipe_id | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| preview_id | Yes | |
| session_id | Yes | |
| updated_at | Yes | |
| builds_used | Yes | |
| allowed_modes | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| baseline_build_id | No | |
| build_seconds_used | Yes | |
| workload_runs_used | Yes | |
| evidence_bytes_used | Yes | |
| invalidation_reason | No | |
| session_artifact_id | Yes | |
| candidate_rounds_used | Yes | |
| project_policy_sha256 | Yes | |
| recipe_content_sha256 | Yes | |
| preview_content_sha256 | Yes | |
| project_identity_sha256 | Yes | |
| recoverable_retries_used | Yes | |
| latest_candidate_build_id | No | |
| temporary_image_bytes_used | Yes | |
| authorization_receipt_sha256 | Yes | |
| workload_active_seconds_used | Yes | |
| build_capability_content_sha256 | Yes | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavioral traits beyond annotations: it stores a process-local secret, permits only fixed paths/recipe/modes/budgets, and explicitly enumerates actions it does not perform. This is strong transparency for an authorization tool, although it does not directly address the destructiveHint annotation or revocation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. Every clause earns its place: the action and scope come first, followed by side-effect and boundary details. The negative action list is dense but highly useful for safe invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is strong on behavioral boundaries and side effects, and an output schema exists so return values need not be covered. However, it omits parameter semantics and usage context, which are necessary for an agent to confidently invoke this tool correctly in a workflow surrounded by many similar authorization and optimization tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does not explain preview_id, preview_content_sha256, authorization_summary_sha256, or the authorization constant beyond their names. An agent gets no additional meaning from the description to fill these required parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Authorize'), a specific resource ('exact Docker optimization Preview'), and a one-time scope ('once'). The negative boundary — 'does not itself build, run, profile, modify source, commit, push, tag, or release' — clearly distinguishes this from build/run siblings like build_docker_optimization_candidate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus siblings such as authorize_docker_session or preview_docker_optimization_session. The phrase 'exact Docker optimization Preview once' implies a preceding preview step, but the description does not state the intended workflow, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
authorize_docker_sessionADestructive
Authorize one project-bound existing-container performance session. This stores only process-local authorization and does not execute or profile the target. A fresh user reply to the exact session summary is required; MCP tool permission is not workload consent. allowed_modes is required and must exactly equal the non-empty mode set shown in that summary; expanding it requires a new summary and fresh authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| host_pid | No | ||
| allowed_modes | Yes | ||
| authorization | Yes | ||
| container_pid | No | ||
| authorization_mode | No | ||
| container_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| session_id | Yes | |
| target_kind | Yes | |
| allowed_modes | Yes | |
| content_sha256 | Yes | |
| instance_count | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| max_workload_runs | Yes | |
| authorization_mode | Yes | |
| max_active_seconds | Yes | |
| max_evidence_bytes | Yes | |
| workload_runs_used | Yes | |
| active_seconds_used | Yes | |
| evidence_bytes_used | Yes | |
| invalidation_reason | No | |
| workload_spec_sha256 | No | |
| project_identity_sha256 | Yes | |
| authorization_receipt_sha256 | Yes | |
| existing_target_identity_sha256 | No | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with destructiveHint=true and readOnlyHint=false, the description adds substantial detail: it stores only process-local authorization, does not execute or profile the target, requires a fresh user reply, and clarifies that MCP permission is not workload consent. It also explains the consequence of needing expanded modes—a new summary and fresh authorization. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying necessary compliance detail. The purpose is front-loaded in the first sentence; the remaining sentences cover critical behavioral and consent constraints without excess verbiage. Slightly dense but well-structured for a security-sensitive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential consent workflow, mode constraints, and non-execution guarantee. An output schema exists, so return values are not the description's burden. However, it does not explicitly differentiate this from sibling authorization tools like authorize_docker_optimization_session or authorize_managed_docker_session, which could leave an agent uncertain which authorization path applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It adds important semantics for allowed_modes (must exactly equal summary mode set, expansion requires new authorization) and for authorization (user consent phrase, not just MCP permission). However, it leaves host_pid, container_pid, container_reference, and authorization_mode completely unexplained by description, relying on their names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action ('Authorize'), a specific resource ('one project-bound existing-container performance session'), and the scope ('project-bound', 'existing-container'). It also distinguishes itself from execution/profile tools by explicitly stating it 'does not execute or profile the target', making it clear this is only an authorization step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides critical usage conditions: a fresh user reply to the exact session summary is required, MCP permission is not workload consent, and allowed_modes must exactly match the summary. It does not explicitly name sibling authorization tools (e.g., authorize_docker_optimization_session) as alternatives, but the context of 'project-bound existing-container performance session' gives clear situational discrimination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
authorize_managed_docker_sessionADestructive
Authorize the exact immutable image, command, mounts, resource limits, modes, and budget pinned in this project's Docker policy. This never builds or pulls an image. A fresh user reply to that exact summary is required; MCP tool permission is not workload consent. allowed_modes is required and must exactly equal the non-empty mode set shown in that summary; expanding it requires a new summary and fresh authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| allowed_modes | Yes | ||
| authorization | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| session_id | Yes | |
| target_kind | Yes | |
| allowed_modes | Yes | |
| content_sha256 | Yes | |
| instance_count | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| max_workload_runs | Yes | |
| authorization_mode | Yes | |
| max_active_seconds | Yes | |
| max_evidence_bytes | Yes | |
| workload_runs_used | Yes | |
| active_seconds_used | Yes | |
| evidence_bytes_used | Yes | |
| invalidation_reason | No | |
| workload_spec_sha256 | No | |
| project_identity_sha256 | Yes | |
| authorization_receipt_sha256 | Yes | |
| existing_target_identity_sha256 | No | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond annotations: it never builds or pulls an image, requires fresh explicit user consent, and clarifies that allowed_modes must exactly match the summary mode set. These are non-obvious constraints that materially affect invocation, and they do not contradict the destructiveHing annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A ll sentences carry information with no fluff, and the safety-critical constraints are front-loaded. The first sentence captures scope, and subsequent sentences add permissions and mode-handling rules. Slightly long four-sentence definition but still disciplined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high-stakes nature and output schema presence, the description covers purpose, consent, no-build/no-pull, exact-mode requirements, and re-authorization. It does not mention how to retrieve the summary or how this relates to revoke/preview siblings, but those are inferable from context and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It clearly explains allowed_modes semantics: required, non-empty, must exactly equal the summary set, and expansion requires new authorization. It does not describe the individual enum values, but those are self-evident in the schema, and the authorization parameter's exact const phrase is already encoded in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb ('Authorize') and a specific resource: the immutable image, command, mounts, resource limits, modes, and budget pinned in the project's Docker policy. It clearly distinguishes the 'managed' flavor from the generic sibling authorize_docker_session by emphasizing policy-pinned exactness and adding the no-build/no-pull constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition: a fresh user reply to the exact summary is required and MCP tool permission is not workload consent. It also defines when allowed_modes can be used and when re-authorization is needed, though it does not directly compare against sibling authorize tools such as authorize_docker_session or authorize_docker_optimization_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_diagnosis_bundleBIdempotent
Build and store the full evidence-constrained diagnosis artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and idempotentHint=true, so the description doesn't need to restate side effects. 'Store' adds that the result is persisted, and 'build' implies assembly from evidence. However, it does not disclose overwrite behavior, storage location, or any failure semantics beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. The primary action and object are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description is close to adequate, but it leaves important context implicit, such as the prerequisite analysis state, how analysis_id is obtained, and when this tool should be invoked. The annotations clarify idempotency and non-read-only behavior, but the description itself is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions analysis_id or explains what it refers to, where it comes from, or what format it should take. The parameter name is mildly self-explanatory, but the description does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Build and store') and a specific resource ('full evidence-constrained diagnosis artifact'), making the core function clear. It does not explicitly differentiate it from sibling tools, but the artifact-building purpose is reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when this tool should be used, what must happen before calling it, or how it relates to siblings like collect_profile, finalize_docker_optimization_candidate, or build-related analysis tools. An agent would have to infer the appropriate invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_docker_optimization_candidateBDestructive
Build one baseline or next candidate from the already-authorized immutable context and mutable Treatment paths. It accepts no image, command, path, build argument, network option, or Docker flag from the caller.
| Name | Required | Description | Default |
|---|---|---|---|
| build_kind | Yes | ||
| session_id | Yes | ||
| candidate_round | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive, so the description does not need to restate that; it adds useful context by noting that no image, command, path, build argument, network option, or Docker flag is accepted from the caller. It does not disclose what specifically gets mutated or destroyed, such as Treatment paths or cached artifacts, even though destructiveHint=true is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the core action front-loaded and the caller-input limitation stated immediately after. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema reduces the need to describe return values, and the annotations cover the destructive nature, but the description still leaves gaps around the candidate_round semantics, the session concept, and the exact workflow stage relative to finalization. For a tool with three required parameters and no schema property descriptions, this is insufficient for reliable selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must carry parameter meaning. It maps build_kind to 'baseline or next candidate' and implies session_id through 'already-authorized' context, but candidate_round is never explained and session_id is not explicitly linked. The description does not compensate for the schema's lack of property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Build') and a specific resource ('baseline or next candidate'), and clarifies that caller-supplied Docker parameters are not accepted. It does not explicitly name sibling tools, so differentiation from finalize_docker_optimization_candidate or the authorization tools is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'already-authorized' implies this tool should be used after authorization, and 'baseline or next candidate' places it in the optimization workflow. However, there is no explicit statement of when to use it instead of preview, finalize, or inspect tools, and no exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_hotspotsBRead-onlyIdempotent
Apply generic candidate-only rules and return a bounded classification page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| analysis_id | Yes | |
| next_cursor | No | |
| total_items | Yes | |
| schema_version | No | |
| evidence_quality | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description only needs to add context beyond those. It adds two useful behavioral facts: the classification is restricted to candidates ('candidate-only') and the result is a bounded page, which connects to the limit/cursor parameters. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It loses a point because 'generic candidate-only' is jargon that could be clearer, but the structure is appropriately compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the annotations plus output schema cover safety and return shape, so the description need not repeat those. Still, the description does not clarify what 'candidate' means or how classify_hotspots relates to the many sibling hotspot/collection tools, leaving an agent to infer selection context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the three parameters. It only hints at pagination via 'bounded classification page' and never explains the required analysis_id, limit, or cursor semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states an action ('Apply...rules') and a result ('return a bounded classification page'), so it is not a tautology. However, 'generic candidate-only rules' is vague and the description never explicitly names the resource ('hotspots') or distinguishes itself from siblings like get_hotspot_details and list_hotspots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention get_hotspot_details, list_hotspots, or analyze_collection, and 'candidate-only' only weakly implies a scope without saying when an agent should prefer another sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_docker_optimization_workloadADestructive
Run and collect only a verified image Build produced by this one-confirmation optimization session. The caller selects bounded evidence, never an image, command, mount, network, Docker option, or host path. A failed attempt after workload-lease issuance is charged and stops further build/collection operations in that Session; it must not be retried unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | stat | |
| events | No | ||
| build_id | Yes | ||
| call_graph | No | dwarf | |
| session_id | Yes | ||
| event_source | No | auto | |
| frequency_hz | No | ||
| duration_seconds | No | ||
| max_output_bytes | No | ||
| workload_timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds materially to the annotations by disclosing that a failed attempt after workload-lease issuance is charged and halts further build/collection operations in the session, and that the call must not be retried unchanged. It also reassures that the caller cannot select images, commands, mounts, networks, Docker options, or host paths, which is meaningful beyond destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, caller constraints, and critical failure/retry behavior. The key action is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an available output schema and annotations, the tool has 10 parameters with 0% schema coverage and no per-parameter explanation in the description. The high-level safety and session-blocking behavior is covered, but the agent cannot correctly choose values for mode, event_source, call_graph, or the time/output bounds without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only implies that inputs are 'bounded evidence' and vaguely maps session/Build to session_id/build_id; it does not explain mode, events, call_graph, event_source, frequency_hz, duration_seconds, max_output_bytes, or workload_timeout_seconds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: run and collect bounded evidence from a verified image Build tied to a one-confirmation optimization session. It also explicitly scopes what the tool is not for ('never an image, command, mount, network, Docker option, or host path'), which differentiates it from sibling collection tools like collect_docker_target and collect_managed_docker_workload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use only for a verified Build from a one-confirmation optimization session, and the caller chooses bounded evidence rather than arbitrary Docker inputs. It does not explicitly name alternative tools or state 'use X instead', but the constraints are strong enough to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_docker_targetBDestructive
Re-resolve one authorized existing-container process, consume one bounded session run, and collect it through the restricted Broker. The Docker adapter never enters the Collector or Helper.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | record | |
| events | No | ||
| host_pid | No | ||
| call_graph | No | dwarf | |
| session_id | Yes | ||
| event_source | No | auto | |
| frequency_hz | No | ||
| container_pid | No | ||
| duration_seconds | No | ||
| max_output_bytes | No | ||
| container_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true, and the description's 'consume one bounded session run' reinforces that the operation is state-consuming rather than benign. It adds extra behavioral context beyond annotations: the data is collected 'through the restricted Broker' and 'the Docker adapter never enters the Collector or Helper,' which clarifies the architectural path and constraints. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences with no filler, and the main action is front-loaded ('Re-resolve... consume... collect...'). Each sentence contributes a distinct piece of information. It loses half a point because the dense, undefined jargon ('bounded session run', 'restricted Broker', 'Collector', 'Helper') makes the compactness harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, zero schema coverage, and a destructive side effect, the description is far from complete. It does not explain what 'collect' returns, what 'bounded session run' means, how authorization is checked, or how to map inputs to the desired collection behavior. The output schema and annotations cover some risk signals, but an agent would still struggle to invoke this tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining parameters, but it mentions none of the 11 parameters: no guidance for mode, events, call_graph, frequency_hz, duration_seconds, host_pid, container_pid, or max_output_bytes. The only weak link is that 'authorized existing-container process' loosely maps to container_reference, but this is far too generic to help an agent choose correct values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('re-resolve', 'consume', 'collect') and a concrete resource ('authorized existing-container process' via 'restricted Broker'), so an agent can tell this tool collects data from a Docker container process already authorized. It does not name a sibling tool, but the scoping language ('authorized', 'bounded session run') and the Broker/Collector/Helper routing hint differentiate it from the broader collection tools. The meaning is somewhat jargony but not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage for an already-authorized existing-container process and a bounded session run, giving some contextual conditions. However, it does not state when to prefer this over siblings like collect_docker_optimization_workload, collect_managed_docker_workload, or collect_profile, and there are no explicit when-not-to-use or alternative-naming guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_managed_docker_workloadBDestructive
Create one fixed-policy temporary container from an already-local immutable image, hold its exact workload at the package Gate until Broker collection is ready, then run, collect, wait, and conservatively clean only that verified container.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | record | |
| events | No | ||
| call_graph | No | dwarf | |
| session_id | Yes | ||
| event_source | No | auto | |
| frequency_hz | No | ||
| duration_seconds | No | ||
| max_output_bytes | No | ||
| workload_timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond the destructiveHint annotation: it creates a temporary container, waits for Broker readiness, and explicitly cleans only the verified container, scoping the destruction conservatively. It also implies blocking behavior with 'wait.' No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no filler; every clause adds a behavioral or scoping constraint. However, the run-on structure and heavy jargon make it less immediately scannable than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The lifecycle is described and an output schema exists, but for a 9-parameter destructive tool with no parameter descriptions and no usage guidance, the description is not sufficient for an agent to confidently select the right configuration. It lacks session prerequisites, parameter semantics, and clear routing among many sibling collection tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage across 9 parameters, and the description does not mention any parameter name or concept such as mode, events, call graph, frequency, duration, output limits, or timeout. It also does not clarify what session_id refers to, leaving parameter meaning almost entirely to inference from names, enums, and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete lifecycle: it creates one temporary container from an already-local immutable image, holds the workload at the package Gate, runs/collects, waits, and conservatively cleans only that verified container. This gives a clear verb/resource pair and includes enough detail to distinguish this managed collection workflow from sibling collection tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a precondition with 'already-local immutable image' and 'until Broker collection is ready,' but it never explicitly tells an agent when to choose this tool over alternatives such as collect_docker_optimization_workload or collect_docker_target. No exclusions or comparison guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_profileBDestructive
Run bounded perf record/stat/sched/lock/off-CPU collection only after explicit server and per-call authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| mode | No | record | |
| events | No | ||
| call_graph | No | dwarf | |
| executable | No | ||
| output_path | Yes | ||
| frequency_hz | No | ||
| authorization | Yes | ||
| timeout_seconds | No | ||
| duration_seconds | No | ||
| max_output_bytes | No | ||
| target_arguments | No | ||
| pid_authorization | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the destructiveHint=true annotation, the description adds useful context by emphasizing bounded collection and the need for explicit server and per-call authorization. However, it does not disclose what the destructive behavior actually consists of, such as what happens to output_path or what side effects attaching perf to a process may have.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the action and scoping it to bounded perf collection before stating the authorization gate. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema lightens return-value expectations, but this is a destructive 13-parameter tool with 35 siblings and zero schema descriptions. The definition omits prerequisite/alternative guidance and key parameter-selection semantics, so an agent cannot confidently invoke it correctly from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for parameter meaning, but it only hints at the mode values ('record/stat/sched/lock/off-CPU') and the authorization requirement. It leaves pid vs. executable vs. target_arguments selection, call_graph tradeoffs, duration/timeout semantics, and output_path expectations unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific: it names the verb ('Run'), the resource class (bounded perf record/stat/sched/lock/off-CPU collection), and the authorization prerequisite. This clearly differentiates it from the docker- and project-level collect_* siblings, which collect different kinds of data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the precondition that explicit server and per-call authorization must exist before invoking the tool. There is no when-to-use-this-vs-alternatives guidance, no mention of the many sibling collect/analyze tools, and no exclusions or fallback paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_project_workloadADestructive
Run one explicitly authorized executable inside a project as the MCP user, bind its exact PID incarnation, and collect it through the restricted Collector broker. After the user approves the exact scope, authorization must be exactly I_EXPLICITLY_AUTHORIZE_PROJECT_EXECUTION; do not substitute manual PID attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | record | |
| events | No | ||
| arguments | No | ||
| call_graph | No | dwarf | |
| executable | Yes | ||
| event_source | No | auto | |
| frequency_hz | No | ||
| project_root | Yes | ||
| authorization | Yes | ||
| duration_seconds | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the destructiveHint annotation: it actually runs an executable, binds to a specific PID incarnation, routes collection through a restricted broker, and demands exact authorization. The warning against substituting manual PID attachment is especially useful for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action. Both sentences earn their place: the first states what the tool does, and the second enforces the mandatory authorization contract. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the critical safety context and the required authorization flow, and an output schema exists to describe return values. However, with 11 parameters, destructive behavior, and zero parameter-level schema documentation, the definition is not fully self-sufficient for an agent to invoke it correctly in varied scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden of explaining 11 parameters. It only addresses authorization, executable, project root, and PID attachment. The many tuning parameters (mode, events, call_graph, event_source, frequency_hz, duration_seconds, max_output_bytes) are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: run one explicitly authorized executable in a project, bind its exact PID incarnation, and collect it through the restricted Collector broker. This clearly distinguishes it from sibling Docker-focused collection tools and makes the tool's scope obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: the tool should be used after the user approves the exact execution scope, and it must use the exact authorization constant. It does not explicitly name alternatives or say when not to use it, but the 'inside a project' framing and authorization requirement provide strong situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_benchmarksCIdempotent
Compare repeated benchmark values with condition and impact checks.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline_benchmark_id | Yes | ||
| candidate_benchmark_id | Yes | ||
| minimum_practical_impact_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds the notion of 'condition and impact checks,' but does not explain what those checks do or whether any state changes occur. No contradiction exists, but the added behavioral context is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise, front-loaded sentence with no filler. It communicates the primary action immediately, though the brevity also causes some ambiguity in the checks and usage conditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with an output schema available, the description omits key decision-making context: when to use this compare tool versus sibling compare tools, what 'condition and impact checks' mean, and how the minimum practical impact threshold behaves. It is too sparse for an agent to confidently invoke without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for undocumented parameters. It does not explain baseline_benchmark_id, candidate_benchmark_id, or minimum_practical_impact_percent. The parameter names are partly self-explanatory and 'impact checks' loosely hints at the threshold parameter, but this is not enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Compare repeated benchmark values with condition and impact checks.' This identifies the core operation and distinguishes it from profile/container comparison tools, though 'condition and impact checks' remains somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool over siblings like compare_profiles, compare_container_measurements, or compare_docker_optimization_iterations. The description does not specify when baseline/candidate comparisons are appropriate or what makes this tool the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_container_measurementsCIdempotent
Compare two Docker measurements using bound profile, absolute benchmark, correctness, treatment, and whole-container resource evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline_analysis_id | Yes | ||
| baseline_benchmark_id | Yes | ||
| candidate_analysis_id | Yes | ||
| minimum_delta_percent | No | ||
| candidate_benchmark_id | Yes | ||
| baseline_measurement_id | Yes | ||
| candidate_measurement_id | Yes | ||
| minimum_practical_impact_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, but the description adds no information about side effects, authorization requirements, failure modes, or what the comparison actually produces. The evidence-type list is semantic context, not behavioral disclosure. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It communicates the core operation immediately, though the long list of evidence types makes it dense and somewhat jargon-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is partly covered. However, with six required ID parameters and zero property descriptions, the description does not explain how to obtain or select those IDs, what 'bound profile' or 'treatment' evidence means, or how the optional thresholds affect behavior. This is insufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the eight parameters. The evidence categories mentioned (profile, benchmark, correctness, treatment, resource) only vaguely map to the required measurement, analysis, and benchmark IDs, and the optional threshold parameters minimum_delta_percent and minimum_practical_impact_percent are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Compare two Docker measurements' and enumerates the evidence dimensions involved (bound profile, absolute benchmark, correctness, treatment, whole-container resource). This is clearer than a tautology and helps distinguish it from profile-only or benchmark-only siblings, but it does not explicitly differentiate it from the similarly named compare_docker_optimization_iterations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as compare_profiles, compare_benchmarks, or compare_docker_optimization_iterations. The phrasing implies it is for comparing container measurement evidence, but no explicit when-to-use or when-not-to-use boundaries are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_docker_optimization_iterationsBIdempotent
Deterministically compare one authorized baseline/candidate Build pair using bound container measurements, profiles, Benchmark correctness, resource deltas, and fixed-environment invariants. Different final image digests are accepted only as session-bound Treatment evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| baseline_build_id | Yes | ||
| candidate_build_id | Yes | ||
| baseline_analysis_id | Yes | ||
| baseline_benchmark_id | Yes | ||
| candidate_analysis_id | Yes | ||
| minimum_delta_percent | No | ||
| candidate_benchmark_id | Yes | ||
| baseline_measurement_id | Yes | ||
| candidate_measurement_id | Yes | ||
| minimum_practical_impact_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it is deterministic, requires an authorized pair, and treats differing image digests as session-bound Treatment evidence rather than as a simple comparison failure. This is meaningful supplementary behavior that the annotations alone do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary action, and contains no filler. The second sentence adds an important acceptance constraint, though the phrasing is dense and somewhat jargon-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, 9 required, and no parameter descriptions, the description is not complete enough to guide correct invocation. It does not explain where the IDs come from, how the thresholds behave, or what qualifies as 'authorized'. The presence of an output schema helps, but it does not compensate for the missing parameter and workflow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it does not explain the individual parameters. It references baseline/candidate build, measurement, analysis, and benchmark IDs only conceptually, and it never defines minimum_delta_percent or minimum_practical_impact_percent. The parameter names are suggestive but not sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('compare'), a specific resource ('one authorized baseline/candidate Build pair'), and the dimensions involved (container measurements, profiles, Benchmark correctness, resource deltas, invariants). This clearly distinguishes it from the more narrow sibling tools like compare_profiles, compare_benchmarks, and compare_container_measurements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus the many comparison siblings. The description implies this is for comparing optimization iterations within an authorized session, but it never states when an agent should choose this over compare_profiles, compare_benchmarks, or compare_container_measurements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_profilesCIdempotent
Compare two stored analyses and store bounded profile-difference evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline_analysis_id | Yes | ||
| candidate_analysis_id | Yes | ||
| minimum_delta_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds that the tool stores evidence, which is a useful non-obvious side effect, but it does not explain what 'bounded profile-difference evidence' means or what exactly gets persisted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no redundancy. However, the phrase 'bounded profile-difference evidence' is vague jargon that could have been simplified, so it is concise but not maximally clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema, returning values need not be explained, but the description still leaves significant gaps: parameter semantics (especially minimum_delta_percent), how 'evidence' is stored, and when this tool should be selected over sibling compare tools. This is under-specified for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It only implies baseline_analysis_id and candidate_analysis_id refer to the two stored analyses, but it does not clarify their roles or explain minimum_delta_percent at all, leaving an optional threshold parameter undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Compare') and resource ('two stored analyses'), and adds that it stores 'bounded profile-difference evidence,' which distinguishes it from pure comparison tools. It does not explicitly name sibling tools, so it narrowly misses a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use compare_profiles versus alternatives like compare_benchmarks, compare_container_measurements, or compare_docker_optimization_iterations. The agent must infer the intended context from the tool name and vague phrase 'stored analyses.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_docker_processesARead-onlyIdempotent
Observe bounded CPU deltas for one existing local container and return only container PID, host PID, executable name, and a safe recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| container_reference | Yes | ||
| observation_duration_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| candidates | Yes | |
| created_at | Yes | |
| limitations | No | |
| inventory_id | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| candidate_count | Yes | |
| perflens_version | Yes | |
| candidates_truncated | Yes | |
| recommended_host_pid | No | |
| observation_duration_ms | Yes | |
| automatic_recommendation | Yes | |
| container_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond that: the observation is bounded, the container must already exist and be local, and only a narrow set of fields is returned. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with no filler. Every clause earns its place: scope is stated, boundedness is explicit, and the limited return set is front-loaded. This is an appropriately concise tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is an output schema, so return-value details do not need to be repeated. Annotations cover the read-only/idempotent safety profile, and the description communicates the core constraints. Minor gap: it does not mention failure cases like a nonexistent container, but that is not critical for a simple local observation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It indirectly clarifies container_reference as an existing local container and observation_duration_ms as the bound on CPU observation, but it does not explain accepted formats, valid ranges, or how the default interacts with behavior. For only two simple parameters this is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Observe') and clearly identifies the resource: bounded CPU deltas for one existing local container. It also specifies the exact output fields, which makes the tool's function unambiguous and distinct from broader Docker collection or optimization tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for a single, existing local container and for bounded CPU observation, but it never explicitly states when to use this tool instead of the many sibling tools. There are no exclusions or named alternatives, so the agent must infer when this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_collection_planADestructive
Execute one previously planned PID collection through the restricted collector broker. Plans are short-lived and single-use.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive, non-idempotent behavior, and the description adds beyond that by disclosing that the plan is consumed after one use and that a restricted broker is involved. This gives the agent useful operational context about side effects and access constraints without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the verb and object, then adds the two most important operational constraints: the restricted broker and the short-lived/single-use nature of plans.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive action with an output schema and relevant annotations, the description covers plan lifecycle and access restrictions well. The main minor gap is that the term 'PID' is not expanded, but the simple input and presence of an output schema keep this from being a significant completeness issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only exposes a required string plan_id with the title 'Plan Id', and schema description coverage is 0%. The description adds lifecycle meaning by characterizing the plan as previously planned, short-lived, and single-use, but it does not explicitly say how to obtain the plan_id or what format it takes. This is adequate for a single simple parameter but not fully compensating for zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action ('Execute'), a specific object ('one previously planned PID collection'), and a distinguishing delivery mechanism ('restricted collector broker'). It clearly differentiates this tool from planning and direct collection siblings by emphasizing that execution applies only to previously planned, single-use plans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the tool is appropriate only for collections that were previously planned, and adds that plans are short-lived and single-use, implying the agent should not attempt to reuse a plan. It does not explicitly name an alternative tool for creating plans, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finalize_docker_optimization_candidateBIdempotent
Finalize the source-workspace choice for either one replay-verified Iteration or a stopped Session whose latest candidate could not be evaluated, revoke the bounded optimization Session, and clean only verified session resources. Retaining a non-verified candidate requires a fresh explicit user decision and never creates or upgrades an A/B conclusion.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| disposition | Yes | ||
| iteration_id | No | ||
| authorization | No | ||
| evaluation_reason | No | ||
| candidate_build_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| summary | Yes | |
| artifact_id | Yes | |
| artifact_type | Yes | |
| schema_version | No | |
| evidence_quality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful behavioral traits: it revokes the session, cleans only verified session resources, and never creates or upgrades an A/B conclusion. However, it says 'clean only verified session resources,' which implies removal or deletion, while the annotations declare destructiveHint=false. That is a direct contradiction with the declared safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: every phrase adds scope, conditions, side effects, or safety caveats. The first sentence is somewhat overloaded, but it still front-loads the main action and remains clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, zero schema coverage, and an output schema, but the description does not explain how to map disposition, when to supply iteration_id, or how authorization should be set. It also lacks explicit guidance on alternatives and exclusions, so an agent would still struggle to invoke this tool correctly despite the rich behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining the six parameters, but it never names session_id, disposition, iteration_id, authorization, evaluation_reason, or candidate_build_id. It indirectly hints at authorization via 'fresh explicit user decision' and at evaluation_reason via 'could not be evaluated,' but this is insufficient for an agent to reliably construct the arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Finalize'), a concrete resource ('source-workspace choice'), and the exact triggering conditions ('one replay-verified Iteration' or 'a stopped Session whose latest candidate could not be evaluated'). It also distinguishes its composite behavior from sibling tools like revoke_docker_optimization_session by combining finalization, revocation, and cleanup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the two scenarios in which the tool should be used, and warns that retaining a non-verified candidate requires a fresh explicit user decision. It does not name alternative tools or give direct 'do not use when' exclusions, but the usage envelope is clearly bounded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_call_pathsBRead-onlyIdempotent
Return a bounded page of dominant call paths, optionally containing a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| symbol | No | ||
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| symbol | Yes | |
| analysis_id | Yes | |
| next_cursor | No | |
| total_items | Yes | |
| schema_version | No | |
| evidence_quality | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering safety. The description adds behavioral context that results are page-limited and can be filtered by symbol, which goes beyond annotations. However, it does not disclose ordering, the meaning of 'dominant', or pagination cursor behavior; this is acceptable given the annotations but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and free of filler. Every phrase earns its place, though it is minimal and leaves several details to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and annotations present, return values and safety are covered. The description is adequate for a simple read-only paginated query: it names the resource, mentions pagination, and the optional symbol filter. However, it lacks pagination/cursor semantics, ordering details, and usage routing among siblings, leaving moderate gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It mentions the symbol filter and the notion of a bounded page, but does not explain cursor mechanics, limit defaults, or that analysis_id is a required identifier. This leaves the agent with only the raw schema names and defaults for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a specific resource ('bounded page of dominant call paths'), and an optional filter ('containing a symbol'). It clearly identifies what the tool does and distinguishes it as a paginated call-path query. It does not explicitly differentiate from siblings like get_hotspot_details, but the resource is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings such as get_hotspot_details, analyze_trace_evidence, or list_hotspots. The description implies pagination with 'bounded page' but does not explain typical usage flow, prerequisites, or when the symbol filter is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotspot_detailsBRead-onlyIdempotent
Return one hotspot with bounded dominant paths, classifications, and limits.
| Name | Required | Description | Default |
|---|---|---|---|
| hotspot_id | Yes | ||
| analysis_id | Yes | ||
| call_path_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hotspot | Yes | |
| analysis_id | Yes | |
| limitations | Yes | |
| schema_version | No | |
| classifications | Yes | |
| evidence_quality | Yes | |
| dominant_call_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 'bounded dominant paths' and 'limits', hinting at output size constraints, but it is vague and doesn't specify how call_path_limit affects the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words and places the core purpose first. However, its brevity sacrifices important semantic detail, making it under-specified rather than appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema and annotations fill in return shape and safety, but the description leaves usage context and parameter semantics largely open. For a simple 3-parameter read-only tool this is a minimally viable definition, but it still has clear gaps in guidance and parameter clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it only alludes to 'limits' without explaining analysis_id, hotspot_id, or call_path_limit. These parameter roles are not described with enough clarity for an agent to confidently populate them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a specific resource ('one hotspot'), and the content the caller receives, but it doesn't explicitly differentiate this from siblings like list_hotspots or get_call_paths beyond the singular scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. It never mentions list_hotspots, get_call_paths, classify_hotspots, or any prerequisite analysis step, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_source_contextBRead-onlyIdempotent
Read bounded source lines within one configured allowed workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| after | No | ||
| before | No | ||
| workspace_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| line | Yes | |
| lines | Yes | |
| end_line | Yes | |
| start_line | Yes | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read. The description adds the key constraint that it operates 'within one configured allowed workspace', which is a behavioral boundary not captured by annotations. It also says 'bounded source lines', implying it reads a limited range rather than an entire file, adding contextual value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that communicates the core function immediately. It is front-loaded with the verb 'Read' and contains no unnecessary words. Every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is concise but leaves several gaps: no usage differentiation from sibling tools, no parameter semantics beyond what the names imply, and no information about constraints like error handling when workspace_root is not configured. However, the annotations and the presence of an output schema mitigate some of these gaps, making the tool minimally viable but lacking in contextual richness for an agent navigating a complex toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for parameter semantics. The description only gives a high-level idea ('bounded source lines') and does not explain the roles of 'file', 'line', 'before', 'after', or 'workspace_root'. While parameter names are somewhat self-explanatory, the description fails to clarify the relationship between 'line' and the before/after values, or the significance of 'workspace_root' as a security boundary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and the resource 'bounded source lines', clearly indicating the tool reads a limited range of lines from a file. The clause 'within one configured allowed workspace' adds scope and constraint. However, it does not explicitly distinguish from sibling tools like read_artifact_page or resolve_source, though the 'bounded' and 'workspace' wording hints at its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of use cases, exclusions, or references to sibling tools. Users must rely on the name and the brief description alone, which is insufficient for making an informed choice among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_collection_capabilitiesARead-onlyIdempotent
Inspect perf, kernel policy, capabilities, and collection-mode availability without sampling or attaching to a process.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| modes | Yes | |
| platform | Yes | |
| warnings | No | |
| perf_version | No | |
| ptrace_scope | No | |
| capability_id | Yes | |
| effective_uid | Yes | |
| kptr_restrict | No | |
| kernel_release | Yes | |
| schema_version | No | |
| perf_executable | No | |
| recommendations | No | |
| tracefs_accessible | Yes | |
| hardware_pmu_reason | No | |
| hardware_pmu_status | No | |
| perf_event_paranoid | No | |
| effective_capabilities | No | |
| perf_file_capabilities | No | |
| software_counting_status | No | |
| software_sampling_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat safety. It adds value by explicitly stating 'without sampling or attaching to a process,' which is a meaningful behavioral trait beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact, front-loaded sentence: the verb comes first, the scope follows, and the key contrast ('without sampling or attaching') is included at the end without verbosity. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, side-effect-free inspection tool, this description is complete. The output schema is available for return-value expectations, annotations cover the safety profile, and the description sufficiently explains what capabilities are being inspected. Nothing needed to select and call the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the 100% schema coverage is trivially complete. The description's list of inspectable areas (perf, kernel policy, capabilities, collection-mode availability) defines what is surfaced at runtime, which compensates for the lack of any parameter-level documentation. Baseline for zero params is 4; description is consistent with that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Inspect'), multiple concrete resources (perf, kernel policy, capabilities, collection-mode availability), and immediately distinguishes the tool by stating it does so 'without sampling or attaching to a process.' This is far more differentiating than typical boilerplate and clearly identifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without sampling or attaching to a process' establishes a use context: call this when you need capability information without performing side-effecting collection actions. It is not as strong as naming an explicit alternative sibling, but it gives clear contextual guidance about when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_docker_capabilityARead-onlyIdempotent
Inspect the fixed local Docker endpoint and cgroup-v2 support without starting, stopping, building, pulling, or profiling a container.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| checked_at | Yes | |
| docker_cli | No | |
| next_steps | No | |
| api_version | No | |
| daemon_mode | Yes | |
| limitations | No | |
| capability_id | Yes | |
| endpoint_kind | Yes | |
| cgroup_version | No | |
| content_sha256 | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| build_or_pull_supported | No | |
| server_operating_system | No | |
| remote_endpoint_supported | No | |
| managed_container_execution | No | |
| existing_container_discovery | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds useful context by specifying the fixed local endpoint and cgroup-v2 focus, and by confirming that no container lifecycle operations are performed. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence. It front-loads the tool's purpose and immediately conveys its non-invasive scope without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with a rich annotation set and an output schema, the description is complete. It tells the agent exactly what scope is inspected and what side effects are avoided, which is sufficient to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are not a concern. Schema coverage is 100%, and the description does not need to add parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'inspect' and the specific resources (local Docker endpoint and cgroup-v2 support). It also differentiates the tool from sibling inspection tools by explicitly saying it does not start, stop, build, pull, or profile containers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for safe, read-only inspection by listing what it avoids, but it does not explicitly state when to choose this tool over sibling inspection tools or when not to use it. The usage context is clear, but alternatives and exclusion criteria are not directly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_docker_optimization_capabilityARead-onlyIdempotent
Inspect the fixed local Docker/Buildx/Builder identities, project build contract, Benchmark requirement, base-image presence, and Collector modes. This is read-only and never builds, pulls, runs, profiles, or modifies source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| builder | No | |
| checked_at | Yes | |
| next_steps | No | |
| buildx_tool | No | |
| docker_tool | No | |
| limitations | No | |
| capability_id | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| build_supported | Yes | |
| perflens_version | Yes | |
| base_image_present | Yes | |
| collector_available | Yes | |
| benchmark_configured | Yes | |
| project_policy_sha256 | Yes | |
| available_network_tiers | No | |
| runtime_capability_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral specificity by stating it 'never builds, pulls, runs, profiles, or modifies source' and clarifying the scope is 'fixed local,' which aligns with openWorldHint=false. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the inspection scope and followed by a concise side-effect guarantee. Every sentence adds value and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only inspection tool, this description is complete: it enumerates what is inspected, states that it is non-mutating, and the output schema covers return structure. The only minor gap is explicit sibling differentiation, which is not critical given the clear scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the description has little parameter burden. It appropriately focuses on what the inspection covers rather than argument syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear inspection verb with a specific, enumerated resource scope: fixed local Docker/Buildx/Builder identities, project build contract, Benchmark requirement, base-image presence, and Collector modes. This distinguishes it from sibling inspection tools like inspect_docker_capability and inspect_collection_capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a read-only pre-flight inspection role but does not explicitly state when to use this tool over alternatives such as inspect_docker_capability or preview_docker_optimization_session. No exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hotspotsBRead-onlyIdempotent
Return a bounded page of hotspots from a stored analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| sort_by | No | self_percent | |
| category | No | ||
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| analysis_id | Yes | |
| next_cursor | No | |
| total_items | Yes | |
| schema_version | No | |
| evidence_quality | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnly, idempotent, non-destructive behavior, so the description does not need to repeat those traits. It adds the useful 'bounded page' behavioral detail but says nothing about sort_defaults, filter behavior, cursor semantics, or what happens when the page is exhausted. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant filler. The core action and resource are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a strong annotation set and output schema, the tool has five parameters involving pagination, filtering, and sorting, and the description does not explain any of them. It also lacks usage guidance relative to sibling tools, leaving the agent to infer important selection and invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain limit, cursor, sort_by, category, or analysis_id beyond implying pagination via 'bounded page'. The schema provides defaults and an enum, but the description adds no meaning for the filter and sorting parameters, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names a specific verb ('Return') and resource ('a bounded page of hotspots from a stored analysis'), and the 'bounded page' wording signals pagination rather than detail retrieval. It does not explicitly contrast with sibling tools such as get_hotspot_details or classify_hotspots, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from a stored analysis' implies the tool should be used after an analysis has been saved, but there is no explicit when-to-use guidance, prerequisite mention, or direction to alternatives like get_hotspot_details for a single hotspot. Usage context is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_automatic_collectionARead-onlyIdempotent
Create a short-lived PID-bound collection plan. This does not sample or attach.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| mode | No | record | |
| events | No | ||
| call_graph | No | dwarf | |
| event_source | No | auto | |
| frequency_hz | No | ||
| duration_seconds | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| events | No | |
| backend | Yes | |
| plan_id | Yes | |
| warnings | No | |
| call_graph | No | |
| expires_at | Yes | |
| target_pid | Yes | |
| target_uid | Yes | |
| target_type | Yes | |
| frequency_hz | No | |
| record_event | No | |
| policy_status | Yes | |
| schema_version | No | |
| target_runtime | No | |
| fallback_events | No | |
| container_target | No | |
| duration_seconds | Yes | |
| fallback_allowed | No | |
| max_output_bytes | Yes | |
| required_privilege | Yes | |
| fallback_record_event | No | |
| requested_event_source | No | |
| target_start_time_ticks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, and the description adds useful context beyond that: the plan is short-lived, PID-bound, and has no sampling/attach side effects. This gives the agent a clear behavioral model without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose is front-loaded, and the clarifying non-goal sentence earns its place by preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover safety and return structure, and the description gives a clear enough role for a planning operation. However, with 0% parameter documentation and no explicit pointer to execute_collection_plan, an agent is left without enough guidance for correct invocation in a broader workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it only clarifies that the plan is PID-bound. It does not explain mode, events, call_graph, event_source, frequency_hz, duration_seconds, or max_output_bytes, leaving the agent to infer meaning from parameter names and defaults alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a specific resource ('short-lived PID-bound collection plan'), and explicitly states what it does not do ('does not sample or attach'). This clearly distinguishes it from execution and collection siblings like execute_collection_plan and collect_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the scope clear: this tool only creates a plan, not sample or attach. This gives an implicit boundary against execution/collection tools, but it does not explicitly name alternatives or state 'use execute_collection_plan when you are ready to run the plan.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_docker_optimization_sessionAIdempotent
Capture the exact authorized build context and return the complete content-bound one-confirmation optimization summary. This does not build or pull. The user must confirm this exact Preview before authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| allowed_modes | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| budget | Yes | |
| warnings | No | |
| recipe_id | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| preview_id | Yes | |
| network_tier | Yes | |
| allowed_modes | Yes | |
| context_paths | Yes | |
| mutable_paths | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| planned_actions | Yes | |
| perflens_version | Yes | |
| base_image_present | Yes | |
| mutable_dockerfile | Yes | |
| baseline_context_id | Yes | |
| build_capability_id | Yes | |
| project_policy_sha256 | Yes | |
| recipe_content_sha256 | Yes | |
| baseline_build_required | No | |
| mutable_dependency_lock | Yes | |
| project_identity_sha256 | Yes | |
| runtime_capability_sha256 | Yes | |
| authorization_summary_sha256 | Yes | |
| baseline_context_content_sha256 | Yes | |
| build_capability_content_sha256 | Yes | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint and destructiveHint, and the description adds useful behavioral context: no build/pull side effects and a mandatory user confirmation gate before authorization. This goes beyond the structured annotations and helps an agent understand the tool's non-obvious workflow role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the main action and constraints. However, phrases like 'exact authorized build context' and 'content-bound one-confirmation optimization summary' are needlessly opaque and could be clearer without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema likely covers return value structure, so that is not a gap. But the required allowed_modes parameter is completely unexplained, and the description only weakly situates this tool in the broader workflow. The 'must confirm before authorization' line helps, but it is not enough for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter, allowed_modes, with 0% schema description coverage, yet the description never mentions it or explains how to choose among stat, record, sched, off_cpu, and lock. The agent is left to infer the meaning of 'authorized build context' and cannot reliably populate the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('Capture... and return... summary') and a clear resource (docker optimization session), with explicit non-goals ('does not build or pull'). The meaning is somewhat obscured by jargon like 'content-bound one-confirmation optimization summary,' but it is generally distinguishable from build/authorize siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is a preview step: 'The user must confirm this exact Preview before authorization.' It also excludes build/pull use cases, which helps an agent choose it over build_docker_optimization_candidate or authorize_docker_optimization_session, though it never names those alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_artifact_pageBRead-onlyIdempotent
Read at most 64 KiB from a stored JSON artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| artifact_id | Yes | ||
| artifact_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| artifact_id | Yes | |
| next_offset | No | |
| total_bytes | Yes | |
| artifact_type | Yes | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, so the description only needs to add context beyond that. It usefully adds the 64 KiB cap, but it does not explain how offset/limit paging works across larger artifacts or what happens when reading past the end.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, which is appropriate for this simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover return values and safety, so the description does not need to repeat those. However, for a paginated artifact reader, the omission of offset/limit behavior is a meaningful gap that an agent would need to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it only implicitly references the limit via '64 KiB'. It does not explain artifact_id, artifact_type, or offset semantics, and the enum values in the schema are left entirely for the agent to interpret.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific operation ('Read'), a concrete resource ('stored JSON artifact'), and a clear bound ('at most 64 KiB'). This is enough for an agent to distinguish it from the sibling tools, which mostly focus on collection, analysis, and optimization rather than direct artifact paging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. The description does not mention intended scenarios, exclusions, or how it relates to other read/inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_docker_targetBRead-onlyIdempotent
Re-resolve one container process against Docker, /proc, PID start time, namespaces, cgroup identity, and UID policy without profiling it.
| Name | Required | Description | Default |
|---|---|---|---|
| host_pid | No | ||
| container_pid | No | ||
| container_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cgroup | Yes | |
| host_pid | Yes | |
| host_uid | Yes | |
| namespace | Yes | |
| target_id | Yes | |
| created_at | Yes | |
| target_kind | Yes | |
| uid_mapping | Yes | |
| container_pid | Yes | |
| adapter_sha256 | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| executable_name | Yes | |
| perflens_version | Yes | |
| adapter_recipe_id | Yes | |
| validation_status | No | |
| allowed_conclusions | No | |
| identity_fingerprint | Yes | |
| forbidden_conclusions | No | |
| host_start_time_ticks | Yes | |
| image_identity_sha256 | Yes | |
| rootful_risk_authorized | No | |
| container_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds useful context beyond annotations by naming the sources consulted (Docker, /proc, PID start time, namespaces, cgroup identity, UID policy) and explicitly stating that profiling is not performed. It does not address failure cases, but this is consistent with the safe read-only profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense sentence with the action front-loaded and no filler. Every phrase contributes to defining the operation, though the long list of resolution sources makes it somewhat heavy to parse. It is concise without being under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and annotations cover safety, but the description omits usage conditions and optional-parameter semantics. In a large sibling set, an agent still lacks clear guidance on when this should be called instead of collection, discovery, or profiling tools, making the definition incomplete for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it never explains the relationship or selection logic for host_pid, container_pid, and container_reference. It mentions PID start time as a resolution criterion but does not map that to the parameters. The property names are partly self-explanatory, but the description does not add meaningful parameter-level guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Re-resolve'), a bounded resource ('one container process'), and a precise set of resolution criteria (Docker, /proc, PID start time, namespaces, cgroup identity, UID policy). The phrase 'without profiling it' distinguishes it from profiling- and collection-oriented siblings. It is not a 5 because 're-resolve' itself is not defined, leaving some ambiguity about what the operation produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as collect_docker_target, discover_docker_processes, or analyze_profile. 'Re-resolve' weakly implies a follow-up to an earlier resolution, and 'without profiling it' implies a lightweight purpose, but the agent is left to infer the actual selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_sourceCRead-onlyIdempotent
Resolve a verified module offset using an allowed ELF/debug file.
| Name | Required | Description | Default |
|---|---|---|---|
| binary_path | Yes | ||
| module_offset | Yes | ||
| runtime_address | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| frames | Yes | |
| status | Yes | |
| build_id | Yes | |
| warnings | No | |
| binary_path | Yes | |
| module_offset | Yes | |
| schema_version | No | |
| runtime_address | No | |
| resolver_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive, which covers the main behavioral safety profile. The description adds minor context with 'verified' and 'allowed', implying that the offset must be pre-validated and the file must be whitelisted, but it does not detail error behavior, permissions requirements, or side effects. Since annotations are strong and the description adds some useful nuance, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently states the core action. It is appropriately brief and avoids fluff, but its brevity is at the expense of completeness. For a concise description, it does its job, though it could be slightly expanded without losing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no schema descriptions and appears to be part of a larger profiling workflow, a one-sentence description is insufficient. It does not explain the role of the tool relative to siblings like 'get_source_context', the prerequisites for using it, or what the output represents. While an output schema exists, the description itself leaves too much undefined for an agent to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for the lack of parameter documentation. It loosely references 'module offset' and 'ELF/debug file', which map to module_offset and binary_path, but it omits any explanation of runtime_address, which is an optional but potentially important parameter. It also does not clarify the meaning of 'verified' or 'allowed' in relation to the inputs, leaving significant semantic gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('resolve') and a resource ('verified module offset'), but the meaning of 'resolve' is ambiguous—it could mean mapping an offset to a source line, a symbol, or something else. It does not clearly differentiate from sibling tools like 'get_source_context', which likely overlaps in functionality. The phrase 'allowed ELF/debug file' adds context but not enough to fully clarify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives like 'get_source_context' or 'analyze_profile'. It does not mention prerequisites, such as verifying the offset or obtaining an allowed file list, nor does it state exclusions or typical use cases. The only implicit guidance is the focus on 'verified' and 'allowed' inputs, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_docker_optimization_sessionAIdempotent
Revoke one in-memory Docker optimization authorization and conservatively clean only verified session-owned temporary image tags and private snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| budget | Yes | |
| recipe_id | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| preview_id | Yes | |
| session_id | Yes | |
| updated_at | Yes | |
| builds_used | Yes | |
| allowed_modes | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| baseline_build_id | No | |
| build_seconds_used | Yes | |
| workload_runs_used | Yes | |
| evidence_bytes_used | Yes | |
| invalidation_reason | No | |
| session_artifact_id | Yes | |
| candidate_rounds_used | Yes | |
| project_policy_sha256 | Yes | |
| recipe_content_sha256 | Yes | |
| preview_content_sha256 | Yes | |
| project_identity_sha256 | Yes | |
| recoverable_retries_used | Yes | |
| latest_candidate_build_id | No | |
| temporary_image_bytes_used | Yes | |
| authorization_receipt_sha256 | Yes | |
| workload_active_seconds_used | Yes | |
| build_capability_content_sha256 | Yes | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral detail beyond annotations: the operation revokes exactly 'one' authorization and cleans only 'verified session-owned temporary image tags and private snapshots'. This clarifies what may be removed while staying consistent with destructiveHint=false because the cleanup is conservatively scoped to ephemeral session-owned artifacts and idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One densely packed sentence front-loads the primary action and then adds a precise scope qualifer. No fluff, no repetition of structured fields, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and annotations covering idempotency/destructivity, the description is largely complete: it names the resource type, the action, and the exact cleanup boundary. It could additionally reference the authorize_docker_optimization_session sibling or state a prerequisite, but that gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for session_id, so the description must carry meaning about the parameter. The description indirectly identifies session_id as the optimization session whose authorization is revoked and whose artifacts are cleaned, but it never explicitly defines the field or says where to obtain its value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Revoke') and resource ('one in-memory Docker optimization authorization'), then specifies the cleanup scope: only verified session-owned temporary image tags and private snapshots. The 'optimization' qualifier clearly distinguishes it from sibling revoke_docker_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the name and description: call this when an optimization session authorization needs to be revoked. However, it does not explicitly state when to use it versus alternatives, mention prerequisites, or rule out the sibling revoke_docker_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_docker_sessionBIdempotent
Revoke one Docker authorization held by this project MCP process without stopping or removing a user container.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| session_id | Yes | |
| target_kind | Yes | |
| allowed_modes | Yes | |
| content_sha256 | Yes | |
| instance_count | Yes | |
| schema_version | No | |
| perflens_version | Yes | |
| max_workload_runs | Yes | |
| authorization_mode | Yes | |
| max_active_seconds | Yes | |
| max_evidence_bytes | Yes | |
| workload_runs_used | Yes | |
| active_seconds_used | Yes | |
| evidence_bytes_used | Yes | |
| invalidation_reason | No | |
| workload_spec_sha256 | No | |
| project_identity_sha256 | Yes | |
| authorization_receipt_sha256 | Yes | |
| existing_target_identity_sha256 | No | |
| client_connection_identity_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate non-read-only, idempotent, and non-destructive behavior. The description adds value by specifying that the mutation is limited to the authorization and that the user container is neither stopped nor removed, which is useful context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; the key verb, object, scope, and an important non-effect are all included in 19 words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter revoke operation with a rich output schema and safety annotations, the description is mostly adequate, but it omits the relationship to related authorization/optimization tools and how the session_id is obtained. This leaves the agent to infer the surrounding lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden of explaining the session_id parameter, but it never mentions it or explains its source, format, or how to obtain it. The tool name and parameter name provide only weak inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('Revoke one Docker authorization') and scopes it to authorizations held by this project MCP process, and clarifies it does not stop or remove a user container. It does not explicitly contrast with the sibling revoke_docker_optimization_session, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when this MCP process holds a Docker authorization that should be revoked, but it provides no explicit when-to-use guidance or exclusions versus sibling tools such as revoke_docker_optimization_session or authorize_docker_session. The 'without stopping or removing a user container' clause is a behavioral qualifier, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_analysisARead-onlyIdempotent
Independently verify a stored Analysis fingerprint, metadata consistency, and weight conservation before Agent interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| checks | Yes | |
| status | Yes | |
| warnings | No | |
| analysis_id | Yes | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral context by specifying exactly what is checked: fingerprint, metadata consistency, and weight conservation. This goes beyond repeating annotation fields and tells the agent what verification means in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence. It starts with the action and immediately indicates the verification target and its workflow position, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a verification tool, the description successfully communicates what will be verified and when it should happen. Annotations cover read-only and idempotent behavior, and an output schema exists, so return-value explanation is not required. It could be more complete by naming which sibling verification tools it complements or by giving an example, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required string parameter, analysis_id, with zero description coverage. The tool description references 'stored Analysis', strongly implying analysis_id is that identifier, which is adequate for a single clear parameter. However, the description does not explicitly define the parameter format or how the ID relates to output, though the output schema may reduce the need for that detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('verify') and a specific resource type ('stored Analysis fingerprint, metadata consistency, and weight conservation'). It also includes a clear workflow context ('before Agent interpretation'). This distinguishes it from sibling tools like verify_trace_analysis by focusing on the stored Analysis object's integrity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use signal: run this verification before Agent interpretation. However, it does not explicitly mention alternatives or state when not to use this tool, leaving some comparative routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_trace_analysisARead-onlyIdempotent
Replay and verify a stored sched/off-CPU/lock analysis before Agent interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| clock | Yes | |
| checks | Yes | |
| limits | Yes | |
| source | Yes | |
| status | Yes | |
| target | Yes | |
| quality | Yes | |
| warnings | No | |
| conversion | Yes | |
| analysis_id | Yes | |
| input_bytes | Yes | |
| input_sha256 | Yes | |
| content_sha256 | Yes | |
| schema_version | No | |
| verification_id | Yes | |
| perflens_version | Yes | |
| verifier_version | No | |
| observation_window | Yes | |
| allowed_conclusions | Yes | |
| verification_status | Yes | |
| forbidden_conclusions | Yes | |
| analysis_artifact_type | Yes | |
| analysis_content_bytes | Yes | |
| analysis_content_sha256 | Yes | |
| verification_fingerprint | Yes | |
| agent_visible_content_sha256 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it 'replays' the analysis, implying re-execution or re-computation, which is behavioral context beyond annotations; but it doesn't disclose side effects (e.g., whether replay has external dependencies, whether it reproduces from raw traces, or requires prior artifacts) or what happens if the analysis_id is stale or invalid. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that front-loads the action ('Replay and verify') and specifies the resource scope upfront. No wasted words, and it is easy to scan. It earns a high score for efficiency but lacks some depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: 1 required string parameter, and output schema present. The description clearly communicates the tool's purpose and pipeline position ('before Agent interpretation'). However, it doesn't clarify important edge cases such as whether the analysis must already be collected, what counts as 'stored', or how verification results are returned despite the output schema existing. Given the simplicity, it is mostly complete, but a small gap remains in defining prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is only one parameter, analysis_id. The description uses the term 'stored sched/off-CPU/lock analysis' suggesting the analysis_id refers to an already stored/replayed analysis, but it doesn't explain the format, source, or lifecycle of analysis_id beyond what the schema already says (string). With only 1 param and no schema description, the description provides minimal added semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Replay and verify') and a specific resource ('a stored sched/off-CPU/lock analysis'). It clearly indicates the tool processes an existing analysis before agent interpretation. However, it doesn't explicitly distinguish it from the sibling 'verify_analysis' or 'analyze_trace_evidence', which are similar in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage in a verification workflow before agent interpretation but does not state when to use this tool vs alternatives like verify_analysis, analyze_trace_evidence, or inspect_collection_capabilities. There is no explicit when-not-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
34 tool updates
v0.3.2- Changed
analyze_benchmark12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
analyze_collection12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
analyze_profile12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
analyze_trace_evidence12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
authorize_docker_optimization_session - Added
authorize_docker_session - Added
authorize_managed_docker_session - Changed
build_diagnosis_bundle12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
build_docker_optimization_candidate - Changed
classify_hotspots12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
collect_docker_optimization_workload - Added
collect_docker_target - Added
collect_managed_docker_workload - Changed
collect_profile12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
collect_project_workload12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
compare_benchmarks12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
compare_container_measurements - Added
compare_docker_optimization_iterations - Changed
compare_profiles12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
discover_docker_processes - Changed
execute_collection_plan12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
finalize_docker_optimization_candidate - Changed
get_call_paths12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
get_hotspot_details12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Added
inspect_docker_capability - Added
inspect_docker_optimization_capability - Changed
list_hotspots12 fields changed- added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / kernel_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kernel Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Kernel Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved Unknown Context Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / unresolved_user_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unresolved User Self Weight" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_percentAdded value: +{ + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Percent" +} - added
Output schema / $defs / EvidenceQuality / properties / user_context_self_weightAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Context Self Weight" +}
- Changed
plan_automatic_collection3 fields changed- added
Output schema / $defsAdded value: +{ + "ContainerCollectionCgroupBinding": { + "additionalProperties": false, + "properties": { + "identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Identity Sha256", + "type": "string" + }, + "inode": { + "exclusiveMinimum": 0, + "title": "Inode", + "type": "integer" + }, + "version": { + "const": "v2", + "default": "v2", + "title": "Version", + "type": "string" + } + }, + "required": [ + "inode", + "identity_sha256" + ], + "title": "ContainerCollectionCgroupBinding", + "type": "object" + }, + "ContainerCollectionNamespaceBinding": { + "additionalProperties": false, + "properties": { + "cgroup_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Cgroup Namespace Inode", + "type": "integer" + }, + "mount_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Mount Namespace Inode", + "type": "integer" + }, + "pid_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Pid Namespace Inode", + "type": "integer" + }, + "user_namespace_inode": { + "exclusiveMinimum": 0, + "title": "User Namespace Inode", + "type": "integer" + } + }, + "required": [ + "pid_namespace_inode", + "user_namespace_inode", + "mount_namespace_inode", + "cgroup_namespace_inode" + ], + "title": "ContainerCollectionNamespaceBinding", + "type": "object" + }, + "ContainerCollectionTargetBinding": { + "additionalProperties": false, + "description": "Privacy-safe Linux identity required to revalidate one Docker target.", + "properties": { + "adapter_recipe_id": { + "enum": [ + "local-docker-read-v1", + "local-docker-managed-v1" + ], + "title": "Adapter Recipe Id", + "type": "string" + }, + "adapter_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Adapter Sha256", + "type": "string" + }, + "cgroup": { + "$ref": "#/$defs/ContainerCollectionCgroupBinding" + }, + "container_identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Container Identity Sha256", + "type": "string" + }, + "container_pid": { + "exclusiveMinimum": 0, + "title": "Container Pid", + "type": "integer" + }, + "executable_name": { + "pattern": "^[^/\\x00]{1,255}$", + "title": "Executable Name", + "type": "string" + }, + "host_pid": { + "exclusiveMinimum": 0, + "title": "Host Pid", + "type": "integer" + }, + "host_start_time_ticks": { + "exclusiveMinimum": 0, + "title": "Host Start Time Ticks", + "type": "integer" + }, + "host_uid": { + "minimum": 0, + "title": "Host Uid", + "type": "integer" + }, + "identity_fingerprint": { + "pattern": "^[a-f0-9]{64}$", + "title": "Identity Fingerprint", + "type": "string" + }, + "image_identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Image Identity Sha256", + "type": "string" + }, + "namespace": { + "$ref": "#/$defs/ContainerCollectionNamespaceBinding" + }, + "rootful_risk_authorized": { + "default": false, + "title": "Rootful Risk Authorized", + "type": "boolean" + }, + "target_content_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Target Content Sha256", + "type": "string" + }, + "target_id": { + "pattern": "^container-target-[a-f0-9]{20}$", + "title": "Target Id", + "type": "string" + }, + "target_kind": { + "enum": [ + "existing_container", + "managed_temporary_container" + ], + "title": "Target Kind", + "type": "string" + }, + "uid_mapping": { + "enum": [ + "rootless_same_uid", + "rootful_same_uid", + "rootful_cross_uid" + ], + "title": "Uid Mapping", + "type": "string" + } + }, + "required": [ + "target_id", + "target_kind", + "target_content_sha256", + "container_identity_sha256", + "image_identity_sha256", + "identity_fingerprint", + "container_pid", + "host_pid", + "host_uid", + "host_start_time_ticks", + "executable_name", + "namespace", + "cgroup", + "uid_mapping", + "adapter_recipe_id", + "adapter_sha256" + ], + "title": "ContainerCollectionTargetBinding", + "type": "object" + } +} - added
Output schema / properties / container_targetAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ContainerCollectionTargetBinding" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / target_runtimeAdded value: +{ + "default": "host", + "enum": [ + "host", + "docker" + ], + "title": "Target Runtime", + "type": "string" +}
- Added
preview_docker_optimization_session - Changed
read_artifact_page1 field changed- changed
Input schema / properties / artifact_type / enumPrevious value: -[ - "analysis", - "benchmark", - "benchmark-comparison", - "collection", - "diagnosis", - "profile-comparison", - "project-run", - "trace-evidence", - "scheduler-analysis", - "off-cpu-analysis", - "lock-analysis" -]New value: +[ + "analysis", + "benchmark", + "benchmark-comparison", + "collection", + "diagnosis", + "profile-comparison", + "project-run", + "trace-evidence", + "scheduler-analysis", + "off-cpu-analysis", + "lock-analysis", + "container-resource-context", + "container-run", + "container-workload-spec", + "container-measurement", + "container-matched-comparison", + "container-module-snapshot", + "container-symbol-context" +]
- Added
resolve_docker_target - Added
revoke_docker_optimization_session - Added
revoke_docker_session - Changed
verify_trace_analysis5 fields changed- added
Output schema / $defs / ContainerCollectionCgroupBindingAdded value: +{ + "additionalProperties": false, + "properties": { + "identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Identity Sha256", + "type": "string" + }, + "inode": { + "exclusiveMinimum": 0, + "title": "Inode", + "type": "integer" + }, + "version": { + "const": "v2", + "default": "v2", + "title": "Version", + "type": "string" + } + }, + "required": [ + "inode", + "identity_sha256" + ], + "title": "ContainerCollectionCgroupBinding", + "type": "object" +} - added
Output schema / $defs / ContainerCollectionNamespaceBindingAdded value: +{ + "additionalProperties": false, + "properties": { + "cgroup_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Cgroup Namespace Inode", + "type": "integer" + }, + "mount_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Mount Namespace Inode", + "type": "integer" + }, + "pid_namespace_inode": { + "exclusiveMinimum": 0, + "title": "Pid Namespace Inode", + "type": "integer" + }, + "user_namespace_inode": { + "exclusiveMinimum": 0, + "title": "User Namespace Inode", + "type": "integer" + } + }, + "required": [ + "pid_namespace_inode", + "user_namespace_inode", + "mount_namespace_inode", + "cgroup_namespace_inode" + ], + "title": "ContainerCollectionNamespaceBinding", + "type": "object" +} - added
Output schema / $defs / ContainerCollectionTargetBindingAdded value: +{ + "additionalProperties": false, + "description": "Privacy-safe Linux identity required to revalidate one Docker target.", + "properties": { + "adapter_recipe_id": { + "enum": [ + "local-docker-read-v1", + "local-docker-managed-v1" + ], + "title": "Adapter Recipe Id", + "type": "string" + }, + "adapter_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Adapter Sha256", + "type": "string" + }, + "cgroup": { + "$ref": "#/$defs/ContainerCollectionCgroupBinding" + }, + "container_identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Container Identity Sha256", + "type": "string" + }, + "container_pid": { + "exclusiveMinimum": 0, + "title": "Container Pid", + "type": "integer" + }, + "executable_name": { + "pattern": "^[^/\\x00]{1,255}$", + "title": "Executable Name", + "type": "string" + }, + "host_pid": { + "exclusiveMinimum": 0, + "title": "Host Pid", + "type": "integer" + }, + "host_start_time_ticks": { + "exclusiveMinimum": 0, + "title": "Host Start Time Ticks", + "type": "integer" + }, + "host_uid": { + "minimum": 0, + "title": "Host Uid", + "type": "integer" + }, + "identity_fingerprint": { + "pattern": "^[a-f0-9]{64}$", + "title": "Identity Fingerprint", + "type": "string" + }, + "image_identity_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Image Identity Sha256", + "type": "string" + }, + "namespace": { + "$ref": "#/$defs/ContainerCollectionNamespaceBinding" + }, + "rootful_risk_authorized": { + "default": false, + "title": "Rootful Risk Authorized", + "type": "boolean" + }, + "target_content_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Target Content Sha256", + "type": "string" + }, + "target_id": { + "pattern": "^container-target-[a-f0-9]{20}$", + "title": "Target Id", + "type": "string" + }, + "target_kind": { + "enum": [ + "existing_container", + "managed_temporary_container" + ], + "title": "Target Kind", + "type": "string" + }, + "uid_mapping": { + "enum": [ + "rootless_same_uid", + "rootful_same_uid", + "rootful_cross_uid" + ], + "title": "Uid Mapping", + "type": "string" + } + }, + "required": [ + "target_id", + "target_kind", + "target_content_sha256", + "container_identity_sha256", + "image_identity_sha256", + "identity_fingerprint", + "container_pid", + "host_pid", + "host_uid", + "host_start_time_ticks", + "executable_name", + "namespace", + "cgroup", + "uid_mapping", + "adapter_recipe_id", + "adapter_sha256" + ], + "title": "ContainerCollectionTargetBinding", + "type": "object" +} - added
Output schema / $defs / TraceTargetIdentity / properties / container_targetAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ContainerCollectionTargetBinding" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / $defs / TraceTargetIdentity / properties / target_runtimeAdded value: +{ + "default": "host", + "enum": [ + "host", + "docker" + ], + "title": "Target Runtime", + "type": "string" +}
19 tool updates
v0.3.0- Changed
analyze_benchmark2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
analyze_collection2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
analyze_profile2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
analyze_trace_evidence - Changed
build_diagnosis_bundle2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
classify_hotspots3 fields changed- added
Output schema / $defs / EvidenceQualityAdded value: +{ + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "$ref": "#/$defs/EvidenceQuality" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "items", - "total_items" -]New value: +[ + "analysis_id", + "evidence_quality", + "items", + "total_items" +]
- Changed
collect_profile3 fields changed- changed
Input schema / properties / events / defaultPrevious value: -[ - "cycles", - "instructions", - "cache-references", - "cache-misses", - "branches", - "branch-misses", - "context-switches", - "cpu-migrations", - "page-faults" -]New value: +[ + "cycles", + "instructions", + "cache-references", + "cache-misses", + "branches", + "branch-misses", + "task-clock", + "context-switches", + "cpu-migrations", + "page-faults" +] - added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
collect_project_workload5 fields changed- added
Input schema / properties / authorization / constAdded value: +"I_EXPLICITLY_AUTHORIZE_PROJECT_EXECUTION" - added
Input schema / properties / event_sourceAdded value: +{ + "default": "auto", + "enum": [ + "auto", + "hardware_required", + "software_only" + ], + "title": "Event Source", + "type": "string" +} - changed
Input schema / properties / events / defaultPrevious value: -[ - "cycles", - "instructions", - "cache-references", - "cache-misses", - "branches", - "branch-misses", - "context-switches", - "cpu-migrations", - "page-faults" -]New value: +[ + "cycles", + "instructions", + "cache-references", + "cache-misses", + "branches", + "branch-misses" +] - added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
compare_benchmarks2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
compare_profiles2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
execute_collection_plan2 fields changed- added
Output schema / $defsAdded value: +{ + "EvidenceQuality": { + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" + } +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/EvidenceQuality" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
get_call_paths7 fields changed- added
Output schema / $defs / CallPathFrame / properties / normalization_mergedAdded value: +{ + "default": false, + "title": "Normalization Merged", + "type": "boolean" +} - added
Output schema / $defs / CallPathFrame / properties / symbol_variant_countAdded value: +{ + "description": "Exact raw-symbol variant count when symbol_variants_truncated is false; otherwise a conservative observed lower bound", + "minimum": 1, + "title": "Symbol Variant Count", + "type": "integer" +} - added
Output schema / $defs / CallPathFrame / properties / symbol_variants_truncatedAdded value: +{ + "default": false, + "title": "Symbol Variants Truncated", + "type": "boolean" +} - changed
Output schema / $defs / CallPathFrame / requiredPrevious value: -[ - "symbol", - "dso" -]New value: +[ + "symbol", + "dso", + "symbol_variant_count" +] - added
Output schema / $defs / EvidenceQualityAdded value: +{ + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" +} - added
Output schema / properties / evidence_qualityAdded value: +{ + "$ref": "#/$defs/EvidenceQuality" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "symbol", - "items", - "total_items" -]New value: +[ + "analysis_id", + "evidence_quality", + "symbol", + "items", + "total_items" +]
- Changed
get_hotspot_details13 fields changed- added
Output schema / $defs / CallPathFrame / properties / normalization_mergedAdded value: +{ + "default": false, + "title": "Normalization Merged", + "type": "boolean" +} - added
Output schema / $defs / CallPathFrame / properties / symbol_variant_countAdded value: +{ + "description": "Exact raw-symbol variant count when symbol_variants_truncated is false; otherwise a conservative observed lower bound", + "minimum": 1, + "title": "Symbol Variant Count", + "type": "integer" +} - added
Output schema / $defs / CallPathFrame / properties / symbol_variants_truncatedAdded value: +{ + "default": false, + "title": "Symbol Variants Truncated", + "type": "boolean" +} - changed
Output schema / $defs / CallPathFrame / requiredPrevious value: -[ - "symbol", - "dso" -]New value: +[ + "symbol", + "dso", + "symbol_variant_count" +] - added
Output schema / $defs / EvidenceQualityAdded value: +{ + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" +} - added
Output schema / $defs / Hotspot / properties / normalization_mergedAdded value: +{ + "default": false, + "title": "Normalization Merged", + "type": "boolean" +} - added
Output schema / $defs / Hotspot / properties / source_locations_truncatedAdded value: +{ + "default": false, + "title": "Source Locations Truncated", + "type": "boolean" +} - added
Output schema / $defs / Hotspot / properties / symbol_variant_countAdded value: +{ + "description": "Exact raw-symbol variant count when symbol_variants_truncated is false; otherwise a conservative observed lower bound", + "minimum": 0, + "title": "Symbol Variant Count", + "type": "integer" +} - added
Output schema / $defs / Hotspot / properties / symbol_variantsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "title": "Symbol Variants", + "type": "array" +} - added
Output schema / $defs / Hotspot / properties / symbol_variants_truncatedAdded value: +{ + "default": false, + "title": "Symbol Variants Truncated", + "type": "boolean" +} - changed
Output schema / $defs / Hotspot / requiredPrevious value: -[ - "hotspot_id", - "symbol", - "dso", - "self_weight", - "inclusive_weight", - "sample_count", - "stack_occurrence_count", - "self_percent", - "inclusive_percent", - "thread_count" -]New value: +[ + "hotspot_id", + "symbol", + "dso", + "self_weight", + "inclusive_weight", + "sample_count", + "stack_occurrence_count", + "self_percent", + "inclusive_percent", + "thread_count", + "symbol_variant_count" +] - added
Output schema / properties / evidence_qualityAdded value: +{ + "$ref": "#/$defs/EvidenceQuality" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "hotspot", - "dominant_call_paths", - "classifications", - "limitations" -]New value: +[ + "analysis_id", + "evidence_quality", + "hotspot", + "dominant_call_paths", + "classifications", + "limitations" +]
- Changed
inspect_collection_capabilities4 fields changed- added
Output schema / properties / hardware_pmu_reasonAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hardware Pmu Reason" +} - added
Output schema / properties / hardware_pmu_statusAdded value: +{ + "default": "unknown", + "enum": [ + "available", + "unavailable", + "unknown" + ], + "title": "Hardware Pmu Status", + "type": "string" +} - added
Output schema / properties / software_counting_statusAdded value: +{ + "default": "unknown", + "enum": [ + "available", + "unavailable", + "unknown" + ], + "title": "Software Counting Status", + "type": "string" +} - added
Output schema / properties / software_sampling_statusAdded value: +{ + "default": "unknown", + "enum": [ + "available", + "unavailable", + "unknown" + ], + "title": "Software Sampling Status", + "type": "string" +}
- Changed
list_hotspots9 fields changed- added
Output schema / $defs / EvidenceQualityAdded value: +{ + "additionalProperties": false, + "properties": { + "actual_event_source": { + "default": "unknown", + "enum": [ + "hardware", + "software", + "unknown" + ], + "title": "Actual Event Source", + "type": "string" + }, + "address_annotation_line_count": { + "minimum": 0, + "title": "Address Annotation Line Count", + "type": "integer" + }, + "aggregated_frame_occurrence_count": { + "minimum": 0, + "title": "Aggregated Frame Occurrence Count", + "type": "integer" + }, + "allowed_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Allowed Conclusions", + "type": "array" + }, + "call_graph_weight": { + "minimum": 0, + "title": "Call Graph Weight", + "type": "integer" + }, + "call_graph_weight_percent": { + "maximum": 100, + "minimum": 0, + "title": "Call Graph Weight Percent", + "type": "number" + }, + "collection_limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Collection Limitations", + "type": "array" + }, + "duplicate_frame_line_count": { + "minimum": 0, + "title": "Duplicate Frame Line Count", + "type": "integer" + }, + "event": { + "title": "Event", + "type": "string" + }, + "exported_call_path_count": { + "minimum": 0, + "title": "Exported Call Path Count", + "type": "integer" + }, + "exported_hotspot_count": { + "minimum": 0, + "title": "Exported Hotspot Count", + "type": "integer" + }, + "fallback_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "forbidden_conclusions": { + "default": [], + "items": { + "type": "string" + }, + "title": "Forbidden Conclusions", + "type": "array" + }, + "frame_line_count": { + "minimum": 0, + "title": "Frame Line Count", + "type": "integer" + }, + "inline_frame_count": { + "minimum": 0, + "title": "Inline Frame Count", + "type": "integer" + }, + "input_bytes": { + "minimum": 0, + "title": "Input Bytes", + "type": "integer" + }, + "input_sha256": { + "pattern": "^[a-f0-9]{64}$", + "title": "Input Sha256", + "type": "string" + }, + "limitations": { + "default": [], + "items": { + "type": "string" + }, + "title": "Limitations", + "type": "array" + }, + "malformed_record_count": { + "minimum": 0, + "title": "Malformed Record Count", + "type": "integer" + }, + "normalization_merge_count": { + "minimum": 0, + "title": "Normalization Merge Count", + "type": "integer" + }, + "omitted_call_path_weight": { + "minimum": 0, + "title": "Omitted Call Path Weight", + "type": "integer" + }, + "omitted_hotspot_self_weight": { + "minimum": 0, + "title": "Omitted Hotspot Self Weight", + "type": "integer" + }, + "parser_invariants_passed": { + "title": "Parser Invariants Passed", + "type": "boolean" + }, + "quality_status": { + "enum": [ + "verified", + "partial" + ], + "title": "Quality Status", + "type": "string" + }, + "sample_count": { + "minimum": 0, + "title": "Sample Count", + "type": "integer" + }, + "schema_version": { + "const": "1.0", + "default": "1.0", + "title": "Schema Version", + "type": "string" + }, + "source_annotation_line_count": { + "minimum": 0, + "title": "Source Annotation Line Count", + "type": "integer" + }, + "source_collection_artifact_sha256": { + "anyOf": [ + { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Artifact Sha256" + }, + "source_collection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Collection Id" + }, + "source_line_frame_count": { + "minimum": 0, + "title": "Source Line Frame Count", + "type": "integer" + }, + "source_line_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Source Line Self Percent", + "type": "number" + }, + "source_line_self_weight": { + "minimum": 0, + "title": "Source Line Self Weight", + "type": "integer" + }, + "source_locations_truncated_hotspot_count": { + "minimum": 0, + "title": "Source Locations Truncated Hotspot Count", + "type": "integer" + }, + "total_call_path_count": { + "minimum": 0, + "title": "Total Call Path Count", + "type": "integer" + }, + "total_hotspot_count": { + "minimum": 0, + "title": "Total Hotspot Count", + "type": "integer" + }, + "total_weight": { + "minimum": 0, + "title": "Total Weight", + "type": "integer" + }, + "unicode_replacement_count": { + "minimum": 0, + "title": "Unicode Replacement Count", + "type": "integer" + }, + "unresolved_self_percent": { + "maximum": 100, + "minimum": 0, + "title": "Unresolved Self Percent", + "type": "number" + }, + "unresolved_self_weight": { + "minimum": 0, + "title": "Unresolved Self Weight", + "type": "integer" + }, + "warning_count": { + "minimum": 0, + "title": "Warning Count", + "type": "integer" + }, + "warnings_truncated": { + "title": "Warnings Truncated", + "type": "boolean" + }, + "weight_source": { + "title": "Weight Source", + "type": "string" + }, + "weight_unit": { + "title": "Weight Unit", + "type": "string" + } + }, + "required": [ + "quality_status", + "parser_invariants_passed", + "input_sha256", + "input_bytes", + "sample_count", + "total_weight", + "event", + "weight_unit", + "weight_source", + "malformed_record_count", + "warning_count", + "warnings_truncated", + "unicode_replacement_count", + "frame_line_count", + "duplicate_frame_line_count", + "address_annotation_line_count", + "source_annotation_line_count", + "aggregated_frame_occurrence_count", + "unresolved_self_weight", + "unresolved_self_percent", + "call_graph_weight", + "call_graph_weight_percent", + "source_line_frame_count", + "source_line_self_weight", + "source_line_self_percent", + "inline_frame_count", + "normalization_merge_count", + "source_locations_truncated_hotspot_count", + "total_hotspot_count", + "exported_hotspot_count", + "omitted_hotspot_self_weight", + "total_call_path_count", + "exported_call_path_count", + "omitted_call_path_weight" + ], + "title": "EvidenceQuality", + "type": "object" +} - added
Output schema / $defs / Hotspot / properties / normalization_mergedAdded value: +{ + "default": false, + "title": "Normalization Merged", + "type": "boolean" +} - added
Output schema / $defs / Hotspot / properties / source_locations_truncatedAdded value: +{ + "default": false, + "title": "Source Locations Truncated", + "type": "boolean" +} - added
Output schema / $defs / Hotspot / properties / symbol_variant_countAdded value: +{ + "description": "Exact raw-symbol variant count when symbol_variants_truncated is false; otherwise a conservative observed lower bound", + "minimum": 0, + "title": "Symbol Variant Count", + "type": "integer" +} - added
Output schema / $defs / Hotspot / properties / symbol_variantsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "title": "Symbol Variants", + "type": "array" +} - added
Output schema / $defs / Hotspot / properties / symbol_variants_truncatedAdded value: +{ + "default": false, + "title": "Symbol Variants Truncated", + "type": "boolean" +} - changed
Output schema / $defs / Hotspot / requiredPrevious value: -[ - "hotspot_id", - "symbol", - "dso", - "self_weight", - "inclusive_weight", - "sample_count", - "stack_occurrence_count", - "self_percent", - "inclusive_percent", - "thread_count" -]New value: +[ + "hotspot_id", + "symbol", + "dso", + "self_weight", + "inclusive_weight", + "sample_count", + "stack_occurrence_count", + "self_percent", + "inclusive_percent", + "thread_count", + "symbol_variant_count" +] - added
Output schema / properties / evidence_qualityAdded value: +{ + "$ref": "#/$defs/EvidenceQuality" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "items", - "total_items" -]New value: +[ + "analysis_id", + "evidence_quality", + "items", + "total_items" +]
- Changed
plan_automatic_collection7 fields changed- added
Input schema / properties / event_sourceAdded value: +{ + "default": "auto", + "enum": [ + "auto", + "hardware_required", + "software_only" + ], + "title": "Event Source", + "type": "string" +} - changed
Input schema / properties / events / defaultPrevious value: -[ - "cycles", - "instructions", - "cache-references", - "cache-misses", - "branches", - "branch-misses", - "context-switches", - "cpu-migrations", - "page-faults" -]New value: +[ + "cycles", + "instructions", + "cache-references", + "cache-misses", + "branches", + "branch-misses" +] - added
Output schema / properties / fallback_allowedAdded value: +{ + "default": false, + "title": "Fallback Allowed", + "type": "boolean" +} - added
Output schema / properties / fallback_eventsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "title": "Fallback Events", + "type": "array" +} - added
Output schema / properties / fallback_record_eventAdded value: +{ + "anyOf": [ + { + "const": "cpu-clock", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Record Event" +} - added
Output schema / properties / record_eventAdded value: +{ + "anyOf": [ + { + "enum": [ + "cycles", + "cpu-clock" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Record Event" +} - added
Output schema / properties / requested_event_sourceAdded value: +{ + "default": "auto", + "enum": [ + "auto", + "hardware_required", + "software_only" + ], + "title": "Requested Event Source", + "type": "string" +}
- Changed
read_artifact_page1 field changed- added
Input schema / properties / artifact_type / enumAdded value: +[ + "analysis", + "benchmark", + "benchmark-comparison", + "collection", + "diagnosis", + "profile-comparison", + "project-run", + "trace-evidence", + "scheduler-analysis", + "off-cpu-analysis", + "lock-analysis" +]
- Added
verify_analysis - Added
verify_trace_analysis
3 tool updates
v0.2.0- Changed
collect_profile1 field changed- changed
Input schema / properties / max_output_bytes / defaultPrevious value: -1073741824New value: +268435456
- Changed
collect_project_workload1 field changed- changed
Input schema / properties / max_output_bytes / defaultPrevious value: -1073741824New value: +268435456
- Changed
plan_automatic_collection1 field changed- changed
Input schema / properties / max_output_bytes / defaultPrevious value: -1073741824New value: +268435456
5 tool updates
v0.1.1- Added
analyze_collection - Added
collect_project_workload - Added
execute_collection_plan - Added
inspect_collection_capabilities - Added
plan_automatic_collection
13 tool updates
v0.1.0- First observed
analyze_benchmark - First observed
analyze_profile - First observed
build_diagnosis_bundle - First observed
classify_hotspots - First observed
collect_profile - First observed
compare_benchmarks - First observed
compare_profiles - First observed
get_call_paths - First observed
get_hotspot_details - First observed
get_source_context - First observed
list_hotspots - First observed
read_artifact_page - First observed
resolve_source
TDQS
Several tool families have dangerously similar names and overlapping purposes, especially the three authorize_docker_*_session tools, the three collect_docker_* tools, and the inspect_*_capability/capabilities tools. Though the descriptions are explicit and clarify boundaries, an agent would need to read long, nuanced descriptions carefully to avoid misselecting the wrong authorization or collection mode.
Tool names overwhelmingly follow a clear verb_noun snake_case pattern, and there is no mixing of camelCase or wildly different conventions. Minor inconsistencies exist in modifier placement (managed_docker vs docker_optimization) and singular/plural mismatches like capabilities vs capability, but the overall naming style is predictable.
38 tools is well above the 25+ threshold that indicates an overgrown surface. The workflows are complex, but the count is unwieldy and many tools are fine-grained variations of the same operation family, making the set feel heavier than its core purpose requires.
The tool set covers the apparent performance-analysis and Docker-optimization domain broadly: inspection, authorization, collection, analysis, verification, comparison, source resolution, diagnosis, and cleanup. Minor gaps like generic artifact deletion or session-status listing exist, but agents can work around them via read_artifact_page and the existing lifecycle tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Bounded CSV profiling plus review-only host monitoring requests through one remote MCP endpoint.
1Structured analysis API and remote MCP tool for text, JSON records and numeric series.
A paid remote MCP for ppt-master, built to return verdicts, receipts, usage logs, and audit-ready JS
A paid remote MCP for AI SDK benchmark dashboard, built to return verdicts, receipts, usage logs, an
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceLocal-first CLI and MCP server for turning Xcode Instruments artifacts into bounded, agent-sized evidence, with support for analyses like Time Profiler, Allocations, Network, and more.2MIT
- FlicenseAqualityCmaintenanceEnables LLMs to analyze Linux perf data files using 26 perf analysis commands, including report, script, annotate, and more, through typed tool parameters.26-
- AlicenseAqualityCmaintenanceA comprehensive Linux system performance profiler with MCP remote invocation support, featuring advanced process profiling and flame graph generation.101Apache 2.0
- AlicenseBqualityBmaintenanceEnables explaining Linux incidents over SSH with baseline-aware MCP tooling, including live diagnostics, SQLite history, and review-first workflows.102952MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/link0-o/PerfLens'
If you have feedback or need assistance with the MCP directory API, please join our Discord server