@warnyin/agents 0.16.0 → 0.17.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 (83) hide show
  1. package/CHANGELOG.md +153 -145
  2. package/README.md +160 -160
  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 +22 -22
  12. package/src/.claude/commands/warnyin/explore.md +14 -14
  13. package/src/.claude/commands/warnyin/feedback/issue.md +14 -14
  14. package/src/.claude/commands/warnyin/init.md +12 -12
  15. package/src/.claude/commands/warnyin/install-skill.md +14 -14
  16. package/src/.claude/commands/warnyin/next.md +17 -17
  17. package/src/.claude/commands/warnyin/ship.md +28 -28
  18. package/src/.claude/commands/warnyin/triage.md +14 -14
  19. package/src/.claude/commands/warnyin/update-codemaps.md +12 -12
  20. package/src/.claude/commands/warnyin/verify.md +20 -20
  21. package/src/.claude/skills/explore/SKILL.md +8 -8
  22. package/src/.claude/skills/next/SKILL.md +8 -8
  23. package/src/.claude/skills/update-codemaps/SKILL.md +8 -8
  24. package/src/.warnyin/installer/templates/CLAUDE.global.md +5 -5
  25. package/src/.warnyin/installer/templates/CLAUDE.md +35 -35
  26. package/src/.warnyin/template/docs/codemap/index.md +18 -18
  27. package/src/.warnyin/template/docs/features/[feature-name]/business.md +5 -5
  28. package/src/.warnyin/template/docs/features/[feature-name]/feature.md +5 -5
  29. package/src/.warnyin/template/docs/features/[feature-name]/spec.md +16 -16
  30. package/src/.warnyin/template/docs/infra.md +16 -16
  31. package/src/.warnyin/template/docs/project.md +18 -18
  32. package/src/.warnyin/template/docs/rule.md +7 -7
  33. package/src/.warnyin/template/docs/techstack/[component]/about.md +6 -6
  34. package/src/.warnyin/template/docs/techstack/[component]/rule.md +6 -6
  35. package/src/.warnyin/template/docs/techstack/[component]/standard.md +6 -6
  36. package/src/.warnyin/template/docs/techstack/[component]/structure.md +7 -7
  37. package/src/.warnyin/template/docs/techstack/[component]/test.md +7 -7
  38. package/src/.warnyin/template/docs/troubleshooting.md +32 -32
  39. package/src/.warnyin/template/stages/[topic]/build.md +58 -58
  40. package/src/.warnyin/template/stages/[topic]/business.md +21 -21
  41. package/src/.warnyin/template/stages/[topic]/design.md +63 -63
  42. package/src/.warnyin/template/stages/[topic]/discovery.md +69 -69
  43. package/src/.warnyin/template/stages/[topic]/proposal.md +43 -43
  44. package/src/.warnyin/template/stages/[topic]/research.md +49 -49
  45. package/src/.warnyin/template/stages/[topic]/ship.md +32 -32
  46. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/issue.md +19 -19
  47. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/rule.md +13 -13
  48. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/spec.md +36 -36
  49. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/standard.md +21 -21
  50. package/src/.warnyin/template/stages/[topic]/tasks/[task-name]/task.md +40 -40
  51. package/src/.warnyin/template/stages/[topic]/test.md +46 -46
  52. package/src/.warnyin/template/stages/[topic]/troubleshooting.md +34 -34
  53. package/src/.warnyin/template/stages/[topic]/verify.md +44 -44
  54. package/src/.warnyin/workflow/README.md +106 -106
  55. package/src/.warnyin/workflow/api-doc.md +93 -93
  56. package/src/.warnyin/workflow/codemap.md +91 -91
  57. package/src/.warnyin/workflow/contexts/README.md +51 -51
  58. package/src/.warnyin/workflow/contexts/build.md +25 -25
  59. package/src/.warnyin/workflow/contexts/research.md +25 -25
  60. package/src/.warnyin/workflow/contexts/review.md +25 -25
  61. package/src/.warnyin/workflow/explore.md +32 -32
  62. package/src/.warnyin/workflow/feedback.md +212 -212
  63. package/src/.warnyin/workflow/init.md +136 -136
  64. package/src/.warnyin/workflow/next.md +48 -48
  65. package/src/.warnyin/workflow/roles/README.md +47 -47
  66. package/src/.warnyin/workflow/roles/ba.md +25 -25
  67. package/src/.warnyin/workflow/roles/developer.md +31 -31
  68. package/src/.warnyin/workflow/roles/infra.md +24 -24
  69. package/src/.warnyin/workflow/roles/po.md +28 -28
  70. package/src/.warnyin/workflow/roles/qa.md +35 -35
  71. package/src/.warnyin/workflow/roles/sa.md +28 -28
  72. package/src/.warnyin/workflow/roles/security.md +39 -39
  73. package/src/.warnyin/workflow/roles/tech-lead.md +28 -28
  74. package/src/.warnyin/workflow/scripts/build-wave.mjs +145 -145
  75. package/src/.warnyin/workflow/scripts/validate-topic.mjs +378 -378
  76. package/src/.warnyin/workflow/stages/build.md +98 -98
  77. package/src/.warnyin/workflow/stages/design.md +154 -154
  78. package/src/.warnyin/workflow/stages/discovery.md +256 -256
  79. package/src/.warnyin/workflow/stages/ship.md +94 -94
  80. package/src/.warnyin/workflow/stages/verify.md +82 -82
  81. package/src/.warnyin/workflow/triage.md +74 -74
  82. package/src/AGENTS.md +54 -54
  83. package/src/bin/cli.mjs +333 -310
@@ -1,212 +1,212 @@
1
- # FEEDBACK — เปิด GitHub Issue แจ้ง feedback ที่ warnyin/warnyin-agents
2
-
3
- > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
- > เป้าหมาย: รับข้อมูลจาก user → สัมภาษณ์สั้น → เรียบเรียง title + body → **preview + confirm** → ยิงด้วย `gh` หรือ fallback URL → คืน link ให้ user
5
-
6
- ---
7
-
8
- ## 1. FEEDBACK คืออะไร / ใช้เมื่อไหร่
9
-
10
- FEEDBACK ช่วยให้ผู้ใช้ปลายทางของ Warnyin Standard Workflow **เปิด GitHub issue** กลับมาที่ทีมได้โดยไม่ต้องออกจาก flow
11
-
12
- - ใช้เมื่อ: อยากแจ้ง **ปัญหา (Bug) / ฟีเจอร์ใหม่ที่อยากได้ (Feature) / จุดที่อยากปรับปรุง (Improvement)**
13
- - ปลายทาง: repo `warnyin/warnyin-agents` เสมอ (hardcode)
14
- - ต่างจากการเขียน issue เอง: AI ช่วยสัมภาษณ์สั้น เรียบเรียงรูปแบบมาตรฐาน และจัดการ title prefix + label ให้อัตโนมัติ
15
-
16
- ---
17
-
18
- ## 2. Input ที่รับ
19
-
20
- - **seed argument** (`$ARGUMENTS`) — ถ้า user ส่งมา ใช้เป็นจุดเริ่มต้น (อาจเป็นประเภท เช่น "Bug" หรือข้อความ feedback สั้นๆ)
21
- - **คำตอบจาก user** — ข้อมูลที่ถามสัมภาษณ์เท่านั้น (**ห้ามดึง session context อัตโนมัติ** — กัน path/secret leak ขึ้น public issue)
22
- - ถ้า user ไม่ส่ง seed → ถามประเภทก่อน
23
-
24
- ---
25
-
26
- ## 3. Flow หลัก (ทำตามลำดับ)
27
-
28
- ### ขั้นที่ 1 — เลือกประเภท
29
-
30
- ถามหรืออ่านจาก seed ว่าเป็น:
31
-
32
- | ประเภท | Title prefix | Label (best-effort) |
33
- |---|---|---|
34
- | Bug | `[Bug]` | `bug` |
35
- | Feature | `[Feature]` | `enhancement` |
36
- | Improvement | `[Improvement]` | `enhancement` |
37
-
38
- ถ้า seed ชัดเจนพอ (เช่น "Bug" หรือข้อความที่บ่งชี้ประเภท) → ยืนยันกับ user แล้วข้ามไปขั้นที่ 2 ได้เลย
39
-
40
- ### ขั้นที่ 2 — สัมภาษณ์สั้น (ตามประเภท)
41
-
42
- **Bug:**
43
- 1. สรุปปัญหา (อะไรผิดปกติ?)
44
- 2. ขั้นตอน reproduce (ทำอะไรแล้วเกิดปัญหา?)
45
- 3. ผลที่คาด vs ผลที่เกิดจริง
46
- 4. เวอร์ชัน/สภาพแวดล้อม (workflow version, OS, node — **ถามเฉพาะถ้า user อยากระบุ** ไม่บังคับ)
47
- 5. หมายเหตุเพิ่มเติม (optional)
48
-
49
- **Feature:**
50
- 1. ปัญหา/ความต้องการ (อยากได้อะไรเพิ่ม?)
51
- 2. ข้อเสนอ (อยากได้อะไร ทำงานยังไง?)
52
- 3. คุณค่า/ใครได้ประโยชน์
53
- 4. ทางเลือกที่เคยลอง (optional)
54
-
55
- **Improvement:**
56
- 1. จุดที่อยากปรับ (อะไรที่รู้สึกว่าควรดีกว่านี้?)
57
- 2. เหตุผล/ปัญหาปัจจุบัน
58
- 3. ผลที่คาดหลังปรับ
59
-
60
- > **กฎ privacy (D4):** ใช้เฉพาะข้อมูลที่ user ให้ในการสัมภาษณ์ — **ห้ามแปะ error/โค้ด/path จาก session ลง body โดยไม่ได้รับอนุญาต** เว้นแต่ user พิมพ์ให้เองหรือสั่งชัดว่า "ใส่ error นี้ด้วย"
61
-
62
- ### ขั้นที่ 3 — เรียบเรียง title + body
63
-
64
- **Title:** `<prefix> <สรุปสั้นๆ 1 บรรทัด>`
65
- ตัวอย่าง: `[Bug] workflow verify ล้มเหลวเมื่อไม่มี git remote`
66
-
67
- **Body:** markdown template ตามประเภท
68
-
69
- สำหรับ **Bug:**
70
- ```
71
- ## สรุปปัญหา
72
- <สรุป>
73
-
74
- ## ขั้นตอน Reproduce
75
- 1. <ขั้นตอน>
76
- 2. ...
77
-
78
- ## ผลที่คาด
79
- <คาดหวัง>
80
-
81
- ## ผลที่เกิดจริง
82
- <ที่เกิดขึ้นจริง>
83
-
84
- ## สภาพแวดล้อม
85
- - Workflow version: <ถ้ามี>
86
- - OS: <ถ้ามี>
87
- - Node: <ถ้ามี>
88
-
89
- ## หมายเหตุ
90
- <เพิ่มเติม ถ้ามี>
91
-
92
- ---
93
- *สร้างผ่าน `/warnyin:feedback:issue`*
94
- ```
95
-
96
- สำหรับ **Feature:**
97
- ```
98
- ## ปัญหา / ความต้องการ
99
- <ปัญหา>
100
-
101
- ## ข้อเสนอ
102
- <อยากได้อะไร ทำงานยังไง>
103
-
104
- ## คุณค่า / ใครได้ประโยชน์
105
- <คุณค่า>
106
-
107
- ## ทางเลือกที่เคยลอง
108
- <ถ้ามี>
109
-
110
- ---
111
- *สร้างผ่าน `/warnyin:feedback:issue`*
112
- ```
113
-
114
- สำหรับ **Improvement:**
115
- ```
116
- ## จุดที่อยากปรับ
117
- <จุดที่อยากปรับ>
118
-
119
- ## เหตุผล / ปัญหาปัจจุบัน
120
- <ปัญหา>
121
-
122
- ## ผลที่คาดหลังปรับ
123
- <ผลที่คาด>
124
-
125
- ---
126
- *สร้างผ่าน `/warnyin:feedback:issue`*
127
- ```
128
-
129
- ---
130
-
131
- ## 4. Detect Ladder — เลือก path ยิง issue
132
-
133
- เดินตามลำดับนี้เสมอ:
134
-
135
- ```
136
- 1. มี gh ใน PATH ไหม?
137
- └─ ไม่มี → fallback URL (แจ้งเหตุผล: "ไม่พบ gh CLI")
138
-
139
- 2. gh auth status ผ่านไหม?
140
- └─ ไม่ผ่าน → fallback URL (แจ้งเหตุผล: "ยังไม่ได้ login gh")
141
-
142
- 3. พร้อม → ยิง gh issue create (ขั้นที่ 5)
143
- ```
144
-
145
- **ไม่สอน/ติดตั้ง gh ให้** — แค่ detect แล้ว fallback
146
-
147
- ---
148
-
149
- ## 5. Confirm Gate (บังคับ — D5)
150
-
151
- **ก่อนยิงทุกกรณี** แสดง preview ให้ user ดูก่อน:
152
-
153
- ```
154
- 📋 Preview issue ที่จะส่ง:
155
-
156
- **Title:** [Bug] workflow verify ล้มเหลวเมื่อไม่มี git remote
157
-
158
- **Body:**
159
- ---
160
- ## สรุปปัญหา
161
- ...
162
- ---
163
-
164
- ยืนยันส่ง issue นี้? (ใช่ / แก้ไข / ยกเลิก)
165
- ```
166
-
167
- - **ใช่ / ยืนยัน** → ยิง
168
- - **แก้ไข** → รับข้อมูลเพิ่ม แล้วแสดง preview ใหม่
169
- - **ยกเลิก** → หยุด ไม่ยิง
170
-
171
- **ห้ามยิงก่อน user ยืนยัน** — ไม่มีข้อยกเว้น
172
-
173
- ---
174
-
175
- ## 6. ยิง issue
176
-
177
- ### Path สำเร็จ (มี gh + login แล้ว)
178
-
179
- ```bash
180
- gh issue create \
181
- --repo warnyin/warnyin-agents \
182
- --title "<prefix> <สรุป>" \
183
- --body "<body>" \
184
- --label <label>
185
- ```
186
-
187
- ถ้า `--label` fail เพราะ permission (non-collaborator) → **retry ยิงใหม่โดยไม่มี `--label`** แล้วแจ้ง user ว่า maintainer จะ label ทีหลัง
188
-
189
- คืน URL ของ issue ที่สร้าง
190
-
191
- ### Path Fallback (ไม่มี gh หรือไม่ได้ login)
192
-
193
- สร้าง URL พร้อมข้อมูล (urlencode title + body + labels):
194
-
195
- ```
196
- https://github.com/warnyin/warnyin-agents/issues/new?title=<urlenc>&body=<urlenc>&labels=<urlenc>
197
- ```
198
-
199
- แจ้ง user ว่า:
200
- - เหตุผลที่ degrade (ไม่มี gh หรือ ยังไม่ได้ login)
201
- - ให้เปิด URL นี้ใน browser เพื่อส่ง issue
202
-
203
- ---
204
-
205
- ## 7. กฎที่ต้องเคร่งครัด
206
-
207
- 1. **ไม่ดึง session context เองโดยไม่ได้รับอนุญาต** — body ประกอบจากข้อมูลที่ user ให้เท่านั้น
208
- 2. **Confirm gate บังคับ** — preview ก่อนยิงทุกกรณี ไม่มีข้อยกเว้น
209
- 3. **Footer ไม่ใส่ path/secret/ข้อมูลเครื่อง** — มีแค่ `*สร้างผ่าน /warnyin:feedback:issue*`
210
- 4. **repo hardcode** `warnyin/warnyin-agents` — ไม่ยิงไป repo อื่น
211
- 5. **title prefix บังคับ** — `[Bug]` / `[Feature]` / `[Improvement]` ขึ้นต้น title เสมอ
212
- 6. **label best-effort** — fail เงียบได้ retry ไม่มี label แล้วแจ้ง user
1
+ # FEEDBACK — เปิด GitHub Issue แจ้ง feedback ที่ warnyin/warnyin-agents
2
+
3
+ > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
+ > เป้าหมาย: รับข้อมูลจาก user → สัมภาษณ์สั้น → เรียบเรียง title + body → **preview + confirm** → ยิงด้วย `gh` หรือ fallback URL → คืน link ให้ user
5
+
6
+ ---
7
+
8
+ ## 1. FEEDBACK คืออะไร / ใช้เมื่อไหร่
9
+
10
+ FEEDBACK ช่วยให้ผู้ใช้ปลายทางของ Warnyin Standard Workflow **เปิด GitHub issue** กลับมาที่ทีมได้โดยไม่ต้องออกจาก flow
11
+
12
+ - ใช้เมื่อ: อยากแจ้ง **ปัญหา (Bug) / ฟีเจอร์ใหม่ที่อยากได้ (Feature) / จุดที่อยากปรับปรุง (Improvement)**
13
+ - ปลายทาง: repo `warnyin/warnyin-agents` เสมอ (hardcode)
14
+ - ต่างจากการเขียน issue เอง: AI ช่วยสัมภาษณ์สั้น เรียบเรียงรูปแบบมาตรฐาน และจัดการ title prefix + label ให้อัตโนมัติ
15
+
16
+ ---
17
+
18
+ ## 2. Input ที่รับ
19
+
20
+ - **seed argument** (`$ARGUMENTS`) — ถ้า user ส่งมา ใช้เป็นจุดเริ่มต้น (อาจเป็นประเภท เช่น "Bug" หรือข้อความ feedback สั้นๆ)
21
+ - **คำตอบจาก user** — ข้อมูลที่ถามสัมภาษณ์เท่านั้น (**ห้ามดึง session context อัตโนมัติ** — กัน path/secret leak ขึ้น public issue)
22
+ - ถ้า user ไม่ส่ง seed → ถามประเภทก่อน
23
+
24
+ ---
25
+
26
+ ## 3. Flow หลัก (ทำตามลำดับ)
27
+
28
+ ### ขั้นที่ 1 — เลือกประเภท
29
+
30
+ ถามหรืออ่านจาก seed ว่าเป็น:
31
+
32
+ | ประเภท | Title prefix | Label (best-effort) |
33
+ |---|---|---|
34
+ | Bug | `[Bug]` | `bug` |
35
+ | Feature | `[Feature]` | `enhancement` |
36
+ | Improvement | `[Improvement]` | `enhancement` |
37
+
38
+ ถ้า seed ชัดเจนพอ (เช่น "Bug" หรือข้อความที่บ่งชี้ประเภท) → ยืนยันกับ user แล้วข้ามไปขั้นที่ 2 ได้เลย
39
+
40
+ ### ขั้นที่ 2 — สัมภาษณ์สั้น (ตามประเภท)
41
+
42
+ **Bug:**
43
+ 1. สรุปปัญหา (อะไรผิดปกติ?)
44
+ 2. ขั้นตอน reproduce (ทำอะไรแล้วเกิดปัญหา?)
45
+ 3. ผลที่คาด vs ผลที่เกิดจริง
46
+ 4. เวอร์ชัน/สภาพแวดล้อม (workflow version, OS, node — **ถามเฉพาะถ้า user อยากระบุ** ไม่บังคับ)
47
+ 5. หมายเหตุเพิ่มเติม (optional)
48
+
49
+ **Feature:**
50
+ 1. ปัญหา/ความต้องการ (อยากได้อะไรเพิ่ม?)
51
+ 2. ข้อเสนอ (อยากได้อะไร ทำงานยังไง?)
52
+ 3. คุณค่า/ใครได้ประโยชน์
53
+ 4. ทางเลือกที่เคยลอง (optional)
54
+
55
+ **Improvement:**
56
+ 1. จุดที่อยากปรับ (อะไรที่รู้สึกว่าควรดีกว่านี้?)
57
+ 2. เหตุผล/ปัญหาปัจจุบัน
58
+ 3. ผลที่คาดหลังปรับ
59
+
60
+ > **กฎ privacy (D4):** ใช้เฉพาะข้อมูลที่ user ให้ในการสัมภาษณ์ — **ห้ามแปะ error/โค้ด/path จาก session ลง body โดยไม่ได้รับอนุญาต** เว้นแต่ user พิมพ์ให้เองหรือสั่งชัดว่า "ใส่ error นี้ด้วย"
61
+
62
+ ### ขั้นที่ 3 — เรียบเรียง title + body
63
+
64
+ **Title:** `<prefix> <สรุปสั้นๆ 1 บรรทัด>`
65
+ ตัวอย่าง: `[Bug] workflow verify ล้มเหลวเมื่อไม่มี git remote`
66
+
67
+ **Body:** markdown template ตามประเภท
68
+
69
+ สำหรับ **Bug:**
70
+ ```
71
+ ## สรุปปัญหา
72
+ <สรุป>
73
+
74
+ ## ขั้นตอน Reproduce
75
+ 1. <ขั้นตอน>
76
+ 2. ...
77
+
78
+ ## ผลที่คาด
79
+ <คาดหวัง>
80
+
81
+ ## ผลที่เกิดจริง
82
+ <ที่เกิดขึ้นจริง>
83
+
84
+ ## สภาพแวดล้อม
85
+ - Workflow version: <ถ้ามี>
86
+ - OS: <ถ้ามี>
87
+ - Node: <ถ้ามี>
88
+
89
+ ## หมายเหตุ
90
+ <เพิ่มเติม ถ้ามี>
91
+
92
+ ---
93
+ *สร้างผ่าน `/warnyin:feedback:issue`*
94
+ ```
95
+
96
+ สำหรับ **Feature:**
97
+ ```
98
+ ## ปัญหา / ความต้องการ
99
+ <ปัญหา>
100
+
101
+ ## ข้อเสนอ
102
+ <อยากได้อะไร ทำงานยังไง>
103
+
104
+ ## คุณค่า / ใครได้ประโยชน์
105
+ <คุณค่า>
106
+
107
+ ## ทางเลือกที่เคยลอง
108
+ <ถ้ามี>
109
+
110
+ ---
111
+ *สร้างผ่าน `/warnyin:feedback:issue`*
112
+ ```
113
+
114
+ สำหรับ **Improvement:**
115
+ ```
116
+ ## จุดที่อยากปรับ
117
+ <จุดที่อยากปรับ>
118
+
119
+ ## เหตุผล / ปัญหาปัจจุบัน
120
+ <ปัญหา>
121
+
122
+ ## ผลที่คาดหลังปรับ
123
+ <ผลที่คาด>
124
+
125
+ ---
126
+ *สร้างผ่าน `/warnyin:feedback:issue`*
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 4. Detect Ladder — เลือก path ยิง issue
132
+
133
+ เดินตามลำดับนี้เสมอ:
134
+
135
+ ```
136
+ 1. มี gh ใน PATH ไหม?
137
+ └─ ไม่มี → fallback URL (แจ้งเหตุผล: "ไม่พบ gh CLI")
138
+
139
+ 2. gh auth status ผ่านไหม?
140
+ └─ ไม่ผ่าน → fallback URL (แจ้งเหตุผล: "ยังไม่ได้ login gh")
141
+
142
+ 3. พร้อม → ยิง gh issue create (ขั้นที่ 5)
143
+ ```
144
+
145
+ **ไม่สอน/ติดตั้ง gh ให้** — แค่ detect แล้ว fallback
146
+
147
+ ---
148
+
149
+ ## 5. Confirm Gate (บังคับ — D5)
150
+
151
+ **ก่อนยิงทุกกรณี** แสดง preview ให้ user ดูก่อน:
152
+
153
+ ```
154
+ 📋 Preview issue ที่จะส่ง:
155
+
156
+ **Title:** [Bug] workflow verify ล้มเหลวเมื่อไม่มี git remote
157
+
158
+ **Body:**
159
+ ---
160
+ ## สรุปปัญหา
161
+ ...
162
+ ---
163
+
164
+ ยืนยันส่ง issue นี้? (ใช่ / แก้ไข / ยกเลิก)
165
+ ```
166
+
167
+ - **ใช่ / ยืนยัน** → ยิง
168
+ - **แก้ไข** → รับข้อมูลเพิ่ม แล้วแสดง preview ใหม่
169
+ - **ยกเลิก** → หยุด ไม่ยิง
170
+
171
+ **ห้ามยิงก่อน user ยืนยัน** — ไม่มีข้อยกเว้น
172
+
173
+ ---
174
+
175
+ ## 6. ยิง issue
176
+
177
+ ### Path สำเร็จ (มี gh + login แล้ว)
178
+
179
+ ```bash
180
+ gh issue create \
181
+ --repo warnyin/warnyin-agents \
182
+ --title "<prefix> <สรุป>" \
183
+ --body "<body>" \
184
+ --label <label>
185
+ ```
186
+
187
+ ถ้า `--label` fail เพราะ permission (non-collaborator) → **retry ยิงใหม่โดยไม่มี `--label`** แล้วแจ้ง user ว่า maintainer จะ label ทีหลัง
188
+
189
+ คืน URL ของ issue ที่สร้าง
190
+
191
+ ### Path Fallback (ไม่มี gh หรือไม่ได้ login)
192
+
193
+ สร้าง URL พร้อมข้อมูล (urlencode title + body + labels):
194
+
195
+ ```
196
+ https://github.com/warnyin/warnyin-agents/issues/new?title=<urlenc>&body=<urlenc>&labels=<urlenc>
197
+ ```
198
+
199
+ แจ้ง user ว่า:
200
+ - เหตุผลที่ degrade (ไม่มี gh หรือ ยังไม่ได้ login)
201
+ - ให้เปิด URL นี้ใน browser เพื่อส่ง issue
202
+
203
+ ---
204
+
205
+ ## 7. กฎที่ต้องเคร่งครัด
206
+
207
+ 1. **ไม่ดึง session context เองโดยไม่ได้รับอนุญาต** — body ประกอบจากข้อมูลที่ user ให้เท่านั้น
208
+ 2. **Confirm gate บังคับ** — preview ก่อนยิงทุกกรณี ไม่มีข้อยกเว้น
209
+ 3. **Footer ไม่ใส่ path/secret/ข้อมูลเครื่อง** — มีแค่ `*สร้างผ่าน /warnyin:feedback:issue*`
210
+ 4. **repo hardcode** `warnyin/warnyin-agents` — ไม่ยิงไป repo อื่น
211
+ 5. **title prefix บังคับ** — `[Bug]` / `[Feature]` / `[Improvement]` ขึ้นต้น title เสมอ
212
+ 6. **label best-effort** — fail เงียบได้ retry ไม่มี label แล้วแจ้ง user