Releases: pedrosakuma/dotnet-diagnostics
v0.14.0
What's Changed
- Bump DiagnosedBenchmarks sample to benchmarkdotnet 0.13.0 by @pedrosakuma in #358
- ci: strace-based Linux crash-repro job for SampleProfiler flake (refs #147) by @pedrosakuma in #359
- ci: stop strace -f from hanging on leaked tracees in crash-repro job by @pedrosakuma in #360
- ci: add non-ptrace LD_PRELOAD mmap-trace crash-repro job by @pedrosakuma in #361
- test: un-quarantine 3 hardcoded-skip CPU sampler tests via SkipOnLinuxCiFact by @pedrosakuma in #362
- chore: sweep repo-slug URLs to dotnet-diagnostics after rename by @pedrosakuma in #363
- docs: add v0.13.0 output-examples gallery + reorganize docs hub by track by @pedrosakuma in #364
- docs: reframe ptrace gate as cross-surface (MCP + CLI; BDN immune) by @pedrosakuma in #366
- docs: add practical authorization reference (docs/authorization.md) by @pedrosakuma in #368
- docs: scrub RFC 0001 citations to authorization.md; remove RFC 0001 by @pedrosakuma in #369
- docs: normalize tool-reference to English + repair drilldown section by @pedrosakuma in #370
- docs: scrub RFC 0002 citations and delete the RFC by @pedrosakuma in #371
- docs: remove 5 design-spike docs, keep the orchestrator spec by @pedrosakuma in #372
- chore(ghcr): publish container under the bundle name dotnet-diagnostics by @pedrosakuma in #373
- docs: slim root README + docs hub into drill-down structure by @pedrosakuma in #374
- docs: scrub last RFC 0001 dangling references by @pedrosakuma in #376
- ci: skip docs-only PRs + cache Docker layers + trim crash-dump uploads by @pedrosakuma in #377
- docs: add offenders-report example to output-examples by @pedrosakuma in #378
- feat: emit loadBase on native frames for ASLR-resilient handoff by @pedrosakuma in #379
- Persist per-row dispersion stats in KeyMatrixRow (#347 W3-2) by @pedrosakuma in #380
- Retire SampleDiffer: route typed N=2 diff through comparable projectors by @pedrosakuma in #381
- Normalize Portuguese "bootstrap implícito" to English (#389) by @pedrosakuma in #396
- feat: Wave A auto-hints (regex backtracking, channel write backpressure, active-timer-count) by @pedrosakuma in #399
- feat(cli): Wave A ergonomics — progress spinner, query redirect, dump path disclosure by @pedrosakuma in #400
- Add GCHeapStats per-gen + pinned-object trend view to gc-events (#384) by @pedrosakuma in #398
- Trim unified-tool [Description] bloat; move enums to discriminator params (#385) by @pedrosakuma in #397
- feat(cli): opt-in --launch child-launch dev mode for zero-privilege ptrace attach (#365) by @pedrosakuma in #382
- feat: add collect_events(kind=kestrel) Kestrel HTTP-server collector by @pedrosakuma in #402
- Add CLI shell completion scripts by @pedrosakuma in #401
- feat(networking): outbound-network collector (collect_events kind=networking) by @pedrosakuma in #404
- Add startup EventPipe collector by @pedrosakuma in #403
- docs(changelog): cut 0.14.0 (Phase 12 Wave A + Wave B) by @pedrosakuma in #405
Full Changelog: v0.13.0...v0.14.0
v0.13.0
What's Changed
- Add cpu + allocation demo benchmarks to DiagnosedBenchmarks sample by @pedrosakuma in #356
- Attribute allocation origin (call site), not just type by @pedrosakuma in #357
Full Changelog: v0.12.0...v0.13.0
v0.12.0
What's Changed
- feat(benchmarkdotnet): add cpu kind with per-frame hotspots to the diagnoser by @pedrosakuma in #354
- chore(benchmarks): consume published dotnet-diagnostics-benchmarkdotnet 0.11.0 by @pedrosakuma in #353
- feat(benchmarkdotnet): add allocation kind (per-type GCAllocationTick) to the diagnoser by @pedrosakuma in #355
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
- chore(deps): Bump the actions-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #306
- chore(deps): Bump azure/setup-helm from 4.3.0 to 5.0.0 by @dependabot[bot] in #274
- docs: review for two deliverables (CLI + MCP server) by @pedrosakuma in #312
- feat: CPU drilldown views (top-methods/by-module/by-namespace/hot-path/caller-callee) by @pedrosakuma in #316
- feat: GC drilldown views (timeline/longestPauses/byGeneration) by @pedrosakuma in #317
- feat: events catalog (collect_events kind=catalog) by @pedrosakuma in #318
- feat: DATAS analysis (collect_events kind=datas) by @pedrosakuma in #319
- C1: ComparableSnapshot substrate + datas/counters projectors by @pedrosakuma in #328
- feat(comparison): N-ary SnapshotDiffer engine (C2 #324) by @pedrosakuma in #329
- C4: extend compare_to_baseline for comparable snapshots by @pedrosakuma in #331
- Add CLI comparable snapshot compare by @pedrosakuma in #332
- C5: add N-way query_snapshot journey diffs by @pedrosakuma in #333
- C6 journey diff resource links by @pedrosakuma in #334
- docs(comparison): comparative + N-way trend investigation playbook (C7 #322) by @pedrosakuma in #335
- W2-0 scaffold: registry-driven diff gating by @pedrosakuma in #342
- W2-A: comparable projectors for heap/cpu/native/allocation (N-ary) by @pedrosakuma in #343
- W2-B: comparable projectors for contention (key-set) + threadpool (scalar) by @pedrosakuma in #344
- W2-C: expose dispersion mode on query_snapshot/compare_to_baseline + CLI by @pedrosakuma in #345
- refactor: drop DotnetDiagnosticsMcp prefix; scope Mcp to the MCP server (refs #346) by @pedrosakuma in #349
- docs: BenchmarkDotNet diagnoser shipping design (refs #346) by @pedrosakuma in #348
- build: ship DotnetDiagnostics.Core as a referenceable NuGet library (refs #346) by @pedrosakuma in #350
- feat(benchmarkdotnet): in-process diagnoser library by @pedrosakuma in #351
- feat(benchmarkdotnet): port DiagnosedBenchmarks sample to the in-process lib by @pedrosakuma in #352
Full Changelog: v0.10.0...v0.11.0
v0.10.0
What's Changed
- Improve tool discoverability and triage memory coverage (#280) by @pedrosakuma in #281
- Native (unmanaged) allocation sampler over perf (collect_sample kind=native-alloc) by @pedrosakuma in #282
- [CLI Phase 0] Relocate AddDiagnosticCoreServices Server to Core by @pedrosakuma in #289
- Extract host-neutral process-inspection use cases into Core (#285) by @pedrosakuma in #290
- Add diag host-mode spike inside the Server binary (#287) by @pedrosakuma in #291
- feat(cli): standalone DotnetDiagnosticsMcp.Cli (Core-only) — processes + capabilities by @pedrosakuma in #292
- Extract collect orchestration into Core; wire CLI collect (#288 PR2) by @pedrosakuma in #293
- Extract attach-guard + symbol-path validation into Core (#288 PR3a) by @pedrosakuma in #295
- Harden flaky RuntimeConfig + ThreadPool live tests (#294) by @pedrosakuma in #296
- Extract heap-inspection + process-dump into Core; wire CLI inspect-heap + dump (#288 PR3b) by @pedrosakuma in #297
- CLI query + get-bytes commands (Core-only) — #288 PR4 by @pedrosakuma in #298
- Remove Server diag spike + package standalone CLI (#288 PR5) by @pedrosakuma in #299
- CLI usability: project MCP-audience hints into CLI vocabulary (Tier 1) by @pedrosakuma in #303
- CLI usability Tier 2: de-MCP-ify capability/threadpool notes, per-subcommand --help (#302) by @pedrosakuma in #304
- Add stateful session REPL to the Core-only CLI (#300 PR1) by @pedrosakuma in #305
- Extract Core-owned dead-PID handle eviction (#300 PR2) by @pedrosakuma in #307
- CLI session heap query: extract projection views to Core (#300) by @pedrosakuma in #308
- Extract cpu-sample call-tree query to Core for CLI session reuse by @pedrosakuma in #309
- Extract thread-snapshot + off-cpu queries to Core for CLI session reuse by @pedrosakuma in #310
- feat(cli): bind a session target pid once (strand C of #300) by @pedrosakuma in #311
Full Changelog: v0.9.1...v0.10.0
v0.9.1
What's Changed
- fix(core): Windows smoke-test robustness (process enum, contention/threadpool call stacks, EventPipe start timeout) by @pedrosakuma in #278
Full Changelog: v0.9.0...v0.9.1
v0.9.0
What's Changed
- feat(symbols): resolve native/unresolved addresses to (module, rva | unmapped) by @pedrosakuma in #276
Full Changelog: v0.8.0...v0.9.0
v0.8.0 - GC Overlay & Diagnostic Improvements
Phase 13: GC Overlay & Diagnostic Improvements
New Features
GC Overlay for Activities - Correlate GC pause events with ActivitySource spans to identify requests impacted by garbage collection:
# Capture activities and GC simultaneously
collect_events(kind="activities") → act-handle
collect_events(kind="gc") → gc-handle
# Correlate to find impacted spans
query_collection(handle="act-handle", view="gc-overlay", gcHandle="gc-handle")Output includes:
- Impacted activities ranked by GC pause percentage
- Per-activity overlap metrics (pauseMs, pausePercent)
- Summary totals (impacted count, total GC overlap time)
Improvements
Contention Diagnostics on Linux - Improved hints when collect_events(kind="contention") returns no events on Linux (known EventPipe limitation). Now explicitly suggests:
collect_thread_snapshot()followed byquery_snapshot(view="lock-graph")to see contended SyncBlocks with waiter counts
Technical Notes
- LTTng-based contention was evaluated but requires
CAP_SYS_ADMINwhich is too invasive for sidecar deployments - SyncBlock-based approach works well with existing
CAP_SYS_PTRACErequirement - Allocation call-tree already existed via
collect_sample(kind="allocation")+query_snapshot(view="call-tree")
Full Changelog: v0.7.2...v0.8.0
v0.7.2 — Exception & Latency Indicators
What's New
Extended TopIndicators — Two new metrics for error and latency diagnostics:
| Indicator | Normal | Elevated | High | Critical |
|---|---|---|---|---|
exception-count |
0 | 1-10 | 10-50 | >50 |
request-duration-p95 |
<100ms | 100-500ms | 500ms-2s | >2s |
These surface error spikes and latency issues in the triage view even when the overall verdict is "healthy", enabling proactive optimization.
Full Changelog
Full Changelog: v0.7.1...v0.7.2
v0.7.1 — Ranked Top Indicators
What's New
Ranked Top Indicators for Proactive Optimization
The inspect_process(view="triage") now always returns TopIndicators — a ranked list of the most notable metrics even when the system is healthy. This enables proactive optimization, not just reactive firefighting.
Example output:
{
"verdict": "healthy",
"severity": "Healthy",
"topIndicators": [
{"name": "time-in-gc", "value": 8, "unit": "%", "score": 28, "level": "elevated"},
{"name": "cpu-usage", "value": 5, "unit": "%", "score": 3, "level": "normal"},
{"name": "alloc-rate", "value": 15, "unit": "MB/s", "score": 12, "level": "elevated"}
]
}Score bands:
| Metric | Normal | Elevated | High | Critical |
|---|---|---|---|---|
| cpu-usage | <30% | 30-70% | 70-90% | >90% |
| time-in-gc | <5% | 5-15% | 15-30% | >30% |
| queue-length | <10 | 10-50 | 50-200 | >200 |
| contention | <3 | 3-10 | 10-50 | >50 |
| alloc-rate | <10MB/s | 10-50 | 50-100 | >100 |
| gen2-gc | 0 | 1-2 | 3-9 | ≥10 |
This helps identify optimization opportunities before they become problems and understand the application's performance profile at a glance.
Full Changelog: v0.7.0...v0.7.1
Full Changelog: v0.7.0...v0.7.1