Skip to content
Back to skills

Service Dossier

ASecurity

Generate a new AWS service dossier under .agents/docs/services or enhance an existing service dossier with Smithy-derived operation/resource facts, official AWS documentation research, concrete usage scenarios, and durable Winterbaume LTM lessons.

  • 15 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added June 1, 2026
devopspythonrustbashawsgitapidocumentation

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned June 1, 2026

npx -y skills add moriyoshi/winterbaume --skill service-dossier --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Service Dossier?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Service Dossier
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/moriyoshi-service-dossier/badge)](https://www.skillsdirectory.com/skills/moriyoshi-service-dossier)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: service-dossier
description: Generate a new AWS service dossier under .agents/docs/services or enhance an existing service dossier with Smithy-derived operation/resource facts, official AWS documentation research, concrete usage scenarios, and durable Winterbaume LTM lessons.
argument-hint: <service-name-or-model-slug>
user_invocable: true
---

# Service Dossier

Create or enhance `.agents/docs/services/<service>.md` so future Winterbaume work starts from accurate service context.

## Inputs

- `$0` - service name, Winterbaume crate suffix, AWS SDK slug, or Smithy model slug.

## Core Rules

- Treat `vendor/api-models-aws` as the source of truth for service identity, protocol, operations, required input members, HTTP-bound input members (`@httpHeader`, `@httpQuery`, `@httpPrefixHeaders`, `@httpPayload`, `@httpLabel`), idempotency, pagination, error shapes (including empty-member shapes, which signal "no response body" for HEAD operations), and Smithy resources.
- Treat official AWS documentation as the source of truth for semantics not present in Smithy: lifecycle transitions, cross-resource constraints, defaults, quotas, deletion prerequisites, policy behaviour, synchronisation, workflow ordering, RFC 7232 conditional-write semantics (412 PreconditionFailed, 409 ConditionalRequestConflict), HTTP-method body rules (HEAD/GET differences, redirect handling), and any HTTP error codes the service emits that are absent from the modelled `errors:` list.
- Read `.agents/docs/LTM/aws-doc-test-plan-catalog.md` and `.agents/docs/LTM/workspace-readmes-and-service-examples.md` before changing scenarios. Scenario bullets are planning prompts, not implementation guarantees.
- For repo-authored docs, use British English and half-width punctuation only.
- Preserve any `Winterbaume LTM Notes`, `Cross-call invariants`, service-specific TODOs, or hand-written parity notes already present in an existing dossier unless the user explicitly asks to rewrite them.

## Workflow

### 1. Resolve the Service

1. Read `.agents/docs/services/INDEX.md`.
2. If the service is listed, use that row's model slug and read `.agents/docs/services/<model-slug>.md`.
3. If the service is missing, find the Smithy model under `vendor/api-models-aws/models/<model-slug>/service/<version>/*.json`.
4. If multiple matches exist, disambiguate by title, SDK ID, endpoint prefix, and AWS SDK slug. Do not guess between similarly named control/data plane services.

Useful local commands:

```bash
grep -R -n -E "\\[<service>\\]|`<service>`|<service>" .agents/docs/services/INDEX.md vendor/api-models-aws/gradle.properties vendor/api-models-aws/models
find vendor/api-models-aws/models/<model-slug>/service -name '*.json'
```

### 2. Extract Smithy Facts

Run the bundled extractor to produce a draft or comparison aid:

```bash
python3 .agents/skills/service-dossier/scripts/extract_model_dossier.py <model-slug>
```

The extractor is read-only. When `.agents/docs/services/<model-slug>.md` already exists, it detects that file and prints an `Existing Dossier Notes` section listing merge-sensitive top-level sections. It does not merge or rewrite the dossier for you.

Use its output to populate or verify:

- Service identity and protocol.
- Operation family counts.
- Operation groups.
- Operation detail matrix.
- `HTTP Bindings` section: per-operation `@httpHeader` / `@httpQuery` / `@httpPrefixHeaders` / `@httpPayload` input members. The extractor also emits a "Conditional-write/read coverage" summary listing every operation whose input includes RFC 7232 headers — this is the canonical list of operations that must enforce 412 PreconditionFailed (and possibly 409 ConditionalRequestConflict) and must surface those error codes in tests.
- Important error, input, output, enum, and resource-related shapes. Pay attention to error shapes rendered with `**empty (no members)**`: that empty member set encodes "the HTTP response carries no body," which is critical for HEAD operations (a body forces the SDK into Unhandled instead of resolving the typed `NotFound` variant).
- Resource model, when Smithy declares resources. If the model has no Smithy resources, derive conceptual resources from AWS docs and operation names, and say that the Smithy model lacks `resource` shapes.

### 3. Research Official AWS Documentation

Use the AWS Documentation MCP Server. Prefer official service user-guide and API-reference pages.

Search for:

- `<service title> overview concepts`
- `<service title> API Reference <core operation>`
- `<service title> create delete update list <main resource>`
- `<service title> quotas limits lifecycle access point policy tags pagination`
- `<service title> conditional requests preconditions 412` (when the extractor's HTTP Bindings section lists any `If-Match` / `If-None-Match` / `If-Modified-Since` / `If-Unmodified-Since` / `x-amz-copy-source-if-*` headers — otherwise skip).
- `<service title> HEAD response body` (when the operation matrix lists any `HEAD` method — otherwise skip).
- `<service title> error codes responses` (look for HTTP error codes not represented in any operation's modelled `errors:` list — these are documented behaviour without a typed error shape).

Read only pages that answer concrete parity questions. Record URLs in `Official AWS Documentation Research`.

Look specifically for:

- Main resources and their identifiers.
- Required creation order and deletion prerequisites.
- Lifecycle states and asynchronous job behaviour.
- Idempotency and duplicate-create behaviour beyond Smithy traits.
- Cross-resource constraints and reverse references.
- Account/service defaults that affect later creates.
- Policy, IAM, KMS, S3, EC2/VPC, Glue, Lambda, EventBridge, or other cross-service identifiers.
- Tagging semantics, quota limits, pagination ordering, and default values.
- RFC 7232 conditional headers (`If-Match`, `If-None-Match`, `If-Modified-Since`, `If-Unmodified-Since`, and service-prefixed variants such as `x-amz-copy-source-if-*`) and their HTTP error codes (412 PreconditionFailed, 409 ConditionalRequestConflict). These are rarely modelled as typed errors but are documented behaviour. Cross-check the extractor's "Conditional-write/read coverage" summary.
- HTTP-method semantics, especially the HEAD response-body rule (4xx HEAD responses must not include a body; an XML body forces `aws-sdk-rust` into `Unhandled` instead of the typed `NotFound` variant). Also note redirect handling, content-length quirks, and PUT-vs-POST body semantics where the user-guide flags them.
- The modelled `errors:` list is a lower bound. The API Reference's "Errors" / "Response" sections often document additional HTTP error codes (precondition failures, request conflicts, request-too-large, throttling variants) that have no typed error shape but still need to be emitted with the correct HTTP status and SDK `ErrorMetadata.code`.

### 4. Generate or Enhance the Dossier

For a new dossier, create `.agents/docs/services/<model-slug>.md` with these sections, in this order:

1. Title.
2. Source.
3. `Service Overview`.
4. `Possible Usage Scenarios`.
5. `Service Identity and Protocol`.
6. `Behavioural Model Notes`.
7. `Official AWS Documentation Research` when official docs were read.
8. Existing durable service-specific sections, if applicable.
9. `Resource Model`.
10. `Operation Groups`.
11. `Operation Detail Matrix`.
12. `HTTP Bindings`.
13. `Important Shapes`.
14. `Research Checklist for Parity Work`.

For an existing dossier:

- Update stale Smithy-derived counts and tables from the current vendored model.
- Add or refresh `Official AWS Documentation Research` when useful for implementation parity.
- Improve `Possible Usage Scenarios` only where operation/resource names and docs support concrete workflows.
- Keep scenario text actionable: "create X, attach Y, verify Z appears through list/get" is better than "test CRUD".
- Treat the extractor output as a patch aid, not a replacement file. Preserve arbitrary manual edits, unknown sections, and hand-written notes unless the current Smithy model or official AWS documentation clearly contradicts them.
- Be especially careful with `Research Checklist for Parity Work`, `Possible Usage Scenarios`, `Behavioural Model Notes`, and `Official AWS Documentation Research`; these often contain human judgement and LTM-derived implementation guidance even though the extractor can emit sections with the same names.
- When refreshing an existing dossier whose `HTTP Bindings` section is missing (i.e., it predates the extractor's binding output), add the section using the extractor's draft. This is the single most leverage change for catching missing optional headers — conditional-write headers, idempotency-via-`x-amz-*` headers, and protocol modifier headers — that get silently dropped from hand-written handlers.
- Preserve manual notes unless contradicted by newer official docs or the current model. If contradicted, state the correction precisely.

### 5. Scenario Quality Gate

Before finalising scenarios, apply the LTM lessons:

- Prefer concrete documented associations, attachments, memberships, targets, account defaults, jobs, executions, tasks, deployments, streams, workspaces, clusters, channels, meetings, simulations, migration tasks, lifecycle transitions, and parent-child propagation.
- Include full-input/read-back and per-call uniqueness prompts where the service mints IDs or stores optional fields.
- Include cross-call invariant prompts when one operation writes state another operation must later observe.
- Do not imply Winterbaume already implements the scenario.
- Do not invent scenarios for stateless services; explicitly keep them API/reference focused.

### 6. Update the Index

If adding a dossier:

- Add a row to `.agents/docs/services/INDEX.md` in model-slug order:

```markdown
| [<model-slug>](<model-slug>.md) | `<sdk-slug>` | <Title> | <protocols> | <operation-count> | <resource-count> |
```

- If the dossier includes `Official AWS Documentation Research`, add the slug to the sentence at the top of the index.

For SDK slug, prefer the Smithy `aws.api#service.sdkId` normalised like AWS SDK for Rust crate names. Cross-check existing index conventions for similar services.

### 7. Validate

Run focused documentation checks:

```bash
grep -n -E "behavior|synchroniz|optimization|organize|modeling|modeled|color|center|analyze" .agents/docs/services/<model-slug>.md
git diff -- .agents/docs/services/<model-slug>.md .agents/docs/services/INDEX.md
```

The grep command is a spelling smoke test, not a hard failure: API names and URLs may legitimately contain American spellings.

## Final Report

State:

- The dossier path added or updated.
- Whether AWS Documentation MCP research was included.
- Any ambiguity in service naming or missing official docs.
- That no Rust tests were run when the change is docs-only.

Files in this skill

  • SKILL.md10.7 KB
  • scripts/extract_model_dossier.py19.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.