Skip to content
Development
Agent

versioning-and-evolution

APIs are forever once published: a consumer you've never met may depend on any field you expose. Design so you can **add without breaking**, and version explicitly when you must break.

From plugin
skills
954 skills54 agents

Claude Code

$ npx -y skills add vanara-agents/skills --agent claude-code

Agent definition

versioning-and-evolution.md

Versioning & Evolution

APIs are forever once published: a consumer you've never met may depend on any field you expose. Design so you can **add without breaking**, and version explicitly when you must break.

Choosing a versioning strategy

| Strategy | Example | Pros | Cons | |---|---|---|---| | **URI path** | `/v1/orders` | Operationally clearest; trivial to route, cache, log | Version in every URL; "ugly" to purists | | **Header** | `Accept: application/vnd.api.v2+json` | Clean URLs; content-negotiation native | Invisible in logs/caches; easy to get wrong | | **Query param** | `/orders?version=2` | Simple | Pollutes caching; easy to omit |

**Default recommendation: URI path versioning** (`/v1/...`). It is the most operationally legible โ€” you can see the version in every request log, route it at the gateway, and cache it cleanly. Reserve header-based versioning for APIs where URL stability is a hard requirement.

Version the **major** number only. Minor, backward-compatible changes ship within the same version.

Additive (safe) vs breaking (needs a new version)

**Safe โ€” ship within the current version:**

  • Adding a new endpoint.
  • Adding a new **optional** request field (with a sensible default).
  • Adding a new field to a response (clients must ignore unknown fields โ€” the *tolerant reader* rule).
  • Adding a new optional query parameter.
  • Adding a new enum value **only if** clients are documented to tolerate unknown values.

**Breaking โ€” requires a new major version:**

  • Removing or renaming a field (request or response).
  • Changing a field's type or its meaning.
  • Making a previously optional request field required.
  • Tightening validation so previously valid requests now fail.
  • Changing default behavior, pagination style, or the error shape.
  • Removing an endpoint or changing its URL/method.

The tolerant reader contract

Tell consumers, in the docs, that they **must ignore unknown fields** and tolerate new enum values. This single rule turns a whole class of otherwise-breaking changes (adding fields, adding enum members) into safe additive ones. State it explicitly โ€” you cannot rely on behavior you never published.

Deprecation playbook

When a breaking change is unavoidable:

1. **Ship the new version** (`/v2`) alongside the old. Never break `/v1` in place. 2. **Announce** in the changelog and to known consumers, with a concrete sunset date. 3. **Signal at runtime.** Return a `Deprecation: true` header and a `Sunset: <date>` header on the old endpoints; optionally add a `Warning` header. 4. **Monitor usage** of the old version so you know who still depends on it. 5. **Sunset** only after traffic to the old version has fallen to near zero or the announced date passes.

Anti-patterns

  • **Breaking `/v1` in place** "because only a few clients use that field" โ€” you cannot know who depends

on it; that's the whole point of a published contract.

  • **Versioning per endpoint** โ€” a patchwork of `/orders/v2` and `/users/v3` is unnavigable. Version the

API surface, not individual routes.

  • **Infinite versions** โ€” every major version is an operational and support cost. Deprecate aggressively

once a successor is stable.

Read more
@vanara-agents
Ships withskills

๐Ÿ’ Free agents, skills & packs for Claude Code One subscription. An army of Claude Code agents. 30 production-grade agents, skills, and packs for Claude Code โ€” free, Apache-2.0, install with one command.

917 skills54 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
9
Star history of vanara-agents/skills on GitHub, a chart by star-history.com

Other agents on skills.

AGENT

AGENT

Agent

Use when designing a new HTTP/GraphQL API or changing an existing one โ€” modeling resources, defining endpoint contracts, choosingโ€ฆ

review-notes

review-notes

Agent

This shows how the api-designer agent reviews a flawed draft. Findings are severity-ranked so the implementer fixes theโ€ฆ

contract-and-openapi

contract-and-openapi

Agent

The contract is the deliverable. Express it as an **OpenAPI 3.1** document so it is human-readable *and* machine-checkable. Thisโ€ฆ

design-checklist

design-checklist

Agent

Run through this before declaring an API contract done. It is ordered the way you should *design*: resources first, cross-cuttingโ€ฆ

pr-comment-template

pr-comment-template

Agent

Copy-paste templates for leaving review comments. Keep each comment to one finding: an anchor, the problem, and the fix.

sample-review-output

sample-review-output

Agent

A complete review of a hypothetical PR, in the standard format. Use this as the model for tone, structure, and the anchor โ†’โ€ฆ

More agents from other plugins.

a11y-architect
Auto-invoked

a11y-architect

Agent

Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UIโ€ฆ

ecc12d293k
@affaan-m@affaan-mInstall Agent
analyze-pass-impact

analyze-pass-impact

Agent

Analyzes how a specific topic affects a group of compiler passes. Used by the /plan-update skill to parallelize research acrossโ€ฆ

react2d252k
@facebook@facebookInstall Agent
orchestrator

orchestrator

Agent

- If the user makes a simple request (such as asking for the time) which you can fulfill by running a terminal command (such asโ€ฆ

codex1d135k
@openai@openaiInstall Agent
cavecrew-builder

cavecrew-builder

Agent

Surgical 1-2 file edit. Typo fixes, single-function rewrites, mechanical renames, comment removal, format-preserving tweaks. Hardโ€ฆ

caveman2d119k
@juliusbrussee@juliusbrusseeInstall Agent

Questions about versioning-and-evolution.

Which coding agents can use versioning-and-evolution?
versioning-and-evolution installs in Claude Code and Cursor: each loads subagents from .claude/agents, so copy the file there. Flowy's auto-invocation runs in Claude Code only.