ai-core-framework 0.1.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-plugin/plugin.json +21 -0
- package/.codex-plugin/plugin.json +35 -0
- package/.cursor-plugin/plugin.json +22 -0
- package/README.md +173 -0
- package/bin/ai-core-framework.js +110 -0
- package/core/README.md +162 -0
- package/core/agents/README.md +32 -0
- package/core/agents/business-analyst.md +269 -0
- package/core/agents/developer.md +375 -0
- package/core/agents/qa-tester.md +477 -0
- package/core/agents/scrum-master.md +136 -0
- package/core/agents/tech-lead.md +345 -0
- package/core/config/backlog.schema.json +38 -0
- package/core/config/docs-policy.default.json +37 -0
- package/core/config/release.schema.json +120 -0
- package/core/config/ticket.schema.json +253 -0
- package/core/rules/00-global-rules.md +373 -0
- package/core/rules/01-git-workflow.md +388 -0
- package/core/rules/02-code-quality.md +77 -0
- package/core/rules/03-security.md +78 -0
- package/core/rules/04-documentation.md +72 -0
- package/core/rules/05-testing-mandatory.md +374 -0
- package/core/rules/06-approval-gates.md +388 -0
- package/core/rules/07-definition-of-ready.md +112 -0
- package/core/rules/08-definition-of-done.md +149 -0
- package/core/scripts/ai-core.sh +456 -0
- package/core/scripts/generate-views.sh +210 -0
- package/core/scripts/install-codex-prompts.sh +127 -0
- package/core/scripts/log-user-request.sh +113 -0
- package/core/scripts/setup-project.sh +183 -0
- package/core/scripts/sync-platforms.sh +322 -0
- package/core/scripts/validate-audit-log.sh +73 -0
- package/core/scripts/validate-docs.sh +365 -0
- package/core/scripts/validate-permissions.sh +132 -0
- package/core/scripts/validate-state.sh +611 -0
- package/core/scripts/workflow.sh +513 -0
- package/core/skills/README.md +21 -0
- package/core/skills/ai-core-commands/SKILL.md +86 -0
- package/core/skills/brainstorming/SKILL.md +40 -0
- package/core/skills/development-implement-task/SKILL.md +308 -0
- package/core/skills/executing-ticket/SKILL.md +28 -0
- package/core/skills/git-branch-status/SKILL.md +56 -0
- package/core/skills/git-cleanup-branches/SKILL.md +57 -0
- package/core/skills/git-scan-untracked/SKILL.md +50 -0
- package/core/skills/meta-generate-views/SKILL.md +54 -0
- package/core/skills/meta-request-log/SKILL.md +61 -0
- package/core/skills/meta-sprint-report/SKILL.md +59 -0
- package/core/skills/meta-sync-platforms/SKILL.md +53 -0
- package/core/skills/meta-ticket-health/SKILL.md +61 -0
- package/core/skills/meta-validate-audit-log/SKILL.md +42 -0
- package/core/skills/meta-validate-docs/SKILL.md +58 -0
- package/core/skills/meta-validate-permissions/SKILL.md +53 -0
- package/core/skills/meta-validate-state/SKILL.md +58 -0
- package/core/skills/planning-analyze-requirements/SKILL.md +471 -0
- package/core/skills/planning-backlog-status/SKILL.md +57 -0
- package/core/skills/planning-document-existing-requirements/SKILL.md +246 -0
- package/core/skills/planning-estimate-task/SKILL.md +60 -0
- package/core/skills/planning-groom-ticket/SKILL.md +442 -0
- package/core/skills/planning-mark-ready/SKILL.md +111 -0
- package/core/skills/planning-plan-refactor/SKILL.md +66 -0
- package/core/skills/planning-plan-sprint/SKILL.md +112 -0
- package/core/skills/planning-prioritize-backlog/SKILL.md +62 -0
- package/core/skills/planning-write-plan/SKILL.md +68 -0
- package/core/skills/project-detect-stack/SKILL.md +71 -0
- package/core/skills/project-discover-codebase/SKILL.md +74 -0
- package/core/skills/project-setup-project/SKILL.md +113 -0
- package/core/skills/qa-bug-status/SKILL.md +52 -0
- package/core/skills/qa-report-bug/SKILL.md +518 -0
- package/core/skills/qa-smoke-test/SKILL.md +387 -0
- package/core/skills/qa-triage-bug/SKILL.md +62 -0
- package/core/skills/qa-verify-fix/SKILL.md +446 -0
- package/core/skills/release-hotfix/SKILL.md +117 -0
- package/core/skills/release-release/SKILL.md +123 -0
- package/core/skills/release-rollback/SKILL.md +62 -0
- package/core/skills/review-create-pr/SKILL.md +418 -0
- package/core/skills/review-merge-pr/SKILL.md +425 -0
- package/core/skills/review-techlead-review/SKILL.md +547 -0
- package/core/skills/using-ai-core/SKILL.md +72 -0
- package/core/skills/verification-before-done/SKILL.md +35 -0
- package/core/skills/writing-implementation-plan/SKILL.md +45 -0
- package/core/templates/ci/ai-core-governance.yml +112 -0
- package/core/templates/ci/node-pnpm.yml +35 -0
- package/core/templates/pm/retrospective-template.md +47 -0
- package/core/templates/pm/sprint-plan-template.md +45 -0
- package/core/templates/pr/pull-request-template.md +247 -0
- package/core/templates/project/CODEOWNERS +11 -0
- package/core/templates/project/docs-policy.json +3 -0
- package/core/templates/project/project-config.yaml +137 -0
- package/core/templates/project/project-structure.yaml +76 -0
- package/core/templates/qa/bug-report-template.md +371 -0
- package/core/templates/qa/test-plan-template.md +57 -0
- package/core/templates/release/release-record-template.json +67 -0
- package/core/templates/requirements/PRD-template.md +58 -0
- package/core/templates/requirements/user-story-template.md +381 -0
- package/core/templates/technical/ADR-template.md +46 -0
- package/core/templates/technical/refactor-plan-template.md +84 -0
- package/core/templates/technical/tech-design-template.md +71 -0
- package/core/workflows/bug-lifecycle.md +56 -0
- package/core/workflows/feature-lifecycle.md +347 -0
- package/core/workflows/hotfix-lifecycle.md +65 -0
- package/core/workflows/sprint-lifecycle.md +56 -0
- package/lib/install-codex.js +85 -0
- package/package.json +36 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-report-bug
|
|
3
|
+
description: Use when the user asks to run /report-bug, file a bug from a reproducer, capture severity and environment details, or create a bug ticket from QA findings.
|
|
4
|
+
command: /report-bug
|
|
5
|
+
display_name: "Report Bug"
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
owner_agent: qa-tester
|
|
8
|
+
# Also invokable by: any agent/user who discovers a bug
|
|
9
|
+
model_preference: sonnet
|
|
10
|
+
args:
|
|
11
|
+
- name: title
|
|
12
|
+
required: true
|
|
13
|
+
type: string
|
|
14
|
+
description: "Short bug title"
|
|
15
|
+
- name: severity
|
|
16
|
+
required: false
|
|
17
|
+
type: string
|
|
18
|
+
enum: [SEV-1, SEV-2, SEV-3, SEV-4, auto]
|
|
19
|
+
default: "auto"
|
|
20
|
+
description: "Severity (auto = AI assesses)"
|
|
21
|
+
preconditions:
|
|
22
|
+
- has_reproducer: true
|
|
23
|
+
- has_environment_info: true
|
|
24
|
+
postconditions:
|
|
25
|
+
- bug_ticket_created: true
|
|
26
|
+
- bug_status: NEW
|
|
27
|
+
- triage_notified: true
|
|
28
|
+
- sev1_escalated: "if applicable"
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# /report-bug
|
|
32
|
+
|
|
33
|
+
> File a well-formed bug report. Quality gate: no ambiguous reports.
|
|
34
|
+
|
|
35
|
+
## 🎯 Purpose
|
|
36
|
+
|
|
37
|
+
Create bug ticket that developer can actually fix. Enforce:
|
|
38
|
+
1. Clear reproducer (copy-pasteable)
|
|
39
|
+
2. Expected vs actual behavior
|
|
40
|
+
3. Environment details
|
|
41
|
+
4. Severity assessment
|
|
42
|
+
5. Evidence (logs, screenshots)
|
|
43
|
+
|
|
44
|
+
Bad bug reports waste dev time → strict template enforcement here.
|
|
45
|
+
|
|
46
|
+
## 🚦 Trigger
|
|
47
|
+
|
|
48
|
+
**Manual**:
|
|
49
|
+
```
|
|
50
|
+
/report-bug "Login returns 500 for emails with +"
|
|
51
|
+
/report-bug "Checkout crashes when cart has 100+ items" --severity=SEV-2
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Auto**:
|
|
55
|
+
- From `/smoke-test` when tests fail
|
|
56
|
+
- From `/verify-fix` when bug still exists or new bug found
|
|
57
|
+
|
|
58
|
+
## 📋 Preconditions (STRICT)
|
|
59
|
+
|
|
60
|
+
### 1. Has reproducer
|
|
61
|
+
User/agent MUST provide:
|
|
62
|
+
- Steps to reproduce
|
|
63
|
+
- Environment (where observed)
|
|
64
|
+
|
|
65
|
+
If not → prompt interactive collection.
|
|
66
|
+
|
|
67
|
+
### 2. Not duplicate
|
|
68
|
+
Check existing open bugs for similar:
|
|
69
|
+
- Grep bug titles in `project/bugs/*.json`
|
|
70
|
+
- If > 80% similarity → flag, ask if linking to existing
|
|
71
|
+
|
|
72
|
+
### 3. Has evidence (soft requirement)
|
|
73
|
+
Ideally: screenshot, log excerpt, network trace.
|
|
74
|
+
If missing, still accept but flag in bug.
|
|
75
|
+
|
|
76
|
+
## 🔄 Execution Flow
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
┌──────────────────────────────────────────────────────────┐
|
|
80
|
+
│ STEP 1: Collect info │
|
|
81
|
+
│ If args incomplete, interactive collection: │
|
|
82
|
+
│ - Title (clear, specific) │
|
|
83
|
+
│ - Steps to reproduce │
|
|
84
|
+
│ - Expected behavior │
|
|
85
|
+
│ - Actual behavior │
|
|
86
|
+
│ - Environment (OS, browser, env name, build) │
|
|
87
|
+
│ - Frequency (always, sometimes, once) │
|
|
88
|
+
│ - Evidence (screenshot/log) │
|
|
89
|
+
├──────────────────────────────────────────────────────────┤
|
|
90
|
+
│ STEP 2: Validate reproducer │
|
|
91
|
+
│ - Steps numbered, clear │
|
|
92
|
+
│ - No ambiguous phrases ("sometimes breaks") │
|
|
93
|
+
│ - Expected != Actual (not just confusion) │
|
|
94
|
+
│ If fails: request clarification │
|
|
95
|
+
├──────────────────────────────────────────────────────────┤
|
|
96
|
+
│ STEP 3: Check for duplicates │
|
|
97
|
+
│ - Search by title similarity │
|
|
98
|
+
│ - Search by symptom keywords │
|
|
99
|
+
│ If found: offer to link as duplicate │
|
|
100
|
+
├──────────────────────────────────────────────────────────┤
|
|
101
|
+
│ STEP 4: Assess severity │
|
|
102
|
+
│ If --severity=auto: │
|
|
103
|
+
│ Rules (see RULE RB-003): │
|
|
104
|
+
│ - Data loss / security / prod down → SEV-1 │
|
|
105
|
+
│ - Major feature broken, no workaround → SEV-2 │
|
|
106
|
+
│ - Minor broken, workaround exists → SEV-3 │
|
|
107
|
+
│ - Cosmetic, edge case → SEV-4 │
|
|
108
|
+
│ Else: use provided severity │
|
|
109
|
+
│ │
|
|
110
|
+
│ Validate: reasoning supports severity │
|
|
111
|
+
├──────────────────────────────────────────────────────────┤
|
|
112
|
+
│ STEP 5: Determine impact │
|
|
113
|
+
│ - Users affected: all | many | few | specific segment │
|
|
114
|
+
│ - Business impact: revenue / reputation / operations │
|
|
115
|
+
│ - Security impact: if any │
|
|
116
|
+
│ - Data impact: if any │
|
|
117
|
+
├──────────────────────────────────────────────────────────┤
|
|
118
|
+
│ STEP 6: Identify related │
|
|
119
|
+
│ - Feature ticket (if relates to recent feature) │
|
|
120
|
+
│ - Similar past bugs │
|
|
121
|
+
│ - Relevant ADRs │
|
|
122
|
+
│ - Components affected │
|
|
123
|
+
├──────────────────────────────────────────────────────────┤
|
|
124
|
+
│ STEP 7: Generate bug ID │
|
|
125
|
+
│ BUG-NNN (separate sequence from TICKET-) │
|
|
126
|
+
├──────────────────────────────────────────────────────────┤
|
|
127
|
+
│ STEP 8: Create bug ticket │
|
|
128
|
+
│ Path: project/bugs/BUG-NNN.json │
|
|
129
|
+
│ Follow template: templates/qa/bug-report-template.md │
|
|
130
|
+
│ Initial status: NEW │
|
|
131
|
+
├──────────────────────────────────────────────────────────┤
|
|
132
|
+
│ STEP 9: SEV-1 special handling │
|
|
133
|
+
│ If SEV-1: │
|
|
134
|
+
│ - Console: 🚨 SEV-1 BUG FILED │
|
|
135
|
+
│ - Immediate HANDOFF → scrum-master + tech-lead │
|
|
136
|
+
│ - Suggest: /hotfix BUG-NNN │
|
|
137
|
+
│ - (Optional) Pager/Slack urgent notification │
|
|
138
|
+
├──────────────────────────────────────────────────────────┤
|
|
139
|
+
│ STEP 10: Normal handoff │
|
|
140
|
+
│ HANDOFF → scrum-master for triage │
|
|
141
|
+
│ Suggest: /triage-bug BUG-NNN │
|
|
142
|
+
└──────────────────────────────────────────────────────────┘
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 🔒 Hard Rules
|
|
146
|
+
|
|
147
|
+
### RULE RB-001: Reproducer quality gate
|
|
148
|
+
**MUST** reject vague reports. Examples of unacceptable:
|
|
149
|
+
- ❌ "Login doesn't work"
|
|
150
|
+
- ❌ "Page is broken"
|
|
151
|
+
- ❌ "Sometimes it fails"
|
|
152
|
+
|
|
153
|
+
Require:
|
|
154
|
+
- ✅ Specific conditions
|
|
155
|
+
- ✅ Exact steps
|
|
156
|
+
- ✅ Observable outcome
|
|
157
|
+
|
|
158
|
+
If user insists on filing anyway → file with NEEDS_MORE_INFO status, not NEW.
|
|
159
|
+
|
|
160
|
+
### RULE RB-002: No sensitive data
|
|
161
|
+
**MUST NOT** include:
|
|
162
|
+
- Real passwords, tokens, session cookies
|
|
163
|
+
- Customer PII (emails unless test account, credit cards, SSNs)
|
|
164
|
+
- Internal secret URLs
|
|
165
|
+
|
|
166
|
+
Redact as `[REDACTED_PASSWORD]`, `user+XXX@example.com`, etc.
|
|
167
|
+
|
|
168
|
+
### RULE RB-003: Severity assessment rigorous
|
|
169
|
+
**MUST** justify severity with:
|
|
170
|
+
- User impact (how many, what percentage)
|
|
171
|
+
- Business impact (financial, reputational, legal)
|
|
172
|
+
- Workaround availability
|
|
173
|
+
- Data/security implications
|
|
174
|
+
|
|
175
|
+
No severity inflation (everything SEV-1) or deflation (SEV-1 marked SEV-3 to avoid interrupting).
|
|
176
|
+
|
|
177
|
+
Severity matrix:
|
|
178
|
+
|
|
179
|
+
| Criterion | SEV-1 | SEV-2 | SEV-3 | SEV-4 |
|
|
180
|
+
|-----------|-------|-------|-------|-------|
|
|
181
|
+
| Users affected | All / critical | Many / important | Few | Isolated |
|
|
182
|
+
| Data loss | Yes | Possible | No | No |
|
|
183
|
+
| Security breach | Yes | Possible | No | No |
|
|
184
|
+
| Production impact | Down / failing | Degraded | Minor | None |
|
|
185
|
+
| Workaround | No | Difficult | Exists | Trivial |
|
|
186
|
+
|
|
187
|
+
### RULE RB-004: SEV-1 immediate escalation
|
|
188
|
+
**MUST** notify tech-lead + scrum-master immediately:
|
|
189
|
+
- Before typing full report (if observing SEV-1)
|
|
190
|
+
- Console output: `🚨 SEV-1`
|
|
191
|
+
- Even at 3am, file + escalate
|
|
192
|
+
|
|
193
|
+
Don't "wait until tomorrow" for SEV-1.
|
|
194
|
+
|
|
195
|
+
### RULE RB-005: No fix suggestions required
|
|
196
|
+
Bug reporter **NOT required** to suggest fix. But **MAY** include hypothesis (helpful for dev).
|
|
197
|
+
|
|
198
|
+
If hypothesis included, label it clearly as "Hypothesis (not verified)".
|
|
199
|
+
|
|
200
|
+
### RULE RB-006: Link to related
|
|
201
|
+
**MUST** link:
|
|
202
|
+
- Feature ticket (if bug in recent feature) → helps code context
|
|
203
|
+
- Similar past bugs → helps pattern recognition
|
|
204
|
+
|
|
205
|
+
### RULE RB-007: Environment completeness
|
|
206
|
+
**MUST** capture:
|
|
207
|
+
- Environment name (dev/staging/prod)
|
|
208
|
+
- Build version / commit SHA
|
|
209
|
+
- Browser + version (for UI)
|
|
210
|
+
- OS + version
|
|
211
|
+
- Date/time observed
|
|
212
|
+
- User agent (for UI)
|
|
213
|
+
|
|
214
|
+
Missing env info = bug 50% harder to fix.
|
|
215
|
+
|
|
216
|
+
### RULE RB-008: Frequency honest
|
|
217
|
+
**MUST** report actual frequency:
|
|
218
|
+
- Always (10/10)
|
|
219
|
+
- Usually (7/10)
|
|
220
|
+
- Sometimes (3-5/10)
|
|
221
|
+
- Rarely (1/10)
|
|
222
|
+
- Once (1/1, cannot re-test)
|
|
223
|
+
|
|
224
|
+
Don't say "always" if not sure.
|
|
225
|
+
|
|
226
|
+
### RULE RB-009: Evidence preservation
|
|
227
|
+
Screenshots, logs, HAR files → save to `project/bugs/evidence/BUG-NNN/`.
|
|
228
|
+
|
|
229
|
+
Don't paste long logs in bug body → link to file.
|
|
230
|
+
|
|
231
|
+
### RULE RB-010: No emotions in reports
|
|
232
|
+
**MUST NOT** include:
|
|
233
|
+
- Frustration language ("this is terrible")
|
|
234
|
+
- Blame ("developer broke everything")
|
|
235
|
+
- Customer language not useful for fixing
|
|
236
|
+
|
|
237
|
+
Stay factual. Reporter frustration is valid but doesn't help fix.
|
|
238
|
+
|
|
239
|
+
## 📥 Input Examples
|
|
240
|
+
|
|
241
|
+
### Example 1: Full form
|
|
242
|
+
```
|
|
243
|
+
/report-bug "Login returns 500 for emails containing +"
|
|
244
|
+
|
|
245
|
+
Steps:
|
|
246
|
+
1. Go to /login
|
|
247
|
+
2. Enter email: "user+tag@example.com"
|
|
248
|
+
3. Enter any password
|
|
249
|
+
4. Click Login
|
|
250
|
+
|
|
251
|
+
Expected: Normal login flow (success or invalid credentials error)
|
|
252
|
+
Actual: HTTP 500, white error page
|
|
253
|
+
|
|
254
|
+
Environment: staging, build v1.2.0-rc.3
|
|
255
|
+
Browser: Chrome 134, macOS 14.4
|
|
256
|
+
Frequency: Always (5/5)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Example 2: Minimal (will prompt)
|
|
260
|
+
```
|
|
261
|
+
/report-bug "Cart broken"
|
|
262
|
+
```
|
|
263
|
+
Expected response: Interactive collection of missing info.
|
|
264
|
+
|
|
265
|
+
### Example 3: Auto-severity
|
|
266
|
+
```
|
|
267
|
+
/report-bug "Customer DB shows 0 rows on dashboard"
|
|
268
|
+
```
|
|
269
|
+
Auto assess: Data integrity concern → SEV-1.
|
|
270
|
+
|
|
271
|
+
## 📤 Output Format (Created)
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
## 🐛 Bug Filed: BUG-005
|
|
275
|
+
|
|
276
|
+
**Title**: Login returns 500 for emails containing +
|
|
277
|
+
**Severity**: SEV-2 (assessed automatically)
|
|
278
|
+
**Status**: NEW
|
|
279
|
+
**Filed by**: qa-tester-agent
|
|
280
|
+
**Filed**: 2026-04-18 19:00 UTC
|
|
281
|
+
|
|
282
|
+
### Reproducer
|
|
283
|
+
|
|
284
|
+
**Steps**:
|
|
285
|
+
1. Go to https://staging.app/login
|
|
286
|
+
2. Enter email: `user+tag@example.com` (any plus sign in local part)
|
|
287
|
+
3. Enter any password
|
|
288
|
+
4. Click "Log in" button
|
|
289
|
+
|
|
290
|
+
**Expected**: Normal login flow — either successful login or "Invalid credentials" error message
|
|
291
|
+
**Actual**: HTTP 500 response, white error page with "Something went wrong"
|
|
292
|
+
|
|
293
|
+
### Environment
|
|
294
|
+
| Field | Value |
|
|
295
|
+
|-------|-------|
|
|
296
|
+
| Environment | staging |
|
|
297
|
+
| Build | v1.2.0-rc.3 |
|
|
298
|
+
| Commit | abc1234 |
|
|
299
|
+
| Browser | Chrome 134.0.6998.88 |
|
|
300
|
+
| OS | macOS 14.4 |
|
|
301
|
+
| Observed | 2026-04-18 18:45 UTC |
|
|
302
|
+
|
|
303
|
+
### Frequency
|
|
304
|
+
Always (5/5 attempts)
|
|
305
|
+
|
|
306
|
+
### Evidence
|
|
307
|
+
- Screenshot: `project/bugs/evidence/BUG-005/screenshot-1.png`
|
|
308
|
+
- Network trace: `project/bugs/evidence/BUG-005/har.json`
|
|
309
|
+
- Server log excerpt:
|
|
310
|
+
```
|
|
311
|
+
2026-04-18T18:45:23Z ERROR handler/login.ts:42
|
|
312
|
+
Unhandled exception: InvalidEmailError
|
|
313
|
+
at validateEmail (src/auth/validators.ts:67)
|
|
314
|
+
at loginHandler (src/handlers/login.ts:34)
|
|
315
|
+
Email input: "user tag@example.com" <-- Note: space, not +!
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Severity Assessment
|
|
319
|
+
|
|
320
|
+
**SEV-2** because:
|
|
321
|
+
- Users affected: ~2-5% (emails with +)
|
|
322
|
+
- No workaround (users cannot log in)
|
|
323
|
+
- Core functionality broken (login)
|
|
324
|
+
- No data loss
|
|
325
|
+
- No security issue
|
|
326
|
+
|
|
327
|
+
Not SEV-1 because:
|
|
328
|
+
- Not all users affected
|
|
329
|
+
- Production still working for majority
|
|
330
|
+
- Not data loss / security
|
|
331
|
+
|
|
332
|
+
### Impact Analysis
|
|
333
|
+
- **User count**: Estimated 2-5% of user base use + in emails (Gmail aliases common)
|
|
334
|
+
- **Business**: Revenue impact from locked-out users
|
|
335
|
+
- **Customer support**: Likely support tickets if deployed to prod
|
|
336
|
+
|
|
337
|
+
### Hypothesis (not verified)
|
|
338
|
+
|
|
339
|
+
Looking at log: "user tag@example.com" instead of "user+tag@example.com"
|
|
340
|
+
|
|
341
|
+
Likely: URL decoding treating + as space (classic `encodeURIComponent` vs `+` issue). Form encoding should preserve + in email field.
|
|
342
|
+
|
|
343
|
+
### Related
|
|
344
|
+
|
|
345
|
+
- **Feature**: None (auth system, no recent changes)
|
|
346
|
+
- **Similar past bugs**: None found
|
|
347
|
+
- **Components**: `src/handlers/login.ts`, `src/auth/validators.ts`
|
|
348
|
+
- **ADRs**: ADR-0003 (authentication strategy)
|
|
349
|
+
|
|
350
|
+
### Ticket File
|
|
351
|
+
|
|
352
|
+
Created: `project/bugs/BUG-005.json`
|
|
353
|
+
|
|
354
|
+
### Next Steps
|
|
355
|
+
|
|
356
|
+
1. **Scrum Master**: `/triage-bug BUG-005` (confirm severity, assign sprint)
|
|
357
|
+
2. **Tech Lead**: Review hypothesis, assign dev
|
|
358
|
+
3. **Developer**: Fix + add regression test per RULE TEST-008
|
|
359
|
+
4. **QA**: `/verify-fix BUG-005` after fix deploys
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
HANDOFF → scrum-master
|
|
363
|
+
Action: /triage-bug BUG-005
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## 📤 Output Format (SEV-1)
|
|
367
|
+
|
|
368
|
+
```markdown
|
|
369
|
+
## 🚨 SEV-1 BUG FILED: BUG-006
|
|
370
|
+
|
|
371
|
+
**🚨 IMMEDIATE ACTION REQUIRED 🚨**
|
|
372
|
+
|
|
373
|
+
**Title**: Payment processing fails - all transactions returning error
|
|
374
|
+
**Severity**: SEV-1 (CRITICAL)
|
|
375
|
+
**Status**: NEW
|
|
376
|
+
**Filed**: 2026-04-18 19:15 UTC
|
|
377
|
+
|
|
378
|
+
### Impact
|
|
379
|
+
- **Production**: DOWN (payments)
|
|
380
|
+
- **Users affected**: 100% of purchase attempts
|
|
381
|
+
- **Revenue impact**: ~$5K/hour lost
|
|
382
|
+
- **Duration**: Started 19:00 UTC (15 min ago)
|
|
383
|
+
|
|
384
|
+
### Reproducer
|
|
385
|
+
[Steps included]
|
|
386
|
+
|
|
387
|
+
### Evidence
|
|
388
|
+
[Screenshots + error logs]
|
|
389
|
+
|
|
390
|
+
### Hypothesis
|
|
391
|
+
[If any]
|
|
392
|
+
|
|
393
|
+
### 🚨 Immediate Actions
|
|
394
|
+
|
|
395
|
+
1. **Scrum Master**: Declare incident, notify stakeholders
|
|
396
|
+
2. **Tech Lead**: `/hotfix BUG-006` NOW
|
|
397
|
+
3. **DevOps**: Check recent deploys, consider rollback
|
|
398
|
+
4. **Customer Success**: Prepare comms if not resolved in 30 min
|
|
399
|
+
|
|
400
|
+
### Escalation
|
|
401
|
+
|
|
402
|
+
- [x] Tech Lead notified
|
|
403
|
+
- [x] Scrum Master notified
|
|
404
|
+
- [ ] Engineering Manager (if not resolved in 1h)
|
|
405
|
+
- [ ] Executive team (if not resolved in 2h)
|
|
406
|
+
|
|
407
|
+
### Ticket File
|
|
408
|
+
Created: `project/bugs/BUG-006.json`
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
HANDOFF → tech-lead + scrum-master (URGENT)
|
|
412
|
+
Action: /hotfix BUG-006 immediately
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## 📤 Output Format (Duplicate)
|
|
416
|
+
|
|
417
|
+
```markdown
|
|
418
|
+
## ⚠️ Possible Duplicate
|
|
419
|
+
|
|
420
|
+
**Attempted to file**: "Login returns 500 for emails with +"
|
|
421
|
+
|
|
422
|
+
### Existing similar bug:
|
|
423
|
+
- **BUG-003**: "Login 500 error for certain email formats"
|
|
424
|
+
- Status: IN_PROGRESS
|
|
425
|
+
- Assigned: @developer-alice
|
|
426
|
+
- Created: 2026-04-17 (1 day ago)
|
|
427
|
+
- Similarity: 92%
|
|
428
|
+
|
|
429
|
+
### Options
|
|
430
|
+
|
|
431
|
+
1. **Link as related**: Add your evidence to BUG-003 (recommended)
|
|
432
|
+
→ `/comment BUG-003 "Also reproducible with + character..."`
|
|
433
|
+
|
|
434
|
+
2. **File as new**: If you believe it's different
|
|
435
|
+
→ `/report-bug ... --force-new --link-to=BUG-003`
|
|
436
|
+
|
|
437
|
+
3. **Cancel**: Do nothing (already tracked)
|
|
438
|
+
|
|
439
|
+
What would you like to do?
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## 📤 Output Format (Reject Low Quality)
|
|
443
|
+
|
|
444
|
+
```markdown
|
|
445
|
+
## ❌ Cannot File Bug - Insufficient Info
|
|
446
|
+
|
|
447
|
+
**Attempted**: "Login is broken"
|
|
448
|
+
|
|
449
|
+
### Missing required information
|
|
450
|
+
|
|
451
|
+
- [ ] **Steps to reproduce**: What did you do exactly?
|
|
452
|
+
- [ ] **Expected**: What should happen?
|
|
453
|
+
- [ ] **Actual**: What does happen?
|
|
454
|
+
- [ ] **Environment**: Where did you see this?
|
|
455
|
+
- [ ] **Frequency**: Every time? Sometimes? Once?
|
|
456
|
+
|
|
457
|
+
### Why this matters
|
|
458
|
+
|
|
459
|
+
Developer cannot fix "broken" — needs specific scenario. Example of good bug:
|
|
460
|
+
|
|
461
|
+
> Login returns 500 for emails with + sign.
|
|
462
|
+
> Steps: 1) Go to /login, 2) Enter "user+x@y.com", 3) Click login
|
|
463
|
+
> Expected: Normal flow. Actual: HTTP 500.
|
|
464
|
+
> Env: staging, Chrome 134. Always happens.
|
|
465
|
+
|
|
466
|
+
### Options
|
|
467
|
+
|
|
468
|
+
1. **Refile with details**:
|
|
469
|
+
```
|
|
470
|
+
/report-bug "Login returns 500 for emails with +"
|
|
471
|
+
```
|
|
472
|
+
(Provide full info when prompted)
|
|
473
|
+
|
|
474
|
+
2. **Get help**: Ask scrum-master to help reproduce and file
|
|
475
|
+
|
|
476
|
+
### No bug filed.
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
## 🚨 Failure Modes
|
|
480
|
+
|
|
481
|
+
| Scenario | Action |
|
|
482
|
+
|----------|--------|
|
|
483
|
+
| No reproducer | Interactive collection or reject |
|
|
484
|
+
| Duplicate found | Suggest linking to existing |
|
|
485
|
+
| Ambiguous severity | AI suggests, human confirms |
|
|
486
|
+
| SEV-1 after hours | File + page on-call immediately |
|
|
487
|
+
| Reporter gave bad info | Diplomatic pushback, guide to quality |
|
|
488
|
+
| Evidence file too large | Store in core, link reference |
|
|
489
|
+
|
|
490
|
+
## 🔗 Related Commands
|
|
491
|
+
|
|
492
|
+
- **Before**: `/smoke-test` (often finds bugs) or manual discovery
|
|
493
|
+
- **After**:
|
|
494
|
+
- SEV-1: `/hotfix`
|
|
495
|
+
- Normal: `/triage-bug`
|
|
496
|
+
- After fix: `/verify-fix`
|
|
497
|
+
- **Alternative**: `/feedback` (for feature requests, not bugs)
|
|
498
|
+
|
|
499
|
+
## 📊 Metrics Tracked
|
|
500
|
+
|
|
501
|
+
```json
|
|
502
|
+
{
|
|
503
|
+
"timestamp": "2026-04-18T19:00:00Z",
|
|
504
|
+
"bug_id": "BUG-005",
|
|
505
|
+
"reporter": "qa-tester-agent",
|
|
506
|
+
"severity": "SEV-2",
|
|
507
|
+
"has_reproducer": true,
|
|
508
|
+
"has_evidence": true,
|
|
509
|
+
"auto_severity": true,
|
|
510
|
+
"duplicate_of": null,
|
|
511
|
+
"sev1_escalated": false,
|
|
512
|
+
"duration_to_file_minutes": 4
|
|
513
|
+
}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
**Last updated**: 2026-04-18
|
|
518
|
+
**Maintainer**: QA Lead
|