CCA · Foundations

CLAUDE.md ให้ context แก่ CI และ review ด้วย instance อิสระ

แนวคิด

Claude Code ที่ถูกเรียกใน CI เริ่มต้นด้วย context ที่จำกัด CLAUDE.md คือกลไกที่ให้ context ของ project แก่มัน เช่นมาตรฐานการเขียนเทสต์ convention ของ fixture และเกณฑ์การ review เพราะ CLAUDE.md ถูกอ่านทุก session รวมถึงตอนรันแบบ non-interactive ด้วย การบันทึกมาตรฐานเทสต์ เกณฑ์ว่าเทสต์แบบไหนมีคุณค่า และ fixture ที่มีให้ใช้ไว้ใน CLAUDE.md จึงยกคุณภาพการ generate เทสต์และลด output ที่ไร้ค่า และการให้ไฟล์เทสต์ที่มีอยู่เป็น context ช่วยกันไม่ให้เสนอ scenario ที่ test suite ครอบไว้แล้วซ้ำ

หลักการเดียวกันใช้กับ review คือ instruction ว่าจะ flag อะไร จะข้ามอะไร ควรมาจาก context ที่ commit ไว้ ไม่ใช่ต้องพิมพ์ใหม่ทุกครั้งที่ pipeline รัน

ทำไมสำคัญ

ประเด็นสำคัญของ session context isolation คือ session เดียวกับที่ generate โค้ด จะ review การเปลี่ยนแปลงของตัวเองได้ด้อยกว่า instance ที่ review อย่างอิสระ เพราะ reviewer ที่รันใน context สดเห็นแค่ diff กับเกณฑ์ที่เราให้ ไม่เห็นเหตุผลที่ผลิตโค้ดนั้นออกมา มันจึงประเมินผลลัพธ์ด้วยมาตรฐานของมันเอง ไม่ลำเอียงเข้าข้างโค้ดที่เพิ่งเขียน รูปแบบ Writer/Reviewer จึงใช้สอง instance คือหนึ่งเขียน หนึ่ง review ใน context แยก และ review subagent ที่รันในบริบทสดก็ให้ผลแบบเดียวกัน

เมื่อรัน review ซ้ำหลังมี commit ใหม่ ควรใส่ finding รอบก่อนเข้าไปใน context แล้วสั่งให้รายงานเฉพาะปัญหาใหม่หรือที่ยังไม่ถูกแก้ เพื่อเลี่ยง comment ซ้ำ ส่วนโจทย์ PR หลายไฟล์ที่ review รอบเดียวแล้วผลเพี้ยน ทางแก้คือแยกเป็น pass ที่โฟกัสตามหลักในบทก่อน เพราะต้นเหตุคือ attention dilution ไม่ใช่ขนาด context

ข้อควรระวังคือ reviewer ที่ถูกสั่งให้หา gap มักจะหาเจอเสมอแม้งานจะดีอยู่แล้ว การไล่แก้ทุก finding นำไปสู่การ over-engineer จึงควรบอก reviewer ให้ flag เฉพาะสิ่งที่กระทบ correctness หรือข้อกำหนดที่ระบุไว้ ไม่ใช่เรื่องสไตล์

ตัวอย่าง

# CLAUDE.md ให้ context แก่ CI (commit เข้า repo)
# Testing
- test runner: vitest  รันเดี่ยวด้วย `vitest run path`
- fixture อยู่ที่ tests/fixtures/  ใช้ makeUser() แทนการสร้าง object เอง
- เทสต์ที่มีคุณค่า: ครอบ edge case และ error path ไม่ใช่ getter/setter

# Writer/Reviewer — review ด้วย instance อิสระใน context สด
Session A: "implement rate limiter สำหรับ API"
Session B: "review rate limiter ใน @src/middleware/rateLimiter.ts
            หา edge case และ race condition flag เฉพาะที่กระทบ correctness"

เช็คความเข้าใจ

ทำไม instance ที่ review อย่างอิสระจึงดีกว่า session เดียวกับที่เขียนโค้ด

CLAUDE.md ช่วยการทำงานของ Claude Code ใน CI อย่างไร

อ่านต่อ