spec-lite 1.1.7 → 1.1.9
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/skills/ado-create/SKILL.md +10 -5
- package/skills/archive/SKILL.md +125 -0
- package/skills/build/SKILL.md +32 -0
- package/skills/plan/SKILL.md +26 -0
- package/skills/spec-tech/SKILL.md +21 -0
- package/skills-overview.md +19 -0
package/package.json
CHANGED
|
@@ -26,20 +26,24 @@ description: Tạo Feature và User Story tickets trên ADO từ spec.md của m
|
|
|
26
26
|
Chưa có .claude/ado.yaml. Hãy chạy /ado-config trước.
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
**Xác định current user:**
|
|
29
|
+
**Xác định current user:** Gọi `mcp__azure-devops__core_get_identity_ids` với descriptor `me` hoặc `[me]` để lấy identity của user đang authenticated với ADO. Từ kết quả trả về, lấy `providerDisplayName` hoặc `subjectDescriptor` rồi tìm email tương ứng trong toàn bộ `team.PE + team.SE + team.DE` của ado.yaml.
|
|
30
30
|
|
|
31
|
-
**Nếu tìm thấy** → dùng email đó làm assignee.
|
|
31
|
+
**Nếu tìm thấy** → dùng email đó làm assignee, dùng identity ID từ kết quả MCP (không cần gọi lại).
|
|
32
32
|
|
|
33
|
-
**Nếu không
|
|
33
|
+
**Nếu không resolve được (tool lỗi hoặc không match được email)** → hỏi bằng `AskUserQuestion`:
|
|
34
34
|
|
|
35
35
|
```
|
|
36
36
|
question: "Bạn là ai trong team? (dùng để assign ticket)"
|
|
37
37
|
options: [mỗi email trong team.PE + team.SE + team.DE thành 1 option]
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Sau khi
|
|
40
|
+
Sau khi user chọn email, resolve thành ADO identity ID bằng `mcp__azure-devops__core_get_identity_ids`.
|
|
41
41
|
|
|
42
|
-
Nếu resolve thất bại →
|
|
42
|
+
Nếu resolve thất bại → **dừng và báo lỗi**. Không tạo ticket nếu không xác định được assignee:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Không resolve được ADO identity ID cho <email>. Kiểm tra lại PAT token hoặc quyền truy cập ADO rồi thử lại.
|
|
46
|
+
```
|
|
43
47
|
|
|
44
48
|
---
|
|
45
49
|
|
|
@@ -300,6 +304,7 @@ Tìm section `## ADO Tickets` trong file.
|
|
|
300
304
|
|
|
301
305
|
Trước khi tạo ticket:
|
|
302
306
|
- [ ] `.claude/ado.yaml` tồn tại và `epic.id` là số nguyên hợp lệ
|
|
307
|
+
- [ ] Current ADO user đã được xác định và resolve thành identity ID — **nếu không xác định được thì dừng, không tạo ticket không có assignee**
|
|
303
308
|
- [ ] Integration được chọn có `spec.md` chứa ít nhất 1 Feature
|
|
304
309
|
- [ ] `frd.md` tìm được cho mỗi Feature (cảnh báo nếu thiếu, không dừng)
|
|
305
310
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: archive
|
|
3
|
+
description: Archive một integration từ specs/integrations sang specs/archive. Dùng khi một integration đã hoàn thành hoặc không còn active và cần được lưu trữ ra khỏi thư mục làm việc chính.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# archive
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Di chuyển một integration từ `specs/integrations/` sang `specs/archive/` để dọn dẹp thư mục làm việc chính trong khi vẫn giữ nguyên toàn bộ nội dung integration đó.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Integration đã hoàn thành (Done) và không cần active nữa
|
|
15
|
+
- Integration bị cancel hoặc deferred vô thời hạn
|
|
16
|
+
- Muốn dọn dẹp `specs/integrations/` khỏi các integration cũ
|
|
17
|
+
|
|
18
|
+
## When NOT to Use
|
|
19
|
+
|
|
20
|
+
- Integration đang In Progress → chưa nên archive
|
|
21
|
+
- Muốn xóa hoàn toàn → đừng archive, thao tác thủ công sau khi confirm với team
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Process
|
|
26
|
+
|
|
27
|
+
### Bước 1: Kiểm tra thư mục archive
|
|
28
|
+
|
|
29
|
+
Kiểm tra `specs/archive/` đã tồn tại chưa.
|
|
30
|
+
|
|
31
|
+
**Nếu chưa tồn tại** → tạo thư mục `specs/archive/`.
|
|
32
|
+
|
|
33
|
+
**Nếu đã tồn tại** → tiếp tục.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
### Bước 2: Liệt kê integrations
|
|
38
|
+
|
|
39
|
+
Quét `specs/integrations/` để tìm tất cả các integration (mỗi integration là một thư mục con).
|
|
40
|
+
|
|
41
|
+
**Nếu không có integration nào:**
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Không có integration nào trong specs/integrations/.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Dừng lại.
|
|
48
|
+
|
|
49
|
+
**Nếu có integrations**, hiển thị danh sách dạng numbered list, kèm trạng thái nếu đọc được từ `spec.md` (frontmatter `status` hoặc heading):
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Integrations trong specs/integrations/:
|
|
53
|
+
|
|
54
|
+
[1] 001-user-authentication (approved)
|
|
55
|
+
[2] 002-payment-integration (draft)
|
|
56
|
+
[3] 003-notification-service (done)
|
|
57
|
+
[4] 004-admin-panel (in-progress)
|
|
58
|
+
|
|
59
|
+
Chọn số thứ tự integration để archive (hoặc nhập nhiều số cách nhau bởi dấu cách, ví dụ: 1 3):
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Với mỗi integration, cố gắng đọc `spec.md` để lấy status. Nếu không đọc được thì bỏ qua phần status.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### Bước 3: Xác nhận
|
|
67
|
+
|
|
68
|
+
Sau khi user chọn, hiển thị xác nhận trước khi di chuyển:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Sẽ archive các integration sau:
|
|
72
|
+
|
|
73
|
+
specs/integrations/001-user-authentication/ → specs/archive/001-user-authentication/
|
|
74
|
+
specs/integrations/003-notification-service/ → specs/archive/003-notification-service/
|
|
75
|
+
|
|
76
|
+
Xác nhận? (yes/no)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Nếu user không confirm → hủy, không làm gì.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### Bước 4: Di chuyển
|
|
84
|
+
|
|
85
|
+
Với mỗi integration đã được confirm:
|
|
86
|
+
|
|
87
|
+
- Di chuyển toàn bộ thư mục `specs/integrations/{slug}/` sang `specs/archive/{slug}/`
|
|
88
|
+
- Giữ nguyên toàn bộ cấu trúc thư mục và file bên trong
|
|
89
|
+
|
|
90
|
+
Nếu `specs/archive/{slug}/` đã tồn tại (trùng tên) → cảnh báo:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
⚠ specs/archive/001-user-authentication/ đã tồn tại. Bỏ qua integration này để tránh ghi đè.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Và bỏ qua integration đó, tiếp tục với các integration còn lại.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### Bước 5: Kết quả
|
|
101
|
+
|
|
102
|
+
Thông báo kết quả:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
✓ Đã archive:
|
|
106
|
+
specs/archive/001-user-authentication/
|
|
107
|
+
specs/archive/003-notification-service/
|
|
108
|
+
|
|
109
|
+
{nếu có lỗi}
|
|
110
|
+
⚠ Bỏ qua (đã tồn tại):
|
|
111
|
+
specs/archive/005-foo/
|
|
112
|
+
|
|
113
|
+
specs/integrations/ hiện còn {N} integration(s).
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Verification
|
|
119
|
+
|
|
120
|
+
Trước khi di chuyển:
|
|
121
|
+
|
|
122
|
+
- [ ] `specs/archive/` đã tồn tại (tạo nếu chưa có)
|
|
123
|
+
- [ ] User đã chọn ít nhất 1 integration
|
|
124
|
+
- [ ] User đã confirm trước khi di chuyển
|
|
125
|
+
- [ ] Không ghi đè nếu slug đã tồn tại trong `specs/archive/`
|
package/skills/build/SKILL.md
CHANGED
|
@@ -38,6 +38,38 @@ Chọn số integration:
|
|
|
38
38
|
- Nếu chỉ có 1 integration có task pending → chọn luôn, không hỏi
|
|
39
39
|
- Nếu tất cả đều done → thông báo: "Tất cả integration đã hoàn thành."
|
|
40
40
|
|
|
41
|
+
### Bước 0a: Gate check — plan.md phải approved
|
|
42
|
+
|
|
43
|
+
Đọc frontmatter của `specs/integrations/{slug}/plan.md`.
|
|
44
|
+
|
|
45
|
+
Nếu `plan.md` chưa tồn tại:
|
|
46
|
+
|
|
47
|
+
> ⛔ Chưa có `plan.md` cho integration **{slug}**.
|
|
48
|
+
>
|
|
49
|
+
> Để tiếp tục:
|
|
50
|
+
> 1. Chạy `/plan` để tạo plan.md và todo.md
|
|
51
|
+
> 2. Review và đổi `status: approved` trong plan.md
|
|
52
|
+
>
|
|
53
|
+
> Sau đó chạy lại `/build`.
|
|
54
|
+
|
|
55
|
+
**Dừng hoàn toàn.**
|
|
56
|
+
|
|
57
|
+
Nếu `plan.md` tồn tại nhưng `status` **không phải** `approved`:
|
|
58
|
+
|
|
59
|
+
> ⛔ `plan.md` của integration **{slug}** chưa được approve (status hiện tại: `{status}`).
|
|
60
|
+
>
|
|
61
|
+
> Để tiếp tục:
|
|
62
|
+
> 1. Review `specs/integrations/{slug}/plan.md`
|
|
63
|
+
> 2. Đổi `status: draft` → `status: approved` trong frontmatter
|
|
64
|
+
>
|
|
65
|
+
> Sau khi approve xong, chạy lại `/build`.
|
|
66
|
+
|
|
67
|
+
**Dừng hoàn toàn. Không tiếp tục.**
|
|
68
|
+
|
|
69
|
+
Nếu `status: approved` → tiếp tục sang Bước 0b.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
41
73
|
### Bước 0b: Tạo branch và chọn chế độ worktree
|
|
42
74
|
|
|
43
75
|
**Tạo branch (bắt buộc):**
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -53,6 +53,32 @@ Nếu plan.md / todo.md đã tồn tại → hỏi trước khi ghi đè.
|
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
|
+
### Bước 1b: Gate check — spec.md và tech.md phải approved
|
|
57
|
+
|
|
58
|
+
Đọc frontmatter của `specs/integrations/{slug}/spec.md` và `specs/integrations/{slug}/tech.md`.
|
|
59
|
+
|
|
60
|
+
Nếu `tech.md` chưa tồn tại → coi như `status: missing`.
|
|
61
|
+
|
|
62
|
+
Kiểm tra từng file — nếu **bất kỳ file nào** chưa `approved`:
|
|
63
|
+
|
|
64
|
+
> ⛔ Không thể tạo plan.md — các artifact sau chưa được approve:
|
|
65
|
+
>
|
|
66
|
+
> - `spec.md` — status: `{status}` ← chỉ liệt kê nếu chưa approved
|
|
67
|
+
> - `tech.md` — status: `{status}` ← chỉ liệt kê nếu chưa approved hoặc chưa tồn tại
|
|
68
|
+
>
|
|
69
|
+
> Để tiếp tục:
|
|
70
|
+
> 1. Review từng file chưa approved (chạy `/spec-tech` trước nếu `tech.md` chưa có)
|
|
71
|
+
> 2. Apply Cascade Proposals (nếu có)
|
|
72
|
+
> 3. Đổi `status` thành `approved` trong frontmatter
|
|
73
|
+
>
|
|
74
|
+
> Sau khi approve xong, chạy lại `/plan`.
|
|
75
|
+
|
|
76
|
+
**Dừng hoàn toàn. Không tiếp tục.**
|
|
77
|
+
|
|
78
|
+
Nếu cả hai đều `approved` → tiếp tục sang Bước 2.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
56
82
|
### Bước 2: Load và surface context
|
|
57
83
|
|
|
58
84
|
Load:
|
|
@@ -56,6 +56,27 @@ Nếu integration đã có `tech.md` → hỏi trước khi tiếp tục:
|
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
+
### Bước 1b: Gate check — spec.md phải approved
|
|
60
|
+
|
|
61
|
+
Đọc frontmatter của `specs/integrations/{slug}/spec.md`.
|
|
62
|
+
|
|
63
|
+
Nếu `status` **không phải** `approved`:
|
|
64
|
+
|
|
65
|
+
> ⛔ `spec.md` của integration **{slug}** chưa được approve (status hiện tại: `{status}`).
|
|
66
|
+
>
|
|
67
|
+
> Để tiếp tục:
|
|
68
|
+
> 1. Review `specs/integrations/{slug}/spec.md`
|
|
69
|
+
> 2. Apply Cascade Proposals vào main artifacts (nếu có)
|
|
70
|
+
> 3. Đổi `status: draft` → `status: approved` trong frontmatter
|
|
71
|
+
>
|
|
72
|
+
> Sau khi approve xong, chạy lại `/spec-tech`.
|
|
73
|
+
|
|
74
|
+
**Dừng hoàn toàn. Không tiếp tục.**
|
|
75
|
+
|
|
76
|
+
Nếu `status: approved` → tiếp tục sang Bước 2.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
59
80
|
### Bước 2: Load context
|
|
60
81
|
|
|
61
82
|
Load các file sau:
|
package/skills-overview.md
CHANGED
|
@@ -174,6 +174,7 @@ Sau khi main artifacts đã sẵn sàng (từ greenfield hoặc brownfield), m
|
|
|
174
174
|
| `/plan` | `spec.md`, `tech.md`, `domain.md` | `plan.md`, `todo.md` |
|
|
175
175
|
| `/build` | `plan.md`, `todo.md` | *(source code)* |
|
|
176
176
|
| `/review` | `spec.md`, `tech.md`, `plan.md`, `todo.md`, *(source code)* | *(findings report)* |
|
|
177
|
+
| `/archive` | `specs/integrations/` | `specs/archive/` |
|
|
177
178
|
|
|
178
179
|
### `/spec-new [requirement]`
|
|
179
180
|
|
|
@@ -267,6 +268,22 @@ Review implementation sau `/build` theo năm trục: correctness, readability, a
|
|
|
267
268
|
|
|
268
269
|
---
|
|
269
270
|
|
|
271
|
+
### `/archive`
|
|
272
|
+
|
|
273
|
+
Di chuyển integration đã hoàn thành hoặc không còn active từ `specs/integrations/` sang `specs/archive/` để dọn dẹp thư mục làm việc chính.
|
|
274
|
+
|
|
275
|
+
**Bước 1 — Kiểm tra thư mục:** Tự động tạo `specs/archive/` nếu chưa tồn tại.
|
|
276
|
+
|
|
277
|
+
**Bước 2 — Liệt kê:** Quét `specs/integrations/`, hiển thị numbered list kèm status (đọc từ `spec.md` nếu có). Nếu không có integration nào → thông báo và dừng.
|
|
278
|
+
|
|
279
|
+
**Bước 3 — Xác nhận:** Hiển thị preview mapping `integrations/{slug}/ → archive/{slug}/` trước khi di chuyển. Chờ user confirm.
|
|
280
|
+
|
|
281
|
+
**Bước 4 — Di chuyển:** Move toàn bộ thư mục, giữ nguyên cấu trúc bên trong. Nếu slug đã tồn tại trong `specs/archive/` → bỏ qua và cảnh báo để tránh ghi đè.
|
|
282
|
+
|
|
283
|
+
**Bước 5 — Kết quả:** Liệt kê integrations đã archive, integrations bị bỏ qua (nếu có), và số integration còn lại trong `specs/integrations/`.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
270
287
|
### Thứ tự thực hiện
|
|
271
288
|
|
|
272
289
|
```
|
|
@@ -284,6 +301,8 @@ Review implementation sau `/build` theo năm trục: correctness, readability, a
|
|
|
284
301
|
/review │ (nếu Critical/Important)
|
|
285
302
|
│ │
|
|
286
303
|
[approve] ──────────┘ (nếu Suggestion only)
|
|
304
|
+
│
|
|
305
|
+
/archive (khi integration Done, dọn dẹp khỏi integrations/)
|
|
287
306
|
```
|
|
288
307
|
|
|
289
308
|
---
|