Checklist สำหรับ review
นี่คือ checklist ที่ควรไล่ดู — ด้วยสายตา บน diff ไหนก็ตาม ของคุณเองหรือของ AI — หลังจากเครื่องมือใน Verification Tools รันแล้วผ่านสะอาด มันตั้งใจให้พอดีหนึ่งหน้ากระดาษพิมพ์: checklist ที่ไม่มีใครเปิดดูจริงตอน review นั้นไร้ค่า ทุกบรรทัดลิงก์ไปยังบทเรียนที่อธิบาย ทำไม เพื่อให้หน้านี้ยังเป็นแค่ list ไม่ใช่การรีรันคอร์สอีกครั้ง กลุ่มเรียงตามลำดับเดียวกับ วิธีอ่านโค้ด Astro ที่ไม่ได้เขียนเอง
flowchart LR R["Rendering mode & adapter"] --> M["ต้อง review ด้วยคนเป็นหลัก<br/>(astro check ผ่าน 18/22 ของ catalog โมดูลนี้สะอาด)"] I["Island & client directive"] --> P["เครื่องมือจับได้บางส่วน<br/>(Props type ที่เข้มงวดจับได้บางอัน ที่เหลือต้อง build จริง)"] C["Content & data"] --> P S["Astro ฝั่ง server"] --> M Sec["Security"] --> M Perf["Performance & cache"] --> M T["Tooling & production"] --> P
Rendering mode & adapter
หัวข้อที่มีชื่อว่า “Rendering mode & adapter”- config เคยตั้ง
output: 'hybrid'บ้างไหม? ถูกเอาออกใน Astro v5 — config validation error จริง แม้จะผ่าน type-check สะอาดใน harness ของคอร์สนี้เอง ดู AI Bug Catalog entry 1 - ถ้า route ไหนตั้ง
export const prerender = false(หรือโปรเจกต์ใช้output: 'server') มี adapter ตั้งค่าไว้จริงหรือไม่? ดู entry 2 และ SSR & Adapters - หน้าเพจอ่าน
Astro.cookies,Astro.session, หรือAstro.request.headersทั้งที่ route (หรือทั้งโปรเจกต์) ยัง prerender อยู่หรือไม่? ดู entry 3–4 และ Rendering & Output Modes สำหรับ build warning จริงที่มันสร้าง - เคยทดสอบข้ออ้างเรื่อง rendering mode ด้วย
astro devอย่างเดียวหรือไม่?routeRules/cache(และพฤติกรรม adapter บางอย่าง) ต่างกันระหว่าง dev กับ build จริง ดู Caching & Edge
Island & client directive
หัวข้อที่มีชื่อว่า “Island & client directive”- component ที่โต้ตอบได้ทุกตัวเป็น
client:loadไม่ว่าจะอยู่ตำแหน่งไหนของหน้าหรือไม่? ดู AI Bug Catalog entry 5 และ Client Directives สำหรับข้อแลกเปลี่ยนของ directive ทั้งห้าแบบเต็ม - prop ทุกตัวที่ส่งเข้า island เป็น serializable — ไม่มี function หรือ class instance เปล่า ๆ — และ
Propstype ของ island เองซื่อสัตย์พอให้ TypeScript จับความผิดพลาดได้จริงหรือไม่? ดู entry 6 client:onlyเคยปรากฏโดยไม่ระบุ framework (client:only="preact") บ้างไหม? ใช้ได้ปกติถ้ามี UI integration เดียว แต่ build ล้มเหลวจริงทันทีที่มีตัวที่สอง ดู entry 7- component จาก framework (
.tsx/.jsx) ใช้<slot />แบบของ Astro เอง โดยคาดหวังว่ามันจะ render children เหมือนตอนอยู่ใน.astroหรือไม่? ดู entry 8 — children ถูกทิ้งแบบเงียบ ๆ โดยไม่มี error <script is:inline>ถูกมองว่าเป็น island หรือไม่? มันไม่เกี่ยวอะไรกับ hydration หรือ client directive เลย และไม่เคยสร้าง<astro-island>ดู Client Directives
Content & data
หัวข้อที่มีชื่อว่า “Content & data”- ทุกการเรียก
defineCollectionประกาศloaderหรือไม่? content ที่วางตรงลงsrc/content/<name>/โดยไม่มี loader คือ syntax ก่อน v5 ที่ Astro 7.3.5 ของคอร์สนี้ปฏิเสธ - โค้ดเรียก
entry.render()แบบ method แทนที่จะ importrenderจากastro:contentหรือเปล่า? ดู AI Bug Catalog entry 12 —ts(2551)จริงในปัจจุบัน ไม่ใช่แค่เรื่องประหลาดใจตอน runtime - dynamic route แบบ static (
[slug].astroที่ไม่มีprerender = falseต่อ route) exportgetStaticPaths()จริงหรือไม่? ดู entry 10 — สิ่งนี้ type-check สะอาดและล้มเหลวแค่ตอน build จริงเท่านั้น - frontmatter ถูกตรวจสอบด้วย schema ที่ field ตรงกับสิ่งที่ content มีจริงหรือไม่? ดู entry 11 สำหรับรูปร่างจริงของ
InvalidContentEntryDataError - มีที่ไหนยังเรียก
Astro.glob()อยู่หรือไม่? type error จริงในปัจจุบันตั้งแต่ Astro 6 เอาออกไป ดู entry 9
Astro ฝั่ง server
หัวข้อที่มีชื่อว่า “Astro ฝั่ง server”- handler ของทุก Action ตรวจ
context.locals.user(หรือเทียบเท่า) เป็นบรรทัดแรกหรือไม่ หรือสมมติว่าผู้เรียกถูก authenticate แล้วเพราะ form render เฉพาะหลัง login? ดู AI Bug Catalog entry 13 พิสูจน์ด้วยcurlจริงที่ได้200โดยไม่มี session - ถ้า Action หรือ endpoint แก้ไขหรือลบแถวข้อมูล query กรองด้วย id ของผู้เรียกเองด้วยหรือไม่ ไม่ใช่แค่ id ของแถวเป้าหมาย? ดู Actions
- middleware
onRequestถูกประกอบด้วยsequence(...)หรือไม่ และทุกเส้นทางในนั้นเรียก (และ return)next()จริงหรือไม่? middleware ที่ไม่เคย returnResponseหรือnext()เลยคือ build/runtime error จริงที่มีชื่อ ดู Middleware & Sessions - หลัง login แล้ว session เคยถูก regenerate (
session.regenerate()) บ้างไหม หรือ session id ก่อน login กลายเป็นตัวที่ authenticated ไปเลย? ดู Middleware & Sessions สำหรับการพิสูจน์ session fixation
Security
หัวข้อที่มีชื่อว่า “Security”set:htmlเคย render string ที่ย้อนกลับไปหา user input โดยไม่มี sanitizer จริงคั่นกลางหรือไม่? type ของมันคือany— ไม่มีอะไรในระดับ type หยุดมันได้ ดู AI Bug Catalog entry 15 และ Astro Syntax Deep Dive สำหรับ payload XSS จริงที่พิสูจน์ผ่าน Container API- ค่าที่อ่านจาก
import.meta.env/astro:env/serverเคยถูกส่งเป็น prop ให้ island แบบclient:*หรือไม่ — แม้ว่าตัว import เองจะถูกต้องสมบูรณ์แบบก็ตาม? ดู entry 14: การรั่วยังอยู่แม้เปลี่ยนไปใช้astro:envเพราะ boundary นั้นกันแค่การ import ไม่ใช่สิ่งที่ component ทำกับค่านั้นหลังจากนั้น
Performance & cache
หัวข้อที่มีชื่อว่า “Performance & cache”routeRules/cacheเคยถูกมองว่าเป็นตัวตั้ง headerCache-Controlที่ browser เห็นโดยตรงหรือไม่? ดู AI Bug Catalog entry 17 และ Caching & Edge สำหรับความต่างจริงที่พิสูจน์แล้วระหว่างCDN-Cache-Control/Cache-Tag- การเรียก cache-header (
Astro.response.headers.set) ถูกวางไว้บน route ที่มีexport const prerender = trueด้วยหรือไม่? พิสูจน์แล้วว่าเป็น no-op แบบเงียบ ดู Caching & Edge is:inlineถูกใช้กับ script ที่ตั้งใจให้รันครั้งเดียว ใช้ร่วมกันต่อหน้าหรือไม่? พิสูจน์แล้วว่าซ้ำตรงตัวต่อ instance ดู entry 16transition:persistปรากฏบน element ที่ไม่มีคู่ตรงกันแน่นอนบนทุกหน้าปลายทางที่มันนำทางไปหรือไม่? การไม่พบคู่คือcontinueแบบเงียบใน compiler ที่ติดตั้ง ไม่ใช่ error ดู entry 18- โค้ดยัง import
<ViewTransitions />แทนที่จะเป็น<ClientRouter />อยู่หรือไม่?MISSING_EXPORT/ts(2305)จริงในปัจจุบัน ดู entry 19 <Image>ระยะไกลที่ hardcodewidth/heightสมมติว่าimage.domains/remotePatternsป้องกันมันอยู่หรือไม่? พิสูจน์แล้วว่าข้ามการตรวจสอบแบบเงียบ ๆ และ ship URL ดิบที่ไม่ได้รับอนุญาต ดู entry 20
Tooling & production
หัวข้อที่มีชื่อว่า “Tooling & production”astro.config.mjsตั้งmarkdown.remarkPlugins/rehypePlugins/gfm/smartypantsเป็น top-level key ของmarkdown.*อยู่หรือไม่? ถูกแปะ@deprecatedใน schema ที่ติดตั้ง —astro checkwarning จริง พลาดง่ายเว้นแต่--minimumFailingSeverityจะถูกตั้งให้เข้มขึ้น ดู entry 21astro previewเคยถูก script ให้เป็นคำสั่งstartของ production หรือไม่? เอกสาร CLI reference ของ Astro เองบอกตรง ๆ ว่ามันไม่ได้ถูกออกแบบให้รันบน production ดู entry 22- CI config สมมติว่า
astro checkwarning ไหนก็ตามทำให้ build ล้มเหลวหรือไม่? โดยปริยายมีแค่ diagnostic ระดับerrorเท่านั้นที่ทำ (--minimumFailingSeverityค่าเริ่มต้น"error") ดู Verification Tools