Breaking Change Detector — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Breaking Change Detector (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill directs the agent to compare two versions of a codebase, API schema, or interface definition and systematically identify every change that could break existing callers. It classifies each change by severity, explains why it is breaking, and provides a concrete migration hint so consumers know exactly what they need to update.
Use this before publishing a new package version, before deploying an API change that existing clients depend on, or during a code review to catch unintended contract changes.
Copy this file to .agents/skills/breaking-change-detector/SKILL.md in your project root.
Then ask:
Provide: the old version (paste, file path, or git ref) and the new version.
Add the instructions below to your .cursorrules or paste them into the Cursor AI pane. Then share both the old and new code side by side.
Paste both versions clearly labeled as "OLD VERSION" and "NEW VERSION" and ask Codex to follow the instructions below.
When asked to detect breaking changes, follow this process:
Before comparing, identify what is "public" — i.e., what external callers or consumers depend on:
export statementsChanges to internal/private code are not breaking changes unless they affect something observable from outside.
Compare the old and new versions and classify every difference into one of these categories:
Breaking changes (must flag)
string → 'a' | 'b')Non-breaking changes (informational only)
'a' | 'b' → string)Every breaking change entry must include:
## Breaking Change Report
### Summary
- Breaking changes: N
- Non-breaking changes: N (informational)
---
### Breaking Changes
#### 1. [Short title]
- **Type**: [Removed / Renamed / Signature change / Type change / Behavior change]
- **Location**: `path/to/file.ts` or `POST /api/endpoint`
- **Old**: [What it was before]
- **New**: [What it is now, or "Removed"]
- **Why it breaks**: [What callers were depending on]
- **Migration**: [Exactly what callers need to change]
#### 2. ...
---
### Non-Breaking Changes (Informational)
| # | Location | Change | Notes |
|---|----------|--------|-------|
| 1 | `src/utils.ts` | Added `formatCurrency()` export | New addition, no action needed |
---
### Recommended Version Bump
[Based on semver: MAJOR if any breaking changes exist, MINOR if only additions, PATCH if only bug fixes]If a change is ambiguous (e.g., a behavior change that some callers rely on but it was arguably a bug), flag it explicitly as "Potentially breaking — review required" with context explaining the ambiguity.
Input to Agent:
"Use the Breaking Change Detector skill. Here are the two versions of our user service interface:
>
OLD: ``ts export function getUser(id: string): Promise<{ id: string; name: string; email: string }> export function createUser(name: string, email: string): Promise<{ id: string }> export function deleteUser(id: string): Promise<void> ``>
NEW: ``ts export function getUser(id: string): Promise<{ id: string; name: string; email: string; role: string }> export function createUser(input: { name: string; email: string; role: string }): Promise<{ id: string }> ``"Output from Agent:
## Breaking Change Report
>
### Summary - Breaking changes: 2 - Non-breaking changes: 1 (informational)
>
---
>
### Breaking Changes
>
#### 1.createUsersignature changed from positional args to object input - Type: Signature change - Location:userService.ts- Old:createUser(name: string, email: string)- New:createUser(input: { name: string; email: string; role: string })- Why it breaks: All callers passingcreateUser("Alice", "[email protected]")will break at compile time. Also,roleis now required — callers that don't provide it will fail. - Migration: Update all call sites tocreateUser({ name: "Alice", email: "[email protected]", role: "user" }). Decide on a default role value for existing callers.
>
#### 2.deleteUserremoved - Type: Removed - Location:userService.ts- Old:deleteUser(id: string): Promise<void>- New: Not present - Why it breaks: Any caller invokingdeleteUser()will get a compile error or runtime error. - Migration: Find a replacement for delete functionality or soft-delete viaupdateUser. Audit all usages withgrep -r "deleteUser".
>
---
>
### Non-Breaking Changes
>
| # | Location | Change | Notes | |---|----------|--------|-------| | 1 |getUserreturn type | Addedrole: stringfield to response | Additive — existing callers can ignore it |
>
### Recommended Version Bump MAJOR — two breaking changes require a major version bump.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.