Skills
Skill 18 of 200
Cross-references C# Web API controllers/DTOs against their TypeScript/JavaScript consumers (React, Angular, Vue, Svelte, Node.js, or hand-written/auto-generated HTTP clients like…
3 minutes · 707 words · 4 sections
Install
npx skills add github/awesome-copilot --skill api-breaking-change-detectornpx skills add github/awesome-copilot/plugin marketplace add github/awesome-copilotThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
You are cross-referencing a C# Web API’s actual contract (controllers, DTOs, route definitions) against its TypeScript/JavaScript consumers to find contract drift — in both directions — before it reaches production.
Trigger when the user asks to:
Do not use this for:
openapi-to-application-code)aspnet-minimal-api-openapi)Discover Global JSON & Naming Policies:
Program.cs or Startup.cs for active JSON options (e.g. JsonNamingPolicy.CamelCase, PropertyNamingPolicy, or Newtonsoft CamelCasePropertyNamesContractResolver).camelCase for TypeScript/JavaScript field mapping if global camelCase is configured, unless overridden by an explicit [JsonPropertyName("...")] attribute on the C# property.[JsonIgnore].Identify the C# contract surface. For each Controller action in scope:
[Route("...")] + action [HttpGet("...")] / [HttpPost("...")]. Normalize route parameters (e.g. {id:int} or {id:guid} $\rightarrow$ {id}).[Required], [BindRequired], has the C# 11 required modifier (public required string X), or is a non-nullable value type (int, Guid, bool) without a default value.string?, int?), or has a default initializer.[ProducesResponseType(statusCode)] attributes and explicit StatusCode(...) return paths.Find the matching TypeScript/JavaScript consumer (with Normalized URL Matching):
fetch, axios, Angular HttpClient, ky, etc.) whose normalized URL pattern matches the controller’s route.${this.apiUrl}/users/${id} or baseUrl + '/users/' + userId $\rightarrow$ /users/{id}).Compare backend → frontend/client (breaks the client):
long $\rightarrow$ string, or non-nullable $\rightarrow$ nullable) in a way the client type assumes differentlyCompare frontend/client → backend (stale/dead client code vs. silent bugs):
undefined at runtime and potential application failures).Produce the report (see Output Format). This skill does not modify code.
camelCase enabled via Program.cs).?status=active) and normalize path parameters (${id} / :id / {id}) before comparing routes.[JsonPropertyName("...")] or global JsonNamingPolicy.CamelCase settings.required keyword and #nullable enable annotations (string? vs string) when assessing required properties.Cross-references C# Web API controllers/DTOs against their TypeScript/JavaScript consumers (React, Angular, Vue, Svelte, Node.js, or hand-written/auto-generated HTTP clients like Fetch, Axios, NSwag) to catch contract drift in both directions: backend changes that break client applications (renamed/removed JSON keys, new required parameters, status code shifts) and frontend code sending fields the backend no longer reads. Works directly against source code, not exported OpenAPI spec files. Use when the user asks to check for breaking API changes, verify frontend/backend contract sync, or audit a DTO/controller change against its TypeScript/JS consumers before merging. Not for generating new API code from a spec (see openapi-to-application-code) or scaffolding new endpoints (see aspnet-minimal-api-openapi).
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
main, last pushed 24 September 2026.SKILL.md, not by matching a directory convention. 2 distinct layouts observed: .github/skills/*/SKILL.md, skills/*/SKILL.md.h1 and no skipped levels:.github/plugin/marketplace.json by GitHub, declaring 162 plugins. It is read for editorial metadata only — never as the skill index, which is always the repository tree./github/awesome-copilot.md, and each skill at its own .md URL.