ai-developer-skill-os 9.3.1 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/AGENTS.md +73 -40
- package/.agents/DEV_PROFILE.md +36 -2
- package/.agents/LICENSE +21 -21
- package/.agents/docs/ARCHITECTURE.md +56 -120
- package/.agents/docs/GOVERNANCE.md +3 -3
- package/.agents/docs/SPEC.md +137 -60
- package/.agents/docs/VERSIONING.md +25 -57
- package/.agents/docs/adr/0005-v10-platform-consolidation.md +50 -0
- package/.agents/docs/schemas/learning.schema.yml +22 -57
- package/.agents/docs/schemas/skill.schema.yml +116 -161
- package/.agents/docs/schemas/workflow.schema.yml +51 -26
- package/.agents/docs/skill-classification.md +1 -1
- package/.agents/registry/graph.json +193 -346
- package/.agents/registry/index.yaml +90 -233
- package/.agents/rules/coding.md +30 -12
- package/.agents/rules/command-safety.md +20 -9
- package/.agents/rules/global.md +234 -28
- package/.agents/rules/prompt-compiler.md +170 -0
- package/.agents/rules/safety.md +1 -1
- package/.agents/rules/security.md +1 -1
- package/.agents/rules/skill-quality.md +18 -3
- package/.agents/skills/_template/SKILL.md +238 -88
- package/.agents/skills/qk-api-data-discovery/SKILL.md +456 -0
- package/.agents/skills/qk-api-data-discovery/references/bronze-record-format.md +47 -0
- package/.agents/skills/qk-api-data-discovery/references/data-contract-yaml.md +72 -0
- package/.agents/skills/qk-api-data-discovery/references/discovery-report-template.md +110 -0
- package/.agents/skills/qk-backend-data/SKILL.md +339 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +328 -248
- package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-cleaner/SKILL.md +399 -0
- package/.agents/skills/qk-code-review/SKILL.md +320 -247
- package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-review/references/ai/{v8-schema-validation.md → schema-validation.md} +2 -2
- package/.agents/skills/qk-code-review/references/cross-cutting/async-concurrency-patterns.md +515 -515
- package/.agents/skills/qk-code-review/references/cross-cutting/error-handling-principles.md +492 -492
- package/.agents/skills/qk-code-review/references/cross-cutting/n-plus-one-queries.md +309 -309
- package/.agents/skills/qk-code-review/references/cross-cutting/sql-injection-prevention.md +307 -307
- package/.agents/skills/qk-code-review/references/cross-cutting/xss-prevention.md +263 -263
- package/.agents/skills/qk-code-review/references/languages/angular.md +768 -768
- package/.agents/skills/qk-code-review/references/languages/c.md +890 -890
- package/.agents/skills/qk-code-review/references/languages/cpp.md +893 -893
- package/.agents/skills/qk-code-review/references/languages/css-less-sass.md +661 -661
- package/.agents/skills/qk-code-review/references/languages/django.md +985 -985
- package/.agents/skills/qk-code-review/references/languages/fastapi.md +580 -580
- package/.agents/skills/qk-code-review/references/languages/go.md +993 -993
- package/.agents/skills/qk-code-review/references/languages/java.md +409 -409
- package/.agents/skills/qk-code-review/references/languages/java8.md +586 -586
- package/.agents/skills/qk-code-review/references/languages/kotlin.md +1018 -1018
- package/.agents/skills/qk-code-review/references/languages/nestjs.md +593 -593
- package/.agents/skills/qk-code-review/references/languages/php.md +684 -684
- package/.agents/skills/qk-code-review/references/languages/python.md +1073 -1073
- package/.agents/skills/qk-code-review/references/languages/qt.md +757 -757
- package/.agents/skills/qk-code-review/references/languages/react.md +871 -871
- package/.agents/skills/qk-code-review/references/languages/ruby.md +964 -964
- package/.agents/skills/qk-code-review/references/languages/rust.md +846 -846
- package/.agents/skills/qk-code-review/references/languages/svelte.md +1064 -1064
- package/.agents/skills/qk-code-review/references/languages/swift.md +936 -936
- package/.agents/skills/qk-code-review/references/languages/typescript.md +1016 -1016
- package/.agents/skills/qk-code-review/references/languages/vue.md +924 -924
- package/.agents/skills/qk-code-review/references/languages/zig.md +440 -440
- package/.agents/skills/qk-devops-release/SKILL.md +294 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +331 -247
- package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/SKILL.md +286 -152
- package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
- package/.agents/skills/qk-product-spec/SKILL.md +262 -0
- package/.agents/skills/qk-prompt-compiler/SKILL.md +444 -0
- package/.agents/skills/qk-ui-engineer/SKILL.md +286 -0
- package/.agents/workflows/_schema.yml +146 -146
- package/.agents/workflows/bug-resolution.yml +155 -121
- package/.agents/workflows/code-review.yml +127 -93
- package/.agents/workflows/context-discovery.yml +128 -94
- package/.agents/workflows/documentation.yml +124 -90
- package/.agents/workflows/feature-delivery.yml +158 -124
- package/.agents/workflows/production-release.yml +207 -173
- package/.agents/workflows/prompt-compilation.yml +126 -0
- package/.agents/workflows/refactor.yml +136 -102
- package/.agents/workflows/security-audit.yml +149 -115
- package/.agents/workflows/shared/quality-gate.yml +3 -1
- package/.agents/workflows/skin-governance.yml +149 -115
- package/.agents/workflows/spec-driven-development.yml +116 -87
- package/CHANGELOG.md +77 -0
- package/README.md +125 -205
- package/bin/install.js +324 -329
- package/package.json +68 -74
- package/tooling/build-registry.js +226 -208
- package/tooling/run-aar.js +55 -126
- package/tooling/sync-versions.js +2 -2
- package/tooling/validate-graph.js +100 -87
- package/tooling/validate-skills.js +32 -14
- package/.agents/README.md +0 -90
- package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
- package/.agents/docs/MIGRATION-STATUS.md +0 -35
- package/.agents/docs/MIGRATION-V8.md +0 -10
- package/.agents/docs/ROADMAP-V8.2.md +0 -78
- package/.agents/docs/V8-CERTIFICATION.md +0 -27
- package/.agents/docs/decisions/ADR-001-v8-migration.md +0 -58
- package/.agents/docs/decisions/ADR-002-workflow-separation.md +0 -50
- package/.agents/docs/decisions/ADR-003-registry-generated.md +0 -54
- package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +0 -27
- package/.agents/registry/capability-graph.yml +0 -390
- package/.agents/registry/skills-index.yml +0 -305
- package/.agents/skills/_template/capability.yaml +0 -34
- package/.agents/skills/_template/evals/scorecard.yaml +0 -19
- package/.agents/skills/qk-access-policy/SKILL.md +0 -206
- package/.agents/skills/qk-access-policy/capability.yaml +0 -23
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
- package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
- package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
- package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
- package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
- package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
- package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
- package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
- package/.agents/skills/qk-code-review/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/SKILL.md +0 -198
- package/.agents/skills/qk-context-loader/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
- package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
- package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
- package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
- package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
- package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-docs/SKILL.md +0 -193
- package/.agents/skills/qk-docs/capability.yaml +0 -23
- package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
- package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
- package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
- package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
- package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
- package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-help/SKILL.md +0 -107
- package/.agents/skills/qk-help/capability.yaml +0 -20
- package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
- package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
- package/.agents/skills/qk-product-specification/SKILL.md +0 -187
- package/.agents/skills/qk-product-specification/capability.yaml +0 -27
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-production-release/SKILL.md +0 -188
- package/.agents/skills/qk-production-release/capability.yaml +0 -27
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-audit/SKILL.md +0 -174
- package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
- package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-health/SKILL.md +0 -202
- package/.agents/skills/qk-project-health/capability.yaml +0 -23
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-project-memory/SKILL.md +0 -303
- package/.agents/skills/qk-project-memory/capability.yaml +0 -23
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-refactor/SKILL.md +0 -243
- package/.agents/skills/qk-refactor/capability.yaml +0 -26
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-security-audit/SKILL.md +0 -280
- package/.agents/skills/qk-security-audit/capability.yaml +0 -29
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
- package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
- package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
- package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
- package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/.agents/skills/qk-ui-builder/references/color.md +0 -115
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
- package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
- package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
- package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
- package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
- package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-upgrade/SKILL.md +0 -301
- package/.agents/skills/qk-upgrade/capability.yaml +0 -24
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
- package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
- package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
- package/.agents/workflows/research.yml +0 -75
- package/.agents/workflows/skill-evolution.yml +0 -97
- package/tooling/fix-refactor.js +0 -8
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ── Identity ───────────────────────────────────────────────
|
|
3
|
-
name: qk-test-engineering
|
|
4
|
-
version: 9.2.0
|
|
5
|
-
status: stable
|
|
6
|
-
description: "Thiết kế chiến lược kiểm thử toàn diện và viết bộ test tự động: Test Pyramid (Unit, Integration, E2E), Mocking strategy, Edge-case coverage, Regression testing. Dùng skill này khi user nhắc đến: viết test, test strategy, unit test, coverage, e2e, integration test, mock data, pytest, vitest, playwright — kể cả khi chỉ nói 'viết test cho module này'."
|
|
7
|
-
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
|
-
|
|
9
|
-
# ── V9: Classification ─────────────────────────────────────
|
|
10
|
-
type: capability
|
|
11
|
-
|
|
12
|
-
intent:
|
|
13
|
-
- testing-strategy
|
|
14
|
-
- unit-testing
|
|
15
|
-
- integration-testing
|
|
16
|
-
- e2e-testing
|
|
17
|
-
- test-automation
|
|
18
|
-
|
|
19
|
-
complexity:
|
|
20
|
-
level: high
|
|
21
|
-
criteria:
|
|
22
|
-
files_affected: "1-5"
|
|
23
|
-
has_behavior_change: true
|
|
24
|
-
has_external_dependency: true
|
|
25
|
-
has_breaking_change: false
|
|
26
|
-
|
|
27
|
-
triggers:
|
|
28
|
-
- "viết test"
|
|
29
|
-
- "test strategy"
|
|
30
|
-
- "unit test"
|
|
31
|
-
- "coverage"
|
|
32
|
-
- "e2e"
|
|
33
|
-
- "integration test"
|
|
34
|
-
- "mock data"
|
|
35
|
-
- "pytest"
|
|
36
|
-
- "vitest"
|
|
37
|
-
- "playwright"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# ── V8: References ─────────────────────────────────────────
|
|
41
|
-
workflow: feature-delivery
|
|
42
|
-
|
|
43
|
-
rules:
|
|
44
|
-
- global
|
|
45
|
-
- coding
|
|
46
|
-
|
|
47
|
-
tools:
|
|
48
|
-
- filesystem
|
|
49
|
-
- terminal
|
|
50
|
-
|
|
51
|
-
related_skills:
|
|
52
|
-
- qk-code-review
|
|
53
|
-
- qk-bug-resolution
|
|
54
|
-
|
|
55
|
-
knowledge_scope:
|
|
56
|
-
domain:
|
|
57
|
-
- testing-strategy
|
|
58
|
-
- quality-assurance
|
|
59
|
-
- unit-testing
|
|
60
|
-
- integration-testing
|
|
61
|
-
- e2e-testing
|
|
62
|
-
concepts:
|
|
63
|
-
- test-pyramid
|
|
64
|
-
- mock-strategy
|
|
65
|
-
- arrange-act-assert
|
|
66
|
-
references:
|
|
67
|
-
- architecture
|
|
68
|
-
- vitest
|
|
69
|
-
- pytest
|
|
70
|
-
- playwright
|
|
71
|
-
|
|
72
|
-
# ── V8: Verification ───────────────────────────────────────
|
|
73
|
-
verification:
|
|
74
|
-
required: true
|
|
75
|
-
strategy: feature
|
|
76
|
-
|
|
77
|
-
selection:
|
|
78
|
-
priority: high
|
|
79
|
-
confidence_threshold: 0.85
|
|
80
|
-
|
|
81
|
-
examples: []
|
|
82
|
-
learnings: []
|
|
83
|
-
|
|
84
|
-
# ── V7 Runtime ─────────────────────────────────────────────
|
|
85
|
-
execution_mode: deterministic
|
|
86
|
-
cost: medium
|
|
87
|
-
latency: medium
|
|
88
|
-
risk: low
|
|
89
|
-
side_effects: edit_files
|
|
90
|
-
produces: [code, test_plan]
|
|
91
|
-
consumes: [source-code, user-description]
|
|
92
|
-
|
|
93
|
-
token_budget:
|
|
94
|
-
max_files_read: 6
|
|
95
|
-
max_lines_per_read: 150
|
|
96
|
-
max_shell_commands: 3
|
|
97
|
-
stop_early: true
|
|
98
|
-
|
|
99
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
# qk-test-engineering — Automated Testing & Quality Architect
|
|
103
|
-
|
|
104
|
-
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
105
|
-
|
|
106
|
-
Chịu trách nhiệm thiết kế chiến lược kiểm thử cân bằng (Test Pyramid) và trực tiếp cài đặt các bộ test tự động đáng tin cậy: **Unit Tests nhanh & cô lập, Integration Tests kiểm chứng hợp đồng kết nối, và E2E Tests bảo vệ luồng nghiệp vụ sống còn.**
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## Preconditions
|
|
111
|
-
|
|
112
|
-
Trước khi viết test, AI BẮT BUỘC xác nhận:
|
|
113
|
-
|
|
114
|
-
- [ ] Xác định Test Framework từ `DEV_PROFILE.md` hoặc manifest (Vitest, Jest, Pytest, Go `testing`, Playwright).
|
|
115
|
-
- [ ] Xác định code mục tiêu cần test (function, class, API endpoint, hoặc user journey).
|
|
116
|
-
- [ ] Xác định phụ thuộc ngoại vi (Database, External API, File system, Third-party service) để chọn phương án Mock phù hợp.
|
|
117
|
-
|
|
118
|
-
*Nếu chưa có code mục tiêu và user không yêu cầu TDD (Test-Driven Development):*
|
|
119
|
-
→ **EXIT: BLOCKED**
|
|
120
|
-
→ Yêu cầu: "Vui lòng chỉ định hàm, module hoặc file cần viết test."
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Scope
|
|
125
|
-
|
|
126
|
-
✅ Skill này làm:
|
|
127
|
-
- Thiết lập **Test Cases Matrix** bao phủ:
|
|
128
|
-
- **Happy path:** Dữ liệu hợp lệ, kết quả mong đợi.
|
|
129
|
-
- **Edge cases:** Giới hạn biên (0, -1, max int, chuỗi rỗng, mảng rỗng, ký tự đặc biệt UTF-8).
|
|
130
|
-
- **Error boundaries:** Ném lỗi đúng loại (Custom Error / HTTP Status) khi đầu vào sai.
|
|
131
|
-
- **Async / Timeout:** Xử lý promise reject, network delay.
|
|
132
|
-
- Viết Unit Tests theo cấu trúc kinh điển **AAA (Arrange - Act - Assert)** hoặc **Given - When - Then**.
|
|
133
|
-
- Viết Integration Tests kiểm chứng sự phối hợp giữa Service và Database (dùng in-memory DB hoặc Testcontainers).
|
|
134
|
-
- Viết E2E Tests (Playwright) cho các User Flows quan trọng nhất (Sign up → Checkout → Payment).
|
|
135
|
-
- Xây dựng Mocking Strategy đúng mực: Mock ở ranh giới hệ thống (HTTP client, Message queue), **không bao giờ mock implementation details nội bộ**.
|
|
136
|
-
|
|
137
|
-
❌ Skill này KHÔNG làm:
|
|
138
|
-
- Viết tests rỗng không có `expect` / `assert` chỉ để farm chỉ số coverage.
|
|
139
|
-
- Mock quá mức khiến test luôn pass dù code thật bị hỏng (Tautological tests).
|
|
140
|
-
- Viết E2E test cho mọi biến thể nhỏ (vi phạm kim tự tháp kiểm thử, gây chậm CI và flaky test).
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## Execution Steps
|
|
145
|
-
|
|
146
|
-
### Step 1 — Phân tầng Kiểm thử (Pyramid Placement)
|
|
147
|
-
```
|
|
148
|
-
Quyết định tầng test phù hợp:
|
|
149
|
-
- Pure function, domain logic, utils → 70% Unit Tests (Chạy < 10ms/test).
|
|
150
|
-
- Database queries, API routes, middleware → 20% Integration Tests (Mock external API).
|
|
151
|
-
- Critical checkout / login flow → 10% E2E Tests (Playwright / Cypress).
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Step 2 — Lập Ma trận Kịch bản (Test Scenario Matrix)
|
|
155
|
-
```
|
|
156
|
-
Ví dụ với hàm transferMoney(fromId, toId, amount):
|
|
157
|
-
1. TC-01 (Happy): Chuyển tiền thành công khi số dư đủ, trừ tài khoản A, cộng tài khoản B.
|
|
158
|
-
2. TC-02 (Edge): Chuyển đúng bằng số dư hiện có (số dư về 0).
|
|
159
|
-
3. TC-03 (Error): Chuyển số tiền âm hoặc = 0 -> Ném ValidationError.
|
|
160
|
-
4. TC-04 (Error): Số dư không đủ -> Ném InsufficientFundsError.
|
|
161
|
-
5. TC-05 (Edge): fromId trùng toId -> Ném SelfTransferError.
|
|
162
|
-
6. TC-06 (Concur): 2 giao dịch đồng thời -> Xử lý lock/transaction an toàn.
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Step 3 — Viết Code Kiểm thử (Test Implementation)
|
|
166
|
-
```
|
|
167
|
-
Tuân thủ cấu trúc AAA:
|
|
168
|
-
// 1. Arrange: Chuẩn bị dữ liệu mẫu và mock
|
|
169
|
-
const user = createMockUser({ balance: 100 });
|
|
170
|
-
|
|
171
|
-
// 2. Act: Gọi hàm cần test
|
|
172
|
-
const result = await transferMoney(user.id, recipient.id, 50);
|
|
173
|
-
|
|
174
|
-
// 3. Assert: Kiểm tra kết quả
|
|
175
|
-
expect(result.status).toBe('SUCCESS');
|
|
176
|
-
expect(user.balance).toBe(50);
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Step 4 — Verification & Chạy Test Thực Tế
|
|
180
|
-
```
|
|
181
|
-
Actions:
|
|
182
|
-
- Chạy lệnh test thật qua terminal (`npm test -- run`, `pytest -v`, `go test ./...`).
|
|
183
|
-
- Đảm bảo toàn bộ test cases đều PASS (Màu xanh).
|
|
184
|
-
- Đảm bảo test chạy độc lập (Isolated), không phụ thuộc vào thứ tự thực thi.
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Prompt Template
|
|
190
|
-
|
|
191
|
-
```
|
|
192
|
-
Target: [File hoặc Function cần viết test: vd: src/services/PaymentService.ts]
|
|
193
|
-
Framework: [Vitest / Jest / Pytest / Playwright]
|
|
194
|
-
Level: [Unit / Integration / E2E]
|
|
195
|
-
Phụ thuộc: [Cần mock Stripe API, PostgreSQL DB]
|
|
196
|
-
Yêu cầu: [Cover các trường hợp lỗi mạng, thẻ hết hạn, concurrency]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### Ví dụ theo Stack:
|
|
200
|
-
|
|
201
|
-
**Vitest (Unit Test cho Business Logic)**
|
|
202
|
-
```
|
|
203
|
-
Target: calculateDiscount(cart, coupon)
|
|
204
|
-
Framework: Vitest + TypeScript
|
|
205
|
-
Yêu cầu: Test giảm giá phần trăm, giảm giá cố định, mã hết hạn, coupon vượt quá tổng giá trị đơn hàng.
|
|
206
|
-
```
|
|
207
|
-
→ AI tạo: `tests/unit/calculateDiscount.test.ts` với đầy đủ 6 test cases, kiểm tra boundary condition `Math.max(0, total - discount)`.
|
|
208
|
-
|
|
209
|
-
**Pytest (Integration Test cho FastAPI Endpoint)**
|
|
210
|
-
```
|
|
211
|
-
Target: POST /api/v1/items
|
|
212
|
-
Framework: Pytest + httpx AsyncClient
|
|
213
|
-
Yêu cầu: Test tạo item thành công (201), validate body thiếu trường bắt buộc (422), unauthenticated (401).
|
|
214
|
-
```
|
|
215
|
-
→ AI tạo: `tests/test_items_api.py`, sử dụng pytest fixture cho test DB session và test client.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Auto-generated from SKILL.md frontmatter
|
|
2
|
-
schema_version: 1
|
|
3
|
-
id: "qk-test-engineering"
|
|
4
|
-
version: "9.1.0"
|
|
5
|
-
description: "Công cụ quyết định chiến lược kiểm thử (Unit, Integration, E2E, Coverage, Regression, Mock)."
|
|
6
|
-
tools:
|
|
7
|
-
- "filesystem"
|
|
8
|
-
- "terminal"
|
|
9
|
-
knowledge:
|
|
10
|
-
owns:
|
|
11
|
-
- "qk-test-engineering"
|
|
12
|
-
references:
|
|
13
|
-
- "architecture"
|
|
14
|
-
- "anti-patterns"
|
|
15
|
-
- "playwright"
|
|
16
|
-
- "vitest"
|
|
17
|
-
- "storybook-testing"
|
|
18
|
-
eval:
|
|
19
|
-
scorecard: "evals/scorecard.yaml"
|
|
20
|
-
decision_boundary:
|
|
21
|
-
owns:
|
|
22
|
-
- "test pyramid"
|
|
23
|
-
- "coverage strategy"
|
|
24
|
-
- "regression planning"
|
|
25
|
-
does_not_own:
|
|
26
|
-
- "business logic implementation"
|
|
27
|
-
- "writing tests"
|
|
28
|
-
conflicts_with: []
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
name: qk-test-engineering-eval
|
|
2
|
-
description: Đánh giá tư duy Chiến lược Kiểm thử (Test Strategy)
|
|
3
|
-
version: 9.1.0
|
|
4
|
-
threshold: 85 # Đảm bảo tư vấn chiến lược rõ ràng và bao quát rủi ro
|
|
5
|
-
|
|
6
|
-
metrics:
|
|
7
|
-
- id: pyramid_strategy
|
|
8
|
-
name: Chiến lược Test Pyramid
|
|
9
|
-
description: Chiến lược có phân bổ hợp lý giữa Unit, Integration và E2E không?
|
|
10
|
-
weight: 35
|
|
11
|
-
criteria:
|
|
12
|
-
- Phân tách rõ ràng loại test nào dùng cho logic nào thay vì bắt viết E2E cho mọi thứ (35đ)
|
|
13
|
-
|
|
14
|
-
- id: boundary_testing_r_sec_04
|
|
15
|
-
name: Negative & Boundary Testing (R-SEC-04)
|
|
16
|
-
description: Có bao phủ các test cases ranh giới để ngăn chặn tấn công/lỗi dữ liệu không?
|
|
17
|
-
weight: 35
|
|
18
|
-
criteria:
|
|
19
|
-
- Bắt buộc đưa ra các test case biên (Boundary) và trường hợp lỗi (Negative tests) (35đ)
|
|
20
|
-
|
|
21
|
-
- id: mocking_strategy
|
|
22
|
-
name: Chiến lược Mock/Stub
|
|
23
|
-
description: Có tư vấn rõ ràng khi nào nên Mock và khi nào dùng Database thật không?
|
|
24
|
-
weight: 30
|
|
25
|
-
criteria:
|
|
26
|
-
- Phân biệt rõ việc Mock API bên thứ ba vs Integration DB nội bộ (30đ)
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ── Identity ───────────────────────────────────────────────
|
|
3
|
-
name: qk-ui-audit
|
|
4
|
-
version: 9.2.0
|
|
5
|
-
status: stable
|
|
6
|
-
description: "Kiểm toán chất lượng thiết kế UI với 57-check Anti-Slop checklist: spacing nhất quán, contrast ratio, component polish, interaction states. Output là nhận xét thiết kế và danh sách cần cải thiện. Dùng skill này khi user nhắc đến: review ui, audit giao diện, kiểm tra ui, ui quality, component spacing, design consistency, anti-slop — KHÔNG dùng cho đo hiệu năng hay SEO."
|
|
7
|
-
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
|
-
|
|
9
|
-
# ── V9: Classification ─────────────────────────────────────
|
|
10
|
-
type: utility
|
|
11
|
-
|
|
12
|
-
intent:
|
|
13
|
-
- ui-audit
|
|
14
|
-
- codebase-health
|
|
15
|
-
|
|
16
|
-
complexity:
|
|
17
|
-
level: medium
|
|
18
|
-
criteria:
|
|
19
|
-
files_affected: "1-5"
|
|
20
|
-
has_behavior_change: false
|
|
21
|
-
has_external_dependency: false
|
|
22
|
-
has_breaking_change: false
|
|
23
|
-
|
|
24
|
-
triggers:
|
|
25
|
-
- "review ui"
|
|
26
|
-
- "audit giao diện"
|
|
27
|
-
- "kiểm tra ui"
|
|
28
|
-
- "ui quality"
|
|
29
|
-
- "component spacing"
|
|
30
|
-
- "design consistency"
|
|
31
|
-
- "anti"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# ── V8: References ─────────────────────────────────────────
|
|
35
|
-
workflow: code-review
|
|
36
|
-
|
|
37
|
-
rules:
|
|
38
|
-
- global
|
|
39
|
-
- coding
|
|
40
|
-
|
|
41
|
-
tools:
|
|
42
|
-
- filesystem
|
|
43
|
-
- terminal
|
|
44
|
-
|
|
45
|
-
related_skills:
|
|
46
|
-
- qk-ui-builder
|
|
47
|
-
|
|
48
|
-
knowledge_scope:
|
|
49
|
-
owns:
|
|
50
|
-
- ui-standards
|
|
51
|
-
- anti-slop
|
|
52
|
-
references:
|
|
53
|
-
- design-system
|
|
54
|
-
- security
|
|
55
|
-
- anti-patterns
|
|
56
|
-
|
|
57
|
-
# ── V8: Verification ───────────────────────────────────────
|
|
58
|
-
verification:
|
|
59
|
-
required: true
|
|
60
|
-
strategy: review
|
|
61
|
-
|
|
62
|
-
selection:
|
|
63
|
-
priority: medium
|
|
64
|
-
confidence_threshold: 0.80
|
|
65
|
-
|
|
66
|
-
examples: []
|
|
67
|
-
learnings: []
|
|
68
|
-
|
|
69
|
-
# ── V7 Runtime ─────────────────────────────────────────────
|
|
70
|
-
execution_mode: deterministic
|
|
71
|
-
cost: medium
|
|
72
|
-
latency: medium
|
|
73
|
-
risk: low
|
|
74
|
-
side_effects: read_only
|
|
75
|
-
produces: [report]
|
|
76
|
-
consumes: [design-md, source-code]
|
|
77
|
-
|
|
78
|
-
token_budget:
|
|
79
|
-
max_files_read: 5
|
|
80
|
-
max_lines_per_read: 150
|
|
81
|
-
max_shell_commands: 0
|
|
82
|
-
stop_early: true
|
|
83
|
-
|
|
84
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
# qk-ui-audit — Anti-Slop UI Inspector
|
|
88
|
-
|
|
89
|
-
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
90
|
-
|
|
91
|
-
Chịu trách nhiệm kiểm toán chi tiết tính thẩm mỹ, sự nhất quán và độ hoàn thiện thị giác của giao diện người dùng theo bộ **57-Check Anti-Slop Checklist**. Ngăn chặn triệt để tình trạng giao diện AI cẩu thả (AI-generated slop): lệch nhịp spacing, độ tương phản kém, thiếu states tương tác.
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Preconditions
|
|
96
|
-
|
|
97
|
-
Trước khi audit giao diện, AI BẮT BUỘC kiểm tra:
|
|
98
|
-
|
|
99
|
-
- [ ] Xác định các file UI component hoặc trang cần audit (`.tsx`, `.vue`, `.svelte`, `.html`, `.css`).
|
|
100
|
-
- [ ] Đọc file cấu hình thiết kế nếu có (`DESIGN.md`, `tailwind.config.js`, tokens file) để lấy chuẩn so sánh.
|
|
101
|
-
- [ ] Kiểm tra xem component có mã nguồn rõ ràng để phân tích styling không.
|
|
102
|
-
- [ ] Nếu component sử dụng inline style hoặc cấu trúc quá rối loạn không thể đọc được layout:
|
|
103
|
-
→ **EXIT: PARTIAL**
|
|
104
|
-
→ Báo cáo user tình trạng code kèm khuyến nghị refactor trước khi audit chi tiết.
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Scope
|
|
109
|
-
|
|
110
|
-
✅ Skill này làm:
|
|
111
|
-
- Rà soát 4 nhóm kiểm tra chính theo chuẩn Anti-Slop:
|
|
112
|
-
1. Spacing & Grid System (4px/8px grid alignment, nhất quán padding/margin, không dùng giá trị arbitrary tùy tiện).
|
|
113
|
-
2. Color & Contrast (Tỉ lệ tương phản văn bản/nền theo WCAG AA, tính nhất quán của bảng màu token).
|
|
114
|
-
3. Typography & Hierarchy (Phân cấp kích cỡ font chữ, line-height, font-weight có trật tự).
|
|
115
|
-
4. Interactive States (Đầy đủ hover, active, focus-visible, disabled, loading, skeleton states).
|
|
116
|
-
- Xuất danh sách các điểm vi phạm (Slop items) kèm vị trí dòng code cụ thể.
|
|
117
|
-
- Đề xuất mã CSS / Tailwind class sửa đổi chuẩn chỉnh.
|
|
118
|
-
- Chế độ hoạt động: **Read-Only / Inspection Report** (không tự sửa code khi chưa duyệt).
|
|
119
|
-
|
|
120
|
-
❌ Skill này KHÔNG làm:
|
|
121
|
-
- Đo lường hiệu năng kỹ thuật web, Core Web Vitals, SEO tags (→ `qk-web-quality-gate`).
|
|
122
|
-
- Xây dựng component mới từ bản vẽ Figma (→ `qk-ui-builder`).
|
|
123
|
-
- Định nghĩa lại toàn bộ hệ thống Design Tokens từ gốc (→ `qk-design-system-engineering`).
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Execution Steps
|
|
128
|
-
|
|
129
|
-
### Step 1 — Target Ingestion & Design Baseline
|
|
130
|
-
```
|
|
131
|
-
Inputs: Danh sách file UI, DESIGN.md / Tailwind config
|
|
132
|
-
Actions:
|
|
133
|
-
- Nạp source code component.
|
|
134
|
-
- Xác định Design Tokens chuẩn của dự án (màu sắc, spacing scales, border-radius).
|
|
135
|
-
Output: Component AST / Markup map
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### Step 2 — 57-Check Anti-Slop Audit
|
|
139
|
-
```
|
|
140
|
-
Inputs: Component code, Design tokens
|
|
141
|
-
Actions:
|
|
142
|
-
- Quét Spacing: Phát hiện các giá trị cứng (hardcoded px) thay vì dùng token (ví dụ: mt-[13px]).
|
|
143
|
-
- Quét Visual Hierarchy: Đảm bảo tiêu đề và nội dung có sự phân biệt rõ ràng.
|
|
144
|
-
- Quét Interactive States: Kiểm tra các button, input, link xem có `:focus-visible` và `:disabled` chuẩn không.
|
|
145
|
-
- Quét Layout Bugs: Xử lý tràn chữ (overflow, text truncation), co giãn responsive.
|
|
146
|
-
Output: Audit findings categorized by severity
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### Step 3 — Remediation Formulation
|
|
150
|
-
```
|
|
151
|
-
Inputs: Audit findings
|
|
152
|
-
Actions:
|
|
153
|
-
- Viết giải thích ngắn gọn lý do vi phạm.
|
|
154
|
-
- Cung cấp đoạn code so sánh Before/After cụ thể.
|
|
155
|
-
Output: Anti-Slop Audit Report
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Step 4 — Verification & Delivery
|
|
159
|
-
```
|
|
160
|
-
Inputs: Anti-Slop Audit Report
|
|
161
|
-
Actions:
|
|
162
|
-
- Đảm bảo các khuyến nghị tuân thủ 100% stack khai báo trong DEV_PROFILE.md.
|
|
163
|
-
- Bàn giao báo cáo cho kỹ sư frontend.
|
|
164
|
-
Exit: SUCCESS
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Prompt Template
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
UI Component / Trang: [Đường dẫn file component hoặc page cần kiểm tra]
|
|
173
|
-
Design Tokens: [File cấu hình tailwind.config / css tokens / DESIGN.md]
|
|
174
|
-
Vấn đề nghi ngờ: [Bị lệch spacing, nút bấm xấu, thiếu hover state, ...]
|
|
175
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Auto-generated from SKILL.md frontmatter
|
|
2
|
-
schema_version: 1
|
|
3
|
-
id: "qk-ui-audit"
|
|
4
|
-
version: "9.1.0"
|
|
5
|
-
description: "Kiểm toán giao diện (UI) với 57-check Anti-Slop checklist — fail nếu score < 76/85 base."
|
|
6
|
-
tools:
|
|
7
|
-
- "filesystem"
|
|
8
|
-
- "terminal"
|
|
9
|
-
knowledge:
|
|
10
|
-
owns:
|
|
11
|
-
- "ui-standards"
|
|
12
|
-
- "anti-slop"
|
|
13
|
-
references:
|
|
14
|
-
- "design-system"
|
|
15
|
-
- "security"
|
|
16
|
-
- "anti-patterns"
|
|
17
|
-
eval:
|
|
18
|
-
scorecard: "evals/scorecard.yaml"
|
|
19
|
-
decision_boundary:
|
|
20
|
-
owns:
|
|
21
|
-
- "qk-ui-audit"
|
|
22
|
-
does_not_own: []
|
|
23
|
-
conflicts_with: []
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
name: qk-ui-audit-eval
|
|
2
|
-
description: Đánh giá khả năng rà soát UI Anti-Slop
|
|
3
|
-
version: 9.1.0
|
|
4
|
-
threshold: 90 # Đóng vai trò chốt chặn UI chất lượng cao, không khoan nhượng với Slop
|
|
5
|
-
|
|
6
|
-
metrics:
|
|
7
|
-
- id: design_contract_compliance
|
|
8
|
-
name: Tuân thủ Hợp đồng Thiết kế (DESIGN.md)
|
|
9
|
-
description: Có bắt lỗi chính xác các giá trị hardcode không nằm trong Design Tokens không?
|
|
10
|
-
weight: 40
|
|
11
|
-
criteria:
|
|
12
|
-
- Tìm và đánh dấu các mã màu hex, px hardcode vi phạm token của DESIGN.md (40đ)
|
|
13
|
-
|
|
14
|
-
- id: anti_slop_detection
|
|
15
|
-
name: Nhận diện AI-Slop (Generic aesthetics)
|
|
16
|
-
description: Có phát hiện được các thiết kế chung chung, xám xịt, viền nhạt nhòa không?
|
|
17
|
-
weight: 30
|
|
18
|
-
criteria:
|
|
19
|
-
- Trừ điểm nặng các thẻ card thiếu chiều sâu, text quá nhỏ, hoặc thiếu hover state (30đ)
|
|
20
|
-
|
|
21
|
-
- id: accessibility_check
|
|
22
|
-
name: Kiểm tra Trải nghiệm Tiếp cận (A11y)
|
|
23
|
-
description: Có rà soát các thẻ ARIA, độ tương phản và Semantic HTML không?
|
|
24
|
-
weight: 30
|
|
25
|
-
criteria:
|
|
26
|
-
- Cảnh báo các element tương tác (button, link) thiếu roles, alt text hoặc độ tương phản < 4.5:1 (30đ)
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Anti-Slop Checklist — 57 Checks (99 pts max)
|
|
2
|
-
> Referenced by: `qk-ui-audit/SKILL.md`
|
|
3
|
-
> Purpose: Full inspection checklist for detecting generic AI-generated UI
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Category P1: Accessibility (15 pts)
|
|
8
|
-
|
|
9
|
-
| # | Check | Points | How to Verify |
|
|
10
|
-
|---|-------|--------|---------------|
|
|
11
|
-
| 1 | All images have `alt` text (non-empty, descriptive) | 2 | grep `alt=""` or `alt={` in JSX |
|
|
12
|
-
| 2 | Color contrast ratio ≥ 4.5:1 (text) / 3:1 (large text) | 3 | Check computed HSL values vs background |
|
|
13
|
-
| 3 | All interactive elements have `aria-label` if no visible text | 2 | grep for `<button>` without text content |
|
|
14
|
-
| 4 | Focus states are visible — `outline: none` not used without replacement | 2 | Check CSS for `outline: none` |
|
|
15
|
-
| 5 | Keyboard navigation works (Tab order logical) | 2 | `tabIndex` only for non-interactive elements |
|
|
16
|
-
| 6 | `role` attributes used for non-semantic elements (div acting as button) | 2 | grep `onClick` on non-button elements |
|
|
17
|
-
| 7 | Form inputs have associated `<label>` (htmlFor) | 2 | grep `<input` without surrounding `<label` |
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Category P2: Layout & Spacing (15 pts)
|
|
22
|
-
|
|
23
|
-
| # | Check | Points | How to Verify |
|
|
24
|
-
|---|-------|--------|---------------|
|
|
25
|
-
| 8 | No hardcoded pixel spacing — uses design token scale (4, 8, 16, 24...) | 3 | grep `padding: [0-9]px` or `margin: [0-9]px` |
|
|
26
|
-
| 9 | CSS Grid or Flexbox used — no `position: absolute` for layout | 2 | grep `position: absolute` in layout context |
|
|
27
|
-
| 10 | Consistent spacing unit (not mixing 5px, 7px, 11px random values) | 2 | Check spacing values across components |
|
|
28
|
-
| 11 | No `div` soup — semantic HTML used (article, section, nav, main, aside) | 2 | grep excessive `<div>` nesting |
|
|
29
|
-
| 12 | Component has defined max-width (not stretching to 100vw on desktop) | 2 | Check container max-width |
|
|
30
|
-
| 13 | Whitespace feels intentional — content is not cramped | 2 | Visual check or spacing scale adherence |
|
|
31
|
-
| 14 | No horizontal overflow on mobile (320px viewport) | 2 | Check for `overflow-x: hidden` band-aids |
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Category P3: Typography & Colors (15 pts)
|
|
36
|
-
|
|
37
|
-
| # | Check | Points | How to Verify |
|
|
38
|
-
|---|-------|--------|---------------|
|
|
39
|
-
| 15 | Font families from DESIGN.md only (no Times New Roman, Arial default) | 3 | grep `font-family:` vs DESIGN.md |
|
|
40
|
-
| 16 | Font sizes use token scale — no arbitrary px values | 2 | grep `font-size: [0-9]` raw values |
|
|
41
|
-
| 17 | Colors use DESIGN.md tokens — no hardcoded hex (#ff0000) or rgb() | 3 | grep `#[0-9a-fA-F]{3,6}` in CSS/JSX |
|
|
42
|
-
| 18 | No pure black (#000000) or pure white (#ffffff) — use near-black/near-white | 2 | grep `#000\|#000000\|#fff\|#ffffff` |
|
|
43
|
-
| 19 | Color palette is harmonious — not "rainbow slop" (5+ unrelated colors) | 2 | Count distinct hues in palette |
|
|
44
|
-
| 20 | Heading hierarchy correct — one `<h1>` per page, no skipping levels | 1 | grep heading tags per page |
|
|
45
|
-
| 21 | Line height appropriate (1.4–1.7 for body, 1.1–1.3 for headings) | 2 | Check `line-height` values |
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Category P4: Interactions & Animations (15 pts)
|
|
50
|
-
|
|
51
|
-
| # | Check | Points | How to Verify |
|
|
52
|
-
|---|-------|--------|---------------|
|
|
53
|
-
| 22 | Every button has hover state — color shift OR shadow change | 2 | grep `:hover` for button styles |
|
|
54
|
-
| 23 | Every button has focus-visible state | 2 | grep `:focus-visible` |
|
|
55
|
-
| 24 | Active/pressed state exists for clickable elements | 1 | grep `:active` |
|
|
56
|
-
| 25 | Transition duration from DESIGN.md — not raw `0.3s` everywhere | 2 | grep `transition:` vs token values |
|
|
57
|
-
| 26 | No janky instant state changes — all transitions ≥ 100ms, ≤ 400ms | 2 | grep transition durations |
|
|
58
|
-
| 27 | Animations respect `prefers-reduced-motion` | 2 | grep `prefers-reduced-motion` in CSS |
|
|
59
|
-
| 28 | Links have hover underline OR color change (not just cursor pointer) | 2 | grep `a:hover` styles |
|
|
60
|
-
| 29 | Form validation feedback uses animation (shake, pulse) not just color | 2 | Check error state CSS |
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Category P5: Anti-Slop Detection (15 pts)
|
|
65
|
-
|
|
66
|
-
| # | Check | Points | How to Verify |
|
|
67
|
-
|---|-------|--------|---------------|
|
|
68
|
-
| 30 | No Bootstrap/generic UI kit classes (btn-primary, card, badge) | 2 | grep `class="btn\|card\|badge\|modal"` |
|
|
69
|
-
| 31 | No Tailwind utility spam (> 15 classes on single element) | 2 | grep extremely long className strings |
|
|
70
|
-
| 32 | No Lorem Ipsum or placeholder text in production UI | 3 | grep `Lorem ipsum\|placeholder text` |
|
|
71
|
-
| 33 | Color palette is NOT blue-gray default (slop signature) | 2 | Check if primary color is `hsl(210, *)` Tailwind default |
|
|
72
|
-
| 34 | Layout is NOT a simple centered card on white background (slop template) | 2 | Structural check |
|
|
73
|
-
| 35 | Gradient usage is intentional — not `linear-gradient(to bottom, #fff, #f0f0f0)` | 2 | grep gradient definitions |
|
|
74
|
-
| 36 | No `box-shadow: 0 2px 4px rgba(0,0,0,0.1)` everywhere (Bootstrap shadow) | 2 | grep this exact shadow pattern |
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Category P6: Performance & Best Practices (10 pts)
|
|
79
|
-
|
|
80
|
-
| # | Check | Points | How to Verify |
|
|
81
|
-
|---|-------|--------|---------------|
|
|
82
|
-
| 37 | Images have `loading="lazy"` for below-fold content | 2 | grep `<img` without `loading` |
|
|
83
|
-
| 38 | No `!important` overrides (except CSS reset) | 1 | grep `!important` in component CSS |
|
|
84
|
-
| 39 | No inline styles except dynamic values | 2 | grep `style={{` in non-dynamic contexts |
|
|
85
|
-
| 40 | Component file ≤ 300 lines | 1 | Line count check |
|
|
86
|
-
| 41 | No unused CSS classes or dead styles | 1 | Visual code scan |
|
|
87
|
-
| 42 | SVG icons used instead of emoji for UI elements | 1 | grep emoji characters in JSX |
|
|
88
|
-
| 43 | `key` prop used correctly in lists (not index as key for dynamic lists) | 2 | grep `.map(` + check key prop |
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Category BONUS: Mobile & Cross-Browser (5 pts extra)
|
|
93
|
-
|
|
94
|
-
| # | Check | Points | How to Verify |
|
|
95
|
-
|---|-------|--------|---------------|
|
|
96
|
-
| 44 | Touch targets ≥ 44×44px on mobile | 1 | Check button/link dimensions |
|
|
97
|
-
| 45 | No hover-only interactions (mobile has no hover) | 1 | Check if critical info only on hover |
|
|
98
|
-
| 46 | Custom fonts have system-ui fallback | 1 | Check font-family fallback stack |
|
|
99
|
-
| 47 | Input types correct: email, tel, number, date (triggers correct mobile keyboard) | 1 | grep `<input type=` |
|
|
100
|
-
| 48 | No `position: fixed` elements blocking content on small screens | 1 | Check fixed/sticky headers/footers |
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Extended Checks (9 additional points for comprehensive audit)
|
|
105
|
-
|
|
106
|
-
| # | Check | Category |
|
|
107
|
-
|---|-------|---------|
|
|
108
|
-
| 49 | Loading skeleton matches actual content shape (not generic gray bars) | UX |
|
|
109
|
-
| 50 | Empty state has illustration + helpful action button (not just "No data") | UX |
|
|
110
|
-
| 51 | Error state specifies the error — not generic "Something went wrong" | UX |
|
|
111
|
-
| 52 | Success feedback is clear — confirmation message or visual indicator | UX |
|
|
112
|
-
| 53 | Destructive actions (delete) require confirmation dialog | Safety |
|
|
113
|
-
| 54 | Modals/dialogs have accessible `role="dialog"` + focus trap | A11y |
|
|
114
|
-
| 55 | Scrollable areas have visible scroll indicator | UX |
|
|
115
|
-
| 56 | Data tables have sortable columns if > 10 rows | UX |
|
|
116
|
-
| 57 | Forms have autofocus on first input (modal forms) | UX |
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Scoring Summary
|
|
121
|
-
|
|
122
|
-
| Category | Max Points |
|
|
123
|
-
|----------|-----------|
|
|
124
|
-
| P1 Accessibility | 15 |
|
|
125
|
-
| P2 Layout & Spacing | 15 |
|
|
126
|
-
| P3 Typography & Colors | 15 |
|
|
127
|
-
| P4 Interactions & Animations | 15 |
|
|
128
|
-
| P5 Anti-Slop Detection | 15 |
|
|
129
|
-
| P6 Performance | 10 |
|
|
130
|
-
| **Base Total** | **85** |
|
|
131
|
-
| BONUS Mobile | +5 |
|
|
132
|
-
| Extended (49–57) | +9 |
|
|
133
|
-
| **Maximum Possible** | **99** |
|
|
134
|
-
|
|
135
|
-
**Pass threshold: ≥ 76/85 base (90%)**
|
|
136
|
-
**Fail: < 76 / 85 — requires redesign, not patch**
|