plugins/github-copilot-modernization/skills/api-service-contracts/SKILL.md
Generate API and service communication contracts with sequence diagram
npx skillsauth add microsoft/github-copilot-modernization api-service-contractsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyze the project to document all services, API endpoints, communication patterns (sync/async), DTOs, and retry/circuit-breaker policies. Generate a Mermaid sequence diagram showing the primary request flow across services. Save to .github/modernize/assessment/engines/facts/api-service-contracts.md.
workspace-path (optional): Path to the project to analyze (defaults to current directory)Mermaid sequenceDiagram is unforgiving in a few specific ways: one bad alias or one missing end crashes the whole diagram with Syntax error in text, not just the offending line. Stay strictly inside this subset for the sequence diagram in Step 7:
Chart kind. sequenceDiagram only. Never sequence-diagram, never sequence.
Participants. Always declare with the alias form participant <AlphaNumId> as "Display Label". The id must match [A-Za-z][A-Za-z0-9_]*. Never omit the id — even a one-word participant should be participant Client as "Client". This is the single biggest cause of past failures.
Arrows.
->> synchronous request-->> synchronous response (or async return)-) async fire-and-forget: and is plain text — keep it short and on one line.Blocks. alt / else / opt / loop / par / critical MUST be closed by end on its own line. Every open block must have a matching end. Missing end is the #2 cause of past failures.
No line breaks anywhere. The escape \n was removed in modern Mermaid. Aliases, message text, and Note over content must all be single-line. Split a long note into multiple consecutive Note over lines; split a long message into multiple arrows. This is the #1 cause of past failures.
Banned characters inside participant aliases specifically (message text is more permissive — only \n is banned there):
| Banned in alias | Why it breaks | Replacement |
|---|---|---|
| \n (literal two chars) | escape removed | drop |
| " (a second double-quote) | closes the alias early | ' (single quote) |
| ` (backtick) | breaks alias quoting | drop |
| smart quotes " " ' ' | not ASCII | regular " and ' |
| : | confuses with message delimiter | rephrase, e.g. "REST API (port 8080)" not "REST API: port 8080" |
| <br/> | not interpreted inside aliases | rephrase as shorter alias |
Quote the alias. participant Svc as "Order Service" — never participant Svc as Order Service (unquoted multi-word aliases break).
Immediately before writing the ```mermaid opening fence in Step 7, emit this exact one-line HTML comment in the markdown (it does not render — it is for your own visible attestation):
<!-- mermaid-checked: every participant uses `participant Id as "Label"`, no \n in aliases/messages/notes, every alt/opt/loop closed by end, no `:` inside any alias -->
If you cannot truthfully emit that comment, fix the diagram first.
This skill is part of a set of four complementary assessment skills. To avoid content duplication across their output documents, observe these scope rules:
data-architecture skill. In the DTOs & Contracts section, list entity/DTO class names and their role in the API contract (request type, response type, immutability). Do NOT reproduce full field lists, ORM annotations (cascade, fetch strategy), or table names — reference data-architecture.md instead.@NotBlank, custom validators) are owned by the business-workflows skill. Mention validation only when it affects the API contract (e.g., "returns 400 if validation fails"). Do NOT enumerate individual field constraints.data-architecture skill. In the sequence diagram, you may show cache hit/miss behavior, but do NOT repeat the cache provider name, configuration details, or rationale.spring.jpa.*, database profiles) are owned by the configuration-inventory skill. Do NOT list property keys/values.configuration-inventory skill. Mention startup order only if it directly affects API availability. Do NOT repeat probe paths or wait mechanisms.Identify all independently deployable services/modules and produce the complete ## Service Catalog section:
pom.xml <modules>), Gradle subprojects (settings.gradle), .NET solutions (.sln → .csproj projects), monorepo workspaces (package.json workspaces)docker-compose.yml service definitions) — note third-party containers vs source-built servicesFor each service extract:
docker-compose.yml, or application.properties/appsettings.json)pom.xml, .csproj, package.json)Scan source code for API endpoint definitions and produce the complete ## API Endpoints Inventory section:
@RestController, @Controller, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @RequestMapping@Path, @GET, @POST, @PUT, @DELETE (JAX-RS)[ApiController], [HttpGet], [HttpPost], [HttpPut], [HttpDelete], [Route]app.get, app.post, router.get), Fastify routes, NestJS decorators (@Get, @Post)For each endpoint extract:
Identify management and observability endpoints and produce the complete ## Management & Observability Endpoints section:
/actuator/health, /actuator/info, /actuator/metrics, /actuator/prometheus)/health, /healthz), Swagger UI (/swagger)@Timed (Micrometer), [Meter], custom metric registrations — note the metric name and which service exposes itAnalyze DTO and contract definitions and produce the complete ## DTOs & Contracts section:
data-architecture.md.@Value, Java records, C# records, frozen data classes)openapi.yaml, swagger.json, Springdoc/Swashbuckle annotations).proto files) or GraphQL schemasIdentify inter-service and intra-service communication and produce the complete ## Communication Patterns section:
configuration-inventory.md.@PreAuthorize, role checks) are implemented at the API level. If absent, state it explicitly — e.g., "No authentication or TLS configured; all endpoints are publicly accessible with no authorization checks." Do NOT duplicate CWE security scan findings; focus only on presence or absence at the API contract level.For each service, identify which cross-cutting capabilities it uses and produce the complete ## Service Technology Matrix section:
Create a Mermaid sequenceDiagram and produce the complete ## Service Communication Sequence section (re-read the Safety Constraints above before writing):
Reference example (this block satisfies every Safety Constraint — match its shape):
<!-- mermaid-checked: every participant uses `participant Id as "Label"`, no \n in aliases/messages/notes, every alt/opt/loop closed by end, no `:` inside any alias -->sequenceDiagram
participant Client as "Client"
participant Gateway as "API Gateway"
participant CustSvc as "Customers Service"
participant VisitSvc as "Visits Service"
participant DB as "Database"
Client->>Gateway: GET /api/gateway/owners/1
Gateway->>CustSvc: GET /owners/1
CustSvc->>DB: findById(1)
DB-->>CustSvc: Owner + Pets
CustSvc-->>Gateway: OwnerDetails(pets=[Pet1,Pet2])
Gateway->>VisitSvc: GET /pets/visits?petId=1,2
alt Visits Service Available
VisitSvc->>DB: findByPetIdIn([1,2])
DB-->>VisitSvc: Visits list
VisitSvc-->>Gateway: Visits(items=[...])
else Circuit Breaker Open
Gateway-->>Gateway: Fallback - empty visits
end
Gateway->>Gateway: Merge visits into pets
Gateway-->>Client: 200 OwnerDetails + Visits
Save to .github/modernize/assessment/engines/facts/api-service-contracts.md with this exact structure:
# API & Service Communication Contracts
A brief introduction (1-2 sentences) summarizing the API surface and communication patterns found.
## Service Catalog
[Table: Service | Port | Category | Purpose]
## API Endpoints Inventory
[Table: Service | Method | Path | Request Type | Response Type]
## Management & Observability Endpoints
[Table: Service | Endpoint | Custom Metrics (if any)]
## DTOs & Contracts
[Description of gateway-level DTOs vs service-level entities, immutability, serialization]
## Communication Patterns
[Description of sync/async patterns, gateway aggregation/composition logic, circuit breaker/retry policies with timeout values, service discovery, startup dependency chain, and security posture (authentication/authorization/TLS — or explicit statement that none is configured)]
## Service Technology Matrix
[Table: Service | Web | Data Access | Discovery | Gateway | Actuator | Cache | Metrics]
## Service Communication Sequence
< Mermaid sequenceDiagram here >
Each row below is something the model actually produced that crashed the diagram. Use the ✅ form.
| ❌ Past mistake | ✅ Safe form | Why the ❌ crashed |
|---|---|---|
| participant API (no alias) | participant API as "API" | Bare participants with later spaces in usage break |
| participant API as "REST API\n(SubsonicController)" | participant API as "REST API (SubsonicController)" | Literal \n in alias |
| participant API as "REST API: port 8080" | participant API as "REST API (port 8080)" | : in alias collides with message delimiter |
| Note over Client,API: First fact\nSecond fact | Two consecutive Note over Client,API: ... lines | \n in note text |
| alt happy path ... missing end | alt happy path ... end | Unclosed block |
| participant Svc as Order Service (no quotes) | participant Svc as "Order Service" | Multi-word alias must be quoted |
> ERROR: Unsupported project type. This skill supports Java, .NET, JavaScript, and TypeScript projects only.> ERROR: No recognized API endpoints found at workspace-path. Verify the path is correct.> Note: Some endpoints or communication patterns could not be fully identified.<!-- mermaid-checked: ... --> attestation comment.github/modernize/assessment/engines/facts/api-service-contracts.mddevelopment
Scan dependency manifests against known CVEs and remediate by upgrading vulnerable dependencies to patched versions, then rebuild and re-scan to confirm. Self-contained scan→fix→verify loop for any project with a dependency manifest. Use when: a cve-remediation task is dispatched; dependency set changed (version bump, new framework); assessment flagged vulnerable or EOL dependencies; or user asked to "fix CVEs", "patch vulnerabilities", or "dependency security". Triggers: "cve", "remediate cve", "fix cves", "patch vulnerable dependencies", "vulnerability scanning", "dependency security", "vulnerable dependencies", "security advisories", "npm audit", "pnpm audit", "maven audit", "gradle audit", "dependency scan", "vulnerability remediation". NOT for: security audit of auth/input/secrets/OWASP code paths (use security-review).
development
Generate dependency map diagram from project build files
documentation
Generate data architecture and persistence layer documentation with data model diagram
documentation
Generate core business workflow documentation with sequence diagram