@warnyin/agents 0.1.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/.claude/commands/warnyin/build.md +29 -0
- package/.claude/commands/warnyin/design.md +23 -0
- package/.claude/commands/warnyin/discovery.md +17 -0
- package/.claude/commands/warnyin/init.md +12 -0
- package/.claude/commands/warnyin/ship.md +27 -0
- package/.claude/commands/warnyin/verify.md +19 -0
- package/AGENTS.md +38 -0
- package/CLAUDE.md +35 -0
- package/bin/cli.mjs +117 -0
- package/docs/codemap/index.md +0 -0
- package/docs/features/[feature-name]/business.md +0 -0
- package/docs/features/[feature-name]/feature.md +0 -0
- package/docs/infra.md +0 -0
- package/docs/project.md +0 -0
- package/docs/rule.md +0 -0
- package/docs/techstack/admin-console/about.md +0 -0
- package/docs/techstack/admin-console/rule.md +0 -0
- package/docs/techstack/admin-console/standard.md +0 -0
- package/docs/techstack/admin-console/structure.md +0 -0
- package/docs/techstack/admin-console/test.md +0 -0
- package/docs/techstack/api-service/about.md +0 -0
- package/docs/techstack/api-service/rule.md +0 -0
- package/docs/techstack/api-service/standard.md +0 -0
- package/docs/techstack/api-service/structure.md +0 -0
- package/docs/techstack/api-service/test.md +0 -0
- package/docs/troubleshooting.md +39 -0
- package/installer/templates/CLAUDE.md +25 -0
- package/package.json +30 -0
- package/warnyin-stages/[topic]/build.md +58 -0
- package/warnyin-stages/[topic]/business.md +21 -0
- package/warnyin-stages/[topic]/design.md +42 -0
- package/warnyin-stages/[topic]/discovery.md +69 -0
- package/warnyin-stages/[topic]/proposal.md +43 -0
- package/warnyin-stages/[topic]/research.md +49 -0
- package/warnyin-stages/[topic]/ship.md +29 -0
- package/warnyin-stages/[topic]/tasks/[task-name]/issue.md +19 -0
- package/warnyin-stages/[topic]/tasks/[task-name]/rule.md +13 -0
- package/warnyin-stages/[topic]/tasks/[task-name]/spec.md +36 -0
- package/warnyin-stages/[topic]/tasks/[task-name]/standard.md +21 -0
- package/warnyin-stages/[topic]/tasks/[task-name]/task.md +39 -0
- package/warnyin-stages/[topic]/test.md +46 -0
- package/warnyin-stages/[topic]/troubleshooting.md +34 -0
- package/warnyin-stages/[topic]/verify.md +44 -0
- package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/business.md +0 -0
- package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/design.md +0 -0
- package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/discovery.md +0 -0
- package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/proposal.md +0 -0
- package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/research.md +0 -0
- package/warnyin-stages/context.md +0 -0
- package/workflow/README.md +90 -0
- package/workflow/init.md +59 -0
- package/workflow/scripts/build-wave.mjs +106 -0
- package/workflow/stages/build.md +93 -0
- package/workflow/stages/design.md +107 -0
- package/workflow/stages/discovery.md +76 -0
- package/workflow/stages/ship.md +84 -0
- package/workflow/stages/verify.md +70 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Discovery — <ชื่อหัวข้องาน>
|
|
2
|
+
|
|
3
|
+
> Output ของ Discovery stage · playbook: `workflow/stages/discovery.md`
|
|
4
|
+
|
|
5
|
+
| | |
|
|
6
|
+
|---|---|
|
|
7
|
+
| **Slug** | `<kebab-case>` |
|
|
8
|
+
| **สถานะ** | `กำลังทำ` / `ผ่าน gate แล้ว` |
|
|
9
|
+
| **วันที่** | `YYYY-MM-DD` |
|
|
10
|
+
| **ผู้ร่วมตัดสินใจ** | `<ชื่อ>` |
|
|
11
|
+
| **เริ่มจาก** | อ้างอิง `docs/project.md` ส่วนไหน |
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. สรุปความเข้าใจร่วมกัน (one-liner)
|
|
16
|
+
> เราจะทำ **อะไร** ให้ **ใคร** เพื่อแก้ปัญหา **อะไร** — สรุปได้ใน 1-3 บรรทัด
|
|
17
|
+
|
|
18
|
+
## 2. Problem & Why now
|
|
19
|
+
- ปัญหา / โอกาส:
|
|
20
|
+
- ทำไมต้องทำตอนนี้:
|
|
21
|
+
- ผูกกับเป้าหมายโปรเจกต์ (จาก `docs/project.md`) อย่างไร:
|
|
22
|
+
|
|
23
|
+
## 3. Scope (กว้าง → แคบ)
|
|
24
|
+
**In scope (จะทำ)**
|
|
25
|
+
-
|
|
26
|
+
|
|
27
|
+
**Out of scope (จะไม่ทำในรอบนี้)**
|
|
28
|
+
-
|
|
29
|
+
|
|
30
|
+
## 4. Decision Log (เดินทีละกิ่งของ decision tree)
|
|
31
|
+
> หนึ่งแถว = หนึ่งการตัดสินใจ บันทึกทันทีที่ตกลงได้
|
|
32
|
+
|
|
33
|
+
| # | คำถาม / ประเด็น | ทางเลือก | คำตอบที่แนะนำ | ที่เลือกจริง | เหตุผล |
|
|
34
|
+
|---|---|---|---|---|---|
|
|
35
|
+
| 1 | | | | | |
|
|
36
|
+
| 2 | | | | | |
|
|
37
|
+
|
|
38
|
+
## 5. สมมติฐาน & ข้อจำกัด
|
|
39
|
+
- สมมติฐาน:
|
|
40
|
+
- ข้อจำกัด (เทคนิค/เวลา/ทรัพยากร/ระบบเดิม):
|
|
41
|
+
|
|
42
|
+
## 6. เกณฑ์ความสำเร็จ (วัดผลได้)
|
|
43
|
+
-
|
|
44
|
+
|
|
45
|
+
## 7. Feature ideas / ทางเลือกของวิธีแก้
|
|
46
|
+
> ไอเดียคร่าวๆ ที่จะส่งต่อให้ DESIGN พิจารณา (ยังไม่ลงรายละเอียดออกแบบ)
|
|
47
|
+
-
|
|
48
|
+
|
|
49
|
+
## 8. Open questions (ที่ยังค้าง)
|
|
50
|
+
> ต้องปิดทุกข้อที่ block การออกแบบ ก่อนผ่าน gate
|
|
51
|
+
- [ ]
|
|
52
|
+
|
|
53
|
+
## 9. ความเสี่ยงหลัก
|
|
54
|
+
-
|
|
55
|
+
|
|
56
|
+
## 10. ลิงก์ที่เกี่ยวข้อง
|
|
57
|
+
- Research: `./research.md`
|
|
58
|
+
- เอกสารโปรเจกต์: `docs/project.md`, `docs/...`
|
|
59
|
+
- โค้ด/ไฟล์ที่ตรวจสอบ:
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ✅ Gate → DESIGN (ดู `workflow/stages/discovery.md` ข้อ 6)
|
|
64
|
+
- [ ] Problem / why-now ชัด ผูกกับ project.md
|
|
65
|
+
- [ ] Scope in/out ชัด
|
|
66
|
+
- [ ] Decision log ปิดทุกประเด็นสำคัญ ไม่มี open question ที่ block
|
|
67
|
+
- [ ] success criteria วัดผลได้
|
|
68
|
+
- [ ] สมมติฐาน/ข้อจำกัด/ความเสี่ยง บันทึกครบ
|
|
69
|
+
- [ ] user ยืนยัน "เข้าใจตรงกันแล้ว"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Proposal — <ชื่อ change>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
|
|
4
|
+
> **what & why** ของ change นี้
|
|
5
|
+
|
|
6
|
+
| | |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Slug** | `<kebab-case>` |
|
|
9
|
+
| **ประเภท** | `feature` / `bugfix` / `refactor` / `docs` |
|
|
10
|
+
| **ขนาด** | `เล็ก` / `กลาง` / `ใหญ่` |
|
|
11
|
+
| **วันที่** | `YYYY-MM-DD` |
|
|
12
|
+
| **มาจาก Discovery?** | `./discovery.md` หรือ `ไม่มี` |
|
|
13
|
+
|
|
14
|
+
## 1. สรุป change (what)
|
|
15
|
+
> เราจะเปลี่ยน/สร้าง/แก้อะไร — 1-3 บรรทัด
|
|
16
|
+
|
|
17
|
+
## 2. ทำไม (why)
|
|
18
|
+
- ปัญหา/โอกาส:
|
|
19
|
+
- ผลถ้าไม่ทำ:
|
|
20
|
+
|
|
21
|
+
## 3. ทางเลือกที่พิจารณา
|
|
22
|
+
| ทางเลือก | ข้อดี | ข้อเสีย | เลือก? |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| A (แนะนำ) | | | ✅ |
|
|
25
|
+
| B | | | |
|
|
26
|
+
|
|
27
|
+
- เหตุผลที่เลือก:
|
|
28
|
+
|
|
29
|
+
## 4. Scope
|
|
30
|
+
**In scope**
|
|
31
|
+
-
|
|
32
|
+
|
|
33
|
+
**Out of scope**
|
|
34
|
+
-
|
|
35
|
+
|
|
36
|
+
## 5. ผลกระทบ & ความเสี่ยง
|
|
37
|
+
- ระบบ/ฟีเจอร์เดิมที่กระทบ:
|
|
38
|
+
- ความเสี่ยง + วิธีลดความเสี่ยง:
|
|
39
|
+
|
|
40
|
+
## 6. ลิงก์
|
|
41
|
+
- Design (how): `./design.md`
|
|
42
|
+
- Tasks: `./tasks/`
|
|
43
|
+
- Business: `./business.md` (ถ้ามี)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Research — <ชื่อหัวข้องาน>
|
|
2
|
+
|
|
3
|
+
> Output ของ Discovery stage · playbook: `workflow/stages/discovery.md`
|
|
4
|
+
> ที่เก็บ "ข้อมูลที่ค้นมา + หลักฐาน" สนับสนุนการตัดสินใจใน `discovery.md`
|
|
5
|
+
|
|
6
|
+
| | |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Slug** | `<kebab-case>` |
|
|
9
|
+
| **วันที่** | `YYYY-MM-DD` |
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. คำถามวิจัย (research questions)
|
|
14
|
+
> สิ่งที่ "ยังไม่รู้" และต้องค้นให้ได้คำตอบก่อนออกแบบ
|
|
15
|
+
- [ ] RQ1:
|
|
16
|
+
- [ ] RQ2:
|
|
17
|
+
|
|
18
|
+
## 2. วิธี & แหล่งข้อมูล
|
|
19
|
+
- [ ] อ่านโค้ด/เอกสารในโปรเจกต์ (code inspection)
|
|
20
|
+
- [ ] ค้นเว็บ / เอกสารภายนอก
|
|
21
|
+
- [ ] prior art / วิธีที่ทีม/คนอื่นทำ
|
|
22
|
+
|
|
23
|
+
## 3. Findings (ผลการค้นต่อคำถาม)
|
|
24
|
+
> ทุก finding ต้องมี evidence/link อ้างอิงได้
|
|
25
|
+
|
|
26
|
+
### RQ1: <คำถาม>
|
|
27
|
+
- พบว่า:
|
|
28
|
+
- หลักฐาน:
|
|
29
|
+
- สรุป/นัยต่อการออกแบบ:
|
|
30
|
+
|
|
31
|
+
### RQ2: <คำถาม>
|
|
32
|
+
-
|
|
33
|
+
|
|
34
|
+
## 4. Code inspection (สิ่งที่ตอบได้จากโค้ดเอง โดยไม่ต้องถาม user)
|
|
35
|
+
| ไฟล์ / ส่วนของโค้ด | สิ่งที่พบ | นัยต่องาน |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| | | |
|
|
38
|
+
|
|
39
|
+
## 5. ทางเลือก & เปรียบเทียบ (ถ้ามี)
|
|
40
|
+
| ทางเลือก | ข้อดี | ข้อเสีย | เหมาะกับเคสนี้? |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| | | | |
|
|
43
|
+
|
|
44
|
+
## 6. ความเสี่ยง / unknown ที่ยังเหลือ
|
|
45
|
+
-
|
|
46
|
+
|
|
47
|
+
## 7. ข้อสรุป → ส่งต่อ
|
|
48
|
+
- คำแนะนำจาก research:
|
|
49
|
+
- การตัดสินใจที่ป้อนกลับเข้า `discovery.md` (Decision Log):
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Ship — <ชื่อ topic>
|
|
2
|
+
|
|
3
|
+
> Output ของ SHIP stage · playbook: `workflow/stages/ship.md`
|
|
4
|
+
> สรุปการส่งมอบ — เขียนหลังย้าย topic เข้า `warnyin-stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว
|
|
5
|
+
|
|
6
|
+
## 1. สรุป topic
|
|
7
|
+
- ทำอะไร: <!-- หนึ่งย่อหน้า: topic นี้ทำอะไร ทำอย่างไร -->
|
|
8
|
+
- ประเภท: ☐ feature ใหม่ / ☐ ปรับปรุง feature เดิม → `docs/features/<feature-name>/`
|
|
9
|
+
|
|
10
|
+
## 2. เอกสารกลางที่อัปเดต
|
|
11
|
+
| ไฟล์ | สาระที่ promote |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `docs/features/<feature-name>/` | |
|
|
14
|
+
| `docs/techstack/<component>/rule.md` | |
|
|
15
|
+
| `docs/techstack/<component>/standard.md` | |
|
|
16
|
+
| `docs/techstack/<component>/structure.md` | |
|
|
17
|
+
| `docs/techstack/<component>/test.md` | |
|
|
18
|
+
| `docs/rule.md` | |
|
|
19
|
+
| `docs/troubleshooting.md` | |
|
|
20
|
+
| `docs/infra.md` / `docs/project.md` | <!-- ถ้าเกี่ยวข้อง --> |
|
|
21
|
+
| `docs/codemap/` | |
|
|
22
|
+
|
|
23
|
+
## 3. note "รอ SHIP" ที่ตัดทิ้ง (ไม่ promote)
|
|
24
|
+
| note | เหตุผลที่ตัด |
|
|
25
|
+
|---|---|
|
|
26
|
+
| | |
|
|
27
|
+
|
|
28
|
+
## 4. Archive
|
|
29
|
+
- ย้ายจาก `warnyin-stages/<slug>/` → `warnyin-stages/achieved/<YYYY-MM-DD>-<slug>/` เมื่อ <YYYY-MM-DD>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Issue — <ชื่อ task>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN dry-run · playbook: `workflow/stages/design.md` (ข้อ 4.9)
|
|
4
|
+
> ผลสแกนหา defer/blocker ของ task นี้ก่อนเข้า BUILD — **สร้างเฉพาะเมื่อพบ issue**
|
|
5
|
+
|
|
6
|
+
## 1. สรุป
|
|
7
|
+
- ผลสแกน: blocker __ ข้อ · defer __ ข้อ
|
|
8
|
+
- สถานะรวม: ☐ แก้ครบ ไม่มี blocker ค้าง / ☐ มี blocker ค้าง (ห้ามเข้า BUILD)
|
|
9
|
+
|
|
10
|
+
## 2. รายการ issue
|
|
11
|
+
| # | ประเภท | จุดที่พบ (ไฟล์/spec/โค้ด) | รายละเอียด | แนวทางแก้ / ข้อสรุป | สถานะ |
|
|
12
|
+
|---|---|---|---|---|---|
|
|
13
|
+
| 1 | blocker / defer | | | | open / resolved |
|
|
14
|
+
|
|
15
|
+
> - **blocker** — ทำให้ implement ตาม spec ไม่ได้ (ขัดแย้งกับโค้ดจริง/task อื่น, ข้อมูลขาด, dependency ผิด) → ต้องแก้ DESIGN ก่อนเข้า BUILD
|
|
16
|
+
> - **defer** — ตัดสินใจ/ทำทีหลังได้ ไม่ block การเริ่ม BUILD แต่ต้องบันทึกและให้ user รับทราบ
|
|
17
|
+
|
|
18
|
+
## 3. ผลการแก้ไข
|
|
19
|
+
<!-- แก้อะไรใน design.md / task ไหนบ้าง + ผล rerun dry-run; ข้อสรุปจากการสัมภาษณ์ user (ถ้ามี) -->
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Rule — <ชื่อ task>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
|
|
4
|
+
> rule ที่ task นี้ต้อง **focus/follow** + rule ใหม่ที่อยากเสนอเพิ่ม
|
|
5
|
+
|
|
6
|
+
## 1. Rule ที่ต้อง follow (จาก techstack)
|
|
7
|
+
> ดึงจาก `docs/techstack/<component>/rule.md` และ `docs/rule.md` — เฉพาะข้อที่เกี่ยวกับ task นี้
|
|
8
|
+
- [ ]
|
|
9
|
+
- [ ]
|
|
10
|
+
|
|
11
|
+
## 2. เสนอเพิ่ม rule ใหม่ (⏳ รอ SHIP ค่อยอัปเดต rule กลาง)
|
|
12
|
+
> ห้ามแก้ `docs/techstack/.../rule.md` ตอนนี้ — แค่ note ไว้ก่อน ถึง SHIP ค่อยพิจารณาย้ายขึ้นไป
|
|
13
|
+
- [ ] rule ที่เสนอ: _____ — เหตุผล: _____
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Spec — <ชื่อ task>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
|
|
4
|
+
> spec เฉพาะของ task นี้ — **ใส่เฉพาะหัวข้อที่เกี่ยวข้องกับชนิดของ task**
|
|
5
|
+
|
|
6
|
+
## 1. ชนิดของ task
|
|
7
|
+
`API` / `UX-UI` / `data` / `logic` / `infra` / ...
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 2. API SPEC (ถ้าเป็น API — ตามมาตรฐาน)
|
|
12
|
+
| | |
|
|
13
|
+
|---|---|
|
|
14
|
+
| Endpoint | `METHOD /path` |
|
|
15
|
+
| Auth | |
|
|
16
|
+
| Request | schema / body / params |
|
|
17
|
+
| Response | schema + ตัวอย่าง |
|
|
18
|
+
| Status / Error | 200 / 4xx / 5xx + error shape |
|
|
19
|
+
|
|
20
|
+
## 3. UX/UI SPEC (ถ้าเป็นงาน UI)
|
|
21
|
+
- Wireframe / Figma ref: `<ลิงก์ ถ้ามี>`
|
|
22
|
+
- States: default / loading / empty / error / success
|
|
23
|
+
- Responsive / accessibility:
|
|
24
|
+
|
|
25
|
+
## 4. Data-flow
|
|
26
|
+
> ข้อมูลไหลจากไหน → ผ่านอะไร → ไปไหน
|
|
27
|
+
|
|
28
|
+
## 5. User-flow
|
|
29
|
+
> ผู้ใช้เดินผ่านขั้นตอนไหนบ้าง
|
|
30
|
+
|
|
31
|
+
## 6. Persona
|
|
32
|
+
> task นี้ทำเพื่อใคร
|
|
33
|
+
|
|
34
|
+
## 7. Test-flow
|
|
35
|
+
> จะทดสอบ/ยืนยันความถูกต้องยังไง (เคสที่ต้องผ่าน, edge case)
|
|
36
|
+
- [ ]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Standard — <ชื่อ task>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
|
|
4
|
+
> pattern การเขียนโค้ด / shared component ที่ task นี้ต้องยึด
|
|
5
|
+
> **อิงจาก** `docs/techstack/<component>/standard.md` — เพิ่มเติมเฉพาะ task ได้
|
|
6
|
+
|
|
7
|
+
## 1. Standard กลางที่ยึด (จาก techstack)
|
|
8
|
+
> อ้างอิง `docs/techstack/<component>/standard.md` — ข้อไหนเกี่ยวกับ task นี้
|
|
9
|
+
-
|
|
10
|
+
|
|
11
|
+
## 2. Pattern การเขียนโค้ดของ task นี้
|
|
12
|
+
- โครงสร้าง/naming:
|
|
13
|
+
- error handling:
|
|
14
|
+
- การจัดการ state/data:
|
|
15
|
+
|
|
16
|
+
## 3. Shared component / utility ที่ต้องใช้ (อย่าเขียนซ้ำ)
|
|
17
|
+
- component/hook/helper ที่มีอยู่แล้ว:
|
|
18
|
+
|
|
19
|
+
## 4. เพิ่มเติมเฉพาะ task (ถ้ามี)
|
|
20
|
+
> pattern ใหม่ที่ task นี้แนะนำ — ถ้าควรเป็นมาตรฐานกลาง ให้ note ใน `rule.md` (รอ SHIP อัปเดต standard กลาง)
|
|
21
|
+
-
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Task — <ชื่อ task>
|
|
2
|
+
|
|
3
|
+
> Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
|
|
4
|
+
> หน่วยที่ **โยนให้ sub-agent ทำใน BUILD ได้** — self-contained แต่เชื่อมกับ task อื่นผ่าน dependency
|
|
5
|
+
|
|
6
|
+
| | |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Task** | `<kebab-case>` |
|
|
9
|
+
| **Slice อ้างอิง** | `design.md` slice #__ |
|
|
10
|
+
| **Component** | `admin-console` / `api-service` / ... |
|
|
11
|
+
| **สถานะ** | `รอ build` / `กำลังทำ` / `เสร็จ` |
|
|
12
|
+
|
|
13
|
+
## 1. เป้าหมายของ task (vertical slice)
|
|
14
|
+
> task นี้ส่งมอบคุณค่า end-to-end อะไร
|
|
15
|
+
|
|
16
|
+
## 2. Dependency (เชื่อมต่อกับ task อื่น)
|
|
17
|
+
- ต้องทำหลัง: `tasks/<...>` (เพราะ ...)
|
|
18
|
+
- ปลดล็อกให้: `tasks/<...>`
|
|
19
|
+
- ส่ง output อะไรต่อให้ task ถัดไป:
|
|
20
|
+
|
|
21
|
+
## 3. Sub-tasks (แตกย่อยถ้าซับซ้อน)
|
|
22
|
+
> sub-task ต้องเชื่อมต่อกัน — ระบุลำดับ/สิ่งที่ส่งต่อกัน
|
|
23
|
+
|
|
24
|
+
- [ ] 1. <sub-task> — _ผลลัพธ์:_
|
|
25
|
+
- [ ] 2. <sub-task> — _ขึ้นกับ 1:_
|
|
26
|
+
- [ ] 3. <sub-task>
|
|
27
|
+
|
|
28
|
+
## 4. ขอบเขตไฟล์/โค้ดที่จะแตะ
|
|
29
|
+
- ไฟล์/โมดูล:
|
|
30
|
+
|
|
31
|
+
## 5. Acceptance criteria (เกณฑ์ว่า task เสร็จ)
|
|
32
|
+
- [ ]
|
|
33
|
+
- [ ] ผ่าน test ตาม `spec.md` (test-flow)
|
|
34
|
+
- [ ] ทำตาม `rule.md` และ `standard.md`
|
|
35
|
+
|
|
36
|
+
## 6. อ้างอิงในโฟลเดอร์ task นี้
|
|
37
|
+
- Spec: `./spec.md`
|
|
38
|
+
- Standard (pattern โค้ด): `./standard.md`
|
|
39
|
+
- Rule ที่ต้อง follow: `./rule.md`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Test Plan — <ชื่อ change>
|
|
2
|
+
|
|
3
|
+
> Output ของ VERIFY stage · playbook: `workflow/stages/verify.md`
|
|
4
|
+
> แผน/วิธีเทสของ topic นี้ — ตอน **SHIP** จะ merge เข้า `docs/techstack/<component>/test.md`
|
|
5
|
+
> อิง guideline จาก `docs/techstack/<component>/test.md` (ถ้าไม่มี = เสนอวิธีใหม่ที่นี่)
|
|
6
|
+
|
|
7
|
+
| | |
|
|
8
|
+
|---|---|
|
|
9
|
+
| **Slug** | `<kebab-case>` |
|
|
10
|
+
| **Component** | `api-service` / `admin-console` |
|
|
11
|
+
| **จุดประสงค์ที่ต้อง verify** | (สรุปจาก spec/tasks) |
|
|
12
|
+
|
|
13
|
+
## 1. ขอบเขตการเทส (ตามจุดประสงค์ topic)
|
|
14
|
+
- สิ่งที่ต้องยืนยันว่าทำงานถูก:
|
|
15
|
+
|
|
16
|
+
## 2. ชนิดการเทส
|
|
17
|
+
- [ ] Functional (ตาม test-flow ใน `tasks/*/spec.md`)
|
|
18
|
+
- [ ] E2E smoke — เครื่องมือ: `playwright-cli` (ถ้าเป็น FE)
|
|
19
|
+
- [ ] Integration / API
|
|
20
|
+
- [ ] UX/UI verify (ถ้าเป็น FE)
|
|
21
|
+
- [ ] อื่นๆ:
|
|
22
|
+
|
|
23
|
+
## 3. Local env ที่ต้องรัน (จาก `docs/infra.md`)
|
|
24
|
+
| Service | คำสั่งรัน | port / หมายเหตุ |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| | | |
|
|
27
|
+
|
|
28
|
+
## 4. Test cases
|
|
29
|
+
| # | สถานการณ์ (อิงจุดประสงค์) | ขั้นตอน | ผลที่คาดหวัง |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| 1 | | | |
|
|
32
|
+
|
|
33
|
+
## 5. E2E smoke (FE)
|
|
34
|
+
- flow ที่ smoke:
|
|
35
|
+
- คำสั่ง playwright-cli:
|
|
36
|
+
|
|
37
|
+
## 6. UX/UI checklist (FE)
|
|
38
|
+
- [ ] layout ตรงตาม spec/wireframe
|
|
39
|
+
- [ ] states: loading / empty / error / success
|
|
40
|
+
- [ ] responsive
|
|
41
|
+
- [ ] interaction / user-flow ลื่นไหล
|
|
42
|
+
|
|
43
|
+
## 7. วิธีรันเทส (reproducible)
|
|
44
|
+
```
|
|
45
|
+
<คำสั่ง / ขั้นตอน>
|
|
46
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Troubleshooting — <ชื่อ change>
|
|
2
|
+
|
|
3
|
+
> Log ปัญหา **ยาก/ซ้ำ** ที่เจอระหว่างทำงาน topic นี้ (ส่วนใหญ่ตอน BUILD) แล้วแก้สำเร็จ
|
|
4
|
+
> ตอน **SHIP** จะยกรายการที่มีค่าขึ้นไปรวมที่ KB กลาง `docs/troubleshooting.md`
|
|
5
|
+
> เจอปัญหาใหม่ → อ่าน `docs/troubleshooting.md` ก่อนเสมอ เผื่อเคยแก้แล้ว
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## วิธีบันทึก
|
|
10
|
+
บันทึกเฉพาะปัญหาที่ **ยากจะแก้** หรือ **เจอซ้ำ** (ไม่ใช่ทุก error เล็กน้อย) — หนึ่งปัญหา = หนึ่ง entry
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
### TS-1: <ชื่อปัญหาสั้นๆ>
|
|
15
|
+
| | |
|
|
16
|
+
|---|---|
|
|
17
|
+
| **วันที่** | `YYYY-MM-DD` |
|
|
18
|
+
| **Component / Task** | `api-service` / `tasks/<task>` |
|
|
19
|
+
| **ความถี่** | เจอครั้งเดียว (ยากมาก) / เจอซ้ำ __ ครั้ง |
|
|
20
|
+
| **ยกขึ้น KB กลางตอน SHIP?** | ✅ / ❌ |
|
|
21
|
+
|
|
22
|
+
- **อาการ / error message:**
|
|
23
|
+
```
|
|
24
|
+
<paste error>
|
|
25
|
+
```
|
|
26
|
+
- **บริบทที่ทำให้เกิด (trigger):**
|
|
27
|
+
- **สาเหตุที่แท้จริง (root cause):**
|
|
28
|
+
- **วิธีแก้ที่ได้ผล (solution):**
|
|
29
|
+
- **วิธีสังเกต/ป้องกันไม่ให้เกิดซ้ำ:**
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
### TS-2: <...>
|
|
34
|
+
> (คัดลอกบล็อกด้านบน)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Verify Report — <ชื่อ change>
|
|
2
|
+
|
|
3
|
+
> Output ของ VERIFY stage · playbook: `workflow/stages/verify.md`
|
|
4
|
+
> สรุปผลการ verify ตามจุดประสงค์ของ topic + การแก้ไขที่เกิดขึ้น
|
|
5
|
+
|
|
6
|
+
| | |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Slug** | `<kebab-case>` |
|
|
9
|
+
| **วันที่** | `YYYY-MM-DD` |
|
|
10
|
+
| **ผลรวม** | ผ่าน / ไม่ผ่าน |
|
|
11
|
+
| **จำนวนรอบการแก้ไข (fix iterations)** | __ รอบ |
|
|
12
|
+
| **จำนวนจุดที่แก้** | __ จุด |
|
|
13
|
+
|
|
14
|
+
## 1. จุดประสงค์ที่ verify (จาก spec/tasks)
|
|
15
|
+
-
|
|
16
|
+
|
|
17
|
+
## 2. ผลการเทส
|
|
18
|
+
| # | Test case / flow | ชนิด | ผล | หมายเหตุ |
|
|
19
|
+
|---|---|---|---|---|
|
|
20
|
+
| 1 | | functional / e2e / uxui | ✅ / ❌→✅ (แก้แล้ว) | |
|
|
21
|
+
|
|
22
|
+
## 3. UX/UI verify (ถ้าเป็น FE)
|
|
23
|
+
- [ ] layout / states / responsive / user-flow — ผล:
|
|
24
|
+
|
|
25
|
+
## 4. รายการแก้ไข (สรุปการแก้ระหว่าง verify)
|
|
26
|
+
> นับรวมเป็น "จำนวนการแก้ไข" ด้านบน
|
|
27
|
+
|
|
28
|
+
| รอบ | ปัญหาที่เจอ | วิธีแก้ | ไฟล์ที่แก้ |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| 1 | | | |
|
|
31
|
+
|
|
32
|
+
## 5. ปัญหายาก/ซ้ำ → troubleshooting
|
|
33
|
+
- บันทึกไว้ที่ `./troubleshooting.md` (SHIP ยกขึ้น `docs/troubleshooting.md`): มี/ไม่มี
|
|
34
|
+
|
|
35
|
+
## 6. หมายเหตุถึง user (ถ้าถามระหว่างทาง)
|
|
36
|
+
> กรณีวนแก้นาน/หลายรอบ แล้วถาม user — สรุปคำถาม/คำตอบ/การตัดสินใจ
|
|
37
|
+
-
|
|
38
|
+
|
|
39
|
+
## ✅ Gate → SHIP (ดู `workflow/stages/verify.md` ข้อ 6)
|
|
40
|
+
- [ ] เทสตามจุดประสงค์ครบ (functional)
|
|
41
|
+
- [ ] FE: UX/UI verify ผ่าน
|
|
42
|
+
- [ ] ทุกข้อที่ไม่ผ่านถูกแก้จนผ่าน
|
|
43
|
+
- [ ] test.md + verify.md เขียนครบ
|
|
44
|
+
- [ ] ปัญหายากบันทึก troubleshooting.md แล้ว
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Warnyin Standard Workflow
|
|
2
|
+
|
|
3
|
+
มาตรฐานกลางของ "วิธีทำงาน" (ways of work) สำหรับทุกโปรเจกต์ — สร้างทีม ผลิตผลงานคุณภาพ และเร็ว
|
|
4
|
+
โดยเดินผ่าน 5 stage:
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
Discovery (optional) ──▶ DESIGN ──▶ BUILD ──▶ VERIFY ──▶ SHIP
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
แต่ละ stage มี **playbook กลางหนึ่งชุด** เป็น single source of truth ที่ AI ทุกเจ้าอ่านเหมือนกัน
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## หลักการออกแบบ: Tool-agnostic, single source of truth
|
|
15
|
+
|
|
16
|
+
แก่นของ workflow (กฎ / ขั้นตอน / เกณฑ์ผ่าน) เขียน **ครั้งเดียว** เป็น markdown ใน `workflow/stages/`
|
|
17
|
+
ส่วน AI แต่ละเครื่องมีแค่ **adapter บางๆ** ที่ "ชี้กลับ" มาที่ playbook กลางชุดเดียวกัน
|
|
18
|
+
|
|
19
|
+
| AI tool | Adapter (จุดเชื่อม) | อ่าน playbook จาก |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **Claude Code** | `.claude/commands/*.md` + `CLAUDE.md` | `workflow/stages/*.md` |
|
|
22
|
+
| **Codex** | `AGENTS.md` | `workflow/stages/*.md` |
|
|
23
|
+
| **Antigravity** | `AGENTS.md` | `workflow/stages/*.md` |
|
|
24
|
+
| เครื่องอื่นๆ | ชี้มาที่ `workflow/stages/` ได้ทันที | `workflow/stages/*.md` |
|
|
25
|
+
|
|
26
|
+
> แก้กฎที่ `workflow/stages/` ที่เดียว → ทุกเครื่องได้เหมือนกันทันที
|
|
27
|
+
> เพิ่ม AI เจ้าใหม่ = เพิ่ม adapter บางๆ อีกหนึ่งไฟล์ ไม่ต้องแตะ logic
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## โครงสร้าง repo
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
bin/cli.mjs # npx installer — ติดตั้ง workflow ลงโปรเจกต์อื่น
|
|
35
|
+
installer/templates/ # template CLAUDE.md สำหรับโปรเจกต์ปลายทาง
|
|
36
|
+
|
|
37
|
+
workflow/
|
|
38
|
+
README.md # ไฟล์นี้ — ภาพรวม + วิธีรองรับหลาย AI
|
|
39
|
+
init.md # playbook: INIT — วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
|
|
40
|
+
stages/
|
|
41
|
+
discovery.md # playbook: Discovery (optional) ✅
|
|
42
|
+
design.md # playbook: DESIGN ✅
|
|
43
|
+
build.md # playbook: BUILD ✅
|
|
44
|
+
verify.md # playbook: VERIFY ✅
|
|
45
|
+
ship.md # playbook: SHIP ✅
|
|
46
|
+
scripts/
|
|
47
|
+
build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
|
|
48
|
+
|
|
49
|
+
docs/ # ความรู้ถาวรระดับโปรเจกต์ (อ้างอิงข้ามงาน)
|
|
50
|
+
project.md # ★ จุดเริ่มของ Discovery — อ่านก่อนเสมอ
|
|
51
|
+
rule.md infra.md
|
|
52
|
+
troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
|
|
53
|
+
codemap/ features/ techstack/
|
|
54
|
+
|
|
55
|
+
warnyin-stages/ # พื้นที่ทำงานจริง ตาม topic
|
|
56
|
+
context.md
|
|
57
|
+
[topic]/ # ★ template ของหนึ่งหน่วยงาน — copy ไปตั้งชื่อจริง
|
|
58
|
+
discovery.md research.md # output ของ Discovery
|
|
59
|
+
business.md proposal.md design.md # output ของ DESIGN
|
|
60
|
+
tasks/[task-name]/... build.md # output ของ DESIGN (tasks) + BUILD (build.md)
|
|
61
|
+
test.md verify.md # output ของ VERIFY
|
|
62
|
+
troubleshooting.md ship.md # KB ระหว่างงาน + สรุปส่งมอบของ SHIP
|
|
63
|
+
achieved/[YYYY-MM-DD-topic]/ # archive หลัง SHIP
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## การติดตั้งไปโปรเจกต์อื่น
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
cd my-project
|
|
72
|
+
npx @warnyin/agents # ติดตั้ง (ข้ามไฟล์ที่มีอยู่ ไม่เขียนทับ)
|
|
73
|
+
npx @warnyin/agents --update # อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
|
|
74
|
+
npx @warnyin/agents --dry-run # ดูก่อนว่าจะสร้าง/อัปเดตอะไร
|
|
75
|
+
# ทางสำรอง (ไม่ผ่าน npm): npx github:warnyin/warnyin-agents
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- โปรเจกต์ที่มี `CLAUDE.md`/`AGENTS.md` อยู่แล้ว → installer ต่อท้ายเป็น section ไม่เขียนทับ
|
|
79
|
+
- `--update` เขียนทับเฉพาะ core (`workflow/`, `.claude/commands/warnyin/`, template `[topic]`) — ไม่แตะ `docs/` และงานจริง
|
|
80
|
+
- หลังติดตั้ง → เปิด Claude Code แล้วรัน `/warnyin:init` ให้ agent วิเคราะห์โปรเจกต์ + เติม `docs/` (playbook: `workflow/init.md`)
|
|
81
|
+
|
|
82
|
+
## วิธีใช้
|
|
83
|
+
|
|
84
|
+
1. เริ่มงานใหม่ → copy `warnyin-stages/[topic]/` เป็น `warnyin-stages/<ชื่อ-งาน-kebab-case>/`
|
|
85
|
+
2. รัน stage ตามลำดับ (Discovery ข้ามได้ถ้าเข้าใจ scope ชัดแล้ว)
|
|
86
|
+
- Claude Code: `/warnyin:discovery <topic>`, `/warnyin:design <slug> <change>`
|
|
87
|
+
- Codex / Antigravity: บอกให้ทำตาม `workflow/stages/<stage>.md`
|
|
88
|
+
3. ผ่าน "gate" ของแต่ละ stage แล้วจึงไป stage ถัดไป
|
|
89
|
+
4. เมื่อ SHIP (`/warnyin:ship <slug>`) → promote ความรู้ของ topic ขึ้นเอกสารกลางใน `docs/`
|
|
90
|
+
แล้วย้าย topic ไป `warnyin-stages/achieved/<YYYY-MM-DD>-<topic>/`
|
package/workflow/init.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# INIT — วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
|
|
2
|
+
|
|
3
|
+
> **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
|
|
4
|
+
> เป้าหมาย: ทำให้ `docs/` สะท้อนโปรเจกต์จริง — เพื่อให้ทุก stage (Discovery→SHIP) เริ่มจากความรู้ที่ถูกต้อง ไม่ใช่โครงว่างเปล่า
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. INIT คืออะไร / ใช้เมื่อไหร่
|
|
9
|
+
|
|
10
|
+
ใช้ **ครั้งแรกหลังติดตั้ง workflow** ลงโปรเจกต์ (`npx github:warnyin/warnyin-agents`)
|
|
11
|
+
หรือเมื่อ `docs/` ยังว่าง/ล้าสมัยจนใช้อ้างอิงไม่ได้ — INIT ไม่ใช่ stage ของงาน แต่เป็นการ **ปูพื้นความรู้** ให้ workflow ทำงานได้เต็มประสิทธิภาพ
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. หลักการทำงาน (operating principles)
|
|
16
|
+
|
|
17
|
+
1. **โค้ดตอบได้ → อ่านโค้ดเอง ห้ามเดา** — structure, techstack, convention, วิธี build/test, infra วิเคราะห์จาก **โค้ดจริง + config จริง** เท่านั้น
|
|
18
|
+
2. **ข้อมูลธุรกิจโค้ดตอบไม่ได้ → สัมภาษณ์ user** — เป้าหมายโปรเจกต์ ลูกค้า ขอบเขต ความสำคัญ: **ถามทีละข้อ + เสนอคำตอบแนะนำทุกครั้ง** (เดาจาก README/โค้ดเป็น recommended answer ให้ user แค่ยืนยัน/แก้)
|
|
19
|
+
3. **เสนอ summary ก่อนเขียน** — สรุปสิ่งที่วิเคราะห์ได้ + รายการไฟล์ docs/ ที่จะเขียน ให้ user ยืนยัน **ครั้งเดียว** แล้วจึงเขียนจริง
|
|
20
|
+
4. **ไฟล์ docs/ ที่มีเนื้อหาอยู่แล้ว → เติม/อัปเดต ไม่เขียนทับทิ้ง** — ของเดิมของ user มีค่าเสมอ
|
|
21
|
+
5. **วิเคราะห์หลาย component ขนานได้** — fan-out sub-agent (read-only) หนึ่งตัวต่อหนึ่ง component; เครื่องที่ไม่มี sub-agent → วิเคราะห์ทีละ component ด้วยหลักการเดียวกัน
|
|
22
|
+
6. **ไม่แน่ใจ → ระบุว่า "ยังว่าง รอเติม" ชัดเจน** — ห้ามแต่งเนื้อหาขึ้นเองเพื่อให้ไฟล์ดูเต็ม
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 3. ลำดับขั้นการทำงาน (process)
|
|
27
|
+
|
|
28
|
+
1. **สแกนภาพรวม:** โครงสร้าง repo, package manifest, ภาษา/framework, แบ่งเป็น **component** อะไรบ้าง (เช่น api-service, admin-console)
|
|
29
|
+
2. **วิเคราะห์ลึกต่อ component (ขนานได้, read-only):** โครงสร้างโฟลเดอร์/โมดูล, pattern/convention ที่ใช้จริงในโค้ด, วิธี build/test ที่มีอยู่
|
|
30
|
+
3. **วิเคราะห์ infra:** docker/compose, env, service ที่ต้องรันสำหรับ local dev
|
|
31
|
+
4. **สัมภาษณ์ user เติมส่วนธุรกิจ:** เป้าหมายโปรเจกต์ ลูกค้า ขอบเขต — ทีละข้อ + recommended answer
|
|
32
|
+
5. **เสนอ summary → user ยืนยันครั้งเดียว → เขียน docs/** (ตามตาราง Output ข้อ 4)
|
|
33
|
+
6. **รายงานปิดท้าย:** ส่วนไหนยังว่าง/ไม่แน่ใจ ให้ user เติมภายหลัง → พร้อมเริ่มงานแรกด้วย `/warnyin:discovery` หรือ `/warnyin:design`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 4. Output (เขียน/เติมที่ `docs/`)
|
|
38
|
+
|
|
39
|
+
| ไฟล์ | เนื้อหา | แหล่งข้อมูล |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `docs/project.md` | โปรเจกต์คืออะไร เป้าหมาย ลูกค้า ขอบเขต | สัมภาษณ์ user (+ README เดิมเป็น recommended) |
|
|
42
|
+
| `docs/techstack/<component>/about.md` | component นี้คืออะไร ทำหน้าที่อะไร | โค้ดจริง |
|
|
43
|
+
| `docs/techstack/<component>/structure.md` | โครงสร้างโฟลเดอร์/โมดูล | โค้ดจริง |
|
|
44
|
+
| `docs/techstack/<component>/standard.md` | pattern/convention ที่พบจริงในโค้ด (ยืนยันกับ user) | โค้ดจริง + user |
|
|
45
|
+
| `docs/techstack/<component>/rule.md` | กฎที่ user ต้องการบังคับ (ถามก่อน ห้ามเดา) | user |
|
|
46
|
+
| `docs/techstack/<component>/test.md` | วิธีเทสที่ใช้อยู่ (framework, คำสั่ง, e2e) | โค้ด/config จริง |
|
|
47
|
+
| `docs/codemap/index.md` | แผนที่โค้ดภาพรวม: component, จุดเข้า, โฟลเดอร์สำคัญ | โค้ดจริง |
|
|
48
|
+
| `docs/infra.md` | local env: service ที่ต้องรัน, วิธีรัน, env vars | config จริง |
|
|
49
|
+
| `docs/rule.md`, `docs/troubleshooting.md` | วางโครงหัวข้อ รอเติมระหว่างใช้งานจริง | — |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 5. Gate → จบ INIT เมื่อ
|
|
54
|
+
|
|
55
|
+
- [ ] `docs/project.md` มีเป้าหมาย/ลูกค้า/ขอบเขต ที่ user ยืนยันแล้ว
|
|
56
|
+
- [ ] `docs/techstack/` ครบทุก component ที่พบ (about + structure + standard + test)
|
|
57
|
+
- [ ] `docs/codemap/index.md` + `docs/infra.md` ตรงกับโค้ด/config จริง
|
|
58
|
+
- [ ] ทุกเนื้อหามาจากโค้ดจริงหรือคำยืนยันของ user — **ไม่มีการเดา**; ส่วนที่ไม่แน่ใจระบุ "ยังว่าง รอเติม" ชัดเจน
|
|
59
|
+
- [ ] user รับทราบรายการที่ยังว่าง
|