moicle 2.0.0 → 2.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/README.md +20 -9
- package/assets/architecture/_shared/severity-levels.md +34 -0
- package/assets/architecture/_shared/stack-detection.md +34 -0
- package/assets/commands/marketing.md +7 -7
- package/assets/skills/docs/sync/SKILL.md +159 -519
- package/assets/skills/docs/write/SKILL.md +89 -186
- package/assets/skills/feature/new/SKILL.md +152 -192
- package/assets/skills/feature/refactor/SKILL.md +152 -233
- package/assets/skills/fix/hotfix/SKILL.md +139 -305
- package/assets/skills/fix/incident/SKILL.md +107 -19
- package/assets/skills/fix/pr-comment/SKILL.md +98 -224
- package/assets/skills/fix/root-cause/SKILL.md +161 -104
- package/assets/skills/{docs → marketing}/content/SKILL.md +4 -4
- package/assets/skills/marketing/logo/SKILL.md +252 -0
- package/assets/skills/marketing/seo-blog/SKILL.md +367 -0
- package/assets/skills/marketing/video/SKILL.md +258 -0
- package/assets/skills/research/onboarding/SKILL.md +127 -510
- package/assets/skills/research/spike/SKILL.md +128 -436
- package/assets/skills/research/web/SKILL.md +124 -83
- package/assets/skills/review/architect/SKILL.md +157 -306
- package/assets/skills/review/branch/SKILL.md +153 -208
- package/assets/skills/review/pr/SKILL.md +129 -519
- package/assets/skills/review/tdd/SKILL.md +108 -69
- package/bin/cli.js +2 -2
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +176 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +31 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +30 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +64 -8
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/utils/symlink.d.ts +1 -0
- package/dist/utils/symlink.d.ts.map +1 -1
- package/dist/utils/symlink.js +8 -6
- package/dist/utils/symlink.js.map +1 -1
- package/package.json +1 -1
- package/assets/skills/docs/logo/SKILL.md +0 -492
- package/assets/skills/docs/video/SKILL.md +0 -666
|
@@ -5,7 +5,7 @@ description: Quick bug fix workflow with rollback plan. Use when fixing bugs, ho
|
|
|
5
5
|
|
|
6
6
|
# Hotfix Workflow
|
|
7
7
|
|
|
8
|
-
Fast-track
|
|
8
|
+
Fast-track bug fix with a rollback plan. Use when the cause is identifiable in under an hour of investigation.
|
|
9
9
|
|
|
10
10
|
## When to use this skill
|
|
11
11
|
|
|
@@ -18,363 +18,196 @@ Fast-track workflow for fixing bugs with safety rollback plan.
|
|
|
18
18
|
|
|
19
19
|
## Read Architecture First
|
|
20
20
|
|
|
21
|
-
Read `ddd-architecture.md` + stack-specific doc
|
|
21
|
+
Read `ddd-architecture.md` + stack-specific doc — the fix must land in the right layer (usecase / handler / infra) per architecture rules.
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Severity
|
|
24
|
+
|
|
25
|
+
Use `~/.claude/architecture/_shared/severity-levels.md` (incident table). Hotfix typically covers P2-P4. P1 → start with `/fix:incident` for triage / comms.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Workflow
|
|
24
30
|
|
|
25
31
|
```
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
│ │
|
|
30
|
-
│ Fail? │
|
|
31
|
-
│ ┌────────────────────┘
|
|
32
|
-
▼ ▼
|
|
33
|
-
┌──────────────────┐
|
|
34
|
-
│ 6. ROLLBACK │
|
|
35
|
-
│ (if needed) │
|
|
36
|
-
└──────────────────┘
|
|
32
|
+
IDENTIFY → REPRODUCE → FIX → VERIFY → DEPLOY
|
|
33
|
+
↑ ↓
|
|
34
|
+
└── ROLLBACK (if needed)
|
|
37
35
|
```
|
|
38
36
|
|
|
39
37
|
---
|
|
40
38
|
|
|
41
|
-
## Phase 1: IDENTIFY
|
|
39
|
+
## Phase 1: IDENTIFY (≤15 min)
|
|
42
40
|
|
|
43
|
-
**Goal
|
|
41
|
+
**Goal:** capture exactly what's broken — no speculation.
|
|
44
42
|
|
|
45
|
-
###
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
### Capture
|
|
44
|
+
- Error message / stack trace (verbatim)
|
|
45
|
+
- Steps to reproduce
|
|
46
|
+
- Expected vs actual behavior
|
|
47
|
+
- Environment (prod / staging / dev)
|
|
48
|
+
- Affected users (all / subset / specific tenant)
|
|
49
|
+
- Recent deploys / config changes (last 24-48h)
|
|
52
50
|
|
|
53
|
-
|
|
51
|
+
### 5 Whys (worked example)
|
|
52
|
+
> Q1: Why does checkout fail? A1: `OrderService.calculate` returns NaN.
|
|
53
|
+
> Q2: Why NaN? A2: `quantity * price` where price is undefined.
|
|
54
|
+
> Q3: Why undefined? A3: New SKUs from supplier feed have null price.
|
|
55
|
+
> Q4: Why null? A4: Feed schema added optional `price` field, defaulted to null.
|
|
56
|
+
> Q5: Why didn't validation catch it? A5: Import worker skips schema validation for "perf".
|
|
54
57
|
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
🔴 CRITICAL - Production down, data loss
|
|
58
|
-
🟠 HIGH - Major feature broken, many users affected
|
|
59
|
-
🟡 MEDIUM - Feature degraded, workaround exists
|
|
60
|
-
🟢 LOW - Minor issue, cosmetic
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Output
|
|
64
|
-
```markdown
|
|
65
|
-
## Bug Report
|
|
66
|
-
**Severity**: [CRITICAL/HIGH/MEDIUM/LOW]
|
|
67
|
-
**Stack**: [Flutter/React/Go/Laravel/Remix]
|
|
68
|
-
**Architecture Doc**: [path]
|
|
69
|
-
**Error**: [error message]
|
|
70
|
-
**Steps**:
|
|
71
|
-
1. ...
|
|
72
|
-
2. ...
|
|
73
|
-
**Expected**: [what should happen]
|
|
74
|
-
**Actual**: [what happens]
|
|
75
|
-
**Environment**: [prod/staging/dev]
|
|
76
|
-
```
|
|
58
|
+
→ Root cause: skipped validation in import worker. Fix at the import boundary, not in checkout.
|
|
77
59
|
|
|
78
60
|
### Gate
|
|
79
|
-
- [ ]
|
|
80
|
-
- [ ]
|
|
81
|
-
- [ ] Severity
|
|
82
|
-
- [ ]
|
|
61
|
+
- [ ] Error captured verbatim
|
|
62
|
+
- [ ] Reproduction steps known (or "intermittent" noted)
|
|
63
|
+
- [ ] Severity assigned (P2 / P3 / P4)
|
|
64
|
+
- [ ] Root cause identified (use `/fix:root-cause` if 5 Whys doesn't converge)
|
|
83
65
|
|
|
84
66
|
---
|
|
85
67
|
|
|
86
|
-
## Phase 2: REPRODUCE
|
|
87
|
-
|
|
88
|
-
**Goal
|
|
89
|
-
|
|
90
|
-
###
|
|
91
|
-
1.
|
|
92
|
-
2. Reproduce
|
|
93
|
-
3.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Why? → [root cause emerging]
|
|
99
|
-
Why? → [ROOT CAUSE]
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
4. Identify fix location based on architecture:
|
|
103
|
-
- Which layer? (from architecture doc)
|
|
104
|
-
- Which file(s)?
|
|
105
|
-
- What's the minimal change?
|
|
106
|
-
|
|
107
|
-
5. Check git blame:
|
|
108
|
-
```bash
|
|
109
|
-
git log --oneline -10 -- [affected_file]
|
|
110
|
-
git blame [affected_file] | grep -A5 -B5 "[problem_area]"
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Analysis Output
|
|
114
|
-
```markdown
|
|
115
|
-
## Root Cause Analysis
|
|
116
|
-
**Architecture Reference**: [path to doc]
|
|
117
|
-
**Affected Layer**: [layer from architecture doc]
|
|
118
|
-
**Root Cause**: [description]
|
|
119
|
-
**Introduced**: [commit/PR if known]
|
|
120
|
-
**Affected Files**:
|
|
121
|
-
- file1:123
|
|
122
|
-
- file2:456
|
|
123
|
-
|
|
124
|
-
**Fix Strategy**: [brief description following architecture patterns]
|
|
125
|
-
```
|
|
68
|
+
## Phase 2: REPRODUCE (≤30 min)
|
|
69
|
+
|
|
70
|
+
**Goal:** reproduce locally before changing any code.
|
|
71
|
+
|
|
72
|
+
### Steps
|
|
73
|
+
1. Check out the deployed commit (NOT main if main has drifted)
|
|
74
|
+
2. Reproduce with the exact data / inputs from Phase 1
|
|
75
|
+
3. If you can't reproduce → it's environment-specific. Check:
|
|
76
|
+
- Env vars on prod vs local
|
|
77
|
+
- DB state / data shape
|
|
78
|
+
- Cache / CDN state
|
|
79
|
+
- Runtime version differences
|
|
126
80
|
|
|
127
81
|
### Gate
|
|
128
|
-
- [ ]
|
|
129
|
-
- [ ]
|
|
130
|
-
- [ ] Fix location known (per architecture)
|
|
82
|
+
- [ ] Reproduced locally on the deployed commit
|
|
83
|
+
- [ ] OR documented why local reproduction is impossible + plan to test on staging
|
|
131
84
|
|
|
132
85
|
---
|
|
133
86
|
|
|
134
87
|
## Phase 3: FIX
|
|
135
88
|
|
|
136
|
-
**Goal
|
|
137
|
-
|
|
138
|
-
###
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
###
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
git checkout -b hotfix/[issue-id]-[short-description]
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
2. **Read architecture doc** for the affected layer
|
|
152
|
-
3. Implement fix following architecture patterns:
|
|
153
|
-
- Use correct patterns from doc
|
|
154
|
-
- Follow naming conventions from doc
|
|
155
|
-
- Respect layer boundaries
|
|
156
|
-
|
|
157
|
-
4. Add inline comment explaining fix:
|
|
158
|
-
```
|
|
159
|
-
// HOTFIX: [issue-id] - [brief description]
|
|
160
|
-
// Root cause: [why this fixes it]
|
|
161
|
-
[your fix code]
|
|
162
|
-
```
|
|
89
|
+
**Goal:** smallest correct change at the right layer.
|
|
90
|
+
|
|
91
|
+
### Rules
|
|
92
|
+
- Fix at the **root cause**, not the symptom
|
|
93
|
+
- Land the fix in the right layer (boundary validation → handler/DTO; business rule → usecase; data shape → infra mapper)
|
|
94
|
+
- **Add a regression test first** (RED), then make it pass (GREEN). See `/review:tdd`.
|
|
95
|
+
- Don't refactor on the fix — separate PR
|
|
96
|
+
- If the fix requires schema migration, plan it as 2 deploys (compatible code first, then migration)
|
|
97
|
+
|
|
98
|
+
### Boundary defense
|
|
99
|
+
For data-shape bugs (null where not expected, type mismatch from external API): defend at the **trust boundary** (handler / adapter), not inside business logic.
|
|
163
100
|
|
|
164
101
|
### Gate
|
|
165
|
-
- [ ]
|
|
166
|
-
- [ ] Fix
|
|
167
|
-
- [ ]
|
|
168
|
-
- [ ]
|
|
102
|
+
- [ ] Regression test added (red → green)
|
|
103
|
+
- [ ] Fix is in the right layer (per architecture)
|
|
104
|
+
- [ ] No unrelated changes in the PR
|
|
105
|
+
- [ ] Existing tests still pass
|
|
169
106
|
|
|
170
107
|
---
|
|
171
108
|
|
|
172
109
|
## Phase 4: VERIFY
|
|
173
110
|
|
|
174
|
-
**Goal
|
|
175
|
-
|
|
176
|
-
###
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
php artisan test # Laravel
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
3. Add regression test following architecture patterns:
|
|
191
|
-
```
|
|
192
|
-
// Test to prevent regression
|
|
193
|
-
it('should [expected behavior] - fixes #[issue-id]', () => {
|
|
194
|
-
// Arrange: setup that caused bug
|
|
195
|
-
// Act: trigger the bug scenario
|
|
196
|
-
// Assert: verify correct behavior
|
|
197
|
-
});
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
4. Manual verification:
|
|
201
|
-
- [ ] Reproduce original steps
|
|
202
|
-
- [ ] Confirm bug is fixed
|
|
203
|
-
- [ ] Test happy path
|
|
204
|
-
- [ ] Test edge cases
|
|
111
|
+
**Goal:** confirm fix works without breaking other paths.
|
|
112
|
+
|
|
113
|
+
### Local
|
|
114
|
+
- [ ] Original failure no longer reproducible
|
|
115
|
+
- [ ] All tests pass (`{test command}`)
|
|
116
|
+
- [ ] Linter clean
|
|
117
|
+
- [ ] Build green
|
|
118
|
+
|
|
119
|
+
### Staging (if available)
|
|
120
|
+
- [ ] Deploy to staging
|
|
121
|
+
- [ ] Reproduce the failure scenario — should pass
|
|
122
|
+
- [ ] Smoke-test adjacent features (anything sharing the code path)
|
|
123
|
+
- [ ] Monitor logs for 5-15 min
|
|
205
124
|
|
|
206
125
|
### Gate
|
|
207
|
-
- [ ]
|
|
208
|
-
- [ ]
|
|
209
|
-
- [ ] Regression test added (following arch patterns)
|
|
210
|
-
- [ ] No new issues introduced
|
|
211
|
-
|
|
212
|
-
### Feedback Loop
|
|
213
|
-
If verification fails:
|
|
214
|
-
1. Note what failed
|
|
215
|
-
2. Return to FIX phase
|
|
216
|
-
3. Adjust fix (following architecture)
|
|
217
|
-
4. Re-verify
|
|
126
|
+
- [ ] Local + staging both verified
|
|
127
|
+
- [ ] No regressions in adjacent features
|
|
218
128
|
|
|
219
129
|
---
|
|
220
130
|
|
|
221
131
|
## Phase 5: DEPLOY
|
|
222
132
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
git add .
|
|
229
|
-
git commit -m "fix: [short description] (#[issue-id])
|
|
133
|
+
### Pre-deploy checklist
|
|
134
|
+
- [ ] PR reviewed (`/review:branch` self + `/review:pr` from teammate)
|
|
135
|
+
- [ ] Rollback plan documented (see below)
|
|
136
|
+
- [ ] On-call notified
|
|
137
|
+
- [ ] CHANGELOG entry
|
|
230
138
|
|
|
231
|
-
|
|
232
|
-
|
|
139
|
+
### Rollback plan
|
|
140
|
+
Document **before** deploying:
|
|
141
|
+
- Rollback method: `revert PR` / `redeploy commit {sha}` / `feature flag off` / `DB migration down`
|
|
142
|
+
- Estimated rollback time
|
|
143
|
+
- Who has authority to roll back (usually IC or on-call)
|
|
144
|
+
- Signal to roll back (specific metric + threshold)
|
|
233
145
|
|
|
234
|
-
|
|
235
|
-
|
|
146
|
+
### Deploy steps
|
|
147
|
+
1. Deploy via normal pipeline (don't skip CI even under pressure)
|
|
148
|
+
2. Watch metrics + logs for the symptom + adjacent code paths
|
|
149
|
+
3. Hold deploy attention for at least 1× normal request cycle (15-30 min)
|
|
236
150
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
151
|
+
### Gate
|
|
152
|
+
- [ ] Deployed successfully
|
|
153
|
+
- [ ] Symptom no longer occurring
|
|
154
|
+
- [ ] No new errors in monitoring
|
|
155
|
+
- [ ] Stakeholders notified
|
|
242
156
|
|
|
243
|
-
|
|
244
|
-
[explanation]
|
|
157
|
+
---
|
|
245
158
|
|
|
246
|
-
|
|
247
|
-
[what was changed, following architecture patterns]
|
|
159
|
+
## Phase 6: ROLLBACK (if Phase 5 verify fails)
|
|
248
160
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
161
|
+
### When to roll back
|
|
162
|
+
- Error rate increases post-deploy
|
|
163
|
+
- New error type appears
|
|
164
|
+
- Adjacent feature breaks
|
|
165
|
+
- Performance degrades meaningfully
|
|
253
166
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
167
|
+
### How
|
|
168
|
+
1. Announce: "Rolling back {fix} in 60s due to {observation}"
|
|
169
|
+
2. Execute: revert / redeploy previous / flip flag / migration down
|
|
170
|
+
3. Verify rollback: metrics return to baseline
|
|
171
|
+
4. Post-mortem the rollback — what was missed in Phase 3/4?
|
|
259
172
|
|
|
260
|
-
|
|
261
|
-
```bash
|
|
262
|
-
# Follow your deployment process
|
|
263
|
-
# Monitor for issues
|
|
264
|
-
```
|
|
173
|
+
---
|
|
265
174
|
|
|
266
|
-
|
|
267
|
-
- [ ] PR created/merged
|
|
268
|
-
- [ ] Deployed (if applicable)
|
|
269
|
-
- [ ] Monitoring in place
|
|
175
|
+
## Final Report
|
|
270
176
|
|
|
271
|
-
|
|
177
|
+
```markdown
|
|
178
|
+
## Hotfix: {short description}
|
|
272
179
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
**Goal**: Quickly revert if fix causes more problems
|
|
276
|
-
|
|
277
|
-
### When to Rollback
|
|
278
|
-
- [ ] Fix introduced new bugs
|
|
279
|
-
- [ ] Performance degraded
|
|
280
|
-
- [ ] Unexpected side effects
|
|
281
|
-
- [ ] Users reporting new issues
|
|
282
|
-
|
|
283
|
-
### Rollback Actions
|
|
284
|
-
|
|
285
|
-
1. **Quick Revert**:
|
|
286
|
-
```bash
|
|
287
|
-
# Find the hotfix commit
|
|
288
|
-
git log --oneline -5
|
|
289
|
-
|
|
290
|
-
# Revert it
|
|
291
|
-
git revert [hotfix-commit-sha]
|
|
292
|
-
git push
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
2. **Feature Flag** (if available):
|
|
296
|
-
```
|
|
297
|
-
// Disable the fix temporarily
|
|
298
|
-
if (!featureFlags.hotfix_123_enabled) {
|
|
299
|
-
// Original behavior
|
|
300
|
-
}
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
3. **Redeploy previous version**:
|
|
304
|
-
```bash
|
|
305
|
-
# Deploy previous known-good version
|
|
306
|
-
git checkout [previous-tag]
|
|
307
|
-
# Run deploy
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### Post-Rollback
|
|
311
|
-
1. Document what went wrong
|
|
312
|
-
2. Return to REPRODUCE phase
|
|
313
|
-
3. Analyze why fix failed (check architecture compliance)
|
|
314
|
-
4. Create better fix
|
|
180
|
+
### Root cause
|
|
181
|
+
{From Phase 1, 5 Whys final answer}
|
|
315
182
|
|
|
316
|
-
|
|
183
|
+
### Fix
|
|
184
|
+
- File: `path/to/file:line`
|
|
185
|
+
- Layer: {handler / usecase / infra / etc.}
|
|
186
|
+
- Approach: {boundary defense / logic correction / data migration}
|
|
317
187
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
| Stack | Doc |
|
|
322
|
-
|-------|-----|
|
|
323
|
-
| All | `clean-architecture.md` |
|
|
324
|
-
| Flutter | `flutter-mobile.md` |
|
|
325
|
-
| React | `react-frontend.md` |
|
|
326
|
-
| Go | `go-backend.md` |
|
|
327
|
-
| Laravel | `laravel-backend.md` |
|
|
328
|
-
| Remix | `remix-fullstack.md` |
|
|
329
|
-
| Monorepo | `monorepo.md` |
|
|
330
|
-
|
|
331
|
-
### Hotfix vs Feature
|
|
332
|
-
|
|
333
|
-
| Aspect | Hotfix | Feature |
|
|
334
|
-
|--------|--------|---------|
|
|
335
|
-
| Speed | Fast (< 1 hour) | Thorough |
|
|
336
|
-
| Scope | Minimal | Full |
|
|
337
|
-
| Testing | Targeted | Comprehensive |
|
|
338
|
-
| Design | Skip | Required |
|
|
339
|
-
| Risk | Higher, has rollback | Lower |
|
|
340
|
-
|
|
341
|
-
### Severity Response Time
|
|
342
|
-
|
|
343
|
-
| Severity | Response | Fix Target |
|
|
344
|
-
|----------|----------|------------|
|
|
345
|
-
| 🔴 CRITICAL | Immediate | < 1 hour |
|
|
346
|
-
| 🟠 HIGH | Same day | < 4 hours |
|
|
347
|
-
| 🟡 MEDIUM | Next sprint | < 1 week |
|
|
348
|
-
| 🟢 LOW | Backlog | When convenient |
|
|
349
|
-
|
|
350
|
-
### Commit Message Format
|
|
351
|
-
```
|
|
352
|
-
fix: [short description] (#issue-id)
|
|
188
|
+
### Tests
|
|
189
|
+
- Regression test: {file:line}
|
|
190
|
+
- All tests passing
|
|
353
191
|
|
|
354
|
-
|
|
355
|
-
|
|
192
|
+
### Deploy
|
|
193
|
+
- Deployed: {timestamp}
|
|
194
|
+
- Verified: {timestamp + how}
|
|
195
|
+
- Rollback plan: {revert / redeploy / flag / migration}
|
|
356
196
|
|
|
357
|
-
|
|
197
|
+
### Severity: {P2 / P3 / P4}
|
|
198
|
+
### Status: SHIPPED ✅ (or ROLLED BACK + reason)
|
|
358
199
|
```
|
|
359
200
|
|
|
360
|
-
### Rollback Checklist
|
|
361
|
-
- [ ] Identify rollback commit
|
|
362
|
-
- [ ] Test rollback locally
|
|
363
|
-
- [ ] Execute rollback
|
|
364
|
-
- [ ] Verify system stable
|
|
365
|
-
- [ ] Notify stakeholders
|
|
366
|
-
- [ ] Document learnings
|
|
367
|
-
|
|
368
201
|
---
|
|
369
202
|
|
|
370
|
-
##
|
|
203
|
+
## Hard Rules
|
|
371
204
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
205
|
+
- **Reproduce before fixing** — no fix lands without local repro
|
|
206
|
+
- **Regression test required** — every fix gets a test that would have caught it
|
|
207
|
+
- **Fix at the root, not the symptom** — patching the symptom invites the bug back
|
|
208
|
+
- **No drive-by refactor** — fix PR is focused, refactor goes in a separate PR
|
|
209
|
+
- **Always have a rollback plan** documented before deploy
|
|
210
|
+
- **Don't skip CI** under pressure — bypassing CI is what causes the next incident
|
|
378
211
|
|
|
379
212
|
---
|
|
380
213
|
|
|
@@ -382,18 +215,19 @@ DevOps: [contact]
|
|
|
382
215
|
|
|
383
216
|
| When | Use |
|
|
384
217
|
|------|-----|
|
|
385
|
-
| Production is down right now | `/fix:incident`
|
|
218
|
+
| Production is down right now | `/fix:incident` first, then hotfix |
|
|
386
219
|
| Bug keeps coming back after fixes | `/fix:root-cause` |
|
|
387
220
|
| Need to write regression test first | `/review:tdd` |
|
|
388
221
|
| Bug is on an open PR | `/fix:pr-comment` |
|
|
389
|
-
|
|
|
222
|
+
| Self-review before opening PR | `/review:branch` |
|
|
390
223
|
|
|
391
224
|
## Recommended Agents
|
|
392
225
|
|
|
393
226
|
| Phase | Agent | Purpose |
|
|
394
227
|
|-------|-------|---------|
|
|
395
|
-
|
|
|
228
|
+
| IDENTIFY | Stack-specific dev agent | Read error context |
|
|
229
|
+
| FIX | Stack-specific dev agent | Apply the fix |
|
|
396
230
|
| FIX | `@security-audit` | Security-related bugs |
|
|
397
231
|
| VERIFY | `@test-writer` | Regression test |
|
|
398
232
|
| VERIFY | `@code-reviewer` | Quick code review |
|
|
399
|
-
| DEPLOY | `@devops` | CI/CD +
|
|
233
|
+
| DEPLOY | `@devops` | CI/CD + monitoring |
|