@warnyin/agents 0.11.0 → 0.12.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 (80) hide show
  1. package/CHANGELOG.md +120 -115
  2. package/README.md +148 -148
  3. package/package.json +38 -38
  4. package/src/.claude/agents/warnyin-infra.md +13 -13
  5. package/src/.claude/agents/warnyin-qa.md +13 -13
  6. package/src/.claude/agents/warnyin-sa.md +13 -13
  7. package/src/.claude/agents/warnyin-security.md +13 -13
  8. package/src/.claude/agents/warnyin-tech-lead.md +13 -13
  9. package/src/.claude/commands/warnyin/build.md +31 -31
  10. package/src/.claude/commands/warnyin/design.md +27 -27
  11. package/src/.claude/commands/warnyin/discovery.md +17 -17
  12. package/src/.claude/commands/warnyin/explore.md +14 -14
  13. package/src/.claude/commands/warnyin/init.md +12 -12
  14. package/src/.claude/commands/warnyin/install-skill.md +14 -14
  15. package/src/.claude/commands/warnyin/next.md +17 -17
  16. package/src/.claude/commands/warnyin/ship.md +28 -28
  17. package/src/.claude/commands/warnyin/triage.md +14 -0
  18. package/src/.claude/commands/warnyin/update-codemaps.md +12 -12
  19. package/src/.claude/commands/warnyin/verify.md +20 -20
  20. package/src/.claude/skills/explore/SKILL.md +8 -8
  21. package/src/.claude/skills/next/SKILL.md +8 -8
  22. package/src/.claude/skills/update-codemaps/SKILL.md +8 -8
  23. package/src/.warnyin/installer/templates/CLAUDE.md +30 -29
  24. package/src/.warnyin/template/docs/codemap/index.md +18 -18
  25. package/src/.warnyin/template/docs/features/[feature-name]/business.md +5 -5
  26. package/src/.warnyin/template/docs/features/[feature-name]/feature.md +5 -5
  27. package/src/.warnyin/template/docs/features/[feature-name]/spec.md +16 -16
  28. package/src/.warnyin/template/docs/infra.md +16 -16
  29. package/src/.warnyin/template/docs/project.md +18 -18
  30. package/src/.warnyin/template/docs/rule.md +7 -7
  31. package/src/.warnyin/template/docs/techstack/[component]/about.md +6 -6
  32. package/src/.warnyin/template/docs/techstack/[component]/rule.md +6 -6
  33. package/src/.warnyin/template/docs/techstack/[component]/standard.md +6 -6
  34. package/src/.warnyin/template/docs/techstack/[component]/structure.md +7 -7
  35. package/src/.warnyin/template/docs/techstack/[component]/test.md +7 -7
  36. package/src/.warnyin/template/docs/troubleshooting.md +32 -32
  37. package/src/.warnyin/template/stages/[topic]/build.md +58 -58
  38. package/src/.warnyin/template/stages/[topic]/business.md +21 -21
  39. package/src/.warnyin/template/stages/[topic]/design.md +63 -63
  40. package/src/.warnyin/template/stages/[topic]/discovery.md +69 -69
  41. package/src/.warnyin/template/stages/[topic]/proposal.md +43 -43
  42. package/src/.warnyin/template/stages/[topic]/research.md +49 -49
  43. package/src/.warnyin/template/stages/[topic]/ship.md +32 -32
  44. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/issue.md +19 -19
  45. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/rule.md +13 -13
  46. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/spec.md +36 -36
  47. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/standard.md +21 -21
  48. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/task.md +40 -40
  49. package/src/.warnyin/template/stages/[topic]/test.md +46 -46
  50. package/src/.warnyin/template/stages/[topic]/troubleshooting.md +34 -34
  51. package/src/.warnyin/template/stages/[topic]/verify.md +44 -44
  52. package/src/.warnyin/workflow/README.md +102 -101
  53. package/src/.warnyin/workflow/api-doc.md +93 -93
  54. package/src/.warnyin/workflow/codemap.md +91 -91
  55. package/src/.warnyin/workflow/contexts/README.md +51 -51
  56. package/src/.warnyin/workflow/contexts/build.md +25 -25
  57. package/src/.warnyin/workflow/contexts/research.md +25 -25
  58. package/src/.warnyin/workflow/contexts/review.md +25 -25
  59. package/src/.warnyin/workflow/explore.md +32 -32
  60. package/src/.warnyin/workflow/init.md +125 -125
  61. package/src/.warnyin/workflow/next.md +48 -48
  62. package/src/.warnyin/workflow/roles/README.md +47 -47
  63. package/src/.warnyin/workflow/roles/ba.md +25 -25
  64. package/src/.warnyin/workflow/roles/developer.md +31 -31
  65. package/src/.warnyin/workflow/roles/infra.md +24 -24
  66. package/src/.warnyin/workflow/roles/po.md +28 -28
  67. package/src/.warnyin/workflow/roles/qa.md +35 -35
  68. package/src/.warnyin/workflow/roles/sa.md +28 -28
  69. package/src/.warnyin/workflow/roles/security.md +39 -39
  70. package/src/.warnyin/workflow/roles/tech-lead.md +28 -28
  71. package/src/.warnyin/workflow/scripts/build-wave.mjs +143 -143
  72. package/src/.warnyin/workflow/scripts/validate-topic.mjs +378 -378
  73. package/src/.warnyin/workflow/stages/build.md +98 -98
  74. package/src/.warnyin/workflow/stages/design.md +131 -126
  75. package/src/.warnyin/workflow/stages/discovery.md +78 -78
  76. package/src/.warnyin/workflow/stages/ship.md +94 -92
  77. package/src/.warnyin/workflow/stages/verify.md +82 -80
  78. package/src/.warnyin/workflow/triage.md +74 -0
  79. package/src/AGENTS.md +48 -48
  80. package/src/bin/cli.mjs +193 -193
@@ -1,101 +1,102 @@
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 ใน `.warnyin/workflow/stages/`
17
- ส่วน AI แต่ละเครื่องมีแค่ **adapter บางๆ** ที่ "ชี้กลับ" มาที่ playbook กลางชุดเดียวกัน
18
-
19
- | AI tool | Adapter (จุดเชื่อม) | อ่าน playbook จาก |
20
- |---|---|---|
21
- | **Claude Code** | `.claude/commands/*.md` + `CLAUDE.md` | `.warnyin/workflow/stages/*.md` |
22
- | **Codex** | `AGENTS.md` | `.warnyin/workflow/stages/*.md` |
23
- | **Antigravity** | `AGENTS.md` | `.warnyin/workflow/stages/*.md` |
24
- | เครื่องอื่นๆ | ชี้มาที่ `.warnyin/workflow/stages/` ได้ทันที | `.warnyin/workflow/stages/*.md` |
25
-
26
- > แก้กฎที่ `.warnyin/workflow/stages/` ที่เดียว → ทุกเครื่องได้เหมือนกันทันที
27
- > เพิ่ม AI เจ้าใหม่ = เพิ่ม adapter บางๆ อีกหนึ่งไฟล์ ไม่ต้องแตะ logic
28
-
29
- ---
30
-
31
- ## โครงสร้าง repo
32
-
33
- > โครงนี้คือสิ่งที่อยู่ใน **โปรเจกต์ที่ติดตั้งแล้ว** (installer วาง `.warnyin/`+`.claude/` ให้)
34
- > ตัว repo `warnyin-agents` เองเก็บ source ที่จะ publish ไว้ใต้ `src/` (เช่น `src/bin/cli.mjs`, `src/.warnyin/`) — ดู `CONTRIBUTING.md`
35
-
36
- ```
37
- .warnyin/ # ★ แก่นกลาง workflow (installer วางให้ — อัปเดตได้ด้วย --update)
38
- workflow/ # playbook กลาง — single source of truth
39
- README.md # ไฟล์นี้ — ภาพรวม + วิธีรองรับหลาย AI
40
- init.md # playbook: INIT — วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
41
- codemap.md # playbook: CODEMAP — สแกน + สร้าง codemap แบบ token-lean
42
- explore.md # playbook: EXPLORE — สำรวจ/ตอบคำถามแบบ read-only ไม่สร้าง artifact
43
- next.md # playbook: NEXT — เช็คงานค้าง + แนะนำขั้นตอนถัดไป (read-only)
44
- api-doc.md # capability: API-DOCadaptive OpenAPI 3.1 contract (DESIGN/VERIFY/SHIP เรียกเอง)
45
- stages/ # discovery · design · build · verify ✅ · ship ✅
46
- roles/ # role card กลาง (task-level lens): ba, po, sa, tech-lead, developer, qa, security, infra
47
- contexts/ # context profile กลาง (session-level posture): research, build, review + README
48
- scripts/
49
- build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
50
- template/ # template ทั้งหมดรวมที่เดียว
51
- stages/[topic]/ # หนึ่งหน่วยงาน copy เป็น docs/stages/<slug>
52
- discovery.md research.md # output ของ Discovery
53
- business.md proposal.md design.md # output ของ DESIGN
54
- tasks/[task-name]/... build.md # output ของ DESIGN (tasks) + BUILD
55
- test.md verify.md # output ของ VERIFY
56
- troubleshooting.md ship.md # KB ระหว่างงาน + สรุปส่งมอบของ SHIP
57
- docs/ # โครง docs installer seed เข้า docs/ ตอนติดตั้ง
58
- project.md rule.md infra.md troubleshooting.md codemap/index.md
59
- techstack/[component]/ # copy เป็น docs/techstack/<component> (โดย /warnyin:init)
60
- features/[feature-name]/ # copy เป็น docs/features/<feature-name> (โดย SHIP) — มี spec.md (living behavior spec)
61
- installer/templates/ # template CLAUDE.md ของ target (installer ใช้เองไม่ถูก copy ไป target)
62
-
63
- .claude/ # adapter Claude Code (ชี้กลับ playbook กลาง)
64
- commands/warnyin/ # slash command /warnyin:*
65
- agents/ # reviewer subagent warnyin-{sa,tech-lead,qa,security,infra}
66
- CLAUDE.md AGENTS.md # adapter + pointer ของ Claude / Codex·Antigravity
67
-
68
- docs/ # ความรู้ถาวรระดับโปรเจกต์ + งานจริง — ของจริงล้วน (seed จาก template/docs)
69
- project.md # จุดเริ่มของ Discoveryอ่านก่อนเสมอ
70
- rule.md infra.md
71
- troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
72
- codemap/ features/ techstack/
73
- stages/ # พื้นที่ทำงานจริง ตาม topic (<slug>/) + achieved/<YYYY-MM-DD>-<slug>/ หลัง SHIP
74
- ```
75
- ```
76
-
77
- ---
78
-
79
- ## การติดตั้งไปโปรเจกต์อื่น
80
-
81
- ```bash
82
- cd my-project
83
- npx @warnyin/agents # ติดตั้ง (ข้ามไฟล์ที่มีอยู่ ไม่เขียนทับ)
84
- npx @warnyin/agents --update # อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
85
- npx @warnyin/agents --dry-run # ดูก่อนว่าจะสร้าง/อัปเดตอะไร
86
- # ทางสำรอง (ไม่ผ่าน npm): npx github:warnyin/warnyin-agents
87
- ```
88
-
89
- - โปรเจกต์ที่มี `CLAUDE.md`/`AGENTS.md` อยู่แล้ว → installer ต่อท้ายเป็น section ไม่เขียนทับ
90
- - `--update` เขียนทับเฉพาะ core (`.warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `.warnyin/template/`) — ไม่แตะ `docs/` และงานจริง
91
- - หลังติดตั้ง เปิด Claude Code แล้วรัน `/warnyin:init` ให้ agent วิเคราะห์โปรเจกต์ + เติม `docs/` (playbook: `.warnyin/workflow/init.md`)
92
-
93
- ## วิธีใช้
94
-
95
- 1. เริ่มงานใหม่ → copy `.warnyin/template/stages/[topic]/` เป็น `docs/stages/<ชื่อ-งาน-kebab-case>/`
96
- 2. รัน stage ตามลำดับ (Discovery ข้ามได้ถ้าเข้าใจ scope ชัดแล้ว)
97
- - Claude Code: `/warnyin:discovery <topic>`, `/warnyin:design <slug> <change>`
98
- - Codex / Antigravity: บอกให้ทำตาม `.warnyin/workflow/stages/<stage>.md`
99
- 3. ผ่าน "gate" ของแต่ละ stage แล้วจึงไป stage ถัดไป
100
- 4. เมื่อ SHIP (`/warnyin:ship <slug>`) promote ความรู้ของ topic ขึ้นเอกสารกลางใน `docs/`
101
- แล้วย้าย topic ไป `docs/stages/achieved/<YYYY-MM-DD>-<topic>/`
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 ใน `.warnyin/workflow/stages/`
17
+ ส่วน AI แต่ละเครื่องมีแค่ **adapter บางๆ** ที่ "ชี้กลับ" มาที่ playbook กลางชุดเดียวกัน
18
+
19
+ | AI tool | Adapter (จุดเชื่อม) | อ่าน playbook จาก |
20
+ |---|---|---|
21
+ | **Claude Code** | `.claude/commands/*.md` + `CLAUDE.md` | `.warnyin/workflow/stages/*.md` |
22
+ | **Codex** | `AGENTS.md` | `.warnyin/workflow/stages/*.md` |
23
+ | **Antigravity** | `AGENTS.md` | `.warnyin/workflow/stages/*.md` |
24
+ | เครื่องอื่นๆ | ชี้มาที่ `.warnyin/workflow/stages/` ได้ทันที | `.warnyin/workflow/stages/*.md` |
25
+
26
+ > แก้กฎที่ `.warnyin/workflow/stages/` ที่เดียว → ทุกเครื่องได้เหมือนกันทันที
27
+ > เพิ่ม AI เจ้าใหม่ = เพิ่ม adapter บางๆ อีกหนึ่งไฟล์ ไม่ต้องแตะ logic
28
+
29
+ ---
30
+
31
+ ## โครงสร้าง repo
32
+
33
+ > โครงนี้คือสิ่งที่อยู่ใน **โปรเจกต์ที่ติดตั้งแล้ว** (installer วาง `.warnyin/`+`.claude/` ให้)
34
+ > ตัว repo `warnyin-agents` เองเก็บ source ที่จะ publish ไว้ใต้ `src/` (เช่น `src/bin/cli.mjs`, `src/.warnyin/`) — ดู `CONTRIBUTING.md`
35
+
36
+ ```
37
+ .warnyin/ # ★ แก่นกลาง workflow (installer วางให้ — อัปเดตได้ด้วย --update)
38
+ workflow/ # playbook กลาง — single source of truth
39
+ README.md # ไฟล์นี้ — ภาพรวม + วิธีรองรับหลาย AI
40
+ init.md # playbook: INIT — วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
41
+ codemap.md # playbook: CODEMAP — สแกน + สร้าง codemap แบบ token-lean
42
+ explore.md # playbook: EXPLORE — สำรวจ/ตอบคำถามแบบ read-only ไม่สร้าง artifact
43
+ next.md # playbook: NEXT — เช็คงานค้าง + แนะนำขั้นตอนถัดไป (read-only)
44
+ triage.md # capability: TRIAGEประเมินขนาด change tier + route (read-only)
45
+ api-doc.md # capability: API-DOC adaptive OpenAPI 3.1 contract (DESIGN/VERIFY/SHIP เรียกเอง)
46
+ stages/ # discovery · design · build · verify · ship ✅
47
+ roles/ # role card กลาง (task-level lens): ba, po, sa, tech-lead, developer, qa, security, infra
48
+ contexts/ # context profile กลาง (session-level posture): research, build, review + README
49
+ scripts/
50
+ build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
51
+ template/ # template ทั้งหมดรวมที่เดียว
52
+ stages/[topic]/ # หนึ่งหน่วยงาน copy เป็น docs/stages/<slug>
53
+ discovery.md research.md # output ของ Discovery
54
+ business.md proposal.md design.md # output ของ DESIGN
55
+ tasks/[task-name]/... build.md # output ของ DESIGN (tasks) + BUILD
56
+ test.md verify.md # output ของ VERIFY
57
+ troubleshooting.md ship.md # KB ระหว่างงาน + สรุปส่งมอบของ SHIP
58
+ docs/ # โครง docs — installer seed เข้า docs/ ตอนติดตั้ง
59
+ project.md rule.md infra.md troubleshooting.md codemap/index.md
60
+ techstack/[component]/ # copy เป็น docs/techstack/<component> (โดย /warnyin:init)
61
+ features/[feature-name]/ # copy เป็น docs/features/<feature-name> (โดย SHIP)มี spec.md (living behavior spec)
62
+ installer/templates/ # template CLAUDE.md ของ target (installer ใช้เอง — ไม่ถูก copy ไป target)
63
+
64
+ .claude/ # adapter Claude Code (ชี้กลับ playbook กลาง)
65
+ commands/warnyin/ # slash command /warnyin:*
66
+ agents/ # reviewer subagent warnyin-{sa,tech-lead,qa,security,infra}
67
+ CLAUDE.md AGENTS.md # adapter + pointer ของ Claude / Codex·Antigravity
68
+
69
+ docs/ # ความรู้ถาวรระดับโปรเจกต์ + งานจริงของจริงล้วน (seed จาก template/docs)
70
+ project.md # ★ จุดเริ่มของ Discovery — อ่านก่อนเสมอ
71
+ rule.md infra.md
72
+ troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
73
+ codemap/ features/ techstack/
74
+ stages/ # พื้นที่ทำงานจริง ตาม topic (<slug>/) + achieved/<YYYY-MM-DD>-<slug>/ หลัง SHIP
75
+ ```
76
+ ```
77
+
78
+ ---
79
+
80
+ ## การติดตั้งไปโปรเจกต์อื่น
81
+
82
+ ```bash
83
+ cd my-project
84
+ npx @warnyin/agents # ติดตั้ง (ข้ามไฟล์ที่มีอยู่ ไม่เขียนทับ)
85
+ npx @warnyin/agents --update # อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
86
+ npx @warnyin/agents --dry-run # ดูก่อนว่าจะสร้าง/อัปเดตอะไร
87
+ # ทางสำรอง (ไม่ผ่าน npm): npx github:warnyin/warnyin-agents
88
+ ```
89
+
90
+ - โปรเจกต์ที่มี `CLAUDE.md`/`AGENTS.md` อยู่แล้ว installer ต่อท้ายเป็น section ไม่เขียนทับ
91
+ - `--update` เขียนทับเฉพาะ core (`.warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `.warnyin/template/`) ไม่แตะ `docs/` และงานจริง
92
+ - หลังติดตั้ง → เปิด Claude Code แล้วรัน `/warnyin:init` ให้ agent วิเคราะห์โปรเจกต์ + เติม `docs/` (playbook: `.warnyin/workflow/init.md`)
93
+
94
+ ## วิธีใช้
95
+
96
+ 1. เริ่มงานใหม่ copy `.warnyin/template/stages/[topic]/` เป็น `docs/stages/<ชื่อ-งาน-kebab-case>/`
97
+ 2. รัน stage ตามลำดับ (Discovery ข้ามได้ถ้าเข้าใจ scope ชัดแล้ว)
98
+ - Claude Code: `/warnyin:discovery <topic>`, `/warnyin:design <slug> <change>`
99
+ - Codex / Antigravity: บอกให้ทำตาม `.warnyin/workflow/stages/<stage>.md`
100
+ 3. ผ่าน "gate" ของแต่ละ stage แล้วจึงไป stage ถัดไป
101
+ 4. เมื่อ SHIP (`/warnyin:ship <slug>`) → promote ความรู้ของ topic ขึ้นเอกสารกลางใน `docs/`
102
+ แล้วย้าย topic ไป `docs/stages/achieved/<YYYY-MM-DD>-<topic>/`
@@ -1,93 +1,93 @@
1
- # API-DOC — เอกสาร REST API (OpenAPI 3.1) แบบ adaptive
2
-
3
- > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
- > เป้าหมาย: ถ้า topic **แตะ backend/REST API จริง** → ผลิต + ยืนยัน + ส่งมอบ **OpenAPI 3.1 contract** ให้อัตโนมัติ ตลอด lifecycle (DESIGN → VERIFY → SHIP)
5
-
6
- ---
7
-
8
- ## 1. คืออะไร / ใช้เมื่อไหร่
9
-
10
- API-DOC ไม่ใช่ stage แยก และ **ไม่มี slash command** — เป็น **capability เสริมที่ stage เรียกใช้เอง** เมื่อ auto-detect พบว่า topic เกี่ยวกับ REST API
11
-
12
- - ทำงานเป็นส่วนหนึ่งของ DESIGN / VERIFY / SHIP — stage playbook ชี้มาที่ไฟล์นี้
13
- - **adaptive:** ตรวจ signal ทุก topic — ถ้า **ไม่ใช่** backend/REST API → **ข้ามทั้งหมดเงียบๆ** (ไม่ยัดเยียด ไม่สร้างไฟล์เปล่า)
14
- - tool-agnostic: เป็นมาตรฐาน OpenAPI 3.1 ล้วน ไม่ผูกกับ AI เจ้าใดหรือเฟรมเวิร์กใด
15
-
16
- ---
17
-
18
- ## 2. Auto-detect — topic นี้แตะ REST API ไหม?
19
-
20
- ดูสัญญาณต่อไปนี้ (เจอ **อย่างน้อยหนึ่ง** ที่ชัดเจน = ใช่):
21
-
22
- 1. **techstack** — `docs/techstack/<component>/about.md` ระบุว่าเป็น backend/HTTP service / REST / web API
23
- 2. **route ในโค้ด** — มี handler/controller ที่ผูก HTTP route เช่น Express/Fastify/NestJS/Koa/Hapi, FastAPI/Flask/Django REST, Spring/Gin/Echo, ASP.NET ฯลฯ
24
- 3. **annotation/decorator** ที่ gen spec ได้อยู่แล้ว — tsoa, springdoc, drf-spectacular, FastAPI (Pydantic)
25
- 4. **task ถูกจัดเป็น "API task"** ตอนแตก spec (design.md §6)
26
- 5. **change เพิ่ม/แก้ HTTP endpoint** — request/response/error/auth/status code เปลี่ยน
27
-
28
- > สัญญาณคลุมเครือ (เช่น มีแค่ internal function ไม่ใช่ HTTP, RPC/gRPC ที่ไม่ใช่ REST, CLI/library ล้วน) → **ไม่ใช่** → ข้าม
29
- > ไม่แน่ใจจริง → ถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ (ตามหลัก "ห้ามเดา" ของทุก stage)
30
-
31
- ---
32
-
33
- ## 3. เลือกโหมด (เลือกตาม signal + ระยะของงาน)
34
-
35
- | โหมด | เมื่อไหร่ | วิธี |
36
- |---|---|---|
37
- | **Design-first** | endpoint **ใหม่** ยังไม่มีโค้ด | เขียน `openapi.yaml` ก่อน (ตอน DESIGN) = contract ที่ BUILD จะ implement ตาม |
38
- | **Code-first** | API **มีอยู่แล้ว** + เฟรมเวิร์ก gen spec ได้ (FastAPI/tsoa ฯลฯ) | generate spec จากโค้ด แล้วตรวจ/เก็บเป็น artifact |
39
- | **Hybrid** | โค้ดมี annotation/decorator แต่ยังไม่ครบ | gen จาก annotation + เติม schema/example ที่ขาดด้วยมือ |
40
-
41
- โปรเจกต์เดียวกันใช้คนละโหมดต่อ topic ได้ — เลือกตามจริง
42
-
43
- ---
44
-
45
- ## 4. บทบาทต่อ stage
46
-
47
- ### DESIGN — ผลิต contract
48
- - detect (ข้อ 2) → ถ้าใช่: ผลิต/อัปเดต `docs/stages/<slug>/openapi.yaml` (OpenAPI 3.1)
49
- - endpoint ใหม่ → **design-first** เขียน contract ก่อน; API เดิม → **code-first/hybrid** gen จากโค้ดแล้วเติม
50
- - `tasks/<api-task>/spec.md` (API SPEC) **ชี้มาที่ `openapi.yaml`** — ไม่เขียน schema ซ้ำสองที่ (single source)
51
- - ถ้ามีเครื่องมือ lint ในโปรเจกต์ → รัน (ดูข้อ 5); ไม่มีก็ข้าม ไม่บังคับติดตั้ง
52
-
53
- ### VERIFY — ยืนยันว่าโค้ดจริงตรง contract
54
- - topic มี `openapi.yaml` → **contract validation**: ยืนยันว่า implementation จริง = contract
55
- - code-first: regen spec จากโค้ด → diff กับ `openapi.yaml` (ต้องไม่ต่าง)
56
- - หรือยิง request จริงใน local env → ตรวจ response ตรง schema/status/error ที่ระบุ
57
- - **★ runtime security:** การ regen (boot app จริง — FastAPI/tsoa) หรือยิง request จริง อยู่ใต้ runtime-security ของ `verify.md` §2 (local-only, scoped credential, no prod, no unnecessary egress) — ทบทวนก่อนปล่อย agent แตะของจริง
58
- - mismatch = **ไม่ผ่าน** → แก้ (โค้ด หรือ contract ตามต้นเหตุจริง) วนจนตรง — นับเป็นส่วนหนึ่งของ fix loop ใน verify.md §4
59
-
60
- ### SHIP — promote contract ขึ้นเอกสารกลาง
61
- - ยก `openapi.yaml` → **`docs/techstack/<component>/openapi.yaml`** = living API contract ถาวร (เทียบเท่า `spec.md` ที่เป็น living behavior spec)
62
- - มี contract เดิมอยู่แล้ว → **merge ตาม delta** (เพิ่ม/แก้/ลบ path·schema ที่ topic แตะ) ไม่ทับทั้งไฟล์
63
- - อ้างถึงจาก `docs/features/<name>/spec.md` ของ feature ที่ใช้ endpoint นั้น
64
-
65
- ---
66
-
67
- ## 5. มาตรฐาน + เครื่องมือ (reference ไม่ vendor)
68
-
69
- - **มาตรฐาน:** OpenAPI **3.1.0** — `info`/`servers`/`paths`/`components.schemas`/`components.securitySchemes`; ใช้ `$ref` reuse, ใส่ `examples`, ระบุ error + status code + auth scheme ครบ, อย่า hardcode URL (ใช้ server variable)
70
- - **★ secret hygiene (บังคับ — `openapi.yaml` ถูก commit ถาวร):** ก่อน commit/promote ต้อง **scrub** — `servers.url` ใช้ placeholder/variable (ไม่ใช่ internal/staging host จริง), `examples`/`example`/default ใช้ค่า dummy (`user@example.com`, `<token>`) **ห้าม secret/credential/PII จริง**, `securitySchemes` ระบุแค่รูปแบบ ไม่ใส่ค่า token จริง — โดยเฉพาะตอน code-first gen จากโค้ด ที่ค่าจริงมักหลุดติดมา (สอด `docs/rule.md` §3.2 + spec convention "ค่าสังเคราะห์เท่านั้น")
71
- - **เครื่องมือ (ติดตั้งเองเมื่ออยากใช้ — ไม่ผูกใน workflow):**
72
-
73
- | งาน | เครื่องมือ | คำสั่งตัวอย่าง |
74
- |---|---|---|
75
- | lint spec | Spectral | `spectral lint openapi.yaml` |
76
- | lint/bundle/preview | Redocly CLI | `redocly lint openapi.yaml` |
77
- | gen client SDK | OpenAPI Generator | `openapi-generator-cli generate -i openapi.yaml -g typescript-fetch -o ./gen/ts` |
78
- | gen จากโค้ด | FastAPI (auto), tsoa (`@Route`/`@Get`) | ตามเฟรมเวิร์ก |
79
-
80
- - **Skill อ้างอิง (optional):** `openapi-spec-generation` — template library เต็ม (full API spec, FastAPI, tsoa, Spectral ruleset, SDK gen)
81
- ที่มา: `wshobson/agents` → `plugins/documentation-generation/skills/openapi-spec-generation/`
82
- (`SKILL.md` + `references/details.md` + `references/code-first-and-tooling.md`) — โปรเจกต์ไหนอยากได้ template สำเร็จรูปค่อยติดตั้ง
83
-
84
- ---
85
-
86
- ## 6. ที่อยู่ของ artifact
87
-
88
- | ระยะ | ที่ | หมายเหตุ |
89
- |---|---|---|
90
- | ระหว่างงาน | `docs/stages/<slug>/openapi.yaml` | optional — เฉพาะ topic ที่แตะ REST API |
91
- | ถาวร (หลัง SHIP) | `docs/techstack/<component>/openapi.yaml` | living API contract — SHIP merge ตาม delta |
92
-
93
- > **`<component>` resolution (ห้ามเดา):** topic แตะ **หลาย component** หรือ component ที่ **ยังไม่มีใน `docs/techstack/`** → ถาม user ว่าจะวาง contract ที่ component ไหน / สร้าง techstack entry ก่อนไหม — ไม่เดาเอง
1
+ # API-DOC — เอกสาร REST API (OpenAPI 3.1) แบบ adaptive
2
+
3
+ > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
+ > เป้าหมาย: ถ้า topic **แตะ backend/REST API จริง** → ผลิต + ยืนยัน + ส่งมอบ **OpenAPI 3.1 contract** ให้อัตโนมัติ ตลอด lifecycle (DESIGN → VERIFY → SHIP)
5
+
6
+ ---
7
+
8
+ ## 1. คืออะไร / ใช้เมื่อไหร่
9
+
10
+ API-DOC ไม่ใช่ stage แยก และ **ไม่มี slash command** — เป็น **capability เสริมที่ stage เรียกใช้เอง** เมื่อ auto-detect พบว่า topic เกี่ยวกับ REST API
11
+
12
+ - ทำงานเป็นส่วนหนึ่งของ DESIGN / VERIFY / SHIP — stage playbook ชี้มาที่ไฟล์นี้
13
+ - **adaptive:** ตรวจ signal ทุก topic — ถ้า **ไม่ใช่** backend/REST API → **ข้ามทั้งหมดเงียบๆ** (ไม่ยัดเยียด ไม่สร้างไฟล์เปล่า)
14
+ - tool-agnostic: เป็นมาตรฐาน OpenAPI 3.1 ล้วน ไม่ผูกกับ AI เจ้าใดหรือเฟรมเวิร์กใด
15
+
16
+ ---
17
+
18
+ ## 2. Auto-detect — topic นี้แตะ REST API ไหม?
19
+
20
+ ดูสัญญาณต่อไปนี้ (เจอ **อย่างน้อยหนึ่ง** ที่ชัดเจน = ใช่):
21
+
22
+ 1. **techstack** — `docs/techstack/<component>/about.md` ระบุว่าเป็น backend/HTTP service / REST / web API
23
+ 2. **route ในโค้ด** — มี handler/controller ที่ผูก HTTP route เช่น Express/Fastify/NestJS/Koa/Hapi, FastAPI/Flask/Django REST, Spring/Gin/Echo, ASP.NET ฯลฯ
24
+ 3. **annotation/decorator** ที่ gen spec ได้อยู่แล้ว — tsoa, springdoc, drf-spectacular, FastAPI (Pydantic)
25
+ 4. **task ถูกจัดเป็น "API task"** ตอนแตก spec (design.md §6)
26
+ 5. **change เพิ่ม/แก้ HTTP endpoint** — request/response/error/auth/status code เปลี่ยน
27
+
28
+ > สัญญาณคลุมเครือ (เช่น มีแค่ internal function ไม่ใช่ HTTP, RPC/gRPC ที่ไม่ใช่ REST, CLI/library ล้วน) → **ไม่ใช่** → ข้าม
29
+ > ไม่แน่ใจจริง → ถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ (ตามหลัก "ห้ามเดา" ของทุก stage)
30
+
31
+ ---
32
+
33
+ ## 3. เลือกโหมด (เลือกตาม signal + ระยะของงาน)
34
+
35
+ | โหมด | เมื่อไหร่ | วิธี |
36
+ |---|---|---|
37
+ | **Design-first** | endpoint **ใหม่** ยังไม่มีโค้ด | เขียน `openapi.yaml` ก่อน (ตอน DESIGN) = contract ที่ BUILD จะ implement ตาม |
38
+ | **Code-first** | API **มีอยู่แล้ว** + เฟรมเวิร์ก gen spec ได้ (FastAPI/tsoa ฯลฯ) | generate spec จากโค้ด แล้วตรวจ/เก็บเป็น artifact |
39
+ | **Hybrid** | โค้ดมี annotation/decorator แต่ยังไม่ครบ | gen จาก annotation + เติม schema/example ที่ขาดด้วยมือ |
40
+
41
+ โปรเจกต์เดียวกันใช้คนละโหมดต่อ topic ได้ — เลือกตามจริง
42
+
43
+ ---
44
+
45
+ ## 4. บทบาทต่อ stage
46
+
47
+ ### DESIGN — ผลิต contract
48
+ - detect (ข้อ 2) → ถ้าใช่: ผลิต/อัปเดต `docs/stages/<slug>/openapi.yaml` (OpenAPI 3.1)
49
+ - endpoint ใหม่ → **design-first** เขียน contract ก่อน; API เดิม → **code-first/hybrid** gen จากโค้ดแล้วเติม
50
+ - `tasks/<api-task>/spec.md` (API SPEC) **ชี้มาที่ `openapi.yaml`** — ไม่เขียน schema ซ้ำสองที่ (single source)
51
+ - ถ้ามีเครื่องมือ lint ในโปรเจกต์ → รัน (ดูข้อ 5); ไม่มีก็ข้าม ไม่บังคับติดตั้ง
52
+
53
+ ### VERIFY — ยืนยันว่าโค้ดจริงตรง contract
54
+ - topic มี `openapi.yaml` → **contract validation**: ยืนยันว่า implementation จริง = contract
55
+ - code-first: regen spec จากโค้ด → diff กับ `openapi.yaml` (ต้องไม่ต่าง)
56
+ - หรือยิง request จริงใน local env → ตรวจ response ตรง schema/status/error ที่ระบุ
57
+ - **★ runtime security:** การ regen (boot app จริง — FastAPI/tsoa) หรือยิง request จริง อยู่ใต้ runtime-security ของ `verify.md` §2 (local-only, scoped credential, no prod, no unnecessary egress) — ทบทวนก่อนปล่อย agent แตะของจริง
58
+ - mismatch = **ไม่ผ่าน** → แก้ (โค้ด หรือ contract ตามต้นเหตุจริง) วนจนตรง — นับเป็นส่วนหนึ่งของ fix loop ใน verify.md §4
59
+
60
+ ### SHIP — promote contract ขึ้นเอกสารกลาง
61
+ - ยก `openapi.yaml` → **`docs/techstack/<component>/openapi.yaml`** = living API contract ถาวร (เทียบเท่า `spec.md` ที่เป็น living behavior spec)
62
+ - มี contract เดิมอยู่แล้ว → **merge ตาม delta** (เพิ่ม/แก้/ลบ path·schema ที่ topic แตะ) ไม่ทับทั้งไฟล์
63
+ - อ้างถึงจาก `docs/features/<name>/spec.md` ของ feature ที่ใช้ endpoint นั้น
64
+
65
+ ---
66
+
67
+ ## 5. มาตรฐาน + เครื่องมือ (reference ไม่ vendor)
68
+
69
+ - **มาตรฐาน:** OpenAPI **3.1.0** — `info`/`servers`/`paths`/`components.schemas`/`components.securitySchemes`; ใช้ `$ref` reuse, ใส่ `examples`, ระบุ error + status code + auth scheme ครบ, อย่า hardcode URL (ใช้ server variable)
70
+ - **★ secret hygiene (บังคับ — `openapi.yaml` ถูก commit ถาวร):** ก่อน commit/promote ต้อง **scrub** — `servers.url` ใช้ placeholder/variable (ไม่ใช่ internal/staging host จริง), `examples`/`example`/default ใช้ค่า dummy (`user@example.com`, `<token>`) **ห้าม secret/credential/PII จริง**, `securitySchemes` ระบุแค่รูปแบบ ไม่ใส่ค่า token จริง — โดยเฉพาะตอน code-first gen จากโค้ด ที่ค่าจริงมักหลุดติดมา (สอด `docs/rule.md` §3.2 + spec convention "ค่าสังเคราะห์เท่านั้น")
71
+ - **เครื่องมือ (ติดตั้งเองเมื่ออยากใช้ — ไม่ผูกใน workflow):**
72
+
73
+ | งาน | เครื่องมือ | คำสั่งตัวอย่าง |
74
+ |---|---|---|
75
+ | lint spec | Spectral | `spectral lint openapi.yaml` |
76
+ | lint/bundle/preview | Redocly CLI | `redocly lint openapi.yaml` |
77
+ | gen client SDK | OpenAPI Generator | `openapi-generator-cli generate -i openapi.yaml -g typescript-fetch -o ./gen/ts` |
78
+ | gen จากโค้ด | FastAPI (auto), tsoa (`@Route`/`@Get`) | ตามเฟรมเวิร์ก |
79
+
80
+ - **Skill อ้างอิง (optional):** `openapi-spec-generation` — template library เต็ม (full API spec, FastAPI, tsoa, Spectral ruleset, SDK gen)
81
+ ที่มา: `wshobson/agents` → `plugins/documentation-generation/skills/openapi-spec-generation/`
82
+ (`SKILL.md` + `references/details.md` + `references/code-first-and-tooling.md`) — โปรเจกต์ไหนอยากได้ template สำเร็จรูปค่อยติดตั้ง
83
+
84
+ ---
85
+
86
+ ## 6. ที่อยู่ของ artifact
87
+
88
+ | ระยะ | ที่ | หมายเหตุ |
89
+ |---|---|---|
90
+ | ระหว่างงาน | `docs/stages/<slug>/openapi.yaml` | optional — เฉพาะ topic ที่แตะ REST API |
91
+ | ถาวร (หลัง SHIP) | `docs/techstack/<component>/openapi.yaml` | living API contract — SHIP merge ตาม delta |
92
+
93
+ > **`<component>` resolution (ห้ามเดา):** topic แตะ **หลาย component** หรือ component ที่ **ยังไม่มีใน `docs/techstack/`** → ถาม user ว่าจะวาง contract ที่ component ไหน / สร้าง techstack entry ก่อนไหม — ไม่เดาเอง
@@ -1,91 +1,91 @@
1
- # CODEMAP — สแกนโครงสร้างโปรเจกต์ + สร้าง architecture codemap แบบ token-lean
2
-
3
- > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
- > เป้าหมาย: `docs/codemap/` ที่ **ประหยัด token** สำหรับให้ AI โหลดเข้า context — โครงสร้างระดับสูง ไม่ใช่ implementation detail
5
-
6
- ---
7
-
8
- ## 1. ใช้เมื่อไหร่
9
-
10
- - หลังเพิ่ม feature ใหญ่ / refactor ครั้งสำคัญ
11
- - `/warnyin:init` ใช้ playbook นี้ตอนสร้าง codemap ครั้งแรก
12
- - **SHIP** ใช้ตอนขั้น "อัปเดต code map ทั้งหมด"
13
-
14
- ---
15
-
16
- ## 2. ขั้นตอน
17
-
18
- ### Step 1: สแกนโครงสร้างโปรเจกต์
19
- - ระบุชนิดโปรเจกต์: monorepo / single app / library / microservice
20
- - หา source directory ทั้งหมด (`src/`, `lib/`, `app/`, `packages/`, ...)
21
- - map entry points (`main.ts`, `index.ts`, `app.py`, `main.go`, ...)
22
- - สแกนขนานได้: fan-out sub-agent (read-only) ต่อ component/พื้นที่ — เครื่องที่ไม่มี sub-agent → ไล่ทีละส่วน
23
-
24
- ### Step 2: สร้าง/อัปเดต codemap ใน `docs/codemap/`
25
-
26
- | ไฟล์ | เนื้อหา |
27
- |---|---|
28
- | `index.md` | สารบัญทั้งชุด + ภาพรวม component + จุดเข้า |
29
- | `architecture.md` | system diagram ระดับสูง, service boundary, data flow |
30
- | `backend.md` | API routes, middleware chain, service → repository mapping |
31
- | `frontend.md` | page tree, component hierarchy, state management flow |
32
- | `data.md` | ตาราง DB, relationship, migration history |
33
- | `dependencies.md` | external service, third-party integration, shared library |
34
-
35
- **สร้างเฉพาะไฟล์ที่ relevant** — โปรเจกต์ไม่มี frontend → ไม่ต้องมี `frontend.md`
36
-
37
- #### รูปแบบ codemap (token-lean)
38
-
39
- ```markdown
40
- # Backend Architecture
41
-
42
- ## Routes
43
- POST /api/users → UserController.create → UserService.create → UserRepo.insert
44
- GET /api/users/:id → UserController.get → UserService.findById → UserRepo.findById
45
-
46
- ## Key Files
47
- src/services/user.ts (business logic, 120 lines)
48
- src/repos/user.ts (database access, 80 lines)
49
-
50
- ## Dependencies
51
- - PostgreSQL (primary data store)
52
- - Redis (session cache, rate limiting)
53
- - Stripe (payment processing)
54
- ```
55
-
56
- ### Step 3: Diff detection
57
- - มี codemap เดิมอยู่ → คำนวณ % การเปลี่ยนแปลง
58
- - เปลี่ยน **> 30%** → แสดง diff + **ขอ user อนุมัติก่อนเขียนทับ**
59
- - เปลี่ยน **≤ 30%** → อัปเดต in place ได้เลย
60
-
61
- ### Step 4: Metadata
62
- ใส่ freshness header บนสุดของทุกไฟล์:
63
- ```html
64
- <!-- Generated: YYYY-MM-DD | Files scanned: N | Token estimate: ~X -->
65
- ```
66
-
67
- ### Step 5: Analysis report → `.reports/codemap-diff.txt`
68
- - ไฟล์ added / removed / modified ตั้งแต่สแกนครั้งล่าสุด
69
- - dependency ใหม่ที่ตรวจพบ
70
- - architecture changes (route ใหม่, service ใหม่ ฯลฯ)
71
- - คำเตือน staleness: doc ที่ไม่ถูกอัปเดต 90+ วัน
72
-
73
- ---
74
-
75
- ## 3. หลักการ (tips)
76
-
77
- - โฟกัสโครงสร้างระดับสูง — **ไม่ใช่** implementation detail
78
- - ใช้ file path + function signature แทน code block เต็ม
79
- - แต่ละ codemap **< 1000 tokens** เพื่อโหลดเข้า context ได้ถูก
80
- - ใช้ ASCII diagram แทนคำบรรยาย data flow ยืดยาว
81
- - **ทุกอย่างต้องมาจากโค้ดจริง ณ วันสแกน — ห้ามเดา/ห้ามเขียนจากความจำ**
82
-
83
- ---
84
-
85
- ## 4. Gate — จบเมื่อ
86
-
87
- - [ ] codemap ทุกไฟล์ตรงโค้ดจริง + มี freshness header
88
- - [ ] `index.md` ลิงก์ครบทุกไฟล์ codemap ที่มี
89
- - [ ] ทุกไฟล์ token-lean (< 1000 tokens)
90
- - [ ] diff > 30% ผ่านการอนุมัติจาก user แล้ว
91
- - [ ] `.reports/codemap-diff.txt` เขียนแล้ว
1
+ # CODEMAP — สแกนโครงสร้างโปรเจกต์ + สร้าง architecture codemap แบบ token-lean
2
+
3
+ > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
+ > เป้าหมาย: `docs/codemap/` ที่ **ประหยัด token** สำหรับให้ AI โหลดเข้า context — โครงสร้างระดับสูง ไม่ใช่ implementation detail
5
+
6
+ ---
7
+
8
+ ## 1. ใช้เมื่อไหร่
9
+
10
+ - หลังเพิ่ม feature ใหญ่ / refactor ครั้งสำคัญ
11
+ - `/warnyin:init` ใช้ playbook นี้ตอนสร้าง codemap ครั้งแรก
12
+ - **SHIP** ใช้ตอนขั้น "อัปเดต code map ทั้งหมด"
13
+
14
+ ---
15
+
16
+ ## 2. ขั้นตอน
17
+
18
+ ### Step 1: สแกนโครงสร้างโปรเจกต์
19
+ - ระบุชนิดโปรเจกต์: monorepo / single app / library / microservice
20
+ - หา source directory ทั้งหมด (`src/`, `lib/`, `app/`, `packages/`, ...)
21
+ - map entry points (`main.ts`, `index.ts`, `app.py`, `main.go`, ...)
22
+ - สแกนขนานได้: fan-out sub-agent (read-only) ต่อ component/พื้นที่ — เครื่องที่ไม่มี sub-agent → ไล่ทีละส่วน
23
+
24
+ ### Step 2: สร้าง/อัปเดต codemap ใน `docs/codemap/`
25
+
26
+ | ไฟล์ | เนื้อหา |
27
+ |---|---|
28
+ | `index.md` | สารบัญทั้งชุด + ภาพรวม component + จุดเข้า |
29
+ | `architecture.md` | system diagram ระดับสูง, service boundary, data flow |
30
+ | `backend.md` | API routes, middleware chain, service → repository mapping |
31
+ | `frontend.md` | page tree, component hierarchy, state management flow |
32
+ | `data.md` | ตาราง DB, relationship, migration history |
33
+ | `dependencies.md` | external service, third-party integration, shared library |
34
+
35
+ **สร้างเฉพาะไฟล์ที่ relevant** — โปรเจกต์ไม่มี frontend → ไม่ต้องมี `frontend.md`
36
+
37
+ #### รูปแบบ codemap (token-lean)
38
+
39
+ ```markdown
40
+ # Backend Architecture
41
+
42
+ ## Routes
43
+ POST /api/users → UserController.create → UserService.create → UserRepo.insert
44
+ GET /api/users/:id → UserController.get → UserService.findById → UserRepo.findById
45
+
46
+ ## Key Files
47
+ src/services/user.ts (business logic, 120 lines)
48
+ src/repos/user.ts (database access, 80 lines)
49
+
50
+ ## Dependencies
51
+ - PostgreSQL (primary data store)
52
+ - Redis (session cache, rate limiting)
53
+ - Stripe (payment processing)
54
+ ```
55
+
56
+ ### Step 3: Diff detection
57
+ - มี codemap เดิมอยู่ → คำนวณ % การเปลี่ยนแปลง
58
+ - เปลี่ยน **> 30%** → แสดง diff + **ขอ user อนุมัติก่อนเขียนทับ**
59
+ - เปลี่ยน **≤ 30%** → อัปเดต in place ได้เลย
60
+
61
+ ### Step 4: Metadata
62
+ ใส่ freshness header บนสุดของทุกไฟล์:
63
+ ```html
64
+ <!-- Generated: YYYY-MM-DD | Files scanned: N | Token estimate: ~X -->
65
+ ```
66
+
67
+ ### Step 5: Analysis report → `.reports/codemap-diff.txt`
68
+ - ไฟล์ added / removed / modified ตั้งแต่สแกนครั้งล่าสุด
69
+ - dependency ใหม่ที่ตรวจพบ
70
+ - architecture changes (route ใหม่, service ใหม่ ฯลฯ)
71
+ - คำเตือน staleness: doc ที่ไม่ถูกอัปเดต 90+ วัน
72
+
73
+ ---
74
+
75
+ ## 3. หลักการ (tips)
76
+
77
+ - โฟกัสโครงสร้างระดับสูง — **ไม่ใช่** implementation detail
78
+ - ใช้ file path + function signature แทน code block เต็ม
79
+ - แต่ละ codemap **< 1000 tokens** เพื่อโหลดเข้า context ได้ถูก
80
+ - ใช้ ASCII diagram แทนคำบรรยาย data flow ยืดยาว
81
+ - **ทุกอย่างต้องมาจากโค้ดจริง ณ วันสแกน — ห้ามเดา/ห้ามเขียนจากความจำ**
82
+
83
+ ---
84
+
85
+ ## 4. Gate — จบเมื่อ
86
+
87
+ - [ ] codemap ทุกไฟล์ตรงโค้ดจริง + มี freshness header
88
+ - [ ] `index.md` ลิงก์ครบทุกไฟล์ codemap ที่มี
89
+ - [ ] ทุกไฟล์ token-lean (< 1000 tokens)
90
+ - [ ] diff > 30% ผ่านการอนุมัติจาก user แล้ว
91
+ - [ ] `.reports/codemap-diff.txt` เขียนแล้ว