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,253 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ── Identity ───────────────────────────────────────────────
|
|
3
|
-
name: qk-data-engineer
|
|
4
|
-
version: 9.2.0
|
|
5
|
-
status: stable
|
|
6
|
-
description: "Thiết kế và implement data pipeline với best practices: idempotency, data quality gate, lineage, incremental processing. Dùng skill này khi user nhắc đến: data pipeline, etl, elt, dbt, dbt model, airflow dag, spark job, medallion architecture, data quality, incremental load, schema evolution, backfill, data warehouse — kể cả khi chỉ nói \"load data từ X sang Y\"."
|
|
7
|
-
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
|
-
|
|
9
|
-
# ── V9: Classification ─────────────────────────────────────
|
|
10
|
-
type: capability
|
|
11
|
-
|
|
12
|
-
intent:
|
|
13
|
-
- data-pipeline
|
|
14
|
-
- data-modeling
|
|
15
|
-
- data-quality
|
|
16
|
-
- etl-optimization
|
|
17
|
-
|
|
18
|
-
complexity:
|
|
19
|
-
level: high
|
|
20
|
-
criteria:
|
|
21
|
-
files_affected: "1-15"
|
|
22
|
-
has_behavior_change: true
|
|
23
|
-
has_external_dependency: true
|
|
24
|
-
has_breaking_change: false
|
|
25
|
-
|
|
26
|
-
triggers:
|
|
27
|
-
- "data pipeline"
|
|
28
|
-
- "etl"
|
|
29
|
-
- "elt"
|
|
30
|
-
- "dbt"
|
|
31
|
-
- "dbt model"
|
|
32
|
-
- "airflow dag"
|
|
33
|
-
- "spark job"
|
|
34
|
-
- "medallion architecture"
|
|
35
|
-
- "data quality"
|
|
36
|
-
- "incremental load"
|
|
37
|
-
- "schema evolution"
|
|
38
|
-
- "backfill"
|
|
39
|
-
- "data warehouse"
|
|
40
|
-
|
|
41
|
-
selection:
|
|
42
|
-
priority: high
|
|
43
|
-
confidence_threshold: 0.85
|
|
44
|
-
|
|
45
|
-
# ── V8: References ─────────────────────────────────────────
|
|
46
|
-
workflow: feature-delivery
|
|
47
|
-
|
|
48
|
-
rules:
|
|
49
|
-
- global
|
|
50
|
-
- coding
|
|
51
|
-
- safety
|
|
52
|
-
|
|
53
|
-
tools:
|
|
54
|
-
- filesystem
|
|
55
|
-
- terminal
|
|
56
|
-
|
|
57
|
-
related_skills:
|
|
58
|
-
- qk-data-lifecycle
|
|
59
|
-
- qk-db-optimizer
|
|
60
|
-
|
|
61
|
-
knowledge_scope:
|
|
62
|
-
owns:
|
|
63
|
-
- data-pipeline-architecture
|
|
64
|
-
- data-contracts
|
|
65
|
-
- data-quality-gate
|
|
66
|
-
- incremental-processing
|
|
67
|
-
references:
|
|
68
|
-
- architecture
|
|
69
|
-
- security
|
|
70
|
-
- performance
|
|
71
|
-
|
|
72
|
-
# ── V8: Verification ───────────────────────────────────────
|
|
73
|
-
verification:
|
|
74
|
-
required: true
|
|
75
|
-
strategy: feature
|
|
76
|
-
|
|
77
|
-
examples: []
|
|
78
|
-
learnings: []
|
|
79
|
-
|
|
80
|
-
# ── V7 Runtime ─────────────────────────────────────────────
|
|
81
|
-
execution_mode: deterministic
|
|
82
|
-
cost: high
|
|
83
|
-
latency: medium
|
|
84
|
-
risk: high
|
|
85
|
-
side_effects: edit_files
|
|
86
|
-
produces: [code, schema, report]
|
|
87
|
-
consumes:
|
|
88
|
-
- user-request
|
|
89
|
-
- project-source-code
|
|
90
|
-
- project-config
|
|
91
|
-
- project-tests
|
|
92
|
-
- project-documentation
|
|
93
|
-
- project-memory
|
|
94
|
-
|
|
95
|
-
token_budget:
|
|
96
|
-
max_files_read: 20
|
|
97
|
-
max_lines_per_read: 200
|
|
98
|
-
max_shell_commands: 10
|
|
99
|
-
stop_early: true
|
|
100
|
-
|
|
101
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
# qk-data-engineer — Universal Data Engineer
|
|
105
|
-
|
|
106
|
-
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
107
|
-
|
|
108
|
-
Chịu trách nhiệm thiết kế và hiện thực hóa các đường ống dữ liệu (Data Pipelines: ETL/ELT) tuân thủ nghiêm ngặt 4 trụ cột kỹ thuật dữ liệu: **Idempotency (Tính lũy thừa) → Data Quality Gate (Cổng kiểm tra chất lượng) → Lineage (Nguồn gốc luồng dữ liệu) → Incremental Processing (Xử lý gia tăng)**.
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Preconditions
|
|
113
|
-
|
|
114
|
-
Trước khi xây dựng hoặc cập nhật pipeline dữ liệu, AI BẮT BUỘC kiểm tra:
|
|
115
|
-
|
|
116
|
-
- [ ] Xác định Data stack từ `.agents/DEV_PROFILE.md` (Orchestrator: Airflow/Prefect, Warehouse: BigQuery/Snowflake/Postgres, Transformation: dbt/Spark/Pandas).
|
|
117
|
-
- [ ] Xác định chiến lược Idempotency (Upsert, Merge, Partition overwrite, Watermarking).
|
|
118
|
-
- [ ] Xác định ngưỡng Data Quality Gates (Null check, Uniqueness, Volume anomaly, Freshness).
|
|
119
|
-
- [ ] Nếu pipeline không có cơ chế Idempotent (chạy lại gây duplicate dữ liệu) hoặc thiếu validation:
|
|
120
|
-
→ **EXIT: BLOCKED**
|
|
121
|
-
→ Báo cáo user yêu cầu xác định deduplication key / partition strategy trước khi code.
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Scope
|
|
126
|
-
|
|
127
|
-
✅ Skill này làm:
|
|
128
|
-
- Thiết kế và cài đặt dbt models (Staging → Intermediate → Marts), Spark jobs, Airflow DAGs.
|
|
129
|
-
- Cấu hình chiến lược Incremental load (Timestamp watermarking, CDC, Partition replacement).
|
|
130
|
-
- Thiết lập Data Quality Assertions (dbt tests, Great Expectations, Soda checks).
|
|
131
|
-
- Quản lý Schema Evolution (thay đổi cột an toàn, chống silent failure / schema drift).
|
|
132
|
-
- Viết tài liệu Lineage và từ điển dữ liệu (Data Dictionary).
|
|
133
|
-
|
|
134
|
-
❌ Skill này KHÔNG làm:
|
|
135
|
-
- Thiết kế UI Dashboard hay biểu đồ trên web app (→ `qk-ui-builder`).
|
|
136
|
-
- Viết CRUD REST API cho web backend thông thường (→ `qk-api-lifecycle`).
|
|
137
|
-
- Quản lý hạ tầng cụm máy chủ vật lý / Kafka cluster (→ `qk-devops-platform`).
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## Execution Steps
|
|
142
|
-
|
|
143
|
-
### Step 1 — Source Analysis & Data Contract
|
|
144
|
-
```
|
|
145
|
-
Inputs: Yêu cầu pipeline từ user, Source schema, Volume ước tính
|
|
146
|
-
Actions:
|
|
147
|
-
- Phân tích cấu trúc nguồn dữ liệu (Source freshness, Primary keys, Update timestamps).
|
|
148
|
-
- Thỏa thuận Data Contract giữa nhà cung cấp dữ liệu và Data Warehouse.
|
|
149
|
-
- Xác định partition strategy (theo date/hour) và clustering keys.
|
|
150
|
-
Output: Pipeline Architectural Plan & Contract
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Step 2 — Transformation & Idempotent Logic
|
|
154
|
-
```
|
|
155
|
-
Inputs: Contract, Tech stack
|
|
156
|
-
Actions:
|
|
157
|
-
- Viết code transformation (SQL/Python/PySpark) chia theo các tầng Medallion (Bronze/Silver/Gold).
|
|
158
|
-
- Đảm bảo logic tính toán có tính lũy thừa (Idempotent): rerun nhiều lần không thay đổi kết quả.
|
|
159
|
-
- Tối ưu hóa câu query xử lý dữ liệu lớn (Pruning partitions, tránh full table scan).
|
|
160
|
-
Output: Transformation scripts & Models
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Step 3 — Quality Gates & Anomaly Checks
|
|
164
|
-
```
|
|
165
|
-
Inputs: Transformation scripts
|
|
166
|
-
Actions:
|
|
167
|
-
- Thêm tests bắt buộc: Not null, Unique, Referential integrity (Foreign keys).
|
|
168
|
-
- Thêm row count checks và freshness sensors để phát hiện dữ liệu rỗng bất thường.
|
|
169
|
-
- Cấu hình cơ chế cảnh báo (Alert) khi chất lượng dữ liệu không đạt chuẩn.
|
|
170
|
-
Output: Test suite & Monitoring rules
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Step 4 — Verification & Dry Run
|
|
174
|
-
```
|
|
175
|
-
Inputs: Pipeline code & Quality tests
|
|
176
|
-
Actions:
|
|
177
|
-
- Kiểm tra cú pháp, compile SQL/dbt models.
|
|
178
|
-
- Xác nhận kế hoạch backfill dữ liệu lịch sử an toàn.
|
|
179
|
-
Exit: SUCCESS nếu pipeline bảo đảm tính idempotent và pass mọi quality gates.
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Prompt Template
|
|
185
|
-
|
|
186
|
-
AI đọc `DEV_PROFILE.md` để biết data stack (pipeline/warehouse/format/broker).
|
|
187
|
-
Mô tả pipeline cần làm — AI sẽ thiết kế theo đúng tool đang dùng.
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
Pipeline: [Tên pipeline / DAG / job]
|
|
191
|
-
Source: [Nguồn dữ liệu: DB / API / file / stream / ...]
|
|
192
|
-
Destination: [Đích: warehouse / data lake / another DB / ...]
|
|
193
|
-
Frequency: [Batch daily / hourly / streaming / event-driven]
|
|
194
|
-
Volume: [Số rows / GB ước tính mỗi lần chạy]
|
|
195
|
-
SLA: [Data phải có mặt lúc mấy giờ? Latency tối đa?]
|
|
196
|
-
Rules: [Idempotency, dedup, schema evolution, data quality gate]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
### Ví dụ theo tech stack:
|
|
202
|
-
|
|
203
|
-
**dbt + BigQuery + Airflow**
|
|
204
|
-
```
|
|
205
|
-
Pipeline: daily_order_metrics
|
|
206
|
-
Source: PostgreSQL (production DB) — bảng orders, order_items, products
|
|
207
|
-
Destination: BigQuery dataset: mart — table: fct_order_metrics
|
|
208
|
-
Frequency: Daily batch lúc 3AM UTC
|
|
209
|
-
Volume: ~50k rows/ngày, tăng trưởng 10%/tháng
|
|
210
|
-
SLA: Data sẵn sàng trước 6AM UTC cho dashboard
|
|
211
|
-
Rules: - Idempotent: re-run ngày bất kỳ cho kết quả giống nhau
|
|
212
|
-
- Không load ngày hiện tại (incomplete data)
|
|
213
|
-
- Alert nếu row count giảm > 20% so với 7 ngày trước
|
|
214
|
-
- Schema thay đổi ở source → fail loud, không silent corrupt
|
|
215
|
-
```
|
|
216
|
-
→ AI thiết kế: dbt model layers (staging → intermediate → mart),
|
|
217
|
-
Airflow DAG với sensor check source freshness, incremental model strategy
|
|
218
|
-
(merge key = order_id + date), dbt test (not_null, unique, accepted_values),
|
|
219
|
-
partition by date trên BQ để tránh full scan, audit log table.
|
|
220
|
-
|
|
221
|
-
**Spark + Delta Lake + Databricks**
|
|
222
|
-
```
|
|
223
|
-
Pipeline: clickstream_sessionization
|
|
224
|
-
Source: Kafka topic: user.clicks — ~5M events/ngày
|
|
225
|
-
Destination: Delta Lake: /data/gold/user_sessions
|
|
226
|
-
Frequency: Micro-batch mỗi 5 phút (Structured Streaming)
|
|
227
|
-
Volume: ~3.5GB/ngày raw
|
|
228
|
-
SLA: Session data available trong vòng 10 phút kể từ event
|
|
229
|
-
Rules: - Session timeout: 30 phút không activity
|
|
230
|
-
- Exactly-once processing
|
|
231
|
-
- Backfill safe (có thể re-process từ Kafka offset)
|
|
232
|
-
```
|
|
233
|
-
→ AI thiết kế: Spark Structured Streaming với watermark cho late data,
|
|
234
|
-
session window aggregation, Delta Lake MERGE cho upsert sessions,
|
|
235
|
-
checkpoint location strategy, schema enforcement + evolution,
|
|
236
|
-
Z-ORDER optimization cho query patterns, monitoring (lag metrics).
|
|
237
|
-
|
|
238
|
-
**Airbyte + dbt + Snowflake**
|
|
239
|
-
```
|
|
240
|
-
Pipeline: crm_sync — Salesforce → Snowflake → mart
|
|
241
|
-
Source: Salesforce (Airbyte connector) — objects: Account, Opportunity, Contact
|
|
242
|
-
Destination: Snowflake RAW → STAGING → MART
|
|
243
|
-
Frequency: Airbyte sync mỗi 1 giờ, dbt transform mỗi 2 giờ
|
|
244
|
-
Volume: ~500k records total, delta ~2k/ngày
|
|
245
|
-
SLA: CRM data lag tối đa 3 giờ so với Salesforce
|
|
246
|
-
Rules: - Không xóa hard delete từ source (soft delete pattern)
|
|
247
|
-
- PII fields (email, phone) phải masked trong MART layer
|
|
248
|
-
- Lineage từ Salesforce ID phải traceable đến mart row
|
|
249
|
-
```
|
|
250
|
-
→ AI thiết kế: Airbyte connection config + normalization settings,
|
|
251
|
-
dbt source freshness test, PII masking macro, soft-delete handling
|
|
252
|
-
(dbt snapshot vs custom), column-level lineage documentation,
|
|
253
|
-
Snowflake role-based access cho MART vs RAW.
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ── Identity ───────────────────────────────────────────────
|
|
3
|
-
name: qk-data-lifecycle
|
|
4
|
-
version: 9.2.0
|
|
5
|
-
status: stable
|
|
6
|
-
description: "Quản lý Schema và Migration cơ sở dữ liệu an toàn — schema freeze, backward-compatible migrations, data transformation, zero-downtime deployment. Dùng skill này khi user nhắc đến: sửa schema, migration, database model, db schema, cập nhật database, đổi model, thêm cột, alter table — kể cả khi chỉ nói 'thêm trường phone vào bảng users'."
|
|
7
|
-
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
|
-
|
|
9
|
-
# ── V9: Classification ─────────────────────────────────────
|
|
10
|
-
type: capability
|
|
11
|
-
|
|
12
|
-
intent:
|
|
13
|
-
- schema-management
|
|
14
|
-
- database-migration
|
|
15
|
-
|
|
16
|
-
complexity:
|
|
17
|
-
level: high
|
|
18
|
-
criteria:
|
|
19
|
-
files_affected: "1-5"
|
|
20
|
-
has_behavior_change: true
|
|
21
|
-
has_external_dependency: true
|
|
22
|
-
has_breaking_change: false
|
|
23
|
-
|
|
24
|
-
triggers:
|
|
25
|
-
- "sửa schema"
|
|
26
|
-
- "migration"
|
|
27
|
-
- "database model"
|
|
28
|
-
- "db schema"
|
|
29
|
-
- "cập nhật database"
|
|
30
|
-
- "đổi model"
|
|
31
|
-
- "thêm cột"
|
|
32
|
-
- "alter table"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
# ── V8: References ─────────────────────────────────────────
|
|
36
|
-
workflow: feature-delivery
|
|
37
|
-
|
|
38
|
-
rules:
|
|
39
|
-
- global
|
|
40
|
-
- coding
|
|
41
|
-
- safety
|
|
42
|
-
|
|
43
|
-
tools:
|
|
44
|
-
- filesystem
|
|
45
|
-
- terminal
|
|
46
|
-
|
|
47
|
-
related_skills:
|
|
48
|
-
- qk-db-optimizer
|
|
49
|
-
- qk-api-lifecycle
|
|
50
|
-
|
|
51
|
-
knowledge_scope:
|
|
52
|
-
owns:
|
|
53
|
-
- schema
|
|
54
|
-
- migrations
|
|
55
|
-
- data-contracts
|
|
56
|
-
references:
|
|
57
|
-
- architecture
|
|
58
|
-
- security
|
|
59
|
-
- anti-patterns
|
|
60
|
-
|
|
61
|
-
# ── V8: Verification ───────────────────────────────────────
|
|
62
|
-
verification:
|
|
63
|
-
required: true
|
|
64
|
-
strategy: migration-safety
|
|
65
|
-
|
|
66
|
-
selection:
|
|
67
|
-
priority: high
|
|
68
|
-
confidence_threshold: 0.85
|
|
69
|
-
|
|
70
|
-
examples: []
|
|
71
|
-
learnings: []
|
|
72
|
-
|
|
73
|
-
# ── V7 Runtime ─────────────────────────────────────────────
|
|
74
|
-
execution_mode: deterministic
|
|
75
|
-
cost: high
|
|
76
|
-
latency: slow
|
|
77
|
-
risk: high
|
|
78
|
-
side_effects: edit_files
|
|
79
|
-
produces: [code, schema]
|
|
80
|
-
consumes: [context-graph, user-description]
|
|
81
|
-
|
|
82
|
-
token_budget:
|
|
83
|
-
max_files_read: 5
|
|
84
|
-
max_lines_per_read: 150
|
|
85
|
-
max_shell_commands: 2
|
|
86
|
-
stop_early: true
|
|
87
|
-
|
|
88
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
# qk-data-lifecycle — Database Schema & Migration Guardian
|
|
92
|
-
|
|
93
|
-
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
94
|
-
|
|
95
|
-
Chịu trách nhiệm quản lý vòng đời Schema DB và Migration an toàn theo nguyên tắc: **Freeze schema → Backward-compatible migration (Expand & Contract) → Cleanup**. Tuyệt đối không làm đứt gãy runtime hoặc gây mất mát dữ liệu live.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## Preconditions
|
|
100
|
-
|
|
101
|
-
Trước khi thay đổi bất kỳ file schema hay migration nào, AI BẮT BUỘC kiểm tra:
|
|
102
|
-
|
|
103
|
-
- [ ] Xác định ORM/Tool đang dùng từ `DEV_PROFILE.md` (Prisma, Drizzle, TypeORM, Alembic, Knex, v.v.).
|
|
104
|
-
- [ ] Xác định Database engine (PostgreSQL, MySQL, SQLite, MongoDB).
|
|
105
|
-
- [ ] **Destructive check**: Thay đổi có chứa thao tác xóa/đổi tên cột (`DROP COLUMN`, `RENAME COLUMN`, thay đổi type thu hẹp dữ liệu) không?
|
|
106
|
-
- [ ] Nếu là thay đổi Destructive:
|
|
107
|
-
→ **EXIT: BLOCKED**
|
|
108
|
-
→ Báo cáo user: Cảnh báo rủi ro downtime và đề xuất áp dụng **Expand & Contract Pattern** thay vì drop/rename trực tiếp.
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Scope
|
|
113
|
-
|
|
114
|
-
✅ Skill này làm:
|
|
115
|
-
- Cập nhật file định nghĩa Schema (ví dụ `schema.prisma`, `schema.ts`, model files).
|
|
116
|
-
- Tạo migration scripts (SQL hoặc ORM-generated) có tính lũy tiến, an toàn.
|
|
117
|
-
- Thiết kế chiến lược **Expand & Contract** khi đổi tên cột hoặc tách bảng (Giai đoạn 1: Thêm cột mới + dual write; Giai đoạn 2: Backfill data; Giai đoạn 3: Deprecate & remove cột cũ).
|
|
118
|
-
- Đảm bảo các cột mới có `DEFAULT` value hoặc `NULLABLE` để tránh khóa bảng (table lock) hoặc lỗi insert từ code cũ đang chạy.
|
|
119
|
-
- Cập nhật types/interfaces tương ứng trong ứng dụng.
|
|
120
|
-
|
|
121
|
-
❌ Skill này KHÔNG làm:
|
|
122
|
-
- Chạy lệnh phá hủy tự động (`prisma migrate reset`, `drop database`, `truncate table`).
|
|
123
|
-
- Viết câu query phân tích hiệu năng/EXPLAIN (→ `qk-db-optimizer`).
|
|
124
|
-
- Viết API endpoint xử lý request/response (→ `qk-api-lifecycle`).
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Execution Steps
|
|
129
|
-
|
|
130
|
-
### Step 1 — Phân tích Schema Diff & Đánh giá rủi ro
|
|
131
|
-
```
|
|
132
|
-
Inputs: Schema hiện tại, Yêu cầu thay đổi từ user
|
|
133
|
-
Actions:
|
|
134
|
-
- So sánh schema cũ và mới.
|
|
135
|
-
- Phân loại:
|
|
136
|
-
- Safe: Thêm bảng mới, thêm nullable column, thêm column có default an toàn.
|
|
137
|
-
- Caution: Thêm index trên bảng lớn (cần CONCURRENTLY nếu Postgres).
|
|
138
|
-
- Dangerous: Xóa cột, đổi tên cột, đổi kiểu dữ liệu (Int -> String hoặc ngược lại).
|
|
139
|
-
Exit: BLOCKED nếu gặp Dangerous change mà chưa có kế hoạch Expand & Contract
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Step 2 — Áp dụng Expand & Contract (nếu có Breaking Change)
|
|
143
|
-
```
|
|
144
|
-
Quy trình chuẩn:
|
|
145
|
-
1. Expand: Thêm cột mới song song (nullable). Code ứng dụng ghi đồng thời cả 2 cột.
|
|
146
|
-
2. Migrate Data: Chạy batch script chuyển dữ liệu từ cột cũ sang cột mới.
|
|
147
|
-
3. Contract: Chuyển code đọc từ cột mới. Sau 1 release ổn định mới xóa cột cũ.
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Step 3 — Sinh Migration Script & Cập nhật ORM
|
|
151
|
-
```
|
|
152
|
-
Actions:
|
|
153
|
-
- Sửa file schema chính (`schema.prisma`, Drizzle `schema.ts`, SQLAlchemy model).
|
|
154
|
-
- Tạo migration file có timestamp rõ ràng (VD: `20260914_add_phone_to_users.sql`).
|
|
155
|
-
- Đi kèm cả script Rollback (Down migration) nếu framework hỗ trợ.
|
|
156
|
-
- Chạy code generation cho types (VD: `npx prisma generate`).
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Step 4 — Verification
|
|
160
|
-
```
|
|
161
|
-
Actions:
|
|
162
|
-
- Kiểm tra cú pháp SQL của migration file.
|
|
163
|
-
- Kiểm tra tính tương thích ngược: Code cũ vẫn insert/query được mà không crash.
|
|
164
|
-
- Kiểm tra Type definitions trong app có bị type error không (chạy tsc/type-check).
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Prompt Template
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
DB Engine: [PostgreSQL / MySQL / SQLite / MongoDB]
|
|
173
|
-
ORM/Tool: [Prisma / Drizzle / TypeORM / Alembic / Knex]
|
|
174
|
-
Thay đổi: [Thêm bảng mới / Thêm trường / Sửa quan hệ / Đổi kiểu dữ liệu]
|
|
175
|
-
Mục đích: [Mô tả nghiệp vụ cần lưu trữ]
|
|
176
|
-
Dữ liệu live: [Có dữ liệu production đang chạy không?]
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Ví dụ theo Stack:
|
|
180
|
-
|
|
181
|
-
**Prisma (PostgreSQL)**
|
|
182
|
-
```
|
|
183
|
-
DB Engine: PostgreSQL
|
|
184
|
-
ORM: Prisma
|
|
185
|
-
Thay đổi: Thêm trường `phoneNumber` vào model `User`, không bắt buộc nhưng phải unique nếu có.
|
|
186
|
-
Dữ liệu live: Có (hơn 100k users)
|
|
187
|
-
```
|
|
188
|
-
→ AI cập nhật: `phoneNumber String? @unique` trong `schema.prisma`, sinh migration SQL với `CREATE UNIQUE INDEX CONCURRENTLY` (nếu cần), chạy `prisma generate`.
|
|
189
|
-
|
|
190
|
-
**Drizzle ORM (MySQL)**
|
|
191
|
-
```
|
|
192
|
-
DB Engine: MySQL
|
|
193
|
-
ORM: Drizzle
|
|
194
|
-
Thay đổi: Tạo bảng `AuditLog` lưu lịch sử hành động người dùng (id, userId, action, metadata JSON, createdAt).
|
|
195
|
-
```
|
|
196
|
-
→ AI tạo: `auditLogs` table definition trong `src/db/schema.ts`, sinh migration file với Drizzle Kit, export type `AuditLog` và `NewAuditLog`.
|
|
197
|
-
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Auto-generated from SKILL.md frontmatter
|
|
2
|
-
schema_version: 1
|
|
3
|
-
id: "qk-data-lifecycle"
|
|
4
|
-
version: "9.1.0"
|
|
5
|
-
description: "Quản lý Schema, Migrations an toàn — schema freeze → backward-compat migration → cleanup."
|
|
6
|
-
tools:
|
|
7
|
-
- "filesystem"
|
|
8
|
-
- "terminal"
|
|
9
|
-
knowledge:
|
|
10
|
-
owns:
|
|
11
|
-
- "schema"
|
|
12
|
-
- "migrations"
|
|
13
|
-
references:
|
|
14
|
-
- "architecture"
|
|
15
|
-
- "security"
|
|
16
|
-
- "anti-patterns"
|
|
17
|
-
eval:
|
|
18
|
-
scorecard: "evals/scorecard.yaml"
|
|
19
|
-
decision_boundary:
|
|
20
|
-
owns:
|
|
21
|
-
- "qk-data-lifecycle"
|
|
22
|
-
does_not_own: []
|
|
23
|
-
conflicts_with: []
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
name: qk-data-lifecycle-eval
|
|
2
|
-
description: Đánh giá chất lượng quản lý Schema và an toàn Migration
|
|
3
|
-
version: 9.1.0
|
|
4
|
-
threshold: 90 # Tiêu chuẩn rất cao vì rủi ro mất mát dữ liệu (Data loss) là CRITICAL
|
|
5
|
-
|
|
6
|
-
metrics:
|
|
7
|
-
- id: backward_compatible_migration
|
|
8
|
-
name: Migration tương thích ngược và an toàn
|
|
9
|
-
description: Agent có tạo migration an toàn, tránh phá vỡ dữ liệu đang chạy không?
|
|
10
|
-
weight: 40
|
|
11
|
-
criteria:
|
|
12
|
-
- Không sử dụng các lệnh destructive (DROP COLUMN, RENAME TABLE) một cách trực tiếp mà không qua chiến lược 3-phase (20đ)
|
|
13
|
-
- Các cột mới (add column) phải nullable hoặc có default value (10đ)
|
|
14
|
-
- Luôn định nghĩa hàm rollback `down()` (10đ)
|
|
15
|
-
|
|
16
|
-
- id: pii_and_security
|
|
17
|
-
name: Bảo mật dữ liệu PII (R-SEC-04)
|
|
18
|
-
description: Dữ liệu nhạy cảm có được mã hóa theo yêu cầu không?
|
|
19
|
-
weight: 30
|
|
20
|
-
criteria:
|
|
21
|
-
- Tự động nhận diện và áp dụng cơ chế hashing/encryption cho các cột chứa dữ liệu PII (Personal Identifiable Information) (30đ)
|
|
22
|
-
|
|
23
|
-
- id: layer_separation
|
|
24
|
-
name: Tách biệt Logic và Schema
|
|
25
|
-
description: Schema và truy vấn có được tách biệt khỏi Business Logic không?
|
|
26
|
-
weight: 30
|
|
27
|
-
criteria:
|
|
28
|
-
- Khai báo Schema (Model/Entity) rõ ràng trước khi viết truy vấn (15đ)
|
|
29
|
-
- Repository chỉ chứa truy vấn Database, không chứa Business Logic phức tạp (15đ)
|