Agent skill

Update SDK Test Contracts

by restatedev in restatedev/sdk-typescript

Update the SDK test service implementations to match a new version of the e2e conformance contracts.

MITAuto-check passedTesting & QA

Install Update SDK Test Contracts

skills CLI
$ npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a claude-code

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

GitHub CLI
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --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/restatedev/sdk-typescript.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .claude/skills/update-sdk-test-contracts && 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
update-sdk-test-contracts
GitHub stars
125
Token cost
~1.6k tokens
SKILL.md length
369 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Update the SDK test service implementations to match a new version of the e2e conformance contracts.

  • Works in 6 steps: Read the release notes → Identify the two service implementations… → Understand the contract types → …
  • The user says update sdk tests
  • SKILL.md covers Step 1: Read the release notes, Step 2: Identify the two…, Step 3: Understand the… and Step 4: Update the main e2e…, plus 2 more sections
  • Calls pnpm, podman and gh

What it does

Update SDK Test Contracts is an agent skill from restatedev/sdk-typescript. Update the SDK test service implementations to match a new version of the e2e conformance contracts. Use when the user says "update sdk tests", "update test contracts", or gives a specific e2e release tag to update to.

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

It sits in Testing & QA, covering End-to-end testing. The repository describes itself as: Restate SDK for JavaScript/Typescript. The licence is MIT.

When your agent uses it

  • The user says update sdk tests
  • Update test contracts
  • Gives a specific e2e release tag to update to

Example prompts

  • “update sdk tests”
  • “update test contracts”
  • “/update-sdk-test-contracts”

Requirements

  • Docker

Workflow steps

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

  1. Read the release notes
  2. Identify the two service implementations to update
  3. Understand the contract types
  4. Update the main e2e services (packages/tests/restate-e2e-services/src/)
  5. Update the gen test services (packages/libs/restate-sdk-gen/test-services/src/)
  6. Build and verify

What it can do on your machine

Read from SKILL.md and the folder at commit 79b8358. 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
    • podman
    • gh

    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 gh, 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

Update SDK Test Contracts loads about 1.6k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 369 words of instructions outside code blocks.

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

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 restatedev/sdk-typescript at commit 79b8358, republished under its MIT licence (© restatedev). 369 words, ~1,578 tokens.

Download SKILL.mdSave it as .claude/skills/update-sdk-test-contracts/SKILL.md (or your agent's skills folder).
name
update-sdk-test-contracts
description
Update the SDK test service implementations to match a new version of the e2e conformance contracts. Use when the user says "update sdk tests", "update test contracts", or gives a specific e2e release tag to update to.
user-invocable
true

Updating SDK Test Service Implementations to a New Contract Version

The conformance test suite (restatedev/e2e) defines contracts that every SDK must implement. When the contracts change, both service implementations in this repo must be updated.

Step 1: Read the release notes

The user will provide a release tag (e.g. v1.2.3). Fetch the GitHub release to understand what changed:

bash
gh release view v1.2.3 --repo restatedev/e2e

Read the release body carefully — it describes which contract interfaces changed, what new commands/handlers were added, and what was removed. This tells you exactly what to implement.

Step 2: Identify the two service implementations to update

Both live in this repo:

ImplementationPathSDK
Main e2e servicespackages/tests/restate-e2e-services/src/@restatedev/restate-sdk (async/await)
Gen test servicespackages/libs/restate-sdk-gen/test-services/src/@restatedev/restate-sdk-gen (generator functions)

The key files are:

  • virtual_object_command_interpreter.ts / vo-command-interpreter.ts — implements VirtualObjectCommandInterpreter
  • test_utils.ts / test-utils.ts — implements TestUtilsService

Other services (awakeable-holder, failing, counter, etc.) rarely change.

Step 3: Understand the contract types

The contracts (Kotlin interfaces) in restatedev/e2e define:

  • Serialized type names: every command/handler is identified by its @SerialName("camelCase") string, which becomes the type discriminator in JSON
  • Field names: Kotlin camelCase fields map directly to JSON — match them exactly
  • Return value conventions for VirtualObjectCommandInterpreter:
    • AwaitOne / AwaitAny / AwaitFirstCompleted / AwaitFirstSucceededOrAllFailed → return the resolved string value; Sleep returns "sleep"
    • AwaitAllSucceededOrFirstFailed → pipe-joined values: "val0|val1|val2"; throws on first failure
    • AwaitAllCompleted → pipe-joined settled results: "ok:val0|err:reason|ok:val2"
Show full SKILL.md (161 more words)Show less

Step 4: Update the main e2e services (packages/tests/restate-e2e-services/src/)

These use the standard async/await Restate SDK. Patterns:

New AwaitableCommand sub-type (e.g. createSignal):

typescript
// Add to the SubCommand union type and parseAwaitableCommand switch:
case "createSignal": {
  const ctxInternal = ctx as unknown as restate.internal.ContextInternal;
  return ctxInternal.signal<string>(command.signalName);  // returns RestatePromise<string>
}

New Command combinator (e.g. awaitAllCompleted):

typescript
// Add to the Command union type and interpretCommands switch:
case "awaitAllCompleted": {
  const settled = await RestatePromise.allSettled(
    command.commands.map((cmd) => parseAwaitableCommand(ctx, cmd))
  );
  lastResult = settled
    .map((r) => r.status === "fulfilled" ? `ok:${r.value}` : `err:${(r.reason as Error).message}`)
    .join("|");
  break;
}

New TestUtilsService handler (e.g. resolveSignal):

typescript
resolveSignal(
  ctx: restate.Context,
  req: { invocationId: string; signalName: string; value: string }
): Promise<void> {
  const ctxInternal = ctx as unknown as restate.internal.ContextInternal;
  ctxInternal
    .invocation(restate.InvocationIdParser.fromString(req.invocationId))
    .signal(req.signalName)
    .resolve(req.value);
  return Promise.resolve();
},

Signals use the internal ContextInternal API — always cast with as unknown as restate.internal.ContextInternal (double cast required; direct cast from ObjectContext is rejected by tsc).

Step 5: Update the gen test services (packages/libs/restate-sdk-gen/test-services/src/)

These use generator functions. The gen SDK exports: all, allSettled, any, race, signal, invocation, sleep, run, awakeable, select, state, sharedState.

New AwaitableCommand sub-type (e.g. createSignal):

typescript
case "createSignal":
  return { kind: "awakeable", future: signal<string>(cmd.signalName) };

New Command combinator (e.g. awaitAllCompleted):

typescript
case "awaitAllCompleted": {
  const subs: SubEntry[] = [];
  for (const c of cmd.commands) subs.push(yield* createSub(c));
  const settled = (yield* allSettled(subs.map((s) => s.future))) as FutureSettledResult<unknown>[];
  result = settled
    .map((r, i) =>
      r.status === "rejected"
        ? `err:${(r.reason as Error).message}`
        : `ok:${valueToString(r.value, subs[i]!.kind)}`
    )
    .join("|");
  break;
}

IMPORTANT — do NOT use spawn for multi-future combinators: spawn creates a structured child fiber, and the parent handler waits for ALL spawned children before completing. For race/any, this means a pending signal fiber would prevent the handler from ever returning. Pass the futures directly to all/allSettled/any/race.

New TestUtilsService handler (e.g. resolveSignal):

typescript
*resolveSignal(req: { invocationId: string; signalName: string; value: string }) {
  invocation(req.invocationId).signal(req.signalName).resolve(req.value);
},

Step 6: Build and verify

bash
# Type-check both packages
pnpm --filter restate-e2e-services run _check:types
pnpm --filter restate-sdk-gen build

# Build Docker images (from repo root)
podman build -t e2e-ts:local -f packages/tests/restate-e2e-services/Dockerfile .
podman build -t e2e-ts-gen:local -f packages/libs/restate-sdk-gen/test-services/Dockerfile .

# Run the affected test classes against both images (from ../e2e)
cd ../e2e
./gradlew :sdk-tests:run --args='run --sequential --image-pull-policy=CACHED --test-suite=default --test-name=<TestClass> --service-container-image=localhost/e2e-ts:local'
./gradlew :sdk-tests:run --args='run --sequential --image-pull-policy=CACHED --test-suite=default --test-name=<TestClass> --service-container-image=localhost/e2e-ts-gen:local'

All tests must pass on both images before the update is complete.

© restatedev, MIT. 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/update-sdk-test-contracts of restatedev/sdk-typescript.

Open the folder on GitHubat commit 79b8358

Compare with similar skills

Update SDK Test Contracts 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.

Update SDK Test Contracts compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Update SDK Test Contracts this skillrestatedev/sdk-typescript125—~1.6kAutomated safety check: PassMIT
Web Application Testinganthropics/skills180k51 repos~966Automated safety check: PassApache-2.0
TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph11211 repos~2.4kAutomated safety check: PassNone
Uloop Replay Inputkurotu/VRCQuestTools3733 repos~615Automated safety check: PassMIT
Ui4 Convert Testspayloadcms/payload45k—~3.5kAutomated safety check: PassMIT
E2Estackia/rtp2httpd2.2k—~517Automated safety check: PassGPL-2.0

Similar skills

  • Web Application Testing

    anthropics/skills

    Official

    Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.

    180k GitHub starsUsed in 51 repos~966 tokens
    Testing & QAAuto-check passed
  • TDD Workflow

    hellangleZ/burn-in-cceverywhere-ralph

    A skill your agent uses when writing new features, fixing bugs, or refactoring code.

    112 GitHub starsUsed in 11 repos~2.4k tokens
    Testing & QAAuto-check passed
  • Uloop Replay Input

    kurotu/VRCQuestTools

    Replay recorded PlayMode keyboard and mouse input. An agent skill from kurotu/VRCQuestTools.

    373 GitHub starsUsed in 3 repos~615 tokens
    Testing & QAAuto-check passed
  • Ui4 Convert Tests

    payloadcms/payload

    A skill your agent uses when UI changes are complete and e2e tests need updating.

    45k GitHub stars~3.5k tokensUpdated today
    Testing & QAAuto-check passed
  • E2E

    stackia/rtp2httpd

    Write, run, review, or debug rtp2httpd E2E tests and their harness in e2e/ and scripts/run-e2e.sh.

    2.2k GitHub stars~517 tokensUpdated 6 days ago
    Testing & QAAuto-check passed
  • Moav E2E

    MotherofallVPNs/MoaV

    Run and debug MoaV's end-to-end tests — real protocol connectivity (client-test.sh) and the moav CLI smoke test — against a LIVE server, via the self-hosted e2e workflow or a local test VPS.

    448 GitHub stars~1.9k tokensUpdated yesterday
    Testing & QAAuto-check: notes

More from restatedev/sdk-typescript

  • Run SDK Tests

    restatedev/sdk-typescript

    Run the Restate SDK conformance test suite locally against this SDK's Docker image.

    125 GitHub stars~745 tokensUpdated 2 days ago
    Auto-check passed
  • Add Config Option

    restatedev/sdk-typescript

    When the user asks to add a new option/field/config to service, handler, endpoint, ServiceOptions, HandlerOpts, ObjectOptions, WorkflowOptions, or the discovery schema

    125 GitHub stars~623 tokensUpdated 2 days ago
    Auto-check passed
  • Add E2E Test

    restatedev/sdk-typescript

    When the user asks to add a new e2e test to the restate-e2e-services package

    125 GitHub stars~910 tokensUpdated 2 days ago
    Auto-check passed

Categories

Questions about Update SDK Test Contracts

What does Update SDK Test Contracts do?

Update the SDK test service implementations to match a new version of the e2e conformance contracts. Update SDK Test Contracts is an agent skill from restatedev/sdk-typescript. Update the SDK test service implementations to match a new version of the e2e conformance contracts.

When should I use Update SDK Test Contracts?

Update SDK Test Contracts fits situations like: the user says update sdk tests; update test contracts; gives a specific e2e release tag to update to.

How do I install Update SDK Test Contracts in Claude Code?

Run `npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a claude-code`. Or copy the skill folder (.claude/skills/update-sdk-test-contracts in restatedev/sdk-typescript) into .claude/skills/update-sdk-test-contracts in your project. Claude Code loads it when a task matches its description.

How do I install Update SDK Test Contracts in Codex?

Run `npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a codex`. Or copy the skill folder (.claude/skills/update-sdk-test-contracts in restatedev/sdk-typescript) into .agents/skills/update-sdk-test-contracts in your project. Codex loads it when a task matches its description.

Can I use Update SDK Test Contracts 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-sdk-test-contracts, .gemini/skills/update-sdk-test-contracts, .github/skills/update-sdk-test-contracts and .opencode/skills/update-sdk-test-contracts in your project.

What does Update SDK Test Contracts need to run?

Going by SKILL.md and its folder, Update SDK Test Contracts needs the command-line tools its instructions call (pnpm, podman and gh). Our summary lists: Docker.

Does Update SDK Test Contracts access the network?

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

Is Update SDK Test Contracts 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 Update SDK Test Contracts use?

Update SDK Test Contracts is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Update SDK Test Contracts use?

About 1.6k tokens (SKILL.md is roughly 6.3k 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 Update SDK Test Contracts?

Skills that share tags, products or a category with Update SDK Test Contracts: Web Application Testing (anthropics/skills, 180k stars), TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), Uloop Replay Input (kurotu/VRCQuestTools, 373 stars) and Ui4 Convert Tests (payloadcms/payload, 45k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Update SDK Test Contracts?

restatedev (a GitHub organization) maintains it in restatedev/sdk-typescript, which has 125 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 6, 2026.

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