module-depth-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited module-depth-review (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.
Find shallow modules. Propose deep ones.
A shallow module has an interface nearly as complex as its implementation — it forces callers to learn a lot for little behavioural payoff. A deep module hides substantial behaviour behind a small interface. This skill audits a region of the codebase against that lens and proposes consolidations.
This is an audit skill. It produces findings and proposals — never edits. Pair with audit-vs-fix-discipline for the output discipline.
Apply when the user asks about module boundaries, file organisation, or "is this over-modularised?". Concrete triggers:
Not the right skill for:
simplifycleanuparchitect agentarchitect-reviewerThis skill uses precise terms. Do not substitute "component," "service," "API," "boundary," or "layer" — those words drift in meaning across teams and obscure the question being asked.
The full glossary lives in @language.md. The short version:
Use these exact words in findings. Vocabulary drift is the failure mode.
Confirm with the user what region is in scope: a folder, a subsystem, a feature. Don't audit the whole codebase. If unclear, ask.
Read the files in scope. For each module, ask the deletion test:
If I deleted this module and inlined its contents into the call sites, would complexity vanish (it was a pass-through) or reappear distributed across N callers (it was earning its keep)?
If complexity vanishes → it's a shallow module candidate for consolidation. If complexity reappears → it's earning its keep. Leave it.
Also flag:
For each shallow-module candidate, classify its dependencies — this determines the consolidation shape and testing strategy. See @dependency-categories.md for the four categories (in-process, local-substitutable, remote-owned, true-external) and the testing strategy each one implies.
Without this step, "just merge them" recommendations skip the question of how the deepened module gets tested.
Output template — markdown, no HTML reports:
## Module depth review: <region>
### Candidates for deepening
#### 1. <one-line title>
**Strength:** Strong | Worth exploring | Speculative
**Dependency category:** in-process | local-substitutable | remote-owned | true-external
**Files involved:**
- `path/a.ts`
- `path/b.ts`
- `path/c.ts`
**Current shape:**
Three shallow modules. `a.ts` exposes `parseFoo`, `b.ts` exposes `validateFoo`, `c.ts` exposes `persistFoo`. Every caller invokes all three in sequence; the only callers of each are the others plus one top-level entry point. Interfaces total 9 functions; implementations total ~80 lines.
**Deletion test result:**
Inlining each into the single top-level caller eliminates ~60 lines of glue and the 9-function surface area. Complexity doesn't reappear elsewhere — it was glue, not encapsulation.
**Proposed deep module:**
One module exposing `processFoo(input): Result`. Three private helpers inside; one public entry point.
**Wins:**
- **Leverage:** callers learn one function instead of three.
- **Locality:** changes to the parse/validate/persist sequence happen in one place.
- **Test surface:** one interface to assert against, not three.
**Diagram:**
graph LR subgraph Before A[parseFoo] --> B[validateFoo] --> C[persistFoo] end subgraph After P[processFoo] end
#### 2. <next candidate...>
### Shallow modules that are actually earning their keep
(Optional section — name modules that *looked* shallow but passed the deletion test. Useful when the user expected them flagged.)
### Top recommendation
Of the N candidates above, #X is the strongest because <reason rooted in leverage/locality>. The others are worth exploring once #X lands.
---
Want me to dig deeper into any candidate? Specify by number. Or want me to draft the consolidation as a fix (separate task)?If no candidates found, say so. Empty findings are valid — don't manufacture shallow modules.
A clean review is a valid outcome. The codebase is allowed to be well-shaped. Inventing candidates to seem thorough is the failure mode this skill exists to prevent.
Confidence gate: ≥80% sure the consolidation would improve the codebase, or downgrade to "Speculative" or drop entirely.
Pre-finding checks:
If any answer is "no" → drop the candidate or move it to Suggested follow-ups.
Do NOT flag:
lib/ not utils/")When proposing a deep module that crosses a network or external-service boundary:
For high-impact candidates (Strong strength, large surface area, or contentious shape), explicitly explore alternative designs before recommending one. Approaches:
Present 2-3 designs, contrast them on depth/locality/seam placement, then make a recommendation. Don't always do this — for clear-cut cases it's overhead.
Each of these means: stop. Re-read @language.md or @dependency-categories.md before continuing.
Before reviewing, check the project root for REVIEW.md (general review policy) or ARCHITECTURE.md (project-specific architectural conventions). If present, they override this skill's defaults. Common overrides:
simplify.cleanup.architect agent.audit and consolidate the X folder) — the audit discipline doesn't apply, but the lens and vocabulary still do.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.