Skip to main content
Glama
link0-o

PerfLens MCP Server

by link0-o

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 客户端。

CI Python 3.12+ License: Apache-2.0

简体中文 | 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 unknown for 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 script text;

  • perf.data conversion through an allowlisted system perf process;

  • 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/record collection. Release v0.3.0 also provides a separate target-filtered Trace Helper and verified sched/off_cpu/lock pipeline through the opt-in full_diagnostics feature 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 to mutable_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.whl

Then opt one project in. Other projects do not see the Skill or MCP server:

cd /absolute/path/to/project
perflens init

For a project that intentionally profiles a local Docker workload, initialize the project with:

perflens init --docker

This 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/project

Human-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-acceptance

The 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 --version

Installing directly from a source checkout is also supported:

python -m pip install .

For development with uv:

uv sync --all-groups

Related MCP server: perf-mcp

Analyze folded stacks

perflens analyze-folded \
  --input tests/fixtures/folded/normal.folded \
  --output build/analysis.json

Input follows standard folded syntax:

main;worker;parse;malloc 182
main;worker;compute 271

Frames 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.json

Or let PerfLens run the same read-only conversion:

perflens analyze-perf-data \
  --input perf.data \
  --output build/analysis.json

analyze-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.md

Source 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.json

Profile 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_PROFILING

Release 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/workspace

The 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/workspace

Add --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-writes

Restart 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-audit

The reproducible performance harness is:

uv run python tests/performance/benchmark_folded.py \
  --records 1000 100000 1000000 \
  --repetitions 3

See 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.data portability remains dependent on the installed perf version 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_diagnostics profile. 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 tools
analyze_benchmarkA
Idempotent

Normalize a supported benchmark JSON file and store the typed artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
source_formatNoauto
benchmark_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_collectionC
Idempotent

Analyze a stored CPU record collection artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. 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.

Purpose4/5

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.

Usage Guidelines2/5

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_profileC
Idempotent

Analyze an allowed folded, perf-script, or perf.data profile and store JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
source_typeNoauto

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_evidenceA
Idempotent

Deterministically analyze a stored, normalized sched/off-CPU/lock TraceEvidence artifact and verify it before Agent use.

ParametersJSON Schema
NameRequiredDescriptionDefault
trace_evidence_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_sessionB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYes
authorizationYes
preview_content_sha256Yes
authorization_summary_sha256Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
budgetYes
recipe_idYes
created_atYes
expires_atYes
preview_idYes
session_idYes
updated_atYes
builds_usedYes
allowed_modesYes
content_sha256Yes
schema_versionNo
perflens_versionYes
baseline_build_idNo
build_seconds_usedYes
workload_runs_usedYes
evidence_bytes_usedYes
invalidation_reasonNo
session_artifact_idYes
candidate_rounds_usedYes
project_policy_sha256Yes
recipe_content_sha256Yes
preview_content_sha256Yes
project_identity_sha256Yes
recoverable_retries_usedYes
latest_candidate_build_idNo
temporary_image_bytes_usedYes
authorization_receipt_sha256Yes
workload_active_seconds_usedYes
build_capability_content_sha256Yes
client_connection_identity_sha256Yes

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_sessionA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_pidNo
allowed_modesYes
authorizationYes
container_pidNo
authorization_modeNo
container_referenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
created_atYes
expires_atYes
session_idYes
target_kindYes
allowed_modesYes
content_sha256Yes
instance_countYes
schema_versionNo
perflens_versionYes
max_workload_runsYes
authorization_modeYes
max_active_secondsYes
max_evidence_bytesYes
workload_runs_usedYes
active_seconds_usedYes
evidence_bytes_usedYes
invalidation_reasonNo
workload_spec_sha256No
project_identity_sha256Yes
authorization_receipt_sha256Yes
existing_target_identity_sha256No
client_connection_identity_sha256Yes

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. 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.

Purpose5/5

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.

Usage Guidelines4/5

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_sessionA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
allowed_modesYes
authorizationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
created_atYes
expires_atYes
session_idYes
target_kindYes
allowed_modesYes
content_sha256Yes
instance_countYes
schema_versionNo
perflens_versionYes
max_workload_runsYes
authorization_modeYes
max_active_secondsYes
max_evidence_bytesYes
workload_runs_usedYes
active_seconds_usedYes
evidence_bytes_usedYes
invalidation_reasonNo
workload_spec_sha256No
project_identity_sha256Yes
authorization_receipt_sha256Yes
existing_target_identity_sha256No
client_connection_identity_sha256Yes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_bundleB
Idempotent

Build and store the full evidence-constrained diagnosis artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_candidateB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_kindYes
session_idYes
candidate_roundYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_hotspotsB
Read-onlyIdempotent

Apply generic candidate-only rules and return a bounded classification page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
analysis_idYes
next_cursorNo
total_itemsYes
schema_versionNo
evidence_qualityYes

TDQS

B3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate 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.

Purpose3/5

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.

Usage Guidelines2/5

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_workloadA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNostat
eventsNo
build_idYes
call_graphNodwarf
session_idYes
event_sourceNoauto
frequency_hzNo
duration_secondsNo
max_output_bytesNo
workload_timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_targetB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorecord
eventsNo
host_pidNo
call_graphNodwarf
session_idYes
event_sourceNoauto
frequency_hzNo
container_pidNo
duration_secondsNo
max_output_bytesNo
container_referenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_workloadB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorecord
eventsNo
call_graphNodwarf
session_idYes
event_sourceNoauto
frequency_hzNo
duration_secondsNo
max_output_bytesNo
workload_timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_profileB
Destructive

Run bounded perf record/stat/sched/lock/off-CPU collection only after explicit server and per-call authorization.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidNo
modeNorecord
eventsNo
call_graphNodwarf
executableNo
output_pathYes
frequency_hzNo
authorizationYes
timeout_secondsNo
duration_secondsNo
max_output_bytesNo
target_argumentsNo
pid_authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_workloadA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorecord
eventsNo
argumentsNo
call_graphNodwarf
executableYes
event_sourceNoauto
frequency_hzNo
project_rootYes
authorizationYes
duration_secondsNo
max_output_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose5/5

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.

Usage Guidelines4/5

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_benchmarksC
Idempotent

Compare repeated benchmark values with condition and impact checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_benchmark_idYes
candidate_benchmark_idYes
minimum_practical_impact_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate 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.

Purpose4/5

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.

Usage Guidelines2/5

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_measurementsC
Idempotent

Compare two Docker measurements using bound profile, absolute benchmark, correctness, treatment, and whole-container resource evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_analysis_idYes
baseline_benchmark_idYes
candidate_analysis_idYes
minimum_delta_percentNo
candidate_benchmark_idYes
baseline_measurement_idYes
candidate_measurement_idYes
minimum_practical_impact_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_iterationsB
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
baseline_build_idYes
candidate_build_idYes
baseline_analysis_idYes
baseline_benchmark_idYes
candidate_analysis_idYes
minimum_delta_percentNo
candidate_benchmark_idYes
baseline_measurement_idYes
candidate_measurement_idYes
minimum_practical_impact_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose5/5

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.

Usage Guidelines2/5

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_profilesC
Idempotent

Compare two stored analyses and store bounded profile-difference evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_analysis_idYes
candidate_analysis_idYes
minimum_delta_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. 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.

Purpose4/5

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.

Usage Guidelines2/5

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_processesA
Read-onlyIdempotent

Observe bounded CPU deltas for one existing local container and return only container PID, host PID, executable name, and a safe recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
container_referenceYes
observation_duration_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
candidatesYes
created_atYes
limitationsNo
inventory_idYes
content_sha256Yes
schema_versionNo
candidate_countYes
perflens_versionYes
candidates_truncatedYes
recommended_host_pidNo
observation_duration_msYes
automatic_recommendationYes
container_identity_sha256Yes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. 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.

Purpose5/5

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.

Usage Guidelines3/5

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_planA
Destructive

Execute one previously planned PID collection through the restricted collector broker. Plans are short-lived and single-use.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_candidateB
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
dispositionYes
iteration_idNo
authorizationNo
evaluation_reasonNo
candidate_build_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo
evidence_qualityNo

TDQS

B3.2/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_pathsB
Read-onlyIdempotent

Return a bounded page of dominant call paths, optionally containing a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
symbolNo
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
symbolYes
analysis_idYes
next_cursorNo
total_itemsYes
schema_versionNo
evidence_qualityYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. 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.

Purpose4/5

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.

Usage Guidelines2/5

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_detailsB
Read-onlyIdempotent

Return one hotspot with bounded dominant paths, classifications, and limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
hotspot_idYes
analysis_idYes
call_path_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hotspotYes
analysis_idYes
limitationsYes
schema_versionNo
classificationsYes
evidence_qualityYes
dominant_call_pathsYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose4/5

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.

Usage Guidelines2/5

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_contextB
Read-onlyIdempotent

Read bounded source lines within one configured allowed workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
lineYes
afterNo
beforeNo
workspace_rootYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileYes
lineYes
linesYes
end_lineYes
start_lineYes
schema_versionNo

TDQS

B3.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate 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.

Purpose4/5

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.

Usage Guidelines2/5

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_capabilitiesA
Read-onlyIdempotent

Inspect perf, kernel policy, capabilities, and collection-mode availability without sampling or attaching to a process.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
modesYes
platformYes
warningsNo
perf_versionNo
ptrace_scopeNo
capability_idYes
effective_uidYes
kptr_restrictNo
kernel_releaseYes
schema_versionNo
perf_executableNo
recommendationsNo
tracefs_accessibleYes
hardware_pmu_reasonNo
hardware_pmu_statusNo
perf_event_paranoidNo
effective_capabilitiesNo
perf_file_capabilitiesNo
software_counting_statusNo
software_sampling_statusNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_capabilityA
Read-onlyIdempotent

Inspect the fixed local Docker endpoint and cgroup-v2 support without starting, stopping, building, pulling, or profiling a container.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
checked_atYes
docker_cliNo
next_stepsNo
api_versionNo
daemon_modeYes
limitationsNo
capability_idYes
endpoint_kindYes
cgroup_versionNo
content_sha256Yes
schema_versionNo
perflens_versionYes
build_or_pull_supportedNo
server_operating_systemNo
remote_endpoint_supportedNo
managed_container_executionNo
existing_container_discoveryNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_capabilityA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
builderNo
checked_atYes
next_stepsNo
buildx_toolNo
docker_toolNo
limitationsNo
capability_idYes
content_sha256Yes
schema_versionNo
build_supportedYes
perflens_versionYes
base_image_presentYes
collector_availableYes
benchmark_configuredYes
project_policy_sha256Yes
available_network_tiersNo
runtime_capability_sha256Yes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_hotspotsB
Read-onlyIdempotent

Return a bounded page of hotspots from a stored analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
sort_byNoself_percent
categoryNo
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
analysis_idYes
next_cursorNo
total_itemsYes
schema_versionNo
evidence_qualityYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_collectionA
Read-onlyIdempotent

Create a short-lived PID-bound collection plan. This does not sample or attach.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYes
modeNorecord
eventsNo
call_graphNodwarf
event_sourceNoauto
frequency_hzNo
duration_secondsNo
max_output_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
eventsNo
backendYes
plan_idYes
warningsNo
call_graphNo
expires_atYes
target_pidYes
target_uidYes
target_typeYes
frequency_hzNo
record_eventNo
policy_statusYes
schema_versionNo
target_runtimeNo
fallback_eventsNo
container_targetNo
duration_secondsYes
fallback_allowedNo
max_output_bytesYes
required_privilegeYes
fallback_record_eventNo
requested_event_sourceNo
target_start_time_ticksYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose5/5

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.

Usage Guidelines4/5

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_sessionA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
allowed_modesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
budgetYes
warningsNo
recipe_idYes
created_atYes
expires_atYes
preview_idYes
network_tierYes
allowed_modesYes
context_pathsYes
mutable_pathsYes
content_sha256Yes
schema_versionNo
planned_actionsYes
perflens_versionYes
base_image_presentYes
mutable_dockerfileYes
baseline_context_idYes
build_capability_idYes
project_policy_sha256Yes
recipe_content_sha256Yes
baseline_build_requiredNo
mutable_dependency_lockYes
project_identity_sha256Yes
runtime_capability_sha256Yes
authorization_summary_sha256Yes
baseline_context_content_sha256Yes
build_capability_content_sha256Yes
client_connection_identity_sha256Yes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_pageB
Read-onlyIdempotent

Read at most 64 KiB from a stored JSON artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
artifact_idYes
artifact_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
artifact_idYes
next_offsetNo
total_bytesYes
artifact_typeYes
schema_versionNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose5/5

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.

Usage Guidelines2/5

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_targetB
Read-onlyIdempotent

Re-resolve one container process against Docker, /proc, PID start time, namespaces, cgroup identity, and UID policy without profiling it.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_pidNo
container_pidNo
container_referenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
cgroupYes
host_pidYes
host_uidYes
namespaceYes
target_idYes
created_atYes
target_kindYes
uid_mappingYes
container_pidYes
adapter_sha256Yes
content_sha256Yes
schema_versionNo
executable_nameYes
perflens_versionYes
adapter_recipe_idYes
validation_statusNo
allowed_conclusionsNo
identity_fingerprintYes
forbidden_conclusionsNo
host_start_time_ticksYes
image_identity_sha256Yes
rootful_risk_authorizedNo
container_identity_sha256Yes

TDQS

B3.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose4/5

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.

Usage Guidelines2/5

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_sourceC
Read-onlyIdempotent

Resolve a verified module offset using an allowed ELF/debug file.

ParametersJSON Schema
NameRequiredDescriptionDefault
binary_pathYes
module_offsetYes
runtime_addressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
framesYes
statusYes
build_idYes
warningsNo
binary_pathYes
module_offsetYes
schema_versionNo
runtime_addressNo
resolver_versionYes

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_sessionA
Idempotent

Revoke one in-memory Docker optimization authorization and conservatively clean only verified session-owned temporary image tags and private snapshots.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
budgetYes
recipe_idYes
created_atYes
expires_atYes
preview_idYes
session_idYes
updated_atYes
builds_usedYes
allowed_modesYes
content_sha256Yes
schema_versionNo
perflens_versionYes
baseline_build_idNo
build_seconds_usedYes
workload_runs_usedYes
evidence_bytes_usedYes
invalidation_reasonNo
session_artifact_idYes
candidate_rounds_usedYes
project_policy_sha256Yes
recipe_content_sha256Yes
preview_content_sha256Yes
project_identity_sha256Yes
recoverable_retries_usedYes
latest_candidate_build_idNo
temporary_image_bytes_usedYes
authorization_receipt_sha256Yes
workload_active_seconds_usedYes
build_capability_content_sha256Yes
client_connection_identity_sha256Yes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_sessionB
Idempotent

Revoke one Docker authorization held by this project MCP process without stopping or removing a user container.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
created_atYes
expires_atYes
session_idYes
target_kindYes
allowed_modesYes
content_sha256Yes
instance_countYes
schema_versionNo
perflens_versionYes
max_workload_runsYes
authorization_modeYes
max_active_secondsYes
max_evidence_bytesYes
workload_runs_usedYes
active_seconds_usedYes
evidence_bytes_usedYes
invalidation_reasonNo
workload_spec_sha256No
project_identity_sha256Yes
authorization_receipt_sha256Yes
existing_target_identity_sha256No
client_connection_identity_sha256Yes

TDQS

B3.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_analysisA
Read-onlyIdempotent

Independently verify a stored Analysis fingerprint, metadata consistency, and weight conservation before Agent interpretation.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
checksYes
statusYes
warningsNo
analysis_idYes
schema_versionNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_analysisA
Read-onlyIdempotent

Replay and verify a stored sched/off-CPU/lock analysis before Agent interpretation.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysis_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
clockYes
checksYes
limitsYes
sourceYes
statusYes
targetYes
qualityYes
warningsNo
conversionYes
analysis_idYes
input_bytesYes
input_sha256Yes
content_sha256Yes
schema_versionNo
verification_idYes
perflens_versionYes
verifier_versionNo
observation_windowYes
allowed_conclusionsYes
verification_statusYes
forbidden_conclusionsYes
analysis_artifact_typeYes
analysis_content_bytesYes
analysis_content_sha256Yes
verification_fingerprintYes
agent_visible_content_sha256Yes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 34 tool updatesv0.3.2
    • Changedanalyze_benchmark12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedanalyze_collection12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedanalyze_profile12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedanalyze_trace_evidence12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedauthorize_docker_optimization_session
    • Addedauthorize_docker_session
    • Addedauthorize_managed_docker_session
    • Changedbuild_diagnosis_bundle12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedbuild_docker_optimization_candidate
    • Changedclassify_hotspots12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedcollect_docker_optimization_workload
    • Addedcollect_docker_target
    • Addedcollect_managed_docker_workload
    • Changedcollect_profile12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedcollect_project_workload12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedcompare_benchmarks12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedcompare_container_measurements
    • Addedcompare_docker_optimization_iterations
    • Changedcompare_profiles12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addeddiscover_docker_processes
    • Changedexecute_collection_plan12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedfinalize_docker_optimization_candidate
    • Changedget_call_paths12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedget_hotspot_details12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Addedinspect_docker_capability
    • Addedinspect_docker_optimization_capability
    • Changedlist_hotspots12 fields changed
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kernel Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Kernel Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved Unknown Context Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Unresolved User Self Weight"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Percent"
        +}
      • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "User Context Self Weight"
        +}
    • Changedplan_automatic_collection3 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / container_target
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/ContainerCollectionTargetBinding"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / target_runtime
        Added value: +{
        +  "default": "host",
        +  "enum": [
        +    "host",
        +    "docker"
        +  ],
        +  "title": "Target Runtime",
        +  "type": "string"
        +}
    • Addedpreview_docker_optimization_session
    • Changedread_artifact_page1 field changed
      • changedInput schema / properties / artifact_type / enum
        Previous 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"
        +]
    • Addedresolve_docker_target
    • Addedrevoke_docker_optimization_session
    • Addedrevoke_docker_session
    • Changedverify_trace_analysis5 fields changed
      • addedOutput schema / $defs / ContainerCollectionCgroupBinding
        Added 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"
        +}
      • addedOutput schema / $defs / ContainerCollectionNamespaceBinding
        Added 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"
        +}
      • addedOutput schema / $defs / ContainerCollectionTargetBinding
        Added 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"
        +}
      • addedOutput schema / $defs / TraceTargetIdentity / properties / container_target
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/ContainerCollectionTargetBinding"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / $defs / TraceTargetIdentity / properties / target_runtime
        Added value: +{
        +  "default": "host",
        +  "enum": [
        +    "host",
        +    "docker"
        +  ],
        +  "title": "Target Runtime",
        +  "type": "string"
        +}
  2. 19 tool updatesv0.3.0
    • Changedanalyze_benchmark2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedanalyze_collection2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedanalyze_profile2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Addedanalyze_trace_evidence
    • Changedbuild_diagnosis_bundle2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedclassify_hotspots3 fields changed
      • addedOutput schema / $defs / EvidenceQuality
        Added 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"
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "$ref": "#/$defs/EvidenceQuality"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "analysis_id",
        -  "items",
        -  "total_items"
        -]New value: +[
        +  "analysis_id",
        +  "evidence_quality",
        +  "items",
        +  "total_items"
        +]
    • Changedcollect_profile3 fields changed
      • changedInput schema / properties / events / default
        Previous 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"
        +]
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedcollect_project_workload5 fields changed
      • addedInput schema / properties / authorization / const
        Added value: +"I_EXPLICITLY_AUTHORIZE_PROJECT_EXECUTION"
      • addedInput schema / properties / event_source
        Added value: +{
        +  "default": "auto",
        +  "enum": [
        +    "auto",
        +    "hardware_required",
        +    "software_only"
        +  ],
        +  "title": "Event Source",
        +  "type": "string"
        +}
      • changedInput schema / properties / events / default
        Previous 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"
        +]
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedcompare_benchmarks2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedcompare_profiles2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedexecute_collection_plan2 fields changed
      • addedOutput schema / $defs
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvidenceQuality"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedget_call_paths7 fields changed
      • addedOutput schema / $defs / CallPathFrame / properties / normalization_merged
        Added value: +{
        +  "default": false,
        +  "title": "Normalization Merged",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / CallPathFrame / properties / symbol_variant_count
        Added 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"
        +}
      • addedOutput schema / $defs / CallPathFrame / properties / symbol_variants_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Symbol Variants Truncated",
        +  "type": "boolean"
        +}
      • changedOutput schema / $defs / CallPathFrame / required
        Previous value: -[
        -  "symbol",
        -  "dso"
        -]New value: +[
        +  "symbol",
        +  "dso",
        +  "symbol_variant_count"
        +]
      • addedOutput schema / $defs / EvidenceQuality
        Added 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"
        +}
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "$ref": "#/$defs/EvidenceQuality"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "analysis_id",
        -  "symbol",
        -  "items",
        -  "total_items"
        -]New value: +[
        +  "analysis_id",
        +  "evidence_quality",
        +  "symbol",
        +  "items",
        +  "total_items"
        +]
    • Changedget_hotspot_details13 fields changed
      • addedOutput schema / $defs / CallPathFrame / properties / normalization_merged
        Added value: +{
        +  "default": false,
        +  "title": "Normalization Merged",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / CallPathFrame / properties / symbol_variant_count
        Added 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"
        +}
      • addedOutput schema / $defs / CallPathFrame / properties / symbol_variants_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Symbol Variants Truncated",
        +  "type": "boolean"
        +}
      • changedOutput schema / $defs / CallPathFrame / required
        Previous value: -[
        -  "symbol",
        -  "dso"
        -]New value: +[
        +  "symbol",
        +  "dso",
        +  "symbol_variant_count"
        +]
      • addedOutput schema / $defs / EvidenceQuality
        Added 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"
        +}
      • addedOutput schema / $defs / Hotspot / properties / normalization_merged
        Added value: +{
        +  "default": false,
        +  "title": "Normalization Merged",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / Hotspot / properties / source_locations_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Source Locations Truncated",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variant_count
        Added 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"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variants
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Symbol Variants",
        +  "type": "array"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variants_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Symbol Variants Truncated",
        +  "type": "boolean"
        +}
      • changedOutput schema / $defs / Hotspot / required
        Previous 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"
        +]
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "$ref": "#/$defs/EvidenceQuality"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "analysis_id",
        -  "hotspot",
        -  "dominant_call_paths",
        -  "classifications",
        -  "limitations"
        -]New value: +[
        +  "analysis_id",
        +  "evidence_quality",
        +  "hotspot",
        +  "dominant_call_paths",
        +  "classifications",
        +  "limitations"
        +]
    • Changedinspect_collection_capabilities4 fields changed
      • addedOutput schema / properties / hardware_pmu_reason
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Hardware Pmu Reason"
        +}
      • addedOutput schema / properties / hardware_pmu_status
        Added value: +{
        +  "default": "unknown",
        +  "enum": [
        +    "available",
        +    "unavailable",
        +    "unknown"
        +  ],
        +  "title": "Hardware Pmu Status",
        +  "type": "string"
        +}
      • addedOutput schema / properties / software_counting_status
        Added value: +{
        +  "default": "unknown",
        +  "enum": [
        +    "available",
        +    "unavailable",
        +    "unknown"
        +  ],
        +  "title": "Software Counting Status",
        +  "type": "string"
        +}
      • addedOutput schema / properties / software_sampling_status
        Added value: +{
        +  "default": "unknown",
        +  "enum": [
        +    "available",
        +    "unavailable",
        +    "unknown"
        +  ],
        +  "title": "Software Sampling Status",
        +  "type": "string"
        +}
    • Changedlist_hotspots9 fields changed
      • addedOutput schema / $defs / EvidenceQuality
        Added 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"
        +}
      • addedOutput schema / $defs / Hotspot / properties / normalization_merged
        Added value: +{
        +  "default": false,
        +  "title": "Normalization Merged",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / Hotspot / properties / source_locations_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Source Locations Truncated",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variant_count
        Added 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"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variants
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Symbol Variants",
        +  "type": "array"
        +}
      • addedOutput schema / $defs / Hotspot / properties / symbol_variants_truncated
        Added value: +{
        +  "default": false,
        +  "title": "Symbol Variants Truncated",
        +  "type": "boolean"
        +}
      • changedOutput schema / $defs / Hotspot / required
        Previous 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"
        +]
      • addedOutput schema / properties / evidence_quality
        Added value: +{
        +  "$ref": "#/$defs/EvidenceQuality"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "analysis_id",
        -  "items",
        -  "total_items"
        -]New value: +[
        +  "analysis_id",
        +  "evidence_quality",
        +  "items",
        +  "total_items"
        +]
    • Changedplan_automatic_collection7 fields changed
      • addedInput schema / properties / event_source
        Added value: +{
        +  "default": "auto",
        +  "enum": [
        +    "auto",
        +    "hardware_required",
        +    "software_only"
        +  ],
        +  "title": "Event Source",
        +  "type": "string"
        +}
      • changedInput schema / properties / events / default
        Previous 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"
        +]
      • addedOutput schema / properties / fallback_allowed
        Added value: +{
        +  "default": false,
        +  "title": "Fallback Allowed",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / fallback_events
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Fallback Events",
        +  "type": "array"
        +}
      • addedOutput schema / properties / fallback_record_event
        Added value: +{
        +  "anyOf": [
        +    {
        +      "const": "cpu-clock",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Fallback Record Event"
        +}
      • addedOutput schema / properties / record_event
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "cycles",
        +        "cpu-clock"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Record Event"
        +}
      • addedOutput schema / properties / requested_event_source
        Added value: +{
        +  "default": "auto",
        +  "enum": [
        +    "auto",
        +    "hardware_required",
        +    "software_only"
        +  ],
        +  "title": "Requested Event Source",
        +  "type": "string"
        +}
    • Changedread_artifact_page1 field changed
      • addedInput schema / properties / artifact_type / enum
        Added value: +[
        +  "analysis",
        +  "benchmark",
        +  "benchmark-comparison",
        +  "collection",
        +  "diagnosis",
        +  "profile-comparison",
        +  "project-run",
        +  "trace-evidence",
        +  "scheduler-analysis",
        +  "off-cpu-analysis",
        +  "lock-analysis"
        +]
    • Addedverify_analysis
    • Addedverify_trace_analysis
  3. 3 tool updatesv0.2.0
    • Changedcollect_profile1 field changed
      • changedInput schema / properties / max_output_bytes / default
        Previous value: -1073741824New value: +268435456
    • Changedcollect_project_workload1 field changed
      • changedInput schema / properties / max_output_bytes / default
        Previous value: -1073741824New value: +268435456
    • Changedplan_automatic_collection1 field changed
      • changedInput schema / properties / max_output_bytes / default
        Previous value: -1073741824New value: +268435456
  4. 5 tool updatesv0.1.1
    • Addedanalyze_collection
    • Addedcollect_project_workload
    • Addedexecute_collection_plan
    • Addedinspect_collection_capabilities
    • Addedplan_automatic_collection
  5. 13 tool updatesv0.1.0
    • First observedanalyze_benchmark
    • First observedanalyze_profile
    • First observedbuild_diagnosis_bundle
    • First observedclassify_hotspots
    • First observedcollect_profile
    • First observedcompare_benchmarks
    • First observedcompare_profiles
    • First observedget_call_paths
    • First observedget_hotspot_details
    • First observedget_source_context
    • First observedlist_hotspots
    • First observedread_artifact_page
    • First observedresolve_source

TDQS

B3.1/5.0
Disambiguation2/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Local-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.
    2
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables LLMs to analyze Linux perf data files using 26 perf analysis commands, including report, script, annotate, and more, through typed tool parameters.
    26
    -
  • A
    license
    A
    quality
    C
    maintenance
    A comprehensive Linux system performance profiler with MCP remote invocation support, featuring advanced process profiling and flame graph generation.
    10
    1
    Apache 2.0

Latest Blog Posts

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