Loading...
Loading...
Compare original and translation side by side
Paths: File paths (,shared/,references/) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.../ln-*
路径: 文件路径(、shared/、references/)是相对于技能仓库根目录的相对路径。如果在当前工作目录下找不到,请定位到该SKILL.md文件所在目录,然后向上跳转一级即可到达仓库根目录。../ln-*
| Metric | Threshold | Penalty |
|---|---|---|
| Cyclomatic Complexity | ≤10 OK, 11-20 warning, >20 fail | -5 (warning), -10 (fail) per function |
| Function size | ≤50 lines OK, >50 warning | -3 per function |
| File size | ≤500 lines OK, >500 warning | -5 per file |
| Nesting depth | ≤3 OK, >3 warning | -3 per instance |
| Parameter count | ≤4 OK, >4 warning | -2 per function |
| 指标 | 阈值 | 罚分 |
|---|---|---|
| 圈复杂度(Cyclomatic Complexity) | ≤10 合格,11-20 警告,>20 不合格 | -5(警告),-10(不合格)每个函数 |
| 函数长度 | ≤50行 合格,>50行 警告 | -3 每个函数 |
| 文件长度 | ≤500行 合格,>500行 警告 | -5 每个文件 |
| 嵌套深度 | ≤3 合格,>3 警告 | -3 每个实例 |
| 参数数量 | ≤4 合格,>4 警告 | -2 每个函数 |
Code Quality Score = 100 - metric_penalties - issue_penalties| Severity | Penalty | Examples |
|---|---|---|
| high | -20 | Security vulnerability, O(n²)+ algorithm, N+1 query |
| medium | -10 | DRY violation, suboptimal approach, missing config |
| low | -3 | Naming convention, minor code smell |
| Score | Status | Verdict |
|---|---|---|
| 90-100 | Excellent | PASS |
| 70-89 | Acceptable | CONCERNS |
| <70 | Below threshold | ISSUES_FOUND |
Code Quality Score = 100 - metric_penalties - issue_penalties| 严重程度 | 罚分 | 示例 |
|---|---|---|
| 高 | -20 | 安全漏洞、时间复杂度≥O(n²)的算法、N+1查询 |
| 中 | -10 | 违反DRY原则、方案不够最优、缺少配置 |
| 低 | -3 | 命名规范问题、轻微代码异味 |
| 得分 | 状态 | 判定结果 |
|---|---|---|
| 90-100 | 优秀 | PASS |
| 70-89 | 可接受 | CONCERNS |
| <70 | 低于阈值 | ISSUES_FOUND |
| Prefix | Category | Default Severity | MCP Ref |
|---|---|---|---|
| SEC- | Security (auth, validation, secrets) | high | — |
| PERF- | Performance (algorithms, configs, bottlenecks) | medium/high | ✓ Required |
| MNT- | Maintainability (DRY, SOLID, complexity, dead code) | medium | — |
| ARCH- | Architecture (layers, boundaries, patterns, contracts) | medium | — |
| BP- | Best Practices (implementation differs from recommended) | medium | ✓ Required |
| OPT- | Optimality (better approach exists for this goal) | medium | ✓ Required |
| Prefix | Category | Severity |
|---|---|---|
| OPT-OSS- | Open-source replacement available (cross-ref ln-645 audit) | medium (high if >200 LOC) |
| Prefix | Category | Severity |
|---|---|---|
| ARCH-LB- | Layer Boundary: I/O outside infra, HTTP in domain | high |
| ARCH-TX- | Transaction Boundaries: commit() in 3+ layers, mixed UoW ownership | high (CRITICAL if auth/payment) |
| ARCH-DTO- | Missing DTO (4+ params without DTO), Entity Leakage (ORM entity in API response) | medium (high if auth/payment) |
| ARCH-DI- | Dependency Injection: direct instantiation in business logic, mixed DI+imports | medium |
| ARCH-CEH- | Centralized Error Handling: no global handler, stack traces in prod, uncaughtException | medium (high if no handler at all) |
| ARCH-SES- | Session Ownership: DI session + local session in same module | medium |
| Prefix | Category | Severity |
|---|---|---|
| PERF-ALG- | Algorithm complexity (Big O) | high if O(n²)+ |
| PERF-CFG- | Package/library configuration | medium |
| PERF-PTN- | Architectural pattern performance | high |
| PERF-DB- | Database queries, indexes | high |
| Prefix | Category | Severity |
|---|---|---|
| MNT-DC- | Dead code: replaced implementations, unused exports/re-exports, backward-compat wrappers, deprecated aliases | medium (high if public API) |
| MNT-DRY- | DRY violations: duplicate logic across files | medium |
| MNT-GOD- | God Classes: class with >15 methods or >500 lines (not just file size) | medium (high if >1000 lines) |
| MNT-SIG- | Method Signature Quality: boolean flag params, unclear return types, inconsistent naming, >5 optional params | low |
| MNT-ERR- | Error Contract inconsistency: mixed raise + return None in same service | medium |
| 前缀 | 分类 | 默认严重程度 | 需MCP参考 |
|---|---|---|---|
| SEC- | 安全(认证、校验、密钥) | 高 | — |
| PERF- | 性能(算法、配置、瓶颈) | 中/高 | ✓ 必须 |
| MNT- | 可维护性(DRY、SOLID、复杂度、死代码) | 中 | — |
| ARCH- | 架构(分层、边界、模式、契约) | 中 | — |
| BP- | 最佳实践(实现与推荐方案不符) | 中 | ✓ 必须 |
| OPT- | 最优性(存在更适配目标的方案) | 中 | ✓ 必须 |
| 前缀 | 分类 | 严重程度 |
|---|---|---|
| OPT-OSS- | 存在可替换的开源方案(交叉参考ln-645审计报告) | 中(代码行数>200则为高) |
| 前缀 | 分类 | 严重程度 |
|---|---|---|
| ARCH-LB- | 分层边界:基础设施层外出现I/O操作、领域层内出现HTTP请求 | 高 |
| ARCH-TX- | 事务边界:3个以上层级存在commit()调用、工作单元所有权混乱 | 高(涉及认证/支付则为严重) |
| ARCH-DTO- | 缺少DTO(4个以上参数未封装为DTO)、实体泄漏(API响应中返回ORM实体) | 中(涉及认证/支付则为高) |
| ARCH-DI- | 依赖注入:业务逻辑中直接实例化对象、混合使用DI和直接导入两种模式 | 中 |
| ARCH-CEH- | 集中式错误处理:无全局错误处理器、生产环境返回堆栈追踪、存在未捕获的异常 | 中(完全没有处理器则为高) |
| ARCH-SES- | 会话所有权:同一模块中同时存在DI注入的会话和本地会话 | 中 |
| 前缀 | 分类 | 严重程度 |
|---|---|---|
| PERF-ALG- | 算法复杂度(大O表示法) | 复杂度≥O(n²)则为高 |
| PERF-CFG- | 包/库配置 | 中 |
| PERF-PTN- | 架构模式性能 | 高 |
| PERF-DB- | 数据库查询、索引 | 高 |
| 前缀 | 分类 | 严重程度 |
|---|---|---|
| MNT-DC- | 死代码:被替换的实现、未使用的导出/重导出、向后兼容包装器、已废弃的别名 | 中(属于公共API则为高) |
| MNT-DRY- | 违反DRY原则:跨文件存在重复逻辑 | 中 |
| MNT-GOD- | 上帝类:类包含超过15个方法或者超过500行代码(不只是文件长度) | 中(超过1000行则为高) |
| MNT-SIG- | 方法签名质量:布尔标记参数、返回类型不明确、命名不一致、超过5个可选参数 | 低 |
| MNT-ERR- | 错误契约不一致:同一服务中混合使用抛出异常和返回None两种模式 | 中 |
--skip-mcp-refFast-track mode: When invoked with, skip this entire step (no OPT-, BP-, PERF- checks). Proceed directly to step 5 (static analysis). This reduces cost from ~5000 to ~800 tokens while preserving metrics + static analysis coverage.--skip-mcp-ref
ref_search_documentation("{goal} approaches comparison {tech_stack} 2026")ref_search_documentation("{chosen_approach} best practices {tech_stack} 2026")query-docs(library_id, "best practices implementation patterns")query-docsref_search_documentation("{pattern} performance bottlenecks")query-docs(orm_library_id, "query optimization")shared/references/clean_code_checklist.mdcatch.*Error|handleErrorvalidate|isValidgetSettings|getConfigsrc/Pattern X duplicated in N files — extract to shared module.exportsrc/{export} in {file} exported but never imported — remove or mark internal.docs/project/.audit/645-open-source-replacer*.md--skip-mcp-ref--skip-mcp-ref快速模式: 当调用时传入参数时,跳过整个步骤(不执行OPT-、BP-、PERF-检查),直接进入第5步(静态分析)。这会将token消耗从约5000降低到约800,同时保留指标计算和静态分析覆盖。--skip-mcp-ref
ref_search_documentation("{goal} approaches comparison {tech_stack} 2026")ref_search_documentation("{chosen_approach} best practices {tech_stack} 2026")query-docs(library_id, "best practices implementation patterns")query-docsref_search_documentation("{pattern} performance bottlenecks")query-docs(orm_library_id, "query optimization")shared/references/clean_code_checklist.mdsrc/catch.*Error|handleErrorvalidate|isValidgetSettings|getConfigPattern X duplicated in N files — extract to shared module.exportsrc/{export} in {file} exported but never imported — remove or mark internal.docs/project/.audit/645-open-source-replacer*.md--skip-mcp-refverdict: PASS | CONCERNS | ISSUES_FOUND
code_quality_score: {0-100}
metrics:
avg_cyclomatic_complexity: {value}
functions_over_50_lines: {count}
files_over_500_lines: {count}
issues:
# OPTIMALITY
- id: "OPT-001"
severity: medium
file: "src/auth/index.ts"
goal: "User session management"
finding: "Suboptimal approach for session management"
chosen: "Custom JWT with localStorage"
recommended: "httpOnly cookies + refresh token rotation"
reason: "httpOnly cookies prevent XSS token theft"
source: "ref://owasp-session-management"
# OPTIMALITY - OSS Replacement (from ln-645, fast-track safe)
- id: "OPT-OSS-001"
severity: high
file: "src/utils/email-validator.ts"
goal: "Email validation with MX checking"
finding: "Custom 245-line module has HIGH-confidence OSS replacement"
chosen: "Custom email-validator.ts (245 lines)"
recommended: "zod + zod-email (28k stars, MIT, 95% coverage)"
reason: "Battle-tested, actively maintained, reduces maintenance burden"
source: "ln-645-audit"
# BEST PRACTICES
- id: "BP-001"
severity: medium
file: "src/api/routes.ts"
finding: "POST for idempotent operation"
best_practice: "Use PUT for idempotent updates (RFC 7231)"
source: "ref://api-design-guide#idempotency"
# PERFORMANCE - Algorithm
- id: "PERF-ALG-001"
severity: high
file: "src/utils/search.ts:42"
finding: "Nested loops cause O(n²) complexity"
current: "O(n²) - nested filter().find()"
optimal: "O(n) - use Map/Set for lookup"
source: "ref://javascript-performance#data-structures"
# PERFORMANCE - Config
- id: "PERF-CFG-001"
severity: medium
file: "src/db/connection.ts"
finding: "Missing connection pool config"
current_config: "default (pool: undefined)"
recommended: "pool: { min: 2, max: 10 }"
source: "context7://pg#connection-pooling"
# PERFORMANCE - Database
- id: "PERF-DB-001"
severity: high
file: "src/repositories/user.ts:89"
finding: "N+1 query pattern detected"
issue: "users.map(u => u.posts) triggers N queries"
solution: "Use eager loading: include: { posts: true }"
source: "context7://prisma#eager-loading"
# ARCHITECTURE - Entity Leakage
- id: "ARCH-DTO-001"
severity: high
file: "src/api/users.ts:35"
finding: "ORM entity returned directly from API endpoint"
issue: "User entity with password hash exposed in GET /users response"
fix: "Create UserResponseDTO, map entity → DTO before return"
# ARCHITECTURE - Centralized Error Handling
- id: "ARCH-CEH-001"
severity: medium
file: "src/app.ts"
finding: "No global error handler registered"
issue: "Unhandled exceptions return stack traces to client in production"
fix: "Add app.use(globalErrorHandler) with sanitized error responses"
# MAINTAINABILITY - God Class
- id: "MNT-GOD-001"
severity: medium
file: "src/services/order-service.ts"
finding: "God class with 22 methods and 680 lines"
issue: "OrderService handles creation, payment, shipping, notifications"
fix: "Extract PaymentService, ShippingService, NotificationService"
# MAINTAINABILITY - Dead Code
- id: "MNT-DC-001"
severity: medium
file: "src/auth/legacy-adapter.ts"
finding: "Backward-compatibility wrapper kept after migration"
dead_code: "legacyLogin() wraps newLogin() — callers already migrated"
action: "Delete legacy-adapter.ts, remove re-export from index.ts"
# MAINTAINABILITY - DRY
- id: "MNT-DRY-001"
severity: medium
file: "src/service.ts:42"
finding: "DRY violation: duplicate validation logic"
suggested_action: "Extract to shared validator"verdict: PASS | CONCERNS | ISSUES_FOUND
code_quality_score: {0-100}
metrics:
avg_cyclomatic_complexity: {value}
functions_over_50_lines: {count}
files_over_500_lines: {count}
issues:
# OPTIMALITY
- id: "OPT-001"
severity: medium
file: "src/auth/index.ts"
goal: "User session management"
finding: "Suboptimal approach for session management"
chosen: "Custom JWT with localStorage"
recommended: "httpOnly cookies + refresh token rotation"
reason: "httpOnly cookies prevent XSS token theft"
source: "ref://owasp-session-management"
# OPTIMALITY - OSS Replacement (from ln-645, fast-track safe)
- id: "OPT-OSS-001"
severity: high
file: "src/utils/email-validator.ts"
goal: "Email validation with MX checking"
finding: "Custom 245-line module has HIGH-confidence OSS replacement"
chosen: "Custom email-validator.ts (245 lines)"
recommended: "zod + zod-email (28k stars, MIT, 95% coverage)"
reason: "Battle-tested, actively maintained, reduces maintenance burden"
source: "ln-645-audit"
# BEST PRACTICES
- id: "BP-001"
severity: medium
file: "src/api/routes.ts"
finding: "POST for idempotent operation"
best_practice: "Use PUT for idempotent updates (RFC 7231)"
source: "ref://api-design-guide#idempotency"
# PERFORMANCE - Algorithm
- id: "PERF-ALG-001"
severity: high
file: "src/utils/search.ts:42"
finding: "Nested loops cause O(n²) complexity"
current: "O(n²) - nested filter().find()"
optimal: "O(n) - use Map/Set for lookup"
source: "ref://javascript-performance#data-structures"
# PERFORMANCE - Config
- id: "PERF-CFG-001"
severity: medium
file: "src/db/connection.ts"
finding: "Missing connection pool config"
current_config: "default (pool: undefined)"
recommended: "pool: { min: 2, max: 10 }"
source: "context7://pg#connection-pooling"
# PERFORMANCE - Database
- id: "PERF-DB-001"
severity: high
file: "src/repositories/user.ts:89"
finding: "N+1 query pattern detected"
issue: "users.map(u => u.posts) triggers N queries"
solution: "Use eager loading: include: { posts: true }"
source: "context7://prisma#eager-loading"
# ARCHITECTURE - Entity Leakage
- id: "ARCH-DTO-001"
severity: high
file: "src/api/users.ts:35"
finding: "ORM entity returned directly from API endpoint"
issue: "User entity with password hash exposed in GET /users response"
fix: "Create UserResponseDTO, map entity → DTO before return"
# ARCHITECTURE - Centralized Error Handling
- id: "ARCH-CEH-001"
severity: medium
file: "src/app.ts"
finding: "No global error handler registered"
issue: "Unhandled exceptions return stack traces to client in production"
fix: "Add app.use(globalErrorHandler) with sanitized error responses"
# MAINTAINABILITY - God Class
- id: "MNT-GOD-001"
severity: medium
file: "src/services/order-service.ts"
finding: "God class with 22 methods and 680 lines"
issue: "OrderService handles creation, payment, shipping, notifications"
fix: "Extract PaymentService, ShippingService, NotificationService"
# MAINTAINABILITY - Dead Code
- id: "MNT-DC-001"
severity: medium
file: "src/auth/legacy-adapter.ts"
finding: "Backward-compatibility wrapper kept after migration"
dead_code: "legacyLogin() wraps newLogin() — callers already migrated"
action: "Delete legacy-adapter.ts, remove re-export from index.ts"
# MAINTAINABILITY - DRY
- id: "MNT-DRY-001"
severity: medium
file: "src/service.ts:42"
finding: "DRY violation: duplicate validation logic"
suggested_action: "Extract to shared validator"references/code_metrics.mddocs/guides/shared/templates/task_template_implementation.mdshared/references/clean_code_checklist.mdreferences/code_metrics.mddocs/guides/shared/templates/task_template_implementation.mdshared/references/clean_code_checklist.md