ข้ามไปยังเนื้อหา
Pre-MVP โค้ดเบส 1.0 ยังไม่ใช่ผลิตภัณฑ์ที่เผยแพร่ — ดู ขอบเขตผลิตภัณฑ์ 1.0

หนึ่งคำต่อหนึ่งสิ่ง

มีหกคำในผลิตภัณฑ์นี้ที่เคยถูกใช้กับสิ่งมากกว่าหนึ่งอย่าง และความซ้ำซ้อนแต่ละครั้งทำให้ใครสักคนเสียเวลาไปหนึ่งชั่วโมง เอกสารนี้คือทะเบียนคำศัพท์ คำที่ไม่อยู่ในรายการนี้ไม่ใช่คำศัพท์ของผลิตภัณฑ์ และคำที่อยู่ในรายการนี้มีความหมายตรงตามที่เขียนไว้ที่นี่เท่านั้น — ทั้งใน UI, ใน CLI, ในสเปก และใน commit message

การ deploy Dee Wan หนึ่งชุด ประกอบด้วย admin Worker, admin UI, control database และบัญชีกับ credential ที่อยู่เบื้องหลังสิ่งเหล่านี้ สร้างขึ้นครั้งเดียวโดยตัวติดตั้ง (installer)

  • สิ่งที่ npm run setup สร้างขึ้น
  • มี control database หนึ่ง ชุด, claim link หนึ่ง ลิงก์, superadmin หนึ่ง ชุด
  • ให้บริการ ไซต์ จำนวนมาก
  • ไม่ใช่ “การติดตั้งไซต์” ไซต์ไม่ได้ถูกติดตั้ง แต่ถูกสร้างขึ้น

เกี่ยวข้องกันแต่แยกจากกัน: installer คือ engine และมีสองอินเทอร์เฟซ — web installer และ CLI installer ทั้งสองขับเคลื่อน engine ตัวเดียวกัน

tenant หนึ่งตัวภายใน installation (การติดตั้ง Dee Wan หนึ่งชุด) มีชื่อ, slug, hostname, เนื้อหาของตัวเอง, ภาษาของตัวเอง, บทบาท (role) และ grant ของตัวเอง

  • สร้างผ่าน POST /api/sites ไม่ใช่ผ่านตัวติดตั้งเด็ดขาด
  • ภายใต้ topology แบบแยกต่อไซต์ (per-site) ไซต์มี content database ของตัวเองด้วย ภายใต้ topology แบบใช้ร่วม (shared) ไซต์ใช้ content database ชุดเดียวของ installation ร่วมกัน ว่าไซต์มีแบบใด เป็นแถวหนึ่งใน site_binding ไม่ใช่คุณสมบัติของคำนี้
  • ไม่ใช่ “site” ของ Cloudflare หรือ zone เมื่อหมายถึงออบเจกต์ของ Cloudflare ให้ใช้คำว่า zone

การทำให้เนื้อหาชิ้นหนึ่งอ่านได้โดย public read worker เป็นการเปลี่ยนสถานะใน lifecycle ของเนื้อหา ไม่เกี่ยวข้องกับโครงสร้างพื้นฐานใด ๆ

  • publish / unpublish ต่อรายการเนื้อหา ต่อกลุ่ม locale
  • เปลี่ยนสิ่งที่ /api/… บน public hostname ตอบกลับ ไม่เปลี่ยนโค้ด ไม่เปลี่ยน binding ไม่เปลี่ยน deployment
  • ไม่ใช่ “การเผยแพร่ไซต์” ไซต์ไม่ได้ถูกเผยแพร่ เนื้อหาของไซต์ต่างหากที่ถูกเผยแพร่

การสร้างโปรเจกต์แบ็กเอนด์แบบ standalone ที่มี type จากโมเดลเนื้อหาของไซต์ เป็นการสร้างซอร์สโค้ด และเป็นแค่นั้นเท่านั้น

ใน UI ที่ลูกค้าเห็น ให้ใช้คำว่า “GENERATE STANDALONE BACKEND” ไม่มีใครนอก repository นี้รู้ว่าการที่ไซต์ graduate หมายถึงอะไร และคำนี้อธิบาย กลไกแทนที่จะอธิบายสิ่งที่ผู้ใช้ได้รับ graduation ยังคงเป็นคำศัพท์ทางเทคนิคภายใน — ชื่อโมดูล, CLI script (npm run graduate), สเปก, commit message, ทะเบียนนี้ — และจะไม่ปรากฏบนหน้าจอ, ปุ่ม, toast หรือประโยค error ที่ผู้รับไปดูแล (adopter) อ่านเลย scripts/check-vocabulary.mjs ทำให้ CI ล้มเหลวเมื่อพบ ข้อความที่ผู้ใช้มองเห็นซึ่งละเมิดกฎนี้

  • npm run graduate เขียนโปรเจกต์หนึ่งชุด: Prisma schema, migration, Worker หนึ่งตัว, wrangler.jsonc และ route ที่มี type
  • ผลลัพธ์ถูก แยกตัว (detach) — ไม่รู้อะไรเลยเกี่ยวกับ installation ที่ สร้างมันขึ้นมา และไม่เรียกกลับไปหาสิ่งใด (SPEC.md §13.1)
  • Graduation ไม่ deploy อะไรเลย graduate:all ก็ไม่ deploy อะไรเช่นกัน
  • ไม่ใช่ migration, ไม่ใช่ export, ไม่ใช่ deployment มันคือการสร้างโค้ด

การทำให้ revision ที่ระบุหนึ่งตัวทำงานอยู่บน Cloudflare มีสองสิ่งที่ใช้ คำนี้ และแยกออกจากกันด้วยสิ่งที่แต่ละอย่างกระทำต่อ:

คำศัพท์ กระทำต่อ คำสั่ง
installation deployment admin Worker และ admin UI npm run deploy
site deployment Worker และ D1 ของไซต์ที่ graduate แล้วหนึ่งไซต์ ปุ่ม Deploy ผ่าน CI
  • site deployment คือ CI pipeline ตาม SPEC.md §13.1: ออก build credential, สร้างไฟล์ที่ generator เป็นเจ้าของใหม่, เพิ่ม migration ต่อท้าย, migrate D1, deploy revision นั้น, ตรวจสอบ, รายงานกลับ site_deployment คือแถวที่ บันทึกสิ่งนี้
  • ไม่ใช่ graduation Graduation สร้างโค้ดที่ deployment นำไปรัน

การสร้างทรัพยากร Cloudflare ที่สิ่งหนึ่งต้องใช้ และบันทึกว่าทรัพยากรนั้นมีอยู่

  • Installation provisioning: D1, R2 หรือ Images, Pages, DNS — สิ่งที่ setup ทำ
  • Site provisioning: create → migrate → bind → redeploy → verify สำหรับ content database ของไซต์เอง บันทึกไว้ใน provision_attempt / provision_ledger
  • บันทึกลง ledger เสมอ ทำต่อจากจุดที่ค้างได้เสมอ และไม่อนุมานจากชื่อเด็ดขาด
  • ไม่ใช่ installation, ไม่ใช่ deployment Provisioning สร้างทรัพยากร ส่วน deployment นำโค้ดไปวางบนทรัพยากรนั้น
หลีกเลี่ยง เพราะ ให้ใช้
“tenant” ใน UI เป็นคำระดับ implementation ผู้ดูแลระบบ (operator) คิดเป็นไซต์ site
“instance” สำหรับ deployment content_instance เป็นแถวหนึ่ง และมีอยู่ทุกที่ installation
“migrate” สำหรับการนำเข้าเนื้อหา migrate คือ schema migration import
“export” สำหรับ graduation export คือเนื้อหาที่ออกไป ส่วน graduation คือโค้ดที่เข้ามา graduate
“sync” เคยมีความหมายถึงสี่อย่าง ระบุทิศทาง
“graduate” ใน UI เป็นชื่อกลไก ไม่ใช่สิ่งที่ adopter ได้รับ generate standalone backend
“workflow” สำหรับไซต์ที่ปิด review ไม่มี review ให้อยู่ในนั้น publish / unpublish