skillstore-cli 1.0.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/README.md +95 -0
- package/data/bundles/devflow-complete.json +19 -0
- package/data/free-skills/devflow-agile/manifest.json +19 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/retro.md +23 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/review.md +21 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/sprint.md +30 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/standup.md +20 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile.md +35 -0
- package/data/free-skills/devflow-agile/plugin/commands/devflow.md +42 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/SKILL.md +93 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/assets/sample-output.md +182 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-architecture.md +361 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-code-guide.md +207 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/debugging-methodology.md +191 -0
- package/data/free-skills/devflow-agile/template/agents/agile-coach.md +76 -0
- package/data/free-skills/devflow-agile/template/workflows/agile-sprint-workflow.md +81 -0
- package/data/free-skills/devflow-bootstrap/manifest.json +8 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap/auto.md +31 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap.md +38 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/devflow.md +20 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/SKILL.md +56 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/assets/sample-output.md +216 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/architecture-decisions.md +254 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/stack-templates.md +400 -0
- package/data/free-skills/devflow-bootstrap/template/agents/bootstrap-specialist.md +56 -0
- package/data/free-skills/devflow-bootstrap/template/workflows/bootstrap-workflow.md +70 -0
- package/data/free-skills/devflow-docs/manifest.json +8 -0
- package/data/free-skills/devflow-docs/plugin/commands/devflow.md +20 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs/generate.md +17 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs/parse.md +19 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs.md +26 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/SKILL.md +59 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/assets/sample-output.md +114 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/extraction-techniques.md +115 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/ocr-strategies.md +167 -0
- package/data/free-skills/devflow-docs/template/agents/docs-specialist.md +35 -0
- package/data/free-skills/devflow-docs/template/workflows/docs-workflow.md +70 -0
- package/data/free-skills/devflow-postproject/manifest.json +13 -0
- package/data/free-skills/devflow-postproject/plugin/commands/devflow.md +34 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/handover.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/retro.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/support.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject.md +32 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/SKILL.md +70 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/assets/sample-output.md +79 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/facilitation-techniques.md +178 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/lessons-learned-template.md +118 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/retro-techniques.md +100 -0
- package/data/free-skills/devflow-postproject/template/agents/transition-manager.md +71 -0
- package/data/free-skills/devflow-postproject/template/workflows/transition-workflow.md +72 -0
- package/data/free-skills/devflow-presale/manifest.json +15 -0
- package/data/free-skills/devflow-presale/plugin/commands/devflow.md +47 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/analyze.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/estimate.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/price.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/propose.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale.md +42 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/SKILL.md +63 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/assets/sample-output.md +129 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/extraction-framework.md +140 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/output-template.md +132 -0
- package/data/free-skills/devflow-presale/template/agents/presale-lead.md +83 -0
- package/data/free-skills/devflow-presale/template/agents/proposal-reviewer.md +63 -0
- package/data/free-skills/devflow-presale/template/workflows/presale-workflow.md +70 -0
- package/data/registry/categories.json +7 -0
- package/data/registry/packages.json +184 -0
- package/data/shared/framework/agents/brainstormer.md +74 -0
- package/data/shared/framework/agents/code-reviewer.md +87 -0
- package/data/shared/framework/agents/debugger.md +84 -0
- package/data/shared/framework/agents/docs-manager.md +55 -0
- package/data/shared/framework/agents/git-manager.md +59 -0
- package/data/shared/framework/agents/planner.md +68 -0
- package/data/shared/framework/agents/researcher.md +66 -0
- package/data/shared/framework/agents/tester.md +65 -0
- package/data/shared/framework/commands/cook/auto.md +27 -0
- package/data/shared/framework/commands/cook.md +45 -0
- package/data/shared/framework/commands/fix/ci.md +21 -0
- package/data/shared/framework/commands/fix/test.md +26 -0
- package/data/shared/framework/commands/fix/types.md +29 -0
- package/data/shared/framework/commands/fix.md +26 -0
- package/data/shared/framework/commands/git/cm.md +37 -0
- package/data/shared/framework/commands/git/pr.md +40 -0
- package/data/shared/framework/config/CLAUDE.md.template +26 -0
- package/data/shared/framework/config/settings.json +41 -0
- package/data/shared/framework/config/skillstore.config.json +29 -0
- package/data/shared/framework/hooks/discord-notify.sh +85 -0
- package/data/shared/framework/hooks/docs-sync.sh +53 -0
- package/data/shared/framework/hooks/modularization-hook.js +103 -0
- package/data/shared/framework/hooks/notification.js +94 -0
- package/data/shared/framework/hooks/quality-gate.js +109 -0
- package/data/shared/framework/hooks/scout-block.js +77 -0
- package/data/shared/framework/hooks/telegram-notify.sh +77 -0
- package/data/shared/framework/protocols/error-recovery.md +80 -0
- package/data/shared/framework/protocols/orchestration-protocol.md +112 -0
- package/data/shared/framework/quality/review-protocol.md +76 -0
- package/data/shared/framework/quality/verification-protocol.md +66 -0
- package/data/shared/framework/rules/development-rules.md +75 -0
- package/data/shared/framework/skills/backend-development/SKILL.md +77 -0
- package/data/shared/framework/skills/backend-development/assets/sample-output.md +175 -0
- package/data/shared/framework/skills/backend-development/references/advanced-patterns.md +180 -0
- package/data/shared/framework/skills/backend-development/references/api-design-guide.md +160 -0
- package/data/shared/framework/skills/backend-development/references/architecture-patterns.md +183 -0
- package/data/shared/framework/skills/backend-development/references/observability-resilience.md +155 -0
- package/data/shared/framework/skills/backend-development/references/troubleshooting.md +199 -0
- package/data/shared/framework/skills/codebase-analysis/SKILL.md +72 -0
- package/data/shared/framework/skills/codebase-analysis/assets/sample-output.md +263 -0
- package/data/shared/framework/skills/codebase-analysis/references/analysis-techniques.md +241 -0
- package/data/shared/framework/skills/codebase-analysis/references/dependency-mapping.md +280 -0
- package/data/shared/framework/skills/codebase-analysis/references/tech-debt-assessment.md +208 -0
- package/data/shared/framework/skills/databases/SKILL.md +72 -0
- package/data/shared/framework/skills/databases/assets/sample-output.md +212 -0
- package/data/shared/framework/skills/databases/references/advanced-data-patterns.md +259 -0
- package/data/shared/framework/skills/databases/references/query-optimization.md +214 -0
- package/data/shared/framework/skills/databases/references/schema-design.md +159 -0
- package/data/shared/framework/skills/databases/references/troubleshooting.md +214 -0
- package/data/shared/framework/skills/debugging-investigation/SKILL.md +84 -0
- package/data/shared/framework/skills/debugging-investigation/assets/sample-output.md +314 -0
- package/data/shared/framework/skills/debugging-investigation/references/systematic-debugging.md +197 -0
- package/data/shared/framework/skills/debugging-investigation/references/tool-specific-guides.md +202 -0
- package/data/shared/framework/skills/debugging-investigation/references/troubleshooting-patterns.md +196 -0
- package/data/shared/framework/skills/frontend-development/SKILL.md +67 -0
- package/data/shared/framework/skills/frontend-development/assets/sample-output.md +110 -0
- package/data/shared/framework/skills/frontend-development/references/component-patterns.md +112 -0
- package/data/shared/framework/skills/frontend-development/references/performance-guide.md +169 -0
- package/data/shared/framework/skills/frontend-development/references/routing-forms-realtime.md +374 -0
- package/data/shared/framework/skills/frontend-development/references/ssr-rsc-patterns.md +284 -0
- package/data/shared/framework/skills/frontend-development/references/troubleshooting.md +154 -0
- package/data/shared/framework/skills/mobile-development/SKILL.md +67 -0
- package/data/shared/framework/skills/mobile-development/assets/sample-output.md +382 -0
- package/data/shared/framework/skills/mobile-development/references/mobile-patterns.md +681 -0
- package/data/shared/framework/skills/mobile-development/references/mobile-performance.md +524 -0
- package/data/shared/framework/skills/mobile-development/references/troubleshooting.md +158 -0
- package/data/shared/framework/skills/security-audit/SKILL.md +83 -0
- package/data/shared/framework/skills/security-audit/assets/sample-output.md +451 -0
- package/data/shared/framework/skills/security-audit/references/owasp-checklist.md +580 -0
- package/data/shared/framework/skills/security-audit/references/secure-coding-patterns.md +433 -0
- package/data/shared/framework/skills/security-audit/references/vulnerability-remediation.md +331 -0
- package/data/shared/framework/skills/ui-generation/SKILL.md +70 -0
- package/data/shared/framework/skills/ui-generation/assets/sample-output.md +139 -0
- package/data/shared/framework/skills/ui-generation/references/accessibility-responsive.md +127 -0
- package/data/shared/framework/skills/ui-generation/references/compound-components.md +252 -0
- package/data/shared/framework/skills/ui-generation/references/generation-patterns.md +110 -0
- package/data/shared/framework/skills/ui-generation/references/storybook-design-system.md +278 -0
- package/data/shared/framework/skills/ui-generation/references/troubleshooting.md +198 -0
- package/data/shared/framework/workflows/documentation-management.md +58 -0
- package/data/shared/framework/workflows/primary-workflow.md +88 -0
- package/dist/commands/activate.d.ts +3 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +34 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/bundle.d.ts +3 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +64 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +99 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +37 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +30 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +35 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +68 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/download/cache.d.ts +3 -0
- package/dist/download/cache.d.ts.map +1 -0
- package/dist/download/cache.js +18 -0
- package/dist/download/cache.js.map +1 -0
- package/dist/download/client.d.ts +2 -0
- package/dist/download/client.d.ts.map +1 -0
- package/dist/download/client.js +58 -0
- package/dist/download/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/file-copier.d.ts +6 -0
- package/dist/installer/file-copier.d.ts.map +1 -0
- package/dist/installer/file-copier.js +32 -0
- package/dist/installer/file-copier.js.map +1 -0
- package/dist/installer/plugin-installer.d.ts +12 -0
- package/dist/installer/plugin-installer.d.ts.map +1 -0
- package/dist/installer/plugin-installer.js +33 -0
- package/dist/installer/plugin-installer.js.map +1 -0
- package/dist/installer/template-installer.d.ts +12 -0
- package/dist/installer/template-installer.d.ts.map +1 -0
- package/dist/installer/template-installer.js +45 -0
- package/dist/installer/template-installer.js.map +1 -0
- package/dist/license/crypto.d.ts +16 -0
- package/dist/license/crypto.d.ts.map +1 -0
- package/dist/license/crypto.js +50 -0
- package/dist/license/crypto.js.map +1 -0
- package/dist/license/license-store.d.ts +19 -0
- package/dist/license/license-store.d.ts.map +1 -0
- package/dist/license/license-store.js +99 -0
- package/dist/license/license-store.js.map +1 -0
- package/dist/license/validator.d.ts +32 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +81 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/registry/loader.d.ts +30 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +22 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/search-engine.d.ts +9 -0
- package/dist/registry/search-engine.d.ts.map +1 -0
- package/dist/registry/search-engine.js +30 -0
- package/dist/registry/search-engine.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +28 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +20 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +79 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# SkillStore CLI
|
|
2
|
+
|
|
3
|
+
Install and manage skill packages for [Claude Code](https://claude.ai/claude-code).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g skillstore-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Browse available packages
|
|
15
|
+
skillstore list
|
|
16
|
+
|
|
17
|
+
# Install free skills (no license needed)
|
|
18
|
+
skillstore install devflow-presale --free-only
|
|
19
|
+
|
|
20
|
+
# Activate a license
|
|
21
|
+
skillstore activate <license-key>
|
|
22
|
+
|
|
23
|
+
# Install full package (requires license)
|
|
24
|
+
skillstore install devflow-presale
|
|
25
|
+
|
|
26
|
+
# Install as template (includes agents + workflows)
|
|
27
|
+
skillstore install devflow-agile --as-template
|
|
28
|
+
|
|
29
|
+
# Install all packages at once
|
|
30
|
+
skillstore install-bundle devflow-complete
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Packages
|
|
34
|
+
|
|
35
|
+
| Package | Skills | Price | Free Preview |
|
|
36
|
+
|---------|--------|-------|-------------|
|
|
37
|
+
| **DevFlow Presale** | 6 | $29 | requirement-analysis |
|
|
38
|
+
| **DevFlow Agile** | 10 | $49 | developer |
|
|
39
|
+
| **DevFlow Post-Project** | 4 | $19 | retrospective |
|
|
40
|
+
| **DevFlow Docs** | 4 | $19 | pdf-processor |
|
|
41
|
+
| **DevFlow Bootstrap** | 4 | $19 | project-scaffold |
|
|
42
|
+
| **DevFlow Complete** (bundle) | 28 | $99 | — |
|
|
43
|
+
|
|
44
|
+
## Free Framework Skills
|
|
45
|
+
|
|
46
|
+
These 8 skills are always free — no license required:
|
|
47
|
+
|
|
48
|
+
- `frontend-development` — React, Vue, Angular patterns
|
|
49
|
+
- `backend-development` — API design, Node.js, Python, Java
|
|
50
|
+
- `databases` — SQL/NoSQL, migrations, query optimization
|
|
51
|
+
- `mobile-development` — React Native, Flutter
|
|
52
|
+
- `ui-generation` — Generate UI components from descriptions
|
|
53
|
+
- `debugging-investigation` — Systematic debugging methodology
|
|
54
|
+
- `codebase-analysis` — Architecture analysis, tech debt assessment
|
|
55
|
+
- `security-audit` — OWASP checklist, vulnerability remediation
|
|
56
|
+
|
|
57
|
+
## Commands
|
|
58
|
+
|
|
59
|
+
| Command | Description |
|
|
60
|
+
|---------|-------------|
|
|
61
|
+
| `skillstore list` | Show all packages with pricing |
|
|
62
|
+
| `skillstore search <query>` | Search packages and skills |
|
|
63
|
+
| `skillstore install <package>` | Install a package |
|
|
64
|
+
| `skillstore install-bundle <name>` | Install a bundle |
|
|
65
|
+
| `skillstore activate <key>` | Activate a license key |
|
|
66
|
+
| `skillstore status` | Show license tier and installed packages |
|
|
67
|
+
| `skillstore update` | Update installed packages |
|
|
68
|
+
|
|
69
|
+
## Installation Modes
|
|
70
|
+
|
|
71
|
+
**Plugin** (default) — copies skills and commands to `.claude/`:
|
|
72
|
+
```bash
|
|
73
|
+
skillstore install devflow-presale
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Template** — also copies agents, workflows, and framework config:
|
|
77
|
+
```bash
|
|
78
|
+
skillstore install devflow-presale --as-template
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## How It Works
|
|
82
|
+
|
|
83
|
+
1. Free skills and framework are bundled with the CLI — works offline
|
|
84
|
+
2. Paid skills are downloaded from a secure server after license verification
|
|
85
|
+
3. Downloaded packages are cached locally for offline use
|
|
86
|
+
4. All skills follow the [Agent Skills Spec](https://docs.claude.ai/claude-code/skills) — SKILL.md + references + assets
|
|
87
|
+
|
|
88
|
+
## Requirements
|
|
89
|
+
|
|
90
|
+
- Node.js 18+
|
|
91
|
+
- Claude Code
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
MIT
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devflow-complete",
|
|
3
|
+
"displayName": "DevFlow Complete",
|
|
4
|
+
"description": "All 28 DevFlow skills — presale, agile, post-project, docs, and bootstrap in one bundle",
|
|
5
|
+
"packages": [
|
|
6
|
+
"@skillstore/devflow-presale",
|
|
7
|
+
"@skillstore/devflow-agile",
|
|
8
|
+
"@skillstore/devflow-postproject",
|
|
9
|
+
"@skillstore/devflow-docs",
|
|
10
|
+
"@skillstore/devflow-bootstrap"
|
|
11
|
+
],
|
|
12
|
+
"price": {
|
|
13
|
+
"bundle": 99,
|
|
14
|
+
"individual": 135,
|
|
15
|
+
"savings": 36,
|
|
16
|
+
"currency": "USD"
|
|
17
|
+
},
|
|
18
|
+
"version": "1.2.0"
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@skillstore/devflow-agile",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"skills": [
|
|
5
|
+
"project-manager",
|
|
6
|
+
"scrum-master",
|
|
7
|
+
"business-analyst",
|
|
8
|
+
"solution-architect",
|
|
9
|
+
"tech-lead",
|
|
10
|
+
"team-lead",
|
|
11
|
+
"developer",
|
|
12
|
+
"qa-tester",
|
|
13
|
+
"ui-ux-designer",
|
|
14
|
+
"devops-engineer"
|
|
15
|
+
],
|
|
16
|
+
"freeSkills": ["developer"],
|
|
17
|
+
"commands": ["agile", "agile/sprint", "agile/standup", "agile/review", "agile/retro"],
|
|
18
|
+
"modes": ["plugin", "template"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sprint retrospective facilitation
|
|
3
|
+
argument-hint: [sprint number or context]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<sprint>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</sprint>
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
1. Activate `scrum-master` skill for retrospective techniques
|
|
15
|
+
2. Select appropriate retro format based on team context
|
|
16
|
+
3. Facilitate discussion areas:
|
|
17
|
+
- What went well
|
|
18
|
+
- What didn't go well
|
|
19
|
+
- What to improve
|
|
20
|
+
4. Produce:
|
|
21
|
+
- Categorized findings
|
|
22
|
+
- Action items with owners and deadlines
|
|
23
|
+
- Follow-up from previous retro actions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sprint review preparation and facilitation
|
|
3
|
+
argument-hint: [sprint number or context]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<sprint>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</sprint>
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
1. Activate `scrum-master` skill for review structure
|
|
15
|
+
2. Activate `project-manager` skill for progress metrics
|
|
16
|
+
3. Compile:
|
|
17
|
+
- Completed stories with demo notes
|
|
18
|
+
- Incomplete stories with reasons
|
|
19
|
+
- Sprint metrics (velocity, goal achievement)
|
|
20
|
+
- Stakeholder feedback items
|
|
21
|
+
4. Produce sprint review presentation outline
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sprint management — planning, execution tracking, or closure
|
|
3
|
+
argument-hint: [plan|track|close] [sprint details]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<task>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</task>
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
Based on the action:
|
|
15
|
+
|
|
16
|
+
### Sprint Planning
|
|
17
|
+
1. Activate `scrum-master` skill for ceremony facilitation
|
|
18
|
+
2. Activate `project-manager` skill for capacity planning
|
|
19
|
+
3. Activate `business-analyst` skill for story refinement
|
|
20
|
+
4. Produce sprint goal, committed stories, and capacity allocation
|
|
21
|
+
|
|
22
|
+
### Sprint Tracking
|
|
23
|
+
1. Activate `scrum-master` skill for metrics
|
|
24
|
+
2. Activate `project-manager` skill for status reporting
|
|
25
|
+
3. Identify blockers, risks, and velocity trends
|
|
26
|
+
|
|
27
|
+
### Sprint Closure
|
|
28
|
+
1. Activate `scrum-master` skill for review/retro facilitation
|
|
29
|
+
2. Activate `qa-tester` skill for test completion verification
|
|
30
|
+
3. Produce sprint summary, velocity, and improvement actions
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate or facilitate daily standup
|
|
3
|
+
argument-hint: [team or context]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<context>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</context>
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
1. Activate `scrum-master` skill
|
|
15
|
+
2. For each team member / work area:
|
|
16
|
+
- What was completed yesterday
|
|
17
|
+
- What is planned for today
|
|
18
|
+
- Any blockers or dependencies
|
|
19
|
+
3. Flag items needing escalation
|
|
20
|
+
4. Produce concise standup summary
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Agile project workflow orchestrator — manage sprints, ceremonies, and team coordination
|
|
3
|
+
argument-hint: [task or ceremony name]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<task>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</task>
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
Analyze the task and route to the appropriate role skill:
|
|
15
|
+
|
|
16
|
+
1. **Understand the request** — What Agile activity is needed?
|
|
17
|
+
2. **Route to skill** — Based on the task:
|
|
18
|
+
- Project planning/tracking → Activate `project-manager` skill
|
|
19
|
+
- Sprint ceremonies → Activate `scrum-master` skill
|
|
20
|
+
- Requirements/stories → Activate `business-analyst` skill
|
|
21
|
+
- Architecture/design → Activate `solution-architect` skill
|
|
22
|
+
- Code standards/review → Activate `tech-lead` skill
|
|
23
|
+
- Team coordination → Activate `team-lead` skill
|
|
24
|
+
- Implementation → Activate `developer` skill
|
|
25
|
+
- Testing → Activate `qa-tester` skill
|
|
26
|
+
- UI/UX review → Activate `ui-ux-designer` skill
|
|
27
|
+
- CI/CD/infra → Activate `devops-engineer` skill
|
|
28
|
+
3. **Multi-role if needed** — Complex tasks may require multiple roles
|
|
29
|
+
|
|
30
|
+
## Sub-commands
|
|
31
|
+
|
|
32
|
+
- `/agile:sprint [action]` — Sprint planning, execution, or closure
|
|
33
|
+
- `/agile:standup [team]` — Generate standup report format
|
|
34
|
+
- `/agile:review [sprint]` — Sprint review preparation
|
|
35
|
+
- `/agile:retro [sprint]` — Sprint retrospective facilitation
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: DevFlow smart router — automatically routes tasks to the right agile role skill
|
|
3
|
+
argument-hint: [task description]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your Mission
|
|
7
|
+
|
|
8
|
+
<task>
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
</task>
|
|
11
|
+
|
|
12
|
+
## Smart Routing
|
|
13
|
+
|
|
14
|
+
Analyze the task and determine which role skill to activate:
|
|
15
|
+
|
|
16
|
+
### Route Detection
|
|
17
|
+
| Keywords/Patterns | Route To |
|
|
18
|
+
|-------------------|----------|
|
|
19
|
+
| plan, schedule, timeline, milestone, status, budget | `project-manager` skill |
|
|
20
|
+
| sprint, ceremony, standup, velocity, burndown, impediment | `scrum-master` skill |
|
|
21
|
+
| story, requirement, acceptance criteria, UAT, process flow | `business-analyst` skill |
|
|
22
|
+
| architecture, design, ADR, NFR, system design, integration | `solution-architect` skill |
|
|
23
|
+
| code review, standards, PR, tech debt, conventions | `tech-lead` skill |
|
|
24
|
+
| assign, mentor, performance, team, coordination | `team-lead` skill |
|
|
25
|
+
| implement, code, debug, feature, fix, build | `developer` skill |
|
|
26
|
+
| test, QA, bug, coverage, automation, regression | `qa-tester` skill |
|
|
27
|
+
| UI, UX, design, wireframe, accessibility, WCAG | `ui-ux-designer` skill |
|
|
28
|
+
| deploy, CI/CD, pipeline, monitoring, infrastructure | `devops-engineer` skill |
|
|
29
|
+
|
|
30
|
+
### Multi-Role Tasks
|
|
31
|
+
If task requires multiple roles:
|
|
32
|
+
1. Identify primary role (who owns the outcome)
|
|
33
|
+
2. Identify supporting roles (who provides input)
|
|
34
|
+
3. Primary role leads, supporting roles activated as needed
|
|
35
|
+
|
|
36
|
+
### Ambiguity Handling
|
|
37
|
+
If unclear which role: ask ONE clarifying question.
|
|
38
|
+
Example: "This could be a tech-lead (code review) or developer (implementation) task. Which do you need?"
|
|
39
|
+
|
|
40
|
+
## References
|
|
41
|
+
- Load `rules/development-rules.md` for quality standards
|
|
42
|
+
- Follow `protocols/error-recovery.md` for failure handling
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: developer
|
|
3
|
+
description: Clean code practices, design patterns, debugging methodology, and development best practices for ITO delivery teams
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Developer
|
|
7
|
+
|
|
8
|
+
Write clean, maintainable code, apply appropriate design patterns, debug systematically, and follow development best practices. Calibrated for developers working in outsourcing teams where code readability and handover-friendliness are critical.
|
|
9
|
+
|
|
10
|
+
## Triggers
|
|
11
|
+
|
|
12
|
+
Activate this skill when:
|
|
13
|
+
- Implementing a **new feature** and need to plan the approach
|
|
14
|
+
- Fixing a **bug** and need a systematic debugging strategy
|
|
15
|
+
- Improving **code quality** in existing modules (refactoring)
|
|
16
|
+
- Choosing the right **design pattern** for a problem
|
|
17
|
+
- Writing or improving **tests** for business-critical logic
|
|
18
|
+
- Optimizing **performance** of a slow endpoint, query, or UI component
|
|
19
|
+
- Preparing code for **handover** or knowledge transfer
|
|
20
|
+
|
|
21
|
+
## Inputs
|
|
22
|
+
|
|
23
|
+
Gather before starting:
|
|
24
|
+
1. **Ticket/story details** — acceptance criteria, priority, linked design/specs
|
|
25
|
+
2. **Codebase context** — relevant modules, existing patterns, tech stack
|
|
26
|
+
3. **Test requirements** — coverage expectations, existing test suite, CI gates
|
|
27
|
+
4. **Performance targets** (if applicable) — response time SLAs, throughput requirements
|
|
28
|
+
5. **Dependencies** — APIs, libraries, other team members' work in progress
|
|
29
|
+
|
|
30
|
+
## Process
|
|
31
|
+
|
|
32
|
+
### Step 1: Understand Before Coding
|
|
33
|
+
- Read the full ticket including comments and linked documents
|
|
34
|
+
- Identify acceptance criteria — these become your test cases
|
|
35
|
+
- Check existing code for **similar implementations** to follow established patterns
|
|
36
|
+
- Ask clarifying questions BEFORE writing code, not after
|
|
37
|
+
|
|
38
|
+
### Step 2: Plan the Implementation
|
|
39
|
+
- Break the task into **small, testable increments** (each could be a commit)
|
|
40
|
+
- Identify which files need changes and what the impact radius is
|
|
41
|
+
- Design the data flow: input → processing → output → error handling
|
|
42
|
+
- Consider edge cases: null/empty inputs, concurrent access, large datasets
|
|
43
|
+
- See `assets/sample-output.md` for a feature implementation plan example
|
|
44
|
+
|
|
45
|
+
### Step 3: Write Clean Code
|
|
46
|
+
- Apply **SOLID principles** — especially Single Responsibility and Dependency Inversion
|
|
47
|
+
- Follow **DRY** (Don't Repeat Yourself) but avoid premature abstraction
|
|
48
|
+
- Keep functions **short and focused** — one level of abstraction per function
|
|
49
|
+
- Use **meaningful names** that reveal intent (not `data`, `temp`, `result`)
|
|
50
|
+
- Handle errors explicitly — no silent catches, no swallowed exceptions
|
|
51
|
+
- Reference: `references/clean-code-guide.md` for principles and patterns
|
|
52
|
+
|
|
53
|
+
### Step 4: Test Your Code
|
|
54
|
+
- Write unit tests for **business logic** — not just happy path
|
|
55
|
+
- Write integration tests for **API endpoints** and **database operations**
|
|
56
|
+
- Test edge cases: boundary values, empty collections, permission errors
|
|
57
|
+
- Aim for meaningful coverage — 80%+ on business logic, less on boilerplate
|
|
58
|
+
|
|
59
|
+
### Step 5: Debug Systematically
|
|
60
|
+
- **Reproduce** the bug reliably before attempting a fix
|
|
61
|
+
- **Isolate** — narrow down to the smallest failing unit
|
|
62
|
+
- Form a **hypothesis**, test it, iterate
|
|
63
|
+
- Fix the **root cause**, not the symptom
|
|
64
|
+
- Add a **regression test** for every bug fix
|
|
65
|
+
- Reference: `references/debugging-methodology.md` for techniques by scenario
|
|
66
|
+
|
|
67
|
+
### Step 6: Submit for Review
|
|
68
|
+
- Self-review your diff before creating a PR
|
|
69
|
+
- Write a clear PR description: what changed, why, how to test
|
|
70
|
+
- Keep PRs **small and focused** — under 400 lines of diff when possible
|
|
71
|
+
- Link the ticket and tag relevant reviewers
|
|
72
|
+
|
|
73
|
+
## Core Areas
|
|
74
|
+
|
|
75
|
+
| Area | Focus | Deliverables |
|
|
76
|
+
|------|-------|-------------|
|
|
77
|
+
| Clean code | Readable, maintainable, intention-revealing | Well-structured code, clear naming |
|
|
78
|
+
| Design patterns | Right pattern for the problem | Documented pattern choices in code/PR |
|
|
79
|
+
| Debugging | Systematic root cause resolution | Bug fix + regression test |
|
|
80
|
+
| Testing | Meaningful coverage of critical paths | Unit tests, integration tests |
|
|
81
|
+
| Performance | Meet SLAs, avoid waste | Profiling results, optimization PRs |
|
|
82
|
+
| Documentation | Code that explains itself + context docs | Inline comments, API docs, runbooks |
|
|
83
|
+
|
|
84
|
+
## Key Rules
|
|
85
|
+
|
|
86
|
+
- **Never copy-paste** code without understanding it — especially from Stack Overflow or AI suggestions
|
|
87
|
+
- Write code as if the person maintaining it is a **junior developer who joined next month**
|
|
88
|
+
- Every bug fix must include a **test that fails without the fix** and passes with it
|
|
89
|
+
- **Commit early, commit often** — small commits with clear messages are easier to review and revert
|
|
90
|
+
- In ITO projects, **code readability beats cleverness** — your successor needs to understand it
|
|
91
|
+
- If a function needs a comment to explain what it does, **rename the function** instead
|
|
92
|
+
- Log **context, not noise** — include request IDs, user context, and error details in logs
|
|
93
|
+
- When stuck for more than **30 minutes**, ask for help — pairing is not a sign of weakness
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Sample Implementation Plan: Password Reset Feature
|
|
2
|
+
|
|
3
|
+
## Ticket: AUTH-156 — User Password Reset via Email
|
|
4
|
+
|
|
5
|
+
### Requirements
|
|
6
|
+
- User requests password reset by entering their email address
|
|
7
|
+
- System sends an email with a secure reset link
|
|
8
|
+
- Link expires after 24 hours
|
|
9
|
+
- User clicks link, enters new password (with confirmation)
|
|
10
|
+
- Old sessions are invalidated after password change
|
|
11
|
+
- Rate limit: max 3 reset requests per email per hour
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Implementation Approach
|
|
16
|
+
|
|
17
|
+
### Data Flow
|
|
18
|
+
```
|
|
19
|
+
User enters email → POST /api/v1/auth/password-reset/request
|
|
20
|
+
→ Validate email exists (return success even if not found — prevent enumeration)
|
|
21
|
+
→ Generate secure token (crypto.randomBytes, 32 bytes, hex encoded)
|
|
22
|
+
→ Store token hash (SHA-256) + userId + expiresAt in password_reset_tokens table
|
|
23
|
+
→ Send email with reset link containing the raw token
|
|
24
|
+
→ Return 200 OK
|
|
25
|
+
|
|
26
|
+
User clicks link → GET /app/reset-password?token=abc123
|
|
27
|
+
→ Frontend shows new password form
|
|
28
|
+
|
|
29
|
+
User submits new password → POST /api/v1/auth/password-reset/confirm
|
|
30
|
+
→ Hash the provided token, look up in DB
|
|
31
|
+
→ Verify: token exists, not expired, not already used
|
|
32
|
+
→ Hash new password (bcrypt, 12 rounds)
|
|
33
|
+
→ Update user password
|
|
34
|
+
→ Mark token as used
|
|
35
|
+
→ Invalidate all existing sessions for this user
|
|
36
|
+
→ Return 200 OK
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Why This Design
|
|
40
|
+
- **Store token hash, not raw token**: If the database is compromised, attacker cannot use stored tokens
|
|
41
|
+
- **Return success even if email not found**: Prevents user enumeration attacks
|
|
42
|
+
- **Mark token as used (not delete)**: Audit trail — know when token was used
|
|
43
|
+
- **Invalidate sessions**: If someone else had access, changing password should lock them out
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Implementation Steps
|
|
48
|
+
|
|
49
|
+
### Step 1: Database Migration
|
|
50
|
+
**File**: `src/migrations/20260320_create_password_reset_tokens.ts`
|
|
51
|
+
|
|
52
|
+
```sql
|
|
53
|
+
CREATE TABLE password_reset_tokens (
|
|
54
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
55
|
+
user_id UUID NOT NULL REFERENCES users(id),
|
|
56
|
+
token_hash VARCHAR(64) NOT NULL UNIQUE,
|
|
57
|
+
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
58
|
+
used_at TIMESTAMP WITH TIME ZONE,
|
|
59
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE INDEX idx_reset_tokens_hash ON password_reset_tokens(token_hash);
|
|
63
|
+
CREATE INDEX idx_reset_tokens_user_expires ON password_reset_tokens(user_id, created_at);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Commit after**: migration runs successfully on local DB.
|
|
67
|
+
|
|
68
|
+
### Step 2: Token Service
|
|
69
|
+
**File**: `src/services/password-reset.service.ts`
|
|
70
|
+
|
|
71
|
+
Responsibilities:
|
|
72
|
+
- `requestReset(email: string)`: Generate token, store hash, send email
|
|
73
|
+
- `confirmReset(token: string, newPassword: string)`: Validate token, update password, invalidate sessions
|
|
74
|
+
- `checkRateLimit(email: string)`: Count requests in last hour, enforce limit
|
|
75
|
+
|
|
76
|
+
Design decisions:
|
|
77
|
+
- Token generation: `crypto.randomBytes(32).toString('hex')` — 256-bit entropy
|
|
78
|
+
- Token hashing: SHA-256 (fast enough for one-time tokens, bcrypt is overkill here)
|
|
79
|
+
- Password hashing: bcrypt with 12 rounds (same as registration flow)
|
|
80
|
+
- Rate limiting: Query `COUNT(*)` from `password_reset_tokens WHERE user_id = X AND created_at > NOW() - INTERVAL '1 hour'`
|
|
81
|
+
|
|
82
|
+
**Commit after**: service with unit tests passes.
|
|
83
|
+
|
|
84
|
+
### Step 3: API Endpoints
|
|
85
|
+
**File**: `src/routes/auth.routes.ts`
|
|
86
|
+
|
|
87
|
+
| Method | Path | Auth | Request Body | Response |
|
|
88
|
+
|--------|------|------|-------------|---------|
|
|
89
|
+
| POST | `/api/v1/auth/password-reset/request` | None | `{ email: string }` | `{ message: "If the email exists, a reset link has been sent" }` |
|
|
90
|
+
| POST | `/api/v1/auth/password-reset/confirm` | None | `{ token: string, password: string, passwordConfirm: string }` | `{ message: "Password has been reset successfully" }` |
|
|
91
|
+
|
|
92
|
+
Input validation:
|
|
93
|
+
- `email`: valid email format, trimmed, lowercased
|
|
94
|
+
- `password`: min 8 chars, max 128 chars, must contain uppercase + lowercase + number
|
|
95
|
+
- `passwordConfirm`: must match `password`
|
|
96
|
+
- `token`: 64-char hex string (validates format before DB lookup)
|
|
97
|
+
|
|
98
|
+
**Commit after**: endpoints work via Postman/curl, integration test passes.
|
|
99
|
+
|
|
100
|
+
### Step 4: Email Template
|
|
101
|
+
**File**: `src/templates/email/password-reset.hbs`
|
|
102
|
+
|
|
103
|
+
Content:
|
|
104
|
+
- Subject: "Reset your password — [AppName]"
|
|
105
|
+
- Body: Greeting, explanation, prominent CTA button with reset link, expiration notice (24h), "If you didn't request this" disclaimer
|
|
106
|
+
- Link format: `{APP_URL}/reset-password?token={rawToken}`
|
|
107
|
+
|
|
108
|
+
**Commit after**: email sends correctly in local/staging environment.
|
|
109
|
+
|
|
110
|
+
### Step 5: Frontend — Request Form
|
|
111
|
+
**File**: `src/pages/ForgotPassword.tsx`
|
|
112
|
+
|
|
113
|
+
- Simple form: email input + submit button
|
|
114
|
+
- On submit: call POST `/request`, show success message regardless of result
|
|
115
|
+
- Disable submit button for 60 seconds after submission (prevent spam clicks)
|
|
116
|
+
- Link back to login page
|
|
117
|
+
|
|
118
|
+
### Step 6: Frontend — Reset Form
|
|
119
|
+
**File**: `src/pages/ResetPassword.tsx`
|
|
120
|
+
|
|
121
|
+
- Read `token` from URL query parameter
|
|
122
|
+
- Form: new password + confirm password
|
|
123
|
+
- Client-side validation: password strength, match confirmation
|
|
124
|
+
- On submit: call POST `/confirm`
|
|
125
|
+
- On success: redirect to login page with "Password reset successful" message
|
|
126
|
+
- On error (expired/invalid token): show error with link to request a new reset
|
|
127
|
+
|
|
128
|
+
**Commit after**: full flow works end-to-end locally.
|
|
129
|
+
|
|
130
|
+
### Step 7: Tests
|
|
131
|
+
|
|
132
|
+
| Test Type | File | Cases |
|
|
133
|
+
|-----------|------|-------|
|
|
134
|
+
| Unit | `password-reset.service.test.ts` | Token generation, hash verification, expiration check, rate limiting, used token rejection |
|
|
135
|
+
| Integration | `password-reset.api.test.ts` | Full request→confirm flow, expired token, invalid token format, rate limit exceeded, non-existent email (should still return 200) |
|
|
136
|
+
| E2E | `password-reset.e2e.test.ts` | Happy path through UI (intercept email in test, extract token, complete reset, verify login with new password) |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Edge Cases & Error Handling
|
|
141
|
+
|
|
142
|
+
| Scenario | Expected Behavior |
|
|
143
|
+
|----------|------------------|
|
|
144
|
+
| Email not in system | Return 200 OK (do not reveal if email exists) |
|
|
145
|
+
| Token expired (>24h) | Return 400 with "Reset link has expired. Please request a new one" |
|
|
146
|
+
| Token already used | Return 400 with "This reset link has already been used" |
|
|
147
|
+
| Same email, 4th request within 1 hour | Return 429 with "Too many requests. Please try again later" |
|
|
148
|
+
| Malformed token (not 64 hex chars) | Return 400 with "Invalid reset link" (do not query DB) |
|
|
149
|
+
| Password too weak | Return 400 with specific validation errors |
|
|
150
|
+
| User account disabled/locked | Still send the email but fail at confirm step with generic error |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Security Checklist
|
|
155
|
+
|
|
156
|
+
- [x] Token is cryptographically random (256-bit)
|
|
157
|
+
- [x] Only token hash is stored in DB
|
|
158
|
+
- [x] Token expires after 24 hours
|
|
159
|
+
- [x] Token is single-use (marked as used after confirmation)
|
|
160
|
+
- [x] Rate limited to prevent abuse
|
|
161
|
+
- [x] Email response does not reveal if account exists
|
|
162
|
+
- [x] New password is validated for strength
|
|
163
|
+
- [x] All existing sessions invalidated after reset
|
|
164
|
+
- [x] Reset link uses HTTPS (enforced by APP_URL config)
|
|
165
|
+
- [x] No token in server logs (log only token_hash prefix for debugging)
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Files Changed Summary
|
|
170
|
+
|
|
171
|
+
| File | Action | Description |
|
|
172
|
+
|------|--------|-------------|
|
|
173
|
+
| `src/migrations/20260320_create_password_reset_tokens.ts` | New | DB migration for tokens table |
|
|
174
|
+
| `src/services/password-reset.service.ts` | New | Core reset logic (request, confirm, rate limit) |
|
|
175
|
+
| `src/routes/auth.routes.ts` | Modified | Add 2 new endpoints |
|
|
176
|
+
| `src/templates/email/password-reset.hbs` | New | Email template |
|
|
177
|
+
| `src/pages/ForgotPassword.tsx` | New | Request reset form |
|
|
178
|
+
| `src/pages/ResetPassword.tsx` | New | Set new password form |
|
|
179
|
+
| `src/services/__tests__/password-reset.service.test.ts` | New | Unit tests |
|
|
180
|
+
| `src/routes/__tests__/password-reset.api.test.ts` | New | Integration tests |
|
|
181
|
+
|
|
182
|
+
**Estimated effort**: 3 story points (~2 days for a mid-level developer)
|