forge-dev-framework 1.1.0 → 1.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/commands/forge/README.md +156 -189
- package/.claude/commands/forge/add-phase.md +4 -3
- package/.claude/commands/forge/complete-milestone.md +1 -1
- package/.claude/commands/forge/convert.md +31 -0
- package/.claude/commands/forge/debug.md +12 -154
- package/.claude/commands/forge/discuss.md +60 -107
- package/.claude/commands/forge/execute.md +67 -142
- package/.claude/commands/forge/generate.md +8 -107
- package/.claude/commands/forge/help.md +9 -114
- package/.claude/commands/forge/init.md +10 -74
- package/.claude/commands/forge/insert-phase.md +4 -3
- package/.claude/commands/forge/new-milestone.md +1 -1
- package/.claude/commands/forge/new-project.md +12 -91
- package/.claude/commands/forge/pause-work.md +2 -2
- package/.claude/commands/forge/plan.md +114 -129
- package/.claude/commands/forge/quick.md +17 -106
- package/.claude/commands/forge/remove-phase.md +3 -2
- package/.claude/commands/forge/resume.md +22 -0
- package/.claude/commands/forge/team-add.md +24 -0
- package/.claude/commands/forge/team-create.md +22 -0
- package/.claude/commands/forge/team-remove.md +24 -0
- package/.claude/commands/forge/team-start.md +22 -0
- package/.claude/commands/forge/team-view.md +18 -0
- package/.claude/commands/forge/verify.md +68 -147
- package/.claude/hooks/forge-context-cleanup.cjs +79 -0
- package/.claude/hooks/forge-event-guard.cjs +36 -0
- package/.claude/hooks/forge-size-guard.cjs +55 -0
- package/.claude/rules/api-patterns.md +13 -98
- package/.claude/rules/context-efficiency.md +10 -0
- package/.claude/rules/security-baseline.md +18 -204
- package/.claude/rules/testing-standards.md +16 -177
- package/.claude/rules/ui-conventions.md +17 -142
- package/bin/forge.js +5 -3
- package/dist/bin/forge.js +5 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +15 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/convert.d.ts +6 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +132 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +3 -2
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/index.d.ts +4 -4
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -4
- package/dist/commands/index.js.map +1 -1
- package/dist/generators/gsd-converter.d.ts +100 -0
- package/dist/generators/gsd-converter.d.ts.map +1 -0
- package/dist/generators/gsd-converter.js +335 -0
- package/dist/generators/gsd-converter.js.map +1 -0
- package/dist/templates/.claude/rules/api-patterns.md.template +212 -0
- package/dist/templates/.claude/rules/security-baseline.md.template +322 -0
- package/dist/templates/.claude/rules/testing-standards.md.template +280 -0
- package/dist/templates/.claude/rules/ui-conventions.md.template +264 -0
- package/dist/templates/.planning/forge.config.json.template +75 -0
- package/dist/templates/CLAUDE.md.template +161 -0
- package/dist/templates/PLAN.md.template +177 -0
- package/dist/templates/PROJECT.md.template +156 -0
- package/dist/templates/REQUIREMENTS.md.template +221 -0
- package/dist/templates/ROADMAP.md.template +130 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/template-client.d.ts.map +1 -1
- package/dist/utils/template-client.js +3 -2
- package/dist/utils/template-client.js.map +1 -1
- package/package.json +6 -4
- package/.claude/commands/forge/resume-work.md +0 -122
- package/dist/git/__tests__/worktree.test.d.ts +0 -5
- package/dist/git/__tests__/worktree.test.d.ts.map +0 -1
- package/dist/git/__tests__/worktree.test.js +0 -121
- package/dist/git/__tests__/worktree.test.js.map +0 -1
- package/dist/git/codeowners.d.ts +0 -101
- package/dist/git/codeowners.d.ts.map +0 -1
- package/dist/git/codeowners.js +0 -216
- package/dist/git/codeowners.js.map +0 -1
- package/dist/git/commit.d.ts +0 -135
- package/dist/git/commit.d.ts.map +0 -1
- package/dist/git/commit.js +0 -223
- package/dist/git/commit.js.map +0 -1
- package/dist/git/hooks/commit-msg.d.ts +0 -8
- package/dist/git/hooks/commit-msg.d.ts.map +0 -1
- package/dist/git/hooks/commit-msg.js +0 -34
- package/dist/git/hooks/commit-msg.js.map +0 -1
- package/dist/git/hooks/pre-commit.d.ts +0 -8
- package/dist/git/hooks/pre-commit.d.ts.map +0 -1
- package/dist/git/hooks/pre-commit.js +0 -34
- package/dist/git/hooks/pre-commit.js.map +0 -1
- package/dist/git/pre-commit-hooks.d.ts +0 -117
- package/dist/git/pre-commit-hooks.d.ts.map +0 -1
- package/dist/git/pre-commit-hooks.js +0 -270
- package/dist/git/pre-commit-hooks.js.map +0 -1
- package/dist/git/wipe-protocol.d.ts +0 -281
- package/dist/git/wipe-protocol.d.ts.map +0 -1
- package/dist/git/wipe-protocol.js +0 -237
- package/dist/git/wipe-protocol.js.map +0 -1
- package/dist/git/worktree.d.ts +0 -69
- package/dist/git/worktree.d.ts.map +0 -1
- package/dist/git/worktree.js +0 -202
- package/dist/git/worktree.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsd-converter.js","sourceRoot":"","sources":["../../src/generators/gsd-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# API Design Patterns — {{projectName}}
|
|
2
|
+
|
|
3
|
+
> **Scope:** Backend API development | **Loaded On-Demand**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## RESTful Conventions
|
|
8
|
+
|
|
9
|
+
### URL Structure
|
|
10
|
+
{{#if apiUrlStructure}}
|
|
11
|
+
{{apiUrlStructure}}
|
|
12
|
+
{{else}}
|
|
13
|
+
- Use kebab-case for resource names: `/api/v1/user-profiles`
|
|
14
|
+
- Use plural for collections: `/api/v1/users` (not `/api/v1/user`)
|
|
15
|
+
- Nest resources logically: `/api/v1/users/{userId}/posts`
|
|
16
|
+
{{/if}}
|
|
17
|
+
|
|
18
|
+
### HTTP Methods
|
|
19
|
+
{{#if httpMethods}}
|
|
20
|
+
{{#each httpMethods}}
|
|
21
|
+
- **{{this.method}}** {{this.usage}}
|
|
22
|
+
{{/each}}
|
|
23
|
+
{{else}}
|
|
24
|
+
- **GET** — Retrieve resources (no side effects)
|
|
25
|
+
- **POST** — Create new resources
|
|
26
|
+
- **PATCH** — Partial updates (preferred over PUT)
|
|
27
|
+
- **PUT** — Full replacement (rarely used)
|
|
28
|
+
- **DELETE** — Resource deletion
|
|
29
|
+
{{/if}}
|
|
30
|
+
|
|
31
|
+
### Response Format
|
|
32
|
+
{{#if responseFormat}}
|
|
33
|
+
{{responseFormat}}
|
|
34
|
+
{{else}}
|
|
35
|
+
Always return consistent JSON structure:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"data": { ... },
|
|
40
|
+
"meta": {
|
|
41
|
+
"page": 1,
|
|
42
|
+
"perPage": 20,
|
|
43
|
+
"total": 100
|
|
44
|
+
},
|
|
45
|
+
"errors": null
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
{{/if}}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Error Handling
|
|
53
|
+
|
|
54
|
+
### Error Response Structure
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"error": {
|
|
58
|
+
"code": "VALIDATION_FAILED",
|
|
59
|
+
"message": "User-friendly message",
|
|
60
|
+
"details": [
|
|
61
|
+
{
|
|
62
|
+
"field": "email",
|
|
63
|
+
"message": "Invalid email format"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"requestId": "req_abc123"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### HTTP Status Codes
|
|
72
|
+
{{#if errorCodes}}
|
|
73
|
+
{{#each errorCodes}}
|
|
74
|
+
- **{{this.code}}** — {{this.description}}
|
|
75
|
+
{{/each}}
|
|
76
|
+
{{else}}
|
|
77
|
+
- **200** — Success
|
|
78
|
+
- **201** — Created
|
|
79
|
+
- **204** — No Content
|
|
80
|
+
- **400** — Bad Request (validation errors)
|
|
81
|
+
- **401** — Unauthorized (not logged in)
|
|
82
|
+
- **403** — Forbidden (logged in, no permission)
|
|
83
|
+
- **404** — Not Found
|
|
84
|
+
- **409** — Conflict (duplicate, state mismatch)
|
|
85
|
+
- **422** — Unprocessable Entity
|
|
86
|
+
- **429** — Too Many Requests (rate limit)
|
|
87
|
+
- **500** — Internal Server Error
|
|
88
|
+
- **503** — Service Unavailable
|
|
89
|
+
{{/if}}
|
|
90
|
+
|
|
91
|
+
### Error Codes Naming
|
|
92
|
+
{{#if errorNaming}}
|
|
93
|
+
Use {{errorNaming}}
|
|
94
|
+
{{else}}
|
|
95
|
+
Use SCREAMING_SNAKE_CASE for error codes:
|
|
96
|
+
- `VALIDATION_FAILED`
|
|
97
|
+
- `AUTHENTICATION_REQUIRED`
|
|
98
|
+
- `RATE_LIMIT_EXCEEDED`
|
|
99
|
+
- `RESOURCE_NOT_FOUND`
|
|
100
|
+
{{/if}}
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Authentication & Authorization
|
|
105
|
+
|
|
106
|
+
{{#if authPatterns}}
|
|
107
|
+
{{authPatterns}}
|
|
108
|
+
{{else}}
|
|
109
|
+
### Authentication
|
|
110
|
+
- Use JWT tokens with httpOnly cookies
|
|
111
|
+
- Include `expiresIn` claim
|
|
112
|
+
- Refresh token endpoint: `POST /api/v1/auth/refresh`
|
|
113
|
+
|
|
114
|
+
### Authorization
|
|
115
|
+
- Check permissions at route level
|
|
116
|
+
- Use role-based access control (RBAC)
|
|
117
|
+
- Return 403 for permission errors (not 401)
|
|
118
|
+
{{/if}}
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Pagination
|
|
123
|
+
|
|
124
|
+
### Standard Pagination
|
|
125
|
+
{{#if pagination}}
|
|
126
|
+
{{pagination}}
|
|
127
|
+
{{else}}
|
|
128
|
+
Default: page-based pagination
|
|
129
|
+
```
|
|
130
|
+
GET /api/v1/users?page=1&perPage=20
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Response:
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"data": [...],
|
|
137
|
+
"meta": {
|
|
138
|
+
"page": 1,
|
|
139
|
+
"perPage": 20,
|
|
140
|
+
"totalPages": 5,
|
|
141
|
+
"total": 100
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
{{/if}}
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Rate Limiting
|
|
150
|
+
|
|
151
|
+
{{#if rateLimiting}}
|
|
152
|
+
{{rateLimiting}}
|
|
153
|
+
{{else}}
|
|
154
|
+
- Standard: 100 requests/minute per IP
|
|
155
|
+
- Authenticated: 1000 requests/minute per user
|
|
156
|
+
- Headers returned:
|
|
157
|
+
- `X-RateLimit-Limit`
|
|
158
|
+
- `X-RateLimit-Remaining`
|
|
159
|
+
- `X-RateLimit-Reset`
|
|
160
|
+
{{/if}}
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Versioning
|
|
165
|
+
|
|
166
|
+
{{#if apiVersioning}}
|
|
167
|
+
{{apiVersioning}}
|
|
168
|
+
{{else}}
|
|
169
|
+
- URL-based versioning: `/api/v1/`, `/api/v2/`
|
|
170
|
+
- Maintain backward compatibility for at least one major version
|
|
171
|
+
- Document deprecation timeline
|
|
172
|
+
{{/if}}
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Validation
|
|
177
|
+
|
|
178
|
+
{{#if validationRules}}
|
|
179
|
+
{{validationRules}}
|
|
180
|
+
{{else}}
|
|
181
|
+
### Request Validation
|
|
182
|
+
- Validate all inputs at handler boundary
|
|
183
|
+
- Return detailed field-level errors
|
|
184
|
+
- Use Zod or similar schema validation
|
|
185
|
+
|
|
186
|
+
### Response Validation
|
|
187
|
+
- Validate contracts against OpenAPI schema
|
|
188
|
+
- Type-safe client generation from OpenAPI
|
|
189
|
+
{{/if}}
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## OpenAPI Contract Requirements
|
|
194
|
+
|
|
195
|
+
{{#if openApiRequirements}}
|
|
196
|
+
{{openApiRequirements}}
|
|
197
|
+
{{else}}
|
|
198
|
+
Every API must have:
|
|
199
|
+
1. OpenAPI 3.1 spec in `/contracts/`
|
|
200
|
+
2. All endpoints documented with:
|
|
201
|
+
- Summary and description
|
|
202
|
+
- Request/response schemas
|
|
203
|
+
- Error responses
|
|
204
|
+
- Authentication requirements
|
|
205
|
+
3. Auto-generated TypeScript types
|
|
206
|
+
4. Example requests/responses
|
|
207
|
+
{{/if}}
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
> **Token Budget:** ~1000 tokens max
|
|
212
|
+
> **Loaded On-Demand** — Only when working on API code
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# Security Baseline — {{projectName}}
|
|
2
|
+
|
|
3
|
+
> **Scope:** Security requirements and practices | **Loaded On-Demand**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Security Principles
|
|
8
|
+
|
|
9
|
+
{{#if securityPrinciples}}
|
|
10
|
+
{{#each securityPrinciples}}
|
|
11
|
+
- {{this}}
|
|
12
|
+
{{/each}}
|
|
13
|
+
{{else}}
|
|
14
|
+
- **Never trust user input** — Validate, sanitize, verify
|
|
15
|
+
- **Defense in depth** — Multiple layers of security
|
|
16
|
+
- **Least privilege** — Minimal access required
|
|
17
|
+
- **Fail secure** — Error states don't expose data
|
|
18
|
+
- **Security by design** — Built in, not bolted on
|
|
19
|
+
{{/if}}
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Authentication
|
|
24
|
+
|
|
25
|
+
### Password Requirements
|
|
26
|
+
{{#if passwordPolicy}}
|
|
27
|
+
{{passwordPolicy}}
|
|
28
|
+
{{else}}
|
|
29
|
+
- Minimum 12 characters
|
|
30
|
+
- Require: uppercase, lowercase, number, special char
|
|
31
|
+
- Check against common password lists
|
|
32
|
+
- No personal information (name, email)
|
|
33
|
+
{{/if}}
|
|
34
|
+
|
|
35
|
+
### Session Management
|
|
36
|
+
{{#if sessionManagement}}
|
|
37
|
+
{{sessionManagement}}
|
|
38
|
+
{{else}}
|
|
39
|
+
- JWT tokens with short expiration (15 minutes)
|
|
40
|
+
- Refresh tokens with longer expiration (7 days)
|
|
41
|
+
- httpOnly, secure, SameSite cookies
|
|
42
|
+
- Invalidate on logout
|
|
43
|
+
- Rotate tokens periodically
|
|
44
|
+
{{/if}}
|
|
45
|
+
|
|
46
|
+
### Multi-Factor Authentication
|
|
47
|
+
{{#if mfa}}
|
|
48
|
+
{{mfa}}
|
|
49
|
+
{{else}}
|
|
50
|
+
- Require MFA for admin accounts
|
|
51
|
+
- Support TOTP (Google Authenticator)
|
|
52
|
+
- Backup codes for recovery
|
|
53
|
+
{{/if}}
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Authorization
|
|
58
|
+
|
|
59
|
+
### Access Control
|
|
60
|
+
{{#if accessControl}}
|
|
61
|
+
{{accessControl}}
|
|
62
|
+
{{else}}
|
|
63
|
+
- Role-Based Access Control (RBAC)
|
|
64
|
+
- Check permissions at every layer (API, service, data)
|
|
65
|
+
- Default deny: explicit allow only
|
|
66
|
+
- Audit all authorization decisions
|
|
67
|
+
{{/if}}
|
|
68
|
+
|
|
69
|
+
### Role Hierarchy
|
|
70
|
+
{{#if roles}}
|
|
71
|
+
{{#each roles}}
|
|
72
|
+
- **{{this.name}}:** {{this.description}}
|
|
73
|
+
{{/each}}
|
|
74
|
+
{{else}}
|
|
75
|
+
- **guest** — Unauthenticated access
|
|
76
|
+
- **user** — Authenticated, basic access
|
|
77
|
+
- **admin** — Full system access
|
|
78
|
+
- **superadmin** — Emergency access, audit only
|
|
79
|
+
{{/if}}
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Input Validation
|
|
84
|
+
|
|
85
|
+
### Validation Rules
|
|
86
|
+
{{#if inputValidation}}
|
|
87
|
+
{{inputValidation}}
|
|
88
|
+
{{else}}
|
|
89
|
+
- Validate all inputs at API boundary
|
|
90
|
+
- Use schema validation (Zod/Joi/Yup)
|
|
91
|
+
- Whitelist allowed values (don't blacklist)
|
|
92
|
+
- Sanitize HTML (DOMPurify)
|
|
93
|
+
- Truncate excessively long inputs
|
|
94
|
+
{{/if}}
|
|
95
|
+
|
|
96
|
+
### SQL Injection Prevention
|
|
97
|
+
{{#if sqlPrevention}}
|
|
98
|
+
{{sqlPrevention}}
|
|
99
|
+
{{else}}
|
|
100
|
+
- Use parameterized queries only
|
|
101
|
+
- Never concatenate SQL strings
|
|
102
|
+
- Use ORM-provided query builders
|
|
103
|
+
- Enable query logging in development
|
|
104
|
+
{{/if}}
|
|
105
|
+
|
|
106
|
+
### XSS Prevention
|
|
107
|
+
{{#if xssPrevention}}
|
|
108
|
+
{{xssPrevention}}
|
|
109
|
+
{{else}}
|
|
110
|
+
- Escape all user-generated content
|
|
111
|
+
- Use CSP headers (Content-Security-Policy)
|
|
112
|
+
- Set `httpOnly` cookies
|
|
113
|
+
- Validate and sanitize file uploads
|
|
114
|
+
{{/if}}
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Data Protection
|
|
119
|
+
|
|
120
|
+
### Encryption at Rest
|
|
121
|
+
{{#if encryptionAtRest}}
|
|
122
|
+
{{encryptionAtRest}}
|
|
123
|
+
{{else}}
|
|
124
|
+
- Database: {{encryption.db}}
|
|
125
|
+
- File storage: {{encryption.files}}
|
|
126
|
+
- Secrets: {{encryption.secrets}}
|
|
127
|
+
- Backup: {{encryption.backup}}
|
|
128
|
+
{{/if}}
|
|
129
|
+
|
|
130
|
+
### Encryption in Transit
|
|
131
|
+
{{#if encryptionInTransit}}
|
|
132
|
+
{{encryptionInTransit}}
|
|
133
|
+
{{else}}
|
|
134
|
+
- HTTPS only (TLS 1.3+)
|
|
135
|
+
- HSTS headers enabled
|
|
136
|
+
- Secure cipher suites only
|
|
137
|
+
{{/if}}
|
|
138
|
+
|
|
139
|
+
### PII Handling
|
|
140
|
+
{{#if piiHandling}}
|
|
141
|
+
{{piiHandling}}
|
|
142
|
+
{{else}}
|
|
143
|
+
- Identify all PII in code (comment: # PII)
|
|
144
|
+
- Encrypt sensitive fields in database
|
|
145
|
+
- Log PII only when necessary
|
|
146
|
+
- Mask PII in logs (email: u***@example.com)
|
|
147
|
+
{{/if}}
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## API Security
|
|
152
|
+
|
|
153
|
+
### Rate Limiting
|
|
154
|
+
{{#if rateLimiting}}
|
|
155
|
+
{{rateLimiting}}
|
|
156
|
+
{{else}}
|
|
157
|
+
- Per-IP limits for anonymous: 100/min
|
|
158
|
+
- Per-user limits: 1000/min
|
|
159
|
+
- Per-endpoint limits for expensive operations
|
|
160
|
+
- Track with Redis, expire after window
|
|
161
|
+
{{/if}}
|
|
162
|
+
|
|
163
|
+
### API Key Management
|
|
164
|
+
{{#if apiKeyManagement}}
|
|
165
|
+
{{apiKeyManagement}}
|
|
166
|
+
{{else}}
|
|
167
|
+
- Rotate API keys quarterly
|
|
168
|
+
- Include key owner in key metadata
|
|
169
|
+
- Revoke immediately on leak
|
|
170
|
+
- Monitor usage patterns
|
|
171
|
+
{{/if}}
|
|
172
|
+
|
|
173
|
+
### CORS Configuration
|
|
174
|
+
{{#if cors}}
|
|
175
|
+
{{cors}}
|
|
176
|
+
{{else}}
|
|
177
|
+
- Whitelist allowed origins only
|
|
178
|
+
- Don't use `*` in production
|
|
179
|
+
- Expose only necessary headers
|
|
180
|
+
- Max age: 1 hour
|
|
181
|
+
{{/if}}
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Dependencies
|
|
186
|
+
|
|
187
|
+
### Supply Chain Security
|
|
188
|
+
{{#if supplyChain}}
|
|
189
|
+
{{supplyChain}}
|
|
190
|
+
{{else}}
|
|
191
|
+
- Lock dependency versions
|
|
192
|
+
- Run `npm audit` in CI
|
|
193
|
+
- Use Dependabot or Renovate
|
|
194
|
+
- Review PR from dependabots
|
|
195
|
+
- Pin action versions in GitHub Actions
|
|
196
|
+
{{/if}}
|
|
197
|
+
|
|
198
|
+
### Vulnerability Scanning
|
|
199
|
+
{{#if vulnScanning}}
|
|
200
|
+
{{vulnScanning}}
|
|
201
|
+
{{else}}
|
|
202
|
+
- SAST: {{sastTool}} in CI
|
|
203
|
+
- SCA: {{scaTool}} for dependencies
|
|
204
|
+
- DAST: {{dastTool}} on staging
|
|
205
|
+
- Container scan: {{containerScanTool}}
|
|
206
|
+
{{/if}}
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Secrets Management
|
|
211
|
+
|
|
212
|
+
### Secrets Policy
|
|
213
|
+
{{#if secretsPolicy}}
|
|
214
|
+
{{secretsPolicy}}
|
|
215
|
+
{{else}}
|
|
216
|
+
- Never commit secrets to git
|
|
217
|
+
- Use environment variables or vault
|
|
218
|
+
- Rotate secrets quarterly
|
|
219
|
+
- Different secrets per environment
|
|
220
|
+
{{/if}}
|
|
221
|
+
|
|
222
|
+
### Secrets Storage
|
|
223
|
+
{{#if secretsStorage}}
|
|
224
|
+
{{secretsStorage}}
|
|
225
|
+
{{else}}
|
|
226
|
+
- Development: `.env` (gitignored)
|
|
227
|
+
- Production: {{secretsManager}}
|
|
228
|
+
- CI/CD: {{ciSecrets}}
|
|
229
|
+
{{/if}}
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Logging & Monitoring
|
|
234
|
+
|
|
235
|
+
### Security Logging
|
|
236
|
+
{{#if securityLogging}}
|
|
237
|
+
{{securityLogging}}
|
|
238
|
+
{{else}}
|
|
239
|
+
Log all security events:
|
|
240
|
+
- Failed authentication
|
|
241
|
+
- Authorization failures
|
|
242
|
+
- Rate limit violations
|
|
243
|
+
- Admin actions
|
|
244
|
+
- Data exports
|
|
245
|
+
- Configuration changes
|
|
246
|
+
|
|
247
|
+
Include:
|
|
248
|
+
- Timestamp
|
|
249
|
+
- User ID (if available)
|
|
250
|
+
- IP address
|
|
251
|
+
- Action
|
|
252
|
+
- Result
|
|
253
|
+
{{/if}}
|
|
254
|
+
|
|
255
|
+
### Alerting
|
|
256
|
+
{{#if alerting}}
|
|
257
|
+
{{alerting}}
|
|
258
|
+
{{else}}
|
|
259
|
+
Alert on:
|
|
260
|
+
- > 10 failed auth attempts / 5 min / IP
|
|
261
|
+
- > 100 failed auth attempts / 5 min globally
|
|
262
|
+
- New admin account created
|
|
263
|
+
- Database backup accessed
|
|
264
|
+
- Unusual data export volume
|
|
265
|
+
{{/if}}
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Compliance
|
|
270
|
+
|
|
271
|
+
{{#if compliance}}
|
|
272
|
+
{{#each compliance}}
|
|
273
|
+
### {{this.framework}}
|
|
274
|
+
{{this.requirements}}
|
|
275
|
+
{{/each}}
|
|
276
|
+
{{/if}}
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Security Checklist
|
|
281
|
+
|
|
282
|
+
Before deploying:
|
|
283
|
+
{{#if deploymentChecklist}}
|
|
284
|
+
{{#each deploymentChecklist}}
|
|
285
|
+
- [ ] {{this}}
|
|
286
|
+
{{/each}}
|
|
287
|
+
{{else}}
|
|
288
|
+
- [ ] All dependencies audited
|
|
289
|
+
- [ ] No secrets in code
|
|
290
|
+
- [ ] HTTPS enabled
|
|
291
|
+
- [ ] CORS configured
|
|
292
|
+
- [ ] Rate limiting enabled
|
|
293
|
+
- [ ] Input validation on all endpoints
|
|
294
|
+
- [ ] Authentication required for sensitive operations
|
|
295
|
+
- [ ] Authorization checks on all endpoints
|
|
296
|
+
- [ ] Security headers configured
|
|
297
|
+
- [ ] Logging enabled
|
|
298
|
+
- [ ] Error handling doesn't leak info
|
|
299
|
+
- [ ] File upload validation
|
|
300
|
+
- [ ] Database encryption enabled
|
|
301
|
+
{{/if}}
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Incident Response
|
|
306
|
+
|
|
307
|
+
{{#if incidentResponse}}
|
|
308
|
+
{{incidentResponse}}
|
|
309
|
+
{{else}}
|
|
310
|
+
### Breach Response
|
|
311
|
+
1. **Detect** — Monitoring/alerts fire
|
|
312
|
+
2. **Contain** — Isolate affected systems
|
|
313
|
+
3. **Investigate** — Determine scope and impact
|
|
314
|
+
4. **Remediate** — Patch vulnerabilities
|
|
315
|
+
5. **Recover** — Restore from backups if needed
|
|
316
|
+
6. **Post-mortem** — Document and improve
|
|
317
|
+
{{/if}}
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
> **Token Budget:** ~1000 tokens max
|
|
322
|
+
> **Loaded On-Demand** — Only when working on security
|