@ngocsangairvds/vsaf 5.1.5 → 5.1.7
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/package.json +1 -1
- package/packages/cli/dist/adapters/antigravity.d.ts.map +1 -1
- package/packages/cli/dist/adapters/antigravity.js +14 -30
- package/packages/cli/dist/adapters/antigravity.js.map +1 -1
- package/packages/cli/dist/adapters/claude.d.ts.map +1 -1
- package/packages/cli/dist/adapters/claude.js +8 -10
- package/packages/cli/dist/adapters/claude.js.map +1 -1
- package/packages/cli/dist/adapters/codex.d.ts.map +1 -1
- package/packages/cli/dist/adapters/codex.js +6 -9
- package/packages/cli/dist/adapters/codex.js.map +1 -1
- package/packages/cli/dist/adapters/cursor.d.ts.map +1 -1
- package/packages/cli/dist/adapters/cursor.js +22 -24
- package/packages/cli/dist/adapters/cursor.js.map +1 -1
- package/packages/cli/dist/commands/init.d.ts.map +1 -1
- package/packages/cli/dist/commands/init.js +7 -19
- package/packages/cli/dist/commands/init.js.map +1 -1
- package/packages/cli/dist/commands/install.d.ts +3 -6
- package/packages/cli/dist/commands/install.d.ts.map +1 -1
- package/packages/cli/dist/commands/install.js +27 -10
- package/packages/cli/dist/commands/install.js.map +1 -1
- package/packages/cli/dist/commands/skill.d.ts.map +1 -1
- package/packages/cli/dist/commands/skill.js +40 -16
- package/packages/cli/dist/commands/skill.js.map +1 -1
- package/packages/cli/dist/index.js +2 -2
- package/packages/cli/dist/index.js.map +1 -1
- package/packages/cli/dist/install/orchestrator.d.ts +0 -8
- package/packages/cli/dist/install/orchestrator.d.ts.map +1 -1
- package/packages/cli/dist/install/orchestrator.js +3 -54
- package/packages/cli/dist/install/orchestrator.js.map +1 -1
- package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
- package/packages/cli/dist/server/routes/runs.js +81 -3
- package/packages/cli/dist/server/routes/runs.js.map +1 -1
- package/packages/cli/dist/server/routes/workflows.d.ts.map +1 -1
- package/packages/cli/dist/server/routes/workflows.js +76 -17
- package/packages/cli/dist/server/routes/workflows.js.map +1 -1
- package/packages/cli/dist/server/services/execution-manager.d.ts +11 -1
- package/packages/cli/dist/server/services/execution-manager.d.ts.map +1 -1
- package/packages/cli/dist/server/services/execution-manager.js +88 -17
- package/packages/cli/dist/server/services/execution-manager.js.map +1 -1
- package/packages/cli/dist/server/static.d.ts.map +1 -1
- package/packages/cli/dist/server/static.js +4 -1
- package/packages/cli/dist/server/static.js.map +1 -1
- package/packages/cli/dist/server/workflow-path.d.ts +3 -0
- package/packages/cli/dist/server/workflow-path.d.ts.map +1 -0
- package/packages/cli/dist/server/workflow-path.js +25 -0
- package/packages/cli/dist/server/workflow-path.js.map +1 -0
- package/packages/core/dist/store/recovery.d.ts.map +1 -1
- package/packages/core/dist/store/recovery.js +12 -1
- package/packages/core/dist/store/recovery.js.map +1 -1
- package/packages/core/dist/store/run-store.d.ts +3 -0
- package/packages/core/dist/store/run-store.d.ts.map +1 -1
- package/packages/core/dist/store/run-store.js +33 -0
- package/packages/core/dist/store/run-store.js.map +1 -1
- package/packages/core/dist/store/types.d.ts +2 -2
- package/packages/core/dist/store/types.d.ts.map +1 -1
- package/packages/core/dist/store/types.js.map +1 -1
- package/packages/core/dist/store/wal.js +1 -1
- package/packages/core/dist/store/wal.js.map +1 -1
- package/packages/web/dist/web/3rdpartylicenses.txt +26 -26
- package/packages/web/dist/web/browser/chunk-4YPNNQ2T.js +4 -0
- package/packages/web/dist/web/browser/chunk-E227ZHPJ.js +1 -0
- package/packages/web/dist/web/browser/chunk-JFBK3MNW.js +1 -0
- package/packages/web/dist/web/browser/chunk-L2VOQBBI.js +1 -0
- package/packages/web/dist/web/browser/chunk-OJJM5VOH.js +1 -0
- package/packages/web/dist/web/browser/chunk-U2H3QYAG.js +5 -0
- package/packages/web/dist/web/browser/chunk-VA7KFQOR.js +1 -0
- package/packages/web/dist/web/browser/chunk-WV3C6DNH.js +1 -0
- package/packages/web/dist/web/browser/index.html +2 -2
- package/packages/web/dist/web/browser/main-THGFWXYL.js +1 -0
- package/packages/web/dist/web/browser/{styles-JBPZVY54.css → styles-PWTTI45T.css} +1 -1
- package/skills/sdlc/architecture/current-state/SKILL.md +10 -0
- package/skills/sdlc/architecture/current-state/step.md +13 -0
- package/skills/sdlc/architecture/decision/SKILL.md +10 -0
- package/skills/sdlc/architecture/decision/step.md +21 -0
- package/skills/sdlc/architecture/epics/SKILL.md +10 -0
- package/skills/sdlc/architecture/epics/step.md +34 -0
- package/skills/sdlc/architecture/grill/SKILL.md +10 -0
- package/skills/sdlc/architecture/grill/step.md +26 -0
- package/skills/sdlc/architecture/prereq/SKILL.md +10 -0
- package/skills/sdlc/architecture/prereq/step.md +16 -0
- package/skills/sdlc/architecture/readiness/SKILL.md +10 -0
- package/skills/sdlc/architecture/readiness/step.md +76 -0
- package/skills/sdlc/complete/context/SKILL.md +10 -0
- package/skills/sdlc/complete/context/step.md +14 -0
- package/skills/sdlc/complete/knowledge/SKILL.md +10 -0
- package/skills/sdlc/complete/knowledge/step.md +22 -0
- package/skills/sdlc/complete/prereq/SKILL.md +10 -0
- package/skills/sdlc/complete/prereq/step.md +16 -0
- package/skills/sdlc/complete/reindex/SKILL.md +10 -0
- package/skills/sdlc/complete/reindex/step.md +24 -0
- package/skills/sdlc/complete/status/SKILL.md +10 -0
- package/skills/sdlc/complete/status/step.md +52 -0
- package/skills/sdlc/discovery/brainstorm/SKILL.md +10 -0
- package/skills/sdlc/discovery/brainstorm/step.md +27 -0
- package/skills/sdlc/discovery/domain/SKILL.md +10 -0
- package/skills/sdlc/discovery/domain/step.md +13 -0
- package/skills/sdlc/discovery/grill/SKILL.md +10 -0
- package/skills/sdlc/discovery/grill/step.md +22 -0
- package/skills/sdlc/discovery/prereq/SKILL.md +10 -0
- package/skills/sdlc/discovery/prereq/step.md +16 -0
- package/skills/sdlc/discovery/prfaq/SKILL.md +10 -0
- package/skills/sdlc/discovery/prfaq/step.md +68 -0
- package/skills/sdlc/discovery/system/SKILL.md +10 -0
- package/skills/sdlc/discovery/system/step.md +19 -0
- package/skills/sdlc/hotfix/analyze/entry/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/entry/step.md +15 -0
- package/skills/sdlc/hotfix/analyze/exit/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/exit/step.md +19 -0
- package/skills/sdlc/hotfix/analyze/fix-strategy/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/fix-strategy/step.md +15 -0
- package/skills/sdlc/hotfix/analyze/gitnexus/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/gitnexus/step.md +17 -0
- package/skills/sdlc/hotfix/analyze/grill/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/grill/step.md +23 -0
- package/skills/sdlc/hotfix/analyze/reasoning/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/reasoning/step.md +29 -0
- package/skills/sdlc/hotfix/analyze/write/SKILL.md +10 -0
- package/skills/sdlc/hotfix/analyze/write/step.md +45 -0
- package/skills/sdlc/hotfix/implement/branch/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/branch/step.md +15 -0
- package/skills/sdlc/hotfix/implement/entry/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/entry/step.md +20 -0
- package/skills/sdlc/hotfix/implement/gate/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/gate/step.md +104 -0
- package/skills/sdlc/hotfix/implement/impact/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/impact/step.md +15 -0
- package/skills/sdlc/hotfix/implement/sonar/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/sonar/step.md +27 -0
- package/skills/sdlc/hotfix/implement/tdd/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/tdd/step.md +33 -0
- package/skills/sdlc/hotfix/implement/verify/SKILL.md +10 -0
- package/skills/sdlc/hotfix/implement/verify/step.md +27 -0
- package/skills/sdlc/hotfix/prd/entry/SKILL.md +10 -0
- package/skills/sdlc/hotfix/prd/entry/step.md +20 -0
- package/skills/sdlc/hotfix/prd/gate/SKILL.md +10 -0
- package/skills/sdlc/hotfix/prd/gate/step.md +32 -0
- package/skills/sdlc/hotfix/prd/requirements/SKILL.md +10 -0
- package/skills/sdlc/hotfix/prd/requirements/step.md +19 -0
- package/skills/sdlc/hotfix/prd/validate/SKILL.md +10 -0
- package/skills/sdlc/hotfix/prd/validate/step.md +19 -0
- package/skills/sdlc/hotfix/prd/write/SKILL.md +10 -0
- package/skills/sdlc/hotfix/prd/write/step.md +38 -0
- package/skills/sdlc/hotfix/review/entry/SKILL.md +10 -0
- package/skills/sdlc/hotfix/review/entry/step.md +13 -0
- package/skills/sdlc/hotfix/review/gate/SKILL.md +10 -0
- package/skills/sdlc/hotfix/review/gate/step.md +51 -0
- package/skills/sdlc/hotfix/review/impact/SKILL.md +10 -0
- package/skills/sdlc/hotfix/review/impact/step.md +22 -0
- package/skills/sdlc/hotfix/review/minimality/SKILL.md +10 -0
- package/skills/sdlc/hotfix/review/minimality/step.md +18 -0
- package/skills/sdlc/hotfix/review/test-quality/SKILL.md +10 -0
- package/skills/sdlc/hotfix/review/test-quality/step.md +16 -0
- package/skills/sdlc/hotfix/ship/commit-pr/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/commit-pr/step.md +58 -0
- package/skills/sdlc/hotfix/ship/entry/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/entry/step.md +20 -0
- package/skills/sdlc/hotfix/ship/exit/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/exit/step.md +31 -0
- package/skills/sdlc/hotfix/ship/gitignore/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/gitignore/step.md +22 -0
- package/skills/sdlc/hotfix/ship/report/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/report/step.md +47 -0
- package/skills/sdlc/hotfix/ship/test-gate/SKILL.md +10 -0
- package/skills/sdlc/hotfix/ship/test-gate/step.md +17 -0
- package/skills/sdlc/implement/build-run/SKILL.md +10 -0
- package/skills/sdlc/implement/build-run/step.md +85 -0
- package/skills/sdlc/implement/checkpoint/SKILL.md +10 -0
- package/skills/sdlc/implement/checkpoint/step.md +20 -0
- package/skills/sdlc/implement/debug/SKILL.md +10 -0
- package/skills/sdlc/implement/debug/step.md +25 -0
- package/skills/sdlc/implement/impact/SKILL.md +10 -0
- package/skills/sdlc/implement/impact/step.md +12 -0
- package/skills/sdlc/implement/plan/SKILL.md +10 -0
- package/skills/sdlc/implement/plan/step.md +13 -0
- package/skills/sdlc/implement/prereq/SKILL.md +10 -0
- package/skills/sdlc/implement/prereq/step.md +21 -0
- package/skills/sdlc/implement/subagents/SKILL.md +10 -0
- package/skills/sdlc/implement/subagents/step.md +38 -0
- package/skills/sdlc/implement/tdd/SKILL.md +10 -0
- package/skills/sdlc/implement/tdd/step.md +24 -0
- package/skills/sdlc/init/SKILL.md +7 -0
- package/skills/sdlc/onboard-code/SKILL.md +7 -0
- package/skills/sdlc/onboard-docs/SKILL.md +7 -0
- package/skills/sdlc/pack.yaml +83 -16
- package/skills/sdlc/prd/blast-radius/SKILL.md +10 -0
- package/skills/sdlc/prd/blast-radius/step.md +76 -0
- package/skills/sdlc/prd/create/SKILL.md +10 -0
- package/skills/sdlc/prd/create/step.md +21 -0
- package/skills/sdlc/prd/elicitation/SKILL.md +10 -0
- package/skills/sdlc/prd/elicitation/step.md +12 -0
- package/skills/sdlc/prd/prereq/SKILL.md +10 -0
- package/skills/sdlc/prd/prereq/step.md +16 -0
- package/skills/sdlc/prd/validate/SKILL.md +10 -0
- package/skills/sdlc/prd/validate/step.md +24 -0
- package/skills/sdlc/review/code/SKILL.md +10 -0
- package/skills/sdlc/review/code/step.md +45 -0
- package/skills/sdlc/review/debate/SKILL.md +10 -0
- package/skills/sdlc/review/debate/step.md +84 -0
- package/skills/sdlc/review/impact/SKILL.md +10 -0
- package/skills/sdlc/review/impact/step.md +14 -0
- package/skills/sdlc/review/prereq/SKILL.md +10 -0
- package/skills/sdlc/review/prereq/step.md +18 -0
- package/skills/sdlc/review/verification/SKILL.md +10 -0
- package/skills/sdlc/review/verification/step.md +16 -0
- package/skills/sdlc/ship/commit/SKILL.md +10 -0
- package/skills/sdlc/ship/commit/step.md +23 -0
- package/skills/sdlc/ship/gitignore/SKILL.md +10 -0
- package/skills/sdlc/ship/gitignore/step.md +22 -0
- package/skills/sdlc/ship/pr/SKILL.md +10 -0
- package/skills/sdlc/ship/pr/step.md +34 -0
- package/skills/sdlc/ship/prereq/SKILL.md +10 -0
- package/skills/sdlc/ship/prereq/step.md +16 -0
- package/skills/sdlc/ship/report/SKILL.md +10 -0
- package/skills/sdlc/ship/report/step.md +74 -0
- package/skills/sdlc/srs/interface/SKILL.md +10 -0
- package/skills/sdlc/srs/interface/step.md +44 -0
- package/skills/sdlc/srs/prereq/SKILL.md +10 -0
- package/skills/sdlc/srs/prereq/step.md +19 -0
- package/skills/sdlc/srs/validate/SKILL.md +10 -0
- package/skills/sdlc/srs/validate/step.md +23 -0
- package/skills/sdlc/srs/write/SKILL.md +10 -0
- package/skills/sdlc/srs/write/step.md +19 -0
- package/skills/sdlc/test-design/boundary/SKILL.md +10 -0
- package/skills/sdlc/test-design/boundary/step.md +12 -0
- package/skills/sdlc/test-design/cases/SKILL.md +10 -0
- package/skills/sdlc/test-design/cases/step.md +22 -0
- package/skills/sdlc/test-design/coverage/SKILL.md +10 -0
- package/skills/sdlc/test-design/coverage/step.md +63 -0
- package/skills/sdlc/test-design/prereq/SKILL.md +10 -0
- package/skills/sdlc/test-design/prereq/step.md +15 -0
- package/{skills/sdlc/workflows → workflows/sdlc}/hotfix-tdd.yaml +2 -1
- package/{skills/sdlc/workflows → workflows/sdlc}/hotfix.yaml +8 -4
- package/workflows/sdlc/master-sdlc.yaml +64 -0
- package/workflows/sdlc/sdlc-architecture.yaml +43 -0
- package/workflows/sdlc/sdlc-build.yaml +51 -0
- package/workflows/sdlc/sdlc-design.yaml +61 -0
- package/workflows/sdlc/sdlc-discovery.yaml +43 -0
- package/workflows/sdlc/sdlc-feature-complete.yaml +36 -0
- package/workflows/sdlc/sdlc-hotfix-analyze.yaml +43 -0
- package/workflows/sdlc/sdlc-hotfix-implement.yaml +43 -0
- package/workflows/sdlc/sdlc-hotfix-prd.yaml +31 -0
- package/workflows/sdlc/sdlc-hotfix-review.yaml +31 -0
- package/workflows/sdlc/sdlc-hotfix-ship.yaml +37 -0
- package/workflows/sdlc/sdlc-implement.yaml +60 -0
- package/workflows/sdlc/sdlc-prd.yaml +36 -0
- package/workflows/sdlc/sdlc-qa.yaml +91 -0
- package/workflows/sdlc/sdlc-review.yaml +36 -0
- package/workflows/sdlc/sdlc-ship.yaml +36 -0
- package/workflows/sdlc/sdlc-srs.yaml +29 -0
- package/workflows/sdlc/sdlc-test-design.yaml +29 -0
- package/workflows/sdlc/sdlc-testcase.yaml +25 -0
- package/workflows/sdlc/sdlc-thinking.yaml +67 -0
- package/packages/web/dist/web/browser/chunk-IPMFXW6N.js +0 -1
- package/packages/web/dist/web/browser/chunk-IX2QWMX2.js +0 -1
- package/packages/web/dist/web/browser/chunk-QMAH5NZC.js +0 -1
- package/packages/web/dist/web/browser/chunk-RGFLNLPM.js +0 -1
- package/packages/web/dist/web/browser/chunk-RKWDHBN3.js +0 -5
- package/packages/web/dist/web/browser/chunk-XGYEZIV4.js +0 -1
- package/packages/web/dist/web/browser/main-IIUZVPMI.js +0 -1
- package/skills/sdlc/architecture/SKILL.md +0 -218
- package/skills/sdlc/discovery/SKILL.md +0 -197
- package/skills/sdlc/feature-complete/SKILL.md +0 -159
- package/skills/sdlc/hotfix-analyze/SKILL.md +0 -198
- package/skills/sdlc/hotfix-implement/SKILL.md +0 -272
- package/skills/sdlc/hotfix-prd/SKILL.md +0 -161
- package/skills/sdlc/hotfix-review/SKILL.md +0 -153
- package/skills/sdlc/hotfix-ship/SKILL.md +0 -221
- package/skills/sdlc/implement/SKILL.md +0 -264
- package/skills/sdlc/prd/SKILL.md +0 -182
- package/skills/sdlc/review/SKILL.md +0 -210
- package/skills/sdlc/ship/SKILL.md +0 -194
- package/skills/sdlc/srs/SKILL.md +0 -148
- package/skills/sdlc/test-design/SKILL.md +0 -132
- package/skills/sdlc/workflows/master-sdlc.yaml +0 -35
- package/skills/sdlc/workflows/sdlc-build.yaml +0 -18
- package/skills/sdlc/workflows/sdlc-design.yaml +0 -14
- package/skills/sdlc/workflows/sdlc-qa.yaml +0 -20
- package/skills/sdlc/workflows/sdlc-testcase.yaml +0 -8
- package/skills/sdlc/workflows/sdlc-thinking.yaml +0 -12
- /package/{skills/sdlc/workflows → workflows/sdlc}/onboarding.yaml +0 -0
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc-hotfix-analyze
|
|
3
|
-
description: "Hotfix Phase 1 — Analyze bug report via GitNexus impact + context, identify root cause and blast radius"
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
author: "@ngocsangairvds/vsaf"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Hotfix Phase 1: Analyze Bug Report
|
|
9
|
-
|
|
10
|
-
You are a Senior Bug Analyst. Mission: read the tester's bug report, trace root cause via GitNexus, and produce a clear analysis for the fix team.
|
|
11
|
-
|
|
12
|
-
## Language Rule
|
|
13
|
-
|
|
14
|
-
Output documents (01-analysis.md) MUST be written in Vietnamese. Only keep English for: IDs, technical terms, code references. The template below shows structure only — write actual content in Vietnamese.
|
|
15
|
-
|
|
16
|
-
## Progress Protocol
|
|
17
|
-
|
|
18
|
-
Print progress at each step:
|
|
19
|
-
```
|
|
20
|
-
[HOTFIX-ANALYZE] [step/6] description... ⏳
|
|
21
|
-
[HOTFIX-ANALYZE] [step/6] description... ✅
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Index Protection
|
|
25
|
-
|
|
26
|
-
⛔ Do NOT modify `graphify-out/` or `.gitnexus/` — READ only.
|
|
27
|
-
|
|
28
|
-
## Phase Entry Protocol
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
[HOTFIX-ANALYZE] [1/6] Reading bug report... ⏳
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
1. Input: `$ARGUMENTS` — path to bug report file from tester
|
|
35
|
-
2. Read the bug report file
|
|
36
|
-
3. Read `CONTEXT.md` for domain context
|
|
37
|
-
4. Read `.vsaf/docs/STATUS.md`
|
|
38
|
-
5. Extract a short `{bug-id}` from the report filename or title (e.g., `fix-null-rating`, `fix-auth-timeout`)
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
[HOTFIX-ANALYZE] [1/6] Reading bug report... ✅
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Tasks
|
|
45
|
-
|
|
46
|
-
### Step 2: Grill Session — Clarify Bug Context
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
[HOTFIX-ANALYZE] [2/6] Grill session — interviewing user about bug... ⏳
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Use `/grill-me` to interview the user about the bug. Walk down each branch of the problem tree:
|
|
53
|
-
- What exactly was observed? Under what conditions?
|
|
54
|
-
- Can it be reproduced consistently? What are the exact steps?
|
|
55
|
-
- When did it start? What changed recently?
|
|
56
|
-
- What is the expected behavior vs actual behavior?
|
|
57
|
-
- Which users/environments are affected?
|
|
58
|
-
- Any workarounds discovered?
|
|
59
|
-
|
|
60
|
-
Continue grilling until you have a complete understanding. Then extract:
|
|
61
|
-
- **Symptoms** — what the tester/user observed
|
|
62
|
-
- **Reproduction steps** — exact steps to trigger the bug
|
|
63
|
-
- **Expected vs actual behavior**
|
|
64
|
-
- **Affected area** — which feature/module/endpoint
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
[HOTFIX-ANALYZE] [2/6] Grill session complete ✅
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Step 3: Root Cause via GitNexus
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
[HOTFIX-ANALYZE] [3/6] Mapping code structure via GitNexus... ⏳
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
1. Use GitNexus `context` — understand the affected module's structure and dependencies
|
|
77
|
-
2. Use GitNexus `impact` — trace which files and symbols are in the blast radius
|
|
78
|
-
3. Use GitNexus `route_map` — map the call chain from entry point to suspected buggy code
|
|
79
|
-
4. Collect:
|
|
80
|
-
- **Affected files** — files that contain or touch the suspected area
|
|
81
|
-
- **Call chain** — entry point → intermediate → suspected defect
|
|
82
|
-
- **Blast radius** — what else could break if this area is changed
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
[HOTFIX-ANALYZE] [3/6] Mapping code structure via GitNexus... ✅
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Step 4: Deep Thinking — Root Cause Reasoning
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
[HOTFIX-ANALYZE] [4/6] Deep thinking — reasoning about root cause... ⏳
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Two approaches available — choose based on complexity:**
|
|
95
|
-
|
|
96
|
-
**Option A: Full approach** — Use `/superpowers:systematic-debugging` for complex, multi-layered bugs where you need structured hypothesis testing with instrumentation.
|
|
97
|
-
|
|
98
|
-
**Option B: Lean approach (mattpocock)** — Use `/diagnose` for focused bugs where the feedback loop is clear. `/diagnose` provides a disciplined 6-phase loop: build feedback loop → reproduce → hypothesise → instrument → fix → regression-test. Also use `/zoom-out` if the affected code area is unfamiliar.
|
|
99
|
-
|
|
100
|
-
Regardless of approach:
|
|
101
|
-
|
|
102
|
-
1. **Read the actual source code** — do NOT rely only on GitNexus metadata. Open and read every file in the call chain identified in Step 3.
|
|
103
|
-
2. **Form hypotheses** — based on symptoms + code reading, list 2-3 possible root causes
|
|
104
|
-
3. **Evaluate each hypothesis:**
|
|
105
|
-
- Does it explain ALL symptoms from the bug report?
|
|
106
|
-
- Does it match the reproduction steps?
|
|
107
|
-
- Is it consistent with the code structure from GitNexus?
|
|
108
|
-
4. **Eliminate** — rule out hypotheses that don't explain all symptoms
|
|
109
|
-
5. **Conclude** — select the most likely root cause with specific file:line reference
|
|
110
|
-
6. **Propose fix strategy** — minimal approach to fix the confirmed root cause
|
|
111
|
-
|
|
112
|
-
If no hypothesis explains all symptoms → the bug report may be incomplete. List what information is missing.
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
[HOTFIX-ANALYZE] [4/6] Deep thinking — reasoning about root cause... ✅
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Step 5: Grill Fix Strategy
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
[HOTFIX-ANALYZE] [5/6] Grill session — stress-testing fix strategy... ⏳
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
Use `/grill-me` again to stress-test the proposed fix strategy with the user:
|
|
125
|
-
- Does the fix address the root cause, not just the symptom?
|
|
126
|
-
- Are there edge cases the fix could miss?
|
|
127
|
-
- Could the fix introduce regressions in related areas?
|
|
128
|
-
- Is the fix scope appropriate for a hotfix (minimal)?
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
[HOTFIX-ANALYZE] [5/6] Fix strategy validated ✅
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Step 6: Write Analysis
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
[HOTFIX-ANALYZE] [6/6] Writing analysis document... ⏳
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Create directory `.vsaf/docs/hotfixes/{bug-id}/` if it doesn't exist.
|
|
141
|
-
|
|
142
|
-
Write file: `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md`
|
|
143
|
-
|
|
144
|
-
```markdown
|
|
145
|
-
# Bug Analysis: {bug-id}
|
|
146
|
-
|
|
147
|
-
## Tester Report
|
|
148
|
-
{summary of bug report}
|
|
149
|
-
|
|
150
|
-
## Symptoms
|
|
151
|
-
{symptoms observed}
|
|
152
|
-
|
|
153
|
-
## Reproduction Steps
|
|
154
|
-
{reproduction steps}
|
|
155
|
-
|
|
156
|
-
## Hypotheses
|
|
157
|
-
| # | Hypothesis | Explains all symptoms? | Verdict |
|
|
158
|
-
|---|-----------|----------------------|---------|
|
|
159
|
-
| 1 | {hypothesis} | {yes/no + why} | Eliminated / Selected |
|
|
160
|
-
|
|
161
|
-
## Root Cause
|
|
162
|
-
{confirmed root cause — specific code defect with file:line references}
|
|
163
|
-
|
|
164
|
-
## Affected Files
|
|
165
|
-
| File | Role | Severity |
|
|
166
|
-
|------|------|----------|
|
|
167
|
-
| {file} | {role in the bug} | Direct / Indirect |
|
|
168
|
-
|
|
169
|
-
## Blast Radius
|
|
170
|
-
{what else could break}
|
|
171
|
-
|
|
172
|
-
## Fix Strategy
|
|
173
|
-
{minimal fix approach — what to change and why}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
[HOTFIX-ANALYZE] [6/6] Writing analysis document... ✅
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Phase Exit Protocol
|
|
181
|
-
|
|
182
|
-
Print PHASE REPORT:
|
|
183
|
-
- Bug: {bug-id}
|
|
184
|
-
- Status: ANALYSIS COMPLETED
|
|
185
|
-
- Root cause: {one-line summary}
|
|
186
|
-
- Affected files: {count} files
|
|
187
|
-
- Output: `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md`
|
|
188
|
-
- Next step: `/sdlc-hotfix-prd`
|
|
189
|
-
|
|
190
|
-
Update `.vsaf/docs/STATUS.md`.
|
|
191
|
-
|
|
192
|
-
## Rules
|
|
193
|
-
|
|
194
|
-
- ⛔ Do NOT modify code — analysis only
|
|
195
|
-
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
196
|
-
- GitNexus impact analysis is MANDATORY — never skip it
|
|
197
|
-
- Root cause must reference specific file:line, not vague descriptions
|
|
198
|
-
- `/grill-me` is MANDATORY — used in Step 2 (clarify bug) and Step 5 (validate fix strategy)
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc-hotfix-implement
|
|
3
|
-
description: "Hotfix Phase 3 — TDD implementation: RED → GREEN → REFACTOR, minimal fix, SonarQube-in-loop"
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
author: "@ngocsangairvds/vsaf"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Hotfix Phase 3: Implementation (TDD)
|
|
9
|
-
|
|
10
|
-
You are a Senior Software Engineer performing a surgical fix. Mission: implement the fix using strict TDD — write failing test first, make it pass with minimal code, refactor. No subagents, no parallel epics — hotfixes are focused single-area changes.
|
|
11
|
-
|
|
12
|
-
## Progress Protocol
|
|
13
|
-
|
|
14
|
-
Print progress at each step:
|
|
15
|
-
```
|
|
16
|
-
[HOTFIX-IMPL] [step/6] description... ⏳
|
|
17
|
-
[HOTFIX-IMPL] [step/6] description... ✅
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Index Protection
|
|
21
|
-
|
|
22
|
-
⛔ Do NOT modify `graphify-out/` or `.gitnexus/` — READ only.
|
|
23
|
-
|
|
24
|
-
## Phase Entry Protocol
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
[HOTFIX-IMPL] [1/6] Checking input artifacts... ⏳
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
1. Input:
|
|
31
|
-
- `.vsaf/docs/hotfixes/{bug-id}/02-prd.md`
|
|
32
|
-
- `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md`
|
|
33
|
-
2. Verify BOTH files exist:
|
|
34
|
-
- Missing → Stop: "Run previous phases first."
|
|
35
|
-
3. Check `02-prd.md` has `## Gate: APPROVED`
|
|
36
|
-
- No Gate → Stop: "PRD not approved. Get approval first."
|
|
37
|
-
4. Extract from PRD: FRs, acceptance criteria, scope boundary
|
|
38
|
-
5. Extract from analysis: root cause (file:line), affected files, fix strategy
|
|
39
|
-
6. Read `CONTEXT.md`
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
[HOTFIX-IMPL] [1/6] Checking input artifacts... ✅
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Tasks
|
|
46
|
-
|
|
47
|
-
### Step 2: Branch Setup
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
[HOTFIX-IMPL] [2/6] Creating hotfix branch... ⏳
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
git checkout -b hotfix/{bug-id}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
If branch already exists → switch to it.
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
[HOTFIX-IMPL] [2/6] Creating hotfix branch... ✅
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Step 3: TDD Cycle — `/tdd` Methodology
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
[HOTFIX-IMPL] [3/6] TDD cycle — RED → GREEN → REFACTOR... ⏳
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Use `/tdd` methodology — behavior-based, vertical slice:
|
|
70
|
-
|
|
71
|
-
**For each FR in the PRD:**
|
|
72
|
-
|
|
73
|
-
1. **RED — Write failing test FIRST**
|
|
74
|
-
- Test the BEHAVIOR described in the acceptance criteria
|
|
75
|
-
- Test the PUBLIC INTERFACE, not internals
|
|
76
|
-
- Include the regression test: reproduce the original bug → MUST FAIL before fix
|
|
77
|
-
- Run test → confirm it FAILS (red)
|
|
78
|
-
- ⚠️ If test passes without code changes → the test is wrong or the bug is already fixed
|
|
79
|
-
|
|
80
|
-
2. **GREEN — Write MINIMAL code to pass**
|
|
81
|
-
- Change ONLY what is needed to make the test pass
|
|
82
|
-
- Stay within the scope boundary from PRD
|
|
83
|
-
- Apply SonarQube rules while writing (see below)
|
|
84
|
-
- Run test → confirm it PASSES (green)
|
|
85
|
-
|
|
86
|
-
3. **REFACTOR — Clean without changing behavior**
|
|
87
|
-
- Remove duplication introduced by the fix
|
|
88
|
-
- Improve naming if needed
|
|
89
|
-
- Run ALL tests → still green
|
|
90
|
-
|
|
91
|
-
**Repeat for each FR.** Typically 1-3 cycles for a hotfix.
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
[HOTFIX-IMPL] [3/6] TDD cycle complete ✅
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Step 4: SonarQube Self-Check
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
[HOTFIX-IMPL] [4/6] SonarQube quality check... ⏳
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Apply DURING Step 3 (not after). After the fix is complete, final sweep.
|
|
104
|
-
|
|
105
|
-
> **Standard (single source of truth):** **`.claude/skills/_shared/sdlc/sonar-viettel/quality-gate.md`** — full gate, 357-rule parameters, and the importable `sonar-viettel-profile.xml` / `sonar-viettel-gate.json`. Phase 4 (`/sdlc-hotfix-review`) re-checks the same file. A hotfix applies the gate's **New Code** conditions on changed files.
|
|
106
|
-
|
|
107
|
-
| Metric | Threshold |
|
|
108
|
-
|--------|-----------|
|
|
109
|
-
| Issues / Blocker / Critical / Major | = 0 |
|
|
110
|
-
| Code Smells (new) | = 0 — stricter than the gate's ≤20 **by design**: a surgical 1–3 line fix has no excuse to add a smell, and `/sdlc-hotfix-review` rejects any new smell |
|
|
111
|
-
| Vulnerabilities | = 0 |
|
|
112
|
-
| Security Hotspots Reviewed | = 100% |
|
|
113
|
-
| Duplicated Lines (new) | ≤ 45% |
|
|
114
|
-
| Maintainability / Reliability / Security Rating | ≥ A |
|
|
115
|
-
|
|
116
|
-
**Honour the `sonar-viettel` parametrised rules in the changed code** — S107 (params), S3776 (complexity), S1192 (literals), S2068/S2077 (secrets/injection), S100/S101/S115 (naming). **Thresholds are authoritative in the profile XML** — derive them via the snippet in the shared `quality-gate.md`, do not hard-code numbers.
|
|
117
|
-
|
|
118
|
-
- If project has SonarQube → import the profile + gate from the shared folder, then run `sonar-scanner` incremental
|
|
119
|
-
- If not → Claude self-reviews changed files against the shared `quality-gate.md`
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
[HOTFIX-IMPL] [4/6] SonarQube quality check... ✅
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Step 5: Build & Test Verification
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
[HOTFIX-IMPL] [5/6] Build & test verification... ⏳
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**MANDATORY — hard gate:**
|
|
132
|
-
|
|
133
|
-
1. **Compile**: Build entire project → 0 errors
|
|
134
|
-
- Java: `mvn compile` / `gradle build`
|
|
135
|
-
- Node: `npm run build` / `tsc --noEmit`
|
|
136
|
-
- Angular: `ng build`
|
|
137
|
-
- Go: `go build ./...`
|
|
138
|
-
- FAIL → fix immediately
|
|
139
|
-
|
|
140
|
-
2. **Full test suite**: Run ALL tests (not just new ones)
|
|
141
|
-
- `npm test` / `mvn test` / equivalent
|
|
142
|
-
- ALL tests MUST pass — no regressions
|
|
143
|
-
- FAIL → use `/diagnose` to find the issue
|
|
144
|
-
|
|
145
|
-
3. **Regression test confirmation**: The specific test from Step 3 RED phase → now PASSES
|
|
146
|
-
|
|
147
|
-
⚠️ DO NOT exit if build fails or tests fail. This is a hard gate.
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
[HOTFIX-IMPL] [5/6] Build & test verification... ✅
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Step 6: Impact Verification
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
[HOTFIX-IMPL] [6/6] Impact verification via GitNexus... ⏳
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
Use GitNexus `impact` — verify the fix did not break anything outside blast radius.
|
|
160
|
-
|
|
161
|
-
If unexpected impact detected → evaluate:
|
|
162
|
-
- Within scope boundary → OK, note in impl log
|
|
163
|
-
- Outside scope boundary → STOP, escalate to user
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
[HOTFIX-IMPL] [6/6] Impact verification... ✅
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Verification Gate
|
|
170
|
-
|
|
171
|
-
⛔ **NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.**
|
|
172
|
-
|
|
173
|
-
Before printing Phase Exit, you MUST pass ALL checks below. For each check: **run the command → read the full output → verify the claim matches the output.** Do NOT trust memory, do NOT trust previous runs, do NOT say "should pass."
|
|
174
|
-
|
|
175
|
-
| # | Check | Command to Run | Evidence Required | ❌ NOT Acceptable |
|
|
176
|
-
|---|-------|---------------|-------------------|-------------------|
|
|
177
|
-
| 1 | Build compiles | `mvn compile` / `npm run build` / equivalent | `BUILD SUCCESS` or `0 errors` in output | "It compiled earlier" |
|
|
178
|
-
| 2 | All tests pass | `npm test` / `mvn test` / equivalent | `X passed, 0 failed` in output | "Tests should still pass" |
|
|
179
|
-
| 3 | Regression test passes | Run specific test by name | Test name + PASS in output | "I wrote the test so it passes" |
|
|
180
|
-
| 4 | No new SonarQube issues | Check output from Step 4 | 0 blockers, 0 critical, 0 vulns | "Code looks clean" |
|
|
181
|
-
| 5 | GitNexus impact clean | Check output from Step 6 | Blast radius matches analysis | "Fix is minimal so it's fine" |
|
|
182
|
-
| 6 | Scope boundary held | `git diff --stat` | Changed files ⊆ files listed in analysis | "I only changed what was needed" |
|
|
183
|
-
|
|
184
|
-
**Red flags — if you catch yourself thinking any of these, STOP and run the command:**
|
|
185
|
-
- "It should work" → Run it and prove it
|
|
186
|
-
- "I'm confident" → Confidence ≠ evidence
|
|
187
|
-
- "I already checked" → Check again with fresh output
|
|
188
|
-
- "It's a small change so it's safe" → Small changes break big systems
|
|
189
|
-
- "The test passed during TDD" → TDD was minutes ago; verify NOW
|
|
190
|
-
|
|
191
|
-
**Procedure:**
|
|
192
|
-
1. Run checks 1-6 sequentially
|
|
193
|
-
2. For each: paste the **actual command output** (or key lines) into `03-impl-log.md` under a `## Verification Evidence` section
|
|
194
|
-
3. If ANY check fails → fix → re-run ALL checks (not just the failed one)
|
|
195
|
-
4. Only after ALL 6 checks show fresh passing evidence → proceed to Phase Exit
|
|
196
|
-
|
|
197
|
-
## Output
|
|
198
|
-
|
|
199
|
-
Write file: `.vsaf/docs/hotfixes/{bug-id}/03-impl-log.md`
|
|
200
|
-
|
|
201
|
-
```markdown
|
|
202
|
-
# Implementation Log: {bug-id}
|
|
203
|
-
|
|
204
|
-
## Branch
|
|
205
|
-
`hotfix/{bug-id}`
|
|
206
|
-
|
|
207
|
-
## TDD Cycles
|
|
208
|
-
|
|
209
|
-
### FR-001: {title}
|
|
210
|
-
- RED: {test file}:{test name} — FAILED ✓
|
|
211
|
-
- GREEN: {changed files} — PASSED ✓
|
|
212
|
-
- REFACTOR: {what was cleaned}
|
|
213
|
-
|
|
214
|
-
### FR-002: {title} (if applicable)
|
|
215
|
-
...
|
|
216
|
-
|
|
217
|
-
## Files Changed
|
|
218
|
-
| File | Change type | Lines |
|
|
219
|
-
|------|-------------|-------|
|
|
220
|
-
| {file} | Modified / Added | +{n} -{m} |
|
|
221
|
-
|
|
222
|
-
## Test Results
|
|
223
|
-
- New tests: {count}
|
|
224
|
-
- Regression test: {test name} — PASS
|
|
225
|
-
- Full suite: {total} tests, all PASS
|
|
226
|
-
|
|
227
|
-
## SonarQube
|
|
228
|
-
- Issues: 0
|
|
229
|
-
- Vulnerabilities: 0
|
|
230
|
-
- Duplication: {n}%
|
|
231
|
-
|
|
232
|
-
## Build
|
|
233
|
-
- Compile: PASS
|
|
234
|
-
- Full test suite: PASS
|
|
235
|
-
|
|
236
|
-
## Verification Evidence
|
|
237
|
-
|
|
238
|
-
| # | Check | Result | Evidence |
|
|
239
|
-
|---|-------|--------|----------|
|
|
240
|
-
| 1 | Build compiles | ✅ PASS | `{actual build output line}` |
|
|
241
|
-
| 2 | All tests pass | ✅ PASS | `{X} passed, 0 failed` |
|
|
242
|
-
| 3 | Regression test | ✅ PASS | `{test name} — PASSED` |
|
|
243
|
-
| 4 | SonarQube clean | ✅ PASS | 0 blocker, 0 critical, 0 vuln |
|
|
244
|
-
| 5 | Impact clean | ✅ PASS | Blast radius = {files}, matches analysis |
|
|
245
|
-
| 6 | Scope held | ✅ PASS | `git diff --stat`: {n} files changed, all within scope |
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
## Phase Exit Protocol
|
|
249
|
-
|
|
250
|
-
Print PHASE REPORT:
|
|
251
|
-
- Bug: {bug-id}
|
|
252
|
-
- Status: IMPLEMENTATION COMPLETED
|
|
253
|
-
- Branch: `hotfix/{bug-id}`
|
|
254
|
-
- Tests: {new} new, {total} total — all PASS
|
|
255
|
-
- Files changed: {count}
|
|
256
|
-
- Output: `.vsaf/docs/hotfixes/{bug-id}/03-impl-log.md`
|
|
257
|
-
- Next step: `/sdlc-hotfix-ship`
|
|
258
|
-
|
|
259
|
-
Update `.vsaf/docs/STATUS.md`.
|
|
260
|
-
|
|
261
|
-
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
262
|
-
|
|
263
|
-
## Rules
|
|
264
|
-
|
|
265
|
-
- ⛔ Do NOT write code without a failing test first (TDD)
|
|
266
|
-
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
267
|
-
- ⛔ Do NOT exceed scope boundary defined in PRD
|
|
268
|
-
- ⛔ Do NOT use subagent-driven development — hotfixes are sequential, focused
|
|
269
|
-
- Code MUST compile — hard gate, no exceptions
|
|
270
|
-
- Full test suite MUST pass — no regressions allowed
|
|
271
|
-
- If fix fails 3 times → STOP, escalate to user
|
|
272
|
-
- If scope drift detected → STOP, go back to PRD
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc-hotfix-prd
|
|
3
|
-
description: "Hotfix Phase 2 — Lightweight PRD from analysis: fix requirements, acceptance criteria, scope"
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
author: "@ngocsangairvds/vsaf"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Hotfix Phase 2: PRD (Fix Requirements)
|
|
9
|
-
|
|
10
|
-
You are a Principal Product Owner focused on a surgical fix. Mission: define exactly what needs to change, acceptance criteria, and "done" definition — no discovery needed (grill already happened in analyze phase).
|
|
11
|
-
|
|
12
|
-
## Language Rule
|
|
13
|
-
|
|
14
|
-
Output documents (02-prd.md) MUST be written in Vietnamese. Only keep English for: IDs, technical terms, code references.
|
|
15
|
-
|
|
16
|
-
## Progress Protocol
|
|
17
|
-
|
|
18
|
-
Print progress at each step:
|
|
19
|
-
```
|
|
20
|
-
[HOTFIX-PRD] [step/4] description... ⏳
|
|
21
|
-
[HOTFIX-PRD] [step/4] description... ✅
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Index Protection
|
|
25
|
-
|
|
26
|
-
⛔ Do NOT modify `graphify-out/` or `.gitnexus/` — READ only.
|
|
27
|
-
|
|
28
|
-
## Phase Entry Protocol
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
[HOTFIX-PRD] [1/4] Checking input artifacts... ⏳
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
1. Input: `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md`
|
|
35
|
-
2. Verify file exists:
|
|
36
|
-
- Does not exist → Stop: "Analysis not found. Run `/sdlc-hotfix-analyze` first."
|
|
37
|
-
3. Read the analysis file — extract:
|
|
38
|
-
- Root cause (file:line)
|
|
39
|
-
- Blast radius
|
|
40
|
-
- Fix strategy (proposed in analyze phase)
|
|
41
|
-
- Affected files
|
|
42
|
-
4. Read `.vsaf/docs/STATUS.md`
|
|
43
|
-
5. Read `CONTEXT.md`
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
[HOTFIX-PRD] [1/4] Checking input artifacts... ✅
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Tasks
|
|
50
|
-
|
|
51
|
-
### Step 2: Define Fix Requirements
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
[HOTFIX-PRD] [2/4] Defining fix requirements from analysis... ⏳
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Based on the analysis (NOT a new grill session — that already happened), define:
|
|
58
|
-
|
|
59
|
-
1. **Fix Goal** — one sentence: what the fix achieves
|
|
60
|
-
2. **Functional Requirements** — FR-001, FR-002... (typically 1-3 for a hotfix)
|
|
61
|
-
- Each FR traces to the root cause or blast radius item
|
|
62
|
-
3. **Acceptance Criteria** — Given/When/Then for each FR
|
|
63
|
-
- MUST include a regression test criterion: "Given the fix is applied, When {original reproduction steps}, Then {expected behavior}"
|
|
64
|
-
4. **Scope Boundary** — explicitly state what is OUT of scope (no refactoring, no enhancements)
|
|
65
|
-
5. **Non-Functional Requirements** — only if relevant (performance regression, security)
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
[HOTFIX-PRD] [2/4] Defining fix requirements... ✅
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Step 3: Validate + Risk Check
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
[HOTFIX-PRD] [3/4] Validating PRD... ⏳
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Use `/bmad-validate-prd` — validate:
|
|
78
|
-
- Every FR is testable
|
|
79
|
-
- Acceptance criteria are unambiguous
|
|
80
|
-
- Scope is minimal (hotfix, not enhancement)
|
|
81
|
-
- Fix addresses root cause, not just symptom
|
|
82
|
-
|
|
83
|
-
If FAIL → fix inline, re-validate.
|
|
84
|
-
|
|
85
|
-
Use GitNexus `impact` — confirm blast radius from analysis is still accurate.
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
[HOTFIX-PRD] [3/4] Validating PRD... ✅
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Step 4: Write PRD
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
[HOTFIX-PRD] [4/4] Writing hotfix PRD... ⏳
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Write file: `.vsaf/docs/hotfixes/{bug-id}/02-prd.md`
|
|
98
|
-
|
|
99
|
-
```markdown
|
|
100
|
-
# Hotfix PRD: {bug-id}
|
|
101
|
-
|
|
102
|
-
## Fix Goal
|
|
103
|
-
{one sentence}
|
|
104
|
-
|
|
105
|
-
## Source
|
|
106
|
-
- Analysis: `01-analysis.md`
|
|
107
|
-
- Root cause: {file:line — summary}
|
|
108
|
-
|
|
109
|
-
## Functional Requirements
|
|
110
|
-
|
|
111
|
-
### FR-001: {title}
|
|
112
|
-
{description}
|
|
113
|
-
|
|
114
|
-
**Acceptance Criteria:**
|
|
115
|
-
- Given {context}, When {action}, Then {expected result}
|
|
116
|
-
|
|
117
|
-
### FR-002: {title} (if needed)
|
|
118
|
-
...
|
|
119
|
-
|
|
120
|
-
## Non-Functional Requirements
|
|
121
|
-
{NFR-001 if applicable, otherwise "N/A — no NFR impact for this fix"}
|
|
122
|
-
|
|
123
|
-
## Scope Boundary
|
|
124
|
-
**In scope:** {what will change}
|
|
125
|
-
**Out of scope:** {what will NOT change — no refactoring, no enhancements}
|
|
126
|
-
|
|
127
|
-
## Blast Radius (confirmed)
|
|
128
|
-
{from GitNexus impact — files that may be affected}
|
|
129
|
-
|
|
130
|
-
## Gate: {PENDING / APPROVED by {name} on {date}}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
[HOTFIX-PRD] [4/4] Writing hotfix PRD... ✅
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Gate
|
|
138
|
-
|
|
139
|
-
Human must approve the PRD. Write `## Gate: APPROVED` at the end of the file.
|
|
140
|
-
Do NOT proceed to implementation without the Gate marker.
|
|
141
|
-
|
|
142
|
-
## Phase Exit Protocol
|
|
143
|
-
|
|
144
|
-
Print PHASE REPORT:
|
|
145
|
-
- Bug: {bug-id}
|
|
146
|
-
- Status: PRD COMPLETED
|
|
147
|
-
- FRs: {count} functional requirements
|
|
148
|
-
- Output: `.vsaf/docs/hotfixes/{bug-id}/02-prd.md`
|
|
149
|
-
- Next step: `/sdlc-hotfix-implement`
|
|
150
|
-
|
|
151
|
-
Update `.vsaf/docs/STATUS.md`.
|
|
152
|
-
|
|
153
|
-
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
154
|
-
|
|
155
|
-
## Rules
|
|
156
|
-
|
|
157
|
-
- ⛔ Do NOT start a new grill session — analysis already has grill results
|
|
158
|
-
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
159
|
-
- ⛔ Do NOT add enhancements — hotfix scope only
|
|
160
|
-
- Scope MUST be minimal — fix root cause, add regression test, nothing more
|
|
161
|
-
- Every FR MUST be directly traceable to the root cause or blast radius
|