@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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
## Verification Gate
|
|
2
|
+
|
|
3
|
+
⛔ **NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.**
|
|
4
|
+
|
|
5
|
+
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."
|
|
6
|
+
|
|
7
|
+
| # | Check | Command to Run | Evidence Required | ❌ NOT Acceptable |
|
|
8
|
+
|---|-------|---------------|-------------------|-------------------|
|
|
9
|
+
| 1 | Build compiles | `mvn compile` / `npm run build` / equivalent | `BUILD SUCCESS` or `0 errors` in output | "It compiled earlier" |
|
|
10
|
+
| 2 | All tests pass | `npm test` / `mvn test` / equivalent | `X passed, 0 failed` in output | "Tests should still pass" |
|
|
11
|
+
| 3 | Regression test passes | Run specific test by name | Test name + PASS in output | "I wrote the test so it passes" |
|
|
12
|
+
| 4 | No new SonarQube issues | Check output from Step 4 | 0 blockers, 0 critical, 0 vulns | "Code looks clean" |
|
|
13
|
+
| 5 | GitNexus impact clean | Check output from Step 6 | Blast radius matches analysis | "Fix is minimal so it's fine" |
|
|
14
|
+
| 6 | Scope boundary held | `git diff --stat` | Changed files ⊆ files listed in analysis | "I only changed what was needed" |
|
|
15
|
+
|
|
16
|
+
**Red flags — if you catch yourself thinking any of these, STOP and run the command:**
|
|
17
|
+
- "It should work" → Run it and prove it
|
|
18
|
+
- "I'm confident" → Confidence ≠ evidence
|
|
19
|
+
- "I already checked" → Check again with fresh output
|
|
20
|
+
- "It's a small change so it's safe" → Small changes break big systems
|
|
21
|
+
- "The test passed during TDD" → TDD was minutes ago; verify NOW
|
|
22
|
+
|
|
23
|
+
**Procedure:**
|
|
24
|
+
1. Run checks 1-6 sequentially
|
|
25
|
+
2. For each: paste the **actual command output** (or key lines) into `03-impl-log.md` under a `## Verification Evidence` section
|
|
26
|
+
3. If ANY check fails → fix → re-run ALL checks (not just the failed one)
|
|
27
|
+
4. Only after ALL 6 checks show fresh passing evidence → proceed to Phase Exit
|
|
28
|
+
|
|
29
|
+
## Output
|
|
30
|
+
|
|
31
|
+
Write file: `.vsaf/docs/hotfixes/{bug-id}/03-impl-log.md`
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
# Implementation Log: {bug-id}
|
|
35
|
+
|
|
36
|
+
## Branch
|
|
37
|
+
`hotfix/{bug-id}`
|
|
38
|
+
|
|
39
|
+
## TDD Cycles
|
|
40
|
+
|
|
41
|
+
### FR-001: {title}
|
|
42
|
+
- RED: {test file}:{test name} — FAILED ✓
|
|
43
|
+
- GREEN: {changed files} — PASSED ✓
|
|
44
|
+
- REFACTOR: {what was cleaned}
|
|
45
|
+
|
|
46
|
+
### FR-002: {title} (if applicable)
|
|
47
|
+
...
|
|
48
|
+
|
|
49
|
+
## Files Changed
|
|
50
|
+
| File | Change type | Lines |
|
|
51
|
+
|------|-------------|-------|
|
|
52
|
+
| {file} | Modified / Added | +{n} -{m} |
|
|
53
|
+
|
|
54
|
+
## Test Results
|
|
55
|
+
- New tests: {count}
|
|
56
|
+
- Regression test: {test name} — PASS
|
|
57
|
+
- Full suite: {total} tests, all PASS
|
|
58
|
+
|
|
59
|
+
## SonarQube
|
|
60
|
+
- Issues: 0
|
|
61
|
+
- Vulnerabilities: 0
|
|
62
|
+
- Duplication: {n}%
|
|
63
|
+
|
|
64
|
+
## Build
|
|
65
|
+
- Compile: PASS
|
|
66
|
+
- Full test suite: PASS
|
|
67
|
+
|
|
68
|
+
## Verification Evidence
|
|
69
|
+
|
|
70
|
+
| # | Check | Result | Evidence |
|
|
71
|
+
|---|-------|--------|----------|
|
|
72
|
+
| 1 | Build compiles | ✅ PASS | `{actual build output line}` |
|
|
73
|
+
| 2 | All tests pass | ✅ PASS | `{X} passed, 0 failed` |
|
|
74
|
+
| 3 | Regression test | ✅ PASS | `{test name} — PASSED` |
|
|
75
|
+
| 4 | SonarQube clean | ✅ PASS | 0 blocker, 0 critical, 0 vuln |
|
|
76
|
+
| 5 | Impact clean | ✅ PASS | Blast radius = {files}, matches analysis |
|
|
77
|
+
| 6 | Scope held | ✅ PASS | `git diff --stat`: {n} files changed, all within scope |
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Phase Exit Protocol
|
|
81
|
+
|
|
82
|
+
Print PHASE REPORT:
|
|
83
|
+
- Bug: {bug-id}
|
|
84
|
+
- Status: IMPLEMENTATION COMPLETED
|
|
85
|
+
- Branch: `hotfix/{bug-id}`
|
|
86
|
+
- Tests: {new} new, {total} total — all PASS
|
|
87
|
+
- Files changed: {count}
|
|
88
|
+
- Output: `.vsaf/docs/hotfixes/{bug-id}/03-impl-log.md`
|
|
89
|
+
- Next step: `/sdlc-hotfix-ship`
|
|
90
|
+
|
|
91
|
+
Update `.vsaf/docs/STATUS.md`.
|
|
92
|
+
|
|
93
|
+
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
94
|
+
|
|
95
|
+
## Rules
|
|
96
|
+
|
|
97
|
+
- ⛔ Do NOT write code without a failing test first (TDD)
|
|
98
|
+
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
99
|
+
- ⛔ Do NOT exceed scope boundary defined in PRD
|
|
100
|
+
- ⛔ Do NOT use subagent-driven development — hotfixes are sequential, focused
|
|
101
|
+
- Code MUST compile — hard gate, no exceptions
|
|
102
|
+
- Full test suite MUST pass — no regressions allowed
|
|
103
|
+
- If fix fails 3 times → STOP, escalate to user
|
|
104
|
+
- If scope drift detected → STOP, go back to PRD
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
### Step 6: Impact Verification
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-IMPL] [6/6] Impact verification via GitNexus... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Use GitNexus `impact` — verify the fix did not break anything outside blast radius.
|
|
8
|
+
|
|
9
|
+
If unexpected impact detected → evaluate:
|
|
10
|
+
- Within scope boundary → OK, note in impl log
|
|
11
|
+
- Outside scope boundary → STOP, escalate to user
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
[HOTFIX-IMPL] [6/6] Impact verification... ✅
|
|
15
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
### Step 4: SonarQube Self-Check
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-IMPL] [4/6] SonarQube quality check... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Apply DURING Step 3 (not after). After the fix is complete, final sweep.
|
|
8
|
+
|
|
9
|
+
> **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.
|
|
10
|
+
|
|
11
|
+
| Metric | Threshold |
|
|
12
|
+
|--------|-----------|
|
|
13
|
+
| Issues / Blocker / Critical / Major | = 0 |
|
|
14
|
+
| 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 |
|
|
15
|
+
| Vulnerabilities | = 0 |
|
|
16
|
+
| Security Hotspots Reviewed | = 100% |
|
|
17
|
+
| Duplicated Lines (new) | ≤ 45% |
|
|
18
|
+
| Maintainability / Reliability / Security Rating | ≥ A |
|
|
19
|
+
|
|
20
|
+
**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.
|
|
21
|
+
|
|
22
|
+
- If project has SonarQube → import the profile + gate from the shared folder, then run `sonar-scanner` incremental
|
|
23
|
+
- If not → Claude self-reviews changed files against the shared `quality-gate.md`
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
[HOTFIX-IMPL] [4/6] SonarQube quality check... ✅
|
|
27
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
### Step 3: TDD Cycle — `/tdd` Methodology
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-IMPL] [3/6] TDD cycle — RED → GREEN → REFACTOR... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Use `/tdd` methodology — behavior-based, vertical slice:
|
|
8
|
+
|
|
9
|
+
**For each FR in the PRD:**
|
|
10
|
+
|
|
11
|
+
1. **RED — Write failing test FIRST**
|
|
12
|
+
- Test the BEHAVIOR described in the acceptance criteria
|
|
13
|
+
- Test the PUBLIC INTERFACE, not internals
|
|
14
|
+
- Include the regression test: reproduce the original bug → MUST FAIL before fix
|
|
15
|
+
- Run test → confirm it FAILS (red)
|
|
16
|
+
- ⚠️ If test passes without code changes → the test is wrong or the bug is already fixed
|
|
17
|
+
|
|
18
|
+
2. **GREEN — Write MINIMAL code to pass**
|
|
19
|
+
- Change ONLY what is needed to make the test pass
|
|
20
|
+
- Stay within the scope boundary from PRD
|
|
21
|
+
- Apply SonarQube rules while writing (see below)
|
|
22
|
+
- Run test → confirm it PASSES (green)
|
|
23
|
+
|
|
24
|
+
3. **REFACTOR — Clean without changing behavior**
|
|
25
|
+
- Remove duplication introduced by the fix
|
|
26
|
+
- Improve naming if needed
|
|
27
|
+
- Run ALL tests → still green
|
|
28
|
+
|
|
29
|
+
**Repeat for each FR.** Typically 1-3 cycles for a hotfix.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
[HOTFIX-IMPL] [3/6] TDD cycle complete ✅
|
|
33
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
### Step 5: Build & Test Verification
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-IMPL] [5/6] Build & test verification... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
**MANDATORY — hard gate:**
|
|
8
|
+
|
|
9
|
+
1. **Compile**: Build entire project → 0 errors
|
|
10
|
+
- Java: `mvn compile` / `gradle build`
|
|
11
|
+
- Node: `npm run build` / `tsc --noEmit`
|
|
12
|
+
- Angular: `ng build`
|
|
13
|
+
- Go: `go build ./...`
|
|
14
|
+
- FAIL → fix immediately
|
|
15
|
+
|
|
16
|
+
2. **Full test suite**: Run ALL tests (not just new ones)
|
|
17
|
+
- `npm test` / `mvn test` / equivalent
|
|
18
|
+
- ALL tests MUST pass — no regressions
|
|
19
|
+
- FAIL → use `/diagnose` to find the issue
|
|
20
|
+
|
|
21
|
+
3. **Regression test confirmation**: The specific test from Step 3 RED phase → now PASSES
|
|
22
|
+
|
|
23
|
+
⚠️ DO NOT exit if build fails or tests fail. This is a hard gate.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
[HOTFIX-IMPL] [5/6] Build & test verification... ✅
|
|
27
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Phase Entry Protocol
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-PRD] [1/4] Checking input artifacts... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
1. Input: `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md`
|
|
8
|
+
2. Verify file exists:
|
|
9
|
+
- Does not exist → Stop: "Analysis not found. Run `/sdlc-hotfix-analyze` first."
|
|
10
|
+
3. Read the analysis file — extract:
|
|
11
|
+
- Root cause (file:line)
|
|
12
|
+
- Blast radius
|
|
13
|
+
- Fix strategy (proposed in analyze phase)
|
|
14
|
+
- Affected files
|
|
15
|
+
4. Read `.vsaf/docs/STATUS.md`
|
|
16
|
+
5. Read `CONTEXT.md`
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
[HOTFIX-PRD] [1/4] Checking input artifacts... ✅
|
|
20
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
## Gate: {PENDING / APPROVED by {name} on {date}}
|
|
2
|
+
```
|
|
3
|
+
|
|
4
|
+
```
|
|
5
|
+
[HOTFIX-PRD] [4/4] Writing hotfix PRD... ✅
|
|
6
|
+
```
|
|
7
|
+
|
|
8
|
+
## Gate
|
|
9
|
+
|
|
10
|
+
Human must approve the PRD. Write `## Gate: APPROVED` at the end of the file.
|
|
11
|
+
Do NOT proceed to implementation without the Gate marker.
|
|
12
|
+
|
|
13
|
+
## Phase Exit Protocol
|
|
14
|
+
|
|
15
|
+
Print PHASE REPORT:
|
|
16
|
+
- Bug: {bug-id}
|
|
17
|
+
- Status: PRD COMPLETED
|
|
18
|
+
- FRs: {count} functional requirements
|
|
19
|
+
- Output: `.vsaf/docs/hotfixes/{bug-id}/02-prd.md`
|
|
20
|
+
- Next step: `/sdlc-hotfix-implement`
|
|
21
|
+
|
|
22
|
+
Update `.vsaf/docs/STATUS.md`.
|
|
23
|
+
|
|
24
|
+
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- ⛔ Do NOT start a new grill session — analysis already has grill results
|
|
29
|
+
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
30
|
+
- ⛔ Do NOT add enhancements — hotfix scope only
|
|
31
|
+
- Scope MUST be minimal — fix root cause, add regression test, nothing more
|
|
32
|
+
- Every FR MUST be directly traceable to the root cause or blast radius
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
### Step 2: Define Fix Requirements
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-PRD] [2/4] Defining fix requirements from analysis... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Based on the analysis (NOT a new grill session — that already happened), define:
|
|
8
|
+
|
|
9
|
+
1. **Fix Goal** — one sentence: what the fix achieves
|
|
10
|
+
2. **Functional Requirements** — FR-001, FR-002... (typically 1-3 for a hotfix)
|
|
11
|
+
- Each FR traces to the root cause or blast radius item
|
|
12
|
+
3. **Acceptance Criteria** — Given/When/Then for each FR
|
|
13
|
+
- MUST include a regression test criterion: "Given the fix is applied, When {original reproduction steps}, Then {expected behavior}"
|
|
14
|
+
4. **Scope Boundary** — explicitly state what is OUT of scope (no refactoring, no enhancements)
|
|
15
|
+
5. **Non-Functional Requirements** — only if relevant (performance regression, security)
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
[HOTFIX-PRD] [2/4] Defining fix requirements... ✅
|
|
19
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
### Step 3: Validate + Risk Check
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-PRD] [3/4] Validating PRD... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Use `/bmad-validate-prd` — validate:
|
|
8
|
+
- Every FR is testable
|
|
9
|
+
- Acceptance criteria are unambiguous
|
|
10
|
+
- Scope is minimal (hotfix, not enhancement)
|
|
11
|
+
- Fix addresses root cause, not just symptom
|
|
12
|
+
|
|
13
|
+
If FAIL → fix inline, re-validate.
|
|
14
|
+
|
|
15
|
+
Use GitNexus `impact` — confirm blast radius from analysis is still accurate.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
[HOTFIX-PRD] [3/4] Validating PRD... ✅
|
|
19
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
### Step 4: Write PRD
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-PRD] [4/4] Writing hotfix PRD... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Write file: `.vsaf/docs/hotfixes/{bug-id}/02-prd.md`
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# Hotfix PRD: {bug-id}
|
|
11
|
+
|
|
12
|
+
## Fix Goal
|
|
13
|
+
{one sentence}
|
|
14
|
+
|
|
15
|
+
## Source
|
|
16
|
+
- Analysis: `01-analysis.md`
|
|
17
|
+
- Root cause: {file:line — summary}
|
|
18
|
+
|
|
19
|
+
## Functional Requirements
|
|
20
|
+
|
|
21
|
+
### FR-001: {title}
|
|
22
|
+
{description}
|
|
23
|
+
|
|
24
|
+
**Acceptance Criteria:**
|
|
25
|
+
- Given {context}, When {action}, Then {expected result}
|
|
26
|
+
|
|
27
|
+
### FR-002: {title} (if needed)
|
|
28
|
+
...
|
|
29
|
+
|
|
30
|
+
## Non-Functional Requirements
|
|
31
|
+
{NFR-001 if applicable, otherwise "N/A — no NFR impact for this fix"}
|
|
32
|
+
|
|
33
|
+
## Scope Boundary
|
|
34
|
+
**In scope:** {what will change}
|
|
35
|
+
**Out of scope:** {what will NOT change — no refactoring, no enhancements}
|
|
36
|
+
|
|
37
|
+
## Blast Radius (confirmed)
|
|
38
|
+
{from GitNexus impact — files that may be affected}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## Phase Entry Protocol
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-REVIEW] [1/4] Loading context... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
1. Read `.vsaf/docs/hotfixes/{bug-id}/01-analysis.md` — understand what was supposed to change
|
|
8
|
+
2. Read `CONTEXT.md`
|
|
9
|
+
3. Identify all files changed in the GREEN phase (use git diff or read the phase report)
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
[HOTFIX-REVIEW] [1/4] Loading context... ✅
|
|
13
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
## Gate
|
|
2
|
+
|
|
3
|
+
Write `## Gate: APPROVED` or `## Gate: CHANGES_REQUESTED` with reasons.
|
|
4
|
+
|
|
5
|
+
If CHANGES_REQUESTED:
|
|
6
|
+
- List specific issues with triage: MUST FIX / SHOULD FIX / NOTED
|
|
7
|
+
- Do NOT proceed to ship until all MUST FIX items are resolved
|
|
8
|
+
|
|
9
|
+
## Output
|
|
10
|
+
|
|
11
|
+
Write file: `.vsaf/docs/hotfixes/{bug-id}/02-review.md`
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# Hotfix Review: {bug-id}
|
|
15
|
+
|
|
16
|
+
## Minimality Check
|
|
17
|
+
{minimality check results}
|
|
18
|
+
|
|
19
|
+
## Test Quality Check
|
|
20
|
+
{test quality check results}
|
|
21
|
+
|
|
22
|
+
## Blast Radius
|
|
23
|
+
{blast radius confirmation — matches/exceeds analysis}
|
|
24
|
+
|
|
25
|
+
## SonarQube
|
|
26
|
+
{quality gate results on changed files}
|
|
27
|
+
|
|
28
|
+
## Conclusion
|
|
29
|
+
{overall assessment}
|
|
30
|
+
|
|
31
|
+
## Gate: {APPROVED / CHANGES_REQUESTED}
|
|
32
|
+
{reasons if changes requested}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Phase Exit Protocol
|
|
36
|
+
|
|
37
|
+
Print PHASE REPORT:
|
|
38
|
+
- Bug: {bug-id}
|
|
39
|
+
- Status: REVIEW COMPLETED
|
|
40
|
+
- Gate: {APPROVED / CHANGES_REQUESTED}
|
|
41
|
+
- Output: `.vsaf/docs/hotfixes/{bug-id}/02-review.md`
|
|
42
|
+
- Next step: `/sdlc-ship` (if approved)
|
|
43
|
+
|
|
44
|
+
Update `.vsaf/docs/STATUS.md`.
|
|
45
|
+
|
|
46
|
+
## Rules
|
|
47
|
+
|
|
48
|
+
- ⛔ Do NOT modify code — review only
|
|
49
|
+
- ⛔ Do NOT modify `graphify-out/` or `.gitnexus/`
|
|
50
|
+
- A hotfix review is FAST but NOT sloppy — every check matters
|
|
51
|
+
- If the fix touches more files than the analysis predicted, escalate to human
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
### Step 4: Impact Check + SonarQube
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-REVIEW] [4/4] Impact check + quality gate... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
1. Use GitNexus `detect_changes` + `impact` — confirm blast radius matches the analysis
|
|
8
|
+
2. If blast radius is LARGER than analysis predicted → flag for human review
|
|
9
|
+
3. SonarQube rules on changed files only:
|
|
10
|
+
|
|
11
|
+
| Metric | Threshold |
|
|
12
|
+
|--------|-----------|
|
|
13
|
+
| Issues (Blocker) | 0 |
|
|
14
|
+
| Issues (Critical) | 0 |
|
|
15
|
+
| Security Hotspots | 0 |
|
|
16
|
+
| New code smells | 0 |
|
|
17
|
+
|
|
18
|
+
> **Standard (single source of truth):** **`.claude/skills/_shared/sdlc/sonar-viettel/quality-gate.md`** — full gate + 357-rule parameters + importable `sonar-viettel-profile.xml` / `sonar-viettel-gate.json`. Same file Phase 3 (`/sdlc-hotfix-implement`) coded against. If SonarQube is present, scan changed files against the `sonar-viettel` profile + gate; otherwise re-check manually. `New code smells = 0` is intentionally stricter than the gate's ≤20 for surgical fixes.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[HOTFIX-REVIEW] [4/4] Impact check + quality gate... ✅
|
|
22
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
### Step 2: Minimality Verification
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-REVIEW] [2/4] Verifying fix is minimal... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Check:
|
|
8
|
+
- [ ] Only files identified in the analysis were changed
|
|
9
|
+
- [ ] No unnecessary refactoring included
|
|
10
|
+
- [ ] No formatting-only changes on untouched code
|
|
11
|
+
- [ ] No unrelated fixes bundled in
|
|
12
|
+
- [ ] Diff size is proportional to the bug (a 1-line bug should not need 50 lines of changes)
|
|
13
|
+
|
|
14
|
+
If any check fails → flag as CHANGES_REQUESTED with specific reason.
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[HOTFIX-REVIEW] [2/4] Verifying fix is minimal... ✅
|
|
18
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
### Step 3: Test Quality Check
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
[HOTFIX-REVIEW] [3/4] Verifying test quality... ⏳
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
Read the reproduction test and verify:
|
|
8
|
+
- [ ] Test targets the specific bug (not a generic happy-path test)
|
|
9
|
+
- [ ] Test would FAIL without the fix (it's not trivially always-passing)
|
|
10
|
+
- [ ] Test exercises the exact code path from the root cause analysis
|
|
11
|
+
- [ ] Test has a descriptive name referencing the bug
|
|
12
|
+
- [ ] Test follows project conventions
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
[HOTFIX-REVIEW] [3/4] Verifying test quality... ✅
|
|
16
|
+
```
|