ToanMobile

qc

"Chạy lint, unit test và QA gate cho dự án. Phát hiện build tool trước (Gradle, npm/pnpm/yarn, pytest, go, cargo, xcodebuild, dotnet); các mục ktlint/Metalava/Translation gate chỉ dành cho dự án Android/Gradle."

ToanMobile 2 1 Actualitzat fa 1 setm.
GitHub

Instal·la

npx skillscat add toanmobile/agent-workbench/qc

Instal·la des del registre de SkillsCat.

SKILL.md

Quality Control (QC) & Automated Testing

Skill tự động hóa quy trình kiểm thử chất lượng, kiểm tra cú pháp code (linting), unit tests, tính tương thích API (Metalava), độ phủ bản dịch đa ngôn ngữ và chạy production QA gates cho dự án Target Project / Codebase.

0. Phát hiện build tool (chạy trước, mọi dự án)

Các mục 1–5 bên dưới là lệnh Android/Gradle. Với dự án khác, xác định build tool từ file ở gốc
repo rồi chạy lệnh test/lint tương ứng — không chạy ./gradlew trên dự án không có Gradle:

File ở gốc repo Test Lint / static check
gradlew, build.gradle(.kts) ./gradlew testDebugUnitTest (mục 1–5) ./gradlew ktlintCheck detekt
package.json npm test (hoặc pnpm test / yarn test theo lockfile) npm run lint nếu script tồn tại
pyproject.toml, setup.cfg, pytest.ini pytest -q ruff check . nếu có cấu hình
go.mod go test ./... go vet ./...
Cargo.toml cargo test cargo clippy -- -D warnings
*.xcodeproj, *.xcworkspace, Package.swift xcodebuild test -scheme <scheme> -destination '<dest>' hoặc swift test swiftlint nếu có cấu hình
*.sln, *.csproj dotnet test dotnet format --verify-no-changes
ProjectSettings/ProjectVersion.txt, Assets/ (Unity) python3 .agents/devkit/scripts/run_unity_tests.py python3 .agents/devkit/scripts/lint_unity_gc.py Assets/

Nếu có nhiều build tool (monorepo) thì chạy theo module bị đổi. Không tìm thấy build tool → báo rõ
"không xác định được lệnh test", không claim PASS.

1. Quick Verification (Module-scoped, Android/Gradle)

Chạy kiểm tra nhanh cho module đang chỉnh sửa trước khi commit:

# 1. Kiểm tra định dạng code (ktlint)
./gradlew :<module>:ktlintCheck

# 2. Biên dịch source và test source set
./gradlew :<module>:compileDebugKotlin :<module>:compileDebugUnitTestKotlin

# 3. Chạy unit tests của module (Kotest FunSpec / JUnit)
./gradlew :<module>:testDebugUnitTest --tests "*<TestClass>*"

# 4. Kiểm tra tương thích API Metalava (với các thư viện public :libs:*)
./gradlew :libs:<library_module>:metalavaCheckCompatibilityRelease

2. Translation & Localization Verification

Đảm bảo mọi chuỗi giao diện mới có mặt đầy đủ ở toàn bộ các ngôn ngữ/locale được dự án hỗ trợ, không bị thiếu hoặc fallback sai:

# Kiểm tra thiếu bản dịch (Fail-closed build gate)
./gradlew :<localization_module>:checkMissingTranslations

3. Unit-Test Identity Baseline (không âm thầm mất test)

Xác thực tính liên tục của bộ test: không được âm thầm xóa, đổi tên hay bỏ qua test.

  • Nếu dự án có script/baseline riêng cho việc này (khai trong .agents/local/ hoặc tài liệu của
    dự án), chạy script đó — DevKit không ship script này.
  • Nếu không có: so danh sách test case (<testcase classname=… name=…> trong
    <module>/build/test-results/**/TEST-*.xml) trước và sau thay đổi. Test biến mất hoặc chuyển
    sang skipped phải có lý do được User chấp nhận, không thì là FAIL.

4. Project-wide Quality Checks

Chạy kiểm thử toàn bộ dự án:

# Chạy toàn bộ ktlint
./gradlew ktlintCheck

# Chạy toàn bộ unit test
./gradlew testDebugUnitTest

# Kiểm tra Detekt tĩnh
./gradlew detekt

5. Production Release QA Gate (nếu dự án có)

Nếu dự án có release/pre-release gate riêng (lệnh khai trong .agents/local/, README hoặc CI của
dự án), chạy đúng lệnh đó phục vụ release verification — DevKit không ship gate này. Không bỏ qua
hay nới gate nào của dự án; chỉ báo PASS khi command thật exit 0. Dự án không có gate thì nói rõ,
không claim đã qua release gate.

6. Quy chuẩn kết quả (Evidence Standards)

  • Proof of PASS (Gradle): Đọc trực tiếp từ file XML <module>/build/test-results/**/TEST-*.xml:
    tests > 0 AND failures = 0 AND errors = 0.
  • Proof of PASS (build tool khác): output thật của runner có số test > 0 và 0 fail
    (ví dụ Tests: 12 passed, 12 passed in 0.8s, ok ./..., test result: ok. 12 passed).
  • Cảnh báo: Kết quả UP-TO-DATE hoặc No tests found (total = 0) KHÔNG được tính là PASS.
  • Mọi lỗi fail phải được phân tích nguyên nhân gốc (Root Cause) trước khi sửa code.

7. Kiểm tra chất lượng test (JS/TS, nguồn: goldbergyoni/javascript-testing-best-practices)

  • Trước khi tin một lần chạy xanh trên dự án JS/TS: grep không còn .only/.skip/xit/fit và không có test thiếu assertion (linter test: jest/expect-expect, no-focused-tests, no-disabled-tests hoặc tương đương nếu dự án đã cài).
  • Coverage: nguồn chỉ nói ~80% là đủ và 100% gây xao nhãng; việc coi nó là sàn là quy ước DevKit, chỉ áp khi dự án chưa có ngưỡng (ngưỡng của repo/User thắng, theo tdd-workflow). Thấy module quan trọng có coverage cao mà test yếu thì chạy mutation testing (ví dụ Stryker) trên module đó.
  • Chi tiết (flaky, cô lập dữ liệu, mã sạch): skill tdd-workflow → references/testing-practices.md.