一键导入
design-review
Solution selection and adversarial validation. Load when proposing solutions or evaluating architecture decisions
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Solution selection and adversarial validation. Load when proposing solutions or evaluating architecture decisions
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
External API evaluation and MCP server wrapper generation. Load when integrating a REST/GraphQL API as a workspace tool
Capability-based provider system patterns. Load when creating providers or wiring module-provider integration
Full-stack WebSocket subscription development. Load when adding WS routes, topic services, or debugging WS data flows
Systematic Python type error resolution (mypy/pyright). Load when fixing backend type check failures
Type-first Python with Pydantic, Protocol, and discriminated unions. Load when writing models or enforcing typing
Systematic type error resolution for Python (mypy/pyright) and TypeScript (vue-tsc). Use when fixing type errors, resolving type check failures, or optimizing type imports.
| name | design-review |
| description | Solution selection and adversarial validation. Load when proposing solutions or evaluating architecture decisions |
| user-invocable | false |
Two-phase design validation: select the right approach, then stress-test the proposal.
Before proposing new solutions, validate against existing assets.
┌─────────────────────────────────────────────────────────────┐
│ Can existing code be extended/configured? │
│ YES → Propose extension, skip new implementation │
│ NO ↓ │
│ │
│ Does a project-approved library solve this? │
│ YES → Use it, document integration approach │
│ NO ↓ │
│ │
│ Is there a well-maintained OSS solution? │
│ YES → Evaluate: adoption cost vs build cost │
│ NO ↓ │
│ │
│ Custom implementation justified? │
│ → Document why alternatives were rejected │
└─────────────────────────────────────────────────────────────┘
| Concern | Question | Required Output |
|---|---|---|
| Abstraction | Can we swap the underlying provider? | Interface/adapter pattern |
| Data | Can we export/migrate data if we switch? | Migration path |
| Stability | Is this a stable, well-maintained project? | Maintenance status |
Before finalizing, argue against your proposal. Genuine adversarial thinking, not a checkbox exercise.
| Level | Definition | Response |
|---|---|---|
| Critical | Blocking, breaking, or security risk | Mention prominently |
| Tech debt | Accumulating risk, worth tracking | Note in tradeoffs |
| Style | Low impact preference | Mention only if asked |
IMPORTANT: Flag issues only when relevant to the user's question — avoid unsolicited critiques.
Challenge your solution against these 6 concerns:
Challenge: Does this fit where the codebase is heading, or does it fight the grain?
| Detection Signal | Response |
|---|---|
| Module X imports from module Y's internals; bypassed abstractions | Note deviation, assess if intentional or erosion |
| Same problem solved 3+ different ways across codebase | Identify the canonical pattern, flag divergences |
| Naming, file structure, or API style doesn't match established patterns | Reference project conventions, suggest alignment |
Challenge: Is this the right abstraction level? What might leak?
| Anti-Pattern | Symptom | Guidance |
|---|---|---|
| Leaky abstraction | Implementation details exposed in interface | Suggest encapsulation boundaries |
| Wrong abstraction | Forced inheritance, awkward generics | Recommend composition or simpler design |
| Premature abstraction | Generic solution for single use case | Advise "rule of three" before abstracting |
Challenge: What new dependencies does this introduce? Will they hurt later?
| Signal | Guidance |
|---|---|
| Module A knows too much about Module B's internals | Identify dependency direction, suggest inversion |
| Circular or bidirectional dependencies | Break cycle with interface/event pattern |
Challenge: Would a new team member understand this interface? Is naming consistent?
Surface problems to flag:
getUserById vs fetch_user vs user.get)Challenge: Is the solution complexity proportionate to the problem?
IMPORTANT: Calibrate feedback to problem scope — avoid applying enterprise patterns to scripts or MVP shortcuts to production systems.
Over-engineering signals:
Under-engineering signals:
Challenge: What existing conventions does this break? Is breaking them justified?
For each relevant concern:
| Risk Level | Action |
|---|---|
| No risk identified | Briefly note why in thinking |
| Risk exists with mitigation | Document the mitigation |
| Accepted tradeoff | Document explicitly in output |
| Serious flaw revealed | REVISE SOLUTION before proceeding |
| Complexity | Requirement |
|---|---|
| Simple | Use judgment — skip if concerns clearly don't apply |
| Moderate | Mandatory — document even if all clear |
| Complex | Mandatory — full table with explicit assessments |
### Accepted Tradeoffs
- **[Concern]**: [Why acceptable. Mitigation if any. Known limitations.]
_If no tradeoffs: "None — solution aligns with all design concerns evaluated."_