@warnyin/agents 0.5.2 → 0.7.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 (71) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +10 -10
  3. package/package.json +17 -9
  4. package/{.claude → src/.claude}/agents/warnyin-infra.md +1 -1
  5. package/{.claude → src/.claude}/agents/warnyin-qa.md +1 -1
  6. package/{.claude → src/.claude}/agents/warnyin-sa.md +1 -1
  7. package/{.claude → src/.claude}/agents/warnyin-security.md +1 -1
  8. package/{.claude → src/.claude}/agents/warnyin-tech-lead.md +1 -1
  9. package/{.claude → src/.claude}/commands/warnyin/build.md +9 -9
  10. package/{.claude → src/.claude}/commands/warnyin/design.md +4 -4
  11. package/{.claude → src/.claude}/commands/warnyin/discovery.md +3 -3
  12. package/{.claude → src/.claude}/commands/warnyin/explore.md +1 -1
  13. package/{.claude → src/.claude}/commands/warnyin/init.md +2 -2
  14. package/{.claude → src/.claude}/commands/warnyin/install-skill.md +2 -2
  15. package/{.claude → src/.claude}/commands/warnyin/next.md +3 -3
  16. package/{.claude → src/.claude}/commands/warnyin/ship.md +5 -5
  17. package/{.claude → src/.claude}/commands/warnyin/update-codemaps.md +1 -1
  18. package/{.claude → src/.claude}/commands/warnyin/verify.md +5 -5
  19. package/{warnyin → src/.warnyin}/installer/templates/CLAUDE.md +15 -15
  20. package/{warnyin → src/.warnyin}/template/docs/codemap/index.md +1 -1
  21. package/{warnyin → src/.warnyin}/template/docs/troubleshooting.md +1 -1
  22. package/{warnyin → src/.warnyin}/template/stages/[topic]/build.md +2 -2
  23. package/{warnyin → src/.warnyin}/template/stages/[topic]/business.md +1 -1
  24. package/{warnyin → src/.warnyin}/template/stages/[topic]/design.md +1 -1
  25. package/{warnyin → src/.warnyin}/template/stages/[topic]/discovery.md +2 -2
  26. package/{warnyin → src/.warnyin}/template/stages/[topic]/proposal.md +1 -1
  27. package/{warnyin → src/.warnyin}/template/stages/[topic]/research.md +1 -1
  28. package/{warnyin → src/.warnyin}/template/stages/[topic]/ship.md +3 -3
  29. package/{warnyin → src/.warnyin}/template/stages/[topic]/tasks/[task-name]/issue.md +1 -1
  30. package/{warnyin → src/.warnyin}/template/stages/[topic]/tasks/[task-name]/rule.md +1 -1
  31. package/{warnyin → src/.warnyin}/template/stages/[topic]/tasks/[task-name]/spec.md +1 -1
  32. package/{warnyin → src/.warnyin}/template/stages/[topic]/tasks/[task-name]/standard.md +1 -1
  33. package/{warnyin → src/.warnyin}/template/stages/[topic]/tasks/[task-name]/task.md +1 -1
  34. package/{warnyin → src/.warnyin}/template/stages/[topic]/test.md +1 -1
  35. package/{warnyin → src/.warnyin}/template/stages/[topic]/verify.md +2 -2
  36. package/{warnyin → src/.warnyin}/workflow/README.md +13 -13
  37. package/{warnyin → src/.warnyin}/workflow/explore.md +2 -2
  38. package/{warnyin → src/.warnyin}/workflow/init.md +11 -11
  39. package/{warnyin → src/.warnyin}/workflow/next.md +3 -3
  40. package/{warnyin → src/.warnyin}/workflow/roles/developer.md +1 -1
  41. package/{warnyin → src/.warnyin}/workflow/scripts/build-wave.mjs +10 -8
  42. package/{warnyin → src/.warnyin}/workflow/stages/build.md +10 -10
  43. package/{warnyin → src/.warnyin}/workflow/stages/design.md +17 -17
  44. package/{warnyin → src/.warnyin}/workflow/stages/discovery.md +7 -7
  45. package/{warnyin → src/.warnyin}/workflow/stages/ship.md +8 -8
  46. package/{warnyin → src/.warnyin}/workflow/stages/verify.md +5 -5
  47. package/{AGENTS.md → src/AGENTS.md} +15 -15
  48. package/{bin → src/bin}/cli.mjs +52 -19
  49. package/CLAUDE.md +0 -40
  50. package/warnyin/stages/achieved/.gitkeep +0 -0
  51. package/warnyin/stages/context.md +0 -0
  52. /package/{warnyin → src/.warnyin}/template/docs/features/[feature-name]/business.md +0 -0
  53. /package/{warnyin → src/.warnyin}/template/docs/features/[feature-name]/feature.md +0 -0
  54. /package/{warnyin → src/.warnyin}/template/docs/infra.md +0 -0
  55. /package/{warnyin → src/.warnyin}/template/docs/project.md +0 -0
  56. /package/{warnyin → src/.warnyin}/template/docs/rule.md +0 -0
  57. /package/{warnyin → src/.warnyin}/template/docs/techstack/[component]/about.md +0 -0
  58. /package/{warnyin → src/.warnyin}/template/docs/techstack/[component]/rule.md +0 -0
  59. /package/{warnyin → src/.warnyin}/template/docs/techstack/[component]/standard.md +0 -0
  60. /package/{warnyin → src/.warnyin}/template/docs/techstack/[component]/structure.md +0 -0
  61. /package/{warnyin → src/.warnyin}/template/docs/techstack/[component]/test.md +0 -0
  62. /package/{warnyin → src/.warnyin}/template/stages/[topic]/troubleshooting.md +0 -0
  63. /package/{warnyin → src/.warnyin}/workflow/codemap.md +0 -0
  64. /package/{warnyin → src/.warnyin}/workflow/roles/README.md +0 -0
  65. /package/{warnyin → src/.warnyin}/workflow/roles/ba.md +0 -0
  66. /package/{warnyin → src/.warnyin}/workflow/roles/infra.md +0 -0
  67. /package/{warnyin → src/.warnyin}/workflow/roles/po.md +0 -0
  68. /package/{warnyin → src/.warnyin}/workflow/roles/qa.md +0 -0
  69. /package/{warnyin → src/.warnyin}/workflow/roles/sa.md +0 -0
  70. /package/{warnyin → src/.warnyin}/workflow/roles/security.md +0 -0
  71. /package/{warnyin → src/.warnyin}/workflow/roles/tech-lead.md +0 -0
@@ -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/stages/achieved/`
4
+ > เป้าหมาย: **ส่งมอบ** — promote ความรู้ระดับ topic ขึ้นเอกสารกลางใน `docs/` + archive topic เข้า `docs/stages/achieved/`
5
5
 
6
6
  ---
7
7
 
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## 2. Input ที่ต้องอ่านก่อนเริ่ม
19
19
 
20
- 1. `warnyin/stages/<slug>/` **ทุกไฟล์** — discovery, business, proposal, design, build, test, verify, troubleshooting, tasks/*
20
+ 1. `docs/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/stages/<slug>/` → `warnyin/stages/achieved/<YYYY-MM-DD>-<slug>/` (วันที่ของวันที่ SHIP) **ก่อน** เริ่มแก้ `docs/` แล้วอ่านเนื้อหาจาก path ใหม่ระหว่าง promote
33
+ 3. **★ Archive ก่อนอัปเดตเอกสาร** — ย้ายทั้งโฟลเดอร์ `docs/stages/<slug>/` → `docs/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/stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง (เช็คก่อนว่า VERIFY ผ่าน Gate แล้ว — มี `verify.md` สรุปผลผ่าน)
43
+ 1. **อ่านทำความเข้าใจ topic:** อ่าน `docs/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/stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv` ถ้าเป็น git repo)
46
+ 4. **★ Archive:** ย้ายทั้งโฟลเดอร์ → `docs/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 ให้ตรงกับโค้ดจริงปัจจุบัน ทำตาม playbook `warnyin/workflow/codemap.md` (Claude Code: `/warnyin:update-codemaps`)
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/stages/achieved/<YYYY-MM-DD>-<slug>/` | ทั้ง topic ที่ archive แล้ว + `ship.md` (สรุปการส่งมอบ) |
69
+ | `docs/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/stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว (ไม่เหลือใน `warnyin/stages/`)
75
+ - [ ] topic ถูกย้ายไป `docs/stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว (ไม่เหลือใน `docs/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/stages/<slug>/tasks/*/spec.md` + `task.md`, `design.md`, `proposal.md`
17
+ 1. **spec + tasks ทั้งหมด** — `docs/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/stages/<slug>/troubleshooting.md`** (เหมือน BUILD); เจอปัญหา → อ่าน `docs/troubleshooting.md` ก่อน
33
+ 6. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `docs/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 `warnyin/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/stages/<slug>/` ครบ ไม่หายไปกับ context) — VERIFY เป็นลูปเทส-แก้ที่อาจยาว ต้องมี context เหลือมากพอ; เครื่องอื่นที่ไม่มีคำสั่งนี้ → แนะนำเริ่ม session ใหม่
42
+ 0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม VERIFY ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `docs/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/stages/<slug>/`)
53
+ ## 5. Output (สร้างที่ `docs/stages/<slug>/`)
54
54
 
55
55
  | ไฟล์ | เนื้อหา | ปลายทางตอน SHIP |
56
56
  |---|---|---|
@@ -12,37 +12,37 @@ Discovery (optional) ──▶ DESIGN ──▶ BUILD ──▶ VERIFY ──▶
12
12
 
13
13
  ## กฎสำคัญ: ทำตาม playbook กลางเสมอ
14
14
 
15
- แก่นของแต่ละ stage คือ **single source of truth** อยู่ที่ `warnyin/workflow/stages/`
15
+ แก่นของแต่ละ stage คือ **single source of truth** อยู่ที่ `.warnyin/workflow/stages/`
16
16
  ก่อนทำงานใน stage ใด ให้เปิดอ่านไฟล์ playbook ของ stage นั้นแล้วทำตามอย่างเคร่งครัด
17
17
 
18
18
  | Stage | playbook | สถานะ |
19
19
  |---|---|---|
20
- | Discovery | `warnyin/workflow/stages/discovery.md` | ✅ พร้อมใช้ |
21
- | DESIGN | `warnyin/workflow/stages/design.md` | ✅ พร้อมใช้ |
22
- | BUILD | `warnyin/workflow/stages/build.md` | ✅ พร้อมใช้ |
23
- | VERIFY | `warnyin/workflow/stages/verify.md` | ✅ พร้อมใช้ |
24
- | SHIP | `warnyin/workflow/stages/ship.md` | ✅ พร้อมใช้ |
20
+ | Discovery | `.warnyin/workflow/stages/discovery.md` | ✅ พร้อมใช้ |
21
+ | DESIGN | `.warnyin/workflow/stages/design.md` | ✅ พร้อมใช้ |
22
+ | BUILD | `.warnyin/workflow/stages/build.md` | ✅ พร้อมใช้ |
23
+ | VERIFY | `.warnyin/workflow/stages/verify.md` | ✅ พร้อมใช้ |
24
+ | SHIP | `.warnyin/workflow/stages/ship.md` | ✅ พร้อมใช้ |
25
25
 
26
26
  ## วิธีเริ่ม
27
27
 
28
- 0. ครั้งแรกในโปรเจกต์ (docs/ ยังว่าง) → ทำตาม `warnyin/workflow/init.md` เพื่อวิเคราะห์โปรเจกต์ + เติม `docs/` ก่อน
29
- 1. อ่าน `warnyin/workflow/README.md` เพื่อเข้าใจภาพรวมและโครงสร้าง
30
- 2. งานใหม่ → copy `warnyin/template/stages/[topic]/` เป็น `warnyin/stages/<slug>/`
28
+ 0. ครั้งแรกในโปรเจกต์ (docs/ ยังว่าง) → ทำตาม `.warnyin/workflow/init.md` เพื่อวิเคราะห์โปรเจกต์ + เติม `docs/` ก่อน
29
+ 1. อ่าน `.warnyin/workflow/README.md` เพื่อเข้าใจภาพรวมและโครงสร้าง
30
+ 2. งานใหม่ → copy `.warnyin/template/stages/[topic]/` เป็น `docs/stages/<slug>/`
31
31
  3. รัน stage ตามลำดับ โดยทำตาม playbook ของแต่ละ stage
32
- 4. output ของงานเก็บใน `warnyin/stages/<slug>/`, ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/`
32
+ 4. output ของงานเก็บใน `docs/stages/<slug>/`, ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/`
33
33
 
34
34
  ## สำรวจโดยไม่สร้าง artifact (EXPLORE)
35
35
 
36
- อยากถาม/สำรวจข้อมูลเฉยๆ โดยไม่เปิด topic → ทำตาม `warnyin/workflow/explore.md`
36
+ อยากถาม/สำรวจข้อมูลเฉยๆ โดยไม่เปิด topic → ทำตาม `.warnyin/workflow/explore.md`
37
37
  (read-only เด็ดขาด — ไม่สร้าง/แก้ไฟล์ใดๆ จบที่คำตอบในแชท)
38
38
 
39
39
  ## เช็คงานค้าง / หาขั้นตอนถัดไป (NEXT)
40
40
 
41
- อยากรู้ว่ามีงานอะไรค้างและควรไปต่อยังไง → ทำตาม `warnyin/workflow/next.md`
42
- (สแกน `warnyin/stages/*` ระบุ stage ปัจจุบันจาก artifact จริง + gate ที่ขาด — read-only ไม่แก้ไฟล์)
41
+ อยากรู้ว่ามีงานอะไรค้างและควรไปต่อยังไง → ทำตาม `.warnyin/workflow/next.md`
42
+ (สแกน `docs/stages/*` ระบุ stage ปัจจุบันจาก artifact จริง + gate ที่ขาด — read-only ไม่แก้ไฟล์)
43
43
 
44
44
  ## รัน Discovery
45
45
 
46
- ทำตาม `warnyin/workflow/stages/discovery.md` — เริ่มอ่าน `docs/project.md`, ตี scope กว้าง→แคบ,
46
+ ทำตาม `.warnyin/workflow/stages/discovery.md` — เริ่มอ่าน `docs/project.md`, ตี scope กว้าง→แคบ,
47
47
  ถามทีละข้อพร้อมเสนอคำตอบที่แนะนำ, คำถามที่ตอบได้ด้วยโค้ดให้ไปอ่านโค้ดเอง,
48
- เขียน output ลง `warnyin/stages/<slug>/discovery.md` และ `research.md`
48
+ เขียน output ลง `docs/stages/<slug>/discovery.md` และ `research.md`
@@ -24,41 +24,57 @@ if (args.has('--help') || args.has('-h')) {
24
24
  ใช้งาน:
25
25
  npx @warnyin/agents ติดตั้ง (ข้ามไฟล์ที่มีอยู่แล้ว ไม่เขียนทับ)
26
26
  npx @warnyin/agents --update อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
27
- (เขียนทับเฉพาะ warnyin/workflow/, .claude/commands/warnyin/,
28
- template warnyin/template/stages/[topic] — ไม่แตะ docs/ และงานจริง)
27
+ (เขียนทับเฉพาะ .warnyin/workflow/, .claude/commands/warnyin/,
28
+ template .warnyin/template/stages/[topic] — ไม่แตะ docs/ และงานจริง)
29
29
  npx @warnyin/agents --dry-run แสดงรายการไฟล์ที่จะสร้าง/อัปเดต โดยไม่เขียนจริง
30
30
 
31
31
  หลังติดตั้ง: เปิด Claude Code ในโปรเจกต์ แล้วรัน /warnyin:init ให้ agent วิเคราะห์โปรเจกต์ + เติม docs/`)
32
32
  process.exit(0)
33
33
  }
34
34
 
35
+ // guard กัน self-install — เก็บไว้แบบ defensive (zero-cost)
36
+ // หลังย้าย source เข้า src/ → pkgRoot = src/ (sibling ของ bin/) จึงแทบไม่มีทาง === target (repo root / temp sandbox)
37
+ // → guard นี้เป็น no-op โดยตั้งใจในเคสปกติ/sandbox; ยังคงดักได้เฉพาะ edge case ที่ install ลงโฟลเดอร์ที่เป็น src/ เอง
35
38
  if (path.resolve(pkgRoot) === path.resolve(target)) {
36
39
  console.error('✖ กำลังรันอยู่ใน repo ของ warnyin-agents เอง — ให้ cd ไปที่โปรเจกต์ปลายทางก่อน')
37
40
  process.exit(1)
38
41
  }
39
42
 
40
43
  // โครงเก่า (≤0.2.x): workflow/ + warnyin-stages/ ที่ root — เตือนให้ย้ายเอง ไม่แตะงานจริงของ user
41
- const legacy = ['workflow', 'warnyin-stages'].filter((d) => fs.existsSync(path.join(target, d)))
42
- if (legacy.length) {
43
- console.warn(`⚠ พบโครงเลย์เอาต์เก่า (≤0.2.x): ${legacy.join(', ')}
44
- เวอร์ชันนี้ย้ายทุกอย่างไปใต้ warnyin/ — แนะนำย้ายด้วยตัวเองก่อน:
45
- 1. git mv warnyin-stages warnyin/stages # งานจริงของคุณ (ปลอดภัย ไม่ถูกแตะโดย installer)
46
- 2. git rm -r workflow # playbook เก่า (เวอร์ชันใหม่จะอยู่ที่ warnyin/workflow)
47
- 3. ลบ template เก่าถ้ามี: "warnyin/stages/[topic]", "docs/techstack/[component]", "docs/features/[feature-name]"
48
- (ย้ายไปรวมที่ warnyin/template/ แล้ว)
44
+ const legacyV2 = ['workflow', 'warnyin-stages'].filter((d) => fs.existsSync(path.join(target, d)))
45
+ if (legacyV2.length) {
46
+ console.warn(`⚠ พบโครงเลย์เอาต์เก่า (≤0.2.x): ${legacyV2.join(', ')}
47
+ เวอร์ชันนี้ย้าย core ไปใต้ .warnyin/ และงานจริงไป docs/stages/ — แนะนำย้ายด้วยตัวเองก่อน:
48
+ 1. git mv warnyin-stages docs/stages # งานจริงของคุณ (ปลอดภัย ไม่ถูกแตะโดย installer)
49
+ 2. git rm -r workflow # playbook เก่า (เวอร์ชันใหม่จะอยู่ที่ .warnyin/workflow)
49
50
  แล้วรันคำสั่งนี้อีกครั้ง\n`)
50
51
  }
51
52
 
53
+ // โครงเก่า (0.3–0.5.x): ทุกอย่างอยู่ใต้ warnyin/ ที่ root — เวอร์ชันนี้แยกเป็น .warnyin/ (core) + docs/stages (งานจริง)
54
+ const legacyV5 = ['workflow', 'template', 'installer', 'stages'].filter((d) =>
55
+ fs.existsSync(path.join(target, 'warnyin', d)),
56
+ )
57
+ if (legacyV5.length) {
58
+ console.warn(`⚠ พบโครงเลย์เอาต์เก่า (0.3–0.5.x): warnyin/{${legacyV5.join(', ')}}
59
+ เวอร์ชันนี้ย้าย core ไป .warnyin/ และงานจริงไป docs/stages/ — แนะนำย้ายด้วยตัวเองก่อน:
60
+ 1. git mv warnyin/stages docs/stages # งานจริงของคุณ (active + achieved) — ปลอดภัย ไม่ถูกแตะ
61
+ 2. git rm -r warnyin/workflow warnyin/template # core เก่า (เวอร์ชันใหม่ installer จะวางที่ .warnyin/)
62
+ แล้วรันคำสั่งนี้อีกครั้ง — installer จะวาง .warnyin/ ชุดใหม่ให้\n`)
63
+ }
64
+
52
65
  // core = playbook กลาง + command + agent + template — เขียนทับได้เมื่อ --update
53
66
  const CORE = [
54
- path.join('warnyin', 'workflow'),
55
- path.join('warnyin', 'template'),
67
+ path.join('.warnyin', 'workflow'),
68
+ path.join('.warnyin', 'template'),
56
69
  path.join('.claude', 'commands', 'warnyin'),
57
70
  path.join('.claude', 'agents'),
58
71
  ]
59
- // scaffold = พื้นที่ทำงานเป็นข้อมูลของโปรเจกต์ ไม่เขียนทับเด็ดขาด
60
- // (เจาะจง warnyin/stages warnyin/workflow + warnyin/template อยู่ใน CORE แล้ว ส่วน warnyin/installer เป็นของ installer ไม่ copy ไป target)
61
- const SCAFFOLD = [path.join('warnyin', 'stages')]
72
+ // scaffold = พื้นที่ทำงานเปล่าของโปรเจกต์installer "สร้างเอง" ไม่ copy tree จาก package
73
+ // (สำคัญ: ถ้า copy docs/stages จาก pkgRoot งานจริงของ repo ต้นทางจะรั่วไป target ทุกครั้ง ดู verify installer-test-ci)
74
+ const SCAFFOLD_FILES = [
75
+ path.join('docs', 'stages', 'context.md'), // บริบทงานที่จดไว้ (next/discovery/explore อ่าน "ถ้ามี")
76
+ path.join('docs', 'stages', 'achieved', '.gitkeep'), // ให้ git track โฟลเดอร์ archive เปล่า
77
+ ]
62
78
 
63
79
  const stats = { created: 0, updated: 0, skipped: 0 }
64
80
 
@@ -91,8 +107,25 @@ function copyTree(relDir, { overwrite }) {
91
107
  }
92
108
  }
93
109
 
94
- /** seed docs/ ของโปรเจกต์จาก warnyin/template/docs ข้ามโฟลเดอร์ template `[...]` (ไว้ให้ /warnyin:init copy เป็นชื่อจริง) และไม่ทับไฟล์ที่มีอยู่ */
95
- const TEMPLATE_DOCS = path.join('warnyin', 'template', 'docs')
110
+ /** สร้างโครง scaffold เปล่าของ docs/stages เอง (ไม่ copy จาก package กันงานจริงของ repo ต้นทางรั่วไป target) ไม่ทับไฟล์ที่มีอยู่ */
111
+ function ensureScaffold() {
112
+ for (const rel of SCAFFOLD_FILES) {
113
+ const dest = path.join(target, rel)
114
+ if (fs.existsSync(dest)) {
115
+ stats.skipped++
116
+ continue
117
+ }
118
+ if (!DRY) {
119
+ fs.mkdirSync(path.dirname(dest), { recursive: true })
120
+ fs.writeFileSync(dest, '')
121
+ }
122
+ stats.created++
123
+ console.log(` + ${rel}`)
124
+ }
125
+ }
126
+
127
+ /** seed docs/ ของโปรเจกต์จาก .warnyin/template/docs — ข้ามโฟลเดอร์ template `[...]` (ไว้ให้ /warnyin:init copy เป็นชื่อจริง) และไม่ทับไฟล์ที่มีอยู่ */
128
+ const TEMPLATE_DOCS = path.join('.warnyin', 'template', 'docs')
96
129
  function seedDocs(relDir = TEMPLATE_DOCS) {
97
130
  const srcDir = path.join(pkgRoot, relDir)
98
131
  if (!fs.existsSync(srcDir)) return
@@ -142,9 +175,9 @@ function installRootDoc(name, srcPath) {
142
175
  console.log(`Warnyin Standard Workflow → ${target}${DRY ? ' (dry-run)' : ''}\n`)
143
176
 
144
177
  for (const dir of CORE) copyTree(dir, { overwrite: UPDATE })
145
- for (const dir of SCAFFOLD) copyTree(dir, { overwrite: false })
178
+ ensureScaffold()
146
179
  seedDocs()
147
- installRootDoc('CLAUDE.md', path.join(pkgRoot, 'warnyin', 'installer', 'templates', 'CLAUDE.md'))
180
+ installRootDoc('CLAUDE.md', path.join(pkgRoot, '.warnyin', 'installer', 'templates', 'CLAUDE.md'))
148
181
  installRootDoc('AGENTS.md', path.join(pkgRoot, 'AGENTS.md'))
149
182
 
150
183
  console.log(`\nสรุป: สร้างใหม่ ${stats.created} · อัปเดต ${stats.updated} · ข้าม (มีอยู่แล้ว) ${stats.skipped}`)
package/CLAUDE.md DELETED
@@ -1,40 +0,0 @@
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 ที่ `warnyin/workflow/stages/` — **ทำตาม playbook นั้นเสมอ** ก่อนเริ่มงานใน stage
8
- - อย่า duplicate logic ของ workflow ลงที่อื่น ถ้าต้องแก้พฤติกรรมให้แก้ที่ `warnyin/workflow/stages/`
9
- - output ของงานจริงเก็บใน `warnyin/stages/<slug>/` (copy จาก template `warnyin/template/stages/[topic]/`)
10
- - ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/` — เริ่มอ่าน `docs/project.md` เสมอใน Discovery
11
- - role card กลางอยู่ที่ `warnyin/workflow/roles/` (BA/PO/SA/Tech Lead/Developer/QA/Security/Infra) — stage ไหนใช้ role ไหนดูใน playbook; reviewer subagent ของ Claude Code อยู่ที่ `.claude/agents/warnyin-*`
12
-
13
- ## Slash commands (namespace `warnyin:`)
14
- - `/warnyin:init` → วิเคราะห์โปรเจกต์ + เติม `docs/` ครั้งแรกหลังติดตั้ง (`.claude/commands/warnyin/init.md` → `warnyin/workflow/init.md`)
15
- - `/warnyin:install-skill [role]` → ติดตั้ง skill เสริมประจำ role (รายการอยู่ที่ตารางใน `warnyin/workflow/roles/README.md`)
16
- - `/warnyin:update-codemaps` → สแกนโครงสร้าง + สร้าง/อัปเดต codemap แบบ token-lean ใน `docs/codemap/` (`warnyin/workflow/codemap.md`)
17
- - `/warnyin:explore [คำถาม]` → สำรวจ/ตอบคำถามแบบ read-only — ไม่สร้าง artifact ใดๆ จบที่คำตอบในแชท (`warnyin/workflow/explore.md`)
18
- - `/warnyin:next [slug]` → เช็คงานค้างทุก topic + แนะนำ command ถัดไป แบบ read-only (`warnyin/workflow/next.md`)
19
- - `/warnyin:discovery [topic]` → Discovery stage (`.claude/commands/warnyin/discovery.md` → `warnyin/workflow/stages/discovery.md`)
20
- - `/warnyin:design [slug] [change]` → DESIGN stage (`.claude/commands/warnyin/design.md` → `warnyin/workflow/stages/design.md`)
21
- - `/warnyin:build [slug]` → BUILD stage — fan-out sub-agent ตาม dependency (`warnyin/workflow/stages/build.md` + `warnyin/workflow/scripts/build-wave.mjs`)
22
- - `/warnyin:verify [slug]` → VERIFY stage — strategy tester เทส local env + UXUI แก้จนผ่าน (`warnyin/workflow/stages/verify.md`)
23
- - `/warnyin:ship [slug]` → SHIP stage — ส่งมอบ: promote ความรู้ขึ้น `docs/` + archive topic (`warnyin/workflow/stages/ship.md`)
24
-
25
- ## การติดตั้งไปโปรเจกต์อื่น (npx installer)
26
- - `npx @warnyin/agents` (หรือสำรอง `npx github:warnyin/warnyin-agents`) → copy โครงทั้งหมดลงโปรเจกต์ปลายทาง (ข้ามไฟล์ที่มีอยู่, CLAUDE.md/AGENTS.md ที่มีอยู่จะต่อท้ายเป็น section)
27
- - `--update` → เขียนทับเฉพาะ core (`warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `warnyin/template/`) ไม่แตะ `docs/`/งานจริง
28
- - ตัว installer: `bin/cli.mjs` + template CLAUDE.md ของโปรเจกต์ปลายทางที่ `warnyin/installer/templates/CLAUDE.md` (แก้ commands list ที่ไหน ให้แก้ template นี้ด้วย; โฟลเดอร์นี้ไม่ถูก copy ไป target)
29
- - หลังติดตั้ง → รัน `/warnyin:init` เพื่อเติม `docs/`
30
-
31
- ## รองรับหลาย AI
32
- repo นี้ tool-agnostic: Claude Code อ่าน `.claude/` + ไฟล์นี้, ส่วน Codex/Antigravity อ่าน `AGENTS.md`
33
- ทุกเครื่องชี้กลับมาที่ playbook กลางชุดเดียวกันใน `warnyin/workflow/stages/` — ดูภาพรวมที่ `warnyin/workflow/README.md`
34
-
35
- ## สถานะการสร้าง workflow (อัปเดต 2026-06-04)
36
- ครบทั้ง 5 stage: Discovery ✅ · DESIGN ✅ · BUILD ✅ · VERIFY ✅ · SHIP ✅
37
- (playbook + command + template + build-wave.mjs ครบทุก stage)
38
-
39
- แพทเทิร์นการเติม/แก้ stage: playbook `warnyin/workflow/stages/<stage>.md` + command `.claude/commands/warnyin/<stage>.md` + อัปเดตตาราง stage ใน `AGENTS.md`/`CLAUDE.md`/`warnyin/workflow/README.md` + output template ใน `warnyin/template/stages/[topic]/`
40
- **สำคัญ: การเปลี่ยนพฤติกรรม stage ใดๆ ให้ user เป็นคนอธิบาย/ยืนยันก่อน อย่าเดาเอง**
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes