A.4 Debt ID index — cross-reference ของ debt
cross-reference ระหว่าง debt ID กับ volume ที่อ้างถึง debt นั้น
แหล่งความจริงของชื่อ/คำอธิบายสั้น = Volume 14 (docs/volume-15-tech-debt/) — ตารางนี้ต้อง MATCH ชื่อใน Vol 14 เสมอ
วิธีใช้
เมื่อแก้ debt ตัวใดตัวหนึ่งใน codebase ให้ดูตารางนี้เพื่อหา volume ทั้งหมดที่อ้างถึง — ต้องอัปเดต volume เหล่านั้นด้วย (ตาม correction protocol ใน A.8)
Security debt (SEC-1 ถึง SEC-11)
| ID | คำอธิบายสั้น (ตาม Vol 14) | ความรุนแรง | อ้างถึงใน volume |
|---|---|---|---|
| SEC-1 | Command injection ผ่าน qpdf execSync | Critical | 2.8, 3.7, 3.10, 9.6, 14.1, 15.0, 15.2 |
| SEC-2 | GraphQL playground + introspection เปิดใน production | Critical | 3.2, 9.5, 14.1, 15.2 |
| SEC-3 | Production device keys เก็บใน source code | Critical | 2.8, 3.10, 9.5, 14.1, 15.2 |
| SEC-4 | JWT_SECRET เป็นค่า default 'secret' | Critical | 3.2, 9.5, 14.1, 15.2 |
| SEC-5 | centralize-api CORS origin '*' | Critical | 5.5, 9.5, 14.1, 15.2 |
| SEC-6 | trustServerCertificate: true บน MSSQL | High | 5.5, 9.5, 14.2 |
| SEC-7 | axois typosquat และ axios หายจาก node_modules | High | 4.8, 14.2, 15.2 |
| SEC-8 | PII ใน URL path | High | 3.10, 9.5, 14.2 |
| SEC-9 | typosquat และ placeholder packages ใน dependencies | High | 14.2, 15.2 |
| SEC-10 | ไม่มี rate limiting ทุก endpoint | High | 9.5, 14.2 |
| SEC-11 | GCP service account key commit ใน repo | Critical | 2.8, 14.1, 15.2 |
Performance debt (PERF-1 ถึง PERF-8)
| ID | คำอธิบายสั้น (ตาม Vol 14) | ความรุนแรง | อ้างถึงใน volume |
|---|---|---|---|
| PERF-1 | execSync ใน request handler | Critical | 2.8, 3.7, 3.10, 14.3, 15.2 |
| PERF-2 | Apollo fetchPolicy 'no-cache' ทุก query | High | 6.3, 7.3, 14.3, 15.3 |
| PERF-3 | Session lookup ด้วย JSON LIKE | High | 8.10, 8.11, 14.3, 15.3, 15.7 |
| PERF-4 | N+1 RBAC query ทุก field | High | 3.10, 9.4, 14.3 |
| PERF-5 | Approval-chain fetch ข้าม service แบบ synchronous | High | 3.10, 14.3 |
| PERF-6 | God controller 3,179 บรรทัด | High | 3.10, 11.3, 14.3, 15.4 |
| PERF-7 | phpMyAdmin เปิดสู่สาธารณะบน port 8093 | Critical | 12.4, 14.1, 14.3, 15.2, 15.8 |
| PERF-8 | network_mode: host ใน docker-compose | High | 12.4, 14.3, 15.8 |
Correctness debt (CORR-1 ถึง CORR-9)
| ID | คำอธิบายสั้น (ตาม Vol 14) | ความรุนแรง | อ้างถึงใน volume |
|---|---|---|---|
| CORR-1 | Cross-schema write ไม่มี transaction boundary | Critical | 3.10, 8.10, 8.11, 14.4, 15.4, 15.7 |
| CORR-2 | Transaction ถูก swallow ใน session repository | Critical | 8.10, 8.11, 14.4, 15.3 |
| CORR-3 | responError throw เสมอ แต่ caller เขียนต่อ | High | 3.10, 14.4 |
| CORR-4 | ตรรกะ RBAC ไม่สม่ำเสมอ | Critical | 3.10, 8.10, 9.4, 9.11, 14.4, 15.3 |
| CORR-5 | centralize-api log SQL ใน production | High | 5.5, 14.4, 15.2 |
| CORR-6 | syncModelToTable รันทุกครั้งที่ boot | Critical | 3.10, 8.4, 8.11, 14.4, 15.2 |
| CORR-7 | คอลัมน์ซ้ำใน Sequelize model | High | 8.11, 14.4, 15.2 |
| CORR-8 | PDF deletion race | High | 3.10, 14.4 |
| CORR-9 | httpRequest.js พังใน cu-central-api | Med | 4.10, 14.4, 15.2 |
Legacy debt (LEG-1 ถึง LEG-30)
หมายเหตุ: รายการทั้งหมดอยู่ใน Vol 14.5–14.8 — ชื่อด้านล่าง MATCH Vol 14
| ID | คำอธิบายสั้น (ตาม Vol 14) | ความรุนแรง | อ้างถึงใน volume |
|---|---|---|---|
| LEG-1 | Node 12 runtime | Critical | 2.8, 14.5, 15.3 |
| LEG-2 | esm shim ล็อค Node 12 | Critical | 3.2, 14.5, 15.3 |
| LEG-3 | Apollo Server v2 EOL | High | 3.2, 14.5, 15.3 |
| LEG-4 | React 16 EOL + Apollo Client v2 EOL | High | 6.2, 7.2, 14.5, 15.5 |
| LEG-5 | AntD กระจาย major version สองตัว | High | 6.8, 7.8, 14.6, 15.3 |
| LEG-6 | react-scripts 3.4.3 (CRA deprecated) | High | 7.2, 14.6 |
| LEG-7 | Webpack 4 EOL + html-webpack-plugin beta | High | 6.2, 14.6 |
| LEG-8 | ldapjs ไม่ได้รับการพัฒนา | High | 4.3, 14.6, 15.3 |
| LEG-9 | jsonwebtoken v8 | High | 9.5, 14.6, 15.2 |
| LEG-10 | html-pdf + node-qpdf ไม่ได้รับการพัฒนา | High | 3.10, 14.6, 15.3 |
| LEG-11 | mariaDB v2 + mysql2 v2 ทั้งคู่ | Med | 3.5, 14.6 |
| LEG-12 | redis v3 (callback API) | Med | 3.5, 14.6, 15.3 |
| LEG-13 | s, stream, findit — package ไม่ได้ใช้ | Med | 14.6 |
| LEG-14 | _bk files 131 ไฟล์ใน source | High | 6.1, 7.1, 14.7, 15.3 |
| LEG-15 | centralize-api ไม่มี lockfile | Med | 5.2, 14.8, 15.2 |
| LEG-16 | vtrc-web มีทั้ง yarn.lock และ package-lock.json | Med | 6.2, 14.8, 15.2 |
| LEG-17 | TypeScript safety ปิดอยู่ | Med | 5.2, 14.8 |
| LEG-18 | ไม่มี engines field ทุก package.json | Med | 14.8, 15.2 |
| LEG-19 | In-process node-schedule สำหรับ cron | High | 3.8, 12.11, 14.8 |
| LEG-20 | axios instances 16+ ตัวใน backoffice | High | 7.6, 14.8 |
| LEG-21 | GraphQL operations ไฟล์ใหญ่ | High | 6.3, 7.3, 14.7 |
| LEG-22 | Role-based route duplication | High | 7.1, 14.7 |
| LEG-23 | Resolver ไฟล์เดียว 3,716 บรรทัด | High | 3.6, 14.7 |
| LEG-24 | console.log 77 ครั้งในไฟล์เดียว | Med | 3.7, 14.7 |
| LEG-25 | Typo ใน ENUM ที่ production | Med | 3.5, 14.7 |
| LEG-26 | UI library ซ้อนกัน 4 ตัว | Med | 7.8, 14.7 |
| LEG-27 | xlsx (SheetJS community) มี prototype-pollution CVE | High | 3.10, 14.6, 15.2 |
| LEG-28 | sha512crypt-node | Med | 4.3, 14.6 |
| LEG-29 | firebase-admin v9 + googleapis v59 | Med | 14.6 |
| LEG-30 | Error message ผสม TH/EN | Med | 3.10, 14.7 |
สรุปจำนวน debt
| Prefix | รวม (ตาม Vol 14 index) |
|---|---|
| SEC | 11 |
| PERF | 8 |
| CORR | 9 |
| LEG | 30 |
| รวม | 58 |
หลักการอัปเดต
เมื่อแก้ debt ตัวใดใน codebase:
- อัปเดต row ข้างต้น (ลบ row หรือเปลี่ยนสถานะเป็น "แก้แล้ว")
- อัปเดต volume ที่อ้างถึง debt นั้น (ดู column "อ้างถึงใน volume")
- บันทึกใน A.8 Changelog ว่า debt ตัวนั้นถูกแก้เมื่อไหร่
- ห้ามสลับชื่อ SEC/LEG ระหว่าง ID — ชื่อต้องตรง Vol 14 เสมอ