spec-lite 1.4.2 → 1.4.5

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.
@@ -8,13 +8,13 @@ Dùng khi bắt đầu dự án mới chưa có code. Mục tiêu: bootstrap `pr
8
8
 
9
9
  | Command | Reads | Writes |
10
10
  | --- | --- | --- |
11
- | `/spec-prd` | — *(tùy chọn: nguồn baseline path/@file/paste)* | `specs/main/prd.md`, `specs/main/domain.md` *(skeleton)* |
12
- | `/spec-sad` | `prd.md`, `domain.md` | `specs/main/sad.md` |
13
- | `/spec-frd [F-XXX]` *(tùy chọn)* | `prd.md`, `domain.md`, `sad.md`, `crd(s)` *(+ nguồn baseline)* | `specs/main/feature/{F-XXX}-*/frd.md` *(+ register feature row vào `prd.md` nếu feature mới)* |
11
+ | `/spec-prd` | — *(tùy chọn: nguồn baseline path/@file/paste)* | `.specs/main/prd.md`, `.specs/main/domain.md` *(skeleton)* |
12
+ | `/spec-sad` | `prd.md`, `domain.md` | `.specs/main/sad.md` *(+ gán `Owner` cho shared entity còn TBD trong `domain.md`)* |
13
+ | `/spec-frd [F-XXX]` *(tùy chọn)* | `prd.md`, `domain.md`, `sad.md`, `crd(s)` *(+ nguồn baseline)* | `.specs/main/feature/{F-XXX}-*/frd.md` *(+ register feature row vào `prd.md` nếu feature mới; + cascade glossary/entity vào `domain.md`)* |
14
14
 
15
15
  ### `/spec-prd`
16
16
 
17
- Tạo hoặc cập nhật `specs/main/prd.md` thông qua interview có cấu trúc. Ngoài ra **scaffold luôn `specs/main/domain.md` skeleton** (Glossary placeholder + Shared Entities rỗng) — domain mọc dần qua cascade từ integrations.
17
+ Tạo hoặc cập nhật `.specs/main/prd.md` thông qua interview có cấu trúc. Ngoài ra **scaffold luôn `.specs/main/domain.md` skeleton** (Glossary placeholder + Shared Entities rỗng) — domain mọc dần qua cascade hai pha: mô tả (`/spec-frd`, `/spec-new` seed glossary + định nghĩa entity) và thiết kế (`/spec-sad` gán `Owner`).
18
18
 
19
19
  **Sections template** (7): Problem Statement · Target Users · Scope · Features · Components · Non-Functional Requirements · Business Constraints
20
20
 
@@ -33,11 +33,13 @@ Chọn `A` → interview tuần tự 7 sections template (sections thừa không
33
33
 
34
34
  ### `/spec-sad`
35
35
 
36
- Tạo hoặc cập nhật `specs/main/sad.md`. Yêu cầu `prd.md` và `domain.md` đã tồn tại (cả hai do `/spec-prd` scaffold).
36
+ Tạo hoặc cập nhật `.specs/main/sad.md`. Yêu cầu `prd.md` và `domain.md` đã tồn tại (cả hai do `/spec-prd` scaffold).
37
37
 
38
38
  Trước khi interview, đọc `prd.md` (NFRs, constraints) và `domain.md` (glossary, shared entities) để surface assumptions và đề xuất options phù hợp khi user chưa quyết định.
39
39
 
40
- **Sections template** (7): Architectural Style · System Overview · Tech Stack · Cross-Cutting Concerns · Inter-Service Communication · Infrastructure Overview · Architectural Guardrails
40
+ **Cascade lên `domain.md` (pha thiết kế/HOW):** carve component việc thiết kế, nên sau khi Components rõ, `/spec-sad` gán `Owner: C-XXX` + `Used by` cho shared entity mà pha mô tả (`/spec-frd`/`/spec-new`) để `Owner: TBD`. Đây là nửa HOW của domain two-phase cascade.
41
+
42
+ **Sections template** (8): Architectural Style · System Overview · Tech Stack · Cross-Cutting Concerns · Inter-Service Communication · Infrastructure Overview · Architectural Guardrails · ADR Log
41
43
 
42
44
  **Khi file chưa tồn tại** → full interview tuần tự từng section.
43
45
 
@@ -51,7 +53,7 @@ Nếu `prd.md` chưa có → dừng, yêu cầu chạy `/spec-prd` trước.
51
53
 
52
54
  ### `/spec-frd [F-XXX]` *(tùy chọn)*
53
55
 
54
- BA author `specs/main/feature/{F-XXX}-*/frd.md` trực tiếp qua interview — **spec-first ở feature level**, chạy *trước* khi DEV bắt đầu integration. Cặp greenfield đối xứng với `/spec-brownfield-feature` (vốn reverse-engineer frd từ code).
56
+ BA author `.specs/main/feature/{F-XXX}-*/frd.md` trực tiếp qua interview — **spec-first ở feature level**, chạy *trước* khi DEV bắt đầu integration. Cặp greenfield đối xứng với `/spec-brownfield-feature` (vốn reverse-engineer frd từ code).
55
57
 
56
58
  Nhận F-XXX từ argument (hoặc chọn từ prd Feature Index) + tùy chọn nguồn baseline (path/@file/paste như `/spec-prd`). Yêu cầu `prd.md` tồn tại.
57
59
 
@@ -65,8 +67,10 @@ Nhận F-XXX từ argument (hoặc chọn từ prd Feature Index) + tùy chọn
65
67
  **Phạm vi hẹp — chủ yếu `frd.md`:**
66
68
  - Reference component frd phụ thuộc (Components Used → C-XXX có sẵn).
67
69
  - Component cần-nhưng-chưa-có → ghi *candidate* + Open Question cho `/spec-sad`/architect chốt boundary.
68
- - Có thể register **một** feature row vào prd (side-effect hợp lệ duy nhất lên prd). **KHÔNG** tạo `crd.md`/`cdd.md` (sinh ở integration time qua `/spec-new` cascade), không tạo `fdd.md`/`tsd.md`, không đổi status feature đã có, không đụng sad/domain.
69
- - Change History operation = `manual`. Verification Rules dùng quy ước option-suggester của `/spec-new` (BA owns).
70
+ - Có thể register **một** feature row vào prd (side-effect lên prd).
71
+ - **Cascade vocabulary lên `domain.md`** (pha tả/WHAT): glossary term + **định nghĩa shared entity** (attributes), `Owner: TBD` để `/spec-sad` gán ở pha thiết kế (HOW). BA define entity, KHÔNG carve/gán Owner.
72
+ - **KHÔNG** tạo `crd.md`/`cdd.md` (sinh ở integration time qua `/spec-new` cascade), không tạo `fdd.md`/`tsd.md`, không đổi status feature đã có, không đụng sad.
73
+ - Change History operation = `manual` (cả frd lẫn domain). Verification Rules dùng quy ước option-suggester của `/spec-new` (BA owns).
70
74
 
71
75
  Bỏ qua bước này cũng được — `/spec-new` sẽ tự tạo frd làm fallback khi integration đầu tiên chạm tới feature.
72
76
 
@@ -253,17 +257,17 @@ Sau khi main artifacts đã sẵn sàng (từ greenfield hoặc brownfield), m
253
257
 
254
258
  | Command | Reads | Writes |
255
259
  | --- | --- | --- |
256
- | `/spec-new [requirement]` | `prd.md`, `domain.md`, frd(s), crd(s) | `specs/integrations/{slug}/spec.md` |
257
- | `/spec-tech [number]` | `sad.md`, `domain.md`, cdd(s), fdd(s), `spec.md` | `specs/integrations/{slug}/tech.md` |
258
- | `/spec-test [number]` | `spec.md`, frd(s), tsd(s), `tech.md` *(optional)* | `specs/integrations/{slug}/test.md`, `feature/{F-XXX}/tsd.md` |
260
+ | `/spec-new [requirement]` | `prd.md`, `domain.md`, frd(s), crd(s) | `.specs/integrations/{slug}/spec.md` |
261
+ | `/spec-tech [number]` | `sad.md`, `domain.md`, cdd(s), fdd(s), `spec.md` | `.specs/integrations/{slug}/tech.md` |
262
+ | `/spec-test [number]` | `spec.md`, frd(s), tsd(s), `tech.md` *(optional)* | `.specs/integrations/{slug}/test.md`, `feature/{F-XXX}/tsd.md` |
259
263
  | `/plan` | `spec.md`, `tech.md`, `domain.md` | `plan.md`, `todo.md` |
260
264
  | `/build` | `plan.md`, `todo.md` | *(source code)* |
261
265
  | `/review-integration` | `spec.md`, `tech.md`, `plan.md`, `todo.md`, *(source code)* | *(findings report)* |
262
- | `/archive` | `specs/integrations/` | `specs/archive/` |
266
+ | `/archive` | `.specs/integrations/` | `.specs/archive/` |
263
267
 
264
268
  ### `/spec-new [requirement]`
265
269
 
266
- Tạo `specs/integrations/{slug}/spec.md` cho một integration mới. Chạy bởi BA.
270
+ Tạo `.specs/integrations/{slug}/spec.md` cho một integration mới. Chạy bởi BA.
267
271
 
268
272
  **Nếu không có argument** → đọc `prd.md`, hiển thị danh sách features có `Status = TODO`, user chọn số.
269
273
 
@@ -283,9 +287,9 @@ Sau khi confirm → ghi `spec.md`, cập nhật `prd.md`: Status `TODO → In Pr
283
287
 
284
288
  ### `/spec-tech [number]`
285
289
 
286
- Tạo `specs/integrations/{slug}/tech.md` cho một integration. Chạy bởi DEV sau khi `spec.md` đã được approve.
290
+ Tạo `.specs/integrations/{slug}/tech.md` cho một integration. Chạy bởi DEV sau khi `spec.md` đã được approve.
287
291
 
288
- **Luôn hiển thị danh sách tất cả integrations** trong `specs/integrations/`, đánh dấu `✓` những cái đã có `tech.md`. Nếu có argument → argument là số thứ tự (`1`, `001`...), chọn luôn không cần hiển thị.
292
+ **Luôn hiển thị danh sách tất cả integrations** trong `.specs/integrations/`, đánh dấu `✓` những cái đã có `tech.md`. Nếu có argument → argument là số thứ tự (`1`, `001`...), chọn luôn không cần hiển thị.
289
293
 
290
294
  Nếu integration đã có `tech.md` → hỏi confirm trước khi ghi đè.
291
295
 
@@ -299,9 +303,9 @@ Context load: `spec.md` + `sad.md` + `domain.md` + `cdd.md` (cho mỗi component
299
303
 
300
304
  ### `/spec-test [number]`
301
305
 
302
- Tạo `specs/integrations/{slug}/test.md` cho một integration. Chạy bởi **QC** sau khi `spec.md` đã được approve. **Song song / độc lập** với `/spec-tech` — cả hai chỉ phụ thuộc `spec.md`. Không có thứ tự bắt buộc giữa chúng.
306
+ Tạo `.specs/integrations/{slug}/test.md` cho một integration. Chạy bởi **QC** sau khi `spec.md` đã được approve. **Song song / độc lập** với `/spec-tech` — cả hai chỉ phụ thuộc `spec.md`. Không có thứ tự bắt buộc giữa chúng.
303
307
 
304
- **Luôn hiển thị danh sách tất cả integrations** trong `specs/integrations/`, đánh dấu `✓` những cái đã có `test.md`. Nếu có argument → chọn luôn không cần hiển thị.
308
+ **Luôn hiển thị danh sách tất cả integrations** trong `.specs/integrations/`, đánh dấu `✓` những cái đã có `test.md`. Nếu có argument → chọn luôn không cần hiển thị.
305
309
 
306
310
  **Gate check:** spec.md phải `approved` + `features:` non-empty. Integration có `features: []` (thuần component) → dừng vì component-level `tsd` không tồn tại trong kit này.
307
311
 
@@ -326,7 +330,7 @@ QC review: override priority defaults, fill placeholders (env / data / OOS / str
326
330
  Tạo `plan.md` và `todo.md` từ `spec.md` + `tech.md`. Là SDD wrapper quanh `planning-and-task-breakdown`.
327
331
 
328
332
  **Bước 1: Xác định integration**
329
- Quét `specs/integrations/`, hiển thị danh sách với trạng thái `spec✓/—`, `tech✓/—`, `plan✓/—`. Nếu có argument → chọn luôn. Nếu `plan.md`/`todo.md` đã tồn tại → hỏi trước khi ghi đè.
333
+ Quét `.specs/integrations/`, hiển thị danh sách với trạng thái `spec✓/—`, `tech✓/—`, `plan✓/—`. Nếu có argument → chọn luôn. Nếu `plan.md`/`todo.md` đã tồn tại → hỏi trước khi ghi đè.
330
334
 
331
335
  **Bước 2: Load và surface context**
332
336
  Đọc `spec.md`, `tech.md`, `domain.md`. Surface tóm tắt (features, components, AC IDs, thay đổi kỹ thuật, shared entities) và assumptions để user confirm. Plan mode từ đây — chỉ đọc, không viết code.
@@ -379,17 +383,17 @@ Review implementation sau `/build` theo năm trục: correctness, readability, a
379
383
 
380
384
  ### `/archive`
381
385
 
382
- 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.
386
+ 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.
383
387
 
384
- **Bước 1 — Kiểm tra thư mục:** Tự động tạo `specs/archive/` nếu chưa tồn tại.
388
+ **Bước 1 — Kiểm tra thư mục:** Tự động tạo `.specs/archive/` nếu chưa tồn tại.
385
389
 
386
- **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.
390
+ **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.
387
391
 
388
392
  **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.
389
393
 
390
- **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 đè.
394
+ **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 đè.
391
395
 
392
- **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/`.
396
+ **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/`.
393
397
 
394
398
  ---
395
399
 
@@ -432,7 +436,7 @@ Khác với `/review-integration` (chạy sau `/build` cho một integration c
432
436
 
433
437
  | Command | Reads | Writes |
434
438
  | --- | --- | --- |
435
- | `/review-everything` | `prd.md`, `domain.md`, `sad.md`, *(source code)* | `specs/integrations/{NNN}-{slug}/review-findings.md` *(qua /spec-new)* |
439
+ | `/review-everything` | `prd.md`, `domain.md`, `sad.md`, *(source code)* | `.specs/integrations/{NNN}-{slug}/review-findings.md` *(qua /spec-new)* |
436
440
 
437
441
  ### `/review-everything`
438
442
 
@@ -450,7 +454,7 @@ Review codebase ở project level theo năm trục của `code-review-and-qualit
450
454
 
451
455
  Nếu user chọn fix → gom selected findings thành raw requirement, invoke `/spec-new` với ARGUMENT đó. Integration được tạo và xử lý như integration thường (`/spec-tech` → `/plan` → `/build`).
452
456
 
453
- `review-findings.md` (full snapshot, gồm cả deferred) được ghi vào `specs/integrations/{NNN}-{slug}/` để traceability.
457
+ `review-findings.md` (full snapshot, gồm cả deferred) được ghi vào `.specs/integrations/{NNN}-{slug}/` để traceability.
454
458
 
455
459
  **Khi dùng:**
456
460
 
@@ -571,7 +575,7 @@ Tạo hoặc cập nhật `.claude/ado.yaml` — file config ADO dùng chung cho
571
575
 
572
576
  **Bước 1 — Current user:** Đọc `git config user.email`, tìm trong `team.*` của `ado.yaml`. Nếu không khớp → hỏi user chọn. Resolve email → ADO identity ID để dùng làm assignee.
573
577
 
574
- **Bước 2 — Chọn integration:** List tất cả `specs/integrations/` kèm title và status từ frontmatter `spec.md`.
578
+ **Bước 2 — Chọn integration:** List tất cả `.specs/integrations/` kèm title và status từ frontmatter `spec.md`.
575
579
 
576
580
  **Bước 3 — Parse spec.md:** Extract Features (`### Feature: <name> (<ID>)`) và User Stories (`#### US-FXXX-YYY — <title>`). Detect ticket đã tồn tại qua dòng `**ADO:**` ngay sau heading — đánh dấu `already_created`, bỏ qua khi tạo.
577
581
 
@@ -599,7 +603,7 @@ Cập nhật state đồng loạt cho User Story (và tuỳ chọn Feature) tick
599
603
 
600
604
  **Bước 1 — Load config:** Đọc `ado.yaml`. Dừng nếu thiếu file hoặc `environments` rỗng.
601
605
 
602
- **Bước 2 — Chọn integration:** List `specs/integrations/` kèm title và status.
606
+ **Bước 2 — Chọn integration:** List `.specs/integrations/` kèm title và status.
603
607
 
604
608
  **Bước 3 — Parse & validate:** Extract tất cả Feature và User Story tickets từ dòng `**ADO:**` trong `spec.md`. Nếu bất kỳ ticket nào chưa có → dừng, báo danh sách thiếu, yêu cầu chạy `/ado-create` trước.
605
609
 
@@ -6,15 +6,17 @@ owner: "{BA/Domain Expert}"
6
6
  referenced_by:
7
7
  - conventions.md > 3. Main Artifacts > 3.1 Product level > domain.md > Cấu trúc
8
8
  - skills/spec-prd/SKILL.md > Process > Bước 5: Save (scaffold domain.md skeleton)
9
+ - skills/spec-frd/SKILL.md > Process > Bước 4b (cascade glossary + entity definition — WHAT)
10
+ - skills/spec-sad/SKILL.md > Process > Phần 1.6 (gán Owner cho shared entity — HOW)
9
11
  - skills/spec-new/SKILL.md > Process > Cascade Proposals > domain.md
10
12
  - skills/spec-tech/SKILL.md > Process > Cascade Proposals > domain.md
11
13
  ---
12
14
 
13
15
  # Domain
14
16
 
15
- > File này mỏng — chỉ chứa **shared vocabulary** và **shared entities** (entities được dùng bởi 2+ component).
17
+ > File này mỏng — chỉ chứa **shared vocabulary** và **shared entities** (entity mức vocabulary nghiệp vụ chung, dự kiến dùng bởi 2+ component; việc dùng-bởi-2+ và `Owner` được xác nhận ở pha thiết kế).
16
18
  >
17
- > Business rules, domain events, internal entities thuộc về component sở hữu — xem `specs/main/component/{C-XXX}-{component-name}/crd.md`.
19
+ > Business rules, domain events, internal entities thuộc về component sở hữu — xem `.specs/main/component/{C-XXX}-{component-name}/crd.md`.
18
20
 
19
21
  ## Glossary
20
22
 
@@ -26,13 +28,17 @@ referenced_by:
26
28
 
27
29
  ## Shared Entities
28
30
 
29
- Chỉ liệt entity được dùng bởi **2 hoặc nhiều component**. Entity nội bộ một component không vào đây — chúng nằm trong `crd.md` của component đó.
31
+ Entity mức vocabulary nghiệp vụ chung. Hai phần thông tin tới từ hai pha (xem two-phase cascade, `conventions.md` §5.5):
32
+ - **Định nghĩa** (tên, attributes, state machine) — *mô tả hệ thống* (WHAT): seed bởi `/spec-prd`/`/spec-frd`/`/spec-new`.
33
+ - **`Owner` / `Used by`** — *thiết kế hệ thống* (HOW): gán bởi `/spec-sad` (hoặc `/spec-new` khi carve component). Khi entity vừa được seed mà component chưa carve → để `Owner: TBD`.
34
+
35
+ Entity rõ ràng nội bộ một component (không phải vocabulary chung) không vào đây — chúng nằm trong `crd.md` của component đó.
30
36
 
31
37
  ### {Entity Name}
32
38
 
33
- **Owner:** `{C-XXX}-{component-name}` *(component sở hữu canonical definition)*
39
+ **Owner:** `{C-XXX}-{component-name}` *(component sở hữu canonical definition; `TBD` nếu chưa carve — `/spec-sad` điền)*
34
40
 
35
- **Used by:** `{C-XXX}`, `{C-YYY}` *(các component reference entity này)*
41
+ **Used by:** `{C-XXX}`, `{C-YYY}` *(các component reference entity này; `TBD` cho tới khi gán Owner)*
36
42
 
37
43
  {Mô tả entity này đại diện cho cái gì trong business context.}
38
44
 
@@ -149,7 +149,7 @@ Sub-rule phức tạp (vd: password complexity với nhiều điều kiện) →
149
149
 
150
150
  ### Components Used
151
151
 
152
- Tham chiếu đến `specs/main/component/{C-XXX}-...`.
152
+ Tham chiếu đến `.specs/main/component/{C-XXX}-...`.
153
153
 
154
154
  | Component | Vai trò trong feature |
155
155
  | --- | --- |
@@ -56,7 +56,7 @@ Section này **chỉ liệt kê component có boundary _Given_** — tức bound
56
56
  - `/spec-sad` — architect lock component boundaries dựa trên full feature index + NFRs
57
57
  - `/spec-new F-XXX` cascade — khi analyze 1 feature, discover component mới nếu cần và register vào đây qua Change History
58
58
 
59
- Chi tiết về vai trò và thiết kế nằm trong `specs/main/component/{C-XXX}-{component-name}/`.
59
+ Chi tiết về vai trò và thiết kế nằm trong `.specs/main/component/{C-XXX}-{component-name}/`.
60
60
 
61
61
  | ID | Component | Mô tả ngắn | Status |
62
62
  | --- | --- | --- | --- |
@@ -75,6 +75,14 @@ Các nguyên tắc sau là bất biến. Agent phải kiểm tra compliance trư
75
75
  - GUARD-002: {nguyên tắc — ví dụ: Mọi external API call phải có retry + timeout}
76
76
  - GUARD-003: {nguyên tắc — ví dụ: Không để business logic trong API layer}
77
77
 
78
+ ## ADR Log
79
+
80
+ Architecture Decision Records — ghi lại các quyết định kiến trúc quan trọng cùng bối cảnh và hệ quả. Nắm *tại sao* chọn (điều mà Guardrails và Tech Stack không giải thích), giúp người sau hiểu trade-off thay vì đoán lại. Mỗi quyết định lớn (chọn style, tech chính, đánh đổi đáng kể) nên có một entry.
81
+
82
+ | ID | Decision | Status | Context & Rationale | Consequences |
83
+ | --- | --- | --- | --- | --- |
84
+ | ADR-001 | {quyết định ngắn gọn} | proposed / accepted / deprecated / superseded | {bối cảnh + lý do chọn, các option đã cân nhắc} | {hệ quả, đánh đổi phải chấp nhận} |
85
+
78
86
  ## Change History
79
87
 
80
88
  Append-only log của các thay đổi cascade lên artifact này. Quy ước xem `conventions.md` §5.5.