[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CV2JVB32C64ESYPKBJFZSN":3,"skill-same:01M7CV2JVB32C64ESYPKBJFZSN":45},{"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":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":13,"repositoryHtmlUrl":26,"repositoryHomepageUrl":6,"ownerHtmlUrl":27,"ownerBlogUrl":28,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M7CV2JVB32C64ESYPKBJFZSN","configure-auth",null,"Add authentication and authorization to a Blazor Web App, accounting for the app's render mode. USE WHEN the user needs [Authorize] on pages, AuthorizeView, role or policy-based access, login\u002Flogout Identity pages, or AuthenticationStateProvider. Also USE WHEN auth state is null after WebAssembly loads, SignInManager throws in an interactive component, NotAuthorized content never renders in static SSR, or HttpContext.User is null in an interactive component. DO NOT USE for general component authoring (see author-component), for prerendering concerns unrelated to auth (see support-prerendering), or for managing non-auth cascading state (see coordinate-components).","deadmade\u002Fdead-agent-skills","deadmade","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130925709?v=4","01M7CTQ65AGYR4J9K9TX0YR9V3","01M7CTQ66B4VMJFEDZP4EKKE6K",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fconfigure-auth\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nlicense: MIT\nname: configure-auth\ndescription: >\n  Add authentication and authorization to a Blazor Web App, accounting for the app's render mode.\n  USE WHEN the user needs [Authorize] on pages, AuthorizeView, role or policy-based access,\n  login\u002Flogout Identity pages, or AuthenticationStateProvider.\n  Also USE WHEN auth state is null after WebAssembly loads, SignInManager throws in an interactive\n  component, NotAuthorized content never renders in static SSR, or HttpContext.User is null in\n  an interactive component.\n  DO NOT USE for general component authoring (see author-component), for prerendering concerns\n  unrelated to auth (see support-prerendering), or for managing non-auth cascading state\n  (see coordinate-components).\n---\n\n# Configure Auth\n\n## Step 1 — Read AGENTS.md\n\nRead `AGENTS.md` at the workspace root for the project's interactivity mode and scope before making changes.\n\n## Step 2 — Register auth services in Program.cs\n\n```csharp\n\u002F\u002F Program.cs (server project)\nbuilder.Services.AddCascadingAuthenticationState();\nbuilder.Services.AddAuthorization();\n```\n\nFor ASP.NET Core Identity add the Identity services:\n\n```csharp\nbuilder.Services.AddAuthentication(options =>\n{\n    options.DefaultScheme = IdentityConstants.ApplicationScheme;\n    options.DefaultSignInScheme = IdentityConstants.ExternalScheme;\n})\n.AddIdentityCookies();\n\nbuilder.Services.AddIdentityCore\u003CApplicationUser>()\n    .AddRoles\u003CIdentityRole>()\n    .AddEntityFrameworkStores\u003CApplicationDbContext>()\n    .AddSignInManager()\n    .AddDefaultTokenProviders();\n```\n\n## Step 3 — Wire App.razor for auth and render mode\n\nThe `App.razor` component must use `AuthorizeRouteView` and conditionally apply the render mode so that pages excluded from interactive routing render statically.\n\n```razor\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003CHeadOutlet @rendermode=\"RenderModeForPage\" \u002F>\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003CRoutes @rendermode=\"RenderModeForPage\" \u002F>\n    \u003Cscript src=\"_framework\u002Fblazor.web.js\">\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n\n@code {\n    [CascadingParameter]\n    public HttpContext HttpContext { get; set; } = default!;\n\n    private IComponentRenderMode? RenderModeForPage =>\n        HttpContext.AcceptsInteractiveRouting()\n            ? InteractiveServer   \u002F\u002F replace with the app's render mode\n            : null;\n}\n```\n\nIn `Routes.razor` (or wherever the router lives), use `AuthorizeRouteView`:\n\n```razor\n\u003CRouter AppAssembly=\"typeof(Program).Assembly\">\n    \u003CFound Context=\"routeData\">\n        \u003CAuthorizeRouteView RouteData=\"routeData\"\n                            DefaultLayout=\"typeof(Layout.MainLayout)\">\n            \u003CNotAuthorized>\n                @if (context.User.Identity?.IsAuthenticated != true)\n                {\n                    \u003CRedirectToLogin \u002F>\n                }\n                else\n                {\n                    \u003Cp>You are not authorized to access this resource.\u003C\u002Fp>\n                }\n            \u003C\u002FNotAuthorized>\n        \u003C\u002FAuthorizeRouteView>\n        \u003CFocusOnNavigate RouteData=\"routeData\" Selector=\"h1\" \u002F>\n    \u003C\u002FFound>\n\u003C\u002FRouter>\n```\n\n## Step 4 — Protect pages and components\n\n### [Authorize] attribute on pages\n\n```razor\n@page \"\u002Fadmin\"\n@attribute [Authorize]\n```\n\nWith roles or policies:\n\n```razor\n@attribute [Authorize(Roles = \"Admin\")]\n@attribute [Authorize(Policy = \"RequireManager\")]\n```\n\n### AuthorizeView for conditional UI\n\n```razor\n\u003CAuthorizeView>\n    \u003CAuthorized>Welcome, @context.User.Identity?.Name!\u003C\u002FAuthorized>\n    \u003CNotAuthorized>\u003Ca href=\"Account\u002FLogin\">Log in\u003C\u002Fa>\u003C\u002FNotAuthorized>\n\u003C\u002FAuthorizeView>\n```\n\nRole\u002Fpolicy variants:\n\n```razor\n\u003CAuthorizeView Roles=\"Admin,Manager\">\n    \u003CAuthorized>Admin content here\u003C\u002FAuthorized>\n\u003C\u002FAuthorizeView>\n```\n\n### Access auth state in code\n\n```csharp\n[CascadingParameter]\nprivate Task\u003CAuthenticationState>? AuthState { get; set; }\n\nprotected override async Task OnInitializedAsync()\n{\n    if (AuthState is not null)\n    {\n        var state = await AuthState;\n        var isAdmin = state.User.IsInRole(\"Admin\");\n    }\n}\n```\n\n## Step 5 — Identity pages must stay static SSR\n\n`SignInManager` and `UserManager` use `HttpContext` internally and **throw in interactive components**. Identity pages (login, register, manage) must render as static SSR.\n\nIn a **globally interactive** app, mark every Identity page:\n\n```razor\n@page \"\u002FAccount\u002FLogin\"\n@attribute [ExcludeFromInteractiveRouting]\n```\n\nThis forces a full-page navigation (exits the interactive circuit) so the page renders through the static SSR pipeline with a real `HttpContext`.\n\n`App.razor` must use `AcceptsInteractiveRouting()` (Step 3) to return `null` for these pages — otherwise the framework still tries to render them interactively.\n\nIn a **per-page** app, Identity pages are static by default (no `@rendermode` directive), so `[ExcludeFromInteractiveRouting]` is not needed.\n\n## Step 6 — Auth state in WebAssembly \u002F Auto mode\n\nWebAssembly components run in the browser and have no `HttpContext`. Auth state must be serialized from the server during prerendering and deserialized on the client.\n\n**Server `Program.cs`:**\n\n```csharp\nbuilder.Services.AddAuthenticationStateSerialization();\n```\n\n**Client `.Client\u002FProgram.cs`:**\n\n```csharp\nbuilder.Services.AddAuthenticationStateDeserialization();\n```\n\nWithout these calls, `Task\u003CAuthenticationState>` resolves to an anonymous user after WebAssembly takes over from prerendering.\n\n`AddAuthenticationStateSerialization` accepts options to include role and claim data:\n\n```csharp\nbuilder.Services.AddAuthenticationStateSerialization(options =>\n    options.SerializeAllClaims = true);\n```\n\n## Render Mode × Auth Matrix\n\n| Render mode | HttpContext.User | SignInManager | Auth state source | Key requirement |\n|---|---|---|---|---|\n| Static SSR | Available | Works | Server pipeline | Use middleware for redirects, `\u003CNotAuthorized>` does NOT render |\n| Server (interactive) | NOT available | Throws | `CascadingAuthenticationState` | Use `[Authorize]` + `AuthorizeView`, not `HttpContext` |\n| WebAssembly | NOT available | Throws | Serialized from server | `AddAuthenticationStateSerialization` \u002F `Deserialization` |\n| Auto | NOT available after WASM | Throws | Serialized from server | Same as WebAssembly; register in **both** Program.cs files |\n\n## Common Mistakes\n\n| Mistake | Symptom | Fix |\n|---------|---------|-----|\n| Using `HttpContext.User` in interactive component | Null or stale claims | Use `[CascadingParameter] Task\u003CAuthenticationState>` |\n| `SignInManager` in interactive component | `InvalidOperationException` | Move to static SSR page with `[ExcludeFromInteractiveRouting]` |\n| Missing `AddAuthenticationStateSerialization` | Anonymous user after WASM loads | Add to server Program.cs; add `Deserialization` to client Program.cs |\n| `\u003CNotAuthorized>` in static SSR layout | Content never shown | Static SSR uses middleware pipeline; redirect via `LoginPath` or `RedirectToLogin` component |\n| Global interactivity without `AcceptsInteractiveRouting` | Identity pages crash | Add `AcceptsInteractiveRouting()` check in App.razor (Step 3) |\n| Missing `AddCascadingAuthenticationState()` | `Task\u003CAuthenticationState>` is null | Register in Program.cs (Step 2) |\n","# Configure Auth\n\n## Step 1 — Read AGENTS.md\n\nRead `AGENTS.md` at the workspace root for the project's interactivity mode and scope before making changes.\n\n## Step 2 — Register auth services in Program.cs\n\n```csharp\n\u002F\u002F Program.cs (server project)\nbuilder.Services.AddCascadingAuthenticationState();\nbuilder.Services.AddAuthorization();\n```\n\nFor ASP.NET Core Identity add the Identity services:\n\n```csharp\nbuilder.Services.AddAuthentication(options =>\n{\n    options.DefaultScheme = IdentityConstants.ApplicationScheme;\n    options.DefaultSignInScheme = IdentityConstants.ExternalScheme;\n})\n.AddIdentityCookies();\n\nbuilder.Services.AddIdentityCore\u003CApplicationUser>()\n    .AddRoles\u003CIdentityRole>()\n    .AddEntityFrameworkStores\u003CApplicationDbContext>()\n    .AddSignInManager()\n    .AddDefaultTokenProviders();\n```\n\n## Step 3 — Wire App.razor for auth and render mode\n\nThe `App.razor` component must use `AuthorizeRouteView` and conditionally apply the render mode so that pages excluded from interactive routing render statically.\n\n```razor\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003CHeadOutlet @rendermode=\"RenderModeForPage\" \u002F>\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003CRoutes @rendermode=\"RenderModeForPage\" \u002F>\n    \u003Cscript src=\"_framework\u002Fblazor.web.js\">\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n\n@code {\n    [CascadingParameter]\n    public HttpContext HttpContext { get; set; } = default!;\n\n    private IComponentRenderMode? RenderModeForPage =>\n        HttpContext.AcceptsInteractiveRouting()\n            ? InteractiveServer   \u002F\u002F replace with the app's render mode\n            : null;\n}\n```\n\nIn `Routes.razor` (or wherever the router lives), use `AuthorizeRouteView`:\n\n```razor\n\u003CRouter AppAssembly=\"typeof(Program).Assembly\">\n    \u003CFound Context=\"routeData\">\n        \u003CAuthorizeRouteView RouteData=\"routeData\"\n                            DefaultLayout=\"typeof(Layout.MainLayout)\">\n            \u003CNotAuthorized>\n                @if (context.User.Identity?.IsAuthenticated != true)\n                {\n                    \u003CRedirectToLogin \u002F>\n                }\n                else\n                {\n                    \u003Cp>You are not authorized to access this resource.\u003C\u002Fp>\n                }\n            \u003C\u002FNotAuthorized>\n        \u003C\u002FAuthorizeRouteView>\n        \u003CFocusOnNavigate RouteData=\"routeData\" Selector=\"h1\" \u002F>\n    \u003C\u002FFound>\n\u003C\u002FRouter>\n```\n\n## Step 4 — Protect pages and components\n\n### [Authorize] attribute on pages\n\n```razor\n@page \"\u002Fadmin\"\n@attribute [Authorize]\n```\n\nWith roles or policies:\n\n```razor\n@attribute [Authorize(Roles = \"Admin\")]\n@attribute [Authorize(Policy = \"RequireManager\")]\n```\n\n### AuthorizeView for conditional UI\n\n```razor\n\u003CAuthorizeView>\n    \u003CAuthorized>Welcome, @context.User.Identity?.Name!\u003C\u002FAuthorized>\n    \u003CNotAuthorized>\u003Ca href=\"Account\u002FLogin\">Log in\u003C\u002Fa>\u003C\u002FNotAuthorized>\n\u003C\u002FAuthorizeView>\n```\n\nRole\u002Fpolicy variants:\n\n```razor\n\u003CAuthorizeView Roles=\"Admin,Manager\">\n    \u003CAuthorized>Admin content here\u003C\u002FAuthorized>\n\u003C\u002FAuthorizeView>\n```\n\n### Access auth state in code\n\n```csharp\n[CascadingParameter]\nprivate Task\u003CAuthenticationState>? AuthState { get; set; }\n\nprotected override async Task OnInitializedAsync()\n{\n    if (AuthState is not null)\n    {\n        var state = await AuthState;\n        var isAdmin = state.User.IsInRole(\"Admin\");\n    }\n}\n```\n\n## Step 5 — Identity pages must stay static SSR\n\n`SignInManager` and `UserManager` use `HttpContext` internally and **throw in interactive components**. Identity pages (login, register, manage) must render as static SSR.\n\nIn a **globally interactive** app, mark every Identity page:\n\n```razor\n@page \"\u002FAccount\u002FLogin\"\n@attribute [ExcludeFromInteractiveRouting]\n```\n\nThis forces a full-page navigation (exits the interactive circuit) so the page renders through the static SSR pipeline with a real `HttpContext`.\n\n`App.razor` must use `AcceptsInteractiveRouting()` (Step 3) to return `null` for these pages — otherwise the framework still tries to render them interactively.\n\nIn a **per-page** app, Identity pages are static by default (no `@rendermode` directive), so `[ExcludeFromInteractiveRouting]` is not needed.\n\n## Step 6 — Auth state in WebAssembly \u002F Auto mode\n\nWebAssembly components run in the browser and have no `HttpContext`. Auth state must be serialized from the server during prerendering and deserialized on the client.\n\n**Server `Program.cs`:**\n\n```csharp\nbuilder.Services.AddAuthenticationStateSerialization();\n```\n\n**Client `.Client\u002FProgram.cs`:**\n\n```csharp\nbuilder.Services.AddAuthenticationStateDeserialization();\n```\n\nWithout these calls, `Task\u003CAuthenticationState>` resolves to an anonymous user after WebAssembly takes over from prerendering.\n\n`AddAuthenticationStateSerialization` accepts options to include role and claim data:\n\n```csharp\nbuilder.Services.AddAuthenticationStateSerialization(options =>\n    options.SerializeAllClaims = true);\n```\n\n## Render Mode × Auth Matrix\n\n| Render mode | HttpContext.User | SignInManager | Auth state source | Key requirement |\n|---|---|---|---|---|\n| Static SSR | Available | Works | Server pipeline | Use middleware for redirects, `\u003CNotAuthorized>` does NOT render |\n| Server (interactive) | NOT available | Throws | `CascadingAuthenticationState` | Use `[Authorize]` + `AuthorizeView`, not `HttpContext` |\n| WebAssembly | NOT available | Throws | Serialized from server | `AddAuthenticationStateSerialization` \u002F `Deserialization` |\n| Auto | NOT available after WASM | Throws | Serialized from server | Same as WebAssembly; register in **both** Program.cs files |\n\n## Common Mistakes\n\n| Mistake | Symptom | Fix |\n|---------|---------|-----|\n| Using `HttpContext.User` in interactive component | Null or stale claims | Use `[CascadingParameter] Task\u003CAuthenticationState>` |\n| `SignInManager` in interactive component | `InvalidOperationException` | Move to static SSR page with `[ExcludeFromInteractiveRouting]` |\n| Missing `AddAuthenticationStateSerialization` | Anonymous user after WASM loads | Add to server Program.cs; add `Deserialization` to client Program.cs |\n| `\u003CNotAuthorized>` in static SSR layout | Content never shown | Static SSR uses middleware pipeline; redirect via `LoginPath` or `RedirectToLogin` component |\n| Global interactivity without `AcceptsInteractiveRouting` | Identity pages crash | Add `AcceptsInteractiveRouting()` check in App.razor (Step 3) |\n| Missing `AddCascadingAuthenticationState()` | `Task\u003CAuthenticationState>` is null | Register in Program.cs (Step 2) |\n",{"name":5,"license":14,"description":7},"main","ccab8dffc0ecc173838f51e4c5f0d3b51a704f41","plugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fconfigure-auth","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills","https:\u002F\u002Fgithub.com\u002Fdeadmade","https:\u002F\u002Fdeadmade.github.io\u002F","Blood, an Ocean of blood","2026-11-14 02:03:31",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add deadmade\u002Fdead-agent-skills --skill configure-auth",{"tool":37,"command":38},"bunx","bunx skills add deadmade\u002Fdead-agent-skills --skill configure-auth",{"tool":40,"command":41},"pnpm","pnpm dlx skills add deadmade\u002Fdead-agent-skills --skill configure-auth","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fconfigure-auth\u002FSKILL.md",true,[],[46,53,62,70,77,84],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":18},"01M7CVRBFTXSTTQ7F5P6PJEFYA","rust-best-practices","Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook. Use this skill when: (1) writing new Rust code or functions, (2) reviewing or refactoring existing Rust code, (3) deciding between borrowing vs cloning or ownership patterns, (4) implementing error handling with Result types, (5) optimizing Rust code for performance, (6) writing tests or documentation for Rust projects.","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Frust-skills\u002Fskills\u002Frust-best-practices\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":57,"licenseFileUrl":58,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":18},"01M7CVR0W7B8EGTNPSPA7FPC4Z","postgres-database-migration","Use this skill for planning, testing, and safely executing PostgreSQL schema migrations — especially when working with production data or shared databases.\n\n**Trigger when user asks to:**\n- Test a schema migration before applying it to production\n- Add, remove, or rename columns safely on a live table\n- Change a column's data type without downtime\n- Add or drop indexes, constraints, or foreign keys on large tables\n- Understand which ALTER TABLE operations lock the table\n- Roll back a failed migration\n- Plan a zero-downtime migration strategy\n- Fork a database to test a migration safely\n\nCovers: lock-level reference for every common DDL operation, safe migration patterns, fork-based testing, zero-downtime column changes, index creation, constraint addition, backfill strategies, pre\u002Fpost-migration validation, and rollback planning.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fpostgres\u002Fskills\u002Fpostgres-database-migration\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fpostgres\u002Fskills\u002Fpostgres-database-migration\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":57,"licenseFileUrl":66,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":18},"01M7CVQWK20ASAZN5VETZC8J99","postgres-best-practices","Best practices and guidelines for working with Postgres. Covers schema design, indexing strategies, query optimization, migrations, and common pitfalls. Use when writing SQL, designing database schemas, optimizing queries, or setting up a Postgres database.","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fpostgres\u002Fskills\u002Fpostgres-best-practices\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fpostgres\u002Fskills\u002Fpostgres-best-practices\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":18},"01M7CVQ5CY7AQHY7A2Y99RE6A7","writing-mstest-tests","ALWAYS USE when asked to fix, rewrite, update, improve, modernize, show corrected code for, or explain existing MSTest tests or MSTest-specific configuration. Use for \"review\" when corrected code or edits are wanted, even for one pasted assertion or passing tests with bad failure output. Covers expected\u002Factual labels; generic Boolean, collection, string, numeric, null, identity, exception, hard-cast, and object[] checks; TestContext\u002Flifecycle; timeout\u002Fcancellation; OS\u002FCI conditions, retry, cleanup, parallelization, MSTest.Sdk project setup, and MSTESTxxxx. Honor the installed MSTest version. DO NOT USE to design new test cases (code-testing), perform report-only audits, create project files rather than explain MSTest setup, run tests, migrate frameworks, or handle non-MSTest\u002Fnon-.NET code.","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fwriting-mstest-tests\u002FSKILL.md",[],[],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":18},"01M7CVPWJZ63GB0810F0SCGZ1K","winforms-expert","Create, modify, debug, or review Windows Forms applications only when the request contains a concrete Windows Forms marker. USE FOR: WinForms, Windows Forms, System.Windows.Forms, WinForms Form or UserControl designer files (*.Designer.cs or *.Designer.vb), Visual Studio WinForms Designer, TableLayoutPanel, BindingSource, DataGridView, Control.InvokeAsync, component-tray ownership, or custom control serialization. DO NOT USE FOR: WPF or WPF XAML, including Window.InputBindings, KeyBinding, commands, or DataContext; .NET MAUI; Avalonia; or any request where none of the listed Windows Forms markers is present.","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fwinforms-expert\u002FSKILL.md",[],[],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":18},"01M7CVPR0QFZ1HMJ6GZRBQAQ7W","vectorization","Design, implement, optimize, and review SIMD code in .NET. USE FOR: vectorizing scalar loops with TensorPrimitives, Vector64\u002F128\u002F256\u002F512, or platform hardware intrinsics; reviewing existing SIMD code, including the generic Vector type, for contract equivalence, tail handling, memory safety, portability, fallbacks, and measured performance. DO NOT USE FOR: performance work unrelated to SIMD or vectorization.","https:\u002F\u002Fgithub.com\u002Fdeadmade\u002Fdead-agent-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fopt-in\u002Fimplementation\u002Fcsharp-skills\u002Flibrary\u002Fvectorization\u002FSKILL.md",[],[]]