tracker/data/milestones.json
[
{
"id": "m0-preparation",
"no": 0,
"title": "เตรียมความพร้อมก่อนเริ่มงานจริง",
"goal": "งาน discovery ออกแบบเบื้องต้น และเครื่องมือของทีม ก่อนจัดหมวดหมู่ Milestone และ Epic ของงานจริง (Milestone 1, 2, 3, …)",
"epics": [
{
"id": "prep-discovery",
"title": "Discovery และฐานความรู้โครงการ",
"goal": "รวบรวมข้อมูลจาก Proposal, ภาพ module ของ BA และ use case ให้เป็นฐานความรู้ที่ Agent และทีมใช้อ้างอิงได้",
"target": "2026-10-30",
"tasks": [
{
"id": "T-101",
"title": "ศึกษา Proposal และสร้าง docs/agent",
"status": "done",
"owner": "Claude",
"started": "2026-10-29",
"finished": "2026-10-29",
"summary": "ถอดข้อความและภาพจาก .docx แล้วเขียนเอกสาร 01–11",
"refs": [
"docs/agent/README.md"
]
},
{
"id": "T-102",
"title": "ถอดภาพโครงสร้าง module ของ BA (UNI-01…08, SS-01…15)",
"status": "done",
"owner": "Claude",
"started": "2026-10-29",
"finished": "2026-10-29",
"refs": [
"docs/agent/03-modules.md"
],
"summary": "ถอดโครงสร้าง BA เป็น UNI-01…08 และ SS-01…15 เพื่อใช้เป็นขอบเขตฟังก์ชันแยกตามระดับการศึกษา",
"description": "บันทึกงานที่ทำเสร็จตามข้อมูลเดิม: แปลงโครงสร้าง module ของ BA เป็นตารางอ้างอิงในฐานความรู้ แยกมหาวิทยาลัยและโรงเรียนกีฬา ภายหลังได้รับ draw.io ต้นฉบับใน T-107 จึงใช้อ้างอิงแทนภาพความละเอียดต่ำ",
"deliverables": [
"ตาราง BA modules/functions และ mapping ใน docs/agent/03-modules.md"
]
},
{
"id": "T-103",
"title": "AGENTS.md, CLAUDE.md และ README.md",
"status": "done",
"owner": "Claude",
"started": "2026-10-29",
"finished": "2026-10-30",
"refs": [
"AGENTS.md",
"README.md",
"CLAUDE.md",
"docs/agent/README.md"
],
"summary": "จัดจุดเริ่มอ่านและกติกาการทำงานของ Agent ให้ทุกเครื่องมือใช้ความรู้โครงการชุดเดียวกัน",
"description": "บันทึกงานที่ทำเสร็จ: AGENTS.md และไฟล์ชี้ทางให้เริ่มอ่าน docs/agent/README.md พร้อมกฎลำดับความน่าเชื่อถือของแหล่งข้อมูลและการอัปเดตฐานความรู้",
"deliverables": [
"AGENTS.md / CLAUDE.md และ README ที่ชี้ฐานความรู้หลัก"
]
},
{
"id": "T-104",
"title": "เอาเนื้อหาที่ค้างจากเอกสารโครงการอื่นออกจากฐานความรู้",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"summary": "Proposal §5 และ §7 ยังไม่ได้เขียนสำหรับ TNSU จึงระบุให้ข้ามไป",
"refs": [
"docs/agent/11-open-questions-and-known-issues.md"
]
},
{
"id": "T-105",
"title": "สร้าง catalog use case 162 รายการจาก Use case Explorer",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"refs": [
"docs/agent/12-use-cases.md",
"docs/agent/tools/gen_use_cases.py",
"docs/agent/use-cases/README.md",
"use_cases/UC1-Explorer.dc.html"
],
"summary": "สร้าง catalog 162 Use cases ใน 35 modules พร้อม actors ขั้นตอนและ relations จาก Explorer ต้นฉบับ",
"description": "บันทึกงานที่ทำเสร็จ: ใช้ gen_use_cases.py อ่านข้อมูล JSON ที่ฝังใน Explorer แล้วสร้างเอกสารราย module และดัชนีบทบาท เอกสารใน use-cases/ เป็น generated ต้องแก้ต้นฉบับแล้ว regenerate",
"deliverables": [
"Catalog ราย module และ role/module index",
"สคริปต์สร้างเอกสารจากแหล่งข้อมูลเดิม"
]
},
{
"id": "T-106",
"title": "ตั้ง git repo และ push ขึ้น GitLab",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"summary": "บันทึกเดิมระบุว่าตั้ง Git repository และส่งประวัติงานขึ้น GitLab แล้ว",
"description": "รายการนี้เป็นประวัติงานที่บันทึกว่าเสร็จแล้ว หลักฐานรายละเอียดการตั้ง repository ดูจาก checkpoints และประวัติ Git ของโครงการ งานเติม brief ไม่ได้ส่ง commit/push เพิ่มหรือเปลี่ยนสิทธิ์ remote",
"deliverables": [
"Repository และประวัติงานตาม checkpoint เดิม"
],
"refs": [
"tracker/data/checkpoints.json"
]
},
{
"id": "T-107",
"title": "ถอดไฟล์ draw.io ต้นฉบับของ BA (module, โครงสร้างหน่วยงาน, หลักสูตร, flow)",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"summary": "เขียน gen_ba_drawio.py สร้าง ba-drawio.md จากทั้ง 7 หน้า และอัปเดต 03-modules, 05-workflows, glossary, Role Matrix และคำถามค้าง",
"refs": [
"docs/agent/ba-drawio.md",
"docs/agent/03-modules.md",
"docs/agent/05-workflows.md"
]
},
{
"id": "T-108",
"title": "ทบทวน Use cases ทั้งหมดและปรับ decision/exception flows",
"status": "done",
"owner": "Codex",
"started": "2026-10-31T02:19:03+07:00",
"summary": "ทบทวนครบ 162 Use cases; ปรับ workflow เป็นข้อเสนอ 60 รายการ เพิ่ม 47 decisions ใน 39 รายการ บันทึกคำถาม UR-Q01…10 และแหล่งทางการไทย; Go/race/vet และ browser 95 ข้อผ่านแล้ว ยังไม่อนุมัติ use-case แทนผู้ตรวจ",
"steps": [
{
"text": "อ่านครบทุก Use case และตรวจความเชื่อมโยง/ขอบเขต/exception paths",
"done": true
},
{
"text": "เทียบ official Thai university/admission sources และแยกข้อยืนยันจากข้อเสนอ",
"done": true
},
{
"text": "ปรับต้นฉบับและ decision diagrams โดยรักษา version/approval provenance",
"done": true
},
{
"text": "Regenerate เอกสาร ตรวจข้อมูล/diagram/UI และสรุปครบ 162 รายการ",
"done": true
}
],
"refs": [
"docs/agent/16-use-case-review-2026-10-31.md",
"docs/agent/reviews/2026-10-31-use-case-audit.json",
"use_cases/UC1-Explorer.dc.html",
"docs/agent/11-open-questions-and-known-issues.md",
"tracker/workflow_test.go",
"tracker/e2e/workflow-review-check.mjs"
],
"finished": "2026-10-31T02:59:35+07:00",
"description": "งานวิเคราะห์และเครื่องมือภายในเสร็จแล้ว ข้อเสนอพฤติกรรมยังรอการยืนยันราย Use case ไม่ใช่การพัฒนาระบบผลิตภัณฑ์หรือรับรองนโยบายมหาวิทยาลัย; 102 รายการมีข้อสังเกตแต่ยังไม่แก้ workflow ส่วนนั้น",
"deliverables": [
"รายงานอ่านง่ายพร้อมผลตรวจครบทุก ID และหลักฐานไทย",
"Canonical source พร้อม review notes และ decision/loop/alternate outcomes",
"Generated catalog และ tracker draft/reset ที่ใช้ metadata เดียวกัน",
"ผลตรวจโครงสร้าง 162 รายการ Go/race/vet และ UI 95 assertions"
],
"questions": [
{
"id": "UR-Q01",
"asked_of": "งานรับสมัคร + ทะเบียน + DPO (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "แต่ละระดับ/รอบต้องการข้อมูลครอบครัวอะไร เพื่ออะไร เก็บตอนสมัครหรือมอบตัว? ผู้ติดต่อฉุกเฉินเพียงพอหรือไม่ และ Parent Portal เป็นทางเลือกหรือหน้าที่เฉพาะกลุ่ม?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-41, W-44, W-83, W-86, W-127, W-144",
"state": "open"
},
{
"id": "UR-Q02",
"asked_of": "งานรับสมัคร + เจ้าของโครงการ (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "ช่องทางใดเข้าร่วม TCAS จริง? uniqueness ระดับ/cycle และอำนาจหมดสิทธิ์/ขยายเวลา/reconfirm ใช้ประกาศฉบับไหน? คง D-06 ไม่ทำ automatic cross-campus ClearingRun ใน R1",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-43, W-69–78, W-163",
"state": "open"
},
{
"id": "UR-Q03",
"asked_of": "การเงิน + เจ้าหน้าที่ กยศ./ทุน (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "กติกายกเว้น ผ่อนผัน ทุนบางส่วน ใบเสร็จ คืนเงินและหักภาษีแยกอย่างไร? ธนาคาร/ช่องทางใดยืนยันแล้วและ fallback ใครตรวจ?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-09, W-27, W-29, W-48, W-51, W-81, W-102, W-105, W-119–120, W-143",
"state": "open"
},
{
"id": "UR-Q04",
"asked_of": "ทะเบียน + นิติกร (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "คำสั่งพ้นสภาพ/การอุทธรณ์ทำให้สถานะและค่าใช้จ่ายเปลี่ยนอย่างไร? ใครกลั่นกรอง/มีมติปริญญาและปิดหลักสูตร? แก้ actor ที่ไม่ตรงข้อความด้วยหลักฐานอำนาจ",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-06, W-11, W-16–18, W-132–133, W-141, W-162",
"state": "open"
},
{
"id": "UR-Q05",
"asked_of": "คณะ/บัณฑิตวิทยาลัย + ทะเบียน (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "การประเมินผู้สอนก่อนดูเกรด จำนวนภาคเรียน เกณฑ์เวลาเรียน การแก้ I/0/ร/มส และลำดับภาษา/qualifying/comprehensive/IS ใช้แผนรุ่นใด?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-01, W-52–56, W-94–99, W-103–104, W-145, W-158",
"state": "open"
},
{
"id": "UR-Q06",
"asked_of": "แพทย์/พยาบาล + กีฬา + safeguarding + DPO (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "ใครออก clearance ขอบเขตและอายุผล? protocol ฉุกเฉิน/ความร้อน/ยา/กลับเล่น/ผู้ติดต่อปลอดภัยเป็นฉบับใด? การแชร์ readiness ตาม D-05 จำกัดผู้รับอย่างไร?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-14, W-39, W-42, W-45, W-91, W-129–130, W-148–155",
"state": "open"
},
{
"id": "UR-Q07",
"asked_of": "หอพัก + การเงิน + วิเทศ (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "ต่อสัญญา/ย้ายห้องจัดการมัดจำและสิทธิ์เข้าออกอย่างไร? TM30 ใครมีหน้าที่และเมื่อใด? 90 วัน/วีซ่าใดเกี่ยวกับผู้เรียนแต่ละกลุ่ม?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-38, W-46, W-80, W-147",
"state": "open"
},
{
"id": "UR-Q08",
"asked_of": "ทะเบียนโรงเรียน + safeguarding + นิติกร (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "เด็กไม่มีผู้ปกครองที่มีเอกสาร/มีคำสั่งห้ามติดต่อใช้เส้นช่วยเหลืออย่างไร? ใครอนุญาตรับเด็ก/ให้ยา/เปิดข้อมูล?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-13, W-22–23, W-83, W-86, W-90–93, W-149, W-160",
"state": "open"
},
{
"id": "UR-Q09",
"asked_of": "DPO + สารบรรณ + เจ้าของข้อมูล (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "retention/legal hold การทำลาย/ส่งหอจดหมายเหตุ การเปิด OIT การส่งออกข้อมูลอ่อนไหว ใช้อำนาจ/รูปแบบ/ผู้รับใด?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: W-20–21, W-35, W-40, W-136, W-138",
"state": "open"
},
{
"id": "UR-Q10",
"asked_of": "เจ้าของโครงการ + BA (ผู้ตอบที่เสนอ ยังไม่ได้ติดต่อ)",
"question": "จัดทำ use cases เพิ่มสำหรับโภชนาการรายวัน เวรครูหอ ซ่อมหอ แผนการสอน คะแนนความประพฤติ และ AI ตามขอบเขตจริงเมื่อใด? บัณฑิตศึกษา/PRA/บริการภายนอกอยู่ release ใด?",
"why": "ยืนยันก่อนใช้ข้อเสนอพัฒนา: gaps จาก 03/12; LAB ยังคงนอก R1",
"state": "open"
}
],
"review": {
"reviewer": "Project owner / BA และเจ้าของงานตาม UR-Q01…10 (เสนอ)",
"requested_at": "2026-10-31T02:59:35+07:00",
"state": "todo",
"focus": "ตรวจข้อเสนอ business flow และตอบคำถามนโยบาย ก่อน Development Approval ราย use case",
"checklist": [
{
"text": "เปิดรายงาน 16 และตรวจตารางผลครบ 162 รายการ แยกข้อเสนอออกจากกฎที่มหาวิทยาลัยยืนยันแล้ว",
"done": false
},
{
"text": "ตรวจ W-41/W-44 เรื่องผู้ปกครอง และ W-127 เรื่องสิทธิ์ provisional เทียบข้อกำหนดจริงของ UNI/SS",
"done": false
},
{
"text": "ตรวจ W-43/W-74/W-163, W-51, W-147, W-133/W-162 และผลกระทบต่อสิทธิ์/เงิน",
"done": false
},
{
"text": "ให้ผู้เชี่ยวชาญตรวจความปลอดภัย EC และผู้มีอำนาจใน W-06/W-132/W-141 พร้อมตอบ UR-Q01…10 ด้วยหลักฐาน",
"done": false
},
{
"text": "เปิด diagram ที่ปรับ เทียบทางแยก/ผลลัพธ์กับ source และกด Approve เฉพาะ use case ที่ยืนยันครบแล้ว",
"done": false
}
]
}
}
]
},
{
"id": "prep-access",
"title": "บทบาท สิทธิ์ และความปลอดภัย",
"goal": "ได้ Role Matrix และ Security Matrix ที่ BA ยืนยันแล้ว ใช้เป็นฐานของ IAM",
"tasks": [
{
"id": "T-201",
"title": "Role Matrix ฉบับร่าง v0.1",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"summary": "59 รหัสบทบาท โมเดลขอบเขตสิทธิ์ และตารางอำนาจอนุมัติประมาณ 40 เรื่อง",
"refs": [
"docs/agent/13-role-matrix.md"
],
"review": {
"reviewer": "BA",
"requested_at": "2026-10-30",
"state": "todo",
"focus": "ความถูกต้องของ **รหัสบทบาท** และ **ผู้อนุมัติ** ใน Role Matrix ก่อนนำไปออกแบบ IAM",
"checklist": [
{
"text": "เปิด `docs/agent/13-role-matrix.md` หัวข้อ **2. Role catalog** แล้วตรวจว่าบทบาททั้ง 59 รายการมีจริงในมหาวิทยาลัยและโรงเรียนกีฬา",
"done": false
},
{
"text": "ทำเครื่องหมายบทบาทที่ควร **รวมกัน** หรือ **แยกออก** เช่น `FIN_OFFICER` กับ `FIN_HEAD`, นายทะเบียนส่วนกลางกับวิทยาเขต",
"done": false
},
{
"text": "ระบุว่าฝั่ง **โรงเรียนกีฬา** ใครอนุมัติแทน `DEAN` และ `CAMPUS_VP`",
"done": false
},
{
"text": "ตรวจตาราง **3. Approval authority matrix** ทีละเรื่อง ว่าลำดับผู้อนุมัติตรงกับระเบียบจริง",
"done": false
},
{
"text": "ตอบคำถามใน **4. Open points for the BA** ทั้ง 6 ข้อ",
"done": false
},
{
"text": "เลือก **Approve** ถ้าผ่าน หรือ **Reject** พร้อมเขียนสิ่งที่ต้องแก้ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
]
},
"finished": "2026-10-30T12:49:14+07:00"
},
{
"id": "T-202",
"title": "Security Matrix ฉบับร่าง v0.1",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"summary": "ระดับข้อมูล L1–L4 สิทธิ์ตามโดเมนข้อมูล การยืนยันตัวตน SoD และ audit",
"refs": [
"docs/agent/14-security-matrix.md"
],
"review": {
"reviewer": "BA และผู้ดูแลความปลอดภัย",
"requested_at": "2026-10-30",
"state": "todo",
"focus": "ระดับการจัดชั้นข้อมูล สิทธิ์การเข้าถึงข้อมูลอ่อนไหว และการยืนยันตัวตน",
"checklist": [
{
"text": "ตรวจ **1. Data classification** ว่าข้อมูลแต่ละประเภทอยู่ในระดับ L1–L4 ถูกต้อง",
"done": false
},
{
"text": "ตรวจตาราง **2a–2c** โดยเฉพาะข้อมูลสุขภาพ (`hlt_vault`) และเคสคุ้มครองเด็ก ว่าใครเห็นอะไรได้บ้าง",
"done": false
},
{
"text": "ตัดสินใจเรื่อง **MFA** ของนักศึกษาและผู้ปกครอง: บังคับหรือไม่บังคับ",
"done": false
},
{
"text": "ระบุบทบาทที่เห็น **เลขบัตรประชาชนเต็ม** ได้",
"done": false
},
{
"text": "ตรวจรายการ **SoD** ในหัวข้อ 4 ว่าครบตามที่ใช้จริง และส่งรายการ SoD ฉบับเต็มจากเล่ม Workflow มาเทียบ",
"done": false
},
{
"text": "เลือก **Approve** / **Reject** / **Hold** พร้อมรายละเอียด แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
]
},
"finished": "2026-10-30T12:49:14+07:00"
},
{
"id": "T-203",
"title": "ปรับ Role และ Security Matrix ตามผลรีวิว",
"status": "todo",
"owner": "Claude",
"summary": "นำผลรีวิว Role/Security Matrix มาปรับเป็นฉบับที่ตรวจย้อนกลับได้ พร้อมรายการข้อที่ยังต้องตัดสินใจ",
"description": "รวบรวมผลรีวิว T-201 และ T-202 แล้วแยกเป็นข้อที่แก้ได้จากหลักฐานเดิม ข้อที่ต้องถามเจ้าของกระบวนการ และข้อเสนอที่ยังไม่อนุมัติ ตรวจบทบาท/ขอบเขต/อำนาจอนุมัติให้สอดคล้องกันทั้งสองตาราง\n\nงานนี้เริ่มเตรียมรายการประเด็นได้ทันที ส่วนการแก้รายข้อให้ใช้ผลรีวิวจริง ไม่ถือว่าร่างได้รับอนุมัติแล้ว ค่าธรรมเนียม เกณฑ์ และวงเงินยังเป็น configuration ตามข้อสรุปเดิม",
"deliverables": [
"Role Matrix และ Security Matrix ฉบับปรับปรุง พร้อมตาราง issue → หลักฐาน → วิธีแก้",
"รายการคำถามที่ยังไม่ปิดและผู้มีอำนาจยืนยัน",
"Checklist ส่งผู้รีวิวรอบถัดไป โดยคงประวัติการตัดสินใจเดิม"
],
"dependencies": [
"T-201",
"T-202"
],
"suggested_owner": "BA ร่วมกับ Security lead",
"refs": [
"docs/agent/13-role-matrix.md",
"docs/agent/14-security-matrix.md",
"docs/agent/04-roles-and-access.md"
],
"steps": [
{
"text": "อ่านผลรีวิวล่าสุดและทำรายการประเด็นจาก T-201/T-202",
"done": false
},
{
"text": "เทียบ actor/use case กับบทบาทและขอบเขตหน่วยงาน",
"done": false
},
{
"text": "ปรับข้อที่มีหลักฐานและบันทึกเหตุผลการเปลี่ยน",
"done": false
},
{
"text": "รวบรวมคำถามให้ BA/เจ้าของกระบวนการตอบ",
"done": false
},
{
"text": "ตรวจความสอดคล้องและส่งรีวิวทั้งสองเอกสาร",
"done": false
}
],
"questions": [
{
"id": "T203-Q1",
"asked_of": "BA และผู้รีวิว T-201/T-202",
"question": "ประเด็นใดในสอง matrix ต้องแก้ก่อนเริ่มออกแบบ IAM และใครเป็นผู้ยืนยันอำนาจอนุมัติของโรงเรียนกีฬา?",
"why": "จัดลำดับงานแก้และไม่กำหนดผู้อนุมัติแทนหน่วยงาน",
"state": "open"
},
{
"id": "T203-Q2",
"asked_of": "Project owner / Tech lead",
"question": "ใครเป็นผู้อนุมัติ matrix ฉบับใช้งาน และข้อใดต้องยืนยันกับมหาวิทยาลัยเพิ่มเติม?",
"why": "กำหนดผู้รับรองและเกณฑ์ส่งต่อให้ทีมออกแบบ",
"state": "open"
}
]
}
]
},
{
"id": "prep-architecture",
"title": "สถาปัตยกรรมและการตัดสินใจทางเทคนิค",
"goal": "บันทึกการตัดสินใจทางเทคนิคเป็น ADR ให้ครบก่อนเริ่มเขียนโค้ด",
"tasks": [
{
"id": "T-301",
"title": "ADR-0001 Tech stack",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"refs": [
"docs/adr/0001-tech-stack.md"
],
"summary": "ADR-0001 บันทึก stack ที่ตัดสินใจแล้วและข้อที่ยังเปิด เช่น hosting/backup/DR/รายละเอียด SQL Server",
"description": "บันทึกงานที่ทำเสร็จ: สรุป Vue/Nuxt SSR, Go Stream Framework และองค์ประกอบ platform ตาม ADR-0001 ต่อมาปรับฐานข้อมูลเป็น SQL Server ตามการตัดสินใจ T-302 และบันทึกใน T-305 ประเด็น hosting ดำเนินต่อใน T-303",
"deliverables": [
"ADR-0001 พร้อม decision/consequences และ follow-ups"
]
},
{
"id": "T-302",
"title": "เลือกฐานข้อมูล SQL Server หรือ PostgreSQL",
"status": "reviewed",
"owner": "Project owner",
"started": "2026-10-30",
"summary": "ตัดสินใจใช้ SQL Server เพราะมหาวิทยาลัยใช้งานอยู่แล้ว ตามผลรีวิวของทิว 2026-10-30; version/edition/license และที่ติดตั้งยังต้องเก็บข้อมูลต่อใน T-303",
"refs": [
"docs/adr/0001-tech-stack.md"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "เลือกฐานข้อมูลระหว่าง **SQL Server** และ **PostgreSQL**",
"checklist": [
{
"text": "อ่านตารางเปรียบเทียบใน `docs/adr/0001-tech-stack.md`",
"done": false
},
{
"text": "สอบถามมหาวิทยาลัยเรื่อง license และทีมดูแลฐานข้อมูลที่มีอยู่",
"done": false
},
{
"text": "ตัดสินใจ แล้วแก้สถานะใน ADR-0001 จาก *open* เป็นตัวที่เลือก",
"done": false
},
{
"text": "ตัดสินใจแล้วกด **Approve** พร้อมเขียนว่าเลือกฐานข้อมูลตัวไหน ถ้ายังรอข้อมูลให้เลือก **Hold** พร้อมเหตุผล",
"done": false
}
],
"decision": "ลูกค้าใช้ SQL Server อยู่แล้วคงจะใช้ SQL Server ต่อไป",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "ลูกค้าใช้ SQL Server อยู่แล้วคงจะใช้ SQL Server ต่อไป",
"by": "ทิว",
"at": "2026-10-30T16:05:07+07:00"
}
]
},
"finished": "2026-10-30",
"description": "ข้อสรุปที่อนุมัติแล้วคือ SQL Server และใช้ RabbitMQ สำหรับ queue ตาม ADR-0001 ข้อความแนะนำ PostgreSQL ก่อนตัดสินใจถูกแทนที่ด้วยผลรีวิวจริง โดยคงประวัติ review เดิมไว้"
},
{
"id": "T-303",
"title": "เลือกที่ติดตั้งระบบ (Cloud ภาครัฐหรือเซิร์ฟเวอร์ของมหาวิทยาลัย)",
"status": "todo",
"summary": "รวบรวมข้อจำกัดและทรัพยากร เปรียบเทียบทางเลือก hosting แล้วให้ผู้มีอำนาจตัดสินใจและบันทึก ADR",
"description": "เป้าหมายคือได้ข้อสรุปว่าระบบส่วนใดติดตั้งที่ใด ใครรับผิดชอบ และมีเงื่อนไขใดต้องเตรียมก่อนเริ่ม build/deploy ใช้ stack ที่ตัดสินใจแล้วรวม SQL Server และ RabbitMQ เป็นฐานในการประเมิน\n\nเริ่มจากข้อมูลของมหาวิทยาลัย: ข้อกำหนดที่ตั้งข้อมูล ทรัพยากรเดิม ระบบเครือข่าย ทีมปฏิบัติการ ปริมาณผู้ใช้/ช่วง peak และการกู้คืน จากนั้นจัดทางเลือก Cloud ภาครัฐ / infrastructure ของมหาวิทยาลัย และแบบผสมเมื่อข้อจำกัดรองรับ พร้อมข้อดี ข้อจำกัด งานที่ต้องจัดหา และต้นทุนจากข้อมูลจริง\n\nขณะนี้ hosting ยังไม่ถูกตัดสินใจ ผลลัพธ์ของงานคือเอกสารประกอบการตัดสินใจและ ADR ที่ผู้มีอำนาจยืนยันก่อนวางแผนติดตั้งจริง",
"deliverables": [
"ตารางข้อกำหนด hosting พร้อมแหล่งข้อมูลและผู้ยืนยัน",
"Inventory ทรัพยากร/เครือข่าย/SQL Server และรายการสิ่งที่ขาด",
"ตารางเปรียบเทียบทางเลือกและแผนภาพ dev/UAT/production/backup/DR",
"ADR ที่ระบุที่ติดตั้ง เจ้าของระบบ เงื่อนไข/ความเสี่ยง และงานติดตาม"
],
"dependencies": [
"T-301",
"T-302"
],
"suggested_owner": "Solution architect ร่วมกับผู้รับผิดชอบ Infrastructure มหาวิทยาลัย",
"refs": [
"docs/adr/0001-tech-stack.md",
"docs/agent/07-architecture-and-integrations.md",
"docs/agent/08-non-functional-requirements.md",
"docs/agent/11-open-questions-and-known-issues.md"
],
"steps": [
{
"text": "ระบุผู้ประสานงานฝ่าย infrastructure/security และผู้อนุมัติ hosting",
"done": false
},
{
"text": "รวบรวมข้อกำหนด สภาพแวดล้อมเดิม license และทีมดูแล",
"done": false
},
{
"text": "เก็บจำนวนผู้ใช้/โหลดช่วงรับสมัครและลงทะเบียน พร้อม RTO/RPO ที่หน่วยงานต้องการ",
"done": false
},
{
"text": "เปรียบเทียบทางเลือกและ dependencies ของ stack ตาม ADR-0001",
"done": false
},
{
"text": "หารือ trade-offs และยืนยันทางเลือกกับผู้มีอำนาจ",
"done": false
},
{
"text": "บันทึก ADR และแตกงานเตรียม environment/backup/DR/network ตามข้อสรุป",
"done": false
}
],
"questions": [
{
"id": "T303-Q1",
"asked_of": "Project owner + ผู้รับผิดชอบ IT มหาวิทยาลัย",
"question": "มีข้อกำหนดที่ยืนยันแล้วหรือไม่ว่าต้องใช้ Cloud ภาครัฐหรือเซิร์ฟเวอร์มหาวิทยาลัย และใครมีอำนาจอนุมัติทางเลือกนี้?",
"why": "ตัดทางเลือกที่ใช้ไม่ได้และรู้ผู้ตัดสินใจตัวจริง",
"state": "open"
},
{
"id": "T303-Q2",
"asked_of": "ทีม Infrastructure / DBA มหาวิทยาลัย",
"question": "มีเครื่องหรือคลัสเตอร์ storage network SQL Server version/edition/license และระบบ backup/DR อะไรใช้งานอยู่บ้าง? ขอ inventory หรือผู้ประสานงาน",
"why": "ประเมินความพร้อมและงาน/ค่าใช้จ่ายที่ต้องเพิ่มโดยไม่เดาทรัพยากร",
"state": "open"
},
{
"id": "T303-Q3",
"asked_of": "ฝ่าย IT ร่วมกับนายทะเบียนและงานรับสมัคร",
"question": "มีจำนวนบัญชี/ผู้ใช้พร้อมกัน ปริมาณข้อมูล และรูปแบบ peak ช่วงรับสมัคร/ลงทะเบียนที่ใช้ประเมิน capacity ได้หรือไม่?",
"why": "กำหนดขนาดและทดสอบ capacity ให้สัมพันธ์กับงานจริง",
"state": "open"
},
{
"id": "T303-Q4",
"asked_of": "เจ้าของบริการ + ฝ่าย IT / Security",
"question": "ใครกำหนด RTO/RPO ข้อจำกัดที่ตั้งข้อมูล การเข้าถึงจากภายนอก และหน้าที่ดูแลเหตุขัดข้อง?",
"why": "ออกแบบ availability, backup/DR และการเข้าถึงที่หน่วยงานยอมรับ",
"state": "open"
},
{
"id": "T303-Q5",
"asked_of": "Project owner + ฝ่ายงบประมาณ/จัดซื้อ + IT",
"question": "มีกรอบงบประมาณ ขั้นตอนจัดหา ช่วงเวลาที่เตรียม environment ได้ และผู้รับผิดชอบค่าใช้จ่าย/operation ระยะยาวหรือยัง?",
"why": "เปรียบเทียบทางเลือกภายใต้ข้อจำกัดจริงและวางลำดับเตรียมระบบ",
"state": "open"
}
]
},
{
"id": "T-304",
"title": "ออกแบบที่เก็บหลักฐาน audit แบบแก้ไขไม่ได้ (WORM)",
"status": "todo",
"summary": "ออกแบบการเก็บหลักฐาน audit ที่ตรวจการแก้ไขย้อนหลังได้ พร้อมผู้ดูแล retention/legal hold และแนวทางกู้คืน",
"description": "ระบุว่าเหตุการณ์ใดเป็นหลักฐานสำคัญ ใครเข้าถึง/บริหารหลักฐานได้ และต้องป้องกันการแก้ไขหรือพิสูจน์การเปลี่ยนแปลงอย่างไร แยกหลักฐาน audit ออกจาก operational logs ใน OpenSearch\n\nตรวจคุณสมบัติของ RustFS/object storage และ SQL Server version ที่ใช้งานจริงจากเอกสารผู้ผลิต ก่อนเสนอ Object Lock/WORM, signed evidence หรือ ledger ตามความเหมาะสม Retention และ legal hold เป็นนโยบายตั้งค่าได้โดยผู้มีอำนาจของมหาวิทยาลัย",
"deliverables": [
"Audit event/evidence catalog และแผนผังการส่งหลักฐาน",
"ADR เปรียบเทียบวิธีเก็บหลักฐานตามคุณสมบัติ version ที่ใช้จริง",
"ตารางสิทธิ์ผู้ดูแล หลักการแบ่งหน้าที่ และกระบวนการ retention/legal hold",
"รายการทดสอบแก้ไข/ลบ/กู้คืน/ตรวจความครบถ้วนของหลักฐาน"
],
"dependencies": [
"T-202",
"T-303"
],
"suggested_owner": "Security architect ร่วมกับ DBA / DPO",
"refs": [
"docs/agent/14-security-matrix.md",
"docs/agent/use-cases/AUD.md",
"docs/adr/0001-tech-stack.md",
"docs/agent/08-non-functional-requirements.md"
],
"steps": [
{
"text": "รวบรวม audit/security requirements จาก use cases และ Security Matrix",
"done": false
},
{
"text": "ยืนยัน storage/SQL Server version และผู้ดูแลจาก T-303",
"done": false
},
{
"text": "ตรวจ primary documentation และทดลองความสามารถสำคัญในสภาพแวดล้อมทดสอบ",
"done": false
},
{
"text": "ออกแบบสิทธิ์ การลงนาม/ตรวจสอบ และขั้นตอนตั้งค่า retention/legal hold",
"done": false
},
{
"text": "บันทึก ADR และหลักฐานทดสอบ ส่ง Security/DBA/DPO ตรวจ",
"done": false
}
],
"questions": [
{
"id": "T304-Q1",
"asked_of": "Security lead / ผู้ตรวจสอบภายใน / DPO",
"question": "ข้อมูลหรือเหตุการณ์ใดต้องเก็บเป็นหลักฐานที่แก้ไขไม่ได้หรือพิสูจน์การเปลี่ยนแปลงได้ และใครรับรองความต้องการ?",
"why": "กำหนดระดับหลักฐานและกรณีตรวจรับ",
"state": "open"
},
{
"id": "T304-Q2",
"asked_of": "DBA + Infrastructure",
"question": "SQL Server และ object storage ที่อนุญาตให้ใช้เป็น version/edition ใด และใครถือสิทธิ์ admin/backup?",
"why": "เลือกแนวทางที่รองรับจริงและแบ่งหน้าที่ผู้ดูแล",
"state": "open"
},
{
"id": "T304-Q3",
"asked_of": "DPO / นิติกร / เจ้าของข้อมูล",
"question": "ใครเป็นเจ้าของและผู้อนุมัตินโยบาย retention/legal hold ของแต่ละกลุ่มหลักฐาน รวมถึงขั้นตอนยกเว้นหรือเปลี่ยนค่า?",
"why": "ออกแบบ configuration และ workflow อนุมัติโดยไม่ hard-code ระยะเวลา",
"state": "open"
}
]
},
{
"id": "T-305",
"title": "บันทึกผลรีวิว T-302: ใช้ SQL Server",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"summary": "อ่านผลรีวิวจาก Review form แล้วอัปเดต ADR-0001 และเอกสารที่เกี่ยวข้อง: ฐานข้อมูลเป็น SQL Server, queue ใช้ RabbitMQ",
"refs": [
"docs/adr/0001-tech-stack.md",
"docs/agent/07-architecture-and-integrations.md",
"docs/agent/11-open-questions-and-known-issues.md"
]
}
]
},
{
"id": "prep-team-tools",
"title": "เครื่องมือของทีม",
"goal": "เครื่องมือภายในที่ช่วยทีมทำงาน ไม่ได้เป็นส่วนหนึ่งของระบบ TNSU EMS",
"tasks": [
{
"id": "T-401",
"title": "เว็บติดตามความคืบหน้างาน (tracker)",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30",
"summary": "Go server แสดงผลฝั่ง server อัปเดตแบบเรียลไทม์ด้วย Server-Sent Events และรองรับ dark mode",
"refs": [
"tracker/"
],
"steps": [
{
"text": "วางแผนดีไซน์: สี ตัวอักษร และ milestone แบบลู่วิ่ง",
"done": true
},
{
"text": "Go server render หน้าเว็บฝั่ง server ด้วย html/template",
"done": true
},
{
"text": "อัปเดตแบบเรียลไทม์ด้วย Server-Sent Events จากการเปลี่ยนไฟล์และ git",
"done": true
},
{
"text": "หน้าเว็บ 6 เมนูและ stylesheet",
"done": true
},
{
"text": "ข้อมูลตั้งต้นจากงานจริงของทีม",
"done": true
},
{
"text": "เขียน go test และรันให้ผ่าน",
"done": true
},
{
"text": "ทดลองเปิดในเบราว์เซอร์และตรวจการอัปเดตสด",
"done": true
},
{
"text": "เขียนคู่มือ tracker/README.md และเพิ่มกติกาใน AGENTS.md",
"done": true
},
{
"text": "commit และ push",
"done": true
},
{
"text": "Dark mode: ตามระบบ / สว่าง / มืด และจำค่าที่เลือก",
"done": true
},
{
"text": "โครงสร้าง Milestone → Epic → Task และย้ายงานเดิมเป็น Milestone 0",
"done": true
},
{
"text": "ปรับ dark mode เป็นชุดสีแบบ GitHub dark",
"done": true
},
{
"text": "dark mode เข้มขึ้น ไล่ระดับชั้นสีให้ชัด ตรวจ contrast ตาม WCAG และจัดเนื้อหากึ่งกลาง",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "หน้าตาและการใช้งานของ tracker ทุกเมนู รวมถึงวิธีให้ Agent อัปเดตข้อมูล",
"checklist": [
{
"text": "เปิด tracker ที่ `http://100.73.238.43:8099/` ทั้งบนคอมพิวเตอร์และมือถือ",
"done": false
},
{
"text": "ลองทุกเมนูด้านข้าง และกดเข้าไปหน้า Milestone, Epic และ Task",
"done": false
},
{
"text": "สลับธีม **ตามระบบ / สว่าง / มืด** และดูว่าสีอ่านง่าย",
"done": false
},
{
"text": "อ่านรูปแบบไฟล์ข้อมูลใน `tracker/README.md` ว่าเข้าใจได้",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "สามารถใช้งานได้จริง",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "สามารถใช้งานได้จริง",
"by": "ทิว",
"at": "2026-10-30T16:06:20+07:00"
}
]
},
"finished": "2026-10-30"
},
{
"id": "T-402",
"title": "เปิดให้เข้า tracker ผ่าน Tailscale",
"status": "done",
"owner": "Claude",
"started": "2026-10-30",
"finished": "2026-10-30",
"summary": "tailscale serve --tcp บน Windows ส่งต่อพอร์ต 8099 เข้า WSL เข้าได้ที่ http://100.73.238.43:8099/ และอัปเดตสดผ่านได้",
"refs": [
"tracker/scripts/tailscale.sh",
"tracker/README.md"
]
},
{
"id": "T-403",
"title": "ปรับ tracker รอบ 2: หน้าย่อย, checkpoint จาก Agent, Test แบบจัดกลุ่ม, Review tabs",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30",
"summary": "ตามคำขอของ project owner: แยกหน้า Milestone / Epic / Task, ให้ Agent เขียนสรุป checkpoint เอง, จัดกลุ่มผลทดสอบให้ BA และ Technical อ่านเข้าใจ, แยก tab การรีวิวพร้อม checklist แบบ markdown และ animation ของงานที่กำลังทำ",
"refs": [
"tracker/"
],
"steps": [
{
"text": "แยกหน้า Milestone, Epic และ Task เป็นหน้าย่อยพร้อม breadcrumb",
"done": true
},
{
"text": "Checkpoint เป็นบันทึกสรุปจาก Agent แทน git log และเขียนย้อนหลัง 12 รายการ",
"done": true
},
{
"text": "หน้าผลตรวจ Test จัดกลุ่มตามหัวข้อ แยกมุมมอง BA / Technical",
"done": true
},
{
"text": "Wait for review แยก tab Todo / Rejected / Hold / Done พร้อม checklist และ markdown",
"done": true
},
{
"text": "Animation ของงานที่กำลังทำบนหน้าภาพรวม",
"done": true
},
{
"text": "Animation ของ Wait for review (ลายเลื่อน) และหยุดเมื่อระบบตั้งลดการเคลื่อนไหว",
"done": true
},
{
"text": "เขียน checklist ของงานที่รอรีวิวอยู่ และบันทึกผลทดสอบแบบจัดกลุ่มจากการรันจริง",
"done": true
},
{
"text": "ตรวจหน้าจอในเบราว์เซอร์ (สว่าง/มืด, มือถือ) และอัปเดตคู่มือ",
"done": true
},
{
"text": "commit, push และเขียน checkpoint ของรอบนี้",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "หน้าย่อย Milestone / Epic / Task, ประวัติ Checkpoint แบบสรุปจาก Agent, หน้า **ผลตรวจ Test** แบบจัดกลุ่ม, **Wait for review** แบบแยก tab และ animation",
"checklist": [
{
"text": "เปิด **Milestone & Tasks** แล้วกดเข้า Milestone 0 → epic ใดก็ได้ → task ใดก็ได้ ตรวจว่า breadcrumb พากลับได้ทุกระดับ",
"done": false
},
{
"text": "เปิด **ประวัติ Checkpoint** ตรวจว่าสรุปจาก Agent อ่านเข้าใจว่าแต่ละรอบทำอะไร",
"done": false
},
{
"text": "เปิด **ผลตรวจ Test** สลับ tab *ทั้งหมด / สำหรับ BA / สำหรับ Technical* ดูว่า BA อ่านหัวข้อแล้วเข้าใจ",
"done": false
},
{
"text": "เปิด **Wait for review** สลับ tab Todo / Rejected / Hold / Done และอ่าน checklist ของแต่ละงาน",
"done": false
},
{
"text": "ดูหน้าภาพรวมว่า segment ที่ *In Progress* และ *Wait for review* ขยับอยู่",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "แสดงผลถูกต้องตามที่ต้องการ",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "แสดงผลถูกต้องตามที่ต้องการ",
"by": "ทิว",
"at": "2026-10-30T16:06:08+07:00"
}
]
},
"finished": "2026-10-30"
},
{
"id": "T-404",
"title": "Review form: กรอกผล, Approve / Reject / Hold และ Save",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30",
"summary": "ฟอร์มรีวิวในหน้า Wait for review และหน้า Task บันทึกผลลง milestones.json ให้ Agent อ่านได้ พร้อม Review history, กัน CSRF และไม่ทับข้อความที่กำลังพิมพ์",
"refs": [
"tracker/review_submit.go",
"tracker/ojson.go",
"tracker/templates/partials.html",
"tracker/README.md"
],
"steps": [
{
"text": "Ordered JSON: แก้เฉพาะ field ที่เปลี่ยน คงลำดับ key (round-trip ไฟล์จริงตรงทุก byte)",
"done": true
},
{
"text": "บันทึกผลแบบ atomic พร้อม Review history",
"done": true
},
{
"text": "POST /reviews/{task} กัน CSRF, จำกัดขนาด, validate แล้วแสดงฟอร์มซ้ำพร้อมข้อความเดิมเมื่อกรอกไม่ครบ",
"done": true
},
{
"text": "ฟอร์ม: Checklist checkbox, Approve / Reject / Hold, Decision (Markdown), ชื่อผู้รีวิว",
"done": true
},
{
"text": "Live update ไม่ทับฟอร์มที่กำลังกรอก และ browser จำชื่อผู้รีวิว",
"done": true
},
{
"text": "go test 22 ผล และ E2E review form 7 checks บนข้อมูลสำเนา",
"done": true
},
{
"text": "อัปเดต README และกติกาใน AGENTS.md ให้ Agent อ่านผลรีวิวก่อนเริ่มงาน",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "ลองใช้ **Review form** จริง และดูว่าผลที่บันทึกตรงกับที่ต้องการ",
"checklist": [
{
"text": "เปิด **Wait for review** แล้วเลือกงานใดงานหนึ่ง",
"done": false
},
{
"text": "ติ๊ก Checklist, เลือก **Approve / Reject / Hold**, เขียนรายละเอียด แล้วกด **บันทึกผลการรีวิว**",
"done": false
},
{
"text": "ดูว่าไปอยู่ tab ที่ถูกต้อง และเปิด **ประวัติการรีวิว** ได้",
"done": false
},
{
"text": "บอก Agent ให้อ่านผลรีวิว แล้วดูว่า Agent เข้าใจผลที่บันทึกไว้",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** สำหรับงานนี้ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "แสดงผลถูกต้องตามที่ต้องการ",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "แสดงผลถูกต้องตามที่ต้องการ",
"by": "ทิว",
"at": "2026-10-30T16:05:29+07:00"
}
]
},
"finished": "2026-10-30"
},
{
"id": "T-405",
"title": "เปิดไฟล์แนบเป็นหน้า HTML, สถานะ Reviewed และ Done สีเขียว",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30",
"summary": "Refs กดเปิดในแท็บใหม่เป็นหน้า HTML อ่านง่าย (Role Matrix, Security Matrix ฯลฯ) และแยกสถานะ Done (Agent เสร็จ + ทดสอบผ่าน) กับ Reviewed (ผู้รีวิว Approve)",
"refs": [
"tracker/files.go",
"tracker/md.go",
"tracker/templates/file.html",
"docs/agent/13-role-matrix.md",
"docs/agent/14-security-matrix.md"
],
"steps": [
{
"text": "File viewer /files/<path>: markdown เป็น HTML พร้อม TOC, ตาราง, row filter, mermaid; text, image, folder; จำกัดเฉพาะใน repo",
"done": true
},
{
"text": "Refs และ path ใน code span เปิดในแท็บใหม่",
"done": true
},
{
"text": "สถานะ Reviewed: Approve แล้วเป็น Reviewed, % นับ Done + Reviewed, ย้ายงานที่ Approve แล้ว 4 งาน",
"done": true
},
{
"text": "Done สีเขียว, Reviewed สีน้ำเงิน ทั้ง Light และ Dark",
"done": true
},
{
"text": "go test 25 ผล และ E2E ทุกชุดผ่าน, อัปเดต README และ AGENTS.md",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "เปิด **Role Matrix** และ **Security Matrix** จากไฟล์แนบ แล้วดูว่าอ่านง่ายพอ และสถานะ **Reviewed** สื่อความหมายถูก",
"checklist": [
{
"text": "ในหน้า **Wait for review** กดไฟล์แนบ `docs/agent/13-role-matrix.md` ของ T-201 ดูว่าเปิดในแท็บใหม่",
"done": false
},
{
"text": "ลองใช้ **สารบัญ** และ **ค้นหาในตาราง** เช่น พิมพ์ `DEAN` หรือ `L4`",
"done": false
},
{
"text": "เปิด `docs/agent/14-security-matrix.md` ในโหมดมืดด้วย",
"done": false
},
{
"text": "ดูหน้าภาพรวมว่า **Done** (เขียว) กับ **Reviewed** (น้ำเงิน) แยกกันชัด",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"by": "ทิว",
"at": "2026-10-30T16:39:20+07:00"
}
]
},
"finished": "2026-10-30"
},
{
"id": "T-406",
"title": "เมนู Timeline (Gantt chart)",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30",
"summary": "หน้า Timeline แบบ Jira: Milestone › Epic › Task ฝั่งซ้าย แถบเวลาฝั่งขวา ปรับดูรายชั่วโมง / วัน / สัปดาห์",
"refs": [
"tracker/timeline.go",
"tracker/templates/timeline.html",
"tracker/static/timeline.js",
"tracker/README.md"
],
"steps": [
{
"text": "คำนวณช่วงเวลาและตำแหน่งแถบฝั่ง server (ทำจริง, แผน, Epic / Milestone, target)",
"done": true
},
{
"text": "Scale ชั่วโมง / วัน / สัปดาห์ พร้อมหัวตาราง 2 ระดับ วันหยุดแรเงา และเส้นตอนนี้",
"done": true
},
{
"text": "ย่อ/ขยายและจำค่า, ปุ่มไปที่ตอนนี้, scroll ไม่หายเมื่อ Live update",
"done": true
},
{
"text": "รองรับ start / due และวันเวลาแบบ RFC 3339",
"done": true
},
{
"text": "go test 26 ผลและ E2E ผ่าน อัปเดต README และกติกาใน AGENTS.md",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "ลองใช้หน้า **Timeline** ทั้ง 3 ระดับเวลา และดูว่าอ่านภาพรวมงานได้ตามที่ต้องการ",
"checklist": [
{
"text": "เปิดเมนู **Timeline** แล้วสลับ **ชั่วโมง / วัน / สัปดาห์**",
"done": false
},
{
"text": "ลอง **ย่อ / ขยาย** Milestone และ Epic แล้วกด **ไปที่ตอนนี้**",
"done": false
},
{
"text": "ชี้เมาส์ที่แถบเพื่อดูช่วงเวลาและระยะเวลา",
"done": false
},
{
"text": "ข้อจำกัด: งานเก่ามีแค่วันที่ มุมมองชั่วโมงจึงเห็นเต็มวัน ตั้งแต่นี้ Agent จะบันทึกเวลาด้วย",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"by": "ทิว",
"at": "2026-10-30T16:39:47+07:00"
}
]
},
"finished": "2026-10-30"
},
{
"id": "T-407",
"title": "Timeline เต็มความกว้างจอ และปรับความกว้างช่องรายละเอียดได้",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30T16:10:00+07:00",
"finished": "2026-10-30T16:48:00+07:00",
"summary": "หน้า Timeline ใช้พื้นที่ถึงขอบ browser, chart ยืดเต็มพื้นที่, ลากเส้นแบ่งระหว่างรายละเอียดกับ chart ได้ และแก้สีพื้นหลังช่องรายละเอียดที่ซ้อนกับแถบใน theme มืด",
"refs": [
"tracker/timeline.go",
"tracker/templates/timeline.html",
"tracker/static/timeline.js",
"tracker/static/style.css",
"tracker/e2e/timeline-check.mjs"
],
"steps": [
{
"text": "หน้า Timeline ไม่จำกัดความกว้าง (หน้าอื่นคงเดิม)",
"done": true
},
{
"text": "ตำแหน่งแถบเป็น % ของ chart เพื่อให้ chart ยืดเต็มจอ ถ้ายาวเกินจอยังเลื่อนแนวนอนได้",
"done": true
},
{
"text": "ลากเส้นแบ่งได้ทั้งที่หัวตารางและขอบทุกแถว, ใช้ลูกศรซ้าย/ขวาได้, Home กลับค่าเดิม และจำค่าไว้",
"done": true
},
{
"text": "แก้สีพื้นหลังช่องรายละเอียดตอนชี้เมาส์ใน theme มืด ไม่ให้เห็นแถบ chart ทะลุ",
"done": true
},
{
"text": "แก้ปุ่มย่อ/ขยายที่กดแล้วแถวไม่หาย",
"done": true
},
{
"text": "go test 26 ผลและ E2E timeline-check 9 ข้อผ่าน",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "ลองใช้หน้า **Timeline** บนจอกว้าง แล้วลากเส้นแบ่งระหว่างรายละเอียดกับ chart",
"checklist": [
{
"text": "เปิดเมนู **Timeline** แล้วดูว่า chart ใช้พื้นที่ถึงขอบ browser",
"done": false
},
{
"text": "กด **ย่อ / ขยาย** ที่ Milestone และ Epic (และปุ่ม **ย่อทั้งหมด / ขยายทั้งหมด**) ดูว่าแถวข้างในหาย/กลับมา",
"done": false
},
{
"text": "ลากเส้นแบ่งระหว่างรายละเอียดกับ chart (ที่หัวตารางหรือขอบแถวใดก็ได้) ไปซ้าย/ขวา แล้ว reload ดูว่าจำค่าไว้",
"done": false
},
{
"text": "เปลี่ยนเป็น theme **มืด** เลื่อน chart ไปขวาสุด แล้วชี้เมาส์ที่แถว ดูว่าช่องรายละเอียดไม่มีสีซ้อน",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"decided_at": "2026-10-30",
"decided_by": "ทิว",
"history": [
{
"state": "done",
"decision": "แสดงผลได้ถูกต้องตามต้องการ",
"by": "ทิว",
"at": "2026-10-30T16:39:38+07:00"
}
]
}
},
{
"id": "T-408",
"title": "Tracker โหลดช้าเมื่อเปิดหลาย tab",
"status": "reviewed",
"owner": "Claude",
"started": "2026-10-30T16:52:00+07:00",
"finished": "2026-10-30T17:05:00+07:00",
"summary": "Server ตอบเร็ว (1–25 ms) แต่ทุก tab ถือการเชื่อมต่อ live update ไว้ 1 ช่อง browser ให้ไม่เกิน ~6 ช่องต่อเว็บ เปิดหลาย tab แล้วหน้าใหม่ต้องรอ จึงปิดการเชื่อมต่อใน tab ที่ไม่ได้ดู และให้ browser cache CSS/JS",
"refs": [
"tracker/static/live.js",
"tracker/main.go",
"tracker/templates/layout.html"
],
"steps": [
{
"text": "วัดเวลาตอบของ server ทุกหน้า และนับการเชื่อมต่อที่ค้างอยู่",
"done": true
},
{
"text": "live.js: tab ที่ซ่อนอยู่ปิด live update, กลับมาดูแล้วต่อใหม่และดึงข้อมูลล่าสุด",
"done": true
},
{
"text": "CSS/JS มี ?v=<hash> และ cache ได้ถาวร ได้ไฟล์ใหม่เองหลัง rebuild",
"done": true
},
{
"text": "go test 27 ผล, E2E live-check และ timeline-check ผ่าน",
"done": true
}
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30",
"state": "done",
"focus": "ลองใช้ tracker แบบเปิดหลาย tab ดูว่าไม่ช้าแล้ว",
"checklist": [
{
"text": "เปิด tracker ไว้หลาย tab (เช่น 6–8 tab) แล้วสลับไปมาและกดเมนูต่าง ๆ ดูว่าเปิดหน้าได้ทันที",
"done": false
},
{
"text": "สลับกลับมาที่ tab เดิม ดูว่าป้าย **อัปเดตแบบเรียลไทม์** กลับมาเป็นสีเขียว และข้อมูลเป็นล่าสุด",
"done": false
},
{
"text": "เลือก **Approve** หรือ **Reject** พร้อมสิ่งที่อยากปรับ แล้วกด **บันทึกผลการรีวิว**",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:55+07:00"
}
]
}
},
{
"id": "T-409",
"title": "เมนู Use cases และ Diagram editor แบบบันทึกส่วนกลาง",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T19:42:56+07:00",
"summary": "หน้า Use cases แบบตารางจากต้นฉบับ 162 รายการ พร้อม workflow editor ที่บันทึกส่วนกลาง จัดกึ่งกลางและ Fit ทั้งหมดเริ่มต้น ป้องกันการบันทึกทับและ live update ล้างงาน พร้อม Snap to grid 20 หน่วยและเส้นเชื่อมหักมุม 90°; เพิ่ม Ctrl + scroll ซูมตามเมาส์, description ครบทุกตัวอักษร, แท็บ Frontend/Backoffice/Integration และตารางไม่จำกัดความสูง",
"steps": [
{
"text": "อ่านข้อมูลต้นฉบับและทำ API บันทึก diagram พร้อมตรวจเวอร์ชัน",
"done": true
},
{
"text": "เพิ่มหน้าค้นหา รายละเอียด และ editor ของ shape/เส้นเชื่อม",
"done": true
},
{
"text": "ทดสอบและจัดทำคู่มือพร้อมส่งตรวจ",
"done": true
},
{
"text": "Snap to grid 20 หน่วยและเส้น orthogonal พร้อม browser test 24 ข้อ",
"done": true
},
{
"text": "เพิ่ม Ctrl + scroll ซูมตามตำแหน่งเมาส์และทดสอบ browser",
"done": true
},
{
"text": "แสดง description ครบพร้อมตัดบรรทัด/ขยาย shape, แท็บกลุ่มงาน, ตารางไม่จำกัดความสูง",
"done": true
}
],
"finished": "2026-10-30T20:13:54+07:00",
"refs": [
"tracker/README.md",
"tracker/usecases.go",
"tracker/diagram.go",
"tracker/templates/usecases.html",
"tracker/static/usecases.js",
"tracker/e2e/usecases-check.mjs"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:13:54+07:00",
"state": "done",
"focus": "ตรวจหน้า **Use cases** แบบ Table view และการแก้ diagram ร่วมกันที่ `/use-cases` บนพอร์ต **8099**",
"checklist": [
{
"text": "เปิดเมนู **Use cases** ตรวจตารางและลองค้นหา / กรอง Module / ผู้เกี่ยวข้อง",
"done": false
},
{
"text": "ลองแท็บ Frontend / Backoffice / Integration ร่วมกับตัวกรอง ดูป้ายกลุ่มและเหตุผลจาก tooltip; ตารางยาวตามหน้าโดยไม่มี scroll แนวตั้งแยก",
"done": false
},
{
"text": "เปิด W-49 ดูขั้นตอนต้นฉบับ และตรวจว่า diagram เริ่มต้นอยู่กึ่งกลาง เห็นทุก shape",
"done": false
},
{
"text": "ลองซูม 100% ลากพื้นที่ว่างเพื่อเลื่อนมุมมอง แล้วกด **พอดีทั้งหมด**",
"done": false
},
{
"text": "Hover บน diagram แล้ว Ctrl + scroll ขึ้น/ลง: ซูมตรงตำแหน่งเมาส์ และ description แสดงครบหลายบรรทัดใน shape",
"done": false
},
{
"text": "เพิ่ม Start / End / Process / Decision และแก้ Title / Description / Type",
"done": false
},
{
"text": "ลาก shape ตรวจว่าขยับตามกริด 20 หน่วย และเส้นเชื่อมเป็นแนวนอน/แนวตั้งหักมุม 90° ปรับตาม shape",
"done": false
},
{
"text": "ลากจุดวงกลมเชื่อม shape เลือกเส้นเพื่อแก้ข้อความและหัวลูกศรทั้งสองด้าน",
"done": false
},
{
"text": "ลองลบ shape และย้อนกลับ จากนั้นบันทึกและเปิดจากอีกแท็บเพื่อตรวจข้อมูลส่วนกลาง",
"done": false
},
{
"text": "ลองแก้พร้อมกันสองแท็บแล้วบันทึก ตรวจว่าแท็บเวอร์ชันเก่าไม่ทับงานที่อีกแท็บบันทึก",
"done": false
},
{
"text": "เลือก Approve / Reject / Hold พร้อมผลรีวิว",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:48+07:00"
}
]
}
},
{
"id": "T-410",
"title": "ย้าย Current Task ขึ้นก่อน Milestone ในหน้าภาพรวม",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:13:54+07:00",
"steps": [
{
"text": "ย้ายส่วน Current Task ไปก่อน Milestone ทั้งหมด และตรวจหน้าจริง",
"done": true
}
],
"refs": [
"tracker/templates/overview.html"
],
"finished": "2026-10-30T20:14:46+07:00",
"summary": "หน้าภาพรวมแสดง Current Task ก่อน Milestone ทั้งหมด ตรวจลำดับบน browser ที่พอร์ต 8099 แล้ว",
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:14:46+07:00",
"state": "done",
"focus": "ตรวจลำดับเนื้อหาในหน้าภาพรวม",
"checklist": [
{
"text": "เปิดหน้าภาพรวม ดูว่า Current Task อยู่เหนือ Milestone ทั้งหมด ทั้งตอนมีและไม่มีงานกำลังทำ",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:39+07:00"
}
]
}
},
{
"id": "T-411",
"title": "จัด workflow diagram จากซ้ายไปขวา",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:32:05+07:00",
"steps": [
{
"text": "เปลี่ยนร่างเริ่มต้นเป็นแนวนอนตามขนาด shape",
"done": true
},
{
"text": "เพิ่มปุ่มจัดแนวนอนสำหรับ diagram ที่บันทึกแล้วและทดสอบ undo/ข้อมูลเดิม",
"done": true
}
],
"refs": [
"tracker/static/usecases.js",
"tracker/diagram.go",
"tracker/e2e/usecases-check.mjs"
],
"finished": "2026-10-30T20:44:48+07:00",
"summary": "ร่างใหม่ไหลซ้ายไปขวา ปุ่ม Arrange horizontally จัด diagram เดิมโดยไม่ล้างเนื้อหาและ Undo คืนตำแหน่งได้",
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:44:48+07:00",
"state": "done",
"focus": "ร่างใหม่ไหลซ้ายไปขวา ปุ่ม Arrange horizontally จัด diagram เดิมโดยไม่ล้างเนื้อหาและ Undo คืนตำแหน่งได้",
"checklist": [
{
"text": "เปิด Use case ที่ยังไม่บันทึก ดูว่าไหลจากซ้ายไปขวาและแสดงครบใน Fit to view",
"done": false
},
{
"text": "ลอง Arrange horizontally กับ diagram เดิมและ Undo แล้ว Save เพื่อตรวจตำแหน่ง",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:28+07:00"
}
]
}
},
{
"id": "T-412",
"title": "Revision history และ rollback ราย Use case",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:40:50+07:00",
"steps": [
{
"text": "เก็บ snapshot ทุก save แบบ atomic และรองรับไฟล์เก่า",
"done": true
},
{
"text": "หน้า history และ restore เป็น revision ใหม่พร้อมตรวจ version",
"done": true
}
],
"finished": "2026-10-30T20:44:48+07:00",
"summary": "ทุก Save เก็บ snapshot; Restore สร้าง revision ใหม่ เก็บประวัติเดิมและป้องกันการทับเวอร์ชันใหม่กว่า",
"refs": [
"tracker/diagram_history.go",
"tracker/diagram_history_test.go",
"tracker/static/usecases.js"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:44:48+07:00",
"state": "done",
"focus": "ทุก Save เก็บ snapshot; Restore สร้าง revision ใหม่ เก็บประวัติเดิมและป้องกันการทับเวอร์ชันใหม่กว่า",
"checklist": [
{
"text": "แก้ diagram และ Save หลายครั้ง เปิด Revision history ตรวจเวลาและ revision",
"done": false
},
{
"text": "เลือก View JSON หรือ Restore revision เก่า ตรวจว่าได้ revision ใหม่และประวัติเดิมไม่หาย",
"done": false
},
{
"text": "ลองสองแท็บแล้ว Restore จากแท็บเก่า ตรวจว่าไม่ทับ revision ใหม่",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:21+07:00"
}
]
}
},
{
"id": "T-413",
"title": "Approve Use case สำหรับนำไปพัฒนาระบบ",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:40:50+07:00",
"steps": [
{
"text": "บันทึก reviewer/time/note ผูก source hash และ diagram revision",
"done": true
},
{
"text": "แสดง approval ในตารางและหน้ารายละเอียด พร้อมกติกาสำหรับ Agent",
"done": true
}
],
"finished": "2026-10-30T20:44:48+07:00",
"summary": "Approve use case เก็บชื่อ เวลา หมายเหตุและ fingerprint; เปลี่ยน source/save/restore ต้องยืนยันใหม่ พร้อมกติกาใน AGENTS.md",
"refs": [
"tracker/usecase_approval.go",
"tracker/usecase_approval_test.go",
"AGENTS.md"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:44:48+07:00",
"state": "done",
"focus": "Approve use case เก็บชื่อ เวลา หมายเหตุและ fingerprint; เปลี่ยน source/save/restore ต้องยืนยันใหม่ พร้อมกติกาใน AGENTS.md",
"checklist": [
{
"text": "ตรวจขั้นตอนและ diagram แล้วกรอก Reviewer และ Review note ติ๊กยืนยัน กด Approve use case",
"done": false
},
{
"text": "ตรวจ Approved ในหน้ารายละเอียดและตาราง พร้อมชื่อ เวลา และ Approval history",
"done": false
},
{
"text": "แก้ diagram แล้ว Save หรือ Restore ตรวจว่าเป็น Needs reapproval และยังมีประวัติผู้อนุมัติเดิม",
"done": false
},
{
"text": "ตรวจว่ากติกา Agent อ้างอิง approved ของข้อมูลล่าสุด ไม่อ้างอิงแค่ประวัติเก่า",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:02:15+07:00"
}
]
}
},
{
"id": "T-414",
"title": "Toolbar ภาษาอังกฤษและตารางหุบตาม Module",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:40:50+07:00",
"steps": [
{
"text": "จัดกลุ่ม Shapes/Edit/View และ More พร้อมชื่อปุ่มอังกฤษ",
"done": true
},
{
"text": "จัดตารางตาม Module ชื่อเต็ม พร้อม collapse/expand และจำสถานะ",
"done": true
}
],
"finished": "2026-10-30T20:44:48+07:00",
"summary": "Toolbar อังกฤษแยก Shapes/Edit/View และ More; ตารางแยก Module ชื่อเต็ม หุบ/ขยายและจำสถานะได้",
"refs": [
"tracker/templates/usecases.html",
"tracker/static/usecase-groups.js",
"tracker/static/usecases.css"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T20:44:48+07:00",
"state": "done",
"focus": "Toolbar อังกฤษแยก Shapes/Edit/View และ More; ตารางแยก Module ชื่อเต็ม หุบ/ขยายและจำสถานะได้",
"checklist": [
{
"text": "ตรวจชื่อปุ่ม Add shape / Connect / Undo / Redo / Arrange horizontally / Fit to view / Save diagram และเมนู More",
"done": false
},
{
"text": "ในตารางกดหัว Module เพื่อหุบ/ขยาย ดูชื่อเต็มทั้งหัวกลุ่มและคอลัมน์ Module",
"done": false
},
{
"text": "ลอง Expand all / Collapse all แล้ว reload ดูว่าจำสถานะ และใช้กับแท็บ/filters ได้",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-30",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-30T21:01:59+07:00"
}
]
}
},
{
"id": "T-415",
"title": "เก็บรายละเอียด UI Development approval และ Revision history",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T20:59:00+07:00",
"steps": [
{
"text": "แยก review panels จัดสถานะ ผู้ตรวจ เวลา และฟอร์มให้ชัดเจน",
"done": true
},
{
"text": "ปรับตาราง revision, current version, loading/empty/error และ timeline อนุมัติ",
"done": true
},
{
"text": "ตรวจ browser โหมดสว่าง/มืด มือถือ และ workflow อนุมัติ/rollback",
"done": true
}
],
"refs": [
"tracker/templates/usecases.html",
"tracker/static/usecases.js",
"tracker/static/usecase-review.css"
],
"finished": "2026-10-30T21:08:18+07:00",
"summary": "Approval และ Revision history เป็นการ์ดแยก จัดสถานะ ผู้ตรวจ เวลา หมายเหตุ และ current revision ชัดเจน พร้อม empty/error/loading และรองรับมือถือ/ธีมมืด",
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T21:08:18+07:00",
"state": "done",
"focus": "Approval และ Revision history เป็นการ์ดแยก จัดสถานะ ผู้ตรวจ เวลา หมายเหตุ และ current revision ชัดเจน พร้อม empty/error/loading และรองรับมือถือ/ธีมมืด",
"checklist": [
{
"text": "เปิดหน้า Use case ดู Development approval และ Revision history ที่จัดเป็นการ์ดแยก",
"done": false
},
{
"text": "ลองโหมดสว่าง/มืดและมือถือ ดูว่าอ่านชัด ฟอร์มไม่ล้น และตารางประวัติยังใช้งานได้",
"done": false
},
{
"text": "ตรวจข้อมูลผู้ตรวจ เวลา หมายเหตุ และสถานะ Current หลังบันทึก/Approve/Restore",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-31",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-31T02:10:02+07:00"
}
]
}
},
{
"id": "T-416",
"title": "Export diagram เป็น PNG พื้นหลังขาวหรือโปร่งใส",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T21:04:38+07:00",
"steps": [
{
"text": "เพิ่ม dialog เลือก White / Transparent และส่งออกภาพครบทุก shape",
"done": true
},
{
"text": "ตรวจ PNG จริง ทั้งขนาดภาพและ alpha channel พร้อม browser regression",
"done": true
}
],
"refs": [
"tracker/static/usecase-export.js",
"tracker/static/usecase-review.css",
"tracker/e2e/usecases-check.mjs"
],
"finished": "2026-10-30T21:08:18+07:00",
"summary": "More → Export PNG เลือก White หรือ Transparent ส่งออกเต็ม diagram แม้ซูมหรือเลื่อน พร้อมตรวจขนาดจริงและ alpha channel",
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T21:08:18+07:00",
"state": "done",
"focus": "More → Export PNG เลือก White หรือ Transparent ส่งออกเต็ม diagram แม้ซูมหรือเลื่อน พร้อมตรวจขนาดจริงและ alpha channel",
"checklist": [
{
"text": "เปิด More → Export PNG เลือก White แล้วกด Download PNG ตรวจว่าภาพครบทุก shape",
"done": false
},
{
"text": "เปลี่ยนเป็น Transparent ดาวน์โหลดแล้วเปิดในโปรแกรมที่แสดงพื้นหลังโปร่งใส",
"done": false
},
{
"text": "ลองซูม/เลื่อน diagram ก่อนส่งออก ตรวจว่ายังได้ครบทั้งหมด ไม่มีกริดและจุดลาก",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-31",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-31T02:10:08+07:00"
}
]
}
},
{
"id": "T-417",
"title": "เติม Task brief และคำถามสำหรับ task ที่มีแต่หัวข้อ",
"status": "reviewed",
"owner": "Codex",
"started": "2026-10-30T21:08:18+07:00",
"summary": "เติมรายละเอียด 19 รายการ: 13 งานรอดำเนินการมีเป้าหมาย ขั้นตอน outputs dependencies และ 39 คำถาม พร้อมผู้ที่ควรตอบ; เพิ่มบริบทงานเก่า 5 งานและแก้ summary T-302 ให้ตรง SQL Server",
"steps": [
{
"text": "Audit task และข้อมูลอ้างอิง แยกงานรอดำเนินการจากบันทึกงานที่เสร็จแล้ว",
"done": true
},
{
"text": "เติมรายละเอียด deliverables dependencies และคำถามมีเหตุผล/ผู้ตอบ โดยเฉพาะ T-303",
"done": true
},
{
"text": "แสดงรายละเอียดในหน้า Task และตรวจข้อมูล/หน้าจอจริง",
"done": true
}
],
"refs": [
"tracker/data/milestones.json",
"tracker/data.go",
"tracker/templates/task.html",
"tracker/task_brief_test.go",
"tracker/e2e/task-brief-check.mjs",
"docs/agent/15-preparation-task-briefs.md"
],
"finished": "2026-10-30T21:19:31+07:00",
"description": "ตรวจ task ที่มีแต่หัวข้อเทียบกับฐานความรู้และผลรีวิว แล้วเติม brief ที่ใช้เริ่มทำงานได้ แยกข้อเสนอ/คำถามที่ยังไม่ตอบออกจากข้อสรุปจริง พร้อมปรับหน้า Task ให้แสดงผลลัพธ์ dependencies ผู้รับผิดชอบที่เสนอ และคำถามมีรหัสอ้างอิง",
"deliverables": [
"Task briefs ของงานรอดำเนินการ 13 งานพร้อมคำถาม 39 ข้อ",
"คำอธิบายประวัติงานเสร็จแล้ว 5 งาน และ summary ฐานข้อมูลที่ตรงผลตัดสินใจ",
"หน้า Task และแนวทางบันทึกคำตอบ/ผู้ยืนยัน/เวลา/แหล่งข้อมูล"
],
"review": {
"reviewer": "Project owner",
"requested_at": "2026-10-30T21:19:31+07:00",
"state": "done",
"focus": "ตรวจว่า task ที่เคยมีแต่หัวข้ออ่านแล้วรู้ว่าจะทำอะไร ส่งมอบอะไร และขอข้อมูลจากใคร โดยไม่มีข้อสรุปที่เดาเอง",
"checklist": [
{
"text": "เปิด T-303 ตรวจรายละเอียด ขั้นตอน 6 ข้อ ผลลัพธ์ 4 รายการ และคำถาม 5 ข้อ",
"done": false
},
{
"text": "เลือกดู T-203, T-304 และ T-501–T-702 ว่าขอบเขต/ผลลัพธ์/คำถาม/ผู้ตอบเหมาะสม",
"done": false
},
{
"text": "ดูงานเก่า T-102/T-103/T-105/T-106/T-301 และ T-302 ว่าบริบทตรงหลักฐานและสถานะเดิมยังอยู่",
"done": false
},
{
"text": "ให้ข้อมูลโดยอ้างอิงรหัสคำถาม พร้อมผู้ยืนยันและแหล่งข้อมูล หรือระบุจุดที่ควรแก้",
"done": false
}
],
"decision": "",
"decided_at": "2026-10-31",
"decided_by": "",
"history": [
{
"state": "done",
"decision": "",
"by": "",
"at": "2026-10-31T02:10:13+07:00"
}
]
}
},
{
"id": "T-418",
"title": "Mockup workspace: Sitemap, Page flow และ Screen Listing",
"status": "in_progress",
"owner": "Codex",
"started": "2026-10-31T11:02:39+07:00",
"summary": "กำลังแก้ Rejected: ตรวจ Dark mode ใน Mockup โดยวัดคู่สีจริงของแท็บ ปุ่ม/สถานะที่เลือก ข้อความและ diagram พร้อมทดสอบ light/dark ก่อนส่งกลับ review",
"steps": [
{
"text": "ออกแบบโครงสร้าง artifacts และนำเข้ารหัสหน้าจอ/ภาพเดิมพร้อม provenance",
"done": true
},
{
"text": "สร้าง catalog/detail และ editor Sitemap บนลงล่าง / Page flow ซ้ายไปขวา",
"done": true
},
{
"text": "บันทึก layouts/links/mappings แบบ revision และป้องกันข้อมูลชนกัน",
"done": true
},
{
"text": "ทดสอบข้อมูล API และ browser บนข้อมูลชั่วคราว อัปเดตเอกสารและรัน 8099",
"done": true
},
{
"text": "ตรวจซ้ำ Dark mode และหาต้นเหตุสีพื้น/ตัวอักษรจาก browser จริง",
"done": false
},
{
"text": "แก้ semantic color tokens สำหรับ active controls พร้อม regression contrast tests",
"done": false
},
{
"text": "ทดสอบ Light/Dark/OS theme และฟังก์ชัน Mockup แล้วอัปเดต 8099 ส่งกลับ review",
"done": false
},
{
"text": "แสดงชื่อ Module เต็มใน Mockup/Use cases ทั้งตาราง ตัวกรอง detail และ preview",
"done": false
},
{
"text": "เพิ่ม Page flow collapse by module พร้อมจำสถานะและค้นหาในกลุ่ม",
"done": false
}
],
"refs": [
"mockups/README.md",
"docs/agent/17-mockup-workspace.md",
"docs/superpowers/plans/2026-10-31-mockup-workspace.md",
"mockups/catalog.json",
"tracker/mockups.go",
"tracker/static/mockups.js",
"tracker/e2e/mockups-check.mjs"
],
"description": "เครื่องมือออกแบบภายในเสร็จแล้ว ข้อมูลตั้งต้น 164 รหัสหน้าจอเป็น wireframe ร่าง 6 states และ reference proposal เดิม 6 ภาพ การตั้งชื่อ/route/navigation/step mapping ที่อนุมานยังต้องตรวจโดย BA/UX ไม่ใช่ final UI หรือ Development Approval ของ EMS",
"deliverables": [
"เมนู Mockup พร้อม Sitemap, Page flow และ Screen Listing/detail ใช้งานจริงบน 8099",
"โครง mockups/ แยก stable screen IDs, variants, component contracts/previews, tokens, sitemap และ flow mappings",
"Editor ภาพหน้าจอที่เพิ่ม occurrence/Decision/เส้น/label/หัวลูกศร แก้ mapping/state, grid/zoom/fit/filter/Undo ได้",
"Atomic shared save พร้อม revision history/restore และ conflict/source-change handling",
"คู่มือ artifacts, schema/update/version workflow และผลตรวจ Go/API/browser"
],
"dependencies": [
"T-108"
],
"review": {
"reviewer": "Project owner / BA / UX (เสนอ)",
"requested_at": "2026-10-31T11:21:44+07:00",
"state": "rejected",
"focus": "ตรวจเมนูและโครง artifacts พร้อมแยก wireframe/mapping ร่างจากแบบที่ยืนยันแล้ว",
"checklist": [
{
"text": "เปิด Mockup ทั้ง Sitemap, Page flow, Screen Listing และเข้า detail/เปลี่ยน state ของ A01",
"done": false
},
{
"text": "ตรวจ Sitemap ภาพหน้าจอเรียงบนลงล่าง กรอง module/channel แล้วซูม/Focus เพื่อตรวจเส้นที่เป็นร่าง",
"done": false
},
{
"text": "เปิด Page flow W-41 ตรวจทางข้ามผู้ปกครอง ขั้นแนบหลักฐาน ภาพสถานะของผลลัพธ์ และแก้ screen/state mapping ตามข้อเท็จจริง",
"done": false
},
{
"text": "ทดลองเพิ่มหน้าจอเดิมซ้ำ ลาก shape ตาม grid ลากเส้นและแก้ label/หัวลูกศร แล้ว Save/Restore เป็น revision ใหม่",
"done": false
},
{
"text": "อ่าน mockups/README.md และตรวจ folder/manifest/component/version workflow ก่อนทำแบบละเอียดต่อ",
"done": false
}
],
"decision": "ตรวจสอบ dark mode สีที่ใช้หน่อยมันคล้ายกับสีตัวอักษรทำให้มองตัวอักษรไม่เห็น",
"decided_at": "2026-10-31",
"decided_by": "",
"history": [
{
"state": "rejected",
"decision": "ตรวจสอบ dark mode สีที่ใช้หน่อยมันคล้ายกับสีตัวอักษรทำให้มองตัวอักษรไม่เห็น",
"by": "",
"at": "2026-10-31T19:49:25+07:00"
}
]
}
}
]
},
{
"id": "prep-data-model",
"title": "Data model ราย module",
"goal": "ศึกษาเพิ่มเติมแล้วออกแบบ data model ทีละ module เริ่มจาก platform core",
"tasks": [
{
"id": "T-501",
"title": "ศึกษาแนวทาง data model ของระบบบริหารการศึกษา",
"status": "todo",
"summary": "ศึกษารูปแบบ data model แล้วเสนอหลักการร่วมสำหรับออกแบบทีละ module บน SQL Server",
"description": "อ่าน use cases และคำศัพท์ก่อนเทียบรูปแบบการจัดเก็บคน บทบาท หน่วยงาน ปี/ภาคเรียน ประวัติที่มีผลตามเวลา และ policy versions สรุปทางเลือกตามพฤติกรรมจริงของ TNSU ไม่ใช้ระบบสำเร็จรูปเป็นข้อกำหนดแทนลูกค้า\n\nผลลัพธ์เป็นหลักการออกแบบและตัวอย่างเล็กสำหรับเริ่ม T-502 ไม่ใช่ schema ทั้งระบบทีเดียว หัวข้อที่เป็นการตัดสินใจทางเทคนิคใหม่ให้เสนอ ADR; ค่าทางนโยบายยังตั้งค่าได้",
"deliverables": [
"Design principles: identifiers, org scope, effective dates, policy versioning, audit และ Thai text",
"ตัวอย่างโมเดลขนาดเล็กและตาราง trade-offs ตาม use cases",
"รายการคำศัพท์/ข้อสงสัยที่จะใช้ต่อในโมเดลราย module"
],
"dependencies": [
"T-301",
"T-302"
],
"suggested_owner": "Backend/Data architect ร่วมกับ BA และ DBA",
"refs": [
"docs/agent/02-glossary.md",
"docs/agent/12-use-cases.md",
"docs/agent/13-role-matrix.md",
"docs/agent/14-security-matrix.md",
"docs/adr/0001-tech-stack.md"
],
"steps": [
{
"text": "อ่าน glossary, role/security matrix และ use cases ตัวอย่าง",
"done": false
},
{
"text": "ทำรายการแนวคิดร่วมและข้อกำหนด SQL Server ที่ตัดสินใจแล้ว",
"done": false
},
{
"text": "ศึกษาแนวทางจาก primary documentation ที่เกี่ยวข้องและเทียบกับพฤติกรรมจริง",
"done": false
},
{
"text": "ทดลองโมเดลตัวอย่างและตรวจเรื่อง history/scope/policy version",
"done": false
},
{
"text": "สรุปข้อเสนอ ADR ที่จำเป็น และ checklist ใช้กับแต่ละ module",
"done": false
}
],
"questions": [
{
"id": "T501-Q1",
"asked_of": "Tech lead / DBA",
"question": "มี naming convention, key strategy, migration/versioning และข้อกำหนด SQL Server ของทีมที่ใช้อยู่แล้วหรือไม่?",
"why": "ใช้มาตรฐานทีมที่ยืนยันแล้วและรู้จุดที่ต้องเสนอ ADR",
"state": "open"
},
{
"id": "T501-Q2",
"asked_of": "BA / เจ้าของกระบวนการ / ฝ่ายข้อมูลมหาวิทยาลัย",
"question": "มีพจนานุกรมข้อมูล แบบฟอร์ม หรือมาตรฐานการแลกเปลี่ยนข้อมูลที่ต้องยึดหรือไม่? ใครให้ตัวอย่างที่ใช้จริงได้?",
"why": "ตรวจความหมายและรูปแบบข้อมูลโดยไม่สร้างข้อกำหนดจากการคาดเดา",
"state": "open"
}
]
},
{
"id": "T-502",
"title": "Platform core: IAM, ORG, AUD",
"status": "todo",
"summary": "ออกแบบโมเดลคน บัญชี บทบาท หน่วยงาน การมอบหมายสิทธิ์ และ audit สำหรับ platform core",
"description": "เริ่มจาก IAM/ORG/AUD ตาม use cases และ matrix ที่ได้รับการตรวจ แยก identity/account/role assignment/org scope ให้รองรับคนมีหลายบทบาทและขอบเขตเวลา ตรวจการมอบหมายงาน การทำหน้าที่แทน SoD และการเข้าถึงข้ามหน่วยงาน\n\nทำ ERD และ data dictionary ฉบับออกแบบพร้อม mapping กลับไปยัง W-xx ก่อนเขียน migration/พฤติกรรมจริงต้องตรวจ approval ล่าสุดของ use cases ตาม AGENTS.md",
"deliverables": [
"ERD/data dictionary ของ IAM, ORG และ audit metadata พร้อม keys/relations",
"ตาราง mapping use case → entity → scope/access rule",
"รายการ invariant และกรณีทดสอบหลายบทบาท/หลายหน่วยงาน/มอบหมายสิทธิ์"
],
"dependencies": [
"T-501",
"T-201",
"T-202"
],
"suggested_owner": "Backend/Data architect ร่วมกับ BA / Security",
"refs": [
"docs/agent/use-cases/IAM.md",
"docs/agent/use-cases/ORG.md",
"docs/agent/use-cases/AUD.md",
"docs/agent/13-role-matrix.md",
"docs/agent/14-security-matrix.md"
],
"steps": [
{
"text": "รวบรวม IAM/ORG/AUD use cases และ approval/คำถามที่ค้าง",
"done": false
},
{
"text": "แยกคน บัญชี บทบาท ขอบเขตหน่วยงานและช่วงเวลาที่มีผล",
"done": false
},
{
"text": "ออกแบบ delegation/acting/SoD และความเชื่อมโยง audit",
"done": false
},
{
"text": "ตรวจตัวอย่างหลายบทบาทและข้ามวิทยาเขต/โรงเรียนกีฬา",
"done": false
},
{
"text": "ส่ง ERD/data dictionary ให้ BA/Security/DBA ตรวจ ก่อนแตก migration",
"done": false
}
],
"questions": [
{
"id": "T502-Q1",
"asked_of": "BA + ผู้ดูแล IAM มหาวิทยาลัย",
"question": "หนึ่งคนมีหลายบทบาทหรือหลายหน่วยงานพร้อมกันได้อย่างไร และใครยืนยันการมอบหมาย/ทำหน้าที่แทน?",
"why": "กำหนด role assignment และ effective dates ไม่ผูกคนกับหน่วยงานเดียว",
"state": "open"
},
{
"id": "T502-Q2",
"asked_of": "ฝ่าย IT / เจ้าของระบบบุคลากร",
"question": "ระบบใดเป็นแหล่งอ้างอิงคน/บุคลากร/บัญชี และต้องเชื่อมกับ IdP หรือ SSO ใด?",
"why": "แยก master identity จากข้อมูลสำเนาและกำหนดจุดเชื่อมต่อ",
"state": "open"
},
{
"id": "T502-Q3",
"asked_of": "BA / Security reviewer",
"question": "Role/Security Matrix ข้อใดอนุมัติใช้แล้ว และ SoD/อำนาจอนุมัติข้อใดยังต้องยืนยัน?",
"why": "ไม่ทำกติกาสิทธิ์จากร่างที่ยังมีข้อขัดแย้ง",
"state": "open"
}
]
},
{
"id": "T-503",
"title": "REC และความสัมพันธ์ผู้ปกครอง",
"status": "todo",
"summary": "ออกแบบระเบียนนักศึกษาและความสัมพันธ์ผู้ปกครองที่มีหลายประเภท ช่วงเวลา และสิทธิ์ตาม consent",
"description": "ศึกษาระเบียน REC และ W-127/W-128/W-160 รวมถึงเหตุการณ์เปลี่ยนสถานภาพและข้อจำกัดการติดต่อ แยกบุคคล ความสัมพันธ์ผู้ปกครอง/ผู้ดูแล หลักฐานยืนยัน ความยินยอม และช่วงเวลาที่มีผล\n\nรักษากฎจาก use cases และแยกข้อมูลอ่อนไหวตาม Security Matrix ไม่สรุปสิทธิ์จากคำว่า parent เพียงอย่างเดียว แบบจำลองต้องอธิบายคนหนึ่งดูแลเด็กหลายคนและการเปลี่ยนสิทธิ์ตามเหตุการณ์ได้",
"deliverables": [
"ERD/data dictionary ของ student record / guardian relation / consent / restrictions",
"ตารางเหตุการณ์เปลี่ยนสถานภาพและผลต่อสิทธิ์/ประวัติ",
"กรณีทดสอบหลายผู้ดูแล การหมดอายุ การเพิกถอน และการเปลี่ยนขอบเขตความยินยอม"
],
"dependencies": [
"T-501",
"T-502"
],
"suggested_owner": "BA งานทะเบียน ร่วมกับ Data architect / DPO",
"refs": [
"docs/agent/use-cases/REC.md",
"docs/agent/use-cases/PRIV.md",
"docs/agent/04-roles-and-access.md",
"docs/agent/14-security-matrix.md"
],
"steps": [
{
"text": "อ่าน REC และ use cases ผู้ปกครอง/consent/restriction ที่เกี่ยวข้อง",
"done": false
},
{
"text": "แยกประเภทความสัมพันธ์ แหล่งหลักฐาน และ effective dates",
"done": false
},
{
"text": "ออกแบบการตรวจสิทธิ์และประวัติการเปลี่ยนสถานภาพ",
"done": false
},
{
"text": "เดินตัวอย่างผู้ดูแลหลายคน/หลายบุตรและข้อมูลอ่อนไหว",
"done": false
},
{
"text": "ให้ฝ่ายทะเบียน/กิจการนักศึกษา/DPO ตรวจ mapping กับ use cases",
"done": false
}
],
"questions": [
{
"id": "T503-Q1",
"asked_of": "นายทะเบียน + กิจการนักศึกษา/โรงเรียนกีฬา",
"question": "หน่วยงานใดตรวจยืนยันความสัมพันธ์ผู้ปกครอง/ผู้ดูแล และใช้หลักฐานหรือแบบฟอร์มใดจริง?",
"why": "กำหนดเจ้าของข้อมูลและจุดตรวจหลักฐาน",
"state": "open"
},
{
"id": "T503-Q2",
"asked_of": "DPO + BA",
"question": "กรณีข้อจำกัดการติดต่อ/ผู้ดูแล/การยินยอมของผู้บรรลุนิติภาวะมีขั้นตอนอนุมัติและเอกสารที่ใช้ยืนยันอย่างไร?",
"why": "ทำแบบจำลอง consent/restriction ตามกระบวนการที่รับรอง",
"state": "open"
},
{
"id": "T503-Q3",
"asked_of": "ฝ่ายทะเบียน / เจ้าของข้อมูล",
"question": "มีตัวอย่างข้อมูลเริ่มต้นที่อนุญาตให้ใช้แบบปกปิดข้อมูลส่วนบุคคลหรือไม่ และใครยืนยันคุณภาพ/ความซ้ำของข้อมูล?",
"why": "ทดสอบความสัมพันธ์และเตรียม one-off import โดยไม่สมมติว่ามี legacy system",
"state": "open"
}
]
},
{
"id": "T-504",
"title": "ADM รับสมัครและคัดเลือก",
"status": "todo",
"summary": "ออกแบบข้อมูลรอบรับสมัคร คุณสมบัติ หลักฐาน การสอบ ผลคัดเลือก และการยืนยันสิทธิ์ตาม ADM",
"description": "แยกกระบวนการรับสมัครตามระดับการศึกษา/วิทยาเขต/โรงเรียนกีฬา พร้อมรอบ โครงการ เกณฑ์ที่มี version หลักฐาน และประวัติผลการพิจารณา ตรวจทางเชื่อม FIN/REC/IAM ก่อนส่งต่อเป็นนักศึกษา\n\nTCAS และช่องทางแลกเปลี่ยนกับหน่วยงานภายนอกยังต้องยืนยัน เกณฑ์คุณสมบัติ คะแนน ค่าธรรมเนียม และช่วงเวลาทำเป็น configuration โดยผู้มีอำนาจ",
"deliverables": [
"ERD/data dictionary ของ ADM พร้อมสถานะและเส้นทางยืนยันสิทธิ์",
"ตารางเชื่อมกับ FIN/REC/IAM และ integration assumptions ที่ยังเปิด",
"กรณีทดสอบหลายรอบ/หลายระดับ/แก้หลักฐาน/ยืนยันและสละสิทธิ์"
],
"dependencies": [
"T-501",
"T-502",
"T-503"
],
"suggested_owner": "BA งานรับสมัคร ร่วมกับ Backend/Data architect",
"refs": [
"docs/agent/use-cases/ADM.md",
"docs/agent/use-cases/REC.md",
"docs/agent/use-cases/FIN.md",
"docs/agent/11-open-questions-and-known-issues.md"
],
"steps": [
{
"text": "รวบรวม ADM use cases แยก university/sports school และ approval",
"done": false
},
{
"text": "ทำ lifecycle ผู้สมัคร ใบสมัคร หลักฐาน การสอบ และผลคัดเลือก",
"done": false
},
{
"text": "กำหนด policy versions และผู้แก้/อนุมัติเกณฑ์",
"done": false
},
{
"text": "ตรวจ handoff ไปชำระเงินและสร้างระเบียนนักศึกษา",
"done": false
},
{
"text": "ส่งโมเดลและกรณีตัวอย่างให้ฝ่ายรับสมัคร/ทะเบียนตรวจ",
"done": false
}
],
"questions": [
{
"id": "T504-Q1",
"asked_of": "งานรับสมัครมหาวิทยาลัยและโรงเรียนกีฬา",
"question": "รอบ/โครงการรับสมัครของสองระดับต่างกันอย่างไร และมีแบบฟอร์ม/ประกาศตัวอย่างใดที่เป็นของจริง?",
"why": "แยกข้อมูลและ workflow ตามระดับ ไม่ใช้ตัวอย่างใน mockup เป็นข้อกำหนด",
"state": "open"
},
{
"id": "T504-Q2",
"asked_of": "Project owner + งานรับสมัคร",
"question": "TNSU ใช้ TCAS กับหลักสูตร/รอบใด และต้องแลกเปลี่ยนผ่าน API หรือไฟล์/portal? ใครประสานงาน?",
"why": "กำหนด integration boundary ที่ยังไม่ยืนยัน",
"state": "open"
},
{
"id": "T504-Q3",
"asked_of": "งานรับสมัคร + นายทะเบียน",
"question": "ใครรับรองการเปลี่ยนจากผู้สมัครเป็นนักศึกษา และมีเงื่อนไข/หลักฐานส่งมอบข้อมูลใดบ้าง?",
"why": "กำหนด transaction/lifecycle handoff ให้ครบ",
"state": "open"
}
]
},
{
"id": "T-505",
"title": "REG และ ASM ลงทะเบียนและวัดผล",
"status": "todo",
"summary": "ออกแบบการเปิดสอน ลงทะเบียน ผลการเรียน และประวัติการแก้ไข โดยผูกหลักสูตร/ปี/ภาคเรียนและ policy versions",
"description": "เดินกระบวนการ REG/ASM ร่วมกับ CUR/GRD แยกหลักสูตรฉบับที่มีผล วิชา กลุ่มเรียน แผนการเรียน Enrollment การตรวจเงื่อนไข ผลคะแนน เกรด และเหตุการณ์แก้ไขผล\n\nเกณฑ์การวัดผล หน่วยกิต และการคำนวณที่เป็นนโยบายต้อง version/configurable ตามผู้มีอำนาจ ไม่กำหนดค่าตายตัวในโมเดล ตรวจ approval ของ W-xx ก่อนนำไปทำพฤติกรรมจริง",
"deliverables": [
"ERD/data dictionary และ state transitions สำหรับทะเบียน/ลงทะเบียน/ผลการเรียน",
"ตารางจุดใช้ policy version และประวัติการอนุมัติ/แก้ไขผล",
"กรณีทดสอบลงทะเบียนพร้อมกัน เวลาชน เงื่อนไข และแก้เกรดหลังประกาศ"
],
"dependencies": [
"T-501",
"T-502",
"T-503"
],
"suggested_owner": "BA งานทะเบียน/วัดผล ร่วมกับ Data architect",
"refs": [
"docs/agent/use-cases/REG.md",
"docs/agent/use-cases/ASM.md",
"docs/agent/use-cases/CUR.md",
"docs/agent/use-cases/GRD.md"
],
"steps": [
{
"text": "เทียบ REG/ASM/CUR/GRD use cases และคำศัพท์",
"done": false
},
{
"text": "แยกหลักสูตร/รายวิชา/การเปิดสอน/Enrollment/ผลการเรียน",
"done": false
},
{
"text": "ระบุ invariant และ transaction boundaries จากพฤติกรรมต้นฉบับ",
"done": false
},
{
"text": "ออกแบบ policy versions ประวัติผล และการอนุมัติแก้ไข",
"done": false
},
{
"text": "ให้ทะเบียน/คณะ/อาจารย์ผู้สอนตรวจตัวอย่างครบวงจร",
"done": false
}
],
"questions": [
{
"id": "T505-Q1",
"asked_of": "นายทะเบียน + ผู้รับผิดชอบหลักสูตร/วัดผล",
"question": "มีแบบแผนหลักสูตร ใบลงทะเบียน และรายงานผลที่ใช้จริงของมหาวิทยาลัย/โรงเรียนกีฬาหรือไม่? ใครยืนยันความแตกต่างของสองระดับ?",
"why": "ออกแบบข้อมูลให้ครอบคลุมเอกสารจริงและไม่รวมกติกาต่างระดับผิดกัน",
"state": "open"
},
{
"id": "T505-Q2",
"asked_of": "นายทะเบียน + คณะ/ผู้สอน",
"question": "แต่ละ policy ต้องยึด version ณ เหตุการณ์ใด และใครมีสิทธิ์แก้/อนุมัติ policy กับผลการเรียน?",
"why": "เก็บ version ที่ใช้จริงและตรวจประวัติย้อนหลังได้",
"state": "open"
},
{
"id": "T505-Q3",
"asked_of": "ฝ่าย IT + ทะเบียน",
"question": "ข้อมูลคะแนนมาจาก LMS/ไฟล์/กรอกในระบบช่องทางใดบ้าง และใครเป็นเจ้าของการเชื่อมต่อ?",
"why": "กำหนด import/integration และการป้องกันข้อมูลซ้ำ",
"state": "open"
}
]
},
{
"id": "T-506",
"title": "FIN และ SCH การเงิน ทุน และ กยศ.",
"status": "todo",
"summary": "ออกแบบใบแจ้งหนี้ การรับชำระ/กระทบยอด คืนเงิน ทุน และ กยศ. พร้อมขอบเขตการเชื่อมระบบภายนอก",
"description": "ศึกษา FIN และ SCH (ทุน/กยศ.) แยกหนี้ การชำระ หลักฐานรับเงิน ใบเสร็จ การคืนเงิน ทุนและคำขอกู้ รวมถึง approval/SoD และ policy versions\n\nช่องทางธนาคารและการแลกเปลี่ยน กยศ. ต้องยืนยันตามคู่สัญญา/use cases กยศ. ที่มีอยู่ระบุ portal-assist จึงต้องบันทึก API/file exchange เป็นข้อที่ยังรอข้อมูล ค่าธรรมเนียมและกฎคืนเงินตั้งค่าได้",
"deliverables": [
"ERD/data dictionary ของ FIN/SCH พร้อมการกระทบยอดและ audit trail",
"ตาราง integration: ธนาคาร/ใบเสร็จ/กยศ./บัญชี พร้อมสถานะยืนยัน",
"กรณีทดสอบ callback ซ้ำ ยอดไม่ตรง คืนเงินหลายขั้นตอน และทุนหักชำระ"
],
"dependencies": [
"T-501",
"T-502",
"T-503"
],
"suggested_owner": "BA การเงิน/ทุน ร่วมกับ Data architect และผู้ประสาน Integration",
"refs": [
"docs/agent/use-cases/FIN.md",
"docs/agent/use-cases/SCH.md",
"docs/agent/13-role-matrix.md",
"docs/agent/14-security-matrix.md"
],
"steps": [
{
"text": "รวบรวม FIN/SCH use cases และเจ้าของกระบวนการ",
"done": false
},
{
"text": "แยกหนี้ ธุรกรรมรับเงิน หลักฐาน กระทบยอด คืนเงิน และทุน/กู้ยืม",
"done": false
},
{
"text": "ระบุ idempotency และหลักฐานอนุมัติ/SoD ตามต้นฉบับ",
"done": false
},
{
"text": "ออกแบบ policy versions และ data handoff ไปทะเบียน/บัญชี",
"done": false
},
{
"text": "ตรวจตัวอย่างกับการเงิน เจ้าหน้าที่ กยศ. และผู้ประสานธนาคาร",
"done": false
}
],
"questions": [
{
"id": "T506-Q1",
"asked_of": "การเงิน + ผู้ประสานธนาคาร",
"question": "มีธนาคาร/ผู้ให้บริการรับชำระที่เลือกแล้วหรือไม่ และมีเอกสาร callback/statement/e-Receipt หรือผู้ประสานงานใด?",
"why": "กำหนด integration contract และหลักฐานกระทบยอด",
"state": "open"
},
{
"id": "T506-Q2",
"asked_of": "เจ้าหน้าที่ กยศ. + Project owner",
"question": "ขอบเขต กยศ. ใช้ portal-assist ตาม use cases หรือมี API/file exchange เพิ่มเติมที่ยืนยันแล้ว?",
"why": "ไม่ออกแบบการเชื่อมต่อที่ยังไม่ได้รับรอง",
"state": "open"
},
{
"id": "T506-Q3",
"asked_of": "การเงิน + งานทุน/บัญชี",
"question": "ใครยืนยันขั้นตอนคืนเงิน อนุมัติปรับยอด ทุนหักหนี้ และระบบบัญชีปลายทางที่ใช้จริง?",
"why": "กำหนด data ownership, SoD และเส้นทางอนุมัติ",
"state": "open"
}
]
}
]
},
{
"id": "prep-screens",
"title": "Sitemap และ mockup หน้าจอ",
"goal": "รอคำสั่งจาก project owner",
"tasks": [
{
"id": "T-601",
"title": "Sitemap ทุกช่องทาง",
"status": "todo",
"summary": "ออกแบบโครงเมนูและเส้นทางหลักของทุกช่องทางจาก Use cases ที่ยืนยันแล้ว พร้อมสิทธิ์และขอบเขตหน่วยงาน",
"description": "แปลง actors/use cases เป็น sitemap และ user journeys ของผู้สมัคร นักศึกษา ผู้ปกครอง บุคลากร ผู้บริหาร และผู้ดูแล โดยแยกเมนูตามบทบาท/ขอบเขตมหาวิทยาลัยและโรงเรียนกีฬา\n\nแท็บ Frontend/Backoffice/Integration ใน tracker เป็นเครื่องมือจัดกลุ่มเบื้องต้น ไม่ใช่ sitemap ที่อนุมัติแล้ว ต้องเทียบกับ matrix และขอบเขต R1 ก่อนสรุปหน้าจอ",
"deliverables": [
"Sitemap แยก channel/role/ระดับการศึกษา พร้อมจุดข้ามช่องทาง",
"ตาราง W-xx → หน้าจอ/เมนู → สิทธิ์/หน่วยงาน → R1/ภายหลัง",
"รายการ flow ที่ต้องทำ mockup และคำถามที่ยังไม่ตัดสินใจ"
],
"dependencies": [
"T-201",
"T-701",
"T-702"
],
"suggested_owner": "UX/BA ร่วมกับ Product owner",
"refs": [
"docs/agent/06-ux-ui.md",
"docs/agent/04-roles-and-access.md",
"docs/agent/12-use-cases.md",
"docs/agent/13-role-matrix.md"
],
"steps": [
{
"text": "ยืนยัน channel และ use cases ที่ Approved/อยู่ใน R1",
"done": false
},
{
"text": "จับคู่ actors/journeys กับเมนูและจุดเชื่อมระบบ",
"done": false
},
{
"text": "ตรวจ multi-role และการเปลี่ยนวิทยาเขต/โรงเรียนกีฬา",
"done": false
},
{
"text": "แยก public/staff/student/guardian/executive journeys",
"done": false
},
{
"text": "ส่ง sitemap และ navigation flows ให้ BA/เจ้าของผลิตภัณฑ์ตรวจ",
"done": false
}
],
"questions": [
{
"id": "T601-Q1",
"asked_of": "Project owner + BA",
"question": "R1 ต้องมีช่องทางใดก่อน และ Student Web / mobile / Parent PWA/LIFF มีขอบเขตที่ยืนยันแล้วหรือไม่?",
"why": "จัด sitemap ตามช่องทางที่ต้องส่งมอบจริง",
"state": "open"
},
{
"id": "T601-Q2",
"asked_of": "BA + ตัวแทนผู้ใช้มหาวิทยาลัย/โรงเรียนกีฬา",
"question": "งานที่ใช้บ่อยและลำดับเมนูสำคัญของแต่ละบทบาทคืออะไร ใครเป็นผู้ตรวจ sitemap?",
"why": "ทดสอบการค้นหาเมนูตามงานจริง",
"state": "open"
},
{
"id": "T601-Q3",
"asked_of": "UX lead + Project owner",
"question": "จะใช้เครื่องมือ/ที่เก็บ sitemap และขั้นตอนอนุมัติแบบใด?",
"why": "ส่งมอบงานออกแบบให้ตรวจและใช้ต่อได้",
"state": "open"
}
]
},
{
"id": "T-602",
"title": "Mockup หน้าจอ",
"status": "todo",
"summary": "ทำ mockup ของ flow ที่เลือก โดยครอบคลุมสถานะปกติ ผิดพลาด รออนุมัติ และสิทธิ์ไม่พอ",
"description": "รับ sitemap และ flow ที่ผ่านการทบทวนจาก T-601 แล้วเลือกหน้าจอสำคัญของแต่ละบทบาท/ช่องทาง ทำชุด component/layout และหน้าตามกรณีจริงด้วยข้อความไทยและปี พ.ศ.\n\nภาพใน proposal เป็นตัวอย่าง ไม่ใช่ข้อมูลหรือรายละเอียดหน้าจอที่ยืนยันแล้ว เชื่อม mockup กลับไปยัง use cases และเปิดประเด็นที่ต้องตัดสินใจให้ชัดก่อนส่งต่อพัฒนา",
"deliverables": [
"Mockup/prototype ของ flow ที่เลือก พร้อม empty/loading/error/permission states",
"ชุดรูปแบบ UI และข้อความไทยที่ทีมใช้ร่วมกัน",
"Mapping หน้าจอกับ W-xx และผลทดสอบ/ข้อสังเกตจากผู้ใช้"
],
"dependencies": [
"T-601"
],
"suggested_owner": "UX/UI designer ร่วมกับ BA / ตัวแทนผู้ใช้",
"refs": [
"docs/agent/06-ux-ui.md",
"docs/agent/12-use-cases.md",
"docs/agent/02-glossary.md"
],
"steps": [
{
"text": "เลือกลำดับ flow จาก sitemap/R1 กับ Product owner",
"done": false
},
{
"text": "รวบรวม brand assets และข้อกำหนดอุปกรณ์/การเข้าถึงที่ยืนยันแล้ว",
"done": false
},
{
"text": "ออกแบบรูปแบบและ component ที่ใช้ร่วมกัน",
"done": false
},
{
"text": "ทำ mockup ครบสถานะของ flow สำคัญ",
"done": false
},
{
"text": "ให้ตัวแทนผู้ใช้ทดลองและบันทึกสิ่งที่ต้องปรับ ก่อนส่งรีวิว",
"done": false
}
],
"questions": [
{
"id": "T602-Q1",
"asked_of": "Product owner + BA",
"question": "ต้องการให้เริ่ม mockup flow ใดและใครเป็นผู้ยืนยันหน้าจอแต่ละบทบาท?",
"why": "กำหนดลำดับและผู้ตรวจที่ชัดเจน",
"state": "open"
},
{
"id": "T602-Q2",
"asked_of": "มหาวิทยาลัย + UX lead",
"question": "มี logo, brand guideline, อุปกรณ์เป้าหมาย และข้อกำหนด accessibility ที่อนุญาตให้ใช้จริงหรือไม่?",
"why": "ใช้ภาพลักษณ์และข้อกำหนดที่ถูกต้อง",
"state": "open"
},
{
"id": "T602-Q3",
"asked_of": "Project owner + ทีมพัฒนา",
"question": "ส่งมอบ prototype/spec ผ่านเครื่องมือใด และต้องมีข้อมูลระดับไหนก่อนส่งต่อพัฒนา?",
"why": "กำหนดมาตรฐาน handoff และลดการตีความซ้ำ",
"state": "open"
}
]
}
]
},
{
"id": "prep-real-plan",
"title": "จัดหมวดหมู่ Milestone และ Epic ของงานจริง",
"goal": "วางโครง Milestone 1, 2, 3, … ของการพัฒนาระบบจริง และแตกแต่ละ milestone เป็น epic",
"tasks": [
{
"id": "T-701",
"title": "ร่างรายการ Milestone และ Epic ของงานจริงจาก use case และแผน 10 เดือน",
"status": "todo",
"summary": "ร่าง Milestone/Epic ของงานผลิตจริงแบบส่งมอบเป็น flow และผูกกับ Use cases/ความเสี่ยง/ระบบร่วม",
"description": "เปลี่ยนภาพแผน 10 เดือนให้เป็นร่าง Milestone 1, 2, 3… และ Epic ที่ตรวจรับได้ โดยแยก platform foundation, vertical flows, integrations, migration/import เริ่มต้น และการทดสอบ/นำขึ้นใช้\n\nวางขอบเขตจาก use cases และ BA modules พร้อมระบุรายการที่ยังไม่ Approved หรืออยู่นอก R1 LAB ที่เอกสารย้ายไปสัญญาอื่นต้องแสดงเป็นข้อจำกัด ไม่ดึงกลับเข้า release โดยปริยาย วันที่และ capacity รอข้อมูลยืนยัน",
"deliverables": [
"ร่าง Milestone/Epic ของงานผลิตจริง พร้อมเป้าหมายและเงื่อนไขรับมอบ",
"ตาราง W-xx/BA function → release/epic/dependency และระดับความแน่นอน",
"รายการความเสี่ยงด้าน infra/integration/approval พร้อมทางลดความเสี่ยง"
],
"dependencies": [
"T-303"
],
"suggested_owner": "Project manager ร่วมกับ Product owner / BA / Tech lead",
"refs": [
"docs/agent/09-delivery-plan.md",
"docs/agent/03-modules.md",
"docs/agent/12-use-cases.md",
"docs/agent/11-open-questions-and-known-issues.md"
],
"steps": [
{
"text": "ตรวจแผน 10 เดือนและ scope gaps กับ use-case approval ล่าสุด",
"done": false
},
{
"text": "จัดกลุ่มงานเป็น flow ที่ส่งมอบ/สาธิตได้",
"done": false
},
{
"text": "ทำ dependency map ของ platform/data/integration/hosting",
"done": false
},
{
"text": "ร่าง Milestone/Epic พร้อม exit criteria และรายการขอข้อมูล",
"done": false
},
{
"text": "ส่งร่างให้ทีม/Project owner ใช้ยืนยันขอบเขตใน T-702",
"done": false
}
],
"questions": [
{
"id": "T701-Q1",
"asked_of": "Project owner + ทีมส่งมอบ",
"question": "วันเริ่ม/จุดตรวจรับ/กำลังทีมที่ยืนยันแล้วมีอะไรบ้าง และแผน 10 เดือนเริ่มนับจากเหตุการณ์ใด?",
"why": "ทำแผนจากเวลาจริงโดยไม่กำหนด deadline เอง",
"state": "open"
},
{
"id": "T701-Q2",
"asked_of": "BA + ผู้บริหารโครงการมหาวิทยาลัย",
"question": "flow ใดจำเป็นต้องเปิดใช้ก่อน และกลุ่มผู้ใช้/วิทยาเขตหรือโรงเรียนกีฬาใดเป็น pilot?",
"why": "กำหนด vertical slices และระยะ rollout",
"state": "open"
},
{
"id": "T701-Q3",
"asked_of": "Tech lead + Integration/Infrastructure owner",
"question": "ระบบภายนอกและ environment ใดมี lead time หรือข้อจำกัดที่ต้องนำมาวาง dependency ก่อน?",
"why": "ลดโอกาสที่ release รอระบบร่วมในตอนท้าย",
"state": "open"
}
]
},
{
"id": "T-702",
"title": "ยืนยันลำดับและขอบเขตของ R1 กับทีม",
"status": "todo",
"summary": "ยืนยันขอบเขต R1 ราย flow/Use case พร้อมผู้ตรวจรับและรายการเลื่อนออกจาก release",
"description": "ใช้ร่างจาก T-701 หารือกับผู้มีอำนาจตัดสินใจของมหาวิทยาลัยและทีมส่งมอบ ยืนยันว่า R1 รวม/ไม่รวมอะไร เหตุใด และมีเกณฑ์รับมอบใดบ้าง\n\nแยกการอนุมัติความถูกต้องของ Use case ออกจากการอนุมัติให้อยู่ใน R1: Use case ที่ถูกต้องอาจอยู่ release ถัดไปได้ บันทึกการเปลี่ยนขอบเขตและผู้ยืนยันเพื่อไม่ให้ข้อสรุปอยู่เฉพาะในแชต",
"deliverables": [
"R1 scope baseline: included/deferred/out-of-scope พร้อมเหตุผลและผู้อนุมัติ",
"แผนตรวจรับ/pilot และ acceptance criteria ราย flow",
"Milestone/Epic ที่อัปเดตตามข้อสรุป พร้อม change log"
],
"dependencies": [
"T-701"
],
"suggested_owner": "Project manager / Product owner ร่วมกับผู้มีอำนาจรับมอบมหาวิทยาลัย",
"refs": [
"docs/agent/09-delivery-plan.md",
"docs/agent/11-open-questions-and-known-issues.md",
"docs/agent/12-use-cases.md"
],
"steps": [
{
"text": "นำ dependency และ scope draft จาก T-701 ไปทบทวนกับผู้ตัดสินใจ",
"done": false
},
{
"text": "ยืนยันเป้าหมายผู้ใช้/pilot และ mandatory flows ของ R1",
"done": false
},
{
"text": "ตกลง inclusion/deferment และ acceptance criteria ตามข้อมูลจริง",
"done": false
},
{
"text": "บันทึกการยืนยัน/ข้อค้างพร้อมชื่อผู้รับผิดชอบ",
"done": false
},
{
"text": "อัปเดต tracker และเอกสารแผนงานให้เป็น baseline เดียวกัน",
"done": false
}
],
"questions": [
{
"id": "T702-Q1",
"asked_of": "Project owner + ผู้มีอำนาจรับมอบงานมหาวิทยาลัย",
"question": "ใครมีอำนาจลงนาม/ยืนยัน R1 และต้องผ่านคณะทำงานหรือขั้นตอนใด?",
"why": "รู้ว่าขอบเขตผ่านการอนุมัติจริงเมื่อใด",
"state": "open"
},
{
"id": "T702-Q2",
"asked_of": "ผู้ตัดสินใจ R1 + BA",
"question": "รายการใดในร่าง T-701 จำเป็นต่อ go-live และรายการใดยอมเลื่อนได้ รวมประเด็น scope ที่ยังเปิด?",
"why": "ปิดความไม่แน่นอนของ release อย่างมีหลักฐาน",
"state": "open"
},
{
"id": "T702-Q3",
"asked_of": "ทีมรับมอบ + ทีมส่งมอบ",
"question": "จะใช้หลักฐาน/สถานการณ์ใดตรวจรับ R1 และมีกระบวนการอนุมัติ change request หลัง baseline อย่างไร?",
"why": "กำหนดจุดจบของงานและควบคุมการเปลี่ยน scope",
"state": "open"
}
]
}
]
}
]
}
]