@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.
Files changed (57) hide show
  1. package/.claude/commands/warnyin/build.md +29 -0
  2. package/.claude/commands/warnyin/design.md +23 -0
  3. package/.claude/commands/warnyin/discovery.md +17 -0
  4. package/.claude/commands/warnyin/init.md +12 -0
  5. package/.claude/commands/warnyin/ship.md +27 -0
  6. package/.claude/commands/warnyin/verify.md +19 -0
  7. package/AGENTS.md +38 -0
  8. package/CLAUDE.md +35 -0
  9. package/bin/cli.mjs +117 -0
  10. package/docs/codemap/index.md +0 -0
  11. package/docs/features/[feature-name]/business.md +0 -0
  12. package/docs/features/[feature-name]/feature.md +0 -0
  13. package/docs/infra.md +0 -0
  14. package/docs/project.md +0 -0
  15. package/docs/rule.md +0 -0
  16. package/docs/techstack/admin-console/about.md +0 -0
  17. package/docs/techstack/admin-console/rule.md +0 -0
  18. package/docs/techstack/admin-console/standard.md +0 -0
  19. package/docs/techstack/admin-console/structure.md +0 -0
  20. package/docs/techstack/admin-console/test.md +0 -0
  21. package/docs/techstack/api-service/about.md +0 -0
  22. package/docs/techstack/api-service/rule.md +0 -0
  23. package/docs/techstack/api-service/standard.md +0 -0
  24. package/docs/techstack/api-service/structure.md +0 -0
  25. package/docs/techstack/api-service/test.md +0 -0
  26. package/docs/troubleshooting.md +39 -0
  27. package/installer/templates/CLAUDE.md +25 -0
  28. package/package.json +30 -0
  29. package/warnyin-stages/[topic]/build.md +58 -0
  30. package/warnyin-stages/[topic]/business.md +21 -0
  31. package/warnyin-stages/[topic]/design.md +42 -0
  32. package/warnyin-stages/[topic]/discovery.md +69 -0
  33. package/warnyin-stages/[topic]/proposal.md +43 -0
  34. package/warnyin-stages/[topic]/research.md +49 -0
  35. package/warnyin-stages/[topic]/ship.md +29 -0
  36. package/warnyin-stages/[topic]/tasks/[task-name]/issue.md +19 -0
  37. package/warnyin-stages/[topic]/tasks/[task-name]/rule.md +13 -0
  38. package/warnyin-stages/[topic]/tasks/[task-name]/spec.md +36 -0
  39. package/warnyin-stages/[topic]/tasks/[task-name]/standard.md +21 -0
  40. package/warnyin-stages/[topic]/tasks/[task-name]/task.md +39 -0
  41. package/warnyin-stages/[topic]/test.md +46 -0
  42. package/warnyin-stages/[topic]/troubleshooting.md +34 -0
  43. package/warnyin-stages/[topic]/verify.md +44 -0
  44. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/business.md +0 -0
  45. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/design.md +0 -0
  46. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/discovery.md +0 -0
  47. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/proposal.md +0 -0
  48. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/research.md +0 -0
  49. package/warnyin-stages/context.md +0 -0
  50. package/workflow/README.md +90 -0
  51. package/workflow/init.md +59 -0
  52. package/workflow/scripts/build-wave.mjs +106 -0
  53. package/workflow/stages/build.md +93 -0
  54. package/workflow/stages/design.md +107 -0
  55. package/workflow/stages/discovery.md +76 -0
  56. package/workflow/stages/ship.md +84 -0
  57. package/workflow/stages/verify.md +70 -0
@@ -0,0 +1,29 @@
1
+ ---
2
+ description: รัน BUILD stage — fan-out sub-agent ต่อ task ตาม dependency (Workflow + worktree) แล้ว integrate
3
+ argument-hint: "[slug ของ topic]"
4
+ ---
5
+
6
+ ทำหน้าที่เป็น BUILD orchestrator ตาม **playbook กลาง** ของ workflow มาตรฐาน
7
+
8
+ 0. **★ เช็ค context window ก่อนเริ่ม:** ถ้า context ของ session ถูกใช้ไปเยอะหรือ**เกินครึ่ง** → เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ แล้วค่อยรัน `/warnyin:build <slug>` ใหม่ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin-stages/<slug>/` ครบ) — อย่าเริ่ม fan-out ทั้งที่ context ใกล้เต็ม
9
+ 1. อ่าน `workflow/stages/build.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
10
+ 2. slug: $ARGUMENTS — ถ้าไม่ระบุให้ถามก่อน ว่าจะ build topic ไหน (ดูโฟลเดอร์ใน `warnyin-stages/`)
11
+ 3. **อ่าน task ทั้งหมด** ใน `warnyin-stages/<slug>/tasks/*/task.md` + `design.md` → ดึง dependency → สร้าง DAG → จัด **wave** ด้วย topological order
12
+ 4. **Pre-check:** target เป็น git repo ไหม (จำเป็นสำหรับ worktree isolation) — ถ้าไม่ใช่ → fallback sequential shared-tree (`isolate:false`) และแจ้ง user. สร้าง build branch ใหม่ก่อนเริ่ม
13
+ 5. **ขออนุมัติครั้งเดียว** — ใช้ AskUserQuestion แสดง execution plan: แต่ละ wave มี task อะไร, อันไหน parallel, isolation mode, build branch → รอ go/no-go (อย่าเริ่มก่อนได้ไฟเขียว)
14
+ 6. **เดินทีละ wave** (หลังอนุมัติ):
15
+ - เรียก **Workflow** ด้วย `{ scriptPath: "workflow/scripts/build-wave.mjs", args: { slug, tasks: [<task ใน wave นี้>], isolate } }`
16
+ - เมื่อ workflow คืนผล: ถ้า `isolate` → **merge** branch ที่แต่ละ agent รายงาน (`result.branch`) เข้า build branch ทีละอัน, แก้ conflict ถ้ามี; ถ้า shared-tree → review + commit ให้
17
+ - ถ้ามี task `failed` หรือ `skipped` → **หยุด** รายงาน user ก่อนไป wave ถัดไป
18
+ - **รวม troubleshooting:** ดึงฟิลด์ `troubleshooting` จากผลของทุก agent ในรอบนี้ → เขียนรวมลง `warnyin-stages/<slug>/troubleshooting.md` (main loop เขียนเอง กันไฟล์ชนกันใน worktree)
19
+ 7. **★ Full build & test gate (หลัง merge ทุก wave):** บน build branch ที่ integrate แล้ว รัน build ทั้งหมด + test suite ทั้งหมด (รวม unit test) ของทุก component ที่กระทบ
20
+ - **เจอ error → อ่าน `docs/troubleshooting.md` ก่อน** เผื่อเคยแก้แล้ว
21
+ - มี build error / test แดง → **แก้จนเขียวหมด (loop)**: วิเคราะห์ error, แก้ (จะ delegate fix ให้ sub-agent ทีละจุดก็ได้), rerun build/test ใหม่ ทำซ้ำจนผ่าน
22
+ - ปัญหา **ยาก/เจอซ้ำ** ที่แก้สำเร็จในรอบนี้ → บันทึกลง `warnyin-stages/<slug>/troubleshooting.md`
23
+ - ห้ามปิด BUILD ถ้ายังแดง; ถ้าวนหลายรอบยังไม่ผ่าน → หยุด รายงาน user พร้อม error log
24
+ 8. **ปิดงาน:** เขียน `warnyin-stages/<slug>/build.md` (ผลต่อ task + ผล full build/test + integration notes), อัปเดตสถานะใน `task.md` แต่ละใบ → เสนอเข้า VERIFY ด้วย `/warnyin:verify`
25
+
26
+ หมายเหตุ:
27
+ - ห้ามแก้ rule/standard กลางใน `docs/` (rule ใหม่ที่เสนอถูก note ไว้ใน `tasks/<task>/rule.md` รอ SHIP)
28
+ - ปัญหายาก/ซ้ำที่แก้ได้ → `warnyin-stages/<slug>/troubleshooting.md` (SHIP จะยกขึ้น `docs/troubleshooting.md`)
29
+ - เกณฑ์ปิด BUILD ดู Gate ข้อ 7 ของ playbook
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: รัน DESIGN stage — เสนอ change พร้อมผลิต proposal/design/tasks ครบในขั้นเดียว
3
+ argument-hint: "[slug ของ topic] [อธิบาย change สั้นๆ]"
4
+ ---
5
+
6
+ ทำหน้าที่เป็น DESIGN architect ตาม **playbook กลาง** ของ workflow มาตรฐาน
7
+
8
+ 1. อ่าน `workflow/stages/design.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
9
+ - **ห้ามเดาเอง** — ไม่ชัดให้ถามทีละข้อ + เสนอคำตอบที่แนะนำทุกข้อ
10
+ - ออกแบบแบบ **vertical slice architecture**
11
+ - **Gate ก่อนเขียนไฟล์ task** แล้วค่อยโยนให้ sub-agent
12
+ 2. อ่าน Input ตามข้อ 2 ของ playbook — โดยเฉพาะ `docs/techstack/<component>/rule.md` และ `standard.md`
13
+ 3. งาน: $ARGUMENTS
14
+ - ระบุ slug → ใช้/สร้าง `warnyin-stages/<slug>/` (ถ้ามาจาก Discovery ใช้โฟลเดอร์เดิม)
15
+ - ถ้าเป็นคำถาม/ยังไม่มั่นใจเรื่อง design → แนะนำ `/warnyin:discovery` ก่อน
16
+ 4. ผลิต artifact โดยใช้ template ใน `warnyin-stages/[topic]/` เป็นโครง: `business.md` (ข้ามได้ถ้า change เล็ก), `proposal.md`, `design.md`, แล้วแตก `tasks/<task-name>/` แต่ละใบมี `spec.md` `standard.md` `rule.md` `task.md`
17
+ 5. ตอน generate ไฟล์ task หลายใบ สามารถใช้ sub-agent (Task/Agent tool) fan-out หนึ่ง agent ต่อหนึ่ง task ได้ — **แต่ต้องผ่าน Gate (ข้อ 8 ของ playbook) ก่อน**
18
+ 6. **Dry-run (ถาม user ก่อนเสมอ):** หลังเขียนไฟล์ task ครบ ใช้ AskUserQuestion ถามว่าต้องการ dry-run ทั้งหมดเพื่อหาจุดบกพร่องก่อนเข้า BUILD ไหม — ถ้า ok ทำตามข้อ 4.9 ของ playbook:
19
+ - fan-out agent (Agent tool) **หนึ่งตัวต่อหนึ่ง task แบบขนาน, read-only** — อ่าน task ทั้ง 4 ไฟล์ + design/proposal + โค้ดจริงที่เกี่ยว เดิน implement ในหัว หา **blocker** (implement ตาม spec ไม่ได้ — ต้องแก้ก่อน BUILD) และ **defer** (ทำ/ตัดสินใจทีหลังได้ แต่ต้อง track)
20
+ - task ที่พบ issue → เขียน `warnyin-stages/<slug>/tasks/<task>/issue.md` (ตาม template); รันครบทุก task → **สรุปผลรวม** ให้ user
21
+ - **หาวิธีแก้ DESIGN ตาม issue โดยห้ามเดา ห้ามคิดขึ้นเอง** — ติดจริงๆ → สัมภาษณ์ user ทีละข้อ + เสนอคำตอบแนะนำทุกครั้ง; คำถามที่โค้ดตอบได้ → ไปอ่านโค้ดเอง
22
+ - แก้แล้ว rerun dry-run เฉพาะ task ที่กระทบ วนจน **ไม่มี blocker ค้าง**
23
+ 7. เมื่อพร้อม implement → บอกให้รัน `/warnyin:build`
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: รัน Discovery stage — research + สัมภาษณ์ผู้ใช้เพื่อตี scope จนเข้าใจตรงกัน
3
+ argument-hint: "[ชื่อหัวข้องาน / slug]"
4
+ ---
5
+
6
+ ทำหน้าที่เป็น Discovery facilitator ตาม **playbook กลาง** ของ workflow มาตรฐาน
7
+
8
+ 1. อ่าน `workflow/stages/discovery.md` ให้ครบก่อน แล้วทำตามทุกหลักการในนั้นอย่างเคร่งครัด
9
+ (กว้าง→แคบ, ถามทีละข้อ + เสนอคำตอบที่แนะนำ, โค้ดตอบได้ให้ไปอ่านเอง, เดินทีละกิ่ง decision tree)
10
+ 2. อ่าน Input ตามข้อ 2 ของ playbook — เริ่มที่ `docs/project.md` เสมอ
11
+ 3. หัวข้องาน: $ARGUMENTS
12
+ - ถ้าระบุมา → ใช้เป็น slug ของ topic (kebab-case) สร้าง/ใช้โฟลเดอร์ `warnyin-stages/<slug>/`
13
+ - ถ้าไม่ระบุ → ถาม user ก่อนว่าหัวข้องานคืออะไร
14
+ 4. เขียน output ลง `warnyin-stages/<slug>/discovery.md` และ `research.md` โดยใช้ template ในโฟลเดอร์ `warnyin-stages/[topic]/` เป็นโครง
15
+ 5. ปิดงานเมื่อผ่าน Gate (ข้อ 6 ของ playbook) แล้วเสนอว่าพร้อมเข้า DESIGN ด้วย `/warnyin:design`
16
+
17
+ หมายเหตุ: ถ้า user พิมพ์ "ซักถามฉันหน่อย" / "grill me" → เข้าโหมด grill ตาม playbook
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: รัน INIT — วิเคราะห์โปรเจกต์ที่มีอยู่ แล้วเติม docs/ (project, techstack, codemap, infra) ครั้งแรกหลังติดตั้ง
3
+ ---
4
+
5
+ ทำหน้าที่เป็นผู้วิเคราะห์โปรเจกต์ตาม **playbook กลาง** ของ workflow มาตรฐาน
6
+
7
+ 1. อ่าน `workflow/init.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
8
+ 2. **สแกนภาพรวม repo:** โครงสร้าง, manifest, ภาษา/framework → ระบุว่าแบ่งเป็น component อะไรบ้าง
9
+ 3. **วิเคราะห์ลึกต่อ component แบบขนาน:** fan-out sub-agent (Agent tool, read-only) หนึ่งตัวต่อหนึ่ง component — โครงสร้าง, pattern/convention ที่ใช้จริง, วิธี build/test; วิเคราะห์ infra จาก config จริง (docker/compose, env, scripts)
10
+ 4. **ข้อมูลธุรกิจที่โค้ดตอบไม่ได้** (เป้าหมาย, ลูกค้า, ขอบเขต) → สัมภาษณ์ user **ทีละข้อ + เสนอคำตอบแนะนำทุกครั้ง** (ใช้ README/โค้ดเป็น recommended); กฎใน `rule.md` → ถาม user ห้ามเดา
11
+ 5. **เสนอ summary** (สิ่งที่วิเคราะห์ได้ + รายการไฟล์ docs/ ที่จะเขียน) → ขอ user ยืนยัน**ครั้งเดียว** → เขียน/เติมไฟล์ตามตาราง Output ข้อ 4 ของ playbook — **ไฟล์ที่มีเนื้อหาอยู่แล้วให้เติม ไม่เขียนทับทิ้ง**
12
+ 6. **รายงานปิดท้าย:** ส่วนที่ยังว่าง/ไม่แน่ใจ (ระบุ "ยังว่าง รอเติม" ในไฟล์ ห้ามแต่งขึ้นเอง) → เสนอเริ่มงานแรกด้วย `/warnyin:discovery` หรือ `/warnyin:design`
@@ -0,0 +1,27 @@
1
+ ---
2
+ description: รัน SHIP stage — ส่งมอบ: promote ความรู้ของ topic ขึ้นเอกสารกลางใน docs/ + archive topic
3
+ argument-hint: "[slug ของ topic]"
4
+ ---
5
+
6
+ ทำหน้าที่เป็นผู้ส่งมอบ (SHIP) ตาม **playbook กลาง** ของ workflow มาตรฐาน
7
+
8
+ 1. อ่าน `workflow/stages/ship.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
9
+ 2. slug: $ARGUMENTS — ถ้าไม่ระบุให้ถามก่อน ว่าจะ ship topic ไหน (ดูโฟลเดอร์ใน `warnyin-stages/`)
10
+ 3. **อ่านทำความเข้าใจ topic:** อ่าน `warnyin-stages/<slug>/` ทุกไฟล์ (รวม `tasks/*/rule.md` section "รอ SHIP" + `standard.md`) — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง; เช็คว่า VERIFY ผ่าน Gate แล้ว (`verify.md` สรุปผลผ่าน) — ถ้ายังไม่ผ่าน → หยุด แจ้ง user
11
+ 4. **จำแนก feature:** feature ใหม่ หรือปรับปรุง feature เดิม (เทียบกับ `docs/features/` ที่มีอยู่)
12
+ 5. **ขออนุมัติครั้งเดียว** — ใช้ AskUserQuestion สรุป promotion plan: feature ใหม่/ปรับปรุง, ไฟล์กลางที่จะอัปเดต + สาระที่จะใส่, ชื่อโฟลเดอร์ archive → รอ go/no-go (อย่าแก้ไฟล์ใดก่อนได้ไฟเขียว)
13
+ 6. **★ Archive ก่อน:** ย้ายทั้งโฟลเดอร์ `warnyin-stages/<slug>/` → `warnyin-stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv`; วันที่ = วันที่ ship) แล้วอ่านเนื้อหาจาก path ใหม่ระหว่าง promote
14
+ 7. **อัปเดตเอกสารกลาง** (กลั่นเข้าโครงสร้างไฟล์เดิม ไม่ copy ดิบ, ระวัง duplicate):
15
+ - `docs/features/<feature-name>/` — ใหม่ → สร้าง (feature.md + business.md); เดิม → อัปเดต โดยใช้ business/proposal/design ของ topic
16
+ - `docs/techstack/<component>/{rule,standard}.md` — จาก note "รอ SHIP" (พิจารณาครบทุกข้อ: promote หรือตัดทิ้งพร้อมเหตุผล)
17
+ - `docs/techstack/<component>/structure.md` + `test.md` — โครงสร้างที่เปลี่ยน (ดูโค้ดจริง) + merge แผนเทสจาก `test.md` ของ topic
18
+ - `docs/rule.md` — global rule ใหม่/ที่เปลี่ยน (เฉพาะกฎระดับโปรเจกต์)
19
+ - `docs/troubleshooting.md` — merge entry จาก `troubleshooting.md` ของ topic
20
+ - `docs/infra.md` + `docs/project.md` — เฉพาะถ้ามีข้อมูลเกี่ยวข้อง
21
+ - `docs/codemap/` ทั้งหมด — อัปเดตให้ตรงโค้ดจริงปัจจุบัน (อย่างน้อยทุกส่วนที่ change กระทบ)
22
+ 8. **เขียนสรุป** `achieved/<YYYY-MM-DD>-<slug>/ship.md` (feature ใหม่/ปรับปรุง + ตารางเอกสารที่อัปเดต + note ที่ตัดทิ้งพร้อมเหตุผล) → รายงาน user ว่าส่งมอบครบ topic ปิดสมบูรณ์
23
+
24
+ หมายเหตุ:
25
+ - SHIP เป็นเรื่อง **เอกสาร + archive เท่านั้น** — ไม่ merge โค้ด (build branch → main จัดการเองนอก workflow)
26
+ - เนื้อหาที่ไม่แน่ใจว่าควร promote/วางไฟล์ไหน → ถามทีละข้อ + เสนอคำตอบที่แนะนำ อย่าเดา
27
+ - เกณฑ์ปิดดู Gate ข้อ 6 ของ playbook
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: รัน VERIFY stage — strategy tester: เทสตามจุดประสงค์ใน local env (FE: e2e smoke + UXUI) แก้จนผ่าน
3
+ argument-hint: "[slug ของ topic]"
4
+ ---
5
+
6
+ ทำหน้าที่เป็น strategy tester ตาม **playbook กลาง** ของ workflow มาตรฐาน
7
+
8
+ 0. **★ เช็ค context window ก่อนเริ่ม:** ถ้า context ของ session ถูกใช้ไปเยอะหรือ**เกินครึ่ง** → เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ แล้วค่อยรัน `/warnyin:verify <slug>` ใหม่ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin-stages/<slug>/` ครบ) — อย่าเริ่มลูปเทส-แก้ทั้งที่ context ใกล้เต็ม
9
+ 1. อ่าน `workflow/stages/verify.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
10
+ 2. slug: $ARGUMENTS — ถ้าไม่ระบุให้ถามก่อน ว่าจะ verify topic ไหน
11
+ 3. **เข้าใจจุดประสงค์ก่อนเทส:** อ่าน `tasks/*/spec.md` + `task.md`, `design.md`, `proposal.md` ทั้งหมดให้เข้าใจดี แล้วค่อยเทสตามเจตนาของ topic
12
+ 4. **guideline:** อ่าน `docs/techstack/<component>/test.md` ว่าเทสยังไง (เช่น FE: e2e smoke ผ่าน playwright-cli) — ไม่มีก็เสนอวิธีแล้วเขียนแผนเอง; ดู `docs/infra.md` สำหรับ local env
13
+ 5. **เขียนแผนลง** `warnyin-stages/<slug>/test.md`
14
+ 6. **เทสจริงใน local env:** รัน service ที่เกี่ยวข้อง (ใช้ skill `run`/`verify` ช่วย launch ได้) → รันเทสตามแผน; FE → e2e smoke + ตรวจ UX/UI
15
+ 7. **ข้อไหนไม่ผ่าน → แก้ → rerun** วนจนผ่าน **นับจำนวนการแก้ไข**; เจอปัญหา → อ่าน `docs/troubleshooting.md` ก่อน, ปัญหายาก/ซ้ำที่แก้ได้ → บันทึก `warnyin-stages/<slug>/troubleshooting.md`
16
+ 8. **ถ้านาน/วนหลายรอบเกินไป → ถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ** (อย่าวนเงียบไม่จบ)
17
+ 9. **เขียนสรุป** `warnyin-stages/<slug>/verify.md` (ผลเทส + รายการแก้ไข + จำนวนรอบ + ผล UXUI) → เสนอเข้า SHIP ด้วย `/warnyin:ship`
18
+
19
+ หมายเหตุ: ห้ามแตะไฟล์กลางใน `docs/` — `test.md` เขียนระดับ topic ก่อน รอ SHIP merge. เกณฑ์ปิดดู Gate ข้อ 6 ของ playbook
package/AGENTS.md ADDED
@@ -0,0 +1,38 @@
1
+ # AGENTS.md
2
+
3
+ มาตรฐานเปิดสำหรับ AI agent ทุกเจ้าที่อ่านไฟล์นี้ (Codex, Antigravity, และเครื่องมืออื่นที่รองรับ `AGENTS.md`)
4
+
5
+ ## repo นี้คืออะไร
6
+
7
+ repo มาตรฐานกลางของ **ways of work** สำหรับทุกโปรเจกต์ — เดินงานผ่าน 5 stage:
8
+
9
+ ```
10
+ Discovery (optional) ──▶ DESIGN ──▶ BUILD ──▶ VERIFY ──▶ SHIP
11
+ ```
12
+
13
+ ## กฎสำคัญ: ทำตาม playbook กลางเสมอ
14
+
15
+ แก่นของแต่ละ stage คือ **single source of truth** อยู่ที่ `workflow/stages/`
16
+ ก่อนทำงานใน stage ใด ให้เปิดอ่านไฟล์ playbook ของ stage นั้นแล้วทำตามอย่างเคร่งครัด
17
+
18
+ | Stage | playbook | สถานะ |
19
+ |---|---|---|
20
+ | Discovery | `workflow/stages/discovery.md` | ✅ พร้อมใช้ |
21
+ | DESIGN | `workflow/stages/design.md` | ✅ พร้อมใช้ |
22
+ | BUILD | `workflow/stages/build.md` | ✅ พร้อมใช้ |
23
+ | VERIFY | `workflow/stages/verify.md` | ✅ พร้อมใช้ |
24
+ | SHIP | `workflow/stages/ship.md` | ✅ พร้อมใช้ |
25
+
26
+ ## วิธีเริ่ม
27
+
28
+ 0. ครั้งแรกในโปรเจกต์ (docs/ ยังว่าง) → ทำตาม `workflow/init.md` เพื่อวิเคราะห์โปรเจกต์ + เติม `docs/` ก่อน
29
+ 1. อ่าน `workflow/README.md` เพื่อเข้าใจภาพรวมและโครงสร้าง
30
+ 2. งานใหม่ → copy `warnyin-stages/[topic]/` เป็น `warnyin-stages/<slug>/`
31
+ 3. รัน stage ตามลำดับ โดยทำตาม playbook ของแต่ละ stage
32
+ 4. output ของงานเก็บใน `warnyin-stages/<slug>/`, ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/`
33
+
34
+ ## รัน Discovery
35
+
36
+ ทำตาม `workflow/stages/discovery.md` — เริ่มอ่าน `docs/project.md`, ตี scope กว้าง→แคบ,
37
+ ถามทีละข้อพร้อมเสนอคำตอบที่แนะนำ, คำถามที่ตอบได้ด้วยโค้ดให้ไปอ่านโค้ดเอง,
38
+ เขียน output ลง `warnyin-stages/<slug>/discovery.md` และ `research.md`
package/CLAUDE.md ADDED
@@ -0,0 +1,35 @@
1
+ # CLAUDE.md
2
+
3
+ repo มาตรฐานกลางของ **ways of work** สำหรับทุกโปรเจกต์ เดินงานผ่าน 5 stage:
4
+ `Discovery (optional) ▶ DESIGN ▶ BUILD ▶ VERIFY ▶ SHIP`
5
+
6
+ ## กฎหลัก
7
+ - แก่นของแต่ละ stage เป็น single source of truth ที่ `workflow/stages/` — **ทำตาม playbook นั้นเสมอ** ก่อนเริ่มงานใน stage
8
+ - อย่า duplicate logic ของ workflow ลงที่อื่น ถ้าต้องแก้พฤติกรรมให้แก้ที่ `workflow/stages/`
9
+ - output ของงานจริงเก็บใน `warnyin-stages/<slug>/` (copy จาก template `warnyin-stages/[topic]/`)
10
+ - ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/` — เริ่มอ่าน `docs/project.md` เสมอใน Discovery
11
+
12
+ ## Slash commands (namespace `warnyin:`)
13
+ - `/warnyin:init` → วิเคราะห์โปรเจกต์ + เติม `docs/` ครั้งแรกหลังติดตั้ง (`.claude/commands/warnyin/init.md` → `workflow/init.md`)
14
+ - `/warnyin:discovery [topic]` → Discovery stage (`.claude/commands/warnyin/discovery.md` → `workflow/stages/discovery.md`)
15
+ - `/warnyin:design [slug] [change]` → DESIGN stage (`.claude/commands/warnyin/design.md` → `workflow/stages/design.md`)
16
+ - `/warnyin:build [slug]` → BUILD stage — fan-out sub-agent ตาม dependency (`workflow/stages/build.md` + `workflow/scripts/build-wave.mjs`)
17
+ - `/warnyin:verify [slug]` → VERIFY stage — strategy tester เทส local env + UXUI แก้จนผ่าน (`workflow/stages/verify.md`)
18
+ - `/warnyin:ship [slug]` → SHIP stage — ส่งมอบ: promote ความรู้ขึ้น `docs/` + archive topic (`workflow/stages/ship.md`)
19
+
20
+ ## การติดตั้งไปโปรเจกต์อื่น (npx installer)
21
+ - `npx @warnyin/agents` (หรือสำรอง `npx github:warnyin/warnyin-agents`) → copy โครงทั้งหมดลงโปรเจกต์ปลายทาง (ข้ามไฟล์ที่มีอยู่, CLAUDE.md/AGENTS.md ที่มีอยู่จะต่อท้ายเป็น section)
22
+ - `--update` → เขียนทับเฉพาะ core (`workflow/`, `.claude/commands/warnyin/`, template `[topic]`) ไม่แตะ `docs/`/งานจริง
23
+ - ตัว installer: `bin/cli.mjs` + template CLAUDE.md ของโปรเจกต์ปลายทางที่ `installer/templates/CLAUDE.md` (แก้ commands list ที่ไหน ให้แก้ template นี้ด้วย)
24
+ - หลังติดตั้ง → รัน `/warnyin:init` เพื่อเติม `docs/`
25
+
26
+ ## รองรับหลาย AI
27
+ repo นี้ tool-agnostic: Claude Code อ่าน `.claude/` + ไฟล์นี้, ส่วน Codex/Antigravity อ่าน `AGENTS.md`
28
+ ทุกเครื่องชี้กลับมาที่ playbook กลางชุดเดียวกันใน `workflow/stages/` — ดูภาพรวมที่ `workflow/README.md`
29
+
30
+ ## สถานะการสร้าง workflow (อัปเดต 2026-06-04)
31
+ ครบทั้ง 5 stage: Discovery ✅ · DESIGN ✅ · BUILD ✅ · VERIFY ✅ · SHIP ✅
32
+ (playbook + command + template + build-wave.mjs ครบทุก stage)
33
+
34
+ แพทเทิร์นการเติม/แก้ stage: playbook `workflow/stages/<stage>.md` + command `.claude/commands/warnyin/<stage>.md` + อัปเดตตาราง stage ใน `AGENTS.md`/`CLAUDE.md`/`workflow/README.md` + output template ใน `warnyin-stages/[topic]/`
35
+ **สำคัญ: การเปลี่ยนพฤติกรรม stage ใดๆ ให้ user เป็นคนอธิบาย/ยืนยันก่อน อย่าเดาเอง**
package/bin/cli.mjs ADDED
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * warnyin-agents installer
4
+ * ติดตั้ง Warnyin Standard Workflow ลงโปรเจกต์ปัจจุบัน (cwd)
5
+ *
6
+ * npx @warnyin/agents ติดตั้ง (ข้ามไฟล์ที่มีอยู่แล้ว)
7
+ * npx @warnyin/agents --update อัปเดต playbook กลาง (เขียนทับเฉพาะไฟล์ core)
8
+ * npx @warnyin/agents --dry-run แสดงว่าจะทำอะไร โดยไม่เขียนไฟล์จริง
9
+ * (ทางสำรองไม่ผ่าน npm: npx github:warnyin/warnyin-agents)
10
+ */
11
+ import fs from 'node:fs'
12
+ import path from 'node:path'
13
+ import { fileURLToPath } from 'node:url'
14
+
15
+ const pkgRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
16
+ const target = process.cwd()
17
+ const args = new Set(process.argv.slice(2))
18
+ const UPDATE = args.has('--update')
19
+ const DRY = args.has('--dry-run')
20
+
21
+ if (args.has('--help') || args.has('-h')) {
22
+ console.log(`warnyin-agents — ติดตั้ง Warnyin Standard Workflow ลงโปรเจกต์ปัจจุบัน
23
+
24
+ ใช้งาน:
25
+ npx @warnyin/agents ติดตั้ง (ข้ามไฟล์ที่มีอยู่แล้ว ไม่เขียนทับ)
26
+ npx @warnyin/agents --update อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
27
+ (เขียนทับเฉพาะ workflow/, .claude/commands/warnyin/,
28
+ template warnyin-stages/[topic] — ไม่แตะ docs/ และงานจริง)
29
+ npx @warnyin/agents --dry-run แสดงรายการไฟล์ที่จะสร้าง/อัปเดต โดยไม่เขียนจริง
30
+
31
+ หลังติดตั้ง: เปิด Claude Code ในโปรเจกต์ แล้วรัน /warnyin:init ให้ agent วิเคราะห์โปรเจกต์ + เติม docs/`)
32
+ process.exit(0)
33
+ }
34
+
35
+ if (path.resolve(pkgRoot) === path.resolve(target)) {
36
+ console.error('✖ กำลังรันอยู่ใน repo ของ warnyin-agents เอง — ให้ cd ไปที่โปรเจกต์ปลายทางก่อน')
37
+ process.exit(1)
38
+ }
39
+
40
+ // core = playbook กลาง + command + template หน่วยงาน — เขียนทับได้เมื่อ --update
41
+ const CORE = [
42
+ 'workflow',
43
+ path.join('.claude', 'commands', 'warnyin'),
44
+ path.join('warnyin-stages', '[topic]'),
45
+ ]
46
+ // scaffold = โครง docs/ + พื้นที่ทำงาน — เป็นข้อมูลของโปรเจกต์ ไม่เขียนทับเด็ดขาด
47
+ const SCAFFOLD = ['docs', 'warnyin-stages']
48
+
49
+ const stats = { created: 0, updated: 0, skipped: 0 }
50
+
51
+ function copyTree(relDir, { overwrite }) {
52
+ const srcDir = path.join(pkgRoot, relDir)
53
+ if (!fs.existsSync(srcDir)) return
54
+ for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
55
+ const rel = path.join(relDir, entry.name)
56
+ if (entry.isDirectory()) {
57
+ copyTree(rel, { overwrite })
58
+ continue
59
+ }
60
+ const src = path.join(pkgRoot, rel)
61
+ const dest = path.join(target, rel)
62
+ const exists = fs.existsSync(dest)
63
+ if (exists && !overwrite) {
64
+ stats.skipped++
65
+ continue
66
+ }
67
+ if (exists && overwrite && fs.readFileSync(src).equals(fs.readFileSync(dest))) {
68
+ stats.skipped++
69
+ continue
70
+ }
71
+ if (!DRY) {
72
+ fs.mkdirSync(path.dirname(dest), { recursive: true })
73
+ fs.copyFileSync(src, dest)
74
+ }
75
+ stats[exists ? 'updated' : 'created']++
76
+ console.log(` ${exists ? '↻' : '+'} ${rel}`)
77
+ }
78
+ }
79
+
80
+ /** CLAUDE.md / AGENTS.md: ไม่มี → สร้างจาก template; มีอยู่แล้วแต่ยังไม่มี workflow → ต่อท้ายเป็น section */
81
+ function installRootDoc(name, srcPath) {
82
+ const dest = path.join(target, name)
83
+ const content = fs.readFileSync(srcPath, 'utf8')
84
+ if (!fs.existsSync(dest)) {
85
+ if (!DRY) fs.writeFileSync(dest, content)
86
+ stats.created++
87
+ console.log(` + ${name}`)
88
+ return
89
+ }
90
+ const existing = fs.readFileSync(dest, 'utf8')
91
+ if (existing.includes('workflow/stages/')) {
92
+ stats.skipped++
93
+ return
94
+ }
95
+ const section = '\n\n' + content.replace(/^#\s[^\n]*\n/, '## Warnyin Standard Workflow\n')
96
+ if (!DRY) fs.appendFileSync(dest, section)
97
+ stats.updated++
98
+ console.log(` ± ${name} (ต่อท้าย section Warnyin Standard Workflow)`)
99
+ }
100
+
101
+ console.log(`Warnyin Standard Workflow → ${target}${DRY ? ' (dry-run)' : ''}\n`)
102
+
103
+ for (const dir of CORE) copyTree(dir, { overwrite: UPDATE })
104
+ for (const dir of SCAFFOLD) copyTree(dir, { overwrite: false })
105
+ installRootDoc('CLAUDE.md', path.join(pkgRoot, 'installer', 'templates', 'CLAUDE.md'))
106
+ installRootDoc('AGENTS.md', path.join(pkgRoot, 'AGENTS.md'))
107
+
108
+ console.log(`\nสรุป: สร้างใหม่ ${stats.created} · อัปเดต ${stats.updated} · ข้าม (มีอยู่แล้ว) ${stats.skipped}`)
109
+
110
+ if (!UPDATE) {
111
+ console.log(`
112
+ ขั้นถัดไป:
113
+ 1. เปิด Claude Code ในโปรเจกต์นี้ แล้วรัน /warnyin:init — ให้ agent วิเคราะห์โปรเจกต์ + เติม docs/
114
+ 2. เริ่มงานแรก: /warnyin:discovery <topic> หรือ /warnyin:design <slug> <change>
115
+
116
+ อัปเดต playbook ภายหลัง: npx @warnyin/agents --update`)
117
+ }
File without changes
File without changes
File without changes
package/docs/infra.md ADDED
File without changes
File without changes
package/docs/rule.md ADDED
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
@@ -0,0 +1,39 @@
1
+ # Troubleshooting KB (กลาง)
2
+
3
+ > คลังความรู้ปัญหา-วิธีแก้ของทั้งโปรเจกต์ — สะสมจากทุก topic
4
+ > **อ่านไฟล์นี้ก่อนเสมอเมื่อเจอ build error / ปัญหาระหว่างทำงาน** เผื่อเคยแก้แล้ว
5
+ > ป้อนเข้ามาตอน **SHIP**: ยก entry ที่มีค่าจาก `warnyin-stages/<topic>/troubleshooting.md` มารวมที่นี่ (ลบของซ้ำ/รวมที่คล้ายกัน)
6
+
7
+ ---
8
+
9
+ ## วิธีค้น
10
+ ค้นด้วย error message, component, หรือ keyword อาการ — entry เรียงตาม component แล้วตามความถี่
11
+
12
+ ## สารบัญตาม component
13
+ - [api-service](#api-service)
14
+ - [admin-console](#admin-console)
15
+ - [ทั่วไป / cross-cutting](#ทั่วไป--cross-cutting)
16
+
17
+ ---
18
+
19
+ ## api-service
20
+ <!-- ยังไม่มี entry — เพิ่มตอน SHIP จาก topic troubleshooting.md -->
21
+
22
+ ## admin-console
23
+ <!-- ยังไม่มี entry -->
24
+
25
+ ## ทั่วไป / cross-cutting
26
+ <!-- ยังไม่มี entry -->
27
+
28
+ ---
29
+
30
+ ## รูปแบบ entry (ใช้ตอนเพิ่มจาก SHIP)
31
+ ```markdown
32
+ ### <ชื่อปัญหา> · เจอ N ครั้ง · อัปเดต YYYY-MM-DD
33
+ - **อาการ/error:** ...
34
+ - **trigger:** ...
35
+ - **root cause:** ...
36
+ - **วิธีแก้:** ...
37
+ - **ป้องกันซ้ำ:** ...
38
+ - **มาจาก topic:** <slug>
39
+ ```
@@ -0,0 +1,25 @@
1
+ # CLAUDE.md
2
+
3
+ โปรเจกต์นี้ใช้ **Warnyin Standard Workflow** — มาตรฐานกลางของ ways of work เดินงานผ่าน 5 stage:
4
+ `Discovery (optional) ▶ DESIGN ▶ BUILD ▶ VERIFY ▶ SHIP`
5
+
6
+ ## กฎหลัก
7
+ - แก่นของแต่ละ stage เป็น single source of truth ที่ `workflow/stages/` — **ทำตาม playbook นั้นเสมอ** ก่อนเริ่มงานใน stage
8
+ - อย่า duplicate logic ของ workflow ลงที่อื่น ถ้าต้องแก้พฤติกรรมให้แก้ที่ `workflow/stages/`
9
+ - output ของงานจริงเก็บใน `warnyin-stages/<slug>/` (copy จาก template `warnyin-stages/[topic]/`)
10
+ - ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/` — เริ่มอ่าน `docs/project.md` เสมอใน Discovery
11
+
12
+ ## Slash commands (namespace `warnyin:`)
13
+ - `/warnyin:init` → วิเคราะห์โปรเจกต์ + เติม `docs/` ครั้งแรกหลังติดตั้ง (`workflow/init.md`)
14
+ - `/warnyin:discovery [topic]` → Discovery stage (`workflow/stages/discovery.md`)
15
+ - `/warnyin:design [slug] [change]` → DESIGN stage (`workflow/stages/design.md`)
16
+ - `/warnyin:build [slug]` → BUILD stage — fan-out sub-agent ตาม dependency (`workflow/stages/build.md` + `workflow/scripts/build-wave.mjs`)
17
+ - `/warnyin:verify [slug]` → VERIFY stage — strategy tester เทส local env + UXUI แก้จนผ่าน (`workflow/stages/verify.md`)
18
+ - `/warnyin:ship [slug]` → SHIP stage — ส่งมอบ: promote ความรู้ขึ้น `docs/` + archive topic (`workflow/stages/ship.md`)
19
+
20
+ ## รองรับหลาย AI
21
+ Claude Code อ่าน `.claude/` + ไฟล์นี้, ส่วน Codex/Antigravity อ่าน `AGENTS.md`
22
+ ทุกเครื่องชี้กลับมาที่ playbook กลางชุดเดียวกันใน `workflow/stages/` — ดูภาพรวมที่ `workflow/README.md`
23
+
24
+ ## อัปเดต workflow
25
+ `npx @warnyin/agents --update` — เขียนทับเฉพาะ playbook กลาง (`workflow/`, `.claude/commands/warnyin/`, template `warnyin-stages/[topic]/`) ไม่แตะ `docs/` และงานจริงใน `warnyin-stages/`
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@warnyin/agents",
3
+ "version": "0.1.0",
4
+ "description": "Warnyin Standard Workflow installer — 5-stage ways of work (Discovery/DESIGN/BUILD/VERIFY/SHIP) สำหรับทุกโปรเจกต์",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "bin": {
11
+ "warnyin-agents": "bin/cli.mjs"
12
+ },
13
+ "files": [
14
+ "bin",
15
+ "installer",
16
+ "workflow",
17
+ "docs",
18
+ "warnyin-stages",
19
+ ".claude",
20
+ "CLAUDE.md",
21
+ "AGENTS.md"
22
+ ],
23
+ "engines": {
24
+ "node": ">=18"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/warnyin/warnyin-agents.git"
29
+ }
30
+ }
@@ -0,0 +1,58 @@
1
+ # Build Report — <ชื่อ change>
2
+
3
+ > Output ของ BUILD stage · playbook: `workflow/stages/build.md`
4
+ > รายงานผลการ implement ต่อ task + การ integrate
5
+
6
+ | | |
7
+ |---|---|
8
+ | **Slug** | `<kebab-case>` |
9
+ | **Build branch** | `<branch>` |
10
+ | **Isolation** | `worktree` / `shared-tree` |
11
+ | **วันที่** | `YYYY-MM-DD` |
12
+ | **ผลรวม** | ผ่าน __ / ล้ม __ / ทั้งหมด __ task |
13
+
14
+ ## 1. Execution plan (waves ตาม dependency)
15
+ ```
16
+ wave 1 (parallel): task-a, task-b
17
+ wave 2: task-c (ขึ้นกับ task-a)
18
+ wave 3: task-d (ขึ้นกับ task-b, task-c)
19
+ ```
20
+
21
+ ## 2. ผลต่อ task
22
+ | Wave | Task | สถานะ | Test/Lint | ไฟล์ที่แก้ | Branch | หมายเหตุ |
23
+ |---|---|---|---|---|---|---|
24
+ | 1 | task-a | ✅ passed | | | | |
25
+ | 1 | task-b | ❌ failed | | | | เหตุผล... |
26
+
27
+ ## 3. Integration notes
28
+ - การ merge แต่ละ wave / conflict ที่เจอและวิธีแก้:
29
+
30
+ ## 3.5 Full build & test gate (หลัง integrate ทุก wave)
31
+ > รัน build ทั้งหมด + test suite ทั้งหมด (รวม unit test) บน build branch — ต้องเขียวหมดก่อนปิด BUILD
32
+
33
+ | Component | Build | Unit test | Test อื่น | รอบที่แก้ |
34
+ |---|---|---|---|---|
35
+ | api-service | ✅ / ❌ | ผ่าน __/__ | | |
36
+ | admin-console | | | | |
37
+
38
+ - error ที่เจอตอนรวม + วิธีแก้:
39
+
40
+ ## 4. ปัญหา/ค้าง (ถ้ามี)
41
+ - task ที่ล้ม + สาเหตุ + แผนแก้:
42
+
43
+ ## 5. Rule/standard ใหม่ที่ note ไว้ (รอ SHIP)
44
+ > รวบรวมจาก `tasks/<task>/rule.md` และ `standard.md` — รอ SHIP อัปเดตไฟล์กลางใน `docs/`
45
+ -
46
+
47
+ ## 6. ปัญหายาก/ซ้ำที่เจอ
48
+ > บันทึกละเอียดที่ `./troubleshooting.md` (SHIP ยกขึ้น `docs/troubleshooting.md`)
49
+ - ดู `./troubleshooting.md`
50
+
51
+ ## ✅ Gate → VERIFY (ดู `workflow/stages/build.md` ข้อ 7)
52
+ - [ ] ทุก task implement + merge เข้า build branch แล้ว
53
+ - [ ] ทุก task `passed` (test/build เขียว) ไม่มี `failed` ค้าง
54
+ - [ ] ไม่มี merge conflict ค้าง
55
+ - [ ] Full build ของทุก component ผ่าน (ไม่มี build error)
56
+ - [ ] test suite ทั้งหมด (รวม unit test) เขียวหมดบน build branch
57
+ - [ ] build.md สรุปครบทุก task + ผล full build/test
58
+ - [ ] ไม่แตะ rule/standard กลางใน docs/
@@ -0,0 +1,21 @@
1
+ # Business — <ชื่อ change>
2
+
3
+ > Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
4
+ > **optional** — ข้ามได้ถ้า change เล็ก (เช่น fix bug นิดหน่อย)
5
+
6
+ ## 1. เป้าหมายเชิงธุรกิจ (what & why)
7
+ - ทำ change นี้เพื่ออะไร / แก้ปัญหาธุรกิจอะไร:
8
+ - ผูกกับเป้าหมายโปรเจกต์ (`docs/project.md`) อย่างไร:
9
+
10
+ ## 2. Persona / ใครได้ประโยชน์
11
+ - ผู้ใช้/ผู้มีส่วนได้ส่วนเสีย:
12
+ - คุณค่าที่เขาได้รับ:
13
+
14
+ ## 3. Success metric (วัดผลได้)
15
+ - ตัวชี้วัดความสำเร็จ:
16
+ - เป้าหมายตัวเลข (ถ้ามี):
17
+
18
+ ## 4. ขอบเขตเชิงธุรกิจ / ข้อจำกัด
19
+ - in scope:
20
+ - out of scope:
21
+ - ข้อจำกัด (compliance, เวลา, งบ ฯลฯ):
@@ -0,0 +1,42 @@
1
+ # Design (How) — <ชื่อ change>
2
+
3
+ > Output ของ DESIGN stage · playbook: `workflow/stages/design.md`
4
+ > ออกแบบเชิงเทคนิคแบบ **vertical slice architecture** — แต่ละ slice ตัดผ่านทุก layer ทำงาน end-to-end
5
+
6
+ ## 1. ภาพรวมสถาปัตยกรรม
7
+ - component/service ที่เกี่ยวข้อง (อิง `docs/techstack/*`):
8
+ - แนวทางหลัก:
9
+
10
+ ## 2. Vertical slices
11
+ > หนึ่ง slice = หนึ่งหน่วยคุณค่า end-to-end (UI → API → domain → data → test) → จะกลายเป็น 1 task
12
+ > **ไม่แบ่งตาม layer แนวนอน**
13
+
14
+ | # | Slice (ส่งมอบคุณค่าอะไร) | ตัดผ่าน layer ไหน | → task |
15
+ |---|---|---|---|
16
+ | 1 | | UI · API · domain · data · test | `tasks/<task-1>/` |
17
+ | 2 | | | `tasks/<task-2>/` |
18
+
19
+ ## 3. Data model / schema
20
+ - entity / ตาราง / field ที่เพิ่มหรือแก้:
21
+ - migration (ถ้ามี):
22
+
23
+ ## 4. Interface / contract
24
+ - API contract / event / interface ระหว่าง component:
25
+
26
+ ## 5. Flow
27
+ - data-flow:
28
+ - user-flow:
29
+
30
+ ## 6. ผลกระทบต่อระบบเดิม
31
+ - จุดที่ต้องระวัง / backward compatibility:
32
+
33
+ ## 7. Dependency ระหว่าง slice/task
34
+ > slice/task เชื่อมกันยังไง ลำดับการทำ
35
+
36
+ ```
37
+ task-1 ──▶ task-2 ──▶ task-3
38
+ └──▶ task-4
39
+ ```
40
+
41
+ ## 8. Test strategy ระดับ design
42
+ - จะยืนยันว่า design ทำงานถูกอย่างไร (ภาพรวม — รายละเอียดอยู่ใน task spec):