@warnyin/agents 0.7.0 → 0.8.5

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.
package/CHANGELOG.md CHANGED
@@ -5,8 +5,61 @@
5
5
  รูปแบบอ้างอิง [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
6
6
  และโปรเจกต์ยึด [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
7
7
 
8
+ ## Migration guide
9
+
10
+ อัปเกรดจากรุ่นเก่าที่ layout ต่างไป (installer จะ **เตือนให้ย้ายเอง ไม่แตะงานจริงของคุณ**):
11
+
12
+ > **ลำดับที่แนะนำ: ย้ายงานจริงก่อน แล้วค่อยรัน `npx @warnyin/agents`**
13
+ > คำสั่งย้ายด้านล่างใช้รูปแบบ `git mv <เก่า>/* docs/stages/` (ย้าย *เนื้อหา* ไม่ใช่ทั้งโฟลเดอร์) จึงปลอดภัยทั้งกรณีที่ยังไม่มี `docs/stages/` และกรณีที่เผลอรัน installer ไปก่อน (installer สร้าง `docs/stages/` เปล่าให้แล้ว) — กันงานจริงไปซ้อนเป็น `docs/stages/stages/`
14
+
15
+ | จากรุ่น | layout เดิม | ต้องทำเอง (งานจริงปลอดภัย ไม่ถูกแตะ) |
16
+ |---|---|---|
17
+ | **≤0.2.x** | core `workflow/` + งานจริง `warnyin-stages/` ที่ root | `mkdir -p docs/stages && git mv warnyin-stages/* docs/stages/` แล้วลบ core เก่า `rm -rf workflow warnyin-stages` |
18
+ | **0.3–0.5.x** | ทุกอย่างใต้ `warnyin/{workflow,template,installer,stages}` | `mkdir -p docs/stages && git mv warnyin/stages/* docs/stages/` แล้วลบ core เก่า `rm -rf warnyin` |
19
+
20
+ จากนั้นรัน installer อีกครั้ง — installer จะวาง `.warnyin/` (core) ชุดใหม่ + แยกงานจริงไว้ที่ `docs/stages/` ให้
21
+
22
+ > **0.6.0 → 0.7.0:** ผู้ใช้ปลายทาง (`npx @warnyin/agents`) **ไม่ต้องทำอะไร** — payload ที่ติดตั้งคงเดิม การเปลี่ยนแปลงทั้งหมด (bin path → `src/`, dogfood 2-layer) เป็นเรื่องภายใน repo เท่านั้น; ผู้พัฒนา repo เอง (contributor) ดู [`CONTRIBUTING.md`](CONTRIBUTING.md)
23
+
8
24
  ## [Unreleased]
9
25
 
26
+ ## [0.8.5] - 2026-06-07
27
+
28
+ ### Added
29
+ - **Model-tier guidance ใน context profile** — `src/.warnyin/workflow/contexts/{research,build,review}.md` เพิ่มบรรทัด "Model tier" ใน section Tool preference (generic: `research`→`deepest reasoning` · `build`→`balanced`/fan-out worker เชิงกลไก→`cheap` · `review`→`balanced+`) + ตาราง legend ใน `contexts/README.md` — แนะนำ model tier ตาม posture เพื่อคุม token/cost; **tool-agnostic** ไม่ผูกชื่อรุ่น (harness map เอง) · global `docs/rule.md` §1 payload-guidance-generic — `.md` ล้วน, ติดมากับ `--update` รอบถัดไป
30
+ - **Worked-example pointer ใน README** — section "ตัวอย่างจริง (worked example)" ชี้ `docs/example-walkthrough.md` (เดิน topic จริง `cli-legacy-warning-fix` ครบ 5 stage บน repo) ให้ผู้ใช้ใหม่เห็น artifact จริง
31
+
32
+ ## [0.8.4] - 2026-06-07
33
+
34
+ ### Added
35
+ - **Utility skills (Claude adapter, auto-invocable)** — 3 safe utility skill ใหม่ `src/.claude/skills/{update-codemaps,explore,next}/SKILL.md` (`/update-codemaps`, `/explore`, `/next`): Claude project skill ที่ model **auto-invoke ได้เอง (description-driven)** body ชี้ playbook กลางเดิม (`.warnyin/workflow/{codemap,explore,next}.md`) ไม่ duplicate — auto-invoke เฉพาะ utility **read-only safe**; ผู้ใช้ปลายทางรับ skills อัตโนมัติตอน `npx @warnyin/agents` / `--update`. command `/warnyin:*` เดิม **ไม่เปลี่ยน** (non-breaking); build/ship คงเป็น command user-only (irreversible). global `docs/rule.md` §1 skill-adapter convention
36
+
37
+ ### Changed
38
+ - **installer/packaging รองรับ skills** — `cli.mjs` CORE +`.claude/skills`; `package.json files` +`src/.claude/skills` (nested dotfolder ระบุชัด); `verify-pack` ALLOWED_PREFIX +`src/.claude/skills/` + R1 assert `hasSkills` (skills เป็น required payload กันหล่นเงียบ); test suite 18→19 (verify-pack 9→10)
39
+
40
+ ## [0.8.3] - 2026-06-07
41
+
42
+ ### Added
43
+ - **Learned-rule capture ใน SHIP** — `ship.md` playbook (§3 principle 7 ขยาย + §4 step 1/3/5 + §6 gate) + command + template `[topic]/ship.md` (section "Learned rules"): จับ rule ที่ได้จากการทำจริง (planned + emergent จาก build/verify/troubleshooting) ด้วย `rule + evidence(บังคับ) + scope` แล้ว user ยืนยัน per-rule ก่อน promote — unify กับกลไก "รอ SHIP" เดิม; global `docs/rule.md` §1 + continuous-learning discipline + unify-in-place — `.md` ล้วน, ติดมากับ `--update` รอบถัดไป
44
+
45
+ ## [0.8.2] - 2026-06-07
46
+
47
+ ### Added
48
+ - **Security checklist (agent-runtime + supply-chain)** — `roles/security.md` เพิ่ม section "Runtime / operational security" (secret isolation · no-egress · identity separation + Claude adapter note) + checklist item supply-chain/MCP (prompt-injection surface); `verify.md` §2 อ้าง runtime security ตอนรัน local env; `install-skill.md` step 4 เสริม warning prompt-injection; global `docs/rule.md` §3 ขยายเป็น Security baseline 2 มิติ (CI + agent-runtime) — `.md` ล้วน, ติดมากับ `--update` รอบถัดไป
49
+
50
+ ## [0.8.1] - 2026-06-07
51
+
52
+ ### Added
53
+ - **Defensive rules** ใน BUILD/VERIFY playbook (§3) + developer.md/qa.md checklist + global `docs/rule.md` §1 — เวอร์ชัน enforce ของ "ห้ามเดา": (1) **investigate-before-edit** ก่อนแก้ไฟล์ที่มีอยู่ต้องเข้าใจ (ใครใช้/contract/เจตนา), (2) **config-protection** ห้ามแก้ config/test "เพื่อให้ผ่าน" แทนแก้โค้ดจริง — `.md` ล้วน, ติดมากับ `--update` รอบถัดไป
54
+
55
+ ## [0.8.0] - 2026-06-07
56
+
57
+ ### Added
58
+ - **Context profiles** (`.warnyin/workflow/contexts/{research,build,review,README}.md`) — session-level posture 3 โหมด (สำรวจ/สร้าง/ตรวจ) คู่ขนานกับ role card (task-level lens); playbook แต่ละ stage มี callout ชี้ context ที่เข้าคู่ (Discovery→research · DESIGN→research+build · BUILD→build · VERIFY→review · SHIP→review) — `.md` ล้วน, ติดมากับ `--update` รอบถัดไป ไม่ต้องตั้งค่าเพิ่ม
59
+
60
+ ### Fixed
61
+ - โครงสร้าง repo ใน `.warnyin/workflow/README.md` ให้ตรง layout จริงหลัง restructure 0.7.0 (`src/` layer + `.warnyin/`) — เดิมยังเป็น layout เก่า (`warnyin/`, `bin/cli.mjs`)
62
+
10
63
  ## [0.7.0] - 2026-06-07
11
64
 
12
65
  ### Added
package/README.md CHANGED
@@ -27,6 +27,8 @@ npx @warnyin/agents --update # อัปเดต playbook กลางเป
27
27
  - โปรเจกต์ที่มี `CLAUDE.md` / `AGENTS.md` อยู่แล้ว → installer **ต่อท้ายเป็น section** ไม่เขียนทับ
28
28
  - `--update` เขียนทับเฉพาะ core (`.warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `.warnyin/template/`) — ไม่แตะ `docs/` และงานจริง
29
29
 
30
+ > **อัปเกรดจากรุ่นเก่า?** (`workflow/` หรือ `warnyin/` layout) ดู [Migration guide](CHANGELOG.md#migration-guide) ก่อนรัน installer รอบใหม่
31
+
30
32
  ## เริ่มใช้งาน
31
33
 
32
34
  ```bash
@@ -45,6 +47,13 @@ npx @warnyin/agents --update # อัปเดต playbook กลางเป
45
47
  /warnyin:ship <slug> # promote ความรู้ขึ้น docs/ + archive topic
46
48
  ```
47
49
 
50
+ ## ตัวอย่างจริง (worked example)
51
+
52
+ อยากเห็นว่า "output ที่ทำดีแล้ว" หน้าตาเป็นยังไงก่อนเริ่ม topic ของตัวเอง?
53
+ [`docs/example-walkthrough.md`](docs/example-walkthrough.md) ไล่ topic จริง (`cli-legacy-warning-fix`)
54
+ ครบทั้ง 5 stage — เน้น **เหตุผลการตัดสินใจ** ของแต่ละ stage พร้อมลิงก์ไป artifact จริงใน `docs/stages/achieved/`
55
+ (เปิดดูบน GitHub repo)
56
+
48
57
  ## แนวคิดหลัก: Tool-agnostic, single source of truth
49
58
 
50
59
  แก่นของ workflow (กฎ / ขั้นตอน / เกณฑ์ผ่าน) เขียน**ครั้งเดียว**เป็น markdown ใน `.warnyin/workflow/stages/`
@@ -61,7 +70,7 @@ AI แต่ละเครื่องมีแค่ adapter บางๆ ช
61
70
  ## โครงสร้างที่ติดตั้งลงโปรเจกต์
62
71
 
63
72
  ```
64
- warnyin/ # ★ ทุกอย่างของ workflow รวมใต้โฟลเดอร์เดียว
73
+ .warnyin/ # ★ ทุกอย่างของ workflow รวมใต้โฟลเดอร์เดียว
65
74
  workflow/ # playbook กลาง — single source of truth
66
75
  init.md # INIT: วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
67
76
  roles/ # role card: BA · PO · SA · Tech Lead · Developer · QA · Security · Infra
@@ -108,9 +117,27 @@ role card กลางที่ `.warnyin/workflow/roles/` — แต่ละ
108
117
  - Tech Lead/Security ผูกกับ built-in `/code-review` และ `/security-review` ของ Claude Code
109
118
  - skill เสริมต่อ role ติดตั้งด้วย `/warnyin:install-skill` (รายการกลาง: `.warnyin/workflow/roles/README.md`)
110
119
 
120
+ ## พัฒนา repo นี้ (contributor)
121
+
122
+ repo นี้ใช้ **bootstrap / self-hosting**: source ของ workflow v-next อยู่ใน `src/` (committed/publish) ส่วน root ติดตั้ง release เสถียรไว้ dogfood (gitignored) — **clone แล้วต้อง bootstrap ก่อนใช้**:
123
+
124
+ ```bash
125
+ git clone https://github.com/warnyin/warnyin-agents.git
126
+ cd warnyin-agents
127
+ npm run setup:dogfood # ติดตั้ง release เสถียรลง root (.warnyin/.claude/CLAUDE.md/AGENTS.md — gitignored)
128
+ npm test # black-box test installer (node --test, discover src/tests/)
129
+ npm run setup:sandbox # ทดสอบ v-next จาก src/ ลง temp dir (version skew — dogfood ที่ root ไม่โดนแตะ)
130
+ ```
131
+
132
+ - พัฒนา workflow v-next ที่ `src/` · dogfood ที่ root = release เสถียร (แก้ `src/` ไม่กระทบ session ที่กำลังทำงาน)
133
+ - รายละเอียดเต็ม: [`CONTRIBUTING.md`](CONTRIBUTING.md)
134
+
111
135
  ## Release เวอร์ชันใหม่ (สำหรับผู้ดูแล repo นี้)
112
136
 
137
+ > publish payload มาจาก `src/` (allowlist `package.json files`) — `npm run verify:pack` เป็น gate ก่อน publish (CI ตรวจทุก PR): payload ต้องติด `src/.warnyin/`+`src/.claude/` ครบ ไม่มี tooling/docs รั่ว
138
+
113
139
  ```bash
140
+ npm run verify:pack # ตรวจ payload ก่อน (Windows: npm pack --dry-run --json → checkFiles)
114
141
  npm version patch # bump เวอร์ชัน + git tag
115
142
  npm publish # ขึ้น npm registry (มี OTP)
116
143
  git push --follow-tags
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warnyin/agents",
3
- "version": "0.7.0",
3
+ "version": "0.8.5",
4
4
  "description": "Warnyin Standard Workflow installer — 5-stage ways of work (Discovery/DESIGN/BUILD/VERIFY/SHIP) สำหรับทุกโปรเจกต์",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "scripts": {
14
14
  "test": "node --test",
15
+ "lint:md": "node src/scripts/lint-md.mjs",
15
16
  "verify:pack": "node src/scripts/verify-pack.mjs",
16
17
  "setup:dogfood": "node src/scripts/setup-dogfood.mjs",
17
18
  "setup:sandbox": "node src/scripts/setup-sandbox.mjs"
@@ -21,6 +22,7 @@
21
22
  "src/.warnyin",
22
23
  "src/.claude/commands",
23
24
  "src/.claude/agents",
25
+ "src/.claude/skills",
24
26
  "src/AGENTS.md",
25
27
  "README.md",
26
28
  "CHANGELOG.md",
@@ -27,3 +27,4 @@ argument-hint: "[slug ของ topic]"
27
27
  - ห้ามแก้ rule/standard กลางใน `docs/` (rule ใหม่ที่เสนอถูก note ไว้ใน `tasks/<task>/rule.md` รอ SHIP)
28
28
  - ปัญหายาก/ซ้ำที่แก้ได้ → `docs/stages/<slug>/troubleshooting.md` (SHIP จะยกขึ้น `docs/troubleshooting.md`)
29
29
  - เกณฑ์ปิด BUILD ดู Gate ข้อ 7 ของ playbook
30
+ - คงเป็น command (user-only) โดยตั้งใจ — BUILD เป็น stateful/irreversible (สร้าง branch, fan-out, แก้ไฟล์) ต้องให้ user สั่งชัด ไม่ทำเป็น skill auto-invoke
@@ -8,7 +8,7 @@ argument-hint: "[ชื่อ role เช่น sa, qa — เว้นว่า
8
8
  1. อ่านตาราง **"Skill เสริมต่อ role"** ใน `.warnyin/workflow/roles/README.md` — นั่นคือ single source of truth ของรายการ skill (**ห้าม hardcode รายการในไฟล์นี้** — แก้รายการให้แก้ที่ตารางนั้น)
9
9
  2. **เช็คสถานะก่อน:** ตัวไหนติดตั้งแล้วบ้าง — ดูจาก `npx skills ls -g` (ถ้าไม่มีคำสั่งนี้ให้ดูโฟลเดอร์ `~/.agents/skills/` และ `~/.claude/skills/`) — สรุปเป็นตาราง ติดตั้งแล้ว ✅ / ยังไม่ติดตั้ง ⬜
10
10
  3. ขอบเขต: $ARGUMENTS ระบุ role → เฉพาะ skill ของ role นั้น; เว้นว่าง → ทุกตัวที่ยังไม่ติดตั้ง
11
- 4. **ให้ user เลือกก่อนติดตั้ง:** ใช้ AskUserQuestion (multiSelect) แสดงแต่ละตัวพร้อม ที่มา (`owner/repo@skill`) + คำเตือนว่าเป็น third-party (ไม่ใช่ official, ตรวจเนื้อหาได้ที่ skills.sh)
11
+ 4. **ให้ user เลือกก่อนติดตั้ง:** ใช้ AskUserQuestion (multiSelect) แสดงแต่ละตัวพร้อม ที่มา (`owner/repo@skill`) + คำเตือนว่าเป็น third-party (ไม่ใช่ official, ตรวจเนื้อหาได้ที่ skills.sh) — **third-party skill = instruction ที่ AI execute ต่อ (prompt-injection surface) ตรวจเนื้อหาก่อนติดตั้ง**
12
12
  5. **ติดตั้งทีละตัว:** `npx skills add <owner/repo@skill> -g -y` (global — reference ไม่ vendor เข้า repo) → รายงานผลรวม สำเร็จ/ล้มเหลว พร้อมวิธีแก้ถ้าล้ม
13
13
  6. รายการที่เป็น **Claude Code built-in** (`/code-review`, `/security-review`) ไม่ต้องติดตั้ง — แจ้งว่าพร้อมใช้อยู่แล้ว
14
14
  7. ปิดท้าย: แนะนำว่า role ไหนใน workflow จะหยิบ skill เหล่านี้ใช้ตอนไหน (ตาม section "Skill เสริม" ใน role card)
@@ -7,13 +7,13 @@ argument-hint: "[slug ของ topic]"
7
7
 
8
8
  1. อ่าน `.warnyin/workflow/stages/ship.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด
9
9
  2. slug: $ARGUMENTS — ถ้าไม่ระบุให้ถามก่อน ว่าจะ ship topic ไหน (ดูโฟลเดอร์ใน `docs/stages/`)
10
- 3. **อ่านทำความเข้าใจ topic:** อ่าน `docs/stages/<slug>/` ทุกไฟล์ (รวม `tasks/*/rule.md` section "รอ SHIP" + `standard.md`) topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง; เช็คว่า VERIFY ผ่าน Gate แล้ว (`verify.md` สรุปผลผ่าน) ถ้ายังไม่ผ่าน หยุด แจ้ง user
10
+ 3. **อ่านทำความเข้าใจ topic + รวบรวม learned-rule candidate:** อ่าน `docs/stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง; เช็คว่า VERIFY ผ่าน Gate แล้ว (`verify.md` สรุปผลผ่าน) — ถ้ายังไม่ผ่าน → หยุด แจ้ง user. รวบรวม learned-rule candidate เป็นตาราง (`rule + evidence + scope + promote?`): **planned** จาก `tasks/*/rule.md` §2 "รอ SHIP" + `standard.md` · **emergent** สแกนบทเรียนใน `build.md`/`verify.md`/`troubleshooting.md`/diff `rule` ต้อง generalize (ไม่ใช่ incident), `evidence` บังคับ (pointer + ลิงก์ artifact; ไม่มี = ไม่ promote), `scope` = `component:<c>` หรือ `project`
11
11
  4. **จำแนก feature:** feature ใหม่ หรือปรับปรุง feature เดิม (เทียบกับ `docs/features/` ที่มีอยู่)
12
- 5. **ขออนุมัติครั้งเดียว** — ใช้ AskUserQuestion สรุป promotion plan: feature ใหม่/ปรับปรุง, ไฟล์กลางที่จะอัปเดต + สาระที่จะใส่, ชื่อโฟลเดอร์ archive → รอ go/no-go (อย่าแก้ไฟล์ใดก่อนได้ไฟเขียว)
12
+ 5. **ขออนุมัติครั้งเดียว** — ใช้ AskUserQuestion สรุป promotion plan: feature ใหม่/ปรับปรุง, ไฟล์กลางที่จะอัปเดต + สาระที่จะใส่, ชื่อโฟลเดอร์ archive — **fold ตาราง learned-rule (rule + evidence + scope) เข้า approval เดียวกัน ให้ user ยืนยัน per-rule** (✅ promote / ✂️ ตัด + เหตุผล) → รอ go/no-go (อย่าแก้ไฟล์ใดก่อนได้ไฟเขียว)
13
13
  6. **★ Archive ก่อน:** ย้ายทั้งโฟลเดอร์ `docs/stages/<slug>/` → `docs/stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv`; วันที่ = วันที่ ship) แล้วอ่านเนื้อหาจาก path ใหม่ระหว่าง promote
14
14
  7. **อัปเดตเอกสารกลาง** (กลั่นเข้าโครงสร้างไฟล์เดิม ไม่ copy ดิบ, ระวัง duplicate):
15
15
  - `docs/features/<feature-name>/` — ใหม่ → สร้าง (feature.md + business.md); เดิม → อัปเดต โดยใช้ business/proposal/design ของ topic
16
- - `docs/techstack/<component>/{rule,standard}.md` — จาก note "รอ SHIP" (พิจารณาครบทุกข้อ: promote หรือตัดทิ้งพร้อมเหตุผล)
16
+ - `docs/techstack/<component>/{rule,standard}.md` — learned-rule ที่ยืนยันแล้ว scope `component:<c>` + note "รอ SHIP" (พิจารณาครบทุกข้อ: promote หรือตัดทิ้งพร้อมเหตุผล); learned-rule scope `project` → `docs/rule.md`
17
17
  - `docs/techstack/<component>/structure.md` + `test.md` — โครงสร้างที่เปลี่ยน (ดูโค้ดจริง) + merge แผนเทสจาก `test.md` ของ topic
18
18
  - `docs/rule.md` — global rule ใหม่/ที่เปลี่ยน (เฉพาะกฎระดับโปรเจกต์)
19
19
  - `docs/troubleshooting.md` — merge entry จาก `troubleshooting.md` ของ topic
@@ -25,3 +25,4 @@ argument-hint: "[slug ของ topic]"
25
25
  - SHIP เป็นเรื่อง **เอกสาร + archive เท่านั้น** — ไม่ merge โค้ด (build branch → main จัดการเองนอก workflow)
26
26
  - เนื้อหาที่ไม่แน่ใจว่าควร promote/วางไฟล์ไหน → ถามทีละข้อ + เสนอคำตอบที่แนะนำ อย่าเดา
27
27
  - เกณฑ์ปิดดู Gate ข้อ 6 ของ playbook
28
+ - คงเป็น command (user-only) โดยตั้งใจ — SHIP เป็น stateful/irreversible (archive ด้วย git mv, promote เอกสารกลาง) ต้องให้ user สั่งชัด ไม่ทำเป็น skill auto-invoke
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: explore
3
+ description: สำรวจ/ตอบคำถามเกี่ยวกับโปรเจกต์แบบ read-only — ไม่สร้าง artifact ใดๆ จบที่คำตอบในแชท
4
+ when_to_use: เมื่อต้องการเข้าใจ/ตอบคำถามเกี่ยวกับโครงสร้าง โค้ด หรือ logic ของโปรเจกต์ โดยไม่ต้องสร้างหรือแก้ไฟล์
5
+ allowed-tools: Read, Grep, Glob, Bash(find:*), Bash(ls:*), Bash(grep:*)
6
+ ---
7
+
8
+ ทำหน้าที่เป็น explorer ตาม **playbook กลาง** ของ workflow มาตรฐาน — อ่าน `.warnyin/workflow/explore.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด (**read-only เด็ดขาด — ห้ามสร้าง/แก้/ลบไฟล์ใดๆ**, อ้าง `path:line`; ชี้ playbook ไม่ duplicate) — รับหัวข้อ/คำถามจาก request; ถ้าไม่ระบุ → ถาม user ว่าอยากสำรวจเรื่องอะไร
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: next
3
+ description: เช็คงานค้างทุก topic + แนะนำขั้นตอน/command ถัดไป แบบ read-only — ไม่สร้าง/แก้ไฟล์ใดๆ
4
+ when_to_use: เมื่อต้องการรู้ว่าแต่ละ topic ค้างอยู่ stage ไหน + ควรรัน command อะไรถัดไป
5
+ allowed-tools: Read, Grep, Glob, Bash(find:*), Bash(ls:*), Bash(grep:*)
6
+ ---
7
+
8
+ ทำหน้าที่เป็น status reporter ตาม **playbook กลาง** ของ workflow มาตรฐาน — อ่าน `.warnyin/workflow/next.md` ให้ครบก่อน แล้วทำตามทุกหลักการอย่างเคร่งครัด (**read-only เด็ดขาด — ห้ามสร้าง/แก้/ลบไฟล์ใดๆ**, สรุปจาก evidence ในไฟล์จริง, แนะนำแล้วหยุด; ชี้ playbook ไม่ duplicate) — รับ slug จาก request (ไม่ระบุ = สแกนทุก topic ใน `docs/stages/` ยกเว้น `achieved/`)
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: update-codemaps
3
+ description: Scan project structure and generate token-lean architecture codemaps (docs/codemap/)
4
+ when_to_use: หลังเพิ่ม/ย้าย/ลบไฟล์ หรือเปลี่ยนโครงสร้างโปรเจกต์ → refresh docs/codemap/ ให้ตรงโครงจริง
5
+ allowed-tools: Read, Grep, Glob, Bash(find:*), Bash(ls:*), Bash(grep:*)
6
+ ---
7
+
8
+ ทำหน้าที่เป็น codemap generator ตาม **playbook กลาง** ของ workflow มาตรฐาน — อ่าน `.warnyin/workflow/codemap.md` ให้ครบก่อน แล้วทำตามทุกขั้นอย่างเคร่งครัด (ชี้ playbook ไม่ duplicate ขั้นตอน)
@@ -20,10 +20,12 @@
20
20
  | `docs/infra.md` / `docs/project.md` | <!-- ถ้าเกี่ยวข้อง --> |
21
21
  | `docs/codemap/` | |
22
22
 
23
- ## 3. note "รอ SHIP" ที่ตัดทิ้ง (ไม่ promote)
24
- | note | เหตุผลที่ตัด |
25
- |---|---|
26
- | | |
23
+ ## 3. Learned rules (planned + emergent)
24
+ > กฎ generalize ที่จับจาก topic นี้ — planned (`tasks/*/rule.md` §2) + emergent (บทเรียนตอน build/verify/troubleshooting). evidence บังคับ; ไม่มี evidence = ไม่ promote. ครอบทั้งที่ promote และที่ตัด.
25
+
26
+ | rule (generalize) | evidence (pointer + artifact) | scope (`component:<c>` / `project`) | promote? (✅ / ✂️ + เหตุผล) |
27
+ |---|---|---|---|
28
+ | | | | |
27
29
 
28
30
  ## 4. Archive
29
31
  - ย้ายจาก `docs/stages/<slug>/` → `docs/stages/achieved/<YYYY-MM-DD>-<slug>/` เมื่อ <YYYY-MM-DD>
@@ -30,19 +30,20 @@ Discovery (optional) ──▶ DESIGN ──▶ BUILD ──▶ VERIFY ──▶
30
30
 
31
31
  ## โครงสร้าง repo
32
32
 
33
- ```
34
- bin/cli.mjs # npx installer ติดตั้ง workflow ลงโปรเจกต์อื่น
33
+ > โครงนี้คือสิ่งที่อยู่ใน **โปรเจกต์ที่ติดตั้งแล้ว** (installer วาง `.warnyin/`+`.claude/` ให้)
34
+ > ตัว repo `warnyin-agents` เองเก็บ source ที่จะ publish ไว้ใต้ `src/` (เช่น `src/bin/cli.mjs`, `src/.warnyin/`)ดู `CONTRIBUTING.md`
35
35
 
36
- warnyin/ # ★ ทุกอย่างของ workflow รวมใต้โฟลเดอร์เดียว
37
- installer/templates/ # template CLAUDE.md สำหรับโปรเจกต์ปลายทาง (installer ใช้เองไม่ถูก copy ไป target)
36
+ ```
37
+ .warnyin/ # แก่นกลาง workflow (installer วางให้อัปเดตได้ด้วย --update)
38
38
  workflow/ # playbook กลาง — single source of truth
39
39
  README.md # ไฟล์นี้ — ภาพรวม + วิธีรองรับหลาย AI
40
40
  init.md # playbook: INIT — วิเคราะห์โปรเจกต์ + เติม docs/ ครั้งแรก
41
41
  codemap.md # playbook: CODEMAP — สแกน + สร้าง codemap แบบ token-lean
42
42
  explore.md # playbook: EXPLORE — สำรวจ/ตอบคำถามแบบ read-only ไม่สร้าง artifact
43
43
  next.md # playbook: NEXT — เช็คงานค้าง + แนะนำขั้นตอนถัดไป (read-only)
44
- roles/ # role card กลาง: ba, po, sa, tech-lead, developer, qa, security, infra
45
44
  stages/ # discovery ✅ · design ✅ · build ✅ · verify ✅ · ship ✅
45
+ roles/ # role card กลาง (task-level lens): ba, po, sa, tech-lead, developer, qa, security, infra
46
+ contexts/ # context profile กลาง (session-level posture): research, build, review + README
46
47
  scripts/
47
48
  build-wave.mjs # Workflow script: fan-out sub-agent ต่อ task ใน wave (worktree)
48
49
  template/ # ★ template ทั้งหมดรวมที่เดียว
@@ -56,15 +57,20 @@ warnyin/ # ★ ทุกอย่างของ workflow รว
56
57
  project.md rule.md infra.md troubleshooting.md codemap/index.md
57
58
  techstack/[component]/ # copy เป็น docs/techstack/<component> (โดย /warnyin:init)
58
59
  features/[feature-name]/ # copy เป็น docs/features/<feature-name> (โดย SHIP)
59
- stages/ # พื้นที่ทำงานจริง ตาม topic
60
- context.md
61
- achieved/ # archive หลัง SHIP (<YYYY-MM-DD>-<slug>/)
60
+ installer/templates/ # template CLAUDE.md ของ target (installer ใช้เอง — ไม่ถูก copy ไป target)
62
61
 
63
- docs/ # ความรู้ถาวรระดับโปรเจกต์ ของจริงล้วน (seed จาก .warnyin/template/docs)
62
+ .claude/ # adapter Claude Code (ชี้กลับ playbook กลาง)
63
+ commands/warnyin/ # slash command /warnyin:*
64
+ agents/ # reviewer subagent warnyin-{sa,tech-lead,qa,security,infra}
65
+ CLAUDE.md AGENTS.md # adapter + pointer ของ Claude / Codex·Antigravity
66
+
67
+ docs/ # ความรู้ถาวรระดับโปรเจกต์ + งานจริง — ของจริงล้วน (seed จาก template/docs)
64
68
  project.md # ★ จุดเริ่มของ Discovery — อ่านก่อนเสมอ
65
69
  rule.md infra.md
66
70
  troubleshooting.md # ★ KB ปัญหา-วิธีแก้ (อ่านก่อนเมื่อ build เจอ error; SHIP ป้อนเข้า)
67
71
  codemap/ features/ techstack/
72
+ stages/ # พื้นที่ทำงานจริง ตาม topic (<slug>/) + achieved/<YYYY-MM-DD>-<slug>/ หลัง SHIP
73
+ ```
68
74
  ```
69
75
 
70
76
  ---
@@ -0,0 +1,49 @@
1
+ # Contexts — context profile กลางของ workflow
2
+
3
+ > **แก่นกลาง tool-agnostic** — context card แต่ละใบคือ "posture ของทั้ง session" ในโหมดหนึ่ง
4
+ > AI ทุกเจ้าใช้ไฟล์ชุดเดียวกัน: อ่านตอนเริ่ม stage เพื่อ set โหมดของ session แล้วทำงานตาม playbook เดิม
5
+
6
+ ## หลักการ
7
+
8
+ - **context = session-level posture** — วิธีคิด/ท่าทีรวมของ "ทั้ง session": ตอนนี้กำลังสำรวจ, กำลังสร้าง, หรือกำลังตรวจ
9
+ - **role = task-level lens** ([`roles/`](../roles/README.md)) — มุมมอง/checklist ของ "หนึ่งบทบาทต่อหนึ่งงาน" (BA, Developer, QA, ...)
10
+ - คนละมิติ ใช้คู่กันได้: เช่น session อยู่โหมด `build` (posture) + sub-agent สวม role `Developer` (lens ของงานนั้น)
11
+ - context **ไม่ duplicate** checklist ของ stage playbook/role card — ชี้กลับ playbook เสมอ (single source of truth)
12
+
13
+ ## ตาราง context ↔ stage
14
+
15
+ | Stage playbook | Context ที่เข้าคู่ | เหตุผล |
16
+ |---|---|---|
17
+ | [`discovery.md`](../stages/discovery.md) | `research` | สำรวจ/เข้าใจก่อนตัดสิน |
18
+ | [`design.md`](../stages/design.md) | `research` + `build` | ต้น = research (propose), ปลาย = build (แตก task) |
19
+ | [`build.md`](../stages/build.md) | `build` | ลงมือสร้าง vertical slice |
20
+ | [`verify.md`](../stages/verify.md) | `review` | ตรวจ/ยืนยันด้วยการรันจริง |
21
+ | [`ship.md`](../stages/ship.md) | `review` | ตรวจความครบก่อนส่งมอบ/promote |
22
+
23
+ ## วิธี activate (manual)
24
+
25
+ - **AI หลัก:** ตอนเริ่ม stage → เปิด playbook stage นั้น เจอ callout "Context profile" ชี้มา → อ่าน context card → สวม posture แล้วทำงานตาม playbook
26
+ - **User สั่งตรง:** บอกโหมดได้ชัดๆ เช่น "อยู่โหมด research" / "สวม build context" → AI อ่าน card ที่ตรง
27
+ - playbook ทุก stage มี callout ชี้กลับมาที่ context ที่เข้าคู่ (reference graph วนกลับ ไม่ duplicate)
28
+
29
+ ## โครงของ context card ทุกใบ
30
+
31
+ 1. **Mindset** — วิธีคิดรวมของ session โหมดนี้ (2–4 บรรทัด)
32
+ 2. **Do / Don't** — bullet สั้น 2 ฝั่ง: ทำ vs ห้าม
33
+ 3. **Tool preference** — เครื่องมือที่ควรใช้ / เลี่ยง (read-only vs edit vs run) + **Model tier** (generic: deepest/balanced/cheap)
34
+ 4. **ใช้คู่ stage ไหน** — ชี้ playbook stage ที่เข้าคู่ (→ ลิงก์)
35
+
36
+ > เพิ่ม context ใหม่ = เพิ่มไฟล์ที่นี่ + ใส่ callout ใน playbook stage ที่เข้าคู่ + อัปเดตตารางด้านบน
37
+ > (เก็บให้บาง opinionated — 3 context พอ; อย่าให้ไหลเป็น catalog)
38
+
39
+ ## Model tier (generic — harness ตีเป็นรุ่นจริงเอง)
40
+
41
+ แต่ละ context แนะนำ **model tier** ใน section "Tool preference" เพื่อคุม token/cost ตาม posture:
42
+
43
+ | Context | Tier | งาน |
44
+ |---|---|---|
45
+ | `research` | `deepest reasoning` | สำรวจ / architecture / ตัดสินใจ trade-off |
46
+ | `build` | `balanced` (worker เชิงกลไก → `cheap`) | implement vertical slice ตาม spec |
47
+ | `review` | `balanced+` | ตรวจ/จับ bug — ไม่ลด (พลาดแพงกว่า token) |
48
+
49
+ > **tool-agnostic:** ใช้ vocab generic **ไม่ผูกชื่อรุ่น/ผลิตภัณฑ์ของ harness ใด ๆ** — แต่ละ harness map tier → รุ่นเอง (เทียบแนวทาง model selection ของ harness เช่นไฟล์ rules ฝั่ง performance); เป็น **guidance** ไม่ใช่ enforce
@@ -0,0 +1,25 @@
1
+ # Context — build (โหมดลงมือสร้าง vertical slice)
2
+
3
+ > session-level posture · playbook: `.warnyin/workflow/stages/*`
4
+
5
+ ## Mindset
6
+ ส่งมอบ vertical slice ที่ทำงานจริง end-to-end — ทำตาม spec/standard/rule ของ task
7
+ slice เล็กจบในตัว, "เขียว" ต้องเขียวจริงจากการรัน ไม่ใช่คาดว่าเขียว
8
+
9
+ ## Do / Don't
10
+ - ✅ ทำตาม task spec ครบทุกข้อ ไม่เกิน/ไม่ต่ำ
11
+ - ✅ อ่าน `troubleshooting.md` ก่อนแก้ error
12
+ - ✅ reuse shared component ใน standard ก่อนเขียนใหม่
13
+ - ✅ commit เล็ก โฟกัสทีละ slice
14
+ - ❌ หลุด scope ของ task
15
+ - ❌ เดา spec — กลับไปอ่าน design / ถาม
16
+ - ❌ แก้ rule กลาง (note ไว้ รอ SHIP)
17
+
18
+ ## Tool preference
19
+ - **ควรใช้:** Edit / Write / Bash, sub-agent fan-out, `build-wave`
20
+ - **เลี่ยง:** แก้นอก scope task, แตะ rule/standard กลางใน `docs/`
21
+ - **Model tier:** `balanced` (orchestrator/main loop ที่ตัดสินใจ integrate); **fan-out worker** ที่ทำ task ชัด/เชิงกลไกตาม spec → ลดเป็น `cheap` ได้ (คุม cost — งานกำหนดไว้แล้ว)
22
+
23
+ ## ใช้คู่ stage ไหน
24
+ - ปลาย DESIGN (แตก task) → [`stages/design.md`](../stages/design.md)
25
+ - BUILD → [`stages/build.md`](../stages/build.md)
@@ -0,0 +1,25 @@
1
+ # Context — research (โหมดสำรวจ/เข้าใจก่อนตัดสิน)
2
+
3
+ > session-level posture · playbook: `.warnyin/workflow/stages/*`
4
+
5
+ ## Mindset
6
+ เข้าใจก่อนตัดสิน — กว้างก่อนลึก ตั้งคำถาม > รีบสรุป
7
+ สำรวจของจริง (โค้ด/เอกสาร) ไม่เดาจากความเคยชิน; สะสม evidence ให้พอก่อนเสนอทางเลือก
8
+
9
+ ## Do / Don't
10
+ - ✅ อ่านโค้ด/เอกสารจริง ก่อนสรุปทุกครั้ง
11
+ - ✅ ถามทีละข้อ + เสนอคำตอบให้ user ยืนยัน
12
+ - ✅ บันทึก evidence (path/บรรทัด) ที่อ้างอิง
13
+ - ❌ เดา/สรุปจากความเคยชินโดยไม่ยืนยัน
14
+ - ❌ แก้ไฟล์ production ระหว่างสำรวจ
15
+ - ❌ รีบสรุปก่อน scope ชัด
16
+
17
+ ## Tool preference
18
+ - **ควรใช้:** read-only — Read / Grep / Glob / fast-context, `/warnyin:explore`
19
+ - **เลี่ยง:** Edit / Write โค้ดจริง, คำสั่งที่เปลี่ยน state
20
+ - **Model tier:** `deepest reasoning` — สำรวจ/architecture/ตัดสินใจ trade-off = งานคิดหนัก คุ้มใช้ตัวลึกสุด
21
+
22
+ ## ใช้คู่ stage ไหน
23
+ - Discovery → [`stages/discovery.md`](../stages/discovery.md)
24
+ - ช่วงต้น DESIGN (เก็บ context ก่อน propose) → [`stages/design.md`](../stages/design.md)
25
+ - เช็คงานค้าง → [`next.md`](../next.md)
@@ -0,0 +1,25 @@
1
+ # Context — review (โหมดตรวจ/ยืนยันก่อนปล่อย)
2
+
3
+ > session-level posture · playbook: `.warnyin/workflow/stages/*`
4
+
5
+ ## Mindset
6
+ หาจุดพลาดก่อนปล่อย — skeptical, ไม่เชื่อว่าผ่านจนกว่าจะรันจริง
7
+ ยืนยันด้วยหลักฐาน (test/verify เขียวจริง) ไม่ใช่คำสัญญาในโค้ด
8
+
9
+ ## Do / Don't
10
+ - ✅ รัน test / verify จริง ดูผลด้วยตา
11
+ - ✅ ไล่ acceptance ทีละข้อ เทียบกับ spec
12
+ - ✅ ตรวจ edge case + security
13
+ - ❌ เชื่อว่าผ่านโดยไม่รัน
14
+ - ❌ ปล่อย issue ระดับ CRITICAL / HIGH
15
+ - ❌ แก้เยอะระหว่าง review (note ไว้ ให้กลับไป BUILD)
16
+
17
+ ## Tool preference
18
+ - **ควรใช้:** Read + Bash (รัน test/verify), reviewer sub-agents, `/code-review` `/security-review`
19
+ - **เลี่ยง:** เขียน feature ใหม่ระหว่าง review, แก้ scope กว้างๆ
20
+ - **Model tier:** `balanced+` — skeptical จับ bug/regression/edge case = **ไม่ควรลด tier** (พลาดของจริงแพงกว่าค่า token)
21
+
22
+ ## ใช้คู่ stage ไหน
23
+ - VERIFY → [`stages/verify.md`](../stages/verify.md)
24
+ - SHIP (ตรวจความครบก่อนส่งมอบ) → [`stages/ship.md`](../stages/ship.md)
25
+ - DESIGN review panel → [`stages/design.md`](../stages/design.md)
@@ -16,6 +16,8 @@ implement vertical slice ที่รับมอบให้ **เสร็จ
16
16
  - [ ] ทำครบทุก sub-task — acceptance ทุกข้อของ task ผ่าน
17
17
  - [ ] ตาม standard.md (pattern, shared component) + rule.md เคร่งครัด
18
18
  - [ ] ไม่แตะไฟล์นอก scope ของ task — เจอสิ่งควรแก้นอก scope → note ไว้ ไม่ลงมือเอง
19
+ - [ ] เข้าใจไฟล์ก่อนแก้ (ใครใช้/contract/เจตนา) — ไม่แก้แบบไม่เข้าใจ (investigate-before-edit)
20
+ - [ ] ไม่แก้ config/test ให้เขียวแทนแก้โค้ดจริง — config ผิดจริงแก้ได้ + เหตุผล + note (config-protection)
19
21
  - [ ] รัน test-flow ใน spec.md + build/lint **ผ่านจริง** — ห้ามรายงาน passed ทั้งที่ยังแดง
20
22
  - [ ] ไม่ทิ้งขยะ: debug code, commented-out code, TODO ลอยๆ
21
23
  - [ ] เจอปัญหา → อ่าน `docs/troubleshooting.md` ก่อน; ปัญหายาก/ซ้ำที่แก้ได้ → รายงานในฟิลด์ troubleshooting
@@ -18,6 +18,8 @@
18
18
  - [ ] Frontend: layout, state (loading/error/empty), flow, responsive — ตรวจด้วยตาผ่าน e2e
19
19
  - [ ] regression: จุดที่ change กระทบของเดิม ถูกเทสซ้ำ
20
20
  - [ ] ผลเทสบันทึกตรงความจริง + นับจำนวนรอบที่แก้
21
+ - [ ] เข้าใจไฟล์/contract ก่อนแก้ตอน fix loop — ไม่แก้แบบไม่เข้าใจ (investigate-before-edit)
22
+ - [ ] ตอน fix loop — ไม่ลด bar (config/test threshold/disable rule) เพื่อให้ผ่าน; แก้ root cause จริง (config-protection)
21
23
 
22
24
  ## Checklist เพิ่มเมื่อรีวิว design ใน panel
23
25
  - [ ] ทุก slice มี test-flow ที่รันได้จริงใน local env
@@ -9,7 +9,7 @@
9
9
  - ทุก input คือของไม่น่าไว้ใจจนกว่าจะ validate
10
10
  - สิทธิ์: ใครทำอะไรได้ ต้องชัดต่อ endpoint/resource ไม่ใช่เชื่อ frontend
11
11
  - ข้อมูลอ่อนไหวรั่วได้ 3 ทาง: เก็บ, ส่ง, log
12
- - supply chain: dependency ใหม่ = ความเสี่ยงใหม่
12
+ - supply chain: dependency ใหม่ = ความเสี่ยงใหม่ — ครอบ third-party skill / MCP / payload `.md` ที่ AI execute ต่อด้วย
13
13
 
14
14
  ## Checklist
15
15
  - [ ] ทุก input (API, form, file, query param) ถูก validate/sanitize ที่ฝั่ง server
@@ -20,6 +20,16 @@
20
20
  - [ ] error message ไม่ leak ข้อมูลภายใน (stack trace, SQL, path)
21
21
  - [ ] การกระทำสำคัญ (เงิน/สิทธิ์/ข้อมูลส่วนตัว) มี audit log
22
22
  - [ ] injection ทุกรูปแบบที่เกี่ยวข้อง: SQL/NoSQL, XSS, command, path traversal
23
+ - [ ] **supply-chain / MCP:** third-party skill / MCP / payload `.md` = prompt-injection surface → ตรวจเนื้อหาก่อนติดตั้ง (อ่าน source / skills.sh), ติด global ไม่ vendor เข้า repo, จำกัดสิทธิ์ที่มันเข้าถึง
24
+
25
+ ## Runtime / operational security
26
+
27
+ > ความปลอดภัยตอน **รัน AI agent ในเครื่อง** (คู่กับ app-security ข้างบน — คนละมิติ ไม่ทับกัน); principle portable ทุก harness
28
+
29
+ - **P1 · secret isolation:** กัน agent อ่าน/เข้าถึง secret ที่ไม่เกี่ยวกับงาน — `.env`, `~/.ssh`, credential/token, keychain; ให้สิทธิ์อ่านเฉพาะ scope ของงาน (least-privilege ระดับ filesystem)
30
+ - **P2 · no unnecessary egress:** payload/skill ที่ agent execute ต่อ ไม่ควรส่งข้อมูลออกได้อิสระ — รันใน sandbox/network ที่จำกัด egress เท่าที่งานต้องใช้
31
+ - **P3 · identity separation:** แยก identity ของ session agent ออกจาก credential ส่วนตัว/prod — ไม่ใช้ token ส่วนตัว/สิทธิ์ prod ใน session ที่รัน automation/agent (ใช้ scoped credential แยก)
32
+ - **Claude adapter note** (ตัวอย่างเฉพาะ Claude Code — harness อื่นปรับเทียบ): `settings.json` → `permissions.deny`: `Read(**/.env*)`, `Read(~/.ssh/**)`; รัน sandbox no-egress เมื่อไม่ต้องการเครือข่าย
23
33
 
24
34
  ## Output
25
35
  - ความเห็นแบ่ง **blocker** (ช่องโหว่จริงต้องแก้ก่อน BUILD) / **suggestion** (hardening ที่ควรทำ)
@@ -2,6 +2,7 @@
2
2
 
3
3
  > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
4
  > เป้าหมาย: ลงมือทำ task ที่ DESIGN เตรียมไว้ โดย **fan-out sub-agent อัตโนมัติต่อ task ตาม dependency**
5
+ > **Context profile:** สวมโหมด `build` (`.warnyin/workflow/contexts/build.md`) — session-level posture ของ stage นี้
5
6
 
6
7
  ---
7
8
 
@@ -36,6 +37,8 @@ BUILD จะ **orchestrate การ implement** โดยกระจายง
36
37
  8. **★ ปิดท้ายด้วย full build + full test เสมอ** — หลัง merge ทุก wave แล้ว ต้องรัน build ทั้งหมด + test suite ทั้งหมด (รวม unit test) บน build branch ที่ integrate; **แก้วนจนเขียวหมด** ก่อนปิด BUILD (กันกรณี task รายเดี่ยวเขียวแต่พอรวมกันแล้วพัง)
37
38
  9. **ทุก build agent สวม role Developer** — ทำตาม role card `.warnyin/workflow/roles/developer.md` (lens + checklist ก่อนส่งงาน) — build-wave.mjs ใส่ให้ใน prompt แล้ว
38
39
  10. **★ ใช้ Troubleshooting KB** — เจอปัญหา/error ระหว่าง build ให้ **อ่าน `docs/troubleshooting.md` ก่อนเสมอ** เผื่อเคยแก้แล้ว; เมื่อแก้ปัญหาที่ **ยาก/เจอซ้ำ** สำเร็จ ให้บันทึก entry ลง `docs/stages/<slug>/troubleshooting.md` (ปัญหา/อาการ/root cause/วิธีแก้/ป้องกันซ้ำ) — ตอน SHIP จะยกขึ้น KB กลาง
40
+ 11. **★ investigate-before-edit** (enforce ของ "ห้ามเดา") — ก่อนแก้ไฟล์ที่มีอยู่ ต้องเข้าใจก่อน — **ใครใช้/อ่านไฟล์นี้, schema/contract/สัญญาของมัน, เจตนาเดิม**; แก้โดยไม่เข้าใจ = เดา (กรณีไม่ชัด → ถาม user / อ่านโค้ดที่อ้างถึง ก่อนแก้)
41
+ 12. **★ config-protection** (enforce ของ "ห้ามเดา") — ห้ามแก้ config (linter/formatter/test threshold) หรือ disable rule **"เพื่อให้ build/test ผ่าน"** แทนการแก้โค้ดจริง — ถ้า config ผิดจริง แก้ได้แต่ต้องมี **เหตุผลชัด + note** (ไม่ใช่เพื่อเลี่ยง finding)
39
42
 
40
43
  ---
41
44
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
4
  > เป้าหมาย: เสนอ **change ใหม่** พร้อมผลิต artifact ครบในขั้นเดียว — proposal (what & why) → design (how) → tasks (พร้อม execute)
5
+ > **Context profile:** สวมโหมด `research` (`.warnyin/workflow/contexts/research.md`) ช่วงต้น (proposal/design) · `build` (`.warnyin/workflow/contexts/build.md`) ช่วงแตก task — session-level posture ของ stage นี้
5
6
 
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
4
  > เป้าหมาย: เปลี่ยนความต้องการที่ยังคลุมเครือ ให้เป็น **ความเข้าใจร่วมกัน (shared understanding)** ที่ชัดพอจะเข้า DESIGN ได้
5
+ > **Context profile:** สวมโหมด `research` (`.warnyin/workflow/contexts/research.md`) — session-level posture ของ stage นี้
5
6
 
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
4
  > เป้าหมาย: **ส่งมอบ** — promote ความรู้ระดับ topic ขึ้นเอกสารกลางใน `docs/` + archive topic เข้า `docs/stages/achieved/`
5
+ > **Context profile:** สวมโหมด `review` (`.warnyin/workflow/contexts/review.md`) — session-level posture ของ stage นี้
5
6
 
6
7
  ---
7
8
 
@@ -34,20 +35,24 @@
34
35
  4. **กลั่น ไม่ใช่ copy ดิบ** — merge สาระเข้าโครงสร้างของไฟล์กลางเดิม ระวัง duplicate/ขัดแย้งกับเนื้อหาที่มีอยู่; เขียนแบบ "ความรู้ถาวร" ไม่ใช่บันทึกรายงาน
35
36
  5. **เอกสารต้องตรงโค้ดจริง** — structure/codemap อัปเดตจากการดูโค้ดจริง ไม่ใช่จากความจำหรือ design เดิม
36
37
  6. **อย่าเดา** — เนื้อหาที่ไม่แน่ใจว่าควร promote หรือควรวางไว้ไฟล์ไหน → ถามทีละข้อ + เสนอคำตอบที่แนะนำ
37
- 7. **เก็บ "รอ SHIP" ให้หมด** — rule/standard ที่ note ค้างไว้ใน tasks ต้องถูกพิจารณาครบทุกข้อ (promote หรือตัดทิ้งพร้อมเหตุผล) ห้ามปล่อยค้าง
38
+ 7. **เก็บ learned-rule ให้หมด — planned + emergent** — รวบรวม rule ที่จะ promote ทุกตัว: ทั้ง **planned** (note "รอ SHIP" ใน `tasks/*/rule.md` §2) และ **emergent** (บทเรียนที่โผล่ตอนลงมือ สแกน `build.md`/`verify.md`/`troubleshooting.md`/diff); ทุกตัวต้องมี **evidence (บังคับ)** + **scope** + **user ยืนยัน** ก่อน promote — ไม่มี evidence ไม่ promote (สอด "ห้ามเดา"); **learned-rule = กฎ generalize ไม่ใช่ incident** (troubleshooting = incident ที่ *อ้าง* เป็น evidence ได้). พิจารณาครบทุกข้อ (promote หรือตัดทิ้งพร้อมเหตุผล) ห้ามปล่อยค้าง
38
39
 
39
40
  ---
40
41
 
41
42
  ## 4. ลำดับขั้นการทำงาน (process)
42
43
 
43
- 1. **อ่านทำความเข้าใจ topic:** อ่าน `docs/stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง (เช็คก่อนว่า VERIFY ผ่าน Gate แล้ว — มี `verify.md` สรุปผลผ่าน)
44
+ 1. **อ่านทำความเข้าใจ topic + รวบรวม learned-rule candidate:** อ่าน `docs/stages/<slug>/` ทุกไฟล์ — topic นี้ทำอะไร ทำอย่างไร เกิดความรู้ใหม่อะไรบ้าง (เช็คก่อนว่า VERIFY ผ่าน Gate แล้ว — มี `verify.md` สรุปผลผ่าน) — พร้อมกันนั้น **รวบรวม learned-rule candidate** เป็นตาราง (ทุกตัว = `rule + evidence + scope + promote?`):
45
+ - **planned:** จาก `tasks/*/rule.md` §2 "เสนอเพิ่ม rule ใหม่ (รอ SHIP)"
46
+ - **emergent:** สแกนบทเรียนที่โผล่ตอนลงมือ — `build.md` (pattern แก้ซ้ำ/integration), `verify.md` (รายการแก้+จำนวนรอบ), `troubleshooting.md` (ปัญหายาก→"กันซ้ำ" = candidate ชัดสุด), diff/commit
47
+ - **entry แต่ละตัว:** `rule` = ข้อความ **generalize** (ถ้าเป็น incident "X พังเพราะ Y" ยกเป็นกฎ "ก่อนแก้ Z เช็ค Y เสมอ") · `evidence` = **บังคับ** concrete pointer 1 บรรทัด + ลิงก์ artifact (`build.md`/`verify.md`/`troubleshooting.md`/diff/commit) — **ไม่มี evidence = ไม่ promote** · `scope` = `component:<c>`→`docs/techstack/<c>/rule.md` หรือ `project`→`docs/rule.md`
44
48
  2. **จำแนก feature:** สิ่งที่ทำเป็น **feature ใหม่** หรือ **ปรับปรุง feature เดิม** (เทียบกับ `docs/features/` ที่มีอยู่)
45
- 3. **สรุป promotion plan + ขออนุมัติ (ครั้งเดียว):** feature ใหม่/ปรับปรุง, รายการไฟล์กลางที่จะอัปเดต + สาระ, ชื่อโฟลเดอร์ archive → รอ user ไฟเขียว
49
+ 3. **สรุป promotion plan + ขออนุมัติ (ครั้งเดียว):** feature ใหม่/ปรับปรุง, รายการไฟล์กลางที่จะอัปเดต + สาระ, ชื่อโฟลเดอร์ archive — **fold ตาราง learned-rule (rule + evidence + scope) เข้า approval เดียวกันนี้ ให้ user ยืนยัน per-rule** (✅ promote / ✂️ ตัด + เหตุผล) → รอ user ไฟเขียว
46
50
  4. **★ Archive:** ย้ายทั้งโฟลเดอร์ → `docs/stages/achieved/<YYYY-MM-DD>-<slug>/` (ใช้ `git mv` ถ้าเป็น git repo)
47
51
  5. **อัปเดตเอกสารกลาง** (อ่านเนื้อหาจาก path ใน achieved):
48
52
  1. **`docs/features/<feature-name>/`** — feature ใหม่ → สร้างโฟลเดอร์ใหม่ (`feature.md` + `business.md`); ปรับปรุง feature เดิม → อัปเดตโฟลเดอร์เดิม โดยใช้เนื้อหาจาก `business.md` / `proposal.md` / `design.md` ของ topic
49
- 2. **`docs/techstack/<component>/`** — `rule.md` / `standard.md` (จาก note "รอ SHIP" ใน tasks), `structure.md` (โครงสร้างที่เปลี่ยน), `test.md` (merge แผนเทสจาก `test.md` ของ topic)
50
- 3. **`docs/rule.md`** — global rule ใหม่/ที่เปลี่ยน (เฉพาะข้อที่เป็นกฎระดับโปรเจกต์ ไม่ผูกกับ component เดียว)
53
+ 2. **`docs/techstack/<component>/`** — `rule.md` / `standard.md` (learned-rule ที่ยืนยันแล้ว scope `component:<c>` + note "รอ SHIP" ใน tasks), `structure.md` (โครงสร้างที่เปลี่ยน), `test.md` (merge แผนเทสจาก `test.md` ของ topic)
54
+ 3. **`docs/rule.md`** — global rule ใหม่/ที่เปลี่ยน (learned-rule ที่ยืนยันแล้ว scope `project` — กฎระดับโปรเจกต์ ไม่ผูกกับ component เดียว)
55
+ > promote learned-rule **เฉพาะตัวที่ user ยืนยัน (step 3)** ตาม scope: `component:<c>` → `docs/techstack/<c>/rule.md` · `project` → `docs/rule.md`
51
56
  4. **`docs/troubleshooting.md`** — merge entry จาก `troubleshooting.md` ของ topic (ปัญหา/อาการ/root cause/วิธีแก้/ป้องกันซ้ำ)
52
57
  5. **`docs/infra.md` + `docs/project.md`** — เฉพาะถ้ามีข้อมูลที่เกี่ยวข้อง (env/service ใหม่, scope/เป้าหมายโปรเจกต์ที่ขยับ)
53
58
  6. **`docs/codemap/` ทั้งหมด** — อัปเดต code map ให้ตรงกับโค้ดจริงปัจจุบัน ทำตาม playbook `.warnyin/workflow/codemap.md` (Claude Code: `/warnyin:update-codemaps`)
@@ -74,7 +79,7 @@
74
79
 
75
80
  - [ ] topic ถูกย้ายไป `docs/stages/achieved/<YYYY-MM-DD>-<slug>/` แล้ว (ไม่เหลือใน `docs/stages/`)
76
81
  - [ ] `docs/features/` สะท้อน feature ใหม่/ที่ปรับปรุงแล้ว
77
- - [ ] note "รอ SHIP" ทุกข้อใน `tasks/*/rule.md` + `standard.md` ถูกพิจารณาครบ promote หรือตัดทิ้งพร้อมเหตุผล
82
+ - [ ] learned-rules (planned + emergent) พิจารณาครบทุกตัว — note "รอ SHIP" ใน `tasks/*/rule.md` + `standard.md` + บทเรียน emergent จาก build/verify/troubleshooting; ทุก promote มี **evidence + user ยืนยัน**, ตัดทิ้งมีเหตุผล
78
83
  - [ ] `docs/troubleshooting.md` รวม entry จาก topic แล้ว
79
84
  - [ ] `docs/techstack/`, `docs/rule.md`, `docs/infra.md`, `docs/project.md` อัปเดตตามที่เกี่ยวข้อง
80
85
  - [ ] `docs/codemap/` ตรงกับโค้ดจริงปัจจุบัน
@@ -2,6 +2,7 @@
2
2
 
3
3
  > **Playbook กลาง — AI ทุกเจ้าทำตามไฟล์นี้ชุดเดียวกัน** (Claude Code / Codex / Antigravity / อื่นๆ)
4
4
  > เป้าหมาย: เป็น **strategy tester** — ยืนยันว่า change ที่ build แล้ว "ทำงานถูกตามจุดประสงค์ของ topic" จริง (functional + UX/UI ถ้าเป็น FE) แก้จนผ่าน
5
+ > **Context profile:** สวมโหมด `review` (`.warnyin/workflow/contexts/review.md`) — session-level posture ของ stage นี้
5
6
 
6
7
  ---
7
8
 
@@ -20,6 +21,7 @@
20
21
  → ถ้า **ไม่มี** guideline → แนะนำว่าควรเทสแบบไหน/วิธีใดได้บ้าง แล้วเขียนแผนลง `test.md`
21
22
  3. **`docs/infra.md`** — local env / service ที่ต้องรันเพื่อเทส
22
23
  4. **`docs/troubleshooting.md`** — เผื่อปัญหาที่จะเจอเคยถูกแก้แล้ว
24
+ 5. **runtime security** (`.warnyin/workflow/roles/security.md` → "Runtime / operational security") — ตอนรันเทส local env ที่มี secret จริง ทบทวน secret isolation / no-egress / identity separation ก่อนปล่อย agent แตะของจริง
23
25
 
24
26
  ---
25
27
 
@@ -34,6 +36,8 @@
34
36
  7. **นาน/หลายรอบเกินไป → พิจารณาถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ** (อย่าวนแก้เงียบๆ ไม่จบ)
35
37
  8. **ห้ามแตะไฟล์กลางใน `docs/`** — แผนเทสเขียนระดับ topic ที่ `test.md` ก่อน รอ SHIP merge เข้า `docs/techstack/<component>/test.md`
36
38
  9. **สวม role QA** — ทำตาม role card `.warnyin/workflow/roles/qa.md` (lens: คิดแบบผู้ใช้จริง + คนหาเรื่อง, edge case, regression; checklist ครบทุกข้อ)
39
+ 10. **★ investigate-before-edit** (enforce ของ "ห้ามเดา") — ก่อนแก้ไฟล์ที่มีอยู่ ต้องเข้าใจก่อน — **ใครใช้/อ่านไฟล์นี้, schema/contract/สัญญาของมัน, เจตนาเดิม**; แก้โดยไม่เข้าใจ = เดา (กรณีไม่ชัด → ถาม user / อ่านโค้ดที่อ้างถึง ก่อนแก้)
40
+ 11. **★ config-protection** (enforce ของ "ห้ามเดา") — ตอน fix loop (ข้อ 5 "แก้จนผ่าน") ห้ามแก้ config (linter/formatter/test threshold) หรือ disable rule **"เพื่อให้ build/test ผ่าน"** แทนการแก้ root cause จริง — "แก้จนผ่าน" ต้องเป็นการแก้ที่ต้นเหตุ ไม่ใช่ลด bar; ถ้า config ผิดจริง แก้ได้แต่ต้องมี **เหตุผลชัด + note** (ไม่ใช่เพื่อเลี่ยง finding)
37
41
 
38
42
  ---
39
43
 
package/src/bin/cli.mjs CHANGED
@@ -45,8 +45,8 @@ const legacyV2 = ['workflow', 'warnyin-stages'].filter((d) => fs.existsSync(path
45
45
  if (legacyV2.length) {
46
46
  console.warn(`⚠ พบโครงเลย์เอาต์เก่า (≤0.2.x): ${legacyV2.join(', ')}
47
47
  เวอร์ชันนี้ย้าย core ไปใต้ .warnyin/ และงานจริงไป docs/stages/ — แนะนำย้ายด้วยตัวเองก่อน:
48
- 1. git mv warnyin-stages docs/stages # งานจริงของคุณ (ปลอดภัย ไม่ถูกแตะโดย installer)
49
- 2. git rm -r workflow # playbook เก่า (เวอร์ชันใหม่จะอยู่ที่ .warnyin/workflow)
48
+ 1. mkdir -p docs/stages && git mv warnyin-stages/* docs/stages/ # งานจริงของคุณ (ปลอดภัย ไม่ถูกแตะโดย installer)
49
+ 2. rm -rf workflow warnyin-stages # core เก่า + โฟลเดอร์ที่ย้ายของออกแล้ว
50
50
  แล้วรันคำสั่งนี้อีกครั้ง\n`)
51
51
  }
52
52
 
@@ -57,8 +57,8 @@ const legacyV5 = ['workflow', 'template', 'installer', 'stages'].filter((d) =>
57
57
  if (legacyV5.length) {
58
58
  console.warn(`⚠ พบโครงเลย์เอาต์เก่า (0.3–0.5.x): warnyin/{${legacyV5.join(', ')}}
59
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/)
60
+ 1. mkdir -p docs/stages && git mv warnyin/stages/* docs/stages/ # งานจริงของคุณ (active + achieved) — ปลอดภัย ไม่ถูกแตะ
61
+ 2. rm -rf warnyin # core เก่าทั้งหมด (เวอร์ชันใหม่ installer จะวางที่ .warnyin/)
62
62
  แล้วรันคำสั่งนี้อีกครั้ง — installer จะวาง .warnyin/ ชุดใหม่ให้\n`)
63
63
  }
64
64
 
@@ -68,6 +68,7 @@ const CORE = [
68
68
  path.join('.warnyin', 'template'),
69
69
  path.join('.claude', 'commands', 'warnyin'),
70
70
  path.join('.claude', 'agents'),
71
+ path.join('.claude', 'skills'),
71
72
  ]
72
73
  // scaffold = พื้นที่ทำงานเปล่าของโปรเจกต์ — installer "สร้างเอง" ไม่ copy tree จาก package
73
74
  // (สำคัญ: ถ้า copy docs/stages จาก pkgRoot งานจริงของ repo ต้นทางจะรั่วไป target ทุกครั้ง — ดู verify installer-test-ci)