@tinkcarlos/skillora 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/.temp-skill-index.md +245 -0
- package/.claude/skills/SKILL.md +264 -0
- package/.claude/skills/api-scaffolding/SKILL.md +431 -0
- package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
- package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
- package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
- package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
- package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
- package/.claude/skills/api-testing-observability/SKILL.md +583 -0
- package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
- package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
- package/.claude/skills/brainstorming/SKILL.md +283 -0
- package/.claude/skills/bug-fixing/SKILL.md +382 -0
- package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
- package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
- package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
- package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
- package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
- package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
- package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
- package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
- package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
- package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
- package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
- package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
- package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
- package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
- package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
- package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
- package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
- package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
- package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
- package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
- package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
- package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
- package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
- package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
- package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
- package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
- package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
- package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
- package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
- package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
- package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
- package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
- package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
- package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
- package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
- package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
- package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
- package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
- package/.claude/skills/code-review/SKILL.md +535 -0
- package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
- package/.claude/skills/code-review/references/automated-analysis.md +456 -0
- package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
- package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
- package/.claude/skills/code-review/references/backend-review.md +868 -0
- package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
- package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
- package/.claude/skills/code-review/references/common-patterns.md +321 -0
- package/.claude/skills/code-review/references/configuration-review.md +425 -0
- package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
- package/.claude/skills/code-review/references/database-review.md +298 -0
- package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
- package/.claude/skills/code-review/references/external-standards.md +51 -0
- package/.claude/skills/code-review/references/feature-review.md +329 -0
- package/.claude/skills/code-review/references/file-review-template.md +326 -0
- package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
- package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
- package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
- package/.claude/skills/code-review/references/frontend-review.md +783 -0
- package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
- package/.claude/skills/code-review/references/fullstack-review.md +477 -0
- package/.claude/skills/code-review/references/functional-completeness.md +386 -0
- package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
- package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
- package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
- package/.claude/skills/code-review/references/iteration-review.md +264 -0
- package/.claude/skills/code-review/references/job-review.md +335 -0
- package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
- package/.claude/skills/code-review/references/logic-completeness.md +535 -0
- package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
- package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
- package/.claude/skills/code-review/references/new-project-review.md +226 -0
- package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
- package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
- package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
- package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
- package/.claude/skills/code-review/references/python-patterns.md +494 -0
- package/.claude/skills/code-review/references/rca-techniques.md +362 -0
- package/.claude/skills/code-review/references/report-template.md +430 -0
- package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
- package/.claude/skills/code-review/references/review-dimensions.md +311 -0
- package/.claude/skills/code-review/references/review-guide.md +202 -0
- package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
- package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
- package/.claude/skills/code-review/references/review-record-template.md +195 -0
- package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
- package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
- package/.claude/skills/containerization/SKILL.md +313 -0
- package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
- package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
- package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
- package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
- package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
- package/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/.claude/skills/frontend-design/SKILL.md +587 -0
- package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
- package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
- package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
- package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
- package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
- package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
- package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
- package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
- package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
- package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
- package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
- package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
- package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
- package/.claude/skills/fullstack-developer/SKILL.md +512 -0
- package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
- package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
- package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
- package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
- package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
- package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
- package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
- package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
- package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
- package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
- package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
- package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
- package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
- package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
- package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
- package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
- package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
- package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
- package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
- package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
- package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
- package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
- package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
- package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
- package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
- package/.claude/skills/performance-optimization/SKILL.md +250 -0
- package/.claude/skills/product-requirements/SKILL.md +357 -0
- package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
- package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
- package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
- package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
- package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
- package/.claude/skills/product-requirements/references/external-standards.md +62 -0
- package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
- package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
- package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
- package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
- package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
- package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
- package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
- package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
- package/.claude/skills/react-best-practices/SKILL.md +198 -0
- package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
- package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
- package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
- package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
- package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
- package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
- package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
- package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
- package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
- package/.claude/skills/security-audit/SKILL.md +226 -0
- package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
- package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
- package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
- package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
- package/.claude/skills/shared-references/skill-call-graph.md +230 -0
- package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
- package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
- package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
- package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
- package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
- package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
- package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
- package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
- package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
- package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
- package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
- package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
- package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
- package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
- package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
- package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
- package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
- package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
- package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
- package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
- package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
- package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
- package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
- package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
- package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
- package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
- package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
- package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
- package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
- package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
- package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
- package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
- package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
- package/.claude/skills/test-driven-development/SKILL.md +246 -0
- package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
- package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
- package/.claude/skills/using-skillstack/SKILL.md +127 -0
- package/.claude/skills/vercel-deploy/SKILL.md +166 -0
- package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
- package/.claude/skills/verification-before-completion/SKILL.md +305 -0
- package/.claude/skills/writing-plans/SKILL.md +259 -0
- package/README.md +69 -0
- package/bin/cli.js +468 -0
- package/lib/init.js +333 -0
- package/package.json +29 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# New Feature Review Guide
|
|
2
|
+
|
|
3
|
+
> Review focus for "point injection": isolated impact, zero risk to existing functionality.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
New features are like adding a flower to an established garden. Review with focus on isolation, minimal coupling, and safe rollout.
|
|
8
|
+
|
|
9
|
+
**Target Bug Rate**: ~0% (achievable through isolation and testing)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Critical Review Areas
|
|
14
|
+
|
|
15
|
+
### 1. Scope Isolation
|
|
16
|
+
|
|
17
|
+
| Check | What to Verify | Red Flags |
|
|
18
|
+
|-------|----------------|-----------|
|
|
19
|
+
| **Feature boundary** | Clear entry/exit points | Touches many unrelated files |
|
|
20
|
+
| **State isolation** | Own state, minimal global | Modifies shared global state |
|
|
21
|
+
| **Dependencies** | Minimal, explicit | Many implicit dependencies |
|
|
22
|
+
| **Side effects** | Contained, reversible | Irreversible side effects |
|
|
23
|
+
|
|
24
|
+
### 2. Feature Flag Integration
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
## Feature Flag Checklist
|
|
28
|
+
|
|
29
|
+
### Implementation
|
|
30
|
+
- [ ] Feature wrapped in flag check
|
|
31
|
+
- [ ] Default is OFF (safe)
|
|
32
|
+
- [ ] Flag can be toggled without deploy
|
|
33
|
+
- [ ] Flag cleanup planned
|
|
34
|
+
|
|
35
|
+
### Rollout Plan
|
|
36
|
+
- [ ] Internal testing (1%)
|
|
37
|
+
- [ ] Beta users (10%)
|
|
38
|
+
- [ ] Gradual rollout (25% → 50% → 100%)
|
|
39
|
+
- [ ] Rollback criteria defined
|
|
40
|
+
|
|
41
|
+
### Monitoring
|
|
42
|
+
- [ ] Feature-specific metrics
|
|
43
|
+
- [ ] Error tracking per flag state
|
|
44
|
+
- [ ] Performance comparison (on vs off)
|
|
45
|
+
- [ ] User feedback collection
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. Contract Compliance
|
|
49
|
+
|
|
50
|
+
| Aspect | Verification Method | Common Issues |
|
|
51
|
+
|--------|---------------------|---------------|
|
|
52
|
+
| **API Schema** | Compare with OpenAPI spec | Field name mismatches |
|
|
53
|
+
| **Data Types** | Type checking (TypeScript) | Wrong types, missing nulls |
|
|
54
|
+
| **Error Codes** | Documented error responses | Undocumented errors |
|
|
55
|
+
| **Validation** | Input constraints match | Frontend/backend differ |
|
|
56
|
+
|
|
57
|
+
### 4. Edge Case Coverage
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
## Edge Case Checklist
|
|
61
|
+
|
|
62
|
+
### Input Boundaries
|
|
63
|
+
- [ ] Empty/null inputs handled
|
|
64
|
+
- [ ] Maximum length inputs
|
|
65
|
+
- [ ] Special characters (unicode, emoji)
|
|
66
|
+
- [ ] Invalid format inputs
|
|
67
|
+
|
|
68
|
+
### State Variations
|
|
69
|
+
- [ ] First-time user
|
|
70
|
+
- [ ] Returning user with data
|
|
71
|
+
- [ ] User with no permissions
|
|
72
|
+
- [ ] Admin user
|
|
73
|
+
|
|
74
|
+
### Error Conditions
|
|
75
|
+
- [ ] Network failure
|
|
76
|
+
- [ ] Timeout
|
|
77
|
+
- [ ] 4xx errors (validation, auth)
|
|
78
|
+
- [ ] 5xx errors (server)
|
|
79
|
+
|
|
80
|
+
### Concurrent Scenarios
|
|
81
|
+
- [ ] Multiple users same resource
|
|
82
|
+
- [ ] User with multiple tabs
|
|
83
|
+
- [ ] Race conditions
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Feature Development Workflow Review
|
|
89
|
+
|
|
90
|
+
### 1. Requirements Clarity
|
|
91
|
+
|
|
92
|
+
| Question | Answer Required | Red Flag |
|
|
93
|
+
|----------|-----------------|----------|
|
|
94
|
+
| What does it do? | Clear user story | Vague description |
|
|
95
|
+
| Who uses it? | Defined user persona | "Everyone" |
|
|
96
|
+
| Success criteria? | Measurable metric | No success definition |
|
|
97
|
+
| Edge cases? | Documented | "We'll handle later" |
|
|
98
|
+
|
|
99
|
+
### 2. Design Review
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
## Feature Design Review
|
|
103
|
+
|
|
104
|
+
### UI/UX (Frontend)
|
|
105
|
+
- [ ] Design matches specification
|
|
106
|
+
- [ ] All states designed (loading, error, empty, success)
|
|
107
|
+
- [ ] Responsive design verified
|
|
108
|
+
- [ ] Accessibility considered
|
|
109
|
+
- [ ] Animation/interaction smooth
|
|
110
|
+
|
|
111
|
+
### API Design (Backend)
|
|
112
|
+
- [ ] RESTful/consistent with existing
|
|
113
|
+
- [ ] Proper HTTP methods and codes
|
|
114
|
+
- [ ] Request/response documented
|
|
115
|
+
- [ ] Error responses defined
|
|
116
|
+
- [ ] Rate limiting considered
|
|
117
|
+
|
|
118
|
+
### Data Design
|
|
119
|
+
- [ ] Schema changes minimal
|
|
120
|
+
- [ ] Indexes planned
|
|
121
|
+
- [ ] Migration reversible
|
|
122
|
+
- [ ] Data access patterns optimized
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 3. Implementation Review
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
## Feature Implementation Review
|
|
129
|
+
|
|
130
|
+
### Code Quality
|
|
131
|
+
- [ ] Follows existing patterns
|
|
132
|
+
- [ ] DRY (no duplication)
|
|
133
|
+
- [ ] SOLID principles applied
|
|
134
|
+
- [ ] Type-safe (TypeScript/types)
|
|
135
|
+
|
|
136
|
+
### Testing
|
|
137
|
+
- [ ] Unit tests for logic
|
|
138
|
+
- [ ] Integration tests for API
|
|
139
|
+
- [ ] E2E tests for user flow
|
|
140
|
+
- [ ] Edge cases covered
|
|
141
|
+
- [ ] 100% coverage for new code
|
|
142
|
+
|
|
143
|
+
### Performance
|
|
144
|
+
- [ ] No N+1 queries
|
|
145
|
+
- [ ] Lazy loading where appropriate
|
|
146
|
+
- [ ] Bundle impact measured
|
|
147
|
+
- [ ] Memory usage checked
|
|
148
|
+
|
|
149
|
+
### Security
|
|
150
|
+
- [ ] Input validation
|
|
151
|
+
- [ ] Authorization checks
|
|
152
|
+
- [ ] No sensitive data exposed
|
|
153
|
+
- [ ] Audit logging for sensitive actions
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Common Feature Review Issues
|
|
159
|
+
|
|
160
|
+
### Scope Creep
|
|
161
|
+
|
|
162
|
+
| Sign | Impact | Action |
|
|
163
|
+
|------|--------|--------|
|
|
164
|
+
| PR keeps growing | Delayed delivery | Cut scope, create follow-up tickets |
|
|
165
|
+
| "While we're here..." changes | Increased risk | Separate PRs |
|
|
166
|
+
| Unrelated refactoring | Review fatigue | Block, request split |
|
|
167
|
+
|
|
168
|
+
### Integration Problems
|
|
169
|
+
|
|
170
|
+
| Problem | Detection | Prevention |
|
|
171
|
+
|---------|-----------|------------|
|
|
172
|
+
| API mismatch | Integration test fails | Contract testing (Pact) |
|
|
173
|
+
| Missing error handling | Runtime errors | Define all error states upfront |
|
|
174
|
+
| State conflicts | UI bugs | State isolation review |
|
|
175
|
+
| Performance impact | Slow pages | Performance budget |
|
|
176
|
+
|
|
177
|
+
### A/B Testing Issues
|
|
178
|
+
|
|
179
|
+
| Issue | Impact | Solution |
|
|
180
|
+
|-------|--------|----------|
|
|
181
|
+
| No metrics | Can't measure success | Instrument before merge |
|
|
182
|
+
| Flicker effect | Poor UX | Server-side flags |
|
|
183
|
+
| Inconsistent state | Bugs | Clean flag boundaries |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Feature Isolation Patterns
|
|
188
|
+
|
|
189
|
+
### Frontend Component Isolation
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
// 🔴 BAD: Feature modifies global state
|
|
193
|
+
function NewFeature() {
|
|
194
|
+
const globalState = useGlobalStore();
|
|
195
|
+
globalState.someUnrelatedThing = 'modified'; // Side effect!
|
|
196
|
+
return <div>...</div>;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ✅ GOOD: Feature with isolated state
|
|
200
|
+
function NewFeature() {
|
|
201
|
+
const [localState, setLocalState] = useState(null);
|
|
202
|
+
|
|
203
|
+
// Only reads from global, doesn't modify
|
|
204
|
+
const userId = useGlobalStore(s => s.userId);
|
|
205
|
+
|
|
206
|
+
return <div>...</div>;
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Backend Service Isolation
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
# 🔴 BAD: Feature modifies shared service
|
|
214
|
+
class NewFeatureService:
|
|
215
|
+
def process(self, data):
|
|
216
|
+
# Modifies shared service state
|
|
217
|
+
shared_service.config = self.new_config
|
|
218
|
+
return shared_service.execute(data)
|
|
219
|
+
|
|
220
|
+
# ✅ GOOD: Feature with explicit dependencies
|
|
221
|
+
class NewFeatureService:
|
|
222
|
+
def __init__(self, config: NewFeatureConfig):
|
|
223
|
+
self.config = config
|
|
224
|
+
|
|
225
|
+
def process(self, data, shared_service: SharedService):
|
|
226
|
+
# Uses shared service with local config
|
|
227
|
+
return shared_service.execute(data, config=self.config)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Feature Flag Pattern
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
// Feature flag wrapper
|
|
234
|
+
function FeatureGate({ flag, children, fallback = null }) {
|
|
235
|
+
const isEnabled = useFeatureFlag(flag);
|
|
236
|
+
|
|
237
|
+
if (!isEnabled) {
|
|
238
|
+
return fallback;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return (
|
|
242
|
+
<ErrorBoundary fallback={<FeatureError />}>
|
|
243
|
+
{children}
|
|
244
|
+
</ErrorBoundary>
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Usage
|
|
249
|
+
function App() {
|
|
250
|
+
return (
|
|
251
|
+
<FeatureGate flag="new-checkout-flow" fallback={<OldCheckout />}>
|
|
252
|
+
<NewCheckout />
|
|
253
|
+
</FeatureGate>
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Feature Review Template
|
|
261
|
+
|
|
262
|
+
```markdown
|
|
263
|
+
# New Feature Review
|
|
264
|
+
|
|
265
|
+
## Feature Info
|
|
266
|
+
- **Feature Name**:
|
|
267
|
+
- **JIRA/Ticket**:
|
|
268
|
+
- **Author**:
|
|
269
|
+
- **Reviewer**:
|
|
270
|
+
|
|
271
|
+
## Scope Assessment
|
|
272
|
+
|
|
273
|
+
### Files Changed
|
|
274
|
+
| File | Type | Risk |
|
|
275
|
+
|------|------|------|
|
|
276
|
+
| | New/Modified | Low/Medium/High |
|
|
277
|
+
|
|
278
|
+
### Dependencies
|
|
279
|
+
- **Adds**:
|
|
280
|
+
- **Modifies**:
|
|
281
|
+
- **None**: ✅
|
|
282
|
+
|
|
283
|
+
## Checklist
|
|
284
|
+
|
|
285
|
+
### Isolation
|
|
286
|
+
- [ ] Feature flag implemented
|
|
287
|
+
- [ ] No global state mutations
|
|
288
|
+
- [ ] Rollback safe
|
|
289
|
+
- [ ] Independent of other in-flight features
|
|
290
|
+
|
|
291
|
+
### Quality
|
|
292
|
+
- [ ] Type-safe
|
|
293
|
+
- [ ] Follows patterns
|
|
294
|
+
- [ ] DRY
|
|
295
|
+
- [ ] Documented
|
|
296
|
+
|
|
297
|
+
### Testing
|
|
298
|
+
- [ ] Unit tests
|
|
299
|
+
- [ ] Integration tests
|
|
300
|
+
- [ ] Edge cases
|
|
301
|
+
- [ ] 100% new code coverage
|
|
302
|
+
|
|
303
|
+
### Contract
|
|
304
|
+
- [ ] API matches spec
|
|
305
|
+
- [ ] Error handling complete
|
|
306
|
+
- [ ] Validation correct
|
|
307
|
+
|
|
308
|
+
## Findings
|
|
309
|
+
|
|
310
|
+
### 🔴 Blockers
|
|
311
|
+
-
|
|
312
|
+
|
|
313
|
+
### 🟠 Should Fix
|
|
314
|
+
-
|
|
315
|
+
|
|
316
|
+
### 🟡 Suggestions
|
|
317
|
+
-
|
|
318
|
+
|
|
319
|
+
## Verdict
|
|
320
|
+
- [ ] APPROVED
|
|
321
|
+
- [ ] APPROVED with minor changes
|
|
322
|
+
- [ ] CHANGES REQUESTED
|
|
323
|
+
|
|
324
|
+
## Rollout Recommendation
|
|
325
|
+
- [ ] Safe for immediate 100% rollout
|
|
326
|
+
- [ ] Gradual rollout recommended
|
|
327
|
+
- [ ] Internal testing first
|
|
328
|
+
```
|
|
329
|
+
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# File Review Template
|
|
2
|
+
|
|
3
|
+
Use this template for EVERY file in the review. Do not skip any section.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## File: `[path/to/file.ts]`
|
|
8
|
+
|
|
9
|
+
### Metadata
|
|
10
|
+
|
|
11
|
+
| Property | Value |
|
|
12
|
+
|----------|-------|
|
|
13
|
+
| **Full Path** | |
|
|
14
|
+
| **File Type** | Service / Component / Hook / Utility / Type / Test / Config |
|
|
15
|
+
| **Language** | TypeScript / JavaScript / Python / CSS / Other |
|
|
16
|
+
| **Lines Total** | |
|
|
17
|
+
| **Lines Changed** | +X / -Y |
|
|
18
|
+
| **Last Modified** | |
|
|
19
|
+
|
|
20
|
+
### Change Summary
|
|
21
|
+
|
|
22
|
+
```diff
|
|
23
|
+
// Show the diff or summary of changes
|
|
24
|
+
+ Added lines
|
|
25
|
+
- Removed lines
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Section-by-Section Analysis
|
|
31
|
+
|
|
32
|
+
### Imports / Dependencies (Lines X-Y)
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Paste ALL imports
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
| Line | Import | Used? | Issue | Action |
|
|
39
|
+
|------|--------|-------|-------|--------|
|
|
40
|
+
| 1 | `react` | ✅ | - | - |
|
|
41
|
+
| 2 | `lodash` | ⚠️ Partial | Only `get` used | Cherry-pick |
|
|
42
|
+
| 3 | `./utils` | ❌ No | Unused import | Remove |
|
|
43
|
+
|
|
44
|
+
**Import Summary**:
|
|
45
|
+
- Total imports: X
|
|
46
|
+
- Unused imports: X
|
|
47
|
+
- Heavy imports (could be lighter): X
|
|
48
|
+
- Circular dependency risk: Yes/No
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Type Definitions (Lines X-Y)
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// Paste ALL type/interface definitions
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
| Type | Purpose | Issues | Suggestions |
|
|
59
|
+
|------|---------|--------|-------------|
|
|
60
|
+
| `UserInput` | Form input type | Missing validation | Add Zod schema |
|
|
61
|
+
| `ApiResponse` | API return type | Too generic | Be more specific |
|
|
62
|
+
|
|
63
|
+
**Type Analysis**:
|
|
64
|
+
- [ ] All types properly exported
|
|
65
|
+
- [ ] No `any` types
|
|
66
|
+
- [ ] Proper optionality (`?` vs `| undefined`)
|
|
67
|
+
- [ ] Readonly where appropriate
|
|
68
|
+
- [ ] Consistent naming convention
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### Constants / Configuration (Lines X-Y)
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Paste constants
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
| Constant | Value | Issue | Suggestion |
|
|
79
|
+
|----------|-------|-------|------------|
|
|
80
|
+
| `MAX_RETRIES` | 3 | ✅ OK | - |
|
|
81
|
+
| `API_URL` | `"https://..."` | 🔴 Hardcoded | Use env variable |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### Function: `functionName()` (Lines X-Y)
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// Paste COMPLETE function
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### Function Signature Analysis
|
|
92
|
+
|
|
93
|
+
| Aspect | Current | Issue | Recommendation |
|
|
94
|
+
|--------|---------|-------|----------------|
|
|
95
|
+
| Name | `handleData` | Vague | `processUserRegistration` |
|
|
96
|
+
| Parameters | `(data: any)` | No type | `(data: RegistrationData)` |
|
|
97
|
+
| Return Type | Implicit | Missing | Add explicit return type |
|
|
98
|
+
| Async | Yes | - | - |
|
|
99
|
+
|
|
100
|
+
#### Line-by-Line Code Analysis
|
|
101
|
+
|
|
102
|
+
| Line | Code Snippet | Analysis |
|
|
103
|
+
|------|--------------|----------|
|
|
104
|
+
| 45 | `const user = data.user` | ⚠️ No null check |
|
|
105
|
+
| 46 | `if (user.active)` | ⚠️ Could throw if user null |
|
|
106
|
+
| 47 | `await db.save(user)` | ✅ Properly awaited |
|
|
107
|
+
| 48 | `logger.info('saved')` | ⚠️ No context in log |
|
|
108
|
+
| 49 | `return user` | ⚠️ Returns mutable object |
|
|
109
|
+
|
|
110
|
+
#### Control Flow Analysis
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Entry
|
|
114
|
+
↓
|
|
115
|
+
Check: data exists? ──No──→ [Missing!]
|
|
116
|
+
↓ Yes
|
|
117
|
+
Check: user valid? ──No──→ [Missing!]
|
|
118
|
+
↓ Yes
|
|
119
|
+
Save to DB ──Error──→ [Caught?]
|
|
120
|
+
↓ Success
|
|
121
|
+
Return
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Issues**:
|
|
125
|
+
- No validation at entry
|
|
126
|
+
- No error handling
|
|
127
|
+
- No null checks
|
|
128
|
+
|
|
129
|
+
#### Edge Case Analysis
|
|
130
|
+
|
|
131
|
+
| Input | Expected Behavior | Actual Behavior | Status |
|
|
132
|
+
|-------|-------------------|-----------------|--------|
|
|
133
|
+
| `null` | Throw error | Crashes | 🔴 |
|
|
134
|
+
| `{}` | Throw error | Undefined behavior | 🔴 |
|
|
135
|
+
| `{user: null}` | Throw error | Crashes | 🔴 |
|
|
136
|
+
| Valid data | Process successfully | ✅ Works | ✅ |
|
|
137
|
+
|
|
138
|
+
#### Security Analysis
|
|
139
|
+
|
|
140
|
+
| Check | Status | Line | Notes |
|
|
141
|
+
|-------|--------|------|-------|
|
|
142
|
+
| Input validation | ❌ Missing | 45 | Add Zod/Yup validation |
|
|
143
|
+
| SQL injection | ✅ OK | 47 | ORM parameterizes |
|
|
144
|
+
| XSS | N/A | - | Not rendering HTML |
|
|
145
|
+
| Auth check | ❌ Missing | - | Add permission check |
|
|
146
|
+
|
|
147
|
+
#### Performance Analysis
|
|
148
|
+
|
|
149
|
+
| Aspect | Status | Notes |
|
|
150
|
+
|--------|--------|-------|
|
|
151
|
+
| Time complexity | O(1) | Single DB operation |
|
|
152
|
+
| DB queries | 1 | ✅ OK |
|
|
153
|
+
| Memory | ✅ OK | No large allocations |
|
|
154
|
+
| Caching | ❌ Missing | Consider caching user |
|
|
155
|
+
|
|
156
|
+
#### Maintainability Analysis
|
|
157
|
+
|
|
158
|
+
| Metric | Value | Threshold | Status |
|
|
159
|
+
|--------|-------|-----------|--------|
|
|
160
|
+
| Lines of code | 25 | <50 | ✅ |
|
|
161
|
+
| Cyclomatic complexity | 3 | <10 | ✅ |
|
|
162
|
+
| Nesting depth | 2 | <4 | ✅ |
|
|
163
|
+
| Parameters | 1 | <5 | ✅ |
|
|
164
|
+
|
|
165
|
+
#### Function Issues Summary
|
|
166
|
+
|
|
167
|
+
| # | Line | Severity | Category | Issue | Fix |
|
|
168
|
+
|---|------|----------|----------|-------|-----|
|
|
169
|
+
| 1 | 45 | 🔴 Critical | Correctness | No null check | Add validation |
|
|
170
|
+
| 2 | 45-49 | 🟠 Major | Security | No auth check | Add permission check |
|
|
171
|
+
| 3 | 48 | 🟡 Minor | Maintainability | Log lacks context | Add userId to log |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### [Repeat for EVERY function in the file]
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### React Component Analysis (If Applicable)
|
|
180
|
+
|
|
181
|
+
#### Component: `ComponentName`
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
// Paste complete component
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
#### Props Analysis
|
|
188
|
+
|
|
189
|
+
| Prop | Type | Required | Default | Validation |
|
|
190
|
+
|------|------|----------|---------|------------|
|
|
191
|
+
| `userId` | string | Yes | - | ❌ No validation |
|
|
192
|
+
| `onSave` | function | No | noop | ✅ OK |
|
|
193
|
+
|
|
194
|
+
#### State Analysis
|
|
195
|
+
|
|
196
|
+
| State | Type | Initial | Updates | Issues |
|
|
197
|
+
|-------|------|---------|---------|--------|
|
|
198
|
+
| `loading` | boolean | false | 3 places | ✅ OK |
|
|
199
|
+
| `data` | User \| null | null | 1 place | ⚠️ No error state |
|
|
200
|
+
|
|
201
|
+
#### Hooks Analysis
|
|
202
|
+
|
|
203
|
+
| Hook | Dependencies | Issues |
|
|
204
|
+
|------|--------------|--------|
|
|
205
|
+
| `useEffect` L23 | `[userId]` | ✅ Correct deps |
|
|
206
|
+
| `useEffect` L45 | `[]` | ⚠️ Missing `data` dep |
|
|
207
|
+
| `useMemo` L67 | `[items]` | ✅ OK |
|
|
208
|
+
| `useCallback` L78 | Missing | ⚠️ Should memoize |
|
|
209
|
+
|
|
210
|
+
#### Render Analysis
|
|
211
|
+
|
|
212
|
+
| Element | Accessibility | Issues |
|
|
213
|
+
|---------|--------------|--------|
|
|
214
|
+
| `<button>` L90 | ❌ No aria-label | Add label |
|
|
215
|
+
| `<img>` L95 | ❌ No alt | Add alt text |
|
|
216
|
+
| `<input>` L100 | ❌ No label | Add label |
|
|
217
|
+
|
|
218
|
+
#### Component States
|
|
219
|
+
|
|
220
|
+
| State | Handled? | UI Shown |
|
|
221
|
+
|-------|----------|----------|
|
|
222
|
+
| Loading | ✅ | Spinner |
|
|
223
|
+
| Empty | ❌ Missing | - |
|
|
224
|
+
| Error | ❌ Missing | - |
|
|
225
|
+
| Success | ✅ | Data display |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
### CSS / Styling Analysis (If Applicable)
|
|
230
|
+
|
|
231
|
+
```css
|
|
232
|
+
/* Paste relevant styles */
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
| Selector | Specificity | Issues |
|
|
236
|
+
|----------|-------------|--------|
|
|
237
|
+
| `.button` | 0-1-0 | ✅ OK |
|
|
238
|
+
| `#header .nav a.link` | 1-2-1 | ⚠️ Too specific |
|
|
239
|
+
| `div > p` | 0-0-2 | ⚠️ Fragile selector |
|
|
240
|
+
|
|
241
|
+
**CSS Issues**:
|
|
242
|
+
- [ ] No `!important` abuse
|
|
243
|
+
- [ ] Consistent units (rem vs px)
|
|
244
|
+
- [ ] Z-index values in scale
|
|
245
|
+
- [ ] No magic numbers
|
|
246
|
+
- [ ] Responsive breakpoints correct
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## File Summary
|
|
251
|
+
|
|
252
|
+
### Overall Assessment
|
|
253
|
+
|
|
254
|
+
| Dimension | Score | Notes |
|
|
255
|
+
|-----------|-------|-------|
|
|
256
|
+
| Correctness | 🟠 6/10 | Missing null checks |
|
|
257
|
+
| Security | 🔴 4/10 | No auth, no validation |
|
|
258
|
+
| Performance | ✅ 8/10 | OK |
|
|
259
|
+
| Maintainability | 🟡 7/10 | Good structure, naming could improve |
|
|
260
|
+
| Test Coverage | ❌ 0/10 | No tests found |
|
|
261
|
+
|
|
262
|
+
### All Issues (Sorted by Severity)
|
|
263
|
+
|
|
264
|
+
| # | Line | Severity | Category | Issue | Suggested Fix |
|
|
265
|
+
|---|------|----------|----------|-------|---------------|
|
|
266
|
+
| 1 | 45 | 🚫 Blocker | Security | No input validation | Add Zod schema validation |
|
|
267
|
+
| 2 | 52 | 🔴 Critical | Security | No auth check | Add requireAuth middleware |
|
|
268
|
+
| 3 | 67 | 🟠 Major | Correctness | Null not handled | Add null check |
|
|
269
|
+
| 4 | 48 | 🟡 Minor | Maintainability | Log lacks context | Include userId |
|
|
270
|
+
| 5 | 2 | 🔵 Info | Performance | Could use lighter import | Cherry-pick from lodash |
|
|
271
|
+
|
|
272
|
+
### Required Changes
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
// Line 45: Add validation
|
|
276
|
+
+ import { z } from 'zod';
|
|
277
|
+
+ const schema = z.object({ user: z.object({ ... }) });
|
|
278
|
+
+ const validated = schema.parse(data);
|
|
279
|
+
|
|
280
|
+
// Line 52: Add auth
|
|
281
|
+
+ if (!ctx.user.hasPermission('users:write')) {
|
|
282
|
+
+ throw new ForbiddenError();
|
|
283
|
+
+ }
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Test Requirements
|
|
287
|
+
|
|
288
|
+
| Scenario | Test Exists? | Priority |
|
|
289
|
+
|----------|--------------|----------|
|
|
290
|
+
| Happy path | ❌ | High |
|
|
291
|
+
| Null input | ❌ | High |
|
|
292
|
+
| Invalid data | ❌ | High |
|
|
293
|
+
| Unauthorized user | ❌ | High |
|
|
294
|
+
| DB error | ❌ | Medium |
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Checklist Completion
|
|
299
|
+
|
|
300
|
+
### This File's Checklist
|
|
301
|
+
|
|
302
|
+
- [ ] All imports reviewed
|
|
303
|
+
- [ ] All types reviewed
|
|
304
|
+
- [ ] All functions reviewed line-by-line
|
|
305
|
+
- [ ] All edge cases identified
|
|
306
|
+
- [ ] Security checks completed
|
|
307
|
+
- [ ] Performance analyzed
|
|
308
|
+
- [ ] Maintainability assessed
|
|
309
|
+
- [ ] Test coverage checked
|
|
310
|
+
- [ ] Issues documented with fixes
|
|
311
|
+
- [ ] Related files identified
|
|
312
|
+
|
|
313
|
+
### Cross-References
|
|
314
|
+
|
|
315
|
+
| Related File | Relationship | Review Status |
|
|
316
|
+
|--------------|--------------|---------------|
|
|
317
|
+
| `types/user.ts` | Imports types from | ⏳ Pending |
|
|
318
|
+
| `api/users.ts` | Calls this service | ⏳ Pending |
|
|
319
|
+
| `tests/auth.test.ts` | Tests this file | ⏳ Pending |
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Reviewer Notes
|
|
324
|
+
|
|
325
|
+
[Any additional observations, questions for the author, or discussion points]
|
|
326
|
+
|