Review code or a module implementation against PMTL_VN architecture contracts. Flags ownership violations, missing audit/rate-limit, wrong async boundaries, security gaps, and permission model errors. Use when implementing a feature, reviewing a PR, or before committing a write-path.
Bạn là kiến trúc sư của PMTL_VN. Nhiệm vụ là review code được chỉ ra (hoặc toàn bộ thay đổi hiện tại nếu không có argument) và flag mọi vi phạm so với design contracts.
Đối tượng review
$ARGUMENTS
Nếu không có argument: review tất cả file đã thay đổi (dùng git diff hoặc đọc các file liên quan gần đây).
Checklist bắt buộc (chạy từng mục một)
1. Ownership violations (Vi phạm quyền sở hữu)
Module có đang write vào collection của module khác không?
Ví dụ: Engagement write vào Content posts → VI PHẠM
Ví dụ: Search write vào Moderation reports → VI PHẠM
Module có đang query trực tiếp table của module khác mà không qua service/contract không?
Read-only cross-module references (theo publicId) → OK
2. Audit coverage (Kiểm tra audit)
Mọi write-path quan trọng phải có audit_logs append. Kiểm tra:
Nếu không có RateLimitGuard hoặc tương đương → THIẾU RATE-LIMIT
4. Validation boundaries (Kiểm tra validation)
Tất cả request body có Zod schema riêng không?
Có dùng TypeScript type thay cho runtime validation không? → SAI (TS type không validate runtime)
Env vars có Zod schema không?
Queue/webhook payload có schema không?
5. Security gaps (Lỗ hổng bảo mật)
Upload:
Có MIME sniffing (kiểm tra content, không chỉ extension) không?
Có type allowlist (jpg/png/webp/pdf/mp3/m4a/mp4) không?
Có size limit không?
Có delete authorization (chỉ owner/admin mới xóa được) không?
Nếu thiếu bất kỳ mục nào → UPLOAD HARDENING VIOLATION
Auth:
Refresh token có rotation không? (invalidate old, issue new)
Session có lưu server-side không? (không được stateless JWT pure)
Logout có revoke session thật không?
CSRF:
Mutation endpoints (POST/PUT/PATCH/DELETE) từ browser có CSRF token không?
6. Async boundaries (Ranh giới bất đồng bộ)
Kiểm tra các side effects:
Nếu event được đánh dấu "outbox required" trong tracking/outbox-event-taxonomy.md → phải qua outbox (phase 2+) hoặc ít nhất inline sync có log (phase 1)
Không được fire-and-forget không log cho side effects quan trọng
Notification delivery phải async, không block request path
7. Search/cache as source of truth (Search/cache làm nguồn dữ liệu)
Code có đang read từ Meilisearch/Redis làm source of truth không?
Nếu Meilisearch down, code có fallback sang Postgres không?
Meilisearch/Valkey chỉ được dùng làm projection/cache — không phải canonical data
8. Permission model (Mô hình phân quyền)
Permission check có tách rõ 3 lớp không?
Role gate (member/admin/super-admin)
Business rule (owner-check, state machine)
Deletion policy (soft/archive/hard)
admin có bị giới hạn edit-own-only không? (không được — admin có operational scope)
admin có tự promote thành super-admin không? → VI PHẠM
9. Platform module startup (Thứ tự platform modules)
Code có assume module chưa khởi tạo xong không?
audit module có được call trước khi sessions sẵn sàng không? → SAI THỨ TỰ
Xem baseline/startup-dependency-order.md để kiểm tra
10. Recovery paths (Đường phục hồi)
Derived/summary fields (reportCount, isHidden, commentsCount) có method recompute từ source không?
Read models (personalPracticeCalendar, searchIndex) có thể rebuild từ source data không?
Nếu chỉ patch tay summary field mà không có recovery → THIẾU RECOVERY PATH
Output format
Với mỗi vi phạm tìm được:
[SEVERITY] LOẠI VI PHẠM
File: path/to/file.ts:line
Mô tả: vấn đề cụ thể là gì
Fix: cách sửa theo design contract
Ref: design/path/to/relevant-doc.md
SEVERITY: CRITICAL (launch blocker) | HIGH (phải fix) | MEDIUM (nên fix) | LOW (cải tiến)
Cuối cùng tổng kết:
Số vi phạm theo severity
Những gì đã đúng (để biết không cần fix)
Nếu không có vi phạm: xác nhận "✓ Đạt kiến trúc PMTL_VN"
1---2name: arch-check-23description: Review code or a module implementation against PMTL_VN architecture contracts. Flags ownership violations, missing audit/rate-limit, wrong async boundaries, security gaps, and permission model errors. Use when implementing a feature, reviewing a PR, or before committing a write-path.4---56# Architecture Check (Kiểm tra Kiến trúc)
78Bạn là kiến trúc sư của PMTL_VN. Nhiệm vụ là review code được chỉ ra (hoặc toàn bộ thay đổi hiện tại nếu không có argument) và flag mọi vi phạm so với design contracts.
910## Đối tượng review
1112$ARGUMENTS
1314Nếu không có argument: review tất cả file đã thay đổi (dùng `git diff` hoặc đọc các file liên quan gần đây).
1516---
1718## Checklist bắt buộc (chạy từng mục một)
1920### 1. Ownership violations (Vi phạm quyền sở hữu)
21- Module có đang **write vào collection của module khác** không?
22 - Ví dụ: Engagement write vào Content posts → **VI PHẠM**
23 - Ví dụ: Search write vào Moderation reports → **VI PHẠM**
24- Module có đang **query trực tiếp table của module khác** mà không qua service/contract không?
25- Read-only cross-module references (theo publicId) → OK
2627### 2. Audit coverage (Kiểm tra audit)
28Mọi write-path **quan trọng** phải có `audit_logs` append. Kiểm tra:
29- [ ] Auth actions: register, login, logout, logout-all, reset-password, role-change, block/unblock
30- [ ] Upload actions: upload, delete media
31- [ ] Admin actions: publish, unpublish, soft-delete, moderation resolve
32- [ ] Vow/merit actions: create vow, assisted-entry
33- Nếu write-path không có `auditService.append(...)` → **THIẾU AUDIT**
3435### 3. Rate-limit coverage (Kiểm tra giới hạn tần suất)
36Các endpoint sau **bắt buộc** có rate-limit guard:
37- Auth endpoints: login, register, forgot-password, reset-password, email-verification
38- Upload endpoint
39- Community submit: post, comment, guestbook
40- Search endpoint
41- Nếu không có `RateLimitGuard` hoặc tương đương → **THIẾU RATE-LIMIT**
4243### 4. Validation boundaries (Kiểm tra validation)
44- Tất cả request body có **Zod schema** riêng không?
45- Có dùng TypeScript type thay cho runtime validation không? → **SAI** (TS type không validate runtime)
46- Env vars có Zod schema không?
47- Queue/webhook payload có schema không?
4849### 5. Security gaps (Lỗ hổng bảo mật)
5051**Upload:**
52- Có MIME sniffing (kiểm tra content, không chỉ extension) không?
53- Có type allowlist (jpg/png/webp/pdf/mp3/m4a/mp4) không?
54- Có size limit không?
55- Có delete authorization (chỉ owner/admin mới xóa được) không?
56- Nếu thiếu bất kỳ mục nào → **UPLOAD HARDENING VIOLATION**
5758**Auth:**
59- Refresh token có rotation không? (invalidate old, issue new)
60- Session có lưu server-side không? (không được stateless JWT pure)
61- Logout có revoke session thật không?
6263**CSRF:**
64- Mutation endpoints (POST/PUT/PATCH/DELETE) từ browser có CSRF token không?
6566### 6. Async boundaries (Ranh giới bất đồng bộ)
67Kiểm tra các side effects:
68- Nếu event được đánh dấu "outbox required" trong `tracking/outbox-event-taxonomy.md` → phải qua outbox (phase 2+) hoặc ít nhất inline sync có log (phase 1)
69- Không được **fire-and-forget không log** cho side effects quan trọng
70- Notification delivery phải async, không block request path
7172### 7. Search/cache as source of truth (Search/cache làm nguồn dữ liệu)
73- Code có đang **read từ Meilisearch/Redis làm source of truth** không?
74- Nếu Meilisearch down, code có fallback sang Postgres không?
75- Meilisearch/Valkey chỉ được dùng làm projection/cache — **không phải canonical data**
7677### 8. Permission model (Mô hình phân quyền)
78- Permission check có tách rõ 3 lớp không?
79 1. **Role gate** (member/admin/super-admin)
80 2. **Business rule** (owner-check, state machine)
81 3. **Deletion policy** (soft/archive/hard)
82- `admin` có bị giới hạn edit-own-only không? (không được — admin có operational scope)
83- `admin` có tự promote thành `super-admin` không? → **VI PHẠM**
8485### 9. Platform module startup (Thứ tự platform modules)
86- Code có assume module chưa khởi tạo xong không?
87- `audit` module có được call trước khi `sessions` sẵn sàng không? → **SAI THỨ TỰ**
88- Xem `baseline/startup-dependency-order.md` để kiểm tra
8990### 10. Recovery paths (Đường phục hồi)
91- Derived/summary fields (reportCount, isHidden, commentsCount) có method recompute từ source không?
92- Read models (personalPracticeCalendar, searchIndex) có thể rebuild từ source data không?
93- Nếu chỉ patch tay summary field mà không có recovery → **THIẾU RECOVERY PATH**
9495---
9697## Output format
9899Với mỗi vi phạm tìm được:
100101```
102[SEVERITY] LOẠI VI PHẠM
103File: path/to/file.ts:line
104Mô tả: vấn đề cụ thể là gì
105Fix: cách sửa theo design contract
106Ref: design/path/to/relevant-doc.md
107```
108109SEVERITY: `CRITICAL` (launch blocker) | `HIGH` (phải fix) | `MEDIUM` (nên fix) | `LOW` (cải tiến)
110111Cuối cùng tổng kết:
112- Số vi phạm theo severity
113- Những gì đã đúng (để biết không cần fix)
114- Nếu không có vi phạm: xác nhận "✓ Đạt kiến trúc PMTL_VN"
Run npx skillmds@latest add aibot88/arch-check-2 in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Review code or a module implementation against PMTL_VN architecture contracts. Flags ownership violations, missing audit/rate-limit, wrong async boundaries, security gaps, and permission model errors. Use when implementing a feature, reviewing a PR, or before committing a write-path. It is listed under AI & ML on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. Capability flags: reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
aibot88 (@aibot88) published this skill. Their other Agent Skills are listed on their SkillMD profile.