[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BXVPXHTGXDY48DWBST93N8":3,"skill-same:01M6BXVPXHTGXDY48DWBST93N8":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":15,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6BXVPXHTGXDY48DWBST93N8","filter-syntax",null,"Reference-only filter syntax for VSTest and Microsoft Testing Platform (MTP) with MSTest, NUnit, xUnit v3, and TUnit. Use when run-tests needs to create or translate a test filter after the platform and framework are known. Not for unfiltered runs or platform detection (use platform-detection); loaded by run-tests, never invoked directly.","Cratis\u002FSpecifications","Cratis","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16456213?v=4","01M6BXRH290K4C8RS4PTKK3HXQ","01M6BXRH6YXJMJ3140T8TVBSB4",1,"MIT","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ffilter-syntax\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ffilter-syntax\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"filter syntax","testing","translate","test","microsoft","microsoft testing platform","mstest","mtp","platform detection","create","run","framework","detection","nunit","xunit","2026-11-10 10:12:30",false,"---\nname: filter-syntax\ndescription: 'Reference-only filter syntax for VSTest and Microsoft Testing Platform (MTP) with MSTest, NUnit, xUnit v3, and TUnit. Use when run-tests needs to create or translate a test filter after the platform and framework are known. Not for unfiltered runs or platform detection (use platform-detection); loaded by run-tests, never invoked directly.'\nlicense: MIT\nmetadata:\n  user-invocable: 'false'\n  disable-model-invocation: 'true'\n---\n\u003C!-- cratis-ai-managed: skills\u002Ffilter-syntax\u002FSKILL.md -->\n\n\u003C!-- Modified by Cratis from dotnet's original (MIT): frontmatter, applicability, navigation and the changes listed in NOTICE. Upstream: https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills (plugins\u002Fdotnet-test\u002Fskills\u002Ffilter-syntax\u002FSKILL.md; see NOTICE) -->\n\n# Test Filter Syntax Reference\n\nCratis rules in `.cratis\u002Fai\u002Frules\u002F` (including `csharp.md`, `specs.csharp.md`, and `orleans.md`) and the `cratis-*` skills win where they differ. Specification authoring belongs to **cratis-specifications-csharp**; Cratis core repositories run xUnit v2 on VSTest.\n\nFilter syntax depends on the **platform** and **test framework**.\n\n## VSTest filters (MSTest, xUnit v2, NUnit on VSTest)\n\n```bash\ndotnet test --filter \u003CEXPRESSION>\n```\n\nExpression syntax: `\u003CProperty>\u003COperator>\u003CValue>[|&\u003CExpression>]`\n\n**Operators:**\n\n| Operator | Meaning |\n|----------|---------|\n| `=` | Exact match |\n| `!=` | Not exact match |\n| `~` | Contains |\n| `!~` | Does not contain |\n\n**Combinators:** `|` (OR), `&` (AND). Parentheses for grouping: `(A|B)&C`\n\n**Supported properties by framework:**\n\n| Framework | Properties |\n|-----------|-----------|\n| MSTest | `FullyQualifiedName`, `Name`, `ClassName`, `Priority`, `TestCategory` |\n| xUnit | `FullyQualifiedName`, `DisplayName`, `Traits` |\n| NUnit | `FullyQualifiedName`, `Name`, `Priority`, `TestCategory` |\n\nAn expression without an operator is treated as `FullyQualifiedName~\u003Cvalue>`.\n\n**Examples (VSTest):**\n\n```bash\n# Run tests whose name contains \"LoginTest\"\ndotnet test --filter \"Name~LoginTest\"\n\n# Run a specific test class\ndotnet test --filter \"ClassName=MyNamespace.MyTestClass\"\n\n# Run tests in a category\ndotnet test --filter \"TestCategory=Integration\"\n\n# Exclude a category\ndotnet test --filter \"TestCategory!=Slow\"\n\n# Combine: class AND category\ndotnet test --filter \"ClassName=MyNamespace.MyTestClass&TestCategory=Unit\"\n\n# Either of two classes\ndotnet test --filter \"ClassName=MyNamespace.ClassA|ClassName=MyNamespace.ClassB\"\n```\n\n## MTP filters — MSTest and NUnit\n\nMSTest and NUnit on MTP use the **same `--filter` syntax** as VSTest (same properties, operators, and combinators). The only difference is how the flag is passed:\n\n```bash\n# .NET SDK 8\u002F9 (after --)\ndotnet test -- --filter \"Name~LoginTest\"\n\n# .NET SDK 10+ (direct)\ndotnet test --filter \"Name~LoginTest\"\n```\n\n## MTP filters — xUnit (v3)\n\nxUnit v3 on MTP uses **framework-specific filter flags** instead of the generic `--filter` expression:\n\n| Flag | Description |\n|------|-------------|\n| `--filter-class \"name\"` | Run all tests in a given class |\n| `--filter-not-class \"name\"` | Exclude all tests in a given class |\n| `--filter-method \"name\"` | Run a specific test method |\n| `--filter-not-method \"name\"` | Exclude a specific test method |\n| `--filter-namespace \"name\"` | Run all tests in a namespace |\n| `--filter-not-namespace \"name\"` | Exclude all tests in a namespace |\n| `--filter-trait \"name=value\"` | Run tests with a matching trait |\n| `--filter-not-trait \"name=value\"` | Exclude tests with a matching trait |\n\nMultiple values can be specified with a single flag: `--filter-class Foo Bar`.\n\n```bash\n# .NET SDK 8\u002F9\ndotnet test -- --filter-class \"MyNamespace.LoginTests\"\n\n# .NET SDK 10+\ndotnet test --filter-class \"MyNamespace.LoginTests\"\n\n# Combine: namespace + trait\ndotnet test --filter-namespace \"MyApp.Tests.Integration\" --filter-trait \"Category=Smoke\"\n```\n\n### xUnit v3 query filter language\n\nFor complex expressions, use `--filter-query` with a path-segment syntax:\n\n```text\n\u002F\u003CassemblyFilter>\u002F\u003CnamespaceFilter>\u002F\u003CclassFilter>\u002F\u003CmethodFilter>[traitName=traitValue]\n```\n\nEach segment matches against: assembly name, namespace, class name, method name. Use `*` for \"match all\" in any segment. Documentation: \u003Chttps:\u002F\u002Fxunit.net\u002Fdocs\u002Fquery-filter-language>\n\n```shell\n# xUnit.net v3 MTP — using query language (assembly\u002Fnamespace\u002Fclass\u002Fmethod[trait])\ndotnet test -- --filter-query \"\u002F*\u002F*\u002F*IntegrationTests*\u002F*[Category=Smoke]\"\n```\n\n## MTP filters — TUnit\n\nTUnit uses `--treenode-filter` with a path-based syntax:\n\n```text\n--treenode-filter \"\u002F\u003CAssembly>\u002F\u003CNamespace>\u002F\u003CClassName>\u002F\u003CTestName>\"\n```\n\nWildcards (`*`) are supported in any segment. Filter operators can be appended to test names for property-based filtering.\n\n| Operator | Meaning |\n|----------|---------|\n| `*` | Wildcard match |\n| `=` | Exact property match (e.g., `[Category=Unit]`) |\n| `!=` | Exclude property value |\n| `&` | AND (combine conditions) |\n| `\\|` | OR (within a segment, requires parentheses) |\n\n**Examples (TUnit):**\n\n```bash\n# All tests in a class\ndotnet run --treenode-filter \"\u002F*\u002F*\u002FLoginTests\u002F*\"\n\n# A specific test\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002FAcceptCookiesTest\"\n\n# By namespace prefix (wildcard)\ndotnet run --treenode-filter \"\u002F*\u002FMyProject.Tests.Api*\u002F*\u002F*\"\n\n# By custom property\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category=Smoke]\"\n\n# Exclude by property\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category!=Slow]\"\n\n# OR across classes\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F(LoginTests)|(SignupTests)\u002F*\"\n\n# Combined: namespace + property\ndotnet run --treenode-filter \"\u002F*\u002FMyProject.Tests.Integration\u002F*\u002F*\u002F*[Priority=Critical]\"\n```\n\n## VSTest → MTP filter translation (for migration)\n\n**MSTest, NUnit, and xUnit.net v2 (with `YTest.MTP.XUnit2`)**: The VSTest `--filter` syntax is identical on both VSTest and MTP. No changes needed.\n\n**xUnit.net v3 (native MTP)**: xUnit.net v3 does NOT support the VSTest `--filter` syntax on MTP. Translate filters using xUnit.net v3's native options:\n\n| VSTest `--filter` syntax | xUnit.net v3 MTP equivalent | Notes |\n|---|---|---|\n| `FullyQualifiedName~ClassName` | `--filter-class *ClassName*` | Wildcards required for substring match |\n| `FullyQualifiedName=Ns.Class.Method` | `--filter-method Ns.Class.Method` | Exact match on fully qualified method |\n| `Name=MethodName` | `--filter-method *MethodName*` | Wildcards for substring match |\n| `Category=Value` (trait) | `--filter-trait \"Category=Value\"` | Filter by trait name\u002Fvalue pair |\n| Complex expressions | `--filter-query \"expr\"` | Uses xUnit.net query filter language (see above) |\n","\u003C!-- cratis-ai-managed: skills\u002Ffilter-syntax\u002FSKILL.md -->\n\n\u003C!-- Modified by Cratis from dotnet's original (MIT): frontmatter, applicability, navigation and the changes listed in NOTICE. Upstream: https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills (plugins\u002Fdotnet-test\u002Fskills\u002Ffilter-syntax\u002FSKILL.md; see NOTICE) -->\n\n# Test Filter Syntax Reference\n\nCratis rules in `.cratis\u002Fai\u002Frules\u002F` (including `csharp.md`, `specs.csharp.md`, and `orleans.md`) and the `cratis-*` skills win where they differ. Specification authoring belongs to **cratis-specifications-csharp**; Cratis core repositories run xUnit v2 on VSTest.\n\nFilter syntax depends on the **platform** and **test framework**.\n\n## VSTest filters (MSTest, xUnit v2, NUnit on VSTest)\n\n```bash\ndotnet test --filter \u003CEXPRESSION>\n```\n\nExpression syntax: `\u003CProperty>\u003COperator>\u003CValue>[|&\u003CExpression>]`\n\n**Operators:**\n\n| Operator | Meaning |\n|----------|---------|\n| `=` | Exact match |\n| `!=` | Not exact match |\n| `~` | Contains |\n| `!~` | Does not contain |\n\n**Combinators:** `|` (OR), `&` (AND). Parentheses for grouping: `(A|B)&C`\n\n**Supported properties by framework:**\n\n| Framework | Properties |\n|-----------|-----------|\n| MSTest | `FullyQualifiedName`, `Name`, `ClassName`, `Priority`, `TestCategory` |\n| xUnit | `FullyQualifiedName`, `DisplayName`, `Traits` |\n| NUnit | `FullyQualifiedName`, `Name`, `Priority`, `TestCategory` |\n\nAn expression without an operator is treated as `FullyQualifiedName~\u003Cvalue>`.\n\n**Examples (VSTest):**\n\n```bash\n# Run tests whose name contains \"LoginTest\"\ndotnet test --filter \"Name~LoginTest\"\n\n# Run a specific test class\ndotnet test --filter \"ClassName=MyNamespace.MyTestClass\"\n\n# Run tests in a category\ndotnet test --filter \"TestCategory=Integration\"\n\n# Exclude a category\ndotnet test --filter \"TestCategory!=Slow\"\n\n# Combine: class AND category\ndotnet test --filter \"ClassName=MyNamespace.MyTestClass&TestCategory=Unit\"\n\n# Either of two classes\ndotnet test --filter \"ClassName=MyNamespace.ClassA|ClassName=MyNamespace.ClassB\"\n```\n\n## MTP filters — MSTest and NUnit\n\nMSTest and NUnit on MTP use the **same `--filter` syntax** as VSTest (same properties, operators, and combinators). The only difference is how the flag is passed:\n\n```bash\n# .NET SDK 8\u002F9 (after --)\ndotnet test -- --filter \"Name~LoginTest\"\n\n# .NET SDK 10+ (direct)\ndotnet test --filter \"Name~LoginTest\"\n```\n\n## MTP filters — xUnit (v3)\n\nxUnit v3 on MTP uses **framework-specific filter flags** instead of the generic `--filter` expression:\n\n| Flag | Description |\n|------|-------------|\n| `--filter-class \"name\"` | Run all tests in a given class |\n| `--filter-not-class \"name\"` | Exclude all tests in a given class |\n| `--filter-method \"name\"` | Run a specific test method |\n| `--filter-not-method \"name\"` | Exclude a specific test method |\n| `--filter-namespace \"name\"` | Run all tests in a namespace |\n| `--filter-not-namespace \"name\"` | Exclude all tests in a namespace |\n| `--filter-trait \"name=value\"` | Run tests with a matching trait |\n| `--filter-not-trait \"name=value\"` | Exclude tests with a matching trait |\n\nMultiple values can be specified with a single flag: `--filter-class Foo Bar`.\n\n```bash\n# .NET SDK 8\u002F9\ndotnet test -- --filter-class \"MyNamespace.LoginTests\"\n\n# .NET SDK 10+\ndotnet test --filter-class \"MyNamespace.LoginTests\"\n\n# Combine: namespace + trait\ndotnet test --filter-namespace \"MyApp.Tests.Integration\" --filter-trait \"Category=Smoke\"\n```\n\n### xUnit v3 query filter language\n\nFor complex expressions, use `--filter-query` with a path-segment syntax:\n\n```text\n\u002F\u003CassemblyFilter>\u002F\u003CnamespaceFilter>\u002F\u003CclassFilter>\u002F\u003CmethodFilter>[traitName=traitValue]\n```\n\nEach segment matches against: assembly name, namespace, class name, method name. Use `*` for \"match all\" in any segment. Documentation: \u003Chttps:\u002F\u002Fxunit.net\u002Fdocs\u002Fquery-filter-language>\n\n```shell\n# xUnit.net v3 MTP — using query language (assembly\u002Fnamespace\u002Fclass\u002Fmethod[trait])\ndotnet test -- --filter-query \"\u002F*\u002F*\u002F*IntegrationTests*\u002F*[Category=Smoke]\"\n```\n\n## MTP filters — TUnit\n\nTUnit uses `--treenode-filter` with a path-based syntax:\n\n```text\n--treenode-filter \"\u002F\u003CAssembly>\u002F\u003CNamespace>\u002F\u003CClassName>\u002F\u003CTestName>\"\n```\n\nWildcards (`*`) are supported in any segment. Filter operators can be appended to test names for property-based filtering.\n\n| Operator | Meaning |\n|----------|---------|\n| `*` | Wildcard match |\n| `=` | Exact property match (e.g., `[Category=Unit]`) |\n| `!=` | Exclude property value |\n| `&` | AND (combine conditions) |\n| `\\|` | OR (within a segment, requires parentheses) |\n\n**Examples (TUnit):**\n\n```bash\n# All tests in a class\ndotnet run --treenode-filter \"\u002F*\u002F*\u002FLoginTests\u002F*\"\n\n# A specific test\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002FAcceptCookiesTest\"\n\n# By namespace prefix (wildcard)\ndotnet run --treenode-filter \"\u002F*\u002FMyProject.Tests.Api*\u002F*\u002F*\"\n\n# By custom property\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category=Smoke]\"\n\n# Exclude by property\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category!=Slow]\"\n\n# OR across classes\ndotnet run --treenode-filter \"\u002F*\u002F*\u002F(LoginTests)|(SignupTests)\u002F*\"\n\n# Combined: namespace + property\ndotnet run --treenode-filter \"\u002F*\u002FMyProject.Tests.Integration\u002F*\u002F*\u002F*[Priority=Critical]\"\n```\n\n## VSTest → MTP filter translation (for migration)\n\n**MSTest, NUnit, and xUnit.net v2 (with `YTest.MTP.XUnit2`)**: The VSTest `--filter` syntax is identical on both VSTest and MTP. No changes needed.\n\n**xUnit.net v3 (native MTP)**: xUnit.net v3 does NOT support the VSTest `--filter` syntax on MTP. Translate filters using xUnit.net v3's native options:\n\n| VSTest `--filter` syntax | xUnit.net v3 MTP equivalent | Notes |\n|---|---|---|\n| `FullyQualifiedName~ClassName` | `--filter-class *ClassName*` | Wildcards required for substring match |\n| `FullyQualifiedName=Ns.Class.Method` | `--filter-method Ns.Class.Method` | Exact match on fully qualified method |\n| `Name=MethodName` | `--filter-method *MethodName*` | Wildcards for substring match |\n| `Category=Value` (trait) | `--filter-trait \"Category=Value\"` | Filter by trait name\u002Fvalue pair |\n| Complex expressions | `--filter-query \"expr\"` | Uses xUnit.net query filter language (see above) |\n",{"name":5,"license":14,"metadata":44,"description":7},{"user-invocable":45,"disable-model-invocation":46},"false","true","main","c392076c8b3fae3b8b31e7d5684d71f9be75e8bb",".cratis\u002Fai\u002Fskills\u002Ffilter-syntax","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications","https:\u002F\u002Fwww.cratis.io\u002Fspecifications\u002F","https:\u002F\u002Fgithub.com\u002FCratis","https:\u002F\u002Fwww.cratis.io","Open-source (MIT) event sourcing and CQRS for .NET and beyond: Chronicle, Arc, Components and Screenplay.","2026-11-14 15:53:54",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add Cratis\u002FSpecifications --skill filter-syntax",{"tool":62,"command":63},"bunx","bunx skills add Cratis\u002FSpecifications --skill filter-syntax",{"tool":65,"command":66},"pnpm","pnpm dlx skills add Cratis\u002FSpecifications --skill filter-syntax","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ffilter-syntax\u002FSKILL.md",true,[70,74],{"path":71,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":15},"LICENSE","许可证",1166,{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"NOTICE","OTHER","其他",933,"https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ffilter-syntax\u002FNOTICE",[81,103,119,135,156,169],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":85,"sourceHtmlUrl":86,"categories":87,"keywords":94,"publishedAt":39},"01M6BXWPJZ1W4FTAZ7N0B718XQ","vectorization","Designs, implements, optimizes, and reviews SIMD code in .NET: vectorizing scalar loops with TensorPrimitives, Vector64, Vector128, Vector256, Vector512, or hardware intrinsics, and reviewing existing SIMD code, including the generic Vector type, for contract equivalence, tail handling, memory safety, portability, fallbacks, and measured performance. Use when a .NET loop or SIMD routine is being written or reviewed. Not for performance work unrelated to SIMD.","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fvectorization\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fvectorization\u002FSKILL.md",[88,89],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[83,95,96,97,98,99,100,101,102],"loop","Safety","simd","vector","code","performance","memory safety","memory",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":107,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":39},"01M6BXWKDP8VKEXE9WN5R8R1E0","target-authoring","Canonical patterns for writing custom MSBuild targets: DependsOnTargets versus BeforeTargets and AfterTargets, the Build-to-CoreBuild three-level pattern, and the XxxDependsOn chain-extension pattern. Use when diagnosing or fixing custom-target anti-patterns: Directory.Build.targets redefining SDK targets, targets that replace CompileDependsOn instead of extending it, Outputs versus Returns misuse that returns stale results, missing Inputs\u002FOutputs causing needless rebuilds, or missing FileWrites registration. Not for incremental build tuning or general anti-pattern review (use the msbuild skill), or non-MSBuild build systems.","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ftarget-authoring\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Ftarget-authoring\u002FSKILL.md",[],[111,112,113,114,115,116,117,118],"target authoring","msbuild","tuning","incremental build","sdk","review","directory","writing",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":123,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M6BXWG0724RVJDEE4SQBEF8P","run-tests","Chooses and runs the repository-compatible .NET test command: classic, VSTest, bridged MTP, or native MTP syntax for MSTest, xUnit, NUnit, and TUnit. Use before running .NET tests or answering with a test command or flags: run the tests, one test, class, category, trait or target framework, combined filters, --filter-query, --no-build, --diag, TRX, coverage collection, crash or hang dumps, filter errors, or unrecognized options. Not for platform identification alone (use platform-detection), writing or debugging test code, interpreting a coverage report (use coverage-analysis), CI investigation, migration, or a persistent hot-reload loop.","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Frun-tests\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Frun-tests\u002FSKILL.md",[],[127,34,128,36,129,130,35,131,99,132,31,30,27,118,133,38,37,95,134],"run tests","collection","ci","repository","report","debugging","analysis","investigation",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":139,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":39},"01M6BXWCTS8TECDKSYFJT9C445","profiling","Uses the free official .NET diagnostics CLI tools for profiling and runtime investigation in a repository: CPU, GC pressure, allocation growth, exception storms, lock contention, and slow code. Use when a .NET application needs performance or runtime profiling. Not for replacing realistic performance or load tests with ad-hoc tracing, production heap collection without a pause-risk plan, crash dumps (use dump-collect), or benchmark design (use microbenchmarking).","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fprofiling\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fprofiling\u002FSKILL.md",[],[137,128,143,144,134,145,100,146,147,130,148,149,150,99,151,152,153,154,155],"microbenchmarking","plan","Tools","risk","Production","collect","tracing","benchmark","diagnostics","official","first","cli","design",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":160,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":39},"01M6BXW9N4G1NTMKNVBECTM2GM","platform-detection","Identifies a .NET project's test platform, framework, command mode, and SDK-style versus classic project system, resolving global.json, project, packages.config, Directory.Build.props, and Directory.Packages.props precedence for MSTest, xUnit, NUnit, and TUnit. Use when asking \"which test platform or framework?\", \"VSTest or MTP?\", or \"what runner does this project use?\", including bridge settings, UseVSTest opt-outs, and conflicting VSTest\u002FMTP configuration. Not for running or filtering tests, commands, flags, TRX, dumps, or test-command errors (use run-tests), or for hot-reload or migration requests.","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fplatform-detection\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Fplatform-detection\u002FSKILL.md",[163],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[32,36,31,30,27,115,117,165,38,37,166,167,35,34,168],"config","json","system","packages",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":173,"sourceHtmlUrl":174,"categories":175,"keywords":179,"publishedAt":39},"01M6BXW4VVFJH0WDPATWMFE9TY","orleans","Designs Microsoft Orleans systems from each primitive's purpose and failure model: grains, digital twins, state versus databases, transactions, messaging, streams, timers, reminders, Durable Jobs, stateless workers, grain services, startup, and hosting. Use when a task needs an Orleans design decision: inspect version and topology, choose the primitive, implement, and validate. Not for other actor stacks, batch processing, relational-only CRUD, or advice without an Orleans decision.","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Forleans\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FCratis\u002FSpecifications\u002Fblob\u002Fmain\u002F.cratis\u002Fai\u002Fskills\u002Forleans\u002FSKILL.md",[176],{"categoryNo":177,"categoryName":178,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[171,180,181,182,183,184,185,186,187,188,189,190,191,192,28,193,155],"startup","decision","choose","model","crud","transactions","services","topology","messaging","batch","state","reminders","validate","implement"]