Interface Review
Review public and shared boundaries from the caller's perspective. Determine
whether the common call path is obvious, whether the boundary owns one coherent
job, and whether callers can use it without learning implementation details.
Route Nearby Work
- Use
adversarial-review for broad correctness, security, operational, or
high-scrutiny review.
- Use
simplify for internal complexity that does not affect callers.
- Use
plan-changes when no implementation exists yet.
Select the Boundaries
Inspect changed:
- APIs, commands, events, schemas, and serialized messages;
- exported functions, classes, service methods, and libraries;
- hooks, shared components, callbacks, and extension points;
- configuration surfaces and feature switches;
- errors, return values, async behavior, and side effects visible to callers.
Trace actual callers and nearby existing boundaries. Do not evaluate an
interface in isolation from how it is used.
Ask the Caller Questions
For each boundary:
- What job is the caller trying to do?
- Does the name describe that job and its side effects?
- Are required inputs, defaults, modes, return values, errors, and lifecycle
behavior explicit?
- Does the caller need to know this provider, transport, storage, or framework
detail?
- Does an existing boundary already partly solve the same job?
- Would a new caller know which of the overlapping entrypoints to choose?
- Can the interface evolve without forcing unrelated callers to change?
High-Signal Problems
Prioritize:
- near-duplicate entrypoints for the same caller job;
- optional input whose omission silently selects a different workflow;
- boolean flags or mode strings that combine unrelated behavior;
- several primitives that travel together but represent one domain concept;
- a large options object that only relocates confusion;
- query-like names that hide writes, notifications, or network effects;
- provider, storage, transport, or framework leakage;
- nullable or ambiguous return values without a caller-visible reason;
- extensibility machinery with one implementation and no demonstrated second
consumer;
- breaking changes without a deliberate migration or version boundary.
Prefer Caller Improvements
Use the smallest fix that improves the caller's mental model:
- rename by intent;
- make modes explicit and mutually exclusive;
- group inputs only when they form a nameable domain concept;
- separate queries from commands and pure logic from side effects;
- replace implementation-specific inputs with stable domain language;
- extend or reshape an existing boundary instead of adding a parallel one;
- merge or delete near-duplicates;
- preserve a compatibility adapter when it protects a real external contract.
Do not create an abstraction merely to make the implementation look tidy.
Internal elegance is not an interface benefit unless callers gain clarity,
safety, or stability.
Validate Findings
Before reporting:
- cite the exact boundary and representative callers;
- confirm that the proposed replacement handles every distinct caller job;
- identify compatibility and migration cost;
- distinguish a harmful public shape from a local style preference;
- drop findings whose benefit does not exceed the churn.
Report Only the Leverage
Return few, concrete findings:
1. `<boundary>`
Caller problem: <confusion, duplication, leakage, or hidden behavior>
Evidence: <representative callers and competing boundary>
Better shape: <proposed interface>
Migration: <callers, compatibility, and risk>
If no interface finding survives, say so and name the important boundaries and
caller patterns checked.
1---2name: interface-review3description: Use when reviewing a diff, pull request, or changed files for caller-facing interface quality across APIs, exported functions, service methods, hooks, component props, schemas, commands, events, or extension points. Focus on boundary shape rather than general correctness.4---56# Interface Review78Review public and shared boundaries from the caller's perspective. Determine9whether the common call path is obvious, whether the boundary owns one coherent10job, and whether callers can use it without learning implementation details.1112## Route Nearby Work1314- Use `adversarial-review` for broad correctness, security, operational, or15 high-scrutiny review.16- Use `simplify` for internal complexity that does not affect callers.17- Use `plan-changes` when no implementation exists yet.1819## Select the Boundaries2021Inspect changed:2223- APIs, commands, events, schemas, and serialized messages;24- exported functions, classes, service methods, and libraries;25- hooks, shared components, callbacks, and extension points;26- configuration surfaces and feature switches;27- errors, return values, async behavior, and side effects visible to callers.2829Trace actual callers and nearby existing boundaries. Do not evaluate an30interface in isolation from how it is used.3132## Ask the Caller Questions3334For each boundary:35361. What job is the caller trying to do?372. Does the name describe that job and its side effects?383. Are required inputs, defaults, modes, return values, errors, and lifecycle39 behavior explicit?404. Does the caller need to know this provider, transport, storage, or framework41 detail?425. Does an existing boundary already partly solve the same job?436. Would a new caller know which of the overlapping entrypoints to choose?447. Can the interface evolve without forcing unrelated callers to change?4546## High-Signal Problems4748Prioritize:4950- near-duplicate entrypoints for the same caller job;51- optional input whose omission silently selects a different workflow;52- boolean flags or mode strings that combine unrelated behavior;53- several primitives that travel together but represent one domain concept;54- a large options object that only relocates confusion;55- query-like names that hide writes, notifications, or network effects;56- provider, storage, transport, or framework leakage;57- nullable or ambiguous return values without a caller-visible reason;58- extensibility machinery with one implementation and no demonstrated second59 consumer;60- breaking changes without a deliberate migration or version boundary.6162## Prefer Caller Improvements6364Use the smallest fix that improves the caller's mental model:6566- rename by intent;67- make modes explicit and mutually exclusive;68- group inputs only when they form a nameable domain concept;69- separate queries from commands and pure logic from side effects;70- replace implementation-specific inputs with stable domain language;71- extend or reshape an existing boundary instead of adding a parallel one;72- merge or delete near-duplicates;73- preserve a compatibility adapter when it protects a real external contract.7475Do not create an abstraction merely to make the implementation look tidy.76Internal elegance is not an interface benefit unless callers gain clarity,77safety, or stability.7879## Validate Findings8081Before reporting:8283- cite the exact boundary and representative callers;84- confirm that the proposed replacement handles every distinct caller job;85- identify compatibility and migration cost;86- distinguish a harmful public shape from a local style preference;87- drop findings whose benefit does not exceed the churn.8889## Report Only the Leverage9091Return few, concrete findings:9293```markdown941. `<boundary>`95 Caller problem: <confusion, duplication, leakage, or hidden behavior>96 Evidence: <representative callers and competing boundary>97 Better shape: <proposed interface>98 Migration: <callers, compatibility, and risk>99```100101If no interface finding survives, say so and name the important boundaries and102caller patterns checked.