@warnyin/agents 0.1.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.
Files changed (87) hide show
  1. package/.claude/agents/warnyin-infra.md +13 -0
  2. package/.claude/agents/warnyin-qa.md +13 -0
  3. package/.claude/agents/warnyin-sa.md +13 -0
  4. package/.claude/agents/warnyin-security.md +13 -0
  5. package/.claude/agents/warnyin-tech-lead.md +13 -0
  6. package/.claude/commands/warnyin/build.md +9 -9
  7. package/.claude/commands/warnyin/design.md +5 -4
  8. package/.claude/commands/warnyin/discovery.md +3 -3
  9. package/.claude/commands/warnyin/init.md +1 -1
  10. package/.claude/commands/warnyin/install-skill.md +14 -0
  11. package/.claude/commands/warnyin/ship.md +5 -5
  12. package/.claude/commands/warnyin/update-codemaps.md +12 -0
  13. package/.claude/commands/warnyin/verify.md +5 -5
  14. package/AGENTS.md +12 -12
  15. package/CLAUDE.md +16 -13
  16. package/README.md +121 -0
  17. package/bin/cli.mjs +51 -9
  18. package/package.json +5 -7
  19. package/{installer → warnyin/installer}/templates/CLAUDE.md +13 -11
  20. package/warnyin/template/docs/codemap/index.md +18 -0
  21. package/warnyin/template/docs/features/[feature-name]/business.md +5 -0
  22. package/warnyin/template/docs/features/[feature-name]/feature.md +5 -0
  23. package/warnyin/template/docs/infra.md +16 -0
  24. package/warnyin/template/docs/project.md +18 -0
  25. package/warnyin/template/docs/rule.md +7 -0
  26. package/warnyin/template/docs/techstack/[component]/about.md +6 -0
  27. package/warnyin/template/docs/techstack/[component]/rule.md +6 -0
  28. package/warnyin/template/docs/techstack/[component]/standard.md +6 -0
  29. package/warnyin/template/docs/techstack/[component]/structure.md +7 -0
  30. package/warnyin/template/docs/techstack/[component]/test.md +7 -0
  31. package/{docs → warnyin/template/docs}/troubleshooting.md +32 -39
  32. package/{warnyin-stages → warnyin/template/stages}/[topic]/build.md +2 -2
  33. package/{warnyin-stages → warnyin/template/stages}/[topic]/business.md +1 -1
  34. package/{warnyin-stages → warnyin/template/stages}/[topic]/design.md +1 -1
  35. package/{warnyin-stages → warnyin/template/stages}/[topic]/discovery.md +2 -2
  36. package/{warnyin-stages → warnyin/template/stages}/[topic]/proposal.md +1 -1
  37. package/{warnyin-stages → warnyin/template/stages}/[topic]/research.md +1 -1
  38. package/{warnyin-stages → warnyin/template/stages}/[topic]/ship.md +3 -3
  39. package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/issue.md +1 -1
  40. package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/rule.md +1 -1
  41. package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/spec.md +1 -1
  42. package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/standard.md +1 -1
  43. package/{warnyin-stages → warnyin/template/stages}/[topic]/tasks/[task-name]/task.md +1 -1
  44. package/{warnyin-stages → warnyin/template/stages}/[topic]/test.md +1 -1
  45. package/{warnyin-stages → warnyin/template/stages}/[topic]/verify.md +2 -2
  46. package/warnyin/workflow/README.md +92 -0
  47. package/warnyin/workflow/codemap.md +91 -0
  48. package/{workflow → warnyin/workflow}/init.md +3 -1
  49. package/warnyin/workflow/roles/README.md +46 -0
  50. package/warnyin/workflow/roles/ba.md +25 -0
  51. package/warnyin/workflow/roles/developer.md +28 -0
  52. package/warnyin/workflow/roles/infra.md +24 -0
  53. package/warnyin/workflow/roles/po.md +28 -0
  54. package/warnyin/workflow/roles/qa.md +33 -0
  55. package/warnyin/workflow/roles/sa.md +28 -0
  56. package/warnyin/workflow/roles/security.md +29 -0
  57. package/warnyin/workflow/roles/tech-lead.md +28 -0
  58. package/{workflow → warnyin/workflow}/scripts/build-wave.mjs +5 -4
  59. package/{workflow → warnyin/workflow}/stages/build.md +10 -9
  60. package/{workflow → warnyin/workflow}/stages/design.md +28 -19
  61. package/{workflow → warnyin/workflow}/stages/discovery.md +7 -6
  62. package/{workflow → warnyin/workflow}/stages/ship.md +8 -8
  63. package/{workflow → warnyin/workflow}/stages/verify.md +5 -4
  64. package/docs/features/[feature-name]/business.md +0 -0
  65. package/docs/features/[feature-name]/feature.md +0 -0
  66. package/docs/infra.md +0 -0
  67. package/docs/project.md +0 -0
  68. package/docs/rule.md +0 -0
  69. package/docs/techstack/admin-console/about.md +0 -0
  70. package/docs/techstack/admin-console/rule.md +0 -0
  71. package/docs/techstack/admin-console/standard.md +0 -0
  72. package/docs/techstack/admin-console/structure.md +0 -0
  73. package/docs/techstack/admin-console/test.md +0 -0
  74. package/docs/techstack/api-service/about.md +0 -0
  75. package/docs/techstack/api-service/rule.md +0 -0
  76. package/docs/techstack/api-service/standard.md +0 -0
  77. package/docs/techstack/api-service/structure.md +0 -0
  78. package/docs/techstack/api-service/test.md +0 -0
  79. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/business.md +0 -0
  80. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/design.md +0 -0
  81. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/discovery.md +0 -0
  82. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/proposal.md +0 -0
  83. package/warnyin-stages/achieved/[YYYY-MM-DD-topic]/research.md +0 -0
  84. package/workflow/README.md +0 -90
  85. /package/{docs/codemap/index.md → warnyin/stages/achieved/.gitkeep} +0 -0
  86. /package/{warnyin-stages → warnyin/stages}/context.md +0 -0
  87. /package/{warnyin-stages → warnyin/template/stages}/[topic]/troubleshooting.md +0 -0
@@ -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-stages/<slug>/discovery.md`, `research.md`
24
+ 5. ถ้ามี Discovery → `warnyin/stages/<slug>/discovery.md`, `research.md`
25
25
  6. โค้ดจริงที่เกี่ยวข้อง (inspect เพื่อตอบคำถามแทนการเดา)
26
26
 
27
27
  ---
@@ -33,47 +33,55 @@
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. **Dry-run ก่อนเข้า BUILD (optional — ถาม user ก่อนเสมอ)** — หลังเขียนไฟล์ task ครบ เสนอ user ว่าจะ dry-run ทั้งหมดเพื่อหาจุดบกพร่องไหม ถ้า ok → สแกนทุก task แบบขนาน (read-only) หา **defer/blocker** แล้วแก้ DESIGN จนไม่มี blocker ค้าง (ดูขั้นตอนข้อ 4.9) — การแก้ **ห้ามเดา ห้ามคิดขึ้นเอง**
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
+ 8. **Dry-run ก่อนเข้า BUILD (optional — ถาม user ก่อนเสมอ)** — หลังเขียนไฟล์ task ครบ เสนอ user ว่าจะ dry-run ทั้งหมดเพื่อหาจุดบกพร่องไหม ถ้า ok → สแกนทุก task แบบขนาน (read-only) หา **defer/blocker** แล้วแก้ DESIGN จนไม่มี blocker ค้าง (ดูขั้นตอนข้อ 4.10) — การแก้ **ห้ามเดา ห้ามคิดขึ้นเอง**
37
39
 
38
40
  ---
39
41
 
40
42
  ## 4. ลำดับขั้นการทำงาน (process)
41
43
 
42
- 1. **เตรียมพื้นที่:** ใช้/สร้างโฟลเดอร์ `warnyin-stages/<slug>/` (ถ้ามาจาก Discovery ใช้อันเดิม)
44
+ 1. **เตรียมพื้นที่:** ใช้/สร้างโฟลเดอร์ `warnyin/stages/<slug>/` (ถ้ามาจาก Discovery ใช้อันเดิม)
43
45
  2. **Ground + เคลียร์ความไม่ชัด:** อ่าน Input; ทุกจุดกำกวมเรื่อง design → ถามทีละข้อ + recommended answer จนชัด (ถ้าใหญ่/ไม่ชัดมาก → แนะนำ Discovery ก่อน)
44
46
  3. **business.md** *(optional — ข้ามได้ถ้า change เล็ก เช่น fix bug นิดหน่อย)*: what & why เชิงธุรกิจ — goal, คุณค่า, persona, success metric
45
47
  4. **proposal.md** (what & why): สรุป change ที่จะทำ, เหตุผล, ทางเลือกที่พิจารณา/ตัดทิ้ง, scope in/out
46
- 5. **design.md** (how): ออกแบบเชิงเทคนิคแบบ vertical slice — slice มีอะไรบ้าง, แต่ละ slice ตัดผ่าน layer ไหน, data model, interface/contract, flow, ผลกระทบต่อระบบเดิม
47
- 6. **แตก tasks:** แปลง design เป็น task (= vertical slice / step ที่แก้); task ซับซ้อน แตก **sub-task** ย่อย; เขียน **dependency graph / ลำดับ** ให้ sub-task เชื่อมกัน
48
- 7. **rule check ต่อ task:** เปิด `docs/techstack/<component>/rule.md` หา rule ที่ task นี้ต้องโฟกัส ใส่ใน `tasks/<task>/rule.md`; rule ใหม่ที่อยากเพิ่ม note ใน section "เสนอเพิ่ม (รอ SHIP)"
49
- 8. **เช็ค Gate (ข้อ 8)** เมื่อผ่าน จึง **เขียนไฟล์ task ครบทุกใบ**
50
- 9. **Dry-run (optional ถาม user ก่อน):** ถาม user ว่าต้องการ dry-run ทั้งหมดเพื่อหาจุดบกพร่องก่อนเข้า BUILD ไหม — ถ้า ok:
48
+ 5. **design.md** (how): ออกแบบเชิงเทคนิคแบบ vertical slice — slice มีอะไรบ้าง, แต่ละ slice ตัดผ่าน layer ไหน, data model, interface/contract, flow, ผลกระทบต่อระบบเดิม (ใช้ lens `warnyin/workflow/roles/sa.md`)
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 ใน `warnyin/workflow/roles/<role>.md` แบ่งเป็น **blocker / suggestion**
51
+ 2. รวมความเห็นทุก roleสรุปให้ user เห็นภาพ
52
+ 3. **blocker แก้ design ให้ครบ** โดยห้ามเดา ติดจริงถาม user ทีละข้อ + เสนอคำตอบแนะนำ; suggestion พิจารณา/บันทึกเหตุผลถ้าไม่ทำ
53
+ 4. บันทึกสรุปผล panel + สิ่งที่แก้ ลงท้าย `design.md` (section "Design review")
54
+ 5. เครื่องที่ fan-out ไม่ได้ → รีวิวทีละ role ด้วย checklist เดียวกัน
55
+ 7. **แตก tasks:** แปลง design เป็น task (= vertical slice / step ที่แก้); task ซับซ้อน → แตก **sub-task** ย่อย; เขียน **dependency graph / ลำดับ** ให้ sub-task เชื่อมกัน
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 `warnyin/workflow/roles/tech-lead.md`)
58
+ 10. **Dry-run (optional — ถาม user ก่อน):** ถาม user ว่าต้องการ dry-run ทั้งหมดเพื่อหาจุดบกพร่องก่อนเข้า BUILD ไหม — ถ้า ok:
51
59
  1. **fan-out agent หนึ่งตัวต่อหนึ่ง task แบบขนาน (read-only — ห้ามแก้โค้ด/ไฟล์ design)** — แต่ละตัวอ่าน task ทั้ง 4 ไฟล์ + `design.md`/`proposal.md` + โค้ดจริงที่เกี่ยว แล้ว "เดิน implement ในหัว" เพื่อหา:
52
60
  - **blocker** — สิ่งที่ทำให้ implement ตาม spec ไม่ได้ (ขัดแย้งกับโค้ดจริง/กับ task อื่น, ข้อมูล/spec ขาด, dependency ผิด) — BUILD จะล้มถ้าไม่แก้
53
61
  - **defer** — จุดที่ตัดสินใจ/ทำทีหลังได้ ไม่ block การเริ่ม BUILD แต่ต้องบันทึกและ track
54
- 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`); ไม่พบ → ไม่ต้องสร้างไฟล์
55
63
  3. รันครบทุก task แล้ว → **สรุปผลรวม** (จำนวน blocker/defer ต่อ task) ให้ user เห็นภาพ
56
64
  4. **หาวิธีแก้ DESIGN ตาม issue** (แก้ `design.md` / task ที่กระทบ) โดย **ห้ามเดา ห้ามคิดขึ้นเอง** — ติดจริงๆ ให้สัมภาษณ์ user **ถามทีละข้อ + เสนอคำตอบแนะนำทุกครั้ง**; คำถามที่โค้ดตอบได้ → ไปอ่านโค้ดเอง
57
65
  5. แก้แล้ว rerun dry-run เฉพาะ task ที่กระทบ วนจน **ไม่มี blocker ค้าง** (อัปเดตสถานะใน `issue.md` — defer ที่เหลือให้ user รับทราบ)
58
- 10. **เสนอเข้า BUILD:** พร้อม implement ด้วย `/warnyin:build`
66
+ 11. **เสนอเข้า BUILD:** พร้อม implement ด้วย `/warnyin:build`
59
67
 
60
68
  > generate ไฟล์ task หลายใบพร้อมกันได้โดยใช้ sub-agent (เช่น fan-out หนึ่ง agent ต่อหนึ่ง task) — แต่ต้องผ่าน Gate ก่อนเสมอ
61
69
  > เครื่องที่ fan-out ขนานไม่ได้ (ไม่มี sub-agent tool) → dry-run สแกนทีละ task ตามลำดับด้วยหลักการเดียวกัน
62
70
 
63
71
  ---
64
72
 
65
- ## 5. Output (สร้างที่ `warnyin-stages/<slug>/`)
73
+ ## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
66
74
 
67
75
  | ไฟล์ | เนื้อหา | optional? | template |
68
76
  |---|---|---|---|
69
- | `business.md` | what & why เชิงธุรกิจ (goal, persona, success metric) | ✅ ข้ามได้ถ้า change เล็ก | `[topic]/business.md` |
70
- | `proposal.md` | what & why ของ change + ทางเลือก + scope | จำเป็น | `[topic]/proposal.md` |
71
- | `design.md` | how — vertical slice, data model, contract, flow | จำเป็น | `[topic]/design.md` |
72
- | `tasks/<task-name>/spec.md` | spec เฉพาะ task (ดูข้อ 6) | จำเป็นต่อ task | `[topic]/tasks/[task-name]/spec.md` |
73
- | `tasks/<task-name>/standard.md` | pattern โค้ด/shared component อิง techstack standard | จำเป็นต่อ task | `[topic]/tasks/[task-name]/standard.md` |
74
- | `tasks/<task-name>/rule.md` | rule ที่ต้อง follow + rule ที่เสนอเพิ่ม (รอ SHIP) | จำเป็นต่อ task | `[topic]/tasks/[task-name]/rule.md` |
75
- | `tasks/<task-name>/task.md` | รายละเอียด task + sub-tasks + dependency + acceptance | จำเป็นต่อ task | `[topic]/tasks/[task-name]/task.md` |
76
- | `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` |
77
85
 
78
86
  ---
79
87
 
@@ -102,6 +110,7 @@
102
110
  - [ ] ทุก task มี `spec.md` + `standard.md` + `rule.md` + `task.md` ครบ
103
111
  - [ ] dependency / ลำดับระหว่าง task และ sub-task ชัดเจน เชื่อมต่อกัน
104
112
  - [ ] rule ที่ต้อง follow ถูกระบุครบ; rule/standard ใหม่ที่อยากเพิ่มถูก note ไว้ (รอ SHIP)
113
+ - [ ] ถ้าทำ review panel: **blocker จากทุก role ถูกแก้/ปิดครบ** — สรุปผลบันทึกใน `design.md` section "Design review"
105
114
  - [ ] ถ้าทำ dry-run: **ไม่มี blocker ค้าง** — ทุก issue ถูกแก้/ปิดใน `issue.md`, defer ที่เหลือ user รับทราบแล้ว
106
115
 
107
116
  ยังไม่ครบ → ห้ามเขียนไฟล์ task / ห้ามโยน sub-agent / ห้ามข้ามไป BUILD
@@ -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-stages/context.md` และ topic ที่ `achieved/` ที่ใกล้เคียง — เคยทำอะไรไปแล้ว
26
+ 5. `warnyin/stages/context.md` และ topic ที่ `achieved/` ที่ใกล้เคียง — เคยทำอะไรไปแล้ว
27
27
 
28
28
  ---
29
29
 
@@ -36,6 +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** (`warnyin/workflow/roles/ba.md` — business process, ข้อยกเว้น, ข้อมูล, ข้อจำกัด) และ **PO** (`warnyin/workflow/roles/po.md` — คุณค่า, priority, MVP, scope out, success metric) เพื่อให้คำถามครบมุมไม่หลุดประเด็น
39
40
 
40
41
  ### โหมด "ซักถามฉันหน่อย" (grill mode)
41
42
  เมื่อ user สั่ง grill → **ซักถามอย่างไม่หยุดหย่อนทุกแง่มุมของแผน** จนเข้าใจตรงกัน:
@@ -45,7 +46,7 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
45
46
 
46
47
  ## 4. ลำดับขั้นการทำงาน (process loop)
47
48
 
48
- 1. **เตรียมพื้นที่:** ถ้ายังไม่มีโฟลเดอร์ topic → copy `warnyin-stages/[topic]/` เป็น `warnyin-stages/<slug>/` (slug = kebab-case ของหัวข้องาน)
49
+ 1. **เตรียมพื้นที่:** ถ้ายังไม่มีโฟลเดอร์ topic → copy `warnyin/template/stages/[topic]/` เป็น `warnyin/stages/<slug>/` (slug = kebab-case ของหัวข้องาน)
49
50
  2. **Ground:** อ่าน Input ในข้อ 2 ให้ครบ สรุปความเข้าใจเริ่มต้น 3-5 บรรทัด ให้ user ยืนยัน
50
51
  3. **ตี scope กว้าง→แคบ ผ่านการสัมภาษณ์:** วนลูป — ถาม 1 ข้อ (พร้อม recommended answer) → user ตอบ → จดผลลง decision log → ถ้าตอบได้ด้วยโค้ดให้ไปอ่านเอง
51
52
  4. **research คู่ขนาน:** สิ่งที่ต้องค้นจริง (prior art, ทางเลือก technical, ข้อจำกัด) → จดลง `research.md` พร้อม evidence/links
@@ -53,14 +54,14 @@ Discovery คือขั้นตอน **ค้นหาข้อมูล + d
53
54
 
54
55
  ---
55
56
 
56
- ## 5. Output (สร้างที่ `warnyin-stages/<slug>/`)
57
+ ## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
57
58
 
58
59
  | ไฟล์ | เนื้อหา | template |
59
60
  |---|---|---|
60
- | `discovery.md` | decision log + shared understanding + scope + PRD ย่อ + feature ideas | `warnyin-stages/[topic]/discovery.md` |
61
- | `research.md` | คำถามวิจัย + วิธี/แหล่ง + findings + code inspection + implication | `warnyin-stages/[topic]/research.md` |
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` |
62
63
 
63
- > เริ่มจาก template (ไฟล์ใน `[topic]/`) เป็นโครง แล้วเติมเนื้อหาจริง อัปเดตทุกครั้งที่ได้ข้อสรุปใหม่
64
+ > เริ่มจาก template (ไฟล์ใน `warnyin/template/stages/[topic]/`) เป็นโครง แล้วเติมเนื้อหาจริง อัปเดตทุกครั้งที่ได้ข้อสรุปใหม่
64
65
 
65
66
  ---
66
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-stages/achieved/`
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-stages/<slug>/` **ทุกไฟล์** — discovery, business, proposal, design, build, test, verify, troubleshooting, tasks/*
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-stages/<slug>/` → `warnyin-stages/achieved/<YYYY-MM-DD>-<slug>/` (วันที่ของวันที่ SHIP) **ก่อน** เริ่มแก้ `docs/` แล้วอ่านเนื้อหาจาก path ใหม่ระหว่าง promote
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-stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง (เช็คก่อนว่า VERIFY ผ่าน Gate แล้ว — มี `verify.md` สรุปผลผ่าน)
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-stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv` ถ้าเป็น git repo)
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 ให้ตรงกับโค้ดจริงปัจจุบัน (ตรวจจากโค้ดจริง อย่างน้อยทุกส่วนที่ change กระทบ)
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
+ | `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-stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว (ไม่เหลือใน `warnyin-stages/`)
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-stages/<slug>/tasks/*/spec.md` + `task.md`, `design.md`, `proposal.md`
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,15 +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. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `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 `warnyin/workflow/roles/qa.md` (lens: คิดแบบผู้ใช้จริง + คนหาเรื่อง, edge case, regression; checklist ครบทุกข้อ)
36
37
 
37
38
  ---
38
39
 
39
40
  ## 4. ลำดับขั้นการทำงาน (process)
40
41
 
41
- 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 ที่โล่ง (สถานะงานอยู่ในไฟล์ `warnyin/stages/<slug>/` ครบ ไม่หายไปกับ context) — VERIFY เป็นลูปเทส-แก้ที่อาจยาว ต้องมี context เหลือมากพอ; เครื่องอื่นที่ไม่มีคำสั่งนี้ → แนะนำเริ่ม session ใหม่
42
43
  1. **เข้าใจจุดประสงค์:** อ่าน spec/tasks/design → สรุปสิ่งที่ต้อง verify (functional + UX/UI)
43
44
  2. **วางแผนเทส → เขียน `test.md`:** ตาม guideline `docs/techstack/<component>/test.md`; ไม่มีก็เสนอวิธี (e2e smoke / integration / manual ฯลฯ) แล้วเขียนแผน
44
45
  3. **เตรียม local env:** รัน service ที่เกี่ยวข้องตาม `infra.md`
@@ -49,7 +50,7 @@
49
50
 
50
51
  ---
51
52
 
52
- ## 5. Output (สร้างที่ `warnyin-stages/<slug>/`)
53
+ ## 5. Output (สร้างที่ `warnyin/stages/<slug>/`)
53
54
 
54
55
  | ไฟล์ | เนื้อหา | ปลายทางตอน SHIP |
55
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
@@ -1,90 +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
- stages/
41
- discovery.md # playbook: Discovery (optional) ✅
42
- design.md # playbook: DESIGN ✅
43
- build.md # playbook: BUILD ✅
44
- verify.md # playbook: VERIFY ✅
45
- ship.md # playbook: SHIP ✅
46
- scripts/
47
- build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
48
-
49
- docs/ # ความรู้ถาวรระดับโปรเจกต์ (อ้างอิงข้ามงาน)
50
- project.md # ★ จุดเริ่มของ Discovery — อ่านก่อนเสมอ
51
- rule.md infra.md
52
- troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
53
- codemap/ features/ techstack/
54
-
55
- warnyin-stages/ # พื้นที่ทำงานจริง ตาม topic
56
- context.md
57
- [topic]/ # ★ template ของหนึ่งหน่วยงาน — copy ไปตั้งชื่อจริง
58
- discovery.md research.md # output ของ Discovery
59
- business.md proposal.md design.md # output ของ DESIGN
60
- tasks/[task-name]/... build.md # output ของ DESIGN (tasks) + BUILD (build.md)
61
- test.md verify.md # output ของ VERIFY
62
- troubleshooting.md ship.md # KB ระหว่างงาน + สรุปส่งมอบของ SHIP
63
- achieved/[YYYY-MM-DD-topic]/ # archive หลัง SHIP
64
- ```
65
-
66
- ---
67
-
68
- ## การติดตั้งไปโปรเจกต์อื่น
69
-
70
- ```bash
71
- cd my-project
72
- npx @warnyin/agents # ติดตั้ง (ข้ามไฟล์ที่มีอยู่ ไม่เขียนทับ)
73
- npx @warnyin/agents --update # อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
74
- npx @warnyin/agents --dry-run # ดูก่อนว่าจะสร้าง/อัปเดตอะไร
75
- # ทางสำรอง (ไม่ผ่าน npm): npx github:warnyin/warnyin-agents
76
- ```
77
-
78
- - โปรเจกต์ที่มี `CLAUDE.md`/`AGENTS.md` อยู่แล้ว → installer ต่อท้ายเป็น section ไม่เขียนทับ
79
- - `--update` เขียนทับเฉพาะ core (`workflow/`, `.claude/commands/warnyin/`, template `[topic]`) — ไม่แตะ `docs/` และงานจริง
80
- - หลังติดตั้ง → เปิด Claude Code แล้วรัน `/warnyin:init` ให้ agent วิเคราะห์โปรเจกต์ + เติม `docs/` (playbook: `workflow/init.md`)
81
-
82
- ## วิธีใช้
83
-
84
- 1. เริ่มงานใหม่ → copy `warnyin-stages/[topic]/` เป็น `warnyin-stages/<ชื่อ-งาน-kebab-case>/`
85
- 2. รัน stage ตามลำดับ (Discovery ข้ามได้ถ้าเข้าใจ scope ชัดแล้ว)
86
- - Claude Code: `/warnyin:discovery <topic>`, `/warnyin:design <slug> <change>`
87
- - Codex / Antigravity: บอกให้ทำตาม `workflow/stages/<stage>.md`
88
- 3. ผ่าน "gate" ของแต่ละ stage แล้วจึงไป stage ถัดไป
89
- 4. เมื่อ SHIP (`/warnyin:ship <slug>`) → promote ความรู้ของ topic ขึ้นเอกสารกลางใน `docs/`
90
- แล้วย้าย topic ไป `warnyin-stages/achieved/<YYYY-MM-DD>-<topic>/`
File without changes