@educa-corp/sdd-framework 0.5.0 → 0.7.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/bin/build.js +113 -19
- package/bin/gate-trace.js +487 -0
- package/bin/index.js +445 -146
- package/bin/lint-trace.js +643 -0
- package/bin/self-check.js +804 -2
- package/bin/trace-schema.json +621 -10
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/README.md +20 -0
- package/core/commands/amend-prd.md +518 -0
- package/core/commands/debug.md +123 -511
- package/core/commands/define-product.md +86 -510
- package/core/commands/dev-gen-test.md +86 -510
- package/core/commands/dev-run-test.md +133 -519
- package/core/commands/dev-smoke-test.md +86 -510
- package/core/commands/extend-prd.md +128 -522
- package/core/commands/fix-bug.md +118 -509
- package/core/commands/generate-architecture.md +94 -515
- package/core/commands/generate-bdd.md +128 -513
- package/core/commands/generate-code.md +119 -510
- package/core/commands/generate-design-spec.md +86 -510
- package/core/commands/generate-prd.md +89 -510
- package/core/commands/generate-spec-manifest.md +86 -510
- package/core/commands/generate-tech-docs.md +120 -512
- package/core/commands/learn.md +172 -496
- package/core/commands/map-testids.md +86 -510
- package/core/commands/propose-scenario.md +86 -510
- package/core/commands/qc-analyze.md +86 -510
- package/core/commands/qc-design-test.md +86 -510
- package/core/commands/qc-plan.md +86 -510
- package/core/commands/qc-report.md +86 -510
- package/core/commands/qc-review.md +86 -510
- package/core/commands/qc-run-test.md +115 -513
- package/core/commands/refine-prd.md +112 -522
- package/core/commands/report-bug.md +86 -510
- package/core/commands/review-code.md +123 -511
- package/core/commands/review-context.md +136 -522
- package/core/commands/review-tech-docs.md +90 -511
- package/core/commands/setup-ai-first.md +166 -138
- package/core/commands/sync.md +155 -107
- package/core/commands/update-framework.md +16 -103
- package/core/commands/validate-traces.md +426 -511
- package/core/hooks/data-guard.js +174 -83
- package/core/hooks/settings.json +2 -1
- package/core/rules/workflow.md +64 -4
- package/core/steps/capture-lesson.md +34 -1
- package/core/steps/context-loader.md +50 -8
- package/core/steps/gate.md +92 -35
- package/core/steps/report-footer.md +23 -0
- package/core/templates/README.md +24 -1
- package/core/templates/ci/trace-gate.yml +146 -0
- package/core/templates/feature.template +1 -1
- package/core/templates/hooks/pre-push +61 -0
- package/docs/02-concepts/architecture.md +61 -6
- package/docs/02-concepts/traceability.md +57 -0
- package/docs/03-guides/architect.md +63 -0
- package/docs/04-reference/commands.md +148 -134
- package/docs/04-reference/model-selection.md +32 -19
- package/docs/04-reference/trace-schema.md +39 -0
- package/docs/explain/02b-extend-prd.md +1 -1
- package/docs/explain/02c-amend-prd.md +152 -0
- package/docs/explain/21-validate-traces.md +2 -1
- package/docs/explain/27-learn.md +5 -3
- package/docs/explain/28-sync.md +25 -0
- package/docs/explain/README.md +136 -135
- package/package.json +5 -9
- package/commands/debug.md +0 -917
- package/commands/debug.tmpl +0 -257
- package/commands/define-product.md +0 -862
- package/commands/define-product.tmpl +0 -225
- package/commands/dev-gen-test.md +0 -1124
- package/commands/dev-gen-test.tmpl +0 -490
- package/commands/dev-run-test.md +0 -859
- package/commands/dev-run-test.tmpl +0 -225
- package/commands/dev-smoke-test.md +0 -798
- package/commands/dev-smoke-test.tmpl +0 -217
- package/commands/extend-prd.md +0 -907
- package/commands/extend-prd.tmpl +0 -270
- package/commands/fix-bug.md +0 -910
- package/commands/fix-bug.tmpl +0 -197
- package/commands/generate-architecture.md +0 -775
- package/commands/generate-architecture.tmpl +0 -194
- package/commands/generate-bdd.md +0 -1347
- package/commands/generate-bdd.tmpl +0 -590
- package/commands/generate-code.md +0 -1283
- package/commands/generate-code.tmpl +0 -649
- package/commands/generate-design-spec.md +0 -1161
- package/commands/generate-design-spec.tmpl +0 -524
- package/commands/generate-prd.md +0 -1143
- package/commands/generate-prd.tmpl +0 -223
- package/commands/generate-spec-manifest.md +0 -745
- package/commands/generate-spec-manifest.tmpl +0 -164
- package/commands/generate-tech-docs.md +0 -1344
- package/commands/generate-tech-docs.tmpl +0 -273
- package/commands/learn.md +0 -723
- package/commands/learn.tmpl +0 -63
- package/commands/map-testids.md +0 -662
- package/commands/map-testids.tmpl +0 -81
- package/commands/propose-scenario.md +0 -783
- package/commands/propose-scenario.tmpl +0 -202
- package/commands/qc-analyze.md +0 -693
- package/commands/qc-analyze.tmpl +0 -112
- package/commands/qc-design-test.md +0 -650
- package/commands/qc-design-test.tmpl +0 -69
- package/commands/qc-plan.md +0 -630
- package/commands/qc-plan.tmpl +0 -49
- package/commands/qc-report.md +0 -641
- package/commands/qc-report.tmpl +0 -60
- package/commands/qc-review.md +0 -634
- package/commands/qc-review.tmpl +0 -53
- package/commands/qc-run-test.md +0 -750
- package/commands/qc-run-test.tmpl +0 -116
- package/commands/refine-prd.md +0 -1074
- package/commands/refine-prd.tmpl +0 -278
- package/commands/report-bug.md +0 -729
- package/commands/report-bug.tmpl +0 -148
- package/commands/review-code.md +0 -803
- package/commands/review-code.tmpl +0 -143
- package/commands/review-context.md +0 -1323
- package/commands/review-context.tmpl +0 -527
- package/commands/review-tech-docs.md +0 -982
- package/commands/review-tech-docs.tmpl +0 -401
- package/commands/setup-ai-first.md +0 -574
- package/commands/setup-ai-first.tmpl +0 -378
- package/commands/sync.md +0 -486
- package/commands/sync.tmpl +0 -384
- package/commands/update-framework.md +0 -290
- package/commands/update-framework.tmpl +0 -188
- package/commands/validate-traces.md +0 -1435
- package/commands/validate-traces.tmpl +0 -854
- package/hooks/data-guard.js +0 -141
- package/hooks/settings.json +0 -18
- package/modules/android-compose/module.yaml +0 -13
- package/modules/android-compose/stack-profile.yaml +0 -57
- package/modules/angular/architecture-snippets/component-patterns.md +0 -187
- package/modules/angular/module.yaml +0 -6
- package/modules/angular/stack-profile.yaml +0 -38
- package/modules/context-engineering/architecture-snippets/context-design.md +0 -119
- package/modules/context-engineering/module.yaml +0 -9
- package/modules/context-engineering/stack-profile.yaml +0 -61
- package/modules/dotnet/architecture-snippets/clean-arch.md +0 -160
- package/modules/dotnet/module.yaml +0 -6
- package/modules/dotnet/stack-profile.yaml +0 -50
- package/modules/flutter/module.yaml +0 -14
- package/modules/flutter/stack-profile.yaml +0 -59
- package/modules/golang/architecture-snippets/domain-layout.md +0 -283
- package/modules/golang/module.yaml +0 -6
- package/modules/golang/stack-profile.yaml +0 -40
- package/modules/ios-swiftui/module.yaml +0 -13
- package/modules/ios-swiftui/stack-profile.yaml +0 -55
- package/modules/java-spring/architecture-snippets/layered-arch.md +0 -201
- package/modules/java-spring/module.yaml +0 -15
- package/modules/java-spring/stack-profile.yaml +0 -28
- package/modules/nextjs/architecture-snippets/app-router-patterns.md +0 -269
- package/modules/nextjs/module.yaml +0 -14
- package/modules/nextjs/stack-profile.yaml +0 -74
- package/modules/nuxt/module.yaml +0 -14
- package/modules/nuxt/stack-profile.yaml +0 -58
- package/modules/phaser-game/architecture-snippets/phaser-scene-patterns.md +0 -646
- package/modules/phaser-game/module.yaml +0 -15
- package/modules/phaser-game/stack-profile.yaml +0 -90
- package/modules/php-laravel/architecture-snippets/service-repository.md +0 -302
- package/modules/php-laravel/module.yaml +0 -15
- package/modules/php-laravel/stack-profile.yaml +0 -56
- package/modules/qc-playwright/stack-profile.yaml +0 -66
- package/modules/react/architecture-snippets/hooks-query-patterns.md +0 -254
- package/modules/react/module.yaml +0 -14
- package/modules/react/stack-profile.yaml +0 -63
- package/modules/react-native/module.yaml +0 -14
- package/modules/react-native/stack-profile.yaml +0 -56
- package/modules/vue/module.yaml +0 -14
- package/modules/vue/stack-profile.yaml +0 -65
- package/rules/data-protection.md +0 -80
- package/rules/workflow.md +0 -73
- package/scripts/init.sh +0 -49
- package/scripts/upgrade.sh +0 -94
- package/skills/code/SKILL.md +0 -19
- package/skills/code/SKILL.tmpl +0 -19
- package/skills/debug/SKILL.md +0 -19
- package/skills/debug/SKILL.tmpl +0 -19
- package/skills/design-spec/SKILL.md +0 -11
- package/skills/design-spec/SKILL.tmpl +0 -11
- package/skills/discovery/SKILL.md +0 -14
- package/skills/discovery/SKILL.tmpl +0 -14
- package/skills/prd/SKILL.md +0 -19
- package/skills/prd/SKILL.tmpl +0 -19
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
- package/skills/qc/qa-analyst/acceptance-criteria.md +0 -60
- package/skills/qc/qa-analyst/business-rules.md +0 -59
- package/skills/qc/qa-analyst/data-flow.md +0 -64
- package/skills/qc/qa-analyst/spec-breakdown.md +0 -61
- package/skills/qc/qa-designer/e2e/journey.md +0 -41
- package/skills/qc/qa-designer/exploratory/charter.md +0 -68
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +0 -43
- package/skills/qc/qa-designer/functional/api.md +0 -45
- package/skills/qc/qa-designer/functional/gui-feature.md +0 -46
- package/skills/qc/qa-designer/functional/gui-screen.md +0 -52
- package/skills/qc/qa-designer/integration/api.md +0 -42
- package/skills/qc/qa-designer/integration/db.md +0 -39
- package/skills/qc/qa-designer/integration/gui.md +0 -40
- package/skills/qc/qa-designer/integration/kafka.md +0 -40
- package/skills/qc/qa-designer/non-functional.md +0 -40
- package/skills/qc/qa-planner/test-plan.md +0 -120
- package/skills/qc/qa-reviewer/script/e2e.md +0 -87
- package/skills/qc/qa-reviewer/script/exploratory.md +0 -45
- package/skills/qc/qa-reviewer/script/functional.md +0 -101
- package/skills/qc/qa-reviewer/script/integration.md +0 -91
- package/skills/qc/qa-reviewer/script/non-functional.md +0 -126
- package/skills/qc/qa-reviewer/test-case/e2e.md +0 -73
- package/skills/qc/qa-reviewer/test-case/exploratory.md +0 -43
- package/skills/qc/qa-reviewer/test-case/functional.md +0 -76
- package/skills/qc/qa-reviewer/test-case/integration.md +0 -69
- package/skills/qc/qa-reviewer/test-case/non-functional.md +0 -73
- package/skills/qc/qa-runner/e2e.md +0 -49
- package/skills/qc/qa-runner/exploratory/session.md +0 -36
- package/skills/qc/qa-runner/functional/api.md +0 -35
- package/skills/qc/qa-runner/functional/gui-feature.md +0 -51
- package/skills/qc/qa-runner/functional/gui-screen.md +0 -55
- package/skills/qc/qa-runner/integration.md +0 -47
- package/skills/qc/qa-runner/non-functional.md +0 -49
- package/skills/qc/qa-runner/report/report.md +0 -37
- package/skills/setup-ai-first/SKILL.md +0 -19
- package/skills/setup-ai-first/SKILL.tmpl +0 -19
- package/skills/spec/SKILL.md +0 -19
- package/skills/spec/SKILL.tmpl +0 -19
- package/skills/test/SKILL.md +0 -18
- package/skills/test/SKILL.tmpl +0 -18
- package/steps/business-language.md +0 -56
- package/steps/capture-lesson.md +0 -79
- package/steps/context-loader.md +0 -385
- package/steps/gate.md +0 -94
- package/steps/report-footer.md +0 -102
- package/steps/review-fanout.md +0 -159
- package/steps/spawn-agent.md +0 -129
- package/steps/trace-mirror.md +0 -53
- package/templates/README.md +0 -47
- package/templates/architecture.template.md +0 -394
- package/templates/design-spec.template.md +0 -217
- package/templates/feature.template +0 -123
- package/templates/platform-guide.template.md +0 -145
- package/templates/prd.template.md +0 -283
- package/templates/product-definition.template.md +0 -188
- package/templates/project-context.yaml +0 -212
- package/templates/tech-design.template.md +0 -490
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
# /dev-smoke-test — Smoke Test Service hoặc App đang chạy
|
|
2
|
-
|
|
3
|
-
Dùng khi service/app **đang chạy sẵn**. Khác `/dev-run-test` (không cần live server).
|
|
4
|
-
|
|
5
|
-
## Gate
|
|
6
|
-
{{include:steps/gate.md}}
|
|
7
|
-
|
|
8
|
-
*Lưu ý: Với lệnh này, target ở Bước 1 là một UC-ID từ `$ARGUMENTS`. Context loading cung cấp `conventions.service_run`, thông tin port, và `tech_stack.module`.*
|
|
9
|
-
|
|
10
|
-
## Context
|
|
11
|
-
{{include:steps/context-loader.md}}
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Service Detection
|
|
16
|
-
|
|
17
|
-
Đọc `active_module` từ context. Dùng để chọn đúng cách dev-smoke-test.
|
|
18
|
-
|
|
19
|
-
| Platform | Modules |
|
|
20
|
-
|---|---|
|
|
21
|
-
| `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
|
|
22
|
-
| `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
|
|
23
|
-
| `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Nếu `platform_type = backend`
|
|
28
|
-
|
|
29
|
-
### Phase 1 — Xác minh service đang chạy
|
|
30
|
-
|
|
31
|
-
Đọc `conventions.service_run` từ project-context.yaml để xác định port.
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Try common health endpoints (use whichever applies):
|
|
35
|
-
curl -s http://localhost:{port}/health # generic / Go / Node
|
|
36
|
-
curl -s http://localhost:{port}/actuator/health # Spring Boot
|
|
37
|
-
curl -s http://localhost:{port}/ping # some frameworks
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Nếu chưa chạy → "Khởi động với `{conventions.service_run}` từ project root."
|
|
41
|
-
|
|
42
|
-
### Phase 2 — Xác định endpoint
|
|
43
|
-
|
|
44
|
-
Từ UC-ID → tìm controller/handler có `@trace.implements={UC-ID}`.
|
|
45
|
-
Liệt kê: method, path, auth/role bắt buộc.
|
|
46
|
-
|
|
47
|
-
### Phase 3 — Lấy auth token (nếu cần)
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
Endpoint yêu cầu auth. Lựa chọn:
|
|
51
|
-
1. Dán Bearer token (từ Postman/DevTools)
|
|
52
|
-
2. Dùng test/dev token từ local config
|
|
53
|
-
3. Skip — chỉ test endpoint public
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Phase 4 — Run
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
# GET
|
|
60
|
-
curl -s -X GET "http://localhost:{port}/v1/{resource}" \
|
|
61
|
-
-H "Authorization: Bearer {token}" | {JSON_FORMATTER}
|
|
62
|
-
|
|
63
|
-
# POST
|
|
64
|
-
curl -s -X POST "http://localhost:{port}/v1/{resource}" \
|
|
65
|
-
-H "Authorization: Bearer {token}" \
|
|
66
|
-
-H "Content-Type: application/json" \
|
|
67
|
-
-d '{"field1": "test_value"}'
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
| Kết quả | Ý nghĩa |
|
|
71
|
-
|--------|---------|
|
|
72
|
-
| 200/201 + đúng data | ✅ OK |
|
|
73
|
-
| 200 + sai data | ⚠️ Logic bug → /debug |
|
|
74
|
-
| 400 | Sai request body → kiểm tra field bắt buộc |
|
|
75
|
-
| 401 | Token hết hạn hoặc sai config |
|
|
76
|
-
| 403 | Sai role → kiểm tra auth rule |
|
|
77
|
-
| 500 | Server error → /debug |
|
|
78
|
-
| Connection refused | Service chưa chạy |
|
|
79
|
-
|
|
80
|
-
### Nếu `active_module = context-engineering`
|
|
81
|
-
|
|
82
|
-
#### Phase 1 — Xác minh entry point của pipeline tới được
|
|
83
|
-
|
|
84
|
-
Chạy prompt function trực tiếp với một input hợp lệ tối thiểu:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
# Python (pytest / script):
|
|
88
|
-
python -c "from {module}.{function} import {function}; print({function}(input='{test_input}'))"
|
|
89
|
-
|
|
90
|
-
# Or using the project test command with a smoke marker:
|
|
91
|
-
{conventions.test_command} -m smoke -v
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
#### Phase 2 — Xác minh cấu trúc output
|
|
95
|
-
|
|
96
|
-
Kiểm tra output khớp schema kỳ vọng:
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
Expected output schema: {output fields from @trace or tech-doc}
|
|
100
|
-
Actual output: {paste output here}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
#### Phase 3 — Diễn giải kết quả
|
|
104
|
-
|
|
105
|
-
| Kết quả | Ý nghĩa |
|
|
106
|
-
|--------|---------|
|
|
107
|
-
| Output khớp schema | ✅ OK |
|
|
108
|
-
| Output có nhưng sai format | ⚠️ Logic bug → /debug |
|
|
109
|
-
| `APIError` / `AuthenticationError` | API key không hợp lệ hoặc service unavailable |
|
|
110
|
-
| `TokenLimitError` | Input quá dài — kiểm tra kích thước prompt template |
|
|
111
|
-
| Exception / traceback | Lỗi code → /debug |
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Nếu `platform_type = web-frontend`
|
|
116
|
-
|
|
117
|
-
### Phase 1 — Xác minh dev server đang chạy
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
# Linux / macOS:
|
|
121
|
-
curl -s -o /dev/null -w "%{http_code}" http://localhost:{port}
|
|
122
|
-
|
|
123
|
-
# Windows (cmd / PowerShell):
|
|
124
|
-
curl -s -o NUL -w "%{http_code}" http://localhost:{port}
|
|
125
|
-
|
|
126
|
-
# Should return 200. If not: start with {conventions.service_run} (e.g., npm run dev)
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Phase 2 — Chạy E2E smoke test
|
|
130
|
-
|
|
131
|
-
Xác định E2E tool trong dự án (Playwright hoặc Cypress):
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
# Playwright — run scenarios tagged with this UC:
|
|
135
|
-
npx playwright test --grep "{UC-ID}"
|
|
136
|
-
|
|
137
|
-
# Cypress:
|
|
138
|
-
npx cypress run --spec "cypress/e2e/{UC-ID}*"
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Nếu chưa có E2E test → mở browser và verify thủ công:
|
|
142
|
-
1. Điều hướng tới route của UC này
|
|
143
|
-
2. Thực hiện hành động chính của người dùng
|
|
144
|
-
3. Xác nhận kết quả kỳ vọng hiển thị
|
|
145
|
-
|
|
146
|
-
### Phase 3 — Diễn giải kết quả
|
|
147
|
-
|
|
148
|
-
| Kết quả | Ý nghĩa |
|
|
149
|
-
|--------|---------|
|
|
150
|
-
| Tất cả E2E test pass | ✅ OK |
|
|
151
|
-
| Assertion failed | ⚠️ Logic bug → /debug |
|
|
152
|
-
| `ERR_CONNECTION_REFUSED` | Dev server chưa chạy |
|
|
153
|
-
| API trả về 4xx/5xx | Vấn đề backend → kiểm tra backend service |
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Nếu `platform_type = mobile`
|
|
158
|
-
|
|
159
|
-
### Phase 1 — Xác minh device/emulator sẵn sàng
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
# Flutter:
|
|
163
|
-
flutter devices # list connected devices/emulators
|
|
164
|
-
flutter install # install current build on device
|
|
165
|
-
|
|
166
|
-
# React Native:
|
|
167
|
-
npx react-native run-android # build + install on connected Android
|
|
168
|
-
npx react-native run-ios # build + install on iOS simulator
|
|
169
|
-
|
|
170
|
-
# Android (Compose):
|
|
171
|
-
./gradlew installDebug # install APK on connected device/emulator
|
|
172
|
-
|
|
173
|
-
# iOS (SwiftUI):
|
|
174
|
-
# Open Xcode → select simulator → Product → Run
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Phase 2 — Checklist dev-smoke-test thủ công
|
|
178
|
-
|
|
179
|
-
Với UC đang test, verify trên device:
|
|
180
|
-
1. Điều hướng tới màn của UC này
|
|
181
|
-
2. Thực hiện hành động chính từ Scenario `.feature` (step `When`)
|
|
182
|
-
3. Xác nhận kết quả kỳ vọng hiển thị (step `Then`)
|
|
183
|
-
4. Kiểm tra có crash hoặc dialog lỗi bất ngờ không
|
|
184
|
-
|
|
185
|
-
### Phase 3 — Bắt issue nếu phát hiện
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
# Flutter:
|
|
189
|
-
flutter logs
|
|
190
|
-
|
|
191
|
-
# Android:
|
|
192
|
-
adb logcat -d | grep -i "error\|exception\|crash"
|
|
193
|
-
|
|
194
|
-
# iOS:
|
|
195
|
-
# Copy crash log from Xcode → Devices and Simulators → View Device Logs
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Dán output vào `/debug`.
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## Output
|
|
203
|
-
|
|
204
|
-
{{include:steps/report-footer.md}}
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
/dev-smoke-test Report — {UC-ID}
|
|
208
|
-
Platform: {backend | web-frontend | mobile}
|
|
209
|
-
| Endpoint / Flow | Status | Result |
|
|
210
|
-
|-----------------------|-------------|---------|
|
|
211
|
-
| {method} {path/screen}| ✅/⚠️/❌ | {notes} |
|
|
212
|
-
|
|
213
|
-
Status legend: ✅ = OK | ⚠️ = Responded but wrong data / logic bug | ❌ = Error / not running
|
|
214
|
-
|
|
215
|
-
Issues: {mô tả các failure}
|
|
216
|
-
Next: /debug (dán lỗi tương tác) HOẶC /fix-bug {TICKET_ID} HOẶC sẵn sàng PR
|
|
217
|
-
```
|