Review checklist
ใช้รายการนี้ ด้วยตา กับทุก diff — ของคุณหรือของ AI — หลังจาก เครื่องมือใน Verification tools รันและผ่านแล้ว รายการนี้ตั้งใจให้พอดีหนึ่งหน้ากระดาษ ทุกบรรทัดลิงก์ไปยัง entry ในแคตตาล็อกที่อธิบายว่า ทำไม (ใน AI bug catalog entry มีเลข 1–27) หน้านี้จึงยังเป็นรายการ ไม่ใช่การรันโมดูลซ้ำ กลุ่มเรียงตามลำดับการอ่านใน module overview
flowchart LR A["Agent config<br/>(conf.d, datadog.yaml)"] --> A1["configcheck: shape only<br/>agent status: loads and types"] T["Tracer options"] --> T1["tsc / .d.ts / harness --options:<br/>names. Config dump: values. Payload: order"] M["Custom metrics"] --> M1["Captured flush + dogstatsd-stats:<br/>type and cardinality. Meaning: review"] TF["Terraform"] --> TF1["terraform validate: names and types.<br/>Semantics: API only"] J["JSON monitors / SLOs / catalog"] --> J1["Model: types and required.<br/>_unparsed: enums. Grammar: API only"] K["Kubernetes wiring"] --> K1["Cluster node Agent configcheck.<br/>Not kubectl"] V["Versions and pins"] --> V1["docker image inspect, config dump,<br/>package versions"]
Agent configuration
หัวข้อที่มีชื่อว่า “Agent configuration”conf.d/<name>.d/ใช้ชื่อของ check (redisdbไม่ใช่redis) และagent status— ไม่ใช่แค่agent configcheck— แสดง check โดยไม่มี Loading Error หรือไม่ ดู entry 3 ที่พิสูจน์ด้วยCheck redis not found in Cataloginstances:เป็น list (- host: …) ไม่ใช่ mapping ใช่ไหม Entry 1 พิสูจน์ด้วยcannot unmarshal !!map into []integration.RawMaptags:(และ key ชนิด list อื่นทุกตัว) เป็น YAML list ไม่ใช่ scalar แบบenv:prodใช่ไหม Entry 2 —configcheckพิมพ์ผ่านสบาย ๆ ส่วนagent statusปฏิเสธ- ค่าตัวเลขและ boolean เป็นตัวเลขและ boolean จริงไหม (
timeout: 5ไม่ใช่"five") Entry 4 เห็นได้แค่[ERROR]ในagent status DD_SITEเป็น domain (datadoghq.com) ไม่ใช่ URL ใช่ไหม Entry 6 พิสูจน์ด้วยhttps://process.https://api.datadoghq.com.- ก่อนเขียนว่า “ไม่มี
init_config” คุณรันเครื่องมือแล้วหรือยัง Entry 5: ไฟล์ถูก load finding ที่เครื่องมือ reproduce ไม่ได้คือบันทึก ไม่ใช่ bug
Image และ Kubernetes wiring
หัวข้อที่มีชื่อว่า “Image และ Kubernetes wiring”- image ของ Agent ถูก pin เป็น tag เต็มหรือ digest แทน
latest/ major ที่ลอย เพื่อให้ postmortem ระบุ Agent ที่รันได้หรือไม่ Entry 7 — วันนี้ tag ตรงกัน จึงไม่มีใครสังเกต - Autodiscovery annotation อยู่บน Pod template (
spec.template.metadata) ใช้ ชื่อ container และอยู่ในรูป.checks(v2, Agent 7.36+) หรือไม่ Entry 8 — docs อย่างเดียว ไม่มีอะไร offline พิสูจน์ ตรวจบน cluster จริงด้วยagent configcheckของ Agent บน node DD_ENV,DD_SERVICE,DD_VERSIONมาจากแหล่งเดียวที่เป็นตัวพิมพ์เล็ก (pod label) ทุก workload หรือไม่ Entry 12
Tracer option (Node.js และ Python)
หัวข้อที่มีชื่อว่า “Tracer option (Node.js และ Python)”- ทุก key ที่ส่งให้
tracer.init({...})มีอยู่ในTracerOptionsและสะกดแบบ camelCase (logInjectionไม่ใช่log_injection) หรือไม่ Entry 9 และ 11 TypeScript:tsc --noEmit; JavaScript: harness--optionsหรือ startup config dump dd-traceถูก initialise (หรือ preload ด้วย--import dd-trace/initialize.mjs) ก่อน library ที่ต้อง instrument หรือไม่ Entry 10 — พิสูจน์ด้วย payload ที่ดักได้ซึ่งไม่มีexpress.request- คำกล่าวว่า setting “deprecated” มีหน้า docs รองรับ ไม่ใช่ความจำหรือไม่ Entry 13 —
DD_TRACE_SAMPLE_RATEไม่ได้ deprecated และ dd-trace 6.17.0 (Node) ทำตาม แต่ ddtrace 4.15.2 (Python) เมินเงียบ ๆ ให้ใช้DD_TRACE_SAMPLING_RULESเพื่อพฤติกรรมข้ามภาษา - ใน Python: ทุก
ddtrace.config.<x>เป็น attribute จริง (การ อ่าน ไม่ใช่การเขียนที่สร้าง attribute ขึ้นเงียบ ๆ) หรือไม่ Entry 14 tracer.configure(...)ถูกเรียกด้วย keyword argument ที่อยู่ในinspect.signature(tracer.configure)เท่านั้นหรือไม่ address ของ agent อยู่ในDD_TRACE_AGENT_URLEntry 15- RUM init ของเบราว์เซอร์มี
allowedTracingUrls(ไม่ใช่allowedTracingOrigins) หรือไม่ Entry 16 —tscจับชื่อ, มีแต่ trace ใน UI ที่จับการละไว้
Custom metrics
หัวข้อที่มีชื่อว่า “Custom metrics”- เมื่อ requirement บอก “global percentile” type เป็น distribution ไม่ใช่ histogram หรือไม่ Entry 17 — flush ที่ดักได้ไป
/api/beta/sketchesเทียบกับ/api/v1/series - ทุกค่า tag มาจากเซตที่เล็กและมีขอบเขตหรือไม่ (ไม่มี
user_id, request id หรือ URL ดิบ) Entry 18 — 50 ค่า 50 series
Terraform
หัวข้อที่มีชื่อว่า “Terraform”- ทุก
resourceblock validate กับ provider ที่ pin ไว้ (terraform init && terraform validate) ไม่ใช่ตัวที่ AI จำได้หรือไม่ Entry 19–20 - ใน
datadog_dashboardquery ของแต่ละ request เป็นquery { metric_query { … } }พร้อม blockformulaหรือไม่ Entry 19 - recovery threshold อยู่ใน
monitor_thresholds { … },tagsเป็น list, และชื่อ block เป็นเอกพจน์ (template_variable) หรือไม่ Entry 20 - สำหรับ metric ที่เบาบางหรือ traffic ต่ำ ตั้ง
notify_no_data,no_data_timeframeและrequire_full_windowด้วยความตั้งใจหรือไม่ Entry 21 —validateเขียวทั้งสองทาง และ default ของnotify_no_dataใน provider คือfalse datadog_roleอ้าง permission ด้วย ID และlogs_modify_indexesตั้งใจให้ role นี้จริงหรือไม่ Entry 22- exclusion filter แคบเท่าเจตนาและเรียงตามที่ตั้งใจ (active ตัวแรกที่ match ชนะ) หรือไม่ Entry 23
JSON ของ monitor, SLO และ catalog
หัวข้อที่มีชื่อว่า “JSON ของ monitor, SLO และ catalog”- query ของ burn-rate เป็น
burn_rate("<slo_id>").over("<7d|30d|90d>").long_window("…").short_window("…") > Nหรือไม่ Entry 24 — model validation เขียวสำหรับตัวที่ผิด มีแต่ API กับไวยากรณ์ใน docs ที่คัดค้าน - query ของ composite monitor อ้าง monitor ID จริง หรือไม่ Entry 25
- JSON ถูกตรวจด้วยอะไรที่เข้มกว่า constructor (ตรวจ
_unparsedบน object ที่ deserialize) เพื่อให้ enum ที่พิมพ์ผิดปรากฏหรือไม่ Entry 26 - entry ของ Service Catalog เป็น
apiVersion: v3และมีคนตรวจ key ในspec(schema ไม่ปฏิเสธ key ที่ไม่รู้จัก) หรือไม่ Entry 27
Tooling
หัวข้อที่มีชื่อว่า “Tooling”- อ่าน
agent statusหลังagent configcheckและให้ check รันอย่างน้อยหนึ่งครั้งหรือไม่ ดู Verification tools - CI รัน
npm run verify(option, Terraform, JSON model) กับทุก fence และnode tools/verify-snippets.mjs --agentเมื่อมี YAML ของ Agent หรือไม่ - ทุกคำกล่าวที่ไม่มีเครื่องมือพิสูจน์ มี URL ของ docs อยู่ข้าง ๆ — พร้อมวันที่หรือเวอร์ชัน — หรือไม่
Spot the bug
หัวข้อที่มีชื่อว่า “Spot the bug”🐛 หา bug ในโค้ดนี้
resource "datadog_dashboard" "checkout" {title = "Checkout overview"layout_type = "ordered"
widget { timeseries_definition { request { q = "avg:system.cpu.user{*}" display_type = "line" } title_size = "large" }}
template_variables { name = "env"}}เฉลย
แค่บรรทัดเดียว และ terraform validate (provider 4.22.0) พิมพ์วิธีแก้ให้: Unsupported block type ... Blocks of type "template_variables" are not expected here. Did you mean "template_variable"? block เป็นเอกพจน์ ฉบับแก้ที่ validate ผ่าน:
resource "datadog_dashboard" "checkout" { title = "Checkout overview" layout_type = "ordered"
widget { timeseries_definition { request { q = "avg:system.cpu.user{*}" display_type = "line" } title_size = "large" } }
template_variable { name = "env" }}Mental Model
หัวข้อที่มีชื่อว่า “Mental Model”- เรียงตามต้นทุนของความผิด ชื่อและ shape (ถูก ตรวจด้วยเครื่องมือได้) ก่อน แล้วค่าและลำดับ (ลึกไปอีกชั้น) แล้วความหมาย (review หรือ API)
- ทุกบรรทัดคือคำถามใช่/ไม่ใช่ที่มีเจ้าของ “คำสั่งไหนตอบข้อนี้” เป็นส่วนของบรรทัด บรรทัดที่ไม่มีคำสั่งคือบรรทัด docs และต้องมี URL
- เขียวแปลว่า “ไม่ใช่ error ชนิดนี้”
configcheckเขียวตัด shape ออก แต่ไม่ได้บอกอะไรว่า check load ขึ้นหรือไม่
Trade-offs
หัวข้อที่มีชื่อว่า “Trade-offs”- เจ็ดกลุ่มมากเกินไปสำหรับ diff เล็ก ข้ามกลุ่มที่ diff ไม่แตะ แต่ห้ามข้ามกลุ่ม Tooling
- รายการอาจตรึงความเชื่อ Entry 5 และ 13 อยู่ในหน้านี้เพราะกฎที่ฟังดูสมเหตุสมผลกลับเป็นเท็จหรือจริงแค่ครึ่งเดียว พิสูจน์บรรทัดใหม่เมื่อเวอร์ชัน Agent, tracer หรือ provider เปลี่ยน
- บรรทัดที่ใช้ docs เก่าลง ตำแหน่งของ Autodiscovery และไวยากรณ์ burn-rate อ้าง URL ของ docs อ่านซ้ำเมื่อ upgrade
Common Misconceptions
หัวข้อที่มีชื่อว่า “Common Misconceptions”- “harness ผ่าน แปลว่า checklist เสร็จ” harness พิสูจน์ชื่อ type และ shape; บรรทัดของ Monitor, SLO และ permission ข้างบนอยู่นอกขอบเขตของมัน
- “ข้อใน checklist ชัดเจนอยู่แล้ว” แต่ละข้ออย่างน้อยหนึ่งครั้งในโมดูลนี้ ถูกสร้างโดย assistant ที่ฟังดูมั่นใจ
- “
terraform validateตรวจกับ Datadog” มันตรวจกับ provider schema; ไม่มี request ใดถูกส่ง (validate = falseใน provider block ของ harness)