evolve-public-apis

Guides deliberate, compatibility-preserving changes to a package's public API contracts.

1|Updated Aug 11, 2026
One-click install
npx skills add https://github.com/0xMuluh/package-development-skills --skill evolve-public-apis-0xmuluh
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: evolve-public-apis
Source: https://github.com/0xMuluh/package-development-skills/tree/main/evolve-public-apis
Command: npx skills add https://github.com/0xMuluh/package-development-skills --skill evolve-public-apis-0xmuluh

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Changing a package's public interface—renaming functions, altering arguments, defaults, or return types—risks breaking downstream users and creating API churn. This Skill enforces a disciplined process so every public contract change is justified, narrowly scoped, and paired with an appropriate compatibility strategy. ## Core Features & Use Cases - Structured API Change Statement: Requires documenting the current contract, the concrete problem, the proposed contract, and the compatibility plan before any implementation begins. - Strategy Guidance per Change Type: Provides dedicated procedures for function renames, argument renames, default changes, return-type changes, and adding or removing arguments, each with preservation boundaries. - Maturity-Based Compatibility: Matches transition strategies (hard change, alias, delegation, deprecation) to package maturity, from pre-release to widely used stable APIs. - Use Case: When renaming an exported function like getRDA() to getJointRDA() to avoid an ecosystem naming collision, this Skill ensures the rename changes only the name—delegating the old name, preserving behavior, updating tests and docs, and keeping refactors in separate PRs. ## Quick Start Ask the AI to plan renaming an exported function in your package while preserving backward compatibility and updating tests and documentation.

Frequently Asked Questions about evolve-public-apis

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I rename a public function without breaking users?▼

Rename the function while keeping behavior identical, and have the old name delegate to the new implementation during a transition period. Add tests showing newName(input) equals oldName(input), and document the replacement clearly.

How should I change a function's default value safely?▼

Treat a default change as its own behavioral API change, separate from any refactor. Document the old default, new default, reason, and consequence, and add tests for implicit calls, explicit old values, and explicit new values.

When is it acceptable to make a breaking API change?▼

Hard breaking changes are acceptable mainly for pre-release or experimental APIs with low migration cost. Released or mature APIs should use aliases, deprecation cycles, or staged transitions instead of abrupt breakage.

What counts as part of a package's public API?▼

Public API includes exported functions and classes, argument names, defaults, accepted input types, return classes, side effects, documented behavior, file formats, and configuration keys. Widely relied-upon behavior counts as contract even when not formally typed.

Should I bundle a refactor with a public API rename?▼

No. Change the public name with the same implementation in one PR, then refactor internals in a separate PR. This lets reviewers separate compatibility concerns from correctness and keeps the semantic scope narrow.