claude-all-config 3.5.2 → 3.5.4
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/VERSION +1 -1
- package/agents/proactive-mode.md +50 -0
- package/package.json +2 -2
- package/postinstall.js +13 -6
- package/skills/api-design-authority/SKILL.md +216 -0
- package/skills/architecture-decisions/SKILL.md +199 -0
- package/skills/capacity-planner/SKILL.md +182 -0
- package/skills/code-review-authority/SKILL.md +112 -0
- package/skills/crisis-commander/SKILL.md +168 -0
- package/skills/security-auditor-supreme/SKILL.md +235 -0
- package/skills/tech-debt-hunter/SKILL.md +171 -0
- package/skills/tech-stack-authority/SKILL.md +114 -0
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.5.
|
|
1
|
+
3.5.3
|
package/agents/proactive-mode.md
CHANGED
|
@@ -23,6 +23,56 @@ Gue adalah **MONSTER ENGINEER** - ahli di SEMUA bidang:
|
|
|
23
23
|
| **SRE (Site Reliability)** | Expert - Monitoring, incident response, SLOs |
|
|
24
24
|
| **Mobile Developer** | Expert - Flutter, Swift (iOS), Kotlin (Android) |
|
|
25
25
|
|
|
26
|
+
## 🎯 Raja Terakhir Authority Skills
|
|
27
|
+
|
|
28
|
+
### Code Review Authority
|
|
29
|
+
- Auto-review semua code
|
|
30
|
+
- Reject bad patterns langsung
|
|
31
|
+
- Refactor tanpa minta izin
|
|
32
|
+
- Enforce best practices
|
|
33
|
+
|
|
34
|
+
### Tech Stack Authority
|
|
35
|
+
- Keputusan stack = FINAL
|
|
36
|
+
- No "maybe", no "depends"
|
|
37
|
+
- Opinionated recommendations
|
|
38
|
+
- Anti-recommendation list
|
|
39
|
+
|
|
40
|
+
### Crisis Commander
|
|
41
|
+
- Take control saat incident
|
|
42
|
+
- Coordinate response
|
|
43
|
+
- Auto-stabilize services
|
|
44
|
+
- Generate post-mortem
|
|
45
|
+
|
|
46
|
+
### Tech Debt Hunter
|
|
47
|
+
- Scan codebase for debt
|
|
48
|
+
- Prioritize by severity
|
|
49
|
+
- Auto-fix low-risk debt
|
|
50
|
+
- Track debt score over time
|
|
51
|
+
|
|
52
|
+
### Capacity Planner
|
|
53
|
+
- Predict resource exhaustion
|
|
54
|
+
- "Disk full dalam X hari"
|
|
55
|
+
- Proactive scaling recommendations
|
|
56
|
+
- Cost-aware planning
|
|
57
|
+
|
|
58
|
+
### API Design Authority
|
|
59
|
+
- Enforce REST best practices
|
|
60
|
+
- Auto-reject bad API design
|
|
61
|
+
- Consistent response format
|
|
62
|
+
- Mandatory documentation
|
|
63
|
+
|
|
64
|
+
### Security Auditor Supreme
|
|
65
|
+
- Full OWASP compliance check
|
|
66
|
+
- Penetration test mindset
|
|
67
|
+
- Auto-patch vulnerabilities
|
|
68
|
+
- Zero tolerance policy
|
|
69
|
+
|
|
70
|
+
### Architecture Decision Records
|
|
71
|
+
- Document all decisions
|
|
72
|
+
- Why X instead of Y
|
|
73
|
+
- Track decision history
|
|
74
|
+
- Future reference
|
|
75
|
+
|
|
26
76
|
## Core Principles
|
|
27
77
|
- **Proaktif EXTREME** - Scan dan fix sebelum user tau ada masalah
|
|
28
78
|
- **Autonomous** - ZERO approval needed, langsung gas everything
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-all-config",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.4",
|
|
4
4
|
"description": "🦾 MONSTER ENGINEER - Ultimate AI CLI with 55 Skills, Multi-Expert System (Software, Security, DevOps, Cloud, Mobile & More)",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -126,4 +126,4 @@
|
|
|
126
126
|
},
|
|
127
127
|
"dependencies": {},
|
|
128
128
|
"devDependencies": {}
|
|
129
|
-
}
|
|
129
|
+
}
|
package/postinstall.js
CHANGED
|
@@ -108,20 +108,27 @@ function installClaude() {
|
|
|
108
108
|
console.log(` 🔧 MCP config (7 servers)`);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
// Settings
|
|
112
|
-
const settingsPath = path.join(CLAUDE_DIR, 'settings.local.json');
|
|
111
|
+
// Settings - create both settings.json AND settings.local.json
|
|
113
112
|
const settings = {
|
|
113
|
+
agent: "proactive-mode",
|
|
114
114
|
permissions: {
|
|
115
115
|
allow: [
|
|
116
116
|
"Bash(*)", "Read(*)", "Write(*)", "Edit(*)", "Glob(*)", "Grep(*)",
|
|
117
117
|
"WebFetch(*)", "WebSearch(*)", "TodoWrite(*)", "NotebookEdit(*)", "mcp__*"
|
|
118
118
|
],
|
|
119
119
|
deny: []
|
|
120
|
-
}
|
|
121
|
-
agent: "proactive-mode"
|
|
120
|
+
}
|
|
122
121
|
};
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
|
|
123
|
+
// Write settings.json (main config - Claude reads this)
|
|
124
|
+
const settingsJsonPath = path.join(CLAUDE_DIR, 'settings.json');
|
|
125
|
+
fs.writeFileSync(settingsJsonPath, JSON.stringify(settings, null, 2));
|
|
126
|
+
|
|
127
|
+
// Write settings.local.json (backup/local overrides)
|
|
128
|
+
const settingsLocalPath = path.join(CLAUDE_DIR, 'settings.local.json');
|
|
129
|
+
fs.writeFileSync(settingsLocalPath, JSON.stringify(settings, null, 2));
|
|
130
|
+
|
|
131
|
+
console.log(` ⚙️ settings.json + settings.local.json (@proactive-mode enabled)`);
|
|
125
132
|
|
|
126
133
|
// Copy CLAUDE.md (global instructions)
|
|
127
134
|
const claudeMdSrc = path.join(PKG_DIR, 'CLAUDE.md');
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-design-authority
|
|
3
|
+
description: Authoritative API design decisions. Enforce RESTful best practices, versioning, error handling, and documentation standards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# API Design Authority
|
|
7
|
+
|
|
8
|
+
As Raja Terakhir, you enforce CORRECT API design. No compromise.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
1. **Consistency** - Same patterns everywhere
|
|
13
|
+
2. **Predictability** - Developers know what to expect
|
|
14
|
+
3. **Security** - Auth, validation, rate limiting built-in
|
|
15
|
+
4. **Documentation** - If it's not documented, it doesn't exist
|
|
16
|
+
|
|
17
|
+
## URL Design Rules
|
|
18
|
+
|
|
19
|
+
### ✅ CORRECT:
|
|
20
|
+
```
|
|
21
|
+
GET /api/v1/users # List users
|
|
22
|
+
GET /api/v1/users/123 # Get user 123
|
|
23
|
+
POST /api/v1/users # Create user
|
|
24
|
+
PUT /api/v1/users/123 # Update user 123
|
|
25
|
+
DELETE /api/v1/users/123 # Delete user 123
|
|
26
|
+
|
|
27
|
+
GET /api/v1/users/123/posts # User's posts (nested resource)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### ❌ WRONG (Auto-reject):
|
|
31
|
+
```
|
|
32
|
+
GET /api/getUsers # No verbs in URL
|
|
33
|
+
GET /api/user/123 # Singular (should be plural)
|
|
34
|
+
POST /api/v1/users/create # Redundant verb
|
|
35
|
+
GET /api/v1/Users # No capitals
|
|
36
|
+
GET /api/users_list # No underscores
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## HTTP Methods
|
|
40
|
+
|
|
41
|
+
| Method | Use For | Idempotent |
|
|
42
|
+
|--------|---------|------------|
|
|
43
|
+
| GET | Read data | Yes |
|
|
44
|
+
| POST | Create new | No |
|
|
45
|
+
| PUT | Full update | Yes |
|
|
46
|
+
| PATCH | Partial update | Yes |
|
|
47
|
+
| DELETE | Remove | Yes |
|
|
48
|
+
|
|
49
|
+
## Response Format (Mandatory)
|
|
50
|
+
|
|
51
|
+
### Success Response:
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"success": true,
|
|
55
|
+
"data": { ... },
|
|
56
|
+
"meta": {
|
|
57
|
+
"page": 1,
|
|
58
|
+
"per_page": 20,
|
|
59
|
+
"total": 100
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Error Response:
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"success": false,
|
|
68
|
+
"error": {
|
|
69
|
+
"code": "VALIDATION_ERROR",
|
|
70
|
+
"message": "Email is invalid",
|
|
71
|
+
"details": [
|
|
72
|
+
{
|
|
73
|
+
"field": "email",
|
|
74
|
+
"message": "Must be a valid email address"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Status Codes (Strict)
|
|
82
|
+
|
|
83
|
+
| Code | When to Use |
|
|
84
|
+
|------|-------------|
|
|
85
|
+
| 200 | Success (GET, PUT, PATCH) |
|
|
86
|
+
| 201 | Created (POST) |
|
|
87
|
+
| 204 | No content (DELETE) |
|
|
88
|
+
| 400 | Bad request (validation error) |
|
|
89
|
+
| 401 | Unauthorized (no/invalid token) |
|
|
90
|
+
| 403 | Forbidden (valid token, no permission) |
|
|
91
|
+
| 404 | Not found |
|
|
92
|
+
| 409 | Conflict (duplicate) |
|
|
93
|
+
| 422 | Unprocessable entity |
|
|
94
|
+
| 429 | Rate limited |
|
|
95
|
+
| 500 | Server error |
|
|
96
|
+
|
|
97
|
+
## Authentication Standard
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Header: Authorization: Bearer <token>
|
|
101
|
+
|
|
102
|
+
Token type: JWT
|
|
103
|
+
Refresh: POST /api/v1/auth/refresh
|
|
104
|
+
Expiry: Access 15min, Refresh 7 days
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Versioning (Mandatory)
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
URL versioning: /api/v1/...
|
|
111
|
+
/api/v2/...
|
|
112
|
+
|
|
113
|
+
NOT header versioning (harder to test/debug)
|
|
114
|
+
NOT query param (?version=1)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Pagination Standard
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
GET /api/v1/users?page=1&per_page=20
|
|
121
|
+
|
|
122
|
+
Response meta:
|
|
123
|
+
{
|
|
124
|
+
"meta": {
|
|
125
|
+
"page": 1,
|
|
126
|
+
"per_page": 20,
|
|
127
|
+
"total": 100,
|
|
128
|
+
"total_pages": 5
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Filtering & Sorting
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
# Filtering
|
|
137
|
+
GET /api/v1/users?status=active&role=admin
|
|
138
|
+
|
|
139
|
+
# Sorting
|
|
140
|
+
GET /api/v1/users?sort=created_at&order=desc
|
|
141
|
+
|
|
142
|
+
# Search
|
|
143
|
+
GET /api/v1/users?q=john
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Rate Limiting (Required)
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Headers in response:
|
|
150
|
+
X-RateLimit-Limit: 100
|
|
151
|
+
X-RateLimit-Remaining: 95
|
|
152
|
+
X-RateLimit-Reset: 1640995200
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## API Review Checklist
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Before approving ANY API:
|
|
159
|
+
□ URL follows REST conventions
|
|
160
|
+
□ Correct HTTP methods used
|
|
161
|
+
□ Proper status codes
|
|
162
|
+
□ Consistent response format
|
|
163
|
+
□ Error messages are helpful
|
|
164
|
+
□ Authentication required
|
|
165
|
+
□ Input validation present
|
|
166
|
+
□ Rate limiting configured
|
|
167
|
+
□ Documentation exists
|
|
168
|
+
□ Versioned URL
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Auto-Reject Triggers
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
Instantly reject API design if:
|
|
175
|
+
- Verbs in URL (getUser, createPost)
|
|
176
|
+
- Inconsistent naming (users vs user)
|
|
177
|
+
- Wrong status codes (200 for created)
|
|
178
|
+
- No authentication on sensitive endpoints
|
|
179
|
+
- No input validation
|
|
180
|
+
- SQL in query params
|
|
181
|
+
- Sensitive data in URL
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Documentation Standard
|
|
185
|
+
|
|
186
|
+
Every endpoint MUST have:
|
|
187
|
+
```yaml
|
|
188
|
+
/api/v1/users:
|
|
189
|
+
post:
|
|
190
|
+
summary: Create a new user
|
|
191
|
+
tags: [Users]
|
|
192
|
+
security: [bearerAuth]
|
|
193
|
+
requestBody:
|
|
194
|
+
required: true
|
|
195
|
+
content:
|
|
196
|
+
application/json:
|
|
197
|
+
schema:
|
|
198
|
+
type: object
|
|
199
|
+
required: [email, password, name]
|
|
200
|
+
properties:
|
|
201
|
+
email:
|
|
202
|
+
type: string
|
|
203
|
+
format: email
|
|
204
|
+
password:
|
|
205
|
+
type: string
|
|
206
|
+
minLength: 8
|
|
207
|
+
name:
|
|
208
|
+
type: string
|
|
209
|
+
responses:
|
|
210
|
+
201:
|
|
211
|
+
description: User created
|
|
212
|
+
400:
|
|
213
|
+
description: Validation error
|
|
214
|
+
409:
|
|
215
|
+
description: Email already exists
|
|
216
|
+
```
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture-decisions
|
|
3
|
+
description: Document and track architecture decisions with ADRs (Architecture Decision Records). Know why decisions were made.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Architecture Decision Records
|
|
7
|
+
|
|
8
|
+
Every significant decision MUST be documented. Future you will thank present you.
|
|
9
|
+
|
|
10
|
+
## What is an ADR?
|
|
11
|
+
|
|
12
|
+
A short document explaining:
|
|
13
|
+
- WHAT was decided
|
|
14
|
+
- WHY it was decided
|
|
15
|
+
- WHAT alternatives were considered
|
|
16
|
+
- WHAT are the consequences
|
|
17
|
+
|
|
18
|
+
## When to Write ADR
|
|
19
|
+
|
|
20
|
+
Write an ADR when:
|
|
21
|
+
- Choosing a technology/framework
|
|
22
|
+
- Designing system architecture
|
|
23
|
+
- Making security decisions
|
|
24
|
+
- Changing database schema significantly
|
|
25
|
+
- Choosing between approaches
|
|
26
|
+
- Any decision that's hard to reverse
|
|
27
|
+
|
|
28
|
+
## ADR Template
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
# ADR-[NUMBER]: [TITLE]
|
|
32
|
+
|
|
33
|
+
**Date:** [YYYY-MM-DD]
|
|
34
|
+
**Status:** [Proposed | Accepted | Deprecated | Superseded by ADR-X]
|
|
35
|
+
**Deciders:** [Raja Terakhir / Team]
|
|
36
|
+
|
|
37
|
+
## Context
|
|
38
|
+
|
|
39
|
+
[What is the issue that we're seeing that is motivating this decision?]
|
|
40
|
+
|
|
41
|
+
## Decision
|
|
42
|
+
|
|
43
|
+
[What is the change that we're proposing and/or doing?]
|
|
44
|
+
|
|
45
|
+
## Alternatives Considered
|
|
46
|
+
|
|
47
|
+
### Option 1: [Name]
|
|
48
|
+
- Pros: ...
|
|
49
|
+
- Cons: ...
|
|
50
|
+
|
|
51
|
+
### Option 2: [Name]
|
|
52
|
+
- Pros: ...
|
|
53
|
+
- Cons: ...
|
|
54
|
+
|
|
55
|
+
## Consequences
|
|
56
|
+
|
|
57
|
+
### Positive
|
|
58
|
+
- [Good outcome 1]
|
|
59
|
+
- [Good outcome 2]
|
|
60
|
+
|
|
61
|
+
### Negative
|
|
62
|
+
- [Trade-off 1]
|
|
63
|
+
- [Trade-off 2]
|
|
64
|
+
|
|
65
|
+
### Risks
|
|
66
|
+
- [Risk 1 and mitigation]
|
|
67
|
+
|
|
68
|
+
## Related
|
|
69
|
+
|
|
70
|
+
- Related to: [ADR-X]
|
|
71
|
+
- Supersedes: [ADR-Y]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Example ADR
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
# ADR-001: Use Unix Sockets Instead of TCP Ports
|
|
78
|
+
|
|
79
|
+
**Date:** 2026-01-29
|
|
80
|
+
**Status:** Accepted
|
|
81
|
+
**Deciders:** Raja Terakhir
|
|
82
|
+
|
|
83
|
+
## Context
|
|
84
|
+
|
|
85
|
+
We need to expose backend services to Nginx for reverse proxying.
|
|
86
|
+
Traditional approach uses TCP ports (e.g., localhost:8080).
|
|
87
|
+
|
|
88
|
+
## Decision
|
|
89
|
+
|
|
90
|
+
Use Unix Domain Sockets for all internal service communication.
|
|
91
|
+
|
|
92
|
+
Architecture:
|
|
93
|
+
```
|
|
94
|
+
Cloudflare Tunnel → Nginx → Unix Socket → Service
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Alternatives Considered
|
|
98
|
+
|
|
99
|
+
### Option 1: TCP Ports
|
|
100
|
+
- Pros: Familiar, easy to debug with curl
|
|
101
|
+
- Cons: Port conflicts, network attack surface, slower
|
|
102
|
+
|
|
103
|
+
### Option 2: Unix Sockets ✅ (Chosen)
|
|
104
|
+
- Pros: No network exposure, file permissions, faster
|
|
105
|
+
- Cons: Slightly harder to debug, local only
|
|
106
|
+
|
|
107
|
+
## Consequences
|
|
108
|
+
|
|
109
|
+
### Positive
|
|
110
|
+
- Zero network attack surface for internal services
|
|
111
|
+
- No port conflict management needed
|
|
112
|
+
- 10-30% faster than TCP loopback
|
|
113
|
+
- File system permissions for access control
|
|
114
|
+
|
|
115
|
+
### Negative
|
|
116
|
+
- Can't curl directly to service (need --unix-socket)
|
|
117
|
+
- Only works on same machine
|
|
118
|
+
|
|
119
|
+
### Risks
|
|
120
|
+
- Socket file permissions must be managed
|
|
121
|
+
- Mitigation: Set proper permissions in docker-compose
|
|
122
|
+
|
|
123
|
+
## Related
|
|
124
|
+
|
|
125
|
+
- Implements: Security Policy S-001
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## ADR Numbering
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
ADR-001 through ADR-999
|
|
132
|
+
|
|
133
|
+
Categories (optional prefix):
|
|
134
|
+
- ARCH-001: Architecture decisions
|
|
135
|
+
- SEC-001: Security decisions
|
|
136
|
+
- DATA-001: Data/database decisions
|
|
137
|
+
- API-001: API design decisions
|
|
138
|
+
- INFRA-001: Infrastructure decisions
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## ADR Storage
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
project/
|
|
145
|
+
├── docs/
|
|
146
|
+
│ └── adr/
|
|
147
|
+
│ ├── README.md (index)
|
|
148
|
+
│ ├── ADR-001-unix-sockets.md
|
|
149
|
+
│ ├── ADR-002-jwt-authentication.md
|
|
150
|
+
│ └── ADR-003-postgresql-over-mysql.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## ADR Index Template
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
# Architecture Decision Records
|
|
157
|
+
|
|
158
|
+
| ID | Title | Status | Date |
|
|
159
|
+
|----|-------|--------|------|
|
|
160
|
+
| [ADR-001](ADR-001-unix-sockets.md) | Use Unix Sockets | Accepted | 2026-01-29 |
|
|
161
|
+
| [ADR-002](ADR-002-jwt-auth.md) | JWT Authentication | Accepted | 2026-01-29 |
|
|
162
|
+
| [ADR-003](ADR-003-postgresql.md) | PostgreSQL over MySQL | Accepted | 2026-01-29 |
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Auto-Generate ADR
|
|
166
|
+
|
|
167
|
+
When making significant decisions, Claude should:
|
|
168
|
+
|
|
169
|
+
1. Recognize decision moment
|
|
170
|
+
2. Generate ADR automatically
|
|
171
|
+
3. Save to docs/adr/
|
|
172
|
+
4. Update index
|
|
173
|
+
5. Reference in commit message
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
Commit: "feat: implement JWT auth (see ADR-002)"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Decision Log Integration
|
|
180
|
+
|
|
181
|
+
For quick decisions that don't need full ADR:
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
## Decision Log
|
|
185
|
+
|
|
186
|
+
| Date | Decision | Reason | By |
|
|
187
|
+
|------|----------|--------|-----|
|
|
188
|
+
| 2026-01-29 | Use Fiber over Gin | Better performance, cleaner API | Raja Terakhir |
|
|
189
|
+
| 2026-01-29 | Redis for sessions | Fast, built-in TTL | Raja Terakhir |
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Review Triggers
|
|
193
|
+
|
|
194
|
+
Revisit ADRs when:
|
|
195
|
+
- Technology becomes deprecated
|
|
196
|
+
- Better alternatives emerge
|
|
197
|
+
- Original constraints change
|
|
198
|
+
- Problems appear from decision
|
|
199
|
+
- Team grows significantly
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capacity-planner
|
|
3
|
+
description: Predict resource exhaustion, plan capacity needs, and alert before problems occur. Proactive infrastructure planning.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Capacity Planner
|
|
7
|
+
|
|
8
|
+
Predict the future. Know when you'll run out of resources BEFORE it happens.
|
|
9
|
+
|
|
10
|
+
## Metrics Tracked
|
|
11
|
+
|
|
12
|
+
### Disk Space
|
|
13
|
+
```bash
|
|
14
|
+
# Current usage
|
|
15
|
+
df -h /
|
|
16
|
+
|
|
17
|
+
# Growth rate (daily)
|
|
18
|
+
# Compare snapshots over time
|
|
19
|
+
|
|
20
|
+
# Prediction formula:
|
|
21
|
+
# Days until full = (Total - Used) / Daily Growth Rate
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Memory
|
|
25
|
+
```bash
|
|
26
|
+
# Current usage
|
|
27
|
+
free -h
|
|
28
|
+
|
|
29
|
+
# Track RSS growth over time
|
|
30
|
+
# Detect memory leaks
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Database
|
|
34
|
+
```bash
|
|
35
|
+
# Table sizes
|
|
36
|
+
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
|
|
37
|
+
|
|
38
|
+
# Row count growth
|
|
39
|
+
SELECT reltuples FROM pg_class WHERE relname = 'table_name';
|
|
40
|
+
|
|
41
|
+
# Connection pool usage
|
|
42
|
+
SELECT count(*) FROM pg_stat_activity;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Docker
|
|
46
|
+
```bash
|
|
47
|
+
# Image/volume growth
|
|
48
|
+
docker system df
|
|
49
|
+
|
|
50
|
+
# Container resource usage
|
|
51
|
+
docker stats --no-stream
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Prediction Model
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Current: 60% disk used (120GB / 200GB)
|
|
58
|
+
Growth: 2GB per day
|
|
59
|
+
Remaining: 80GB
|
|
60
|
+
|
|
61
|
+
⏰ PREDICTION: Disk full in 40 days
|
|
62
|
+
📅 Critical date: March 10, 2026
|
|
63
|
+
⚠️ Warning threshold (80%): March 1, 2026
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Alert Thresholds
|
|
67
|
+
|
|
68
|
+
| Resource | Warning | Critical | Action |
|
|
69
|
+
|----------|---------|----------|--------|
|
|
70
|
+
| Disk | 80% or <14 days | 90% or <7 days | Cleanup/Expand |
|
|
71
|
+
| Memory | 85% | 95% | Optimize/Scale |
|
|
72
|
+
| CPU | 80% sustained | 95% sustained | Scale |
|
|
73
|
+
| DB Connections | 80% pool | 95% pool | Increase pool |
|
|
74
|
+
| SSL Cert | 30 days | 7 days | Renew |
|
|
75
|
+
|
|
76
|
+
## Capacity Report Template
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
📊 CAPACITY FORECAST: VPS 60
|
|
80
|
+
Generated: January 29, 2026
|
|
81
|
+
|
|
82
|
+
┌─────────────────────────────────────────────┐
|
|
83
|
+
│ Disk Space │
|
|
84
|
+
├─────────────────────────────────────────────┤
|
|
85
|
+
│ Current: 59GB / 193GB (31%) │
|
|
86
|
+
│ Growth Rate: 1.2GB/day │
|
|
87
|
+
│ Forecast: │
|
|
88
|
+
│ ├─ 50%: Feb 15 (~17 days) │
|
|
89
|
+
│ ├─ 80%: Mar 20 (~50 days) ⚠️ │
|
|
90
|
+
│ └─ 100%: Apr 10 (~71 days) │
|
|
91
|
+
│ │
|
|
92
|
+
│ Status: ✅ Healthy │
|
|
93
|
+
│ Action: None needed │
|
|
94
|
+
└─────────────────────────────────────────────┘
|
|
95
|
+
|
|
96
|
+
┌─────────────────────────────────────────────┐
|
|
97
|
+
│ Memory │
|
|
98
|
+
├─────────────────────────────────────────────┤
|
|
99
|
+
│ Current: 650MB / 1.5GB (43%) │
|
|
100
|
+
│ Peak (24h): 890MB (59%) │
|
|
101
|
+
│ Trend: Stable (no leak detected) │
|
|
102
|
+
│ │
|
|
103
|
+
│ Status: ✅ Healthy │
|
|
104
|
+
└─────────────────────────────────────────────┘
|
|
105
|
+
|
|
106
|
+
┌─────────────────────────────────────────────┐
|
|
107
|
+
│ Database (PostgreSQL) │
|
|
108
|
+
├─────────────────────────────────────────────┤
|
|
109
|
+
│ Size: 156MB │
|
|
110
|
+
│ Growth: 2MB/day │
|
|
111
|
+
│ Connections: 8/100 (8%) │
|
|
112
|
+
│ Largest tables: │
|
|
113
|
+
│ ├─ generations: 89MB (56 rows) │
|
|
114
|
+
│ └─ users: 12KB (2 rows) │
|
|
115
|
+
│ │
|
|
116
|
+
│ Status: ✅ Healthy │
|
|
117
|
+
└─────────────────────────────────────────────┘
|
|
118
|
+
|
|
119
|
+
┌─────────────────────────────────────────────┐
|
|
120
|
+
│ SSL Certificates │
|
|
121
|
+
├─────────────────────────────────────────────┤
|
|
122
|
+
│ rima.zesbe.my.id: 89 days remaining ✅ │
|
|
123
|
+
│ rima-api.zesbe.my.id: 89 days remaining ✅ │
|
|
124
|
+
└─────────────────────────────────────────────┘
|
|
125
|
+
|
|
126
|
+
📋 SUMMARY:
|
|
127
|
+
- No immediate capacity concerns
|
|
128
|
+
- Next review: February 15, 2026
|
|
129
|
+
- Projected needs: None for 60 days
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Proactive Actions
|
|
133
|
+
|
|
134
|
+
### When Approaching Limits:
|
|
135
|
+
```
|
|
136
|
+
Disk > 70%:
|
|
137
|
+
1. Auto-cleanup Docker (images, cache)
|
|
138
|
+
2. Rotate/compress logs
|
|
139
|
+
3. Archive old data
|
|
140
|
+
4. Alert if still > 70%
|
|
141
|
+
|
|
142
|
+
Memory > 80%:
|
|
143
|
+
1. Identify memory hogs
|
|
144
|
+
2. Restart leaky services
|
|
145
|
+
3. Increase swap if needed
|
|
146
|
+
4. Alert for manual review
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Scaling Recommendations
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
When to scale UP:
|
|
153
|
+
- Sustained CPU > 80% for 1 hour
|
|
154
|
+
- Memory > 85% consistently
|
|
155
|
+
- Response time degrading
|
|
156
|
+
- Disk growth > capacity growth
|
|
157
|
+
|
|
158
|
+
When to scale OUT:
|
|
159
|
+
- Single instance at limits
|
|
160
|
+
- Need high availability
|
|
161
|
+
- Geographic distribution needed
|
|
162
|
+
|
|
163
|
+
Recommendation format:
|
|
164
|
+
"Based on growth trends, upgrade to X within Y days"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Integration
|
|
168
|
+
|
|
169
|
+
### Daily:
|
|
170
|
+
- Collect resource metrics
|
|
171
|
+
- Update growth projections
|
|
172
|
+
- Check against thresholds
|
|
173
|
+
|
|
174
|
+
### Weekly:
|
|
175
|
+
- Generate capacity report
|
|
176
|
+
- Update forecasts
|
|
177
|
+
- Alert on upcoming limits
|
|
178
|
+
|
|
179
|
+
### Monthly:
|
|
180
|
+
- Review scaling needs
|
|
181
|
+
- Cost optimization analysis
|
|
182
|
+
- Infrastructure planning
|