Scan C# source files for hard-to-test static dependencies — DateTime.Now/UtcNow, File.*, Directory.*, Environment.*, HttpClient, Console.*, Process.*, and other untestable statics. Produces a ranked report of static call sites by frequency. USE FOR: find untestable statics, scan for static dependencies, testability audit, identify hard-to-mock code, find DateTime.Now usage, detect static coupling, testability report, static analysis for testability. DO NOT USE FOR: generating wrappers (use gener
SkillScore68Maintained
Automatic
◆Coding pack
Last verified 9/1/2026
What it changes
Passed 12 of 18 test cases with the skill, and 9 of 18 without it.
Without skill50%
With skill68%
Checks it passed that the model alone missed
Categorizes Console calls under Console dependencies
Identifies injected dependencies as already providing a test seam
Includes file:line locations for the identified file system calls
and 7 more in the full report
7 fixed8 passed either way4 still failing3 broke
Pass-rate lift
+18 pp
Tokens
+115%
Agent turns
0%
Response time
-17%
Model gemini-3.6-flashMeasured 9/1/2026v215 of 22 cases passed with skill · 18 comparable
Tokens, turns and time describe resource use, not a dollar price.
See it in action
One of 7 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 7
Prompt
I only want to find file system statics in `src/Storage/DiskCache.cs`. Show me just the relevant category results and affected file lines without generating a full multi-category report.
What was checked, without and with the skill
Checked
Without skill
With skill
Restricts the report output strictly to File System category findings
Missed
Passed
Includes file:line locations for the identified file system calls
Missed
Passed
case-18 · gemini-3.6-flash · 9/1/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md189 linessingle file
Detect Static Dependencies
Scan a C# codebase for calls to hard-to-test static APIs and produce a ranked report showing which statics appear most frequently, which files are most affected, and which abstractions already exist in the .NET ecosystem to replace them.
When to Use
Auditing a project's testability before adding unit tests
Understanding the scope of static coupling in a legacy codebase
Prioritizing which statics to wrap first (highest-frequency wins)
Creating a migration plan for incremental testability improvements
Response Guidelines
Scale the response to the user's request. A question about a specific category (e.g., "find time statics") should focus on that category with file locations and counts, not produce a full report across all categories.
When the user provides a specific file or directory path, scan only that scope — do not expand to the entire solution unless asked.
The full structured report format in Step 4 is for comprehensive audit requests. For focused questions, return only the relevant subset (e.g., category summary + affected files for the requested category).
When Not to Use
The user wants wrappers generated (hand off to generate-testability-wrappers)
The user wants mechanical migration done (hand off to migrate-static-to-wrapper)
The statics are already behind interfaces or TimeProvider
The code is not C# / .NET
Inputs
Input
Required
Description
Target path
Yes
A file, directory, project (.csproj), or solution (.sln) to scan
Exclusion patterns
No
Glob patterns to skip (e.g., **/obj/**, **/Migrations/**)
Category filter
No
Limit to specific categories: time, filesystem, environment, network, console, process
Workflow
Step 1: Determine scan scope
Resolve the target to a set of .cs files:
If a .cs file, scan that single file.
If a directory, scan all .cs files recursively (excluding obj/, bin/).
If a .csproj, find its directory and scan .cs files within.
Correctly call native (C/C++) libraries from .NET using P/Invoke and LibraryImport. Covers function signatures, string marshalling, memory lifetime, SafeHandle, and cross-platform patterns. USE FOR: writing new P/Invoke or LibraryImport declarations, reviewing or debugging existing native interop code, wrapping a C or C++ library for use in .NET, diagnosing crashes, memory leaks, or corruption at the managed/native boundary. DO NOT USE FOR: COM interop, C++/CLI mixed-mode assemblies, or pure man