@warnyin/agents 0.2.0 → 0.4.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/agents/warnyin-infra.md +1 -1
- package/.claude/agents/warnyin-qa.md +1 -1
- package/.claude/agents/warnyin-sa.md +1 -1
- package/.claude/agents/warnyin-security.md +1 -1
- package/.claude/agents/warnyin-tech-lead.md +1 -1
- package/.claude/commands/warnyin/build.md +9 -9
- package/.claude/commands/warnyin/design.md +4 -4
- package/.claude/commands/warnyin/discovery.md +3 -3
- package/.claude/commands/warnyin/init.md +1 -1
- package/.claude/commands/warnyin/install-skill.md +2 -2
- package/.claude/commands/warnyin/ship.md +5 -5
- package/.claude/commands/warnyin/update-codemaps.md +12 -0
- package/.claude/commands/warnyin/verify.md +5 -5
- package/AGENTS.md +12 -12
- package/CLAUDE.md +16 -15
- package/README.md +25 -23
- package/bin/cli.mjs +50 -9
- package/package.json +2 -5
- package/{installer → warnyin/installer}/templates/CLAUDE.md +13 -12
- package/warnyin/template/docs/codemap/index.md +18 -0
- package/warnyin/template/docs/features/[feature-name]/business.md +5 -0
- package/warnyin/template/docs/features/[feature-name]/feature.md +5 -0
- package/warnyin/template/docs/infra.md +16 -0
- package/warnyin/template/docs/project.md +18 -0
- package/warnyin/template/docs/rule.md +7 -0
- package/warnyin/template/docs/techstack/[component]/about.md +6 -0
- package/warnyin/template/docs/techstack/[component]/rule.md +6 -0
- package/warnyin/template/docs/techstack/[component]/standard.md +6 -0
- package/warnyin/template/docs/techstack/[component]/structure.md +7 -0
- package/warnyin/template/docs/techstack/[component]/test.md +7 -0
- package/{docs → warnyin/template/docs}/troubleshooting.md +32 -39
- package/{warnyin-stages → warnyin/template/stages}/[topic]/build.md +2 -2
- package/{warnyin-stages → warnyin/template/stages}/[topic]/business.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/design.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/discovery.md +2 -2
- package/{warnyin-stages → warnyin/template/stages}/[topic]/proposal.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/research.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/ship.md +3 -3
- package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/issue.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/rule.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/spec.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/standard.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/task.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/test.md +1 -1
- package/{warnyin-stages → warnyin/template/stages}/[topic]/verify.md +2 -2
- package/warnyin/workflow/README.md +92 -0
- package/warnyin/workflow/codemap.md +91 -0
- package/{workflow → warnyin/workflow}/init.md +3 -1
- package/{workflow → warnyin/workflow}/roles/developer.md +1 -1
- package/{workflow → warnyin/workflow}/scripts/build-wave.mjs +5 -5
- package/{workflow → warnyin/workflow}/stages/build.md +10 -10
- package/{workflow → warnyin/workflow}/stages/design.md +17 -17
- package/{workflow → warnyin/workflow}/stages/discovery.md +7 -7
- package/{workflow → warnyin/workflow}/stages/ship.md +8 -8
- package/{workflow → warnyin/workflow}/stages/verify.md +5 -5
- 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/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/workflow/README.md +0 -91
- /package/{docs/codemap/index.md → warnyin/stages/achieved/.gitkeep} +0 -0
- /package/{warnyin-stages → warnyin/stages}/context.md +0 -0
- /package/{warnyin-stages → warnyin/template/stages}/[topic]/troubleshooting.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/README.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/ba.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/infra.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/po.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/qa.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/sa.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/security.md +0 -0
- /package/{workflow → warnyin/workflow}/roles/tech-lead.md +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// args = {
|
|
5
5
|
// slug: string, // ชื่อ topic เช่น "billing-redesign"
|
|
6
|
-
// tasks: string[], // ชื่อ task ใน wave นี้ (โฟลเดอร์ warnyin
|
|
6
|
+
// tasks: string[], // ชื่อ task ใน wave นี้ (โฟลเดอร์ warnyin/stages/<slug>/tasks/<task>)
|
|
7
7
|
// isolate?: boolean, // true = worktree ต่อ task (ดีฟอลต์), false = shared tree (sequential)
|
|
8
8
|
// }
|
|
9
9
|
|
|
@@ -57,17 +57,17 @@ const RESULT_SCHEMA = {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
function prompt(task) {
|
|
60
|
-
const dir = `warnyin
|
|
60
|
+
const dir = `warnyin/stages/${slug}/tasks/${task}`
|
|
61
61
|
const lines = [
|
|
62
|
-
`คุณคือ build sub-agent ของ task "${task}" (vertical slice) ทำตาม playbook workflow/stages/build.md`,
|
|
62
|
+
`คุณคือ build sub-agent ของ task "${task}" (vertical slice) ทำตาม playbook warnyin/workflow/stages/build.md`,
|
|
63
63
|
``,
|
|
64
64
|
`1. อ่านให้ครบก่อนเขียนโค้ด:`,
|
|
65
|
-
` - workflow/roles/developer.md (role card: lens + checklist ก่อนส่งงาน — ทำตามทุกข้อ)`,
|
|
65
|
+
` - warnyin/workflow/roles/developer.md (role card: lens + checklist ก่อนส่งงาน — ทำตามทุกข้อ)`,
|
|
66
66
|
` - ${dir}/task.md (เป้าหมาย + sub-tasks + dependency + acceptance)`,
|
|
67
67
|
` - ${dir}/spec.md (API/UXUI/data-flow/user-flow/persona/test-flow)`,
|
|
68
68
|
` - ${dir}/standard.md (pattern โค้ด, shared component — reuse ห้ามเขียนซ้ำ)`,
|
|
69
69
|
` - ${dir}/rule.md (กฎที่ต้อง follow)`,
|
|
70
|
-
` - ภาพรวม: warnyin
|
|
70
|
+
` - ภาพรวม: warnyin/stages/${slug}/design.md, proposal.md`,
|
|
71
71
|
` - rule/standard กลางที่อ้างถึงใน docs/techstack/<component>/`,
|
|
72
72
|
`2. Implement ให้ครบทุก sub-task แบบ vertical slice (end-to-end) ทำตาม standard.md + rule.md เคร่งครัด`,
|
|
73
73
|
`3. รัน test-flow ใน spec.md + build/lint ของ component นั้น`,
|
|
@@ -14,9 +14,9 @@ BUILD จะ **orchestrate การ implement** โดยกระจายง
|
|
|
14
14
|
|
|
15
15
|
## 2. Input ที่ต้องอ่านก่อนเริ่ม
|
|
16
16
|
|
|
17
|
-
1. `warnyin
|
|
18
|
-
2. `warnyin
|
|
19
|
-
3. `warnyin
|
|
17
|
+
1. `warnyin/stages/<slug>/design.md` — dependency graph ระหว่าง task/slice (section 7)
|
|
18
|
+
2. `warnyin/stages/<slug>/proposal.md` — scope ของ change
|
|
19
|
+
3. `warnyin/stages/<slug>/tasks/<task>/task.md` ทุกใบ — dependency ของแต่ละ task + sub-tasks
|
|
20
20
|
4. `docs/techstack/<component>/rule.md` + `standard.md` — กฎ/มาตรฐานที่ต้อง follow
|
|
21
21
|
|
|
22
22
|
---
|
|
@@ -34,8 +34,8 @@ BUILD จะ **orchestrate การ implement** โดยกระจายง
|
|
|
34
34
|
6. **ห้ามแตะ rule/standard กลางใน `docs/`** — rule ใหม่ที่เสนอถูก note ไว้ใน `tasks/<task>/rule.md` แล้ว รอ SHIP ค่อยอัปเดตไฟล์กลาง
|
|
35
35
|
7. **fail = หยุดที่ wave นั้น** — ถ้า task ใน wave ล้ม ให้รายงาน user ก่อนไป wave ถัดไป (เพราะ wave ถัดไปอาจ depend อยู่)
|
|
36
36
|
8. **★ ปิดท้ายด้วย full build + full test เสมอ** — หลัง merge ทุก wave แล้ว ต้องรัน build ทั้งหมด + test suite ทั้งหมด (รวม unit test) บน build branch ที่ integrate; **แก้วนจนเขียวหมด** ก่อนปิด BUILD (กันกรณี task รายเดี่ยวเขียวแต่พอรวมกันแล้วพัง)
|
|
37
|
-
9. **ทุก build agent สวม role Developer** — ทำตาม role card `workflow/roles/developer.md` (lens + checklist ก่อนส่งงาน) — build-wave.mjs ใส่ให้ใน prompt แล้ว
|
|
38
|
-
10. **★ ใช้ Troubleshooting KB** — เจอปัญหา/error ระหว่าง build ให้ **อ่าน `docs/troubleshooting.md` ก่อนเสมอ** เผื่อเคยแก้แล้ว; เมื่อแก้ปัญหาที่ **ยาก/เจอซ้ำ** สำเร็จ ให้บันทึก entry ลง `warnyin
|
|
37
|
+
9. **ทุก build agent สวม role Developer** — ทำตาม role card `warnyin/workflow/roles/developer.md` (lens + checklist ก่อนส่งงาน) — build-wave.mjs ใส่ให้ใน prompt แล้ว
|
|
38
|
+
10. **★ ใช้ Troubleshooting KB** — เจอปัญหา/error ระหว่าง build ให้ **อ่าน `docs/troubleshooting.md` ก่อนเสมอ** เผื่อเคยแก้แล้ว; เมื่อแก้ปัญหาที่ **ยาก/เจอซ้ำ** สำเร็จ ให้บันทึก entry ลง `warnyin/stages/<slug>/troubleshooting.md` (ปัญหา/อาการ/root cause/วิธีแก้/ป้องกันซ้ำ) — ตอน SHIP จะยกขึ้น KB กลาง
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
@@ -43,13 +43,13 @@ BUILD จะ **orchestrate การ implement** โดยกระจายง
|
|
|
43
43
|
|
|
44
44
|
> ผู้ orchestrate คือ AI ตัวหลัก (main loop) — sub-agent คือคนลงมือ implement
|
|
45
45
|
|
|
46
|
-
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม BUILD ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin
|
|
46
|
+
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม BUILD ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin/stages/<slug>/` ครบ ไม่หายไปกับ context) — BUILD เป็นงานยาว ต้องมี context เหลือมากพอ; เครื่องอื่นที่ไม่มีคำสั่งนี้ → แนะนำเริ่ม session ใหม่
|
|
47
47
|
1. **อ่าน task ทั้งหมด** → ดึง dependency ของแต่ละ task จาก `task.md` (section 2) + `design.md` (section 7)
|
|
48
48
|
2. **สร้าง DAG + จัด wave** (topological sort): wave 1 = task ที่ไม่มี dependency, wave 2 = task ที่ depend เฉพาะ wave 1, ...
|
|
49
49
|
3. **Pre-check:** target เป็น git repo ไหม (สำหรับ worktree) — ถ้าไม่ใช่ → fallback sequential shared-tree และแจ้ง user
|
|
50
50
|
4. **เสนอ execution plan + ขออนุมัติ (ครั้งเดียว):** แสดง wave / task ในแต่ละ wave / อันไหน parallel / isolation mode → ถาม user go/no-go
|
|
51
51
|
5. **เดินทีละ wave:**
|
|
52
|
-
- fan-out sub-agent ของ task ใน wave นั้น (parallel, worktree isolation) ผ่าน **Workflow** (`workflow/scripts/build-wave.mjs`)
|
|
52
|
+
- fan-out sub-agent ของ task ใน wave นั้น (parallel, worktree isolation) ผ่าน **Workflow** (`warnyin/workflow/scripts/build-wave.mjs`)
|
|
53
53
|
- แต่ละ agent: implement → test/lint → commit (ถ้า worktree) → รายงานผลแบบ structured (status, files, branch, test result)
|
|
54
54
|
- **integrate:** main loop merge worktree branch ของ wave นั้นเข้า build branch (ทีละอันเพื่อเลี่ยง conflict); ถ้า conflict → แก้/รายงาน
|
|
55
55
|
- ถ้ามี task `failed` → หยุด รายงาน user
|
|
@@ -66,15 +66,15 @@ BUILD จะ **orchestrate การ implement** โดยกระจายง
|
|
|
66
66
|
| ไฟล์ | เนื้อหา |
|
|
67
67
|
|---|---|
|
|
68
68
|
| โค้ดจริงใน target repo | การ implement ของแต่ละ task (merge เข้า build branch) |
|
|
69
|
-
| `warnyin
|
|
70
|
-
| `warnyin
|
|
69
|
+
| `warnyin/stages/<slug>/build.md` | รายงานผล build: สถานะ/ผล test/ไฟล์ที่แก้ ต่อ task + integration notes |
|
|
70
|
+
| `warnyin/stages/<slug>/troubleshooting.md` | ปัญหายาก/ซ้ำที่แก้สำเร็จ (SHIP ยกขึ้น `docs/troubleshooting.md`) |
|
|
71
71
|
| `tasks/<task>/task.md` (อัปเดต) | สถานะ task → เสร็จ + acceptance ที่ผ่าน |
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
75
|
## 6. Workflow script (Claude Code)
|
|
76
76
|
|
|
77
|
-
ใช้ `workflow/scripts/build-wave.mjs` — fan-out หนึ่ง agent ต่อหนึ่ง task ใน **หนึ่ง wave** (parallel, worktree isolation), คืนผลแบบ structured
|
|
77
|
+
ใช้ `warnyin/workflow/scripts/build-wave.mjs` — fan-out หนึ่ง agent ต่อหนึ่ง task ใน **หนึ่ง wave** (parallel, worktree isolation), คืนผลแบบ structured
|
|
78
78
|
main loop เรียก script นี้ **ทีละ wave** แล้ว integrate ระหว่าง wave (ดูรายละเอียดใน `.claude/commands/warnyin/build.md`)
|
|
79
79
|
|
|
80
80
|
> เครื่องอื่น (Codex/Antigravity) ที่ไม่มี Workflow tool: ทำตามหลักการข้อ 3-4 โดย implement task ตามลำดับ wave เอง (parallel เท่าที่เครื่องรองรับ)
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
2. `docs/rule.md` + `docs/techstack/<component>/rule.md` — ★ กฎที่ต้อง follow
|
|
22
22
|
3. `docs/techstack/<component>/standard.md` — ★ pattern/มาตรฐานการเขียนโค้ด
|
|
23
23
|
4. `docs/techstack/<component>/{about,structure,test}.md`, `docs/codemap/index.md` — โครงสร้าง/วิธีเทสต์
|
|
24
|
-
5. ถ้ามี Discovery → `warnyin
|
|
24
|
+
5. ถ้ามี Discovery → `warnyin/stages/<slug>/discovery.md`, `research.md`
|
|
25
25
|
6. โค้ดจริงที่เกี่ยวข้อง (inspect เพื่อตอบคำถามแทนการเดา)
|
|
26
26
|
|
|
27
27
|
---
|
|
@@ -33,33 +33,33 @@
|
|
|
33
33
|
3. **task = หน่วยที่โยนให้ sub-agent ได้** — แต่ละ task self-contained (มี spec + standard + rule ของตัวเอง) แต่ **เชื่อมต่อกัน** ผ่าน dependency/ลำดับที่ระบุชัด
|
|
34
34
|
4. **สอดคล้องมาตรฐานเสมอ** — อิง rule + standard ของ techstack; ถ้าจะเพิ่ม rule/standard ใหม่ ให้ **note ไว้ก่อน** (ยังไม่แก้ไฟล์กลาง — รอ SHIP)
|
|
35
35
|
5. **Gate ก่อนเขียนไฟล์ task จริง** — ต้องผ่านเกณฑ์ข้อ 8 ก่อนจะ generate ไฟล์ task และก่อนโยนให้ sub-agent
|
|
36
|
-
6. **ใช้ role lens** — ออกแบบ (design.md) ด้วยมุม **SA** (`workflow/roles/sa.md`) และแตก/ตรวจ task ด้วยมุม **Tech Lead** (`workflow/roles/tech-lead.md`)
|
|
37
|
-
7. **Review panel ก่อนแตก task (optional — ถาม user ก่อนเสมอ)** — ให้หลาย role (SA / Tech Lead / QA / Security / Infra ตาม `workflow/roles/`) รีวิว design ขนานแบบอิสระ (read-only) แล้วแก้ blocker ให้ครบก่อนแตก task (ดูขั้นตอนข้อ 4.6)
|
|
36
|
+
6. **ใช้ role lens** — ออกแบบ (design.md) ด้วยมุม **SA** (`warnyin/workflow/roles/sa.md`) และแตก/ตรวจ task ด้วยมุม **Tech Lead** (`warnyin/workflow/roles/tech-lead.md`)
|
|
37
|
+
7. **Review panel ก่อนแตก task (optional — ถาม user ก่อนเสมอ)** — ให้หลาย role (SA / Tech Lead / QA / Security / Infra ตาม `warnyin/workflow/roles/`) รีวิว design ขนานแบบอิสระ (read-only) แล้วแก้ blocker ให้ครบก่อนแตก task (ดูขั้นตอนข้อ 4.6)
|
|
38
38
|
8. **Dry-run ก่อนเข้า BUILD (optional — ถาม user ก่อนเสมอ)** — หลังเขียนไฟล์ task ครบ เสนอ user ว่าจะ dry-run ทั้งหมดเพื่อหาจุดบกพร่องไหม ถ้า ok → สแกนทุก task แบบขนาน (read-only) หา **defer/blocker** แล้วแก้ DESIGN จนไม่มี blocker ค้าง (ดูขั้นตอนข้อ 4.10) — การแก้ **ห้ามเดา ห้ามคิดขึ้นเอง**
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
42
|
## 4. ลำดับขั้นการทำงาน (process)
|
|
43
43
|
|
|
44
|
-
1. **เตรียมพื้นที่:** ใช้/สร้างโฟลเดอร์ `warnyin
|
|
44
|
+
1. **เตรียมพื้นที่:** ใช้/สร้างโฟลเดอร์ `warnyin/stages/<slug>/` (ถ้ามาจาก Discovery ใช้อันเดิม)
|
|
45
45
|
2. **Ground + เคลียร์ความไม่ชัด:** อ่าน Input; ทุกจุดกำกวมเรื่อง design → ถามทีละข้อ + recommended answer จนชัด (ถ้าใหญ่/ไม่ชัดมาก → แนะนำ Discovery ก่อน)
|
|
46
46
|
3. **business.md** *(optional — ข้ามได้ถ้า change เล็ก เช่น fix bug นิดหน่อย)*: what & why เชิงธุรกิจ — goal, คุณค่า, persona, success metric
|
|
47
47
|
4. **proposal.md** (what & why): สรุป change ที่จะทำ, เหตุผล, ทางเลือกที่พิจารณา/ตัดทิ้ง, scope in/out
|
|
48
|
-
5. **design.md** (how): ออกแบบเชิงเทคนิคแบบ vertical slice — slice มีอะไรบ้าง, แต่ละ slice ตัดผ่าน layer ไหน, data model, interface/contract, flow, ผลกระทบต่อระบบเดิม (ใช้ lens `workflow/roles/sa.md`)
|
|
48
|
+
5. **design.md** (how): ออกแบบเชิงเทคนิคแบบ vertical slice — slice มีอะไรบ้าง, แต่ละ slice ตัดผ่าน layer ไหน, data model, interface/contract, flow, ผลกระทบต่อระบบเดิม (ใช้ lens `warnyin/workflow/roles/sa.md`)
|
|
49
49
|
6. **Review panel (optional — ถาม user ก่อน):** เสนอ user ว่าจะให้ panel หลาย role รีวิว design ก่อนแตก task ไหม — ถ้า ok:
|
|
50
|
-
1. fan-out sub-agent reviewer **ขนาน (read-only)** ตาม role card: **SA** (architecture/data model/contract), **Tech Lead** (feasibility/ขนาด task/dependency), **QA** (testability/acceptance), **Security** (ช่องโหว่/ข้อมูลอ่อนไหว), **Infra** (env/config/migration) — แต่ละตัวอ่าน `proposal.md` + `design.md` + โค้ดจริงที่เกี่ยว แล้วให้ความเห็นตาม checklist ใน `workflow/roles/<role>.md` แบ่งเป็น **blocker / suggestion**
|
|
50
|
+
1. fan-out sub-agent reviewer **ขนาน (read-only)** ตาม role card: **SA** (architecture/data model/contract), **Tech Lead** (feasibility/ขนาด task/dependency), **QA** (testability/acceptance), **Security** (ช่องโหว่/ข้อมูลอ่อนไหว), **Infra** (env/config/migration) — แต่ละตัวอ่าน `proposal.md` + `design.md` + โค้ดจริงที่เกี่ยว แล้วให้ความเห็นตาม checklist ใน `warnyin/workflow/roles/<role>.md` แบ่งเป็น **blocker / suggestion**
|
|
51
51
|
2. รวมความเห็นทุก role → สรุปให้ user เห็นภาพ
|
|
52
52
|
3. **blocker → แก้ design ให้ครบ** โดยห้ามเดา — ติดจริงถาม user ทีละข้อ + เสนอคำตอบแนะนำ; suggestion → พิจารณา/บันทึกเหตุผลถ้าไม่ทำ
|
|
53
53
|
4. บันทึกสรุปผล panel + สิ่งที่แก้ ลงท้าย `design.md` (section "Design review")
|
|
54
54
|
5. เครื่องที่ fan-out ไม่ได้ → รีวิวทีละ role ด้วย checklist เดียวกัน
|
|
55
55
|
7. **แตก tasks:** แปลง design เป็น task (= vertical slice / step ที่แก้); task ซับซ้อน → แตก **sub-task** ย่อย; เขียน **dependency graph / ลำดับ** ให้ sub-task เชื่อมกัน
|
|
56
56
|
8. **rule check ต่อ task:** เปิด `docs/techstack/<component>/rule.md` หา rule ที่ task นี้ต้องโฟกัส → ใส่ใน `tasks/<task>/rule.md`; rule ใหม่ที่อยากเพิ่ม → note ใน section "เสนอเพิ่ม (รอ SHIP)"
|
|
57
|
-
9. **เช็ค Gate (ข้อ 8)** → เมื่อผ่าน จึง **เขียนไฟล์ task ครบทุกใบ** (แตก task ด้วย lens `workflow/roles/tech-lead.md`)
|
|
57
|
+
9. **เช็ค Gate (ข้อ 8)** → เมื่อผ่าน จึง **เขียนไฟล์ task ครบทุกใบ** (แตก task ด้วย lens `warnyin/workflow/roles/tech-lead.md`)
|
|
58
58
|
10. **Dry-run (optional — ถาม user ก่อน):** ถาม user ว่าต้องการ dry-run ทั้งหมดเพื่อหาจุดบกพร่องก่อนเข้า BUILD ไหม — ถ้า ok:
|
|
59
59
|
1. **fan-out agent หนึ่งตัวต่อหนึ่ง task แบบขนาน (read-only — ห้ามแก้โค้ด/ไฟล์ design)** — แต่ละตัวอ่าน task ทั้ง 4 ไฟล์ + `design.md`/`proposal.md` + โค้ดจริงที่เกี่ยว แล้ว "เดิน implement ในหัว" เพื่อหา:
|
|
60
60
|
- **blocker** — สิ่งที่ทำให้ implement ตาม spec ไม่ได้ (ขัดแย้งกับโค้ดจริง/กับ task อื่น, ข้อมูล/spec ขาด, dependency ผิด) — BUILD จะล้มถ้าไม่แก้
|
|
61
61
|
- **defer** — จุดที่ตัดสินใจ/ทำทีหลังได้ ไม่ block การเริ่ม BUILD แต่ต้องบันทึกและ track
|
|
62
|
-
2. task ไหนพบ issue → เขียน `tasks/<task>/issue.md` (template `[topic]/tasks/[task-name]/issue.md`); ไม่พบ → ไม่ต้องสร้างไฟล์
|
|
62
|
+
2. task ไหนพบ issue → เขียน `tasks/<task>/issue.md` (template `warnyin/template/stages/[topic]/tasks/[task-name]/issue.md`); ไม่พบ → ไม่ต้องสร้างไฟล์
|
|
63
63
|
3. รันครบทุก task แล้ว → **สรุปผลรวม** (จำนวน blocker/defer ต่อ task) ให้ user เห็นภาพ
|
|
64
64
|
4. **หาวิธีแก้ DESIGN ตาม issue** (แก้ `design.md` / task ที่กระทบ) โดย **ห้ามเดา ห้ามคิดขึ้นเอง** — ติดจริงๆ ให้สัมภาษณ์ user **ถามทีละข้อ + เสนอคำตอบแนะนำทุกครั้ง**; คำถามที่โค้ดตอบได้ → ไปอ่านโค้ดเอง
|
|
65
65
|
5. แก้แล้ว rerun dry-run เฉพาะ task ที่กระทบ วนจน **ไม่มี blocker ค้าง** (อัปเดตสถานะใน `issue.md` — defer ที่เหลือให้ user รับทราบ)
|
|
@@ -70,18 +70,18 @@
|
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
73
|
-
## 5. Output (สร้างที่ `warnyin
|
|
73
|
+
## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
|
|
74
74
|
|
|
75
75
|
| ไฟล์ | เนื้อหา | optional? | template |
|
|
76
76
|
|---|---|---|---|
|
|
77
|
-
| `business.md` | what & why เชิงธุรกิจ (goal, persona, success metric) | ✅ ข้ามได้ถ้า change เล็ก | `[topic]/business.md` |
|
|
78
|
-
| `proposal.md` | what & why ของ change + ทางเลือก + scope | จำเป็น | `[topic]/proposal.md` |
|
|
79
|
-
| `design.md` | how — vertical slice, data model, contract, flow | จำเป็น | `[topic]/design.md` |
|
|
80
|
-
| `tasks/<task-name>/spec.md` | spec เฉพาะ task (ดูข้อ 6) | จำเป็นต่อ task | `[topic]/tasks/[task-name]/spec.md` |
|
|
81
|
-
| `tasks/<task-name>/standard.md` | pattern โค้ด/shared component อิง techstack standard | จำเป็นต่อ task | `[topic]/tasks/[task-name]/standard.md` |
|
|
82
|
-
| `tasks/<task-name>/rule.md` | rule ที่ต้อง follow + rule ที่เสนอเพิ่ม (รอ SHIP) | จำเป็นต่อ task | `[topic]/tasks/[task-name]/rule.md` |
|
|
83
|
-
| `tasks/<task-name>/task.md` | รายละเอียด task + sub-tasks + dependency + acceptance | จำเป็นต่อ task | `[topic]/tasks/[task-name]/task.md` |
|
|
84
|
-
| `tasks/<task-name>/issue.md` | ผล dry-run: defer/blocker ที่พบ + แนวทางแก้ + สถานะ | ✅ เฉพาะเมื่อ dry-run แล้วพบ issue | `[topic]/tasks/[task-name]/issue.md` |
|
|
77
|
+
| `business.md` | what & why เชิงธุรกิจ (goal, persona, success metric) | ✅ ข้ามได้ถ้า change เล็ก | `warnyin/template/stages/[topic]/business.md` |
|
|
78
|
+
| `proposal.md` | what & why ของ change + ทางเลือก + scope | จำเป็น | `warnyin/template/stages/[topic]/proposal.md` |
|
|
79
|
+
| `design.md` | how — vertical slice, data model, contract, flow | จำเป็น | `warnyin/template/stages/[topic]/design.md` |
|
|
80
|
+
| `tasks/<task-name>/spec.md` | spec เฉพาะ task (ดูข้อ 6) | จำเป็นต่อ task | `warnyin/template/stages/[topic]/tasks/[task-name]/spec.md` |
|
|
81
|
+
| `tasks/<task-name>/standard.md` | pattern โค้ด/shared component อิง techstack standard | จำเป็นต่อ task | `warnyin/template/stages/[topic]/tasks/[task-name]/standard.md` |
|
|
82
|
+
| `tasks/<task-name>/rule.md` | rule ที่ต้อง follow + rule ที่เสนอเพิ่ม (รอ SHIP) | จำเป็นต่อ task | `warnyin/template/stages/[topic]/tasks/[task-name]/rule.md` |
|
|
83
|
+
| `tasks/<task-name>/task.md` | รายละเอียด task + sub-tasks + dependency + acceptance | จำเป็นต่อ task | `warnyin/template/stages/[topic]/tasks/[task-name]/task.md` |
|
|
84
|
+
| `tasks/<task-name>/issue.md` | ผล dry-run: defer/blocker ที่พบ + แนวทางแก้ + สถานะ | ✅ เฉพาะเมื่อ dry-run แล้วพบ issue | `warnyin/template/stages/[topic]/tasks/[task-name]/issue.md` |
|
|
85
85
|
|
|
86
86
|
---
|
|
87
87
|
|
|
@@ -23,7 +23,7 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
|
|
|
23
23
|
2. `docs/rule.md`, `docs/infra.md` — กฎและโครงสร้างพื้นฐาน
|
|
24
24
|
3. `docs/codemap/index.md` — แผนที่โค้ด (ไปอ่านโค้ดจริงต่อได้)
|
|
25
25
|
4. `docs/features/*`, `docs/techstack/*` — ฟีเจอร์เดิม + tech stack ของแต่ละ component
|
|
26
|
-
5. `warnyin
|
|
26
|
+
5. `warnyin/stages/context.md` และ topic ที่ `achieved/` ที่ใกล้เคียง — เคยทำอะไรไปแล้ว
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -36,7 +36,7 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
|
|
|
36
36
|
5. **เดินทีละกิ่งของ decision tree:** ไล่ทุกแขนงของการตัดสินใจ แก้ความสัมพันธ์ระหว่างการตัดสินใจทีละจุด ไม่ข้าม
|
|
37
37
|
6. **บันทึกทันทีที่ตกลงได้:** พอได้ข้อสรุปที่ชัดเจนในประเด็นไหน ให้จดลง `discovery.md` (decision log) เลย ไม่รอจบ
|
|
38
38
|
7. **ทุกข้อสรุปต้องสอดคล้องกับโปรเจกต์:** อ้างอิงกลับไปที่ `docs/project.md` และข้อจำกัดจริงเสมอ
|
|
39
|
-
8. **ใช้ role lens ตอนตั้งคำถาม:** มอง scope ผ่าน checklist ของ **BA** (`workflow/roles/ba.md` — business process, ข้อยกเว้น, ข้อมูล, ข้อจำกัด) และ **PO** (`workflow/roles/po.md` — คุณค่า, priority, MVP, scope out, success metric) เพื่อให้คำถามครบมุมไม่หลุดประเด็น
|
|
39
|
+
8. **ใช้ role lens ตอนตั้งคำถาม:** มอง scope ผ่าน checklist ของ **BA** (`warnyin/workflow/roles/ba.md` — business process, ข้อยกเว้น, ข้อมูล, ข้อจำกัด) และ **PO** (`warnyin/workflow/roles/po.md` — คุณค่า, priority, MVP, scope out, success metric) เพื่อให้คำถามครบมุมไม่หลุดประเด็น
|
|
40
40
|
|
|
41
41
|
### โหมด "ซักถามฉันหน่อย" (grill mode)
|
|
42
42
|
เมื่อ user สั่ง grill → **ซักถามอย่างไม่หยุดหย่อนทุกแง่มุมของแผน** จนเข้าใจตรงกัน:
|
|
@@ -46,7 +46,7 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
|
|
|
46
46
|
|
|
47
47
|
## 4. ลำดับขั้นการทำงาน (process loop)
|
|
48
48
|
|
|
49
|
-
1. **เตรียมพื้นที่:** ถ้ายังไม่มีโฟลเดอร์ topic → copy `warnyin
|
|
49
|
+
1. **เตรียมพื้นที่:** ถ้ายังไม่มีโฟลเดอร์ topic → copy `warnyin/template/stages/[topic]/` เป็น `warnyin/stages/<slug>/` (slug = kebab-case ของหัวข้องาน)
|
|
50
50
|
2. **Ground:** อ่าน Input ในข้อ 2 ให้ครบ สรุปความเข้าใจเริ่มต้น 3-5 บรรทัด ให้ user ยืนยัน
|
|
51
51
|
3. **ตี scope กว้าง→แคบ ผ่านการสัมภาษณ์:** วนลูป — ถาม 1 ข้อ (พร้อม recommended answer) → user ตอบ → จดผลลง decision log → ถ้าตอบได้ด้วยโค้ดให้ไปอ่านเอง
|
|
52
52
|
4. **research คู่ขนาน:** สิ่งที่ต้องค้นจริง (prior art, ทางเลือก technical, ข้อจำกัด) → จดลง `research.md` พร้อม evidence/links
|
|
@@ -54,14 +54,14 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
|
|
|
54
54
|
|
|
55
55
|
---
|
|
56
56
|
|
|
57
|
-
## 5. Output (สร้างที่ `warnyin
|
|
57
|
+
## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
|
|
58
58
|
|
|
59
59
|
| ไฟล์ | เนื้อหา | template |
|
|
60
60
|
|---|---|---|
|
|
61
|
-
| `discovery.md` | decision log + shared understanding + scope + PRD ย่อ + feature ideas | `warnyin
|
|
62
|
-
| `research.md` | คำถามวิจัย + วิธี/แหล่ง + findings + code inspection + implication | `warnyin
|
|
61
|
+
| `discovery.md` | decision log + shared understanding + scope + PRD ย่อ + feature ideas | `warnyin/template/stages/[topic]/discovery.md` |
|
|
62
|
+
| `research.md` | คำถามวิจัย + วิธี/แหล่ง + findings + code inspection + implication | `warnyin/template/stages/[topic]/research.md` |
|
|
63
63
|
|
|
64
|
-
> เริ่มจาก template (ไฟล์ใน `[topic]/`) เป็นโครง แล้วเติมเนื้อหาจริง อัปเดตทุกครั้งที่ได้ข้อสรุปใหม่
|
|
64
|
+
> เริ่มจาก template (ไฟล์ใน `warnyin/template/stages/[topic]/`) เป็นโครง แล้วเติมเนื้อหาจริง อัปเดตทุกครั้งที่ได้ข้อสรุปใหม่
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Stage: SHIP
|
|
2
2
|
|
|
3
3
|
> **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
|
|
4
|
-
> เป้าหมาย: **ส่งมอบ** — promote ความรู้ระดับ topic ขึ้นเอกสารกลางใน `docs/` + archive topic เข้า `warnyin
|
|
4
|
+
> เป้าหมาย: **ส่งมอบ** — promote ความรู้ระดับ topic ขึ้นเอกสารกลางใน `docs/` + archive topic เข้า `warnyin/stages/achieved/`
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
## 2. Input ที่ต้องอ่านก่อนเริ่ม
|
|
19
19
|
|
|
20
|
-
1. `warnyin
|
|
20
|
+
1. `warnyin/stages/<slug>/` **ทุกไฟล์** — discovery, business, proposal, design, build, test, verify, troubleshooting, tasks/*
|
|
21
21
|
→ เข้าใจว่า topic นี้ **ทำอะไร ทำอย่างไร** และเกิดความรู้อะไรใหม่บ้าง
|
|
22
22
|
2. `tasks/<task>/rule.md` section "เสนอเพิ่ม rule ใหม่ (รอ SHIP)" + `standard.md` — rule/standard ใหม่ที่ note ค้างไว้
|
|
23
23
|
3. เอกสารกลางปลายทางที่จะอัปเดต — `docs/features/`, `docs/techstack/<component>/*`, `docs/rule.md`,
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
1. **เข้าใจก่อน promote** — อ่าน topic ทั้งหมดให้เข้าใจว่าทำอะไร/ทำอย่างไร แล้วค่อยตัดสินใจว่าความรู้ชิ้นไหนควรขึ้นไฟล์กลางไหน
|
|
32
32
|
2. **ขอ user ยืนยัน "ครั้งเดียวก่อนลงมือ"** — สรุป promotion plan (feature ใหม่หรือปรับปรุง, ไฟล์กลางที่จะอัปเดต + สาระที่จะใส่, ชื่อโฟลเดอร์ archive) ให้ user อนุมัติ แล้วจึง execute ไม่ถามซ้ำระหว่างทาง
|
|
33
|
-
3. **★ Archive ก่อนอัปเดตเอกสาร** — ย้ายทั้งโฟลเดอร์ `warnyin
|
|
33
|
+
3. **★ Archive ก่อนอัปเดตเอกสาร** — ย้ายทั้งโฟลเดอร์ `warnyin/stages/<slug>/` → `warnyin/stages/achieved/<YYYY-MM-DD>-<slug>/` (วันที่ของวันที่ SHIP) **ก่อน** เริ่มแก้ `docs/` แล้วอ่านเนื้อหาจาก path ใหม่ระหว่าง promote
|
|
34
34
|
4. **กลั่น ไม่ใช่ copy ดิบ** — merge สาระเข้าโครงสร้างของไฟล์กลางเดิม ระวัง duplicate/ขัดแย้งกับเนื้อหาที่มีอยู่; เขียนแบบ "ความรู้ถาวร" ไม่ใช่บันทึกรายงาน
|
|
35
35
|
5. **เอกสารต้องตรงโค้ดจริง** — structure/codemap อัปเดตจากการดูโค้ดจริง ไม่ใช่จากความจำหรือ design เดิม
|
|
36
36
|
6. **อย่าเดา** — เนื้อหาที่ไม่แน่ใจว่าควร promote หรือควรวางไว้ไฟล์ไหน → ถามทีละข้อ + เสนอคำตอบที่แนะนำ
|
|
@@ -40,17 +40,17 @@
|
|
|
40
40
|
|
|
41
41
|
## 4. ลำดับขั้นการทำงาน (process)
|
|
42
42
|
|
|
43
|
-
1. **อ่านทำความเข้าใจ topic:** อ่าน `warnyin
|
|
43
|
+
1. **อ่านทำความเข้าใจ topic:** อ่าน `warnyin/stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง (เช็คก่อนว่า VERIFY ผ่าน Gate แล้ว — มี `verify.md` สรุปผลผ่าน)
|
|
44
44
|
2. **จำแนก feature:** สิ่งที่ทำเป็น **feature ใหม่** หรือ **ปรับปรุง feature เดิม** (เทียบกับ `docs/features/` ที่มีอยู่)
|
|
45
45
|
3. **สรุป promotion plan + ขออนุมัติ (ครั้งเดียว):** feature ใหม่/ปรับปรุง, รายการไฟล์กลางที่จะอัปเดต + สาระ, ชื่อโฟลเดอร์ archive → รอ user ไฟเขียว
|
|
46
|
-
4. **★ Archive:** ย้ายทั้งโฟลเดอร์ → `warnyin
|
|
46
|
+
4. **★ Archive:** ย้ายทั้งโฟลเดอร์ → `warnyin/stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv` ถ้าเป็น git repo)
|
|
47
47
|
5. **อัปเดตเอกสารกลาง** (อ่านเนื้อหาจาก path ใน achieved):
|
|
48
48
|
1. **`docs/features/<feature-name>/`** — feature ใหม่ → สร้างโฟลเดอร์ใหม่ (`feature.md` + `business.md`); ปรับปรุง feature เดิม → อัปเดตโฟลเดอร์เดิม โดยใช้เนื้อหาจาก `business.md` / `proposal.md` / `design.md` ของ topic
|
|
49
49
|
2. **`docs/techstack/<component>/`** — `rule.md` / `standard.md` (จาก note "รอ SHIP" ใน tasks), `structure.md` (โครงสร้างที่เปลี่ยน), `test.md` (merge แผนเทสจาก `test.md` ของ topic)
|
|
50
50
|
3. **`docs/rule.md`** — global rule ใหม่/ที่เปลี่ยน (เฉพาะข้อที่เป็นกฎระดับโปรเจกต์ ไม่ผูกกับ component เดียว)
|
|
51
51
|
4. **`docs/troubleshooting.md`** — merge entry จาก `troubleshooting.md` ของ topic (ปัญหา/อาการ/root cause/วิธีแก้/ป้องกันซ้ำ)
|
|
52
52
|
5. **`docs/infra.md` + `docs/project.md`** — เฉพาะถ้ามีข้อมูลที่เกี่ยวข้อง (env/service ใหม่, scope/เป้าหมายโปรเจกต์ที่ขยับ)
|
|
53
|
-
6. **`docs/codemap/` ทั้งหมด** — อัปเดต code map ให้ตรงกับโค้ดจริงปัจจุบัน (
|
|
53
|
+
6. **`docs/codemap/` ทั้งหมด** — อัปเดต code map ให้ตรงกับโค้ดจริงปัจจุบัน ทำตาม playbook `warnyin/workflow/codemap.md` (Claude Code: `/warnyin:update-codemaps`)
|
|
54
54
|
6. **เขียนสรุปส่งมอบ:** `achieved/<YYYY-MM-DD>-<slug>/ship.md` — feature ใหม่/ปรับปรุง, เอกสารกลางที่อัปเดต (ไฟล์ → สาระ), note ที่ตัดทิ้งพร้อมเหตุผล
|
|
55
55
|
7. **ปิดงาน:** รายงาน user ว่าส่งมอบครบ — topic ปิดสมบูรณ์
|
|
56
56
|
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
| `docs/troubleshooting.md` | KB ปัญหา-วิธีแก้ที่ merge เข้า |
|
|
67
67
|
| `docs/infra.md`, `docs/project.md` | อัปเดตเฉพาะถ้ามีข้อมูลเกี่ยวข้อง |
|
|
68
68
|
| `docs/codemap/` | code map ตรงกับโค้ดจริงปัจจุบัน |
|
|
69
|
-
| `warnyin
|
|
69
|
+
| `warnyin/stages/achieved/<YYYY-MM-DD>-<slug>/` | ทั้ง topic ที่ archive แล้ว + `ship.md` (สรุปการส่งมอบ) |
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
73
73
|
## 6. Gate → topic ปิดสมบูรณ์เมื่อ
|
|
74
74
|
|
|
75
|
-
- [ ] topic ถูกย้ายไป `warnyin
|
|
75
|
+
- [ ] topic ถูกย้ายไป `warnyin/stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว (ไม่เหลือใน `warnyin/stages/`)
|
|
76
76
|
- [ ] `docs/features/` สะท้อน feature ใหม่/ที่ปรับปรุงแล้ว
|
|
77
77
|
- [ ] note "รอ SHIP" ทุกข้อใน `tasks/*/rule.md` + `standard.md` ถูกพิจารณาครบ — promote หรือตัดทิ้งพร้อมเหตุผล
|
|
78
78
|
- [ ] `docs/troubleshooting.md` รวม entry จาก topic แล้ว
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
## 2. ก่อนเทส — อ่านให้เข้าใจก่อนเสมอ
|
|
16
16
|
|
|
17
|
-
1. **spec + tasks ทั้งหมด** — `warnyin
|
|
17
|
+
1. **spec + tasks ทั้งหมด** — `warnyin/stages/<slug>/tasks/*/spec.md` + `task.md`, `design.md`, `proposal.md`
|
|
18
18
|
→ เข้าใจ **จุดประสงค์ของ topic** และสิ่งที่ต้องยืนยัน (อย่าเทสผ่านๆ โดยไม่เข้าใจ)
|
|
19
19
|
2. **`docs/techstack/<component>/test.md`** — guideline ว่าเทสยังไง (เช่น frontend: e2e smoke ผ่าน **playwright-cli**)
|
|
20
20
|
→ ถ้า **ไม่มี** guideline → แนะนำว่าควรเทสแบบไหน/วิธีใดได้บ้าง แล้วเขียนแผนลง `test.md`
|
|
@@ -30,16 +30,16 @@
|
|
|
30
30
|
3. **ใช้ guideline จาก `test.md`** ของ techstack; ถ้าไม่มีให้เสนอวิธีเทสที่เหมาะแล้วเขียนแผนเอง
|
|
31
31
|
4. **Frontend → verify UX/UI ด้วย** (ไม่ใช่แค่ functional — ดู layout, state, flow, ความถูกต้องของหน้าจอ)
|
|
32
32
|
5. **ข้อไหน verify ไม่ผ่าน → แก้จนผ่าน (loop)** และ **นับจำนวนการแก้ไข/จำนวนรอบ**
|
|
33
|
-
6. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `warnyin
|
|
33
|
+
6. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `warnyin/stages/<slug>/troubleshooting.md`** (เหมือน BUILD); เจอปัญหา → อ่าน `docs/troubleshooting.md` ก่อน
|
|
34
34
|
7. **นาน/หลายรอบเกินไป → พิจารณาถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ** (อย่าวนแก้เงียบๆ ไม่จบ)
|
|
35
35
|
8. **ห้ามแตะไฟล์กลางใน `docs/`** — แผนเทสเขียนระดับ topic ที่ `test.md` ก่อน รอ SHIP merge เข้า `docs/techstack/<component>/test.md`
|
|
36
|
-
9. **สวม role QA** — ทำตาม role card `workflow/roles/qa.md` (lens: คิดแบบผู้ใช้จริง + คนหาเรื่อง, edge case, regression; checklist ครบทุกข้อ)
|
|
36
|
+
9. **สวม role QA** — ทำตาม role card `warnyin/workflow/roles/qa.md` (lens: คิดแบบผู้ใช้จริง + คนหาเรื่อง, edge case, regression; checklist ครบทุกข้อ)
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
40
|
## 4. ลำดับขั้นการทำงาน (process)
|
|
41
41
|
|
|
42
|
-
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม VERIFY ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin
|
|
42
|
+
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม VERIFY ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin/stages/<slug>/` ครบ ไม่หายไปกับ context) — VERIFY เป็นลูปเทส-แก้ที่อาจยาว ต้องมี context เหลือมากพอ; เครื่องอื่นที่ไม่มีคำสั่งนี้ → แนะนำเริ่ม session ใหม่
|
|
43
43
|
1. **เข้าใจจุดประสงค์:** อ่าน spec/tasks/design → สรุปสิ่งที่ต้อง verify (functional + UX/UI)
|
|
44
44
|
2. **วางแผนเทส → เขียน `test.md`:** ตาม guideline `docs/techstack/<component>/test.md`; ไม่มีก็เสนอวิธี (e2e smoke / integration / manual ฯลฯ) แล้วเขียนแผน
|
|
45
45
|
3. **เตรียม local env:** รัน service ที่เกี่ยวข้องตาม `infra.md`
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 5. Output (สร้างที่ `warnyin
|
|
53
|
+
## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
|
|
54
54
|
|
|
55
55
|
| ไฟล์ | เนื้อหา | ปลายทางตอน SHIP |
|
|
56
56
|
|---|---|---|
|
|
File without changes
|
|
File without changes
|
package/docs/infra.md
DELETED
|
File without changes
|
package/docs/project.md
DELETED
|
File without changes
|
package/docs/rule.md
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/workflow/README.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
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
|
-
roles/ # ★ role card กลาง: ba, po, sa, tech-lead, developer, qa, security, infra
|
|
41
|
-
stages/
|
|
42
|
-
discovery.md # playbook: Discovery (optional) ✅
|
|
43
|
-
design.md # playbook: DESIGN ✅
|
|
44
|
-
build.md # playbook: BUILD ✅
|
|
45
|
-
verify.md # playbook: VERIFY ✅
|
|
46
|
-
ship.md # playbook: SHIP ✅
|
|
47
|
-
scripts/
|
|
48
|
-
build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
|
|
49
|
-
|
|
50
|
-
docs/ # ความรู้ถาวรระดับโปรเจกต์ (อ้างอิงข้ามงาน)
|
|
51
|
-
project.md # ★ จุดเริ่มของ Discovery — อ่านก่อนเสมอ
|
|
52
|
-
rule.md infra.md
|
|
53
|
-
troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
|
|
54
|
-
codemap/ features/ techstack/
|
|
55
|
-
|
|
56
|
-
warnyin-stages/ # พื้นที่ทำงานจริง ตาม topic
|
|
57
|
-
context.md
|
|
58
|
-
[topic]/ # ★ template ของหนึ่งหน่วยงาน — copy ไปตั้งชื่อจริง
|
|
59
|
-
discovery.md research.md # output ของ Discovery
|
|
60
|
-
business.md proposal.md design.md # output ของ DESIGN
|
|
61
|
-
tasks/[task-name]/... build.md # output ของ DESIGN (tasks) + BUILD (build.md)
|
|
62
|
-
test.md verify.md # output ของ VERIFY
|
|
63
|
-
troubleshooting.md ship.md # KB ระหว่างงาน + สรุปส่งมอบของ SHIP
|
|
64
|
-
achieved/[YYYY-MM-DD-topic]/ # archive หลัง SHIP
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## การติดตั้งไปโปรเจกต์อื่น
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
cd my-project
|
|
73
|
-
npx @warnyin/agents # ติดตั้ง (ข้ามไฟล์ที่มีอยู่ ไม่เขียนทับ)
|
|
74
|
-
npx @warnyin/agents --update # อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
|
|
75
|
-
npx @warnyin/agents --dry-run # ดูก่อนว่าจะสร้าง/อัปเดตอะไร
|
|
76
|
-
# ทางสำรอง (ไม่ผ่าน npm): npx github:warnyin/warnyin-agents
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
- โปรเจกต์ที่มี `CLAUDE.md`/`AGENTS.md` อยู่แล้ว → installer ต่อท้ายเป็น section ไม่เขียนทับ
|
|
80
|
-
- `--update` เขียนทับเฉพาะ core (`workflow/`, `.claude/commands/warnyin/`, template `[topic]`) — ไม่แตะ `docs/` และงานจริง
|
|
81
|
-
- หลังติดตั้ง → เปิด Claude Code แล้วรัน `/warnyin:init` ให้ agent วิเคราะห์โปรเจกต์ + เติม `docs/` (playbook: `workflow/init.md`)
|
|
82
|
-
|
|
83
|
-
## วิธีใช้
|
|
84
|
-
|
|
85
|
-
1. เริ่มงานใหม่ → copy `warnyin-stages/[topic]/` เป็น `warnyin-stages/<ชื่อ-งาน-kebab-case>/`
|
|
86
|
-
2. รัน stage ตามลำดับ (Discovery ข้ามได้ถ้าเข้าใจ scope ชัดแล้ว)
|
|
87
|
-
- Claude Code: `/warnyin:discovery <topic>`, `/warnyin:design <slug> <change>`
|
|
88
|
-
- Codex / Antigravity: บอกให้ทำตาม `workflow/stages/<stage>.md`
|
|
89
|
-
3. ผ่าน "gate" ของแต่ละ stage แล้วจึงไป stage ถัดไป
|
|
90
|
-
4. เมื่อ SHIP (`/warnyin:ship <slug>`) → promote ความรู้ของ topic ขึ้นเอกสารกลางใน `docs/`
|
|
91
|
-
แล้วย้าย topic ไป `warnyin-stages/achieved/<YYYY-MM-DD>-<topic>/`
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|