Skip to content
Back to skills

Audit Compatibility

ASecurity

Audit the codebase for compatibility, the ISO/IEC 25010 characteristic covering co-existence (running alongside other software without conflict) and interoperability (exchanging data via standards). Finds hardcoded shared resources, dependency conflicts, missing API versioning, non-standard data formats, and brittle integrations. Use when the user says /audit-compatibility, "interop audit", "co-existence", "API versioning check", "standards compliance", or runs a 25010 sweep via /audit-sdlc. ...

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
developmentrustgobashsqlapidatabasesecurityperformance

Works with

  • api

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add tomzx/agents --skill audit-compatibility --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Audit Compatibility?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Audit Compatibility
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tomzx-audit-compatibility/badge)](https://www.skillsdirectory.com/skills/tomzx-audit-compatibility)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: audit-compatibility
description: Audit the codebase for compatibility, the ISO/IEC 25010 characteristic covering co-existence (running alongside other software without conflict) and interoperability (exchanging data via standards). Finds hardcoded shared resources, dependency conflicts, missing API versioning, non-standard data formats, and brittle integrations. Use when the user says /audit-compatibility, "interop audit", "co-existence", "API versioning check", "standards compliance", or runs a 25010 sweep via /audit-sdlc. Read-only; produces a findings report.
argument-hint: "[--severity critical|high|medium|low]"
allowed-tools: Bash, Read, Glob, Grep
---

TODAY=!`date +%Y-%m-%d`

# Compatibility Audit (ISO/IEC 25010)

Audits the codebase for **compatibility**: can the software co-exist with other software and interoperate with it through standards? It finds the things that make two systems conflict over shared resources or fail to communicate cleanly.

This is the **Compatibility** characteristic of the [ISO/IEC 25010](https://en.wikipedia.org/wiki/ISO/IEC_25010) quality model.

## Prerequisites

- Working directory is the root of the repository
- Read `.sdlc/context/architecture.md` if present (for integration boundaries)
- Package manifest present for dependency-conflict checks (`pyproject.toml`, `package.json`, `go.mod`, `Cargo.toml`)

## What This Checks

| Sub-characteristic | What it means | Signals scanned |
|---|---|---|
| Co-existence | runs alongside other software without resource or dependency conflict | hardcoded ports/paths/hostnames; well-known shared resources (`/tmp`, fixed DB names); global mutable state; dependency version conflicts; over-pinned or conflicting transitive deps |
| Interoperability | exchanges data and uses standards correctly | missing API versioning; non-standard content types/charsets; unversioned data formats; missing schema validation on inputs/outputs; brittle string-parsing of external data; incorrect HTTP status codes |

## Steps

### 1. Co-existence: shared resources

Hardcoded ports, hostnames, absolute paths, and well-known shared locations that conflict when two instances or two apps run together:

```
rg -n "localhost|127\.0\.0\.1|0\.0\.0\.0|:3000|:8080|:5432|:6379|:5672|/tmp/|/var/|/usr/|C:\\\\" -g '*.{py,ts,js,go}' . \
  | rg -v "test|spec|example|docs|README"
```

Flag hardcoded values that should be configurable (env vars, config). Two instances on the same host cannot both bind a hardcoded port or write to a hardcoded path.

Fixed resource names (DB names, queue names, cache keys without a prefix/namespacing):
```
rg -n "CREATE DATABASE|database=|DB_NAME|queue|exchange|routing_key" -g '*.{py,ts,sql}' .
```

### 2. Co-existence: dependency conflicts

Over-pinned exact versions and conflicting transitive ranges. Exact pins block co-installation with software needing a different version; unbounded ranges can pull a breaking major.

```
rg -n "==[0-9]|\"[a-z@/-]+\": *\"[0-9]" pyproject.toml requirements*.txt package.json 2>/dev/null
```

Use the language tool to detect conflicts:
```
uv pip tree --duplicates 2>/dev/null || pip check
npm ls --all 2>/dev/null | rg -i "deduped|invalid|missing"
```

### 3. Co-existence: global mutable state

Module-level mutable state that breaks under concurrency or co-hosting:
```
rg -n "^[_a-zA-Z]+ *:? *= *\[\]|^[_a-zA-Z]+ *:? *= *\{\}|^_cache|^_state|^_registry" -g '*.py' .
```

### 4. Interoperability: API versioning

Endpoints without a version prefix (`/v1/`, version header, or content negotiation). Unversioned APIs cannot evolve compatibly:
```
rg -n "@(app|router)\.(get|post|put|delete|patch|route)\(['\"]" -g '*.py' . | rg -v "/v[0-9]"
```

### 5. Interoperability: content types and encoding

Responses or requests not setting/explicit content types; missing charset on text; JSON parsed without encoding guards:
```
rg -n "json\.loads\(|JSON\.parse\(|Response\(|jsonify" -g '*.{py,ts}' .
rg -n "Content-Type|content_type|mimetype|charset" -g '*.{py,ts}' .
```

### 6. Interoperability: schema validation

Inputs consumed without schema validation (trusting external data):
```
rg -n -B2 "request\.(json|data|form|args|body)|req\.(body|query|params)|event\[" -g '*.{py,ts,js}' . | rg -v "validate|schema|pydantic|zod|joi|serde"
```

### 7. Interoperability: brittle external-data handling

Regex/string parsing of structured external data instead of a proper parser; hardcoded magic offsets/indices into external payloads.

### 8. Interoperability: HTTP status correctness

Handlers returning 200 for created resources (should be 201), 200 for async-accepted work (should be 202), 200 for errors, or generic 400/500 where a specific code applies:
```
rg -n "status_code\s*=\s*(200|400|500)|return.*200|\.send\(200\)|res\.(status\()?200" -g '*.{py,ts,js}' .
```

### 9. Confirm the decisive findings

Pick the critical or high findings that decide the report. Run the one or two you can: write a scratch script or test under `/tmp` that calls the code, run it, and paste the output, reaching `L3 - Executed` (see [`../sdlc/references/evidence.md`](../sdlc/references/evidence.md)). Never write scratch files into the repository; this audit is read-only and leaves no artifacts behind. Label every other finding with its level and pointer: `L1 - Cited` for a `file:line`, or `L2 - Ruled out` for a walked failure path. When a decisive finding cannot be executed, mark it `unproven` and state what runtime evidence it needed and why that was infeasible.

### 10. Report

Classify by severity and print. Do not modify files.

## Severity

| Severity | Criteria |
|---|---|
| Critical | Dependency conflict that breaks install; consuming external input with no validation on a public endpoint |
| High | Hardcoded port/path preventing co-existence; unversioned public API; wrong content type on a public response |
| Medium | Over-pinned exact version; missing charset; generic HTTP status where specific applies |
| Low | Missing namespace prefix on a cache key; brittle-but-isolated string parse |

## Output Format

```
# Compatibility Audit — {TODAY}

## Summary
- Co-existence findings: N critical, N high
- Interoperability findings: N critical, N high
- Dependency conflicts: N

## Co-existence
### Shared resources
| File:line | Resource | Hardcoded value | Severity | Recommendation | Evidence |
|---|---|---|---|---|---|

### Dependency conflicts
| Package | Conflict | Severity | Recommendation | Evidence |
|---|---|---|---|---|

### Global mutable state
| File:line | Symbol | Severity | Evidence |
|---|---|---|---|

## Interoperability
### API versioning
| Endpoint | Versioned? | Severity | Evidence |
|---|---|---|---|

### Schema validation gaps
| Endpoint | Input | Validated? | Severity | Evidence |
|---|---|---|---|---|

### HTTP status issues
| File:line | Used | Expected | Severity | Evidence |
|---|---|---|---|---|
```

## Example Usage

**Scenario 1: 25010 sweep**
```
/audit-sdlc compatibility
```

**Scenario 2: Before opening a public API**
```
/audit-compatibility
```
Confirms versioning, content types, and input validation before external consumers depend on it.

## Relationship to Other Skills

| Skill | Relationship |
|---|---|
| `audit-security`, `audit-functional-suitability`, `audit-performance-efficiency`, `audit-usability`, `audit-reliability`, `audit-maintainability`, `audit-portability` | The other seven ISO/IEC 25010 characteristics. Combine via `/audit-sdlc`. |
| `audit-sdlc` | Coordinator. |
| `audit-dependencies` | Deeper dependency drill-down (CVEs, outdated). This audit flags conflicts and pins that block co-existence. |
| `audit-portability` | Related but distinct: portability = runs in different environments; compatibility = runs alongside other software and talks standards. |

## Useful Commands Reference

| Command | Description |
|---|---|
| `rg -n "localhost\|127\.0\.0\.1\|:8080\|/tmp/" -g '*.py' .` | Hardcoded shared resources |
| `uv pip tree --duplicates` / `npm ls --all` | Dependency conflicts |
| `rg -n "@(app\|router)\.(get\|post)" -g '*.py' . \| rg -v "/v[0-9]"` | Unversioned endpoints |
| `pip check` | Installed-package conflicts |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…