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

tracker/data/checkpoints.json

[
  {
    "id": "C-001",
    "at": "2026-10-29T12:20:31+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "สร้างฐานความรู้โครงการจาก Proposal",
    "summary": "ศึกษา Business Proposal ทั้งฉบับ รวมภาพ workflow และภาพตัวอย่างหน้าจอ แล้วเขียนเป็นฐานความรู้ให้ Agent ใช้ ต่อด้วยถอดภาพโครงสร้าง module ของ BA และตั้ง git repo",
    "changes": [
      "สร้าง docs/agent/ 01–11: ภาพรวม ศัพท์ module บทบาท workflow UX/UI architecture NFR แผนงาน KPI และคำถามค้าง",
      "ถอดภาพ module ของ BA เป็น UNI-01…08 และโรงเรียนกีฬา 15 module พร้อมตารางเทียบกับระบบใน Proposal",
      "เพิ่ม AGENTS.md และ CLAUDE.md ชี้ไปที่ docs/agent",
      "ตั้ง git repo และ commit แรก"
    ],
    "tasks": [
      "T-101",
      "T-102",
      "T-103"
    ],
    "refs": [
      "docs/agent/README.md",
      "docs/agent/03-modules.md",
      "AGENTS.md"
    ],
    "commit": "ec2a33b"
  },
  {
    "id": "C-002",
    "at": "2026-10-30T12:13:24+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "ระบุว่า Proposal §5 และ §7 ไม่เกี่ยวกับ TNSU",
    "summary": "พบว่า §5 และ §7 ของ Proposal เป็นเนื้อหาของโครงการอื่น จึงระบุในเอกสารทุกจุดว่าห้ามใช้เป็น requirement ระหว่างรอทีมยืนยัน",
    "changes": [
      "README, AGENTS.md และไฟล์ 07, 08, 09, 11 ระบุว่า §5.1–5.3 และ §7 เป็นเนื้อหาชั่วคราว",
      "ระบุเลขหน้าโดยประมาณของส่วนที่ปนมา"
    ],
    "tasks": [
      "T-104"
    ],
    "refs": [
      "docs/agent/11-open-questions-and-known-issues.md"
    ],
    "commit": "51550d2"
  },
  {
    "id": "C-003",
    "at": "2026-10-30T12:23:03+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "สร้าง catalog use case และเอาเนื้อหาโครงการอื่นออก",
    "summary": "ถอดข้อมูล 162 use case จาก Use case Explorer ที่ทีม export มา เขียนสคริปต์สร้าง catalog ทีละ module และเอารายละเอียดของโครงการอื่นออกจากฐานความรู้ตามที่ทีมยืนยัน",
    "changes": [
      "เพิ่ม tools/gen_use_cases.py และ docs/agent/use-cases/ (35 module, 162 use case)",
      "เขียน 12-use-cases.md: ตารางเทียบกับ BA และ Proposal แนวคิดหลัก ระบบภายนอก และ 18 จุดที่ต้องตรวจสอบ",
      "เปลี่ยนรหัสโรงเรียนกีฬาของ BA จาก SCH เป็น SS เพราะ use case ใช้ SCH เป็นทุนและ กยศ.",
      "เขียน 07 และ 08 ใหม่จากเนื้อหา TNSU เท่านั้น"
    ],
    "tasks": [
      "T-104",
      "T-105"
    ],
    "refs": [
      "docs/agent/12-use-cases.md",
      "docs/agent/tools/gen_use_cases.py"
    ],
    "commit": "babd21d"
  },
  {
    "id": "C-004",
    "at": "2026-10-30T12:49:14+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Role Matrix, Security Matrix และ ADR tech stack",
    "summary": "ทำ Role Matrix และ Security Matrix ฉบับร่างจาก use case และบันทึกการตัดสินใจของ project owner (tech stack, ไม่มีระบบเดิม, ค่ากฎตั้งโดยมหาวิทยาลัย)",
    "changes": [
      "13-role-matrix.md: 59 รหัสบทบาท โมเดลขอบเขตสิทธิ์ และตารางอำนาจอนุมัติประมาณ 40 เรื่อง",
      "14-security-matrix.md: ระดับข้อมูล L1–L4 สิทธิ์ตามโดเมนข้อมูล การยืนยันตัวตน SoD และ audit",
      "docs/adr/0001-tech-stack.md พร้อมข้อเปรียบเทียบ SQL Server กับ PostgreSQL",
      "ตัดเรื่องระบบ E-Education เดิมออกทุกไฟล์"
    ],
    "tasks": [
      "T-201",
      "T-202",
      "T-301",
      "T-302"
    ],
    "refs": [
      "docs/agent/13-role-matrix.md",
      "docs/agent/14-security-matrix.md",
      "docs/adr/0001-tech-stack.md"
    ],
    "commit": "5d2b2ec"
  },
  {
    "id": "C-005",
    "at": "2026-10-30T12:57:38+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "README ของ repo และ push ขึ้น GitLab",
    "summary": "ตั้ง remote GitLab แล้ว push และเขียน README ภาษาไทยสำหรับคนในทีม",
    "changes": [
      "README.md: สถานะงาน tech stack โครงสร้าง repo และวิธีอัปเดตข้อมูล",
      "push branch main ขึ้น GitLab"
    ],
    "tasks": [
      "T-103",
      "T-106"
    ],
    "refs": [
      "README.md"
    ],
    "commit": "abedeb3"
  },
  {
    "id": "C-006",
    "at": "2026-10-30T13:41:32+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "สร้างเว็บติดตามความคืบหน้างาน",
    "summary": "สร้าง tracker เป็น Go server ที่ render ฝั่ง server และอัปเดตสดด้วย Server-Sent Events มี 6 เมนูตามที่ขอ พร้อมข้อมูลตั้งต้นจากงานจริงของทีม",
    "changes": [
      "หน้าภาพรวม: จำนวน Task / Review / Checkpoint, milestone แบบหลอด segment และ Current Task",
      "go test 12 รายการ และ e2e ตรวจการอัปเดตสดในเบราว์เซอร์จริง",
      "กติกาใน AGENTS.md ให้ Agent อัปเดตข้อมูล tracker"
    ],
    "tasks": [
      "T-401"
    ],
    "refs": [
      "tracker/"
    ],
    "commit": "8878325"
  },
  {
    "id": "C-007",
    "at": "2026-10-30T13:54:20+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Dark mode และแก้ watcher อ่านไฟล์ระหว่างบันทึก",
    "summary": "เพิ่ม dark mode แบบตามระบบ/สว่าง/มืด และแก้ปัญหา watcher อ่านไฟล์ที่ยังเขียนไม่เสร็จ ซึ่งทำให้ test ผ่านบ้างไม่ผ่านบ้าง",
    "changes": [
      "เปลี่ยนสีทั้งหมดเป็น token และเพิ่มปุ่มเลือกธีม",
      "watcher รอให้ไฟล์คงที่ก่อนโหลดใหม่ (P-007)",
      "go test ซ้ำ 30 รอบผ่านครบ"
    ],
    "tasks": [
      "T-401"
    ],
    "refs": [
      "tracker/static/style.css",
      "tracker/live.go"
    ],
    "commit": "d2349fd"
  },
  {
    "id": "C-008",
    "at": "2026-10-30T14:01:41+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "จัดงานเป็น Milestone → Epic → Task",
    "summary": "ย้ายงานเดิมทั้งหมดไปเป็น Milestone 0 (เตรียมความพร้อม) แตกเป็น 7 epic และเพิ่ม epic สำหรับจัดหมวดหมู่ milestone ของงานจริง",
    "changes": [
      "โครงสร้างข้อมูลใหม่ milestone → epic → task และรหัส epic อัตโนมัติ (E0.1…)",
      "หน้าภาพรวมแสดงหลอดแบ่งกลุ่มตาม epic และแถวของแต่ละ epic"
    ],
    "tasks": [
      "T-401",
      "T-701"
    ],
    "refs": [
      "tracker/data/milestones.json"
    ],
    "commit": "8dcc598"
  },
  {
    "id": "C-009",
    "at": "2026-10-30T15:15:07+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "ถอดไฟล์ draw.io ต้นฉบับของ BA",
    "summary": "อ่านไฟล์ TNSU_EDU 191069.drawio ทั้ง 7 หน้า ยืนยันว่า module ตรงกับที่ถอดจากภาพ และได้ข้อมูลใหม่: โครงสร้างหน่วยงาน หลักสูตรจริง 9 หลักสูตร และ flow ของ BA 2 เรื่อง",
    "changes": [
      "เพิ่ม tools/gen_ba_drawio.py และ docs/agent/ba-drawio.md",
      "03-modules: โครงสร้างหน่วยงานและรายการหลักสูตร",
      "05-workflows: flow สร้างหลักสูตรและเปิดสอน (รวมวิชาเรียนรวม)",
      "ปิดปัญหา P-003 ภาพความละเอียดต่ำ"
    ],
    "tasks": [
      "T-107"
    ],
    "refs": [
      "docs/agent/ba-drawio.md",
      "docs/agent/03-modules.md",
      "docs/agent/05-workflows.md"
    ],
    "commit": "cccee73"
  },
  {
    "id": "C-010",
    "at": "2026-10-30T15:19:54+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Dark mode แบบ GitHub",
    "summary": "เปลี่ยนชุดสีโหมดมืดเป็นแบบ GitHub dark และแก้ตัวอักษรบนพื้นสีทองที่อ่านยาก",
    "changes": [
      "ชุดสีโหมดมืดใหม่",
      "token ตัวอักษรบนพื้นสีทองและเมนูด้านข้าง"
    ],
    "tasks": [
      "T-401"
    ],
    "refs": [
      "tracker/static/style.css"
    ],
    "commit": "1b2d42e"
  },
  {
    "id": "C-011",
    "at": "2026-10-30T15:22:46+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Dark mode เข้มขึ้นและจัดเนื้อหากึ่งกลาง",
    "summary": "ทำโหมดมืดเข้มขึ้นอีกระดับ ไล่ระดับชั้นสีไม่ให้กลืนกัน ตรวจ contrast ตาม WCAG ทุกคู่สี และจัดเนื้อหาให้อยู่กึ่งกลางบนจอกว้าง",
    "changes": [
      "ชั้นสี page < เมนู < การ์ด < ส่วนที่ยกขึ้น",
      "กรอบ Todo ปรับให้ผ่าน 3:1",
      "จัดเนื้อหากึ่งกลาง"
    ],
    "tasks": [
      "T-401"
    ],
    "refs": [
      "tracker/static/style.css"
    ],
    "commit": "ef793d7"
  },
  {
    "id": "C-012",
    "at": "2026-10-30T15:33:44+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "เปิด tracker ให้เข้าจาก Tailscale",
    "summary": "ตั้ง tailscale serve แบบ TCP บน Windows ส่งต่อพอร์ต 8099 เข้า WSL ทดสอบทุกหน้าและการอัปเดตสดผ่าน IP Tailscale แล้วผ่าน",
    "changes": [
      "scripts/tailscale.sh on | off | status",
      "เปลี่ยนพอร์ตเริ่มต้นเป็น 8099",
      "บันทึกปัญหา P-008 (HTTP serve ได้ 404/500)"
    ],
    "tasks": [
      "T-402"
    ],
    "refs": [
      "tracker/scripts/tailscale.sh",
      "tracker/README.md"
    ],
    "commit": "a34ed5c"
  },
  {
    "id": "C-013",
    "at": "2026-10-30T15:52:25+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Tracker รอบ 2: หน้าย่อย, Checkpoint จาก Agent, Test แบบจัดกลุ่ม, Review tabs และ animation",
    "summary": "ปรับ tracker ตามคำขอของ project owner 5 เรื่อง: แยกหน้าตามลำดับชั้นเพื่อรองรับ milestone ของงานจริง, เปลี่ยน Checkpoint จาก git log เป็นบันทึกสรุปที่ Agent เขียน, จัดผลทดสอบเป็นหัวข้อให้ BA และ Technical อ่านเข้าใจ, แยกการรีวิวตามสถานะพร้อม checklist และให้งานที่กำลังทำหรือรอรีวิวมี animation",
    "changes": [
      "หน้าย่อย /milestones/{milestone}, /milestones/{milestone}/{epic} และ /tasks/{task} พร้อม breadcrumb และรายชื่อ milestone ในเมนูด้านข้าง",
      "Checkpoint อ่านจาก data/checkpoints.json แทน git log เอา git.go และ flag -repo ออก และเขียนสรุปย้อนหลัง 12 รายการ",
      "ผลตรวจ Test: จัดกลุ่มตามหัวข้อ ป้าย BA / Technical ตัวกรองมุมมอง และย้ายรายละเอียดเทคนิคไปส่วนพับ",
      "Wait for review: tab Todo / Rejected / Hold / Done, checklist เป็นขั้นตอน และข้อความแบบ markdown (render ฝั่ง server แบบปลอดภัย)",
      "Animation: แสงวิ่งบน In Progress และลายเลื่อนบน Wait for review หยุดเมื่อระบบตั้งลดการเคลื่อนไหว",
      "เขียน checklist ให้งานที่รอรีวิวทั้ง 4 งาน และบันทึกผลทดสอบรอบนี้แบบจัดกลุ่ม (33 ข้อ ผ่านทั้งหมด)",
      "อัปเดต tracker/README.md, README.md และ AGENTS.md (กติกาเขียน checkpoint และผลทดสอบ)"
    ],
    "tasks": [
      "T-403",
      "T-201",
      "T-202",
      "T-302",
      "T-401"
    ],
    "refs": [
      "tracker/",
      "tracker/README.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-014",
    "at": "2026-10-30T16:02:17+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Review form: กรอกผลรีวิวและ Save จากหน้าเว็บ",
    "summary": "เพิ่มฟอร์มรีวิวตามคำขอของ project owner ให้ผู้รีวิวติ๊ก Checklist เลือก Approve / Reject / Hold เขียนผล แล้วกด Save ผลบันทึกลง milestones.json ให้ Agent อ่านได้ และปรับหน้าผลตรวจ Test ให้ใช้คำภาษาอังกฤษตามที่ทีมใช้",
    "changes": [
      "POST /reviews/{task}: validate, กัน CSRF (Origin/Referer), จำกัดขนาด 64 KB",
      "แก้ไฟล์ JSON แบบคงลำดับ key และ field อื่น เขียนแบบ atomic และเก็บ Review history ทุกครั้ง",
      "Approve → task Done, Reject → task In Progress, Hold → ค้างที่ Wait for review",
      "Live update ไม่ทับฟอร์มที่กำลังกรอก, browser จำชื่อผู้รีวิว",
      "ผลตรวจ Test ใช้คำภาษาอังกฤษ (Validation, Live update (SSE), Routing, Markdown sanitize ฯลฯ)",
      "AGENTS.md: Agent ต้องอ่านผลรีวิว Rejected / Hold ก่อนเริ่มงานทุกครั้ง"
    ],
    "tasks": [
      "T-404"
    ],
    "refs": [
      "tracker/review_submit.go",
      "tracker/ojson.go",
      "tracker/README.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-015",
    "at": "2026-10-30T16:16:16+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "ไฟล์แนบเปิดเป็น HTML, สถานะ Reviewed และนำผลรีวิว T-302 (SQL Server) ไปใช้",
    "summary": "ทำตามคำขอ 3 เรื่อง: ไฟล์แนบอย่าง Role Matrix และ Security Matrix กดเปิดเป็นหน้า HTML อ่านง่ายในแท็บใหม่, เพิ่มสถานะ Reviewed แยกจาก Done และให้ Done เป็นสีเขียว ระหว่างทำพบว่าผู้รีวิว (ทิว) Approve ไป 4 งานผ่าน Review form จึงอ่านผลแล้วนำไปใช้: บันทึกการเลือก SQL Server ลง ADR-0001",
    "changes": [
      "File viewer /files/<path>: markdown render พร้อมตาราง, TOC, row filter, heading anchor และ mermaid; ป้องกัน path traversal, .git และ symlink",
      "Refs และ path ใน code span ในข้อความรีวิวเปิดในแท็บใหม่",
      "สถานะ reviewed: Approve แล้วเป็น Reviewed, % นับ Done + Reviewed, ย้าย T-302, T-401, T-403, T-404 เป็น Reviewed",
      "Done สีเขียว / Reviewed สีน้ำเงินพร้อม ✓",
      "ADR-0001: ฐานข้อมูลเป็น SQL Server ตามผลรีวิว T-302 พร้อมผลกระทบ (RabbitMQ สำหรับ queue, Thai collation, JSON, temporal และ ledger tables)",
      "อัปเดต README, AGENTS.md, 07, 11, docs/agent/README และ tracker/README"
    ],
    "tasks": [
      "T-405",
      "T-305",
      "T-302"
    ],
    "refs": [
      "tracker/files.go",
      "tracker/md.go",
      "docs/adr/0001-tech-stack.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-016",
    "at": "2026-10-30T16:24:53+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "เมนู Timeline (Gantt chart)",
    "summary": "เพิ่มหน้า Timeline ตามคำขอ: Milestone › Epic › Task ฝั่งซ้าย แถบเวลาฝั่งขวาคล้าย Jira Timeline ปรับดูรายชั่วโมง วัน และสัปดาห์ได้ คำนวณตำแหน่งทั้งหมดฝั่ง server และอัปเดตสดเหมือนหน้าอื่น",
    "changes": [
      "timeline.go: ช่วงเวลาทำจริงและแผน, แถบ Epic / Milestone, target marker, scale และหัวตาราง",
      "หน้า /timeline พร้อมเส้นตอนนี้, วันหยุดแรเงา, ย่อ/ขยาย และปุ่มไปที่ตอนนี้",
      "Task รองรับ start / due (แผน) และวันเวลาแบบ RFC 3339",
      "Live update คงตำแหน่ง scroll ของ chart",
      "AGENTS.md: บันทึก started / finished พร้อมเวลา"
    ],
    "tasks": [
      "T-406"
    ],
    "refs": [
      "tracker/timeline.go",
      "tracker/templates/timeline.html",
      "tracker/static/timeline.js"
    ]
  },
  {
    "id": "C-017",
    "at": "2026-10-30T16:35:00+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "Timeline เต็มจอ ปรับความกว้างช่องรายละเอียดได้",
    "summary": "ตามคำขอ: หน้า Timeline ต้องใช้พื้นที่กว้าง จึงให้ใช้ความกว้างถึงขอบ browser และ chart ยืดเต็มพื้นที่ เพิ่มเส้นแบ่งที่ลากซ้ายขวาเพื่ออ่านชื่องานได้ยาวขึ้น และแก้สีพื้นหลังช่องรายละเอียดที่ซ้อนกับแถบตอนชี้เมาส์ใน theme มืด",
    "changes": [
      "หน้า Timeline ไม่จำกัด max-width (หน้าอื่นคงเดิม)",
      "ตำแหน่งแถบ หัวตาราง และเส้นตอนนี้ คำนวณเป็น % ของ chart; ความกว้างจาก scale กลายเป็นความกว้างขั้นต่ำก่อนเลื่อนแนวนอน",
      "เส้นแบ่งลากได้ที่หัวตารางและขอบทุกแถว, คีย์บอร์ด (ลูกศร, Shift+ลูกศร, Home) และจำค่าใน browser",
      "Hover สีบนช่องรายละเอียดวางบนพื้นทึบ ใน theme มืดจึงไม่เห็นแถบ chart ทะลุ",
      "E2E ใหม่ e2e/timeline-check.mjs"
    ],
    "tasks": [
      "T-407"
    ],
    "refs": [
      "tracker/timeline.go",
      "tracker/templates/timeline.html",
      "tracker/static/timeline.js",
      "tracker/static/style.css",
      "tracker/e2e/timeline-check.mjs"
    ]
  },
  {
    "id": "C-018",
    "at": "2026-10-30T16:48:00+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "แก้ย่อ/ขยายใน Timeline",
    "summary": "ผู้ใช้แจ้งว่าย่อ/ขยายใช้งานไม่ได้ ตรวจใน browser พบว่า JS ซ่อนแถวถูกต้องแล้ว แต่ CSS ของแถวทำให้แถวที่ซ่อนยังแสดงอยู่ แก้ CSS และเพิ่มการตรวจย่อ/ขยายใน E2E",
    "changes": [
      "style.css: .tl-row[hidden] { display: none }",
      "e2e/timeline-check.mjs: ย่อ Epic แล้ว task ข้างในหาย ขยายแล้วกลับมา"
    ],
    "tasks": [
      "T-407"
    ],
    "refs": [
      "tracker/static/style.css",
      "tracker/e2e/timeline-check.mjs"
    ]
  },
  {
    "id": "C-019",
    "at": "2026-10-30T17:05:00+07:00",
    "agent": "Claude Code (Opus 5.5)",
    "title": "แก้ tracker ช้าเมื่อเปิดหลาย tab และอ่านผลรีวิว",
    "summary": "ผู้ใช้ถามว่าเว็บช้าเพราะอะไร วัดแล้ว server ตอบใน 1–25 ms และไม่ใช้ CPU ปัญหาอยู่ที่ browser: ทุก tab ถือการเชื่อมต่อ live update ค้างไว้ ซึ่ง browser ให้ได้ประมาณ 6 ช่องต่อเว็บ เมื่อเปิดหลาย tab หน้าใหม่ต้องรอคิว จึงให้ tab ที่ไม่ได้ดูปิดการเชื่อมต่อ และ cache CSS/JS ไว้ใน browser อ่านผลรีวิวแล้ว: ทิว approve T-302, T-401, T-403–T-407 ทั้งหมดอยู่ในสถานะ Reviewed ไม่มีงานที่ Reject หรือ Hold และ T-201, T-202 ยังรอรีวิว",
    "changes": [
      "live.js: ปิด EventSource เมื่อ tab ถูกซ่อน และต่อใหม่ + ดึงข้อมูลล่าสุดเมื่อกลับมา",
      "main.go: staticVersion (hash ของไฟล์ static), template func asset, Cache-Control แบบ immutable เมื่อ ?v ตรง",
      "Test ใหม่ TestStaticCaching",
      "บันทึกผลรีวิวของทิวลงใน repo"
    ],
    "tasks": [
      "T-408",
      "T-302",
      "T-401",
      "T-403",
      "T-404",
      "T-405",
      "T-406",
      "T-407"
    ],
    "refs": [
      "tracker/static/live.js",
      "tracker/main.go",
      "tracker/templates/layout.html"
    ]
  },
  {
    "id": "C-020",
    "at": "2026-10-30T20:00:07+07:00",
    "agent": "Codex",
    "title": "Use cases แบบตาราง พร้อม diagram editor บันทึกส่วนกลาง",
    "summary": "เพิ่มเมนู Use cases ตามคำขอ ใช้แหล่งข้อมูลเดิมและแยก diagram ฉบับร่างออกจากข้อกำหนด ผู้ใช้เลือกบันทึกส่วนกลางและขอ Table view ต่อมาขอจัดกึ่งกลางพร้อมซูมให้เห็นทั้งหมดเริ่มต้น จึงเพิ่ม Fit และการเลื่อนมุมมอง อ่าน review แล้วไม่มี Reject / Hold ที่ต้องแก้ก่อน เรียกใช้งานเวอร์ชันใหม่ที่ 8099 ตามที่ผู้ใช้อนุญาต",
    "changes": [
      "ตารางค้นหา / กรอง 162 Use cases ใน 35 modules และหน้า actors / จุดเริ่มต้น / ผลลัพธ์ / ขั้นตอน / ความสัมพันธ์",
      "SVG editor: shape 4 แบบ, title/description/type, ลากตำแหน่งและเส้นเชื่อม, ข้อความบนเส้นและหัวลูกศรต้น–ปลาย, ลบ, undo/redo, zoom, Fit ทั้งหมดเริ่มต้น, pan และ export JSON",
      "บันทึก JSON ส่วนกลางแบบ atomic พร้อม validation และ revision conflict; live refresh และการบันทึกล้มเหลวไม่ล้างงานใน editor",
      "ทดสอบ Go พร้อม race detector และ vet; Browser ผ่าน 23 ข้อ รวม SSE จริง สองผู้ใช้ และ Fit/กึ่งกลาง",
      "อัปเดตคู่มือและแหล่งความรู้ งาน T-409 รอผู้ใช้ตรวจ ไม่มีการสร้าง worktree หรือ workspace ใหม่"
    ],
    "tasks": [
      "T-409"
    ],
    "refs": [
      "tracker/usecases.go",
      "tracker/diagram.go",
      "tracker/static/usecases.js",
      "tracker/templates/usecases.html",
      "tracker/e2e/usecases-check.mjs",
      "tracker/README.md",
      "docs/agent/12-use-cases.md"
    ]
  },
  {
    "id": "C-021",
    "at": "2026-10-30T20:04:29+07:00",
    "agent": "Codex",
    "title": "Diagram ขยับตามกริดและใช้เส้นเชื่อมหักมุม",
    "summary": "ปรับตามคำขอระหว่างทดลองใช้: จัดตำแหน่ง shape ให้ตรงกริด และเปลี่ยนเส้นเชื่อมจากแนวอิสระเป็นแนวนอน/แนวตั้งหักมุม 90° โดยยังคง Fit ทั้งหมดและจัดกึ่งกลางเป็นค่าเริ่มต้น",
    "changes": [
      "การลาก เพิ่ม shape และขยับด้วยแป้นพิมพ์ snap พิกัดทีละ 20 หน่วย",
      "กริดวาดใน SVG จึงซูมและเลื่อนไปพร้อมกับ diagram",
      "เส้นเชื่อมใช้ orthogonal routing เลือกขอบ shape และปรับเส้นตามตำแหน่ง รวมเส้นย้อนกลับและ self-loop; เส้นขณะกำลังลากก็หักมุม",
      "Browser ผ่าน 24 ข้อ รวมยืนยันว่าทุกช่วงเส้นเป็นแนวนอน/แนวตั้งและพิกัดที่บันทึกตรงกริด",
      "รีสตาร์ตเวอร์ชันล่าสุดบนพอร์ตหลัก 8099 ตามสิทธิ์ที่ผู้ใช้ให้ไว้"
    ],
    "tasks": [
      "T-409"
    ],
    "refs": [
      "tracker/static/usecases.js",
      "tracker/static/usecases.css",
      "tracker/templates/usecases.html",
      "tracker/e2e/usecases-check.mjs"
    ]
  },
  {
    "id": "C-022",
    "at": "2026-10-30T20:14:46+07:00",
    "agent": "Codex",
    "title": "จัดกลุ่ม Use cases อ่าน description ครบ ซูมด้วยเมาส์ และย้าย Current Task",
    "summary": "ทำคำขอต่อเนื่องครบ: Ctrl + scroll ซูมตามจุดเมาส์, description แสดงครบหลายบรรทัดพร้อมขยาย shape, แท็บกลุ่มงานพร้อมตารางไม่จำกัดความสูง และ Current Task อยู่ก่อน Milestone ในหน้าภาพรวม รีสตาร์ตใช้งานจริงที่ 8099 แล้ว",
    "changes": [
      "Ctrl + scroll ขึ้น/ลงซูม 1–300% โดยรักษาจุดใต้เมาส์; dropdown แสดงสเกลจริงและไม่ทำให้ diagram มีสถานะยังไม่บันทึก",
      "ตัดบรรทัด Title/Description ตามคำและกลุ่มตัวอักษรไทย ไม่ตัดทิ้ง ขยาย shape ทั้งสี่แบบ และเว้นช่องร่างใหม่ตามความสูงจริง",
      "แท็บ Frontend / Backoffice / Integration ใช้ร่วมกับ filters ได้ แสดง counts และเหตุผลใน tooltip กลุ่มซ้อนกันได้ เป็นการอนุมานเบื้องต้นไม่ใช่ข้อสรุปหน้าจอ/API",
      "ตารางแสดงยาวตามเนื้อหาโดยไม่ล็อคความสูง; ย้าย Current Task ไปก่อน Milestone ทั้งหมด",
      "Go race tests และ vet ผ่าน Browser regression ผ่าน 41 ข้อ และตรวจพอร์ตหลักแบบอ่านอย่างเดียวผ่าน รวมลำดับ Current Task"
    ],
    "tasks": [
      "T-409",
      "T-410"
    ],
    "refs": [
      "tracker/static/usecases.js",
      "tracker/templates/usecases.html",
      "tracker/usecase_channels.go",
      "tracker/usecases.go",
      "tracker/templates/overview.html",
      "tracker/e2e/usecases-check.mjs",
      "tracker/README.md"
    ]
  },
  {
    "id": "C-023",
    "at": "2026-10-30T20:44:48+07:00",
    "agent": "Codex",
    "title": "Workflow ซ้ายไปขวา Revision history Approve และตารางหุบตาม Module",
    "summary": "ทำคำขอชุดต่อเนื่องครบ: layout แนวนอน, ประวัติการบันทึกพร้อม rollback, อนุมัติราย Use case ให้ Agent ใช้พัฒนา, toolbar อังกฤษ และตารางจัดกลุ่ม Module ชื่อเต็ม งานเหล่านี้รอผู้ใช้ตรวจ ไม่ได้ approve Use case จริงแทนผู้ใช้",
    "changes": [
      "ร่างเริ่มต้นแนวนอนตามขนาดข้อความและปุ่ม Arrange horizontally ที่ไม่ล้าง shape/เส้นพร้อม Undo",
      "Snapshot ทุก Save ในไฟล์เดียวกับ current graph เขียน atomic; Restore สร้าง revision ใหม่และรักษาประวัติ รองรับไฟล์ที่บันทึกก่อนเปิดใช้ history",
      "Approve บันทึก reviewer/time/note ผูก source hash และ diagram revision/hash พร้อม audit trail; source/save/restore ทำให้ต้องยืนยันใหม่",
      "เพิ่ม API history/restore/approval พร้อม CSRF validation และ revision conflict รวมกติกาให้ Agent ตรวจ approval ล่าสุดก่อนพัฒนา TNSU product",
      "Toolbar แยก Shapes/Edit/View + More ด้วยปุ่มอังกฤษ; ตารางหุบ/ขยายตาม Module แสดงชื่อเต็มและจำสถานะผ่าน live refresh",
      "Go race suite และ vet ผ่าน Browser ผ่าน 59 ข้อด้วยข้อมูล /tmp รวมการบันทึก-approve-เปลี่ยน-rollback และกรณี approve ร่างครั้งแรก"
    ],
    "tasks": [
      "T-411",
      "T-412",
      "T-413",
      "T-414"
    ],
    "refs": [
      "tracker/diagram_history.go",
      "tracker/usecase_approval.go",
      "tracker/static/usecases.js",
      "tracker/static/usecase-groups.js",
      "tracker/templates/usecases.html",
      "tracker/e2e/usecases-check.mjs",
      "tracker/README.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-024",
    "at": "2026-10-30T21:08:18+07:00",
    "agent": "Codex",
    "title": "เก็บ UI Approval/History และ Export PNG แบบพื้นหลังขาว/โปร่งใส",
    "summary": "จัด review panels ให้เป็นสัดส่วน และเพิ่ม Export PNG ที่เก็บภาพครบทั้ง diagram พร้อมเลือกพื้นหลัง อ่านผลรีวิวล่าสุดพบ T-408–T-414 ได้รับอนุมัติแล้วและคงสถานะ Reviewed ตามฟอร์มเดิม ขณะนี้รับงานถัดไปเพื่อเติม task brief ที่ยังมีแต่หัวข้อ",
    "changes": [
      "การ์ด Approval แสดงสถานะ ผู้ตรวจ เวลา หมายเหตุ และ audit timeline; เมื่ออนุมัติแล้วซ่อนฟอร์มว่าง",
      "Revision history แยกวันที่/เวลา รายละเอียด Current และ actions พร้อม empty/error/loading; Refresh ล้มเหลวไม่ล้างรายการเดิม",
      "More → Export PNG เปิด dialog เลือก White / Transparent; ส่งออกเต็ม diagram ไม่รวมกริด/จุดลาก ปรับขนาดตามขีดจำกัด canvas",
      "Browser ผ่าน 70 ข้อ รวมตรวจ alpha channel และขนาด PNG จริง รวม screenshot ธีมสว่าง/มืด/มือถือ"
    ],
    "tasks": [
      "T-415",
      "T-416"
    ],
    "refs": [
      "tracker/static/usecase-review.css",
      "tracker/static/usecase-export.js",
      "tracker/static/usecases.js",
      "tracker/templates/usecases.html",
      "tracker/e2e/usecases-check.mjs"
    ]
  },
  {
    "id": "C-025",
    "at": "2026-10-30T21:19:31+07:00",
    "agent": "Codex",
    "title": "เติม task briefs และคำถามเพื่อเริ่มงานได้จริง",
    "summary": "ผู้ใช้พบว่า T-303 และหลายงานมีเพียงหัวข้อ จึง audit backlog เทียบฐานความรู้และเติมรายละเอียด 19 รายการ โดย 13 งานที่ยังไม่เริ่มมี 39 คำถามระบุผู้ที่ควรตอบ/เหตุผลอย่างชัดเจน ส่วนงานเก่าเพิ่มบริบทตามหลักฐานและคงสถานะ/ผลรีวิวเดิม",
    "changes": [
      "เพิ่ม description, deliverables, dependencies, suggested_owner และ questions ในข้อมูล Task และหน้ารายละเอียด",
      "T-303 มีขั้นตอนเก็บ mandate/inventory/capacity/RTO-RPO/งบและเจ้าของ operation ก่อนเปรียบเทียบ hosting และให้ผู้มีอำนาจยืนยัน ADR",
      "เติม brief ให้ T-203/T-304/T-501–T-506/T-601–T-602/T-701–T-702 พร้อมคำถามด้านขอบเขต/ผู้ตัดสินใจ/ข้อมูลต้นทาง ไม่รอค่าคงที่ที่ต้องเป็น configuration",
      "เพิ่มบริบทให้ T-102/T-103/T-105/T-106/T-301 และแก้ summary T-302 เป็นผลเลือก SQL Server ที่อนุมัติแล้ว",
      "คำถามมี ID คงที่ ผู้ที่ควรตอบ เหตุผล และช่องบันทึกคำตอบ/ผู้ยืนยัน/เวลา/source; ยังไม่มีการเลือก hosting หรือแต่งคำตอบให้",
      "Go race suite และ vet ผ่าน Browser task brief 9 ข้อผ่าน พร้อมตรวจ refs ทุกไฟล์มีอยู่จริง และ screenshot T-303 บน desktop/mobile"
    ],
    "tasks": [
      "T-417",
      "T-203",
      "T-303",
      "T-304",
      "T-501",
      "T-502",
      "T-503",
      "T-504",
      "T-505",
      "T-506",
      "T-601",
      "T-602",
      "T-701",
      "T-702"
    ],
    "refs": [
      "tracker/data/milestones.json",
      "tracker/templates/task.html",
      "tracker/data.go",
      "tracker/task_brief_test.go",
      "tracker/e2e/task-brief-check.mjs",
      "docs/agent/15-preparation-task-briefs.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-026",
    "at": "2026-10-31T02:12:41+07:00",
    "agent": "Codex",
    "title": "เก็บงานที่ผ่านรีวิวและตรวจชุดส่งมอบก่อน commit",
    "summary": "อ่านผลรีวิวล่าสุดแล้ว T-408–T-417 อยู่ใน Reviewed ครบ ไม่มี Reject/Hold ค้าง จึงรวบรวม code เอกสาร task briefs และผลอนุมัติให้เป็นชุดส่งมอบเดียว โดยคงงานและประวัติรีวิวไว้ครบ ตรวจใหม่บนข้อมูลชั่วคราวก่อนบันทึก Git",
    "changes": [
      "เก็บฟีเจอร์ Use cases/diagram editor, revision history, approval gate, PNG export, module groups และ UI ตามงานที่ผู้ใช้อนุมัติแล้ว",
      "เก็บ task briefs 19 รายการ คำถาม 39 ข้อ และเอกสารกติกา Agent ที่ผ่านรีวิว โดยไม่เปลี่ยนคำถามที่ยังเปิดหรือผลตัดสินใจ hosting",
      "อ่านผลอนุมัติล่าสุดของ T-415/T-416/T-417 จาก review form และรักษาผล/เวลาเดิม ไม่เติมชื่อผู้รีวิวแทนข้อมูลที่ว่าง",
      "Go test -race -count=1 ./... และ go vet ./... ผ่าน พร้อม syntax/JSON/diff checks",
      "Browser regression ผ่าน 70 ข้อ และ task briefs ผ่าน 9 ข้อบนข้อมูล /tmp รวม 79 assertions โดยไม่แก้ Use case จริง"
    ],
    "tasks": [
      "T-408",
      "T-409",
      "T-410",
      "T-411",
      "T-412",
      "T-413",
      "T-414",
      "T-415",
      "T-416",
      "T-417"
    ],
    "refs": [
      "tracker/data/milestones.json",
      "tracker/data/tests.json",
      "tracker/README.md",
      "docs/agent/15-preparation-task-briefs.md",
      "AGENTS.md"
    ]
  },
  {
    "id": "C-027",
    "at": "2026-10-31T02:15:17+07:00",
    "agent": "Codex",
    "title": "เปลี่ยนงานจัดทำ matrix ฉบับร่างที่เสร็จแล้วเป็น Done",
    "summary": "ตามคำขอให้ปิดงานที่เรียบร้อยแล้ว เปลี่ยน T-201/T-202 จาก Review เป็น Done ในขอบเขตการจัดทำฉบับร่าง v0.1 เอกสารมีอยู่ครบตาม checkpoint C-004 ส่วนคำถามและการยืนยันบทบาท/อำนาจ/สิทธิ์จาก BA/Security ยังเปิด review.todo ไว้ตามจริง",
    "changes": [
      "T-201 Role Matrix draft และ T-202 Security Matrix draft เป็น Done พร้อม finished อ้างอิงเวลาบันทึกงานเสร็จใน C-004",
      "คง review state/checklist/history เดิมทุกช่อง และไม่ตั้ง Reviewed/Approve แทนผู้ตรวจ",
      "คงสถานะและข้อมูล task อื่นทุกงาน รวมงานที่ Reviewed แล้วและงาน Todo ที่ยังรอข้อมูล"
    ],
    "tasks": [
      "T-201",
      "T-202"
    ],
    "refs": [
      "tracker/data/milestones.json",
      "docs/agent/13-role-matrix.md",
      "docs/agent/14-security-matrix.md"
    ]
  },
  {
    "id": "C-028",
    "at": "2026-10-31T02:59:35+07:00",
    "agent": "Codex",
    "title": "ทบทวน Use cases ครบทุกกรณีและแก้ทางแยกที่กระทบสิทธิ์ผู้เรียน",
    "summary": "ตรวจครบ 162 กรณี เทียบแหล่งทางการไทยและแยก UNI/SS ไม่ทำผู้ปกครองเป็น gate มหาวิทยาลัยทุกคน แก้ข้อเสนอ workflow 60 รายการ เพิ่ม decision 47 จุด พร้อมเปิดคำถามนโยบาย ไม่ approve แทนผู้ใช้",
    "changes": [
      "เพิ่มรายงานผลครบ 162 รายการและคำถาม UR-Q01…10 พร้อมผู้ตอบที่เสนอ/หลักฐานไทย",
      "แก้เส้นเอกสารเพิ่มให้วนกลับตรวจ แยกไม่เปิดรุ่น รอเงิน ต่อ/ย้ายหอ ฉุกเฉินและ EC ไม่ไหลไปผลสำเร็จผิด",
      "ใช้ canonical wf metadata ร่วมกันใน draft/reset/generated docs พร้อม source hash และคง diagram ที่บันทึกเดิม",
      "ตรวจโครงสร้างและ terminal paths ทุก use case; Go/race/vet ผ่าน; browser 70+25 ผ่าน; รันเวอร์ชันใหม่บน 8099"
    ],
    "tasks": [
      "T-108"
    ],
    "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",
      "tracker/workflow.go",
      "tracker/workflow_test.go",
      "tracker/static/usecases.js",
      "tracker/e2e/workflow-review-check.mjs",
      "tracker/data/tests.json"
    ]
  },
  {
    "id": "C-029",
    "at": "2026-10-31T11:21:44+07:00",
    "agent": "Codex",
    "title": "Mockup workspace ใช้ screen artifacts ร่วมกันใน Sitemap และ Page flow",
    "summary": "เพิ่มเมนู Mockup ครบ 3 หน้าย่อย พร้อม 170 screen records และ Page flow ตาม canonical 162 Use cases แยกภาพ/state/component/source และ revision ที่แก้ร่วมกันอย่างเป็นระบบ",
    "changes": [
      "นำเข้ารหัสหน้าจอ 164 รหัสเป็น wireframe ร่าง 6 states และอ้างภาพ proposal เดิม 6 ภาพ พร้อม provenance ที่ไม่อ้างว่า final",
      "สร้าง Sitemap ภาพหน้าจอบนลงล่างและตัวกรอง Module/Channel; Page flow ซ้ายไปขวารักษา source decisions/labels/loops พร้อม mapping ที่แก้ได้",
      "เพิ่ม Screen Listing/detail และ links กลับ Use case / artifact / component contracts",
      "เพิ่ม grid/zoom/pan/fit/arrange, repeat screen instances, labelled connections/arrowheads, Undo/Redo และ revision/conflict/restore แบบ atomic",
      "ตรวจ artifacts/ทุก flow, Go/race/vet และ browser 147 ข้อ ผ่านบนข้อมูลชั่วคราว; เปลี่ยนตัวรัน 8099 และตรวจ GET โดยไม่บันทึกข้อมูลทดสอบจริง"
    ],
    "tasks": [
      "T-418"
    ],
    "refs": [
      "mockups/README.md",
      "docs/agent/17-mockup-workspace.md",
      "tracker/mockup_catalog.go",
      "tracker/mockup_store.go",
      "tracker/mockups.go",
      "tracker/static/mockups.js",
      "tracker/e2e/mockups-check.mjs",
      "tracker/data/tests.json"
    ]
  }
]