skill งานจริง — review-ado-pr · super-front-end · agent-executable
3 skill ที่ผูกกับงานที่ทำอยู่จริง: review PR .NET บน Azure DevOps, เขียน Angular ของ SuperApp ตาม convention จริง และ probe ว่า step ใน runbook infra agent รันเองได้ไหม
อัปเดต: 2026-08-06
3 ตัวนี้เป็น skill ล้วน ไม่มี agent เป็นของตัวเอง — วิ่งบน main thread ในเซสชันปัจจุบัน และผูกกับ domain งานจริง (ไม่ใช่ของทั่วไปแบบ dev-team)
1. /review-ado-pr — review PR .NET บน Azure DevOps
Input: URL เต็มของ PR เช่น https://dev.azure.com/{org}/{project}/_git/{repo}/pullrequest/1234 — parse ไม่ได้ครบ บอกว่า parse ได้อะไรแล้วถาม ห้ามเดา
Scope: Backend .NET เท่านั้น (Backend_*, Clean Architecture 4 layer) — ถ้า PR เป็น Frontend_* (Angular) ให้บอกแล้วหยุด
พฤติกรรมที่ต้องรู้ก่อนใช้
ลำดับการทำงาน
- Parse URL → echo กลับให้เห็น (จับเป้าผิดได้ตั้งแต่ต้น)
- Resolve ชื่อ repo → GUID ก่อน แล้วใช้ GUID เป็น
repositoryIdในทุก call ถัดไป - ดึง PR metadata (เก็บ source branch ไว้ใช้ตอนดึงไฟล์) → ดึง diff
- รัน 7 gate จาก
CHECKS.mdบนไฟล์.cs/ migration /appsettings*.jsonที่เปลี่ยน — ดึง context เพิ่ม เฉพาะที่ต้องใช้จริง - ประกอบ finding: severity + category +
file:line+ ปัญหา + วิธีแก้ที่เป็นรูปธรรม - รายงานภาษาไทย นำด้วยบรรทัดนับ แล้วแยกตาม severity 🔴 / 🟡 / 🟢
- โพสต์: 🔴🟡 เป็น inline thread · 🟢 รวมเป็น thread สรุปอันเดียว · เช็ค thread เดิมก่อนเพื่อไม่โพสต์ซ้ำ
7 gates
OWASP Top 10 · Sonar C# rules · EF/async/IO performance · Clean Architecture 4 layer · tests · migration safety · sensitive-data logging
Gate 4 (structure) อ้างอิงไฟล์จริง ไม่ fork กฎ — CLAUDE.md และ SECURITY_README.md ของ repo เป็นเจ้าของถ้อยคำ ถ้าขัดกับ CHECKS.md → ไฟล์จริงชนะ
ความลึกในการสแกน
| ระดับ | ไฟล์ |
|---|---|
| Deep (ดึงมาอ่าน + 7 gates) | Controllers/ · appsettings*.json · Program.cs/DependencyInjection.cs · Migrations/*.cs · Handler ที่ เพิ่มใหม่ · ชื่อไฟล์มี Token/Auth/Session/Secret/Key/Password/Credential/Debug |
| Light (เช็คว่ามีอยู่ ไม่อ่าน) | *.csproj · Dockerfile · docs/, *.md (ข้าม) · tests/ (แค่เช็คว่ามี test คู่ Handler ใหม่) · ไฟล์ที่ถูกลบ |
PR ใหญ่ เป็นเรื่องปกติ — line-content diff เต็มมัก เกิน token cap อย่าพยายามอ่านทั้งกอง ให้ดึงเฉพาะรายการไฟล์แล้วเลือกอ่านตัวที่ signal สูง
2. /super-front-end — Angular ของ SuperApp
Angular 21 + Nx 22 + Module Federation · ใช้เมื่อจะสร้าง/แก้ component, page, service, state, guard, interceptor, routing, MF remote entry, UI Kit component หรือเขียน unit test ฝั่ง frontend
3 repo ที่ครอบคลุม
| Repo | บทบาท |
|---|---|
Frontend_HostAppSuperApp | Shell host (Nx monorepo) |
Frontend_RemoteAppFX | Remote MF app |
Frontend_SuperAppLibraryUi | Shared libs — @exim/ui-kit, @exim/auth-sdk, @exim/util-sdk |
Stack: standalone components + signals + inject() · ng-zorro-antd ~21 + @exim/ui-kit · MSAL + auth-sdk · signal-based local state (.state.ts) ไม่ใช้ NgRx · Jest · SCSS + design tokens · i18n โหลด ARB ตอน runtime · SSR @angular/ssr
กฎ 13 ข้อที่ skill บังคับ
- Standalone เท่านั้น ห้ามสร้าง NgModule
inject()เท่านั้น ห้าม constructor DI- Signals สำหรับ state — ห้าม
BehaviorSubjectสำหรับ UI state - State แยกไฟล์ ห้ามใส่ business logic ใน component
- Typed ห้าม
any— สร้าง interface/type ก่อนใช้ - Lazy load ทุก page (
loadComponent/loadChildren) - ใช้ ng-zorro-antd เป็น UI framework หลัก
- มี
ex-component ใน ui-kit ให้ใช้ก่อน ไม่มีค่อยใช้ ng-zorro ตรง - SCSS + design token ผ่าน
var(--token-name) - ชื่อไฟล์: shell/remote ไม่มี suffix
.component· ui-kit มี - ทุก state/service ต้องมี
.spec.ts - i18n: remote ใช้
.message.ts· shell ใช้libs/shared/messages - remote apps ใช้
.selector.tsเก็บdata-testid
Scaffolding ที่มีขั้นตอนสำเร็จรูป
หน้าใหม่ใน shell · หน้าใหม่ใน remote app · UI Kit component ใหม่ · service ใหม่ — แต่ละอันบอกครบว่าต้องสร้างไฟล์อะไรบ้าง เพิ่ม route ที่ไหน และ export จากไหน
3. /agent-executable — probe ก่อน execute runbook
ก่อนลงมือรัน plan/runbook ที่มี step แตะ infra (az cli, kubectl, database, endpoint จำกัดสิทธิ์) — ห้ามเดาจากคำอธิบายในเอกสารว่า step ไหนทำเองได้ ต้อง probe จริงทีละ step แล้วค่อยจัดกลุ่ม
วิธี probe (read-only + reversible เสมอ)
| Resource | Probe | เช็คอะไร |
|---|---|---|
| Azure CLI / KeyVault | az account show แล้ว az keyvault secret list --vault-name <X> --query "[0].name" | login จริงไหม เห็นชื่อ secret ไหม — ห้าม secret show ที่ print ค่าจริงเพียงเพื่อเช็ค |
| kubectl | kubectl auth can-i <verb> <resource> -n <ns> | มีสิทธิ์จริงไหม ไม่ต้อง exec เข้า pod |
| Database | query read-only เบาสุด (SELECT 1) ผ่าน connection ที่มีอยู่แล้ว | เชื่อมได้จริงไหม |
| HTTP endpoint | curl -sf -o /dev/null -w "%{http_code}" | reachable ไหม |
Probe fail → เก็บ error message จริง (redact ถ้ามีของ sensitive หลุด) เป็นเหตุผล ห้ามเดาเหตุผลเอง
Output ต่อ step
[agent-executable] Task N Step M — <probe ที่ยืนยัน>
[ต้องรอคน] Task N Step M — ต้องการ: <VPN/role/ฯลฯ> (probe: <error สั้นๆ>)