ความคืบหน้างาน ไฟล์ต้นฉบับ

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"
              }
            ]
          }
        ]
      }
    ]
  }
]