用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/microsoft/github-copilot-modernization --skill api-service-contracts命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Convert an arbitrary CSV report (e.g. a Black Duck export or a custom migration-issue inventory) into a schema-valid assessment `report.json` the modernization pipeline can consume — so it appears in the assessment UI and migration solutions resolve automatically. This skill is LLM-driven: you read and interpret the CSV yourself and author `report.json` by hand against the schema. A small helper script only does deterministic lookups (migration solutions, the ruleId for a solution) and validates the finished report. There is NO "convert everything" script and NO assumed column layout. Triggers: "convert csv to assessment report", "import csv report", "turn this spreadsheet into a report.json", "Black Duck csv to report", "build report.json from csv", "migrate a third-party assessment export". NOT for: AppCAT-style analysis from source (use `assessment`), generating a modernization plan (use `create-modernization-plan`), or editing a report.json the pipeline already produced.
Create a modernization plan to migrate the project to Azure
Create a test baseline for the project to be modernized. The baseline will be used for later verification of modernization tasks.
基于 SOC 职业分类
正在显示 SKILL.md
| name | api-service-contracts |
| description | Generate API and service communication contracts with sequence diagram |
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):
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.md