diff --git a/.agents/skills/dotnet-inspect/SKILL.md b/.agents/skills/dotnet-inspect/SKILL.md index 76d2196..cdcd719 100644 --- a/.agents/skills/dotnet-inspect/SKILL.md +++ b/.agents/skills/dotnet-inspect/SKILL.md @@ -19,7 +19,7 @@ dnx dotnet-inspect -y -- | Find an API | `find Pattern`, then reuse the reported `--platform`, `--package`, or `--library`. | | Inspect overloads | `member Type --platform Lib -m Name -S "Member Index"` | | Select an overload | `member Type --platform Lib Name:1` or `Name~digest` | -| Source/implementation | `type Type -S "Source Files"`; `member Type Name:1 -S @Source`; `library/package Foo -S "Source Files"` | +| Source/implementation | `type Type -S "Source Files"`; `member Type -m Name -S "Source Locations"`; `member Type Name:1 -S @Source`; `library/package Foo -S "Source Files"` | | Inspect a type | `type Type --package Foo`; add `--all` for non-public/hidden/extra members. | | Compare APIs | `diff --package Foo@old..new --breaking`; use `--additive` for new APIs. | | Inspect packages | `package Foo -S Signals`, `-S "Library Files"`, `--library` | @@ -43,13 +43,15 @@ dnx dotnet-inspect -y -- member string IndexOf:7 -S Callers --caller-package Sys Selector syntax: first run `member Type --platform Lib -m Name -S "Member Index"` (or the package/library source `find` reported). Then pass either `Name:N` (1-based, for the current index) or `Name~digest` (stable, from the `Stable` column) as the positional member selector. `Canonical Signature` is the printed digest input. Prefer `Name~digest` in notes, scripts, issues, and handoffs; use `Name:N` for immediate drill-in. `--show-index` is an alias for `-S "Member Index"`. -A selected overload defaults to `Signature`; bare `-S` adds `Decompiled Source`. Use `-S @Source` for source and IL evidence: `Decompiled Source` (raised C#), `Annotated Source` (C# with hidden-fact comments and interleaved IL), `Original Source`, and `IL`. Use `Annotated Source` or `IL` when exact opcodes, offsets, branches, tokens, or calls matter. +A selected overload defaults to `Signature`; bare `-S` adds `Decompiled Source`. Use `-S "Source Locations"` for member file/line URLs without fetching source bodies. Use `-S @Source` for source and IL evidence: `Decompiled Source` (raised C#), `Annotated Source` (C# with hidden-fact comments and interleaved IL), `Original Source`, and `IL`. Use `Annotated Source` or `IL` when exact opcodes, offsets, branches, tokens, or calls matter. -Use `-S Calls` for direct call-site evidence, `-S Callers` for reverse edges (widen with `--bin`, `--project`, or `--caller-package`), `-S "Call Graph"` for a bounded outbound tree, `-S "Unsafe Operations"` for unsafe evidence, and `-S Facts --tsv` for structured hidden facts. +Use `-S Calls` for direct call-site evidence, `-S Callers` for reverse edges (widen with `--bin`, `--project`, or `--caller-package`), `-S "Call Graph"` for a bounded outbound tree, `-S "Caller Graph"` for a bounded reverse tree that shows which entry points or callers reach the selected method (its root is labelled `target`, far entry points `entrypoint`, and `loop call` marks a caller that invokes toward the target inside a loop), `-S "Unsafe Operations"` for unsafe evidence, and `-S Facts --tsv` for structured hidden facts. + +For perf or correctness triage, rank by call-graph leverage (direct callers, root reach, fanout, depth, loop calls): `library MyLib.dll -S "Top Leverage"` ranks across the whole assembly, or `type T --library MyLib.dll --all -S "Top Leverage"` ranks one type's members. The `Root Reach` column counts the distinct roots (entry points / public API with no in-assembly caller) that transitively reach a member, so a low-fanin helper sitting under many roots still shows wide inbound scale. Both library- and type-scope rows carry a copyable `Stable` selector (`Name~digest`), a `Visibility` column, and a `Selector` (`Name:N`), and mark compiler-`Generated` rows; copy the `Stable` selector to drill straight in. Then drill the top candidates with `-S "Call Graph,Facts"` (outbound cost) and `-S "Caller Graph"` (inbound reach). On either graph, project the *kind* of cost per node with `--fields "Fanout,Fanin,Depth,Loop,Alloc,Copy,Unsafe,Reflection,Throw,Exceptions,Catch,Finally,EvidenceIL"` (signals are opt-in and annotate only the nodes that carry them; for exception-risk triage read `Throw`/`Catch`/`Finally` over `Caller Graph`). Add `--tsv` or `-n` to trim to the top rows. The ranking surfaces non-public helpers, so add `--all` when drilling a private/internal candidate (otherwise member selection can't resolve it). ## Query and output -Default output is Markdown. Use `--table` for compact aligned rows, `--tsv` for stable snake_case headers with no embedded tabs/newlines, `--jsonl` for one JSON object per row, `--json` for structured documents, and `--mermaid` for graph-shaped output. +Default output is Markdown. Use `--table` for compact aligned rows, `--tsv` for stable snake_case headers with no embedded tabs/newlines, `--jsonl` for one JSON object per row, `--json` for structured documents, `--bare` for one undecorated payload or URL list, `--count` for a bare row count, and `--mermaid` for graph-shaped output. Use `-D` to discover sections/columns, `-S Section` to select sections by name or wildcard, and `--columns`/`--fields` to project values. Discover first instead of guessing names. @@ -86,7 +88,7 @@ Use `diff --package Foo@old..new --breaking` for migration work, `--additive` fo For unsafe audits, start with `library MyLib.dll -S @Audit`, then drill into `member Type Method:1 --library MyLib.dll -S "Unsafe Operations,IL"`. -Use `type Name -S "Decompiled Source" --raw` for a whole-type C# listing. Use `source --il-offset 0x06000001+0x5` for crash diagnostics with MethodDef token plus IL offset. If decompiled output looks wrong, capture `Decompiled Source`, `Annotated Source`, `Original Source`, and `IL`; maintainers diagnose pipeline state with DecompilerHarness. +Use `--bare` to extract one undecorated payload: `type Name -S "Decompiled Source" --bare`, `member Type Method:1 -S "Source Locations" --bare`, or `package Foo --readme --bare`. SourceLink URLs default to raw/fetchable form; add `--blob` for browser URLs. Use `library Foo --il-offset 0x06000001+0x5` for crash diagnostics with MethodDef token plus IL offset. If decompiled output looks wrong, capture `Decompiled Source`, `Annotated Source`, `Original Source`, and `IL`; maintainers diagnose pipeline state with DecompilerHarness. ## General tips diff --git a/apm.lock.yaml b/apm.lock.yaml index c398c41..c8ff8e9 100644 --- a/apm.lock.yaml +++ b/apm.lock.yaml @@ -1,5 +1,5 @@ lockfile_version: '1' -generated_at: '2026-06-23T15:52:11.964372+00:00' +generated_at: '2026-06-24T15:35:01.687659+00:00' apm_version: 0.14.0 dependencies: - repo_url: Faithlife/RepoConventions @@ -13,10 +13,10 @@ dependencies: content_hash: sha256:6e4dc45d96d7adc8f1d3e3300d9ee90eef9c2d0231ea83ad86fed64fca105034 - repo_url: richlander/dotnet-inspect host: github.com - resolved_commit: 724c4d47ec0a233d510c32c077dde87ad0c25a11 + resolved_commit: eca70c384d2edbb4d57bc4e195d0cc62de4212e4 virtual_path: skills/dotnet-inspect is_virtual: true package_type: claude_skill deployed_files: - .agents/skills/dotnet-inspect - content_hash: sha256:262ffacd0085e68677cc4b12ae4fc8bfda66ac1069123c52381811f9ef4bf6a8 + content_hash: sha256:27c5facb98687a18c8169f89f84e74153bf3f43bd201c187ec6c226d618045bd diff --git a/dotnet-tools.json b/dotnet-tools.json index 27e59e3..5f6ced5 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "facilityconformance": { - "version": "2.38.2", + "version": "2.38.3", "commands": [ "FacilityConformance" ],