Official agent skill

Review Spec Update

by SAP in SAP/ai-sdk-js

Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches.

OfficialApache-2.0Auto-check passed

Install Review Spec Update

skills CLI
$ npx skills add SAP/ai-sdk-js --skill review-spec-update -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SAP/ai-sdk-js review-spec-update --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/SAP/ai-sdk-js.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/review-spec-update .claude/skills/review-spec-update && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
review-spec-update
GitHub stars
126
Token cost
~3.1k tokens
SKILL.md length
1,287 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
Apache-2.0

At a glance

Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches.

  • Works in 6 steps: Establish the diff → Classify changes → Check for parameter-order regressions → …
  • SKILL.md covers Step 1 — Establish the diff, Step 2 — Classify changes, Step 3 — Check for… and Step 4 — Maintain…, plus 3 more sections
  • Calls pnpm and git

What it does

Review Spec Update is an agent skill from SAP/ai-sdk-js, published by the product's own GitHub organization. Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with JavaScript. The repository describes itself as: SAP Cloud SDK for AI is the official Software Development Kit (SDK) for SAP AI Core, SAP Generative AI Hub, and Orchestration Service. The licence is Apache-2.0.

Example prompts

  • “/review-spec-update”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Establish the diff
  2. Classify changes
  3. Check for parameter-order regressions
  4. Maintain apply-patches support
  5. Write [compat] changesets
  6. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit cec10a2. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Review Spec Update loads about 3.1k tokens when it runs. Until then it costs about 34 tokens; SKILL.md has 1,287 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~34
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from SAP/ai-sdk-js at commit cec10a2, republished under its Apache-2.0 licence (© SAP). 1,287 words, ~3,133 tokens.

Download SKILL.mdSave it as .claude/skills/review-spec-update/SKILL.md (or your agent's skills folder).
name
review-spec-update
description
Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches.
disable-model-invocation
true
<!-- vale Vale.Spelling = NO -->

Review Spec Update

<!-- vale Vale.Terms = NO -->

You are reviewing a spec-update branch for a generated OpenAPI client package.

<!-- vale Vale.Terms = YES -->

Your goal: identify every change that breaks existing consumer code, create a [compat] changeset for each one, fix broken patches, and create new patches for parameter-order regressions.

Step 1 — Establish the diff

bash
# Identify which package(s) changed
git diff main...HEAD --name-only | grep 'packages/'

# For each affected package, get the full generated-client diff
git diff main...HEAD -- packages/<pkg>/src/client/

If the diff is empty, confirm that pnpm <pkg> generate was actually executed and commit. If confirmed, output a summary stating no generated-client changes were detected and stop; no further steps are required.

Focus on src/client/api/ (generated files). Hand-written code in src/ outside client/ is NOT in scope unless it directly imports a type that was renamed, removed, or had its shape changed in this diff. In that case, note the affected file but do not modify it; record it as a follow-up task.

Step 2 — Classify changes

Work through the diff methodically. For each changed type/function, decide:

Perspective: The spec-driven development guidelines distinguish between changes that break end users (their previously-correct code stops working) and changes that cause SDK effort (regeneration, migration work) without breaking existing user code. Only the former require [compat] changesets.

Request-side changes (consumer sends this → almost always breaking)
ChangeBreaking?Why
New required parameter on a functionYESExisting calls now missing argument
Parameter removed from a functionYESExisting calls pass unknown argument
Parameter order changedYESPositional calls pass wrong value
Parameter type narrowed (e.g. string → 'a'|'b')YESMay reject previously-valid values
Parameter type widenednoConsumers unaffected
New optional parameter on a functionnoExisting calls still valid
Required request body field becomes optionalnoLess strict
Optional request body field becomes requiredYESExisting objects now invalid
additionalProperties: false added to a request objectYESRejects previously-valid extra fields
Response-side changes (consumer receives this → usually not breaking)
ChangeBreaking?Why
New required field on a response typenoDestructuring still works; extra field is fine
Field removed from a response typeYESCode reading that field will get undefined
Field renamedYESOld name no longer exists
Type narrowed on a response fieldYESCode relying on broader type breaks
Type widened on a response fieldno, unless it newly introduces undefined or nullWidening is safe unless consumers must now handle absence that was impossible before
New optional field on a response typenoSafe addition
Change to an under-specified response object ({} or no constraints)noSpec-driven dev guidelines explicitly allow service teams to keep flexibility here; clients must not rely on its structure
Schema / enum changes
<!-- vale SAP.Sentences = NO -->
ChangeBreaking?
Open union 'A'|'B'|any → strict 'A'|'B'YES — previously-passing any values now rejected by TypeScript
Strict union → open (`any`)
New enum member addedno
Enum member removedYES
Type renamedYES (if exported) — also check the new type's shape: a rename often comes with property changes (id → resourceId, removed fields, etc.).<br>Document each property-level breaking change in its own [compat] entry; do not just note the rename.<br>If the old type is entirely deleted and replaced by a structurally different new type with no shared name, treat it as a deletion of the old type plus introduction of a new type.<br>Create one [compat] entry for the deletion and list the migration target type by name if identifiable from the diff.
Type deletedYES (if exported)
Type or field deprecatedYES — always create a [compat] entry noting the deprecation and the migration target
Shared schema split into distinct schemas (e.g. FooConfig → FooConfigInput + FooConfigOutput)SDK-effort only — not a user breaking change unless the old type was directly exported and consumers referenced it by name. If exported, treat as a type rename/deletion and create a [compat] entry.
<!-- vale SAP.Sentences = YES -->
Schema-split impact check

When a previously shared schema is split into two or more distinct schemas, assess the downstream impact carefully:

  1. Was the old schema name exported from src/index.ts or src/internal.ts? If yes → breaking; create a [compat] entry.
  2. Does the new split introduce structural differences (new required fields, removed fields, type changes)? Document each property-level change in its own [compat] entry.
  3. If the split only renames without structural change and the old name is unexported → no action needed.

Example: SAPDocumentTranslation split into SAPDocumentTranslationInput (adds bar) + SAPDocumentTranslationOutput → if old type was exported, create a [compat] for the deletion of SAPDocumentTranslation and for the new required bar field on the input variant.

Show full SKILL.md (586 more words)Show less

Step 3 — Check for parameter-order regressions

bash
pnpm <pkg> generate
pnpm <pkg> run apply-patches

Then for every function where positional parameters reordered:

  1. Check if a patch already exists:
    bash
    ls packages/<pkg>/patches/
  2. Patch exists → leave it alone unless pnpm <pkg> run apply-patches reported that patch file as failing. If it failed, the context lines around the reorder changed (e.g. new parameters added nearby). Update the patch context to match the new generated output (see §Updating a patch below). Do NOT delete a parameter-order patch just because the working tree already looks correct.
  3. No patch exists → create one (see §Creating a patch below).
  4. Patch is truly obsolete → delete it only if the function no longer has both headerParameters and queryParameters (i.e., one was removed from the spec), making the ordering moot.
Detecting parameter-order changes

The generated functions follow this shape:

typescript
functionName: (
  param1: Type1,
  param2: Type2,
  ...
) => new OpenApiRequestBuilder(...)
<!-- vale SAP.Sentences = NO -->

If the spec reordered headerParameters vs queryParameters, the generator will flip their positions.

<!-- vale SAP.Sentences = YES -->
Creating a patch
bash
# 1. Manually edit the generated file to restore the old parameter order
#    (swap back to the order consumers expect)
# 2. Stage only that file
git add packages/<pkg>/src/client/api/<api-file>.ts
# 3. Generate the patch against HEAD (which has the newly-generated code)
git diff --cached > packages/<pkg>/patches/backward-compat-<function-name>-order.patch
# 4. Unstage (the patch is the artifact, not the edit)
git restore --staged packages/<pkg>/src/client/api/<api-file>.ts
git restore packages/<pkg>/src/client/api/<api-file>.ts

Patch file naming: backward-compat-<camelFunctionName>-order.patch

Updating a patch

If the patch context no longer matches (function body changed around the reorder):

bash
# Inspect what changed
git diff main...HEAD -- packages/<pkg>/src/client/api/<api-file>.ts
# Open the patch file, update the context lines (the unchanged lines around the @@)
# to match the new generated code, keeping the - / + lines intact
# Then verify:
pnpm <pkg> generate
pnpm <pkg> run apply-patches

Step 4 — Maintain apply-patches support

If you deleted a patch in Step 3 because it was truly obsolete, remove the patches directory if now empty and remove the apply-patches script from package.json.

Check whether the package has an apply-patches script:

bash
cat packages/<pkg>/package.json | grep apply-patches

If missing, add it. Add this to package.json scripts:

json
"apply-patches": "tsx ../../scripts/apply-patches.ts ."

Also verify the root package.json runs apply-patches across the repository:

bash
grep apply-patches package.json
# Should have: "apply-patches": "pnpm -r run --if-present apply-patches"

Step 5 — Write [compat] changesets

For each breaking change, run pnpm changeset --empty once, then edit the generated file.

Format
markdown
---
'@sap-ai-sdk/<package-name>': minor
---

[compat] <TypeName(s)>: <what changed and what consumers need to do>.

Use minor for all [compat] entries (breaking changes in this project always bump minor).

Examples from this repository

Type narrowed:

markdown
[compat] `DocumentKeyValueListPair`, `RetrievalDocumentKeyValueListPair`, `VectorDocumentKeyValueListPair`: the `matchMode` property type was narrowed from an open union (`'ANY' | 'ALL' | any`) to the strict `FilterMatchModeEnum` (`'ANY' | 'ALL'`).

Field removed from response:

markdown
[compat] `CollectionPendingResponse`: fields `Location` and `status` were removed.
A new `monitorURL` property was added instead.

Required field added to request type:

markdown
[compat] `TextOnlyBaseChunk`: new required field `id: string` added and `metadata` is now optional.

Field type changed:

markdown
[compat] `BaseDocument` / `DocumentInput`: `chunks` type changed from `TextOnlyBaseChunk[]` to `TextOnlyBaseChunkCreate[]`.
The `metadata` property is now optional.

Optional became required:

markdown
[compat] `PromptTemplateSubstitutionRequest` now requires the `inputParams` property.
What does not need a [compat] changeset
  • New optional fields on response types
  • New enum members added
  • Type widened (e.g., 'a'|'b' → 'a'|'b'|'c')
  • New optional parameters on functions
  • Fields on response types becoming optional

These get rolled into the [feat] changeset that should already exist for the spec update.

If no [feat] changeset exists yet for this spec update, create one with pnpm changeset --empty. Label it [feat] <package-name>: updated generated client to latest spec before rolling in non-breaking changes.

Step 6 — Verify

bash
# Recreate raw generated output, then verify the shared patch runner succeeds
pnpm <pkg> generate
pnpm <pkg> run apply-patches

# TypeScript compiles
pnpm <pkg> compile

# Tests pass
pnpm <pkg> test

# List changesets created
ls .changeset/

If pnpm <pkg> run apply-patches fails, return to Step 3 §Updating a patch for each failing patch file. Do not proceed to compile or test until all patches apply cleanly. List each failing patch file by name in your output.

If compilation fails, inspect the error output to determine whether the failure is caused by a breaking change not yet covered by a [compat] changeset or patch. If so, return to Step 2 or Step 3. If the failure is unrelated to this spec update, note it as a pre-existing issue and do not block the review. If tests fail, apply the same triage: attribute failures to this spec update or flag them as pre-existing.

Quick checklist

  • Diffed src/client/ against main
  • Every breaking request-side change has a [compat] changeset
  • Every breaking response-side removal/rename/narrowing has a [compat] changeset
  • additionalProperties: false added to any request object → [compat] changeset created
  • Schema splits checked: exported old names → [compat]; unexported without structural change → no action needed
  • Every deprecated type or field has a [compat] changeset with migration target
  • Under-specified response changes ({} bodies) confirmed as non-breaking and omitted from [compat]
  • Parameter-order regressions have patches (new or updated)
  • All patches apply cleanly (pnpm <pkg> apply-patches from fresh generated output)
  • Package has apply-patches script (added if missing)
  • TypeScript compiles, tests pass

© SAP, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/review-spec-update of SAP/ai-sdk-js.

Open the folder on GitHubat commit cec10a2

Compare with similar skills

Review Spec Update next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Review Spec Update compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Review Spec Update this skillSAP/ai-sdk-js126—~3.1kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k4 repos~1.1kAutomated safety check: PassMIT
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
Figma use_figma Plugin API Ruleswarpdotdev/warp65k4 repos~4.4kAutomated safety check: PassAGPL-3.0
JavaScript Concept Fact Checkerleonardomso/33-js-concepts67k1 repos~5kAutomated safety check: PassMIT
GSAP Core Animationgreensock/gsap-skills16k3 repos~3.7kAutomated safety check: PassMIT

Similar skills

  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 4 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.

    65k GitHub starsUsed in 4 repos~4.4k tokens
    Frontend & DesignAuto-check passed
  • JavaScript Concept Fact Checker

    leonardomso/33-js-concepts

    Verifies the technical accuracy of JavaScript concept pages by checking code examples, MDN and ECMAScript claims and external links through a five-phase method.

    67k GitHub starsUsed in 1 repo~5k tokens
    Writing & ContentAuto-check passed
  • GSAP Core Animation

    greensock/gsap-skills

    Covers the GSAP core API for tweens, easing, staggers, defaults and matchMedia, and when to choose GSAP over CSS animations or other JavaScript animation libraries.

    16k GitHub starsUsed in 3 repos~3.7k tokens
    Frontend & DesignAuto-check passed
  • Scroll World Landing Page

    oso95/scroll-world

    Builds a scroll-driven landing page where a pre-rendered camera flies through connected AI-generated scenes, using Higgsfield for stills and video clips.

    9.9k GitHub starsUsed in 1 repo~12k tokens
    Frontend & DesignAuto-check: notes

More from SAP/ai-sdk-js

  • Update Models

    SAP/ai-sdk-js

    Official

    Sync model types from SAP Notes 3437766. An agent skill from SAP/ai-sdk-js.

    126 GitHub stars~2.4k tokensUpdated today
    Auto-check passed

Works with

Questions about Review Spec Update

What does Review Spec Update do?

Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches. Review Spec Update is an agent skill from SAP/ai-sdk-js, published by the product's own GitHub organization. Review a spec-update branch — classify breaking changes, write [compat] changesets, and fix parameter-order patches.

How do I install Review Spec Update in Claude Code?

Run `npx skills add SAP/ai-sdk-js --skill review-spec-update -a claude-code`. Or copy the skill folder (.claude/skills/review-spec-update in SAP/ai-sdk-js) into .claude/skills/review-spec-update in your project. Claude Code loads it when a task matches its description.

How do I install Review Spec Update in Codex?

Run `npx skills add SAP/ai-sdk-js --skill review-spec-update -a codex`. Or copy the skill folder (.claude/skills/review-spec-update in SAP/ai-sdk-js) into .agents/skills/review-spec-update in your project. Codex loads it when a task matches its description.

Can I use Review Spec Update in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SAP/ai-sdk-js --skill review-spec-update -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/review-spec-update, .gemini/skills/review-spec-update, .github/skills/review-spec-update and .opencode/skills/review-spec-update in your project.

What does Review Spec Update need to run?

Going by SKILL.md and its folder, Review Spec Update needs the command-line tools its instructions call (pnpm and git).

Does Review Spec Update access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Review Spec Update safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Review Spec Update use?

Review Spec Update is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Review Spec Update use?

About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Review Spec Update?

Skills that share tags, products or a category with Review Spec Update: Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars) and JavaScript Concept Fact Checker (leonardomso/33-js-concepts, 67k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Review Spec Update?

SAP (a GitHub organization, an official publisher) maintains it in SAP/ai-sdk-js, which has 126 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 10, 2026.

Source: SAP/ai-sdk-js on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.