ai-developer-skill-os 7.0.1 → 7.5.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 +44 -88
- package/.agents/CHANGELOG.md +69 -0
- package/.agents/LICENSE +21 -0
- package/.agents/README.md +59 -0
- package/.agents/_template/BEHAVIOR_SPEC.md +96 -0
- package/.agents/_template/examples/example-en.md +49 -0
- package/.agents/_template/examples/example-vi.md +49 -0
- package/.agents/docs/CHI_TIET_SKILLS.md +125 -0
- package/.agents/docs/GOVERNANCE.md +40 -0
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +120 -0
- package/.agents/docs/SPEC.md +87 -0
- package/.agents/docs/adr/0001-intent-based-architecture.md +19 -0
- package/.agents/docs/adr/0002-kernel-freeze.md +21 -0
- package/.agents/docs/adr/0003-risk-based-verification.md +20 -0
- package/.agents/docs/adr/0004-progressive-evidence.md +19 -0
- package/.agents/docs/skill-classification.md +25 -0
- package/.agents/skills/qk-access-policy/SKILL.md +179 -0
- package/.agents/skills/qk-ai-builder/SKILL.md +215 -0
- package/.agents/skills/qk-api-lifecycle/SKILL.md +176 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +307 -0
- package/.agents/skills/qk-context-loader/SKILL.md +218 -0
- package/.agents/skills/qk-data-lifecycle/SKILL.md +192 -0
- package/.agents/skills/qk-db-optimizer/SKILL.md +196 -0
- package/.agents/skills/qk-design-to-code/SKILL.md +285 -0
- package/.agents/skills/qk-docs/SKILL.md +198 -0
- package/.agents/skills/qk-engineering-standard/SKILL.md +351 -0
- package/.agents/skills/qk-engineering-standard/rules/backend.md +122 -0
- package/.agents/skills/qk-engineering-standard/rules/database.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +152 -0
- package/.agents/skills/qk-engineering-standard/rules/security.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/testing.md +3 -0
- package/.agents/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +305 -0
- package/.agents/skills/qk-help/SKILL.md +193 -0
- package/.agents/skills/qk-orchestrator/SKILL.md +277 -0
- package/.agents/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/.agents/skills/qk-production-release/SKILL.md +284 -0
- package/.agents/skills/qk-project-bootstrap/SKILL.md +234 -0
- package/.agents/skills/qk-project-health/SKILL.md +199 -0
- package/.agents/skills/qk-project-memory/SKILL.md +172 -0
- package/.agents/skills/qk-system-evolution/SKILL.md +281 -0
- package/.agents/skills/qk-ui-audit/SKILL.md +314 -0
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/.agents/skills/qk-ui-system-builder/SKILL.md +221 -0
- package/.agents/skills/qk-validation-gate/SKILL.md +359 -0
- package/.agents/skills.json +819 -0
- package/.github/workflows/ci.yml +1 -1
- package/.qk-ai-skill-os/CHANGELOG.md +69 -0
- package/.qk-ai-skill-os/LICENSE +21 -0
- package/.qk-ai-skill-os/README.md +59 -0
- package/.qk-ai-skill-os/_template/BEHAVIOR_SPEC.md +96 -0
- package/.qk-ai-skill-os/_template/examples/example-en.md +49 -0
- package/.qk-ai-skill-os/_template/examples/example-vi.md +49 -0
- package/.qk-ai-skill-os/docs/CHI_TIET_SKILLS.md +125 -0
- package/.qk-ai-skill-os/docs/GOVERNANCE.md +40 -0
- package/.qk-ai-skill-os/docs/HUONG_DAN_SU_DUNG.md +120 -0
- package/.qk-ai-skill-os/docs/SPEC.md +87 -0
- package/.qk-ai-skill-os/docs/adr/0001-intent-based-architecture.md +19 -0
- package/.qk-ai-skill-os/docs/adr/0002-kernel-freeze.md +21 -0
- package/.qk-ai-skill-os/docs/adr/0003-risk-based-verification.md +20 -0
- package/.qk-ai-skill-os/docs/adr/0004-progressive-evidence.md +19 -0
- package/.qk-ai-skill-os/docs/skill-classification.md +25 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +121 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +179 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-api-integration/SKILL.md +389 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-auth-security/SKILL.md +96 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +125 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-bug-fix/SKILL.md +213 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-component-generator/SKILL.md +136 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-context-manager/SKILL.md +175 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-database-engineer/SKILL.md +104 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-deployment/SKILL.md +96 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-design-system/SKILL.md +137 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-form-builder/SKILL.md +140 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +155 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +133 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +129 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +146 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-git-engineer/SKILL.md +304 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-help/SKILL.md +68 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-migration/SKILL.md +284 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-project-audit/SKILL.md +280 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-refactor/SKILL.md +222 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-state-management/SKILL.md +140 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +127 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-ui-builder/SKILL.md +152 -0
- package/.qk-ai-skill-os/skills/_template/SKILL.md +238 -0
- package/.qk-ai-skill-os/skills/qk-access-policy/SKILL.md +179 -0
- package/.qk-ai-skill-os/skills/qk-ai-builder/SKILL.md +221 -0
- package/.qk-ai-skill-os/skills/qk-api-lifecycle/SKILL.md +176 -0
- package/.qk-ai-skill-os/skills/qk-bug-resolution/SKILL.md +307 -0
- package/.qk-ai-skill-os/skills/qk-context-loader/SKILL.md +218 -0
- package/.qk-ai-skill-os/skills/qk-data-lifecycle/SKILL.md +192 -0
- package/.qk-ai-skill-os/skills/qk-db-optimizer/SKILL.md +196 -0
- package/.qk-ai-skill-os/skills/qk-design-to-code/SKILL.md +291 -0
- package/.qk-ai-skill-os/skills/qk-docs/SKILL.md +198 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/SKILL.md +351 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/backend.md +122 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/database.md +3 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/frontend.md +152 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/security.md +3 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/testing.md +3 -0
- package/.qk-ai-skill-os/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/.qk-ai-skill-os/skills/qk-feature-delivery/SKILL.md +305 -0
- package/.qk-ai-skill-os/skills/qk-help/SKILL.md +193 -0
- package/.qk-ai-skill-os/skills/qk-orchestrator/SKILL.md +277 -0
- package/.qk-ai-skill-os/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/.qk-ai-skill-os/skills/qk-production-release/SKILL.md +290 -0
- package/.qk-ai-skill-os/skills/qk-project-bootstrap/SKILL.md +240 -0
- package/.qk-ai-skill-os/skills/qk-project-health/SKILL.md +199 -0
- package/.qk-ai-skill-os/skills/qk-project-memory/SKILL.md +172 -0
- package/.qk-ai-skill-os/skills/qk-system-evolution/SKILL.md +285 -0
- package/.qk-ai-skill-os/skills/qk-ui-audit/SKILL.md +314 -0
- package/.qk-ai-skill-os/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/.qk-ai-skill-os/skills/qk-ui-system-builder/SKILL.md +225 -0
- package/.qk-ai-skill-os/skills/qk-validation-gate/SKILL.md +361 -0
- package/.qk-ai-skill-os/skills.json +819 -0
- package/CHANGELOG.md +5 -0
- package/CLAUDE.md +110 -0
- package/README.md +26 -4
- package/add_lang.js +21 -0
- package/add_lang.py +25 -0
- package/add_sections.py +53 -0
- package/bin/install.js +225 -170
- package/bin/lint.js +122 -0
- package/docs/CHI_TIET_SKILLS.md +26 -26
- package/docs/HUONG_DAN_SU_DUNG.md +3 -3
- package/docs/SPEC.md +70 -20
- package/framework/skill-schema.md +310 -0
- package/package.json +15 -4
- package/patch.js +15 -0
- package/patch.py +89 -0
- package/patch2.py +83 -0
- package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-api-integration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-auth-security/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-component-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-context-manager/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-deployment/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-design-system/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-form-builder/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-help/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-migration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-project-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-refactor/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-state-management/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +1 -0
- package/skills/_template/SKILL.md +238 -0
- package/skills/qk-access-policy/SKILL.md +179 -39
- package/skills/qk-ai-builder/SKILL.md +215 -40
- package/skills/qk-api-lifecycle/SKILL.md +176 -46
- package/skills/qk-bug-resolution/SKILL.md +307 -46
- package/skills/qk-context-loader/SKILL.md +218 -43
- package/skills/qk-data-lifecycle/SKILL.md +192 -44
- package/skills/qk-db-optimizer/SKILL.md +196 -41
- package/skills/qk-design-to-code/SKILL.md +285 -46
- package/skills/qk-docs/SKILL.md +198 -40
- package/skills/qk-engineering-standard/SKILL.md +351 -42
- package/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/skills/qk-feature-delivery/SKILL.md +305 -48
- package/skills/qk-help/SKILL.md +178 -23
- package/skills/qk-orchestrator/SKILL.md +277 -42
- package/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/skills/qk-production-release/SKILL.md +284 -41
- package/skills/qk-project-bootstrap/SKILL.md +234 -38
- package/skills/qk-project-health/SKILL.md +199 -40
- package/skills/qk-project-memory/SKILL.md +172 -40
- package/skills/qk-system-evolution/SKILL.md +281 -40
- package/skills/qk-ui-audit/SKILL.md +314 -42
- package/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/skills/qk-ui-system-builder/SKILL.md +221 -43
- package/skills/qk-validation-gate/SKILL.md +359 -40
- package/skills.json +813 -789
- package/specs/fixtures/user-payload.json +12 -0
- package/specs/regressions/api-integration-null-fields.yaml +19 -0
- package/temp_fix.js +61 -0
- package/tests/registry.test.js +1 -1
- package/update_template.js +28 -0
- package/skills/qk-policy-engine/SKILL.md +0 -39
|
@@ -1,42 +1,351 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: qk-engineering-standard
|
|
3
|
-
category: qa
|
|
4
|
-
version: 7.
|
|
5
|
-
description: "Ép buộc
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
---
|
|
2
|
+
name: qk-engineering-standard
|
|
3
|
+
category: qa
|
|
4
|
+
version: 7.5.0
|
|
5
|
+
description: "Ép buộc SOLID, DRY, Clean Code với ngưỡng số liệu cụ thể — không có rule mơ hồ."
|
|
6
|
+
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
7
|
+
execution_mode: deterministic
|
|
8
|
+
|
|
9
|
+
cost: medium
|
|
10
|
+
latency: medium
|
|
11
|
+
risk: low
|
|
12
|
+
side_effects: read_only
|
|
13
|
+
produces: [report]
|
|
14
|
+
consumes: [source-code]
|
|
15
|
+
|
|
16
|
+
token_budget:
|
|
17
|
+
max_files_read: 5
|
|
18
|
+
max_lines_per_read: 150
|
|
19
|
+
max_shell_commands: 1
|
|
20
|
+
stop_early: true
|
|
21
|
+
|
|
22
|
+
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
23
|
+
skill_version: 7.5.0
|
|
24
|
+
runtime_version: 1
|
|
25
|
+
schema_version: 2
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# qk-engineering-standard — Code Quality Enforcer
|
|
29
|
+
|
|
30
|
+
> **Language rule:** Code, identifiers, file names ? English. Explanations, summaries ? Vietnamese.
|
|
31
|
+
|
|
32
|
+
skill_version: 7.5.0
|
|
33
|
+
runtime_version: 1
|
|
34
|
+
schema_version: 2
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Preconditions
|
|
38
|
+
- [ ] Target file(s) or module(s) are specified
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
On missing precondition:
|
|
42
|
+
EXIT: BLOCKED
|
|
43
|
+
Message: "Vui lòng chỉ định file hoặc module cần kiểm tra."
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
skill_version: 7.5.0
|
|
47
|
+
runtime_version: 1
|
|
48
|
+
schema_version: 2
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Scope
|
|
52
|
+
- ✅ Detect violations with exact file:line references
|
|
53
|
+
- ✅ Classify by severity with concrete thresholds
|
|
54
|
+
- ✅ Suggest minimal, targeted refactors
|
|
55
|
+
|
|
56
|
+
## Non-Goals
|
|
57
|
+
- ❌ Auto-fix code — report only (fixes go to qk-bug-resolution or qk-feature-delivery)
|
|
58
|
+
- ❌ Rewrite architecture
|
|
59
|
+
- ❌ Touch files outside the specified scope
|
|
60
|
+
|
|
61
|
+
skill_version: 7.5.0
|
|
62
|
+
runtime_version: 1
|
|
63
|
+
schema_version: 2
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Concrete Thresholds (Non-Negotiable)
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
function:
|
|
70
|
+
max_lines: 30 # Lines of code, excluding comments/blanks
|
|
71
|
+
max_cyclomatic_complexity: 10
|
|
72
|
+
max_parameters: 4
|
|
73
|
+
|
|
74
|
+
file:
|
|
75
|
+
max_lines: 300
|
|
76
|
+
max_public_methods_per_class: 10 # God Class threshold
|
|
77
|
+
|
|
78
|
+
dry:
|
|
79
|
+
violation_threshold: 3 # Same logic duplicated in ≥ 3 places
|
|
80
|
+
|
|
81
|
+
separation_of_concerns:
|
|
82
|
+
violation: "File mixes UI rendering + API calls + State management"
|
|
83
|
+
|
|
84
|
+
naming:
|
|
85
|
+
min_variable_name_length: 2 # Single-letter vars (except i,j,k in loops)
|
|
86
|
+
max_abbreviation_ratio: 0.3 # > 30% abbreviations in identifiers = violation
|
|
87
|
+
|
|
88
|
+
dependency:
|
|
89
|
+
max_imports_per_file: 15 # Beyond this: likely a God File
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
skill_version: 7.5.0
|
|
93
|
+
runtime_version: 1
|
|
94
|
+
schema_version: 2
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Priority Order
|
|
98
|
+
|
|
99
|
+
| Priority | Check | Severity | Skip Threshold |
|
|
100
|
+
|----------|-------|----------|----------------|
|
|
101
|
+
| P1 | Security violations (hardcoded secrets, SQL injection) | CRITICAL | Never |
|
|
102
|
+
| P2 | God Functions > 30 lines / complexity > 10 | HIGH | Budget < 30% |
|
|
103
|
+
| P3 | God Files > 300 lines / God Classes | HIGH | Budget < 40% |
|
|
104
|
+
| P4 | DRY violations (3+ duplicates) | MEDIUM | Budget < 50% |
|
|
105
|
+
| P5 | Mixed concerns in single file | MEDIUM | Budget < 60% |
|
|
106
|
+
| P6 | Naming convention violations | LOW | Budget < 70% |
|
|
107
|
+
| P7 | Excessive imports / coupling | LOW | Budget < 80% |
|
|
108
|
+
|
|
109
|
+
skill_version: 7.5.0
|
|
110
|
+
runtime_version: 1
|
|
111
|
+
schema_version: 2
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Workflow
|
|
115
|
+
|
|
116
|
+
### Phase 1 — Scan for Critical & High Violations
|
|
117
|
+
|
|
118
|
+
**Steps:**
|
|
119
|
+
1. `grep_search` — search for: hardcoded secrets, `console.log`, `eval(`, `any` types
|
|
120
|
+
2. `view_file[targeted]` — read function definitions to count lines and parameters
|
|
121
|
+
3. Log each violation with Evidence Format
|
|
122
|
+
|
|
123
|
+
**Decision:**
|
|
124
|
+
```
|
|
125
|
+
IF CRITICAL violation found (e.g., hardcoded API key)
|
|
126
|
+
→ Report immediately, mark EXIT: FAILED
|
|
127
|
+
→ Still continue scanning (don't stop at first critical)
|
|
128
|
+
|
|
129
|
+
IF function line count > 30 OR complexity > 10
|
|
130
|
+
→ Log as [HIGH]
|
|
131
|
+
|
|
132
|
+
IF file line count > 300
|
|
133
|
+
→ Log as [HIGH] — God File suspected
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Exit When:**
|
|
137
|
+
- All P1+P2+P3 checks done → go to Phase 2
|
|
138
|
+
- Token budget < 30% → go to Phase 3 directly with PARTIAL flag
|
|
139
|
+
|
|
140
|
+
skill_version: 7.5.0
|
|
141
|
+
runtime_version: 1
|
|
142
|
+
schema_version: 2
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### Phase 2 — Scan for Medium & Low Violations
|
|
146
|
+
|
|
147
|
+
**Steps:**
|
|
148
|
+
1. `grep_search` — find duplicate logic patterns (copy-paste code)
|
|
149
|
+
2. Check import counts per file
|
|
150
|
+
3. Check naming conventions
|
|
151
|
+
|
|
152
|
+
**Decision:**
|
|
153
|
+
```
|
|
154
|
+
IF same logic block appears ≥ 3 times
|
|
155
|
+
→ Log as [MEDIUM] DRY violation
|
|
156
|
+
|
|
157
|
+
IF file has > 15 imports
|
|
158
|
+
→ Log as [LOW] — potential God File or tight coupling
|
|
159
|
+
|
|
160
|
+
IF token budget < 50%
|
|
161
|
+
→ Skip P6+P7, go to Phase 3
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
skill_version: 7.5.0
|
|
165
|
+
runtime_version: 1
|
|
166
|
+
schema_version: 2
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### Phase 3 — Score & Report
|
|
170
|
+
|
|
171
|
+
**Steps:**
|
|
172
|
+
1. Count violations by severity
|
|
173
|
+
2. Calculate health score: start at 100, deduct per violation
|
|
174
|
+
3. Generate report
|
|
175
|
+
|
|
176
|
+
**Deduction Scale:**
|
|
177
|
+
```
|
|
178
|
+
CRITICAL: -25 pts each
|
|
179
|
+
HIGH: -10 pts each
|
|
180
|
+
MEDIUM: -5 pts each
|
|
181
|
+
LOW: -2 pts each
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Decision:**
|
|
185
|
+
```
|
|
186
|
+
IF score ≥ 80 AND no CRITICAL violations
|
|
187
|
+
→ EXIT: SUCCESS
|
|
188
|
+
|
|
189
|
+
IF score 60–79 OR any HIGH violations
|
|
190
|
+
→ EXIT: PARTIAL — list fixes needed
|
|
191
|
+
|
|
192
|
+
IF score < 60 OR any CRITICAL violations
|
|
193
|
+
→ EXIT: FAILED — requires immediate action
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
skill_version: 7.5.0
|
|
197
|
+
runtime_version: 1
|
|
198
|
+
schema_version: 2
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Confidence Model
|
|
202
|
+
|
|
203
|
+
| Level | Condition | Action |
|
|
204
|
+
|-------|-----------|--------|
|
|
205
|
+
| HIGH | Direct line count, exact pattern match | Report as violation |
|
|
206
|
+
| MEDIUM | Inferred cyclomatic complexity without tool | Note estimate |
|
|
207
|
+
| LOW | Architectural smell inferred from structure | Mark as "suspected — verify manually" |
|
|
208
|
+
|
|
209
|
+
skill_version: 7.5.0
|
|
210
|
+
runtime_version: 1
|
|
211
|
+
schema_version: 2
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Severity
|
|
215
|
+
|
|
216
|
+
| Level | Definition | Example |
|
|
217
|
+
|-------|-----------|---------|
|
|
218
|
+
| CRITICAL | Security risk or data integrity | Hardcoded secret, SQL injection via string concat |
|
|
219
|
+
| HIGH | Technical debt that blocks scaling | Function 80 lines, God Class 15+ methods |
|
|
220
|
+
| MEDIUM | DRY or SoC violation, fixable in < 1 hour | Same validation logic in 3 components |
|
|
221
|
+
| LOW | Style/naming issue, non-blocking | Single-letter variable `x` outside loop |
|
|
222
|
+
|
|
223
|
+
skill_version: 7.5.0
|
|
224
|
+
runtime_version: 1
|
|
225
|
+
schema_version: 2
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Evidence Format
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
[SEVERITY] path/to/file.ts:LINE
|
|
232
|
+
Rule: [FUNCTION_LENGTH | COMPLEXITY | DRY | SOC | NAMING | GOD_CLASS | SECRET]
|
|
233
|
+
Reason: [specific measurement vs threshold]
|
|
234
|
+
Confidence: [HIGH|MEDIUM|LOW]
|
|
235
|
+
Fix: [one-line suggestion]
|
|
236
|
+
Deduction: -N pts
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Example:**
|
|
240
|
+
```
|
|
241
|
+
[HIGH] src/services/order.service.ts:45
|
|
242
|
+
Rule: FUNCTION_LENGTH
|
|
243
|
+
Reason: Function `processOrder` is 87 lines (threshold: 30)
|
|
244
|
+
Confidence: HIGH
|
|
245
|
+
Fix: Extract payment logic to `processPayment()`, shipping to `scheduleShipment()`
|
|
246
|
+
Deduction: -10 pts
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
skill_version: 7.5.0
|
|
250
|
+
runtime_version: 1
|
|
251
|
+
schema_version: 2
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Retry Policy
|
|
255
|
+
```
|
|
256
|
+
Audit is read-only — no retry needed.
|
|
257
|
+
If file is inaccessible → skip and note in report as PARTIAL.
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
skill_version: 7.5.0
|
|
261
|
+
runtime_version: 1
|
|
262
|
+
schema_version: 2
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Escalation Rules
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
BLOCKED: No target specified
|
|
269
|
+
Missing:
|
|
270
|
+
- File path or module name to audit
|
|
271
|
+
Questions:
|
|
272
|
+
1. Bạn muốn kiểm tra file nào hoặc toàn bộ module nào?
|
|
273
|
+
2. Có ngưỡng cụ thể nào bạn muốn thay đổi không? (mặc định: 30 lines/function)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
skill_version: 7.5.0
|
|
277
|
+
runtime_version: 1
|
|
278
|
+
schema_version: 2
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Handoff Contract
|
|
282
|
+
|
|
283
|
+
### Consumes
|
|
284
|
+
```json
|
|
285
|
+
{
|
|
286
|
+
"from": "user or qk-orchestrator",
|
|
287
|
+
"required_fields": ["target_files_or_module"],
|
|
288
|
+
"optional_fields": ["custom_thresholds"]
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Produces
|
|
293
|
+
```json
|
|
294
|
+
{
|
|
295
|
+
"to": "user",
|
|
296
|
+
"output_fields": ["health_score", "violations_list", "severity_counts", "exit_code"]
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
skill_version: 7.5.0
|
|
301
|
+
runtime_version: 1
|
|
302
|
+
schema_version: 2
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Output Format
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
⚙️ Engineering Standard Audit
|
|
309
|
+
─────────────────────────────────────────────────
|
|
310
|
+
Target: [file or module]
|
|
311
|
+
|
|
312
|
+
Health Score: [X/100]
|
|
313
|
+
CRITICAL violations: [N] (-Npts)
|
|
314
|
+
HIGH violations: [N] (-Npts)
|
|
315
|
+
MEDIUM violations: [N] (-Npts)
|
|
316
|
+
LOW violations: [N] (-Npts)
|
|
317
|
+
|
|
318
|
+
Violations (priority order):
|
|
319
|
+
[SEVERITY] file:LINE — Rule — reason — Fix — (-Xpts)
|
|
320
|
+
|
|
321
|
+
Required Actions:
|
|
322
|
+
1. [Most critical fix]
|
|
323
|
+
2. [Second fix]
|
|
324
|
+
|
|
325
|
+
Exit Code: [SUCCESS | PARTIAL | FAILED]
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
skill_version: 7.5.0
|
|
329
|
+
runtime_version: 1
|
|
330
|
+
schema_version: 2
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Exit Codes
|
|
334
|
+
|
|
335
|
+
| Code | Meaning | When |
|
|
336
|
+
|------|---------|------|
|
|
337
|
+
| SUCCESS | Score ≥ 80, no CRITICAL | Code meets V7.5 standards |
|
|
338
|
+
| PARTIAL | Score 60–79 or incomplete scan | Some categories skipped |
|
|
339
|
+
| BLOCKED | No target specified | Cannot audit without scope |
|
|
340
|
+
| FAILED | Score < 60 or CRITICAL found | Immediate action required |
|
|
341
|
+
|
|
342
|
+
skill_version: 7.5.0
|
|
343
|
+
runtime_version: 1
|
|
344
|
+
schema_version: 2
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## References
|
|
348
|
+
- Detailed thresholds with rationale: `references/thresholds.md`
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qk-fe-api-integration
|
|
3
|
+
category: frontend
|
|
4
|
+
version: 7.5.0
|
|
5
|
+
description: "Consume API Backend, quản lý State, bind vào UI — tuân thủ kiến trúc Base dự án"
|
|
6
|
+
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
7
|
+
execution_mode: deterministic
|
|
8
|
+
|
|
9
|
+
cost: medium
|
|
10
|
+
latency: medium
|
|
11
|
+
risk: low
|
|
12
|
+
side_effects: edit_files
|
|
13
|
+
produces: [code]
|
|
14
|
+
consumes: [json-payload, context-graph]
|
|
15
|
+
|
|
16
|
+
token_budget:
|
|
17
|
+
max_files_read: 3
|
|
18
|
+
max_lines_per_read: 100
|
|
19
|
+
max_shell_commands: 1
|
|
20
|
+
stop_early: true
|
|
21
|
+
|
|
22
|
+
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
23
|
+
skill_version: 7.5.0
|
|
24
|
+
runtime_version: 1
|
|
25
|
+
schema_version: 2
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# qk-fe-api-integration — Frontend API Consumer
|
|
29
|
+
|
|
30
|
+
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Preconditions
|
|
35
|
+
- [ ] Backend JSON payload hoặc API endpoint schema được cung cấp
|
|
36
|
+
- [ ] Project's API client pattern được xác định (Axios wrapper, RTK Query, React Query, etc.)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
On missing precondition:
|
|
40
|
+
EXIT: BLOCKED
|
|
41
|
+
Message: "Cần cung cấp: JSON response mẫu VÀ xác nhận API client pattern hiện tại của dự án."
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
- ✅ Identify existing API client pattern (NEVER default to raw fetch if wrapper exists)
|
|
48
|
+
- ✅ Generate strict TypeScript interfaces from JSON payload
|
|
49
|
+
- ✅ Implement service layer (API calls separated from UI)
|
|
50
|
+
- ✅ Handle all 3 UI states: Loading, Success, Error
|
|
51
|
+
- ✅ Map backend payload → DTO before injecting into UI components
|
|
52
|
+
|
|
53
|
+
## Non-Goals
|
|
54
|
+
- ❌ Hardcode API Base URLs in UI components — use env vars or centralized config
|
|
55
|
+
- ❌ Inject API logic inside presentational (dumb) components
|
|
56
|
+
- ❌ Introduce new state management libraries without explicit user approval
|
|
57
|
+
- ❌ Hallucinate data fields not in provided JSON payload
|
|
58
|
+
- ❌ Create Node.js/Python scripts to patch — edit files directly
|
|
59
|
+
- ❌ Read entire files > 100 lines — use targeted reads
|
|
60
|
+
- ❌ Default to raw fetch if wrapper exists — ALWAYS reuse existing client
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Priority Order
|
|
65
|
+
|
|
66
|
+
| Priority | Task | Skip Threshold |
|
|
67
|
+
|----------|------|----------------|
|
|
68
|
+
| P1 | Identify existing API client (grep package.json, src/api/) | Never |
|
|
69
|
+
| P2 | Generate TypeScript interfaces from JSON payload | Never |
|
|
70
|
+
| P3 | Implement service layer (API calls) | Never |
|
|
71
|
+
| P4 | Bind to UI with Loading + Success + Error states | Budget < 30% |
|
|
72
|
+
| P5 | Cache invalidation after mutations (POST/PUT/DELETE) | Budget < 60% |
|
|
73
|
+
| P6 | DTO mapping (backend payload → clean UI data) | Budget < 70% |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Workflow
|
|
78
|
+
|
|
79
|
+
### Phase 1 — Identify Base Architecture
|
|
80
|
+
|
|
81
|
+
**Steps:**
|
|
82
|
+
1. `grep_search` in `package.json` → identify: axios, react-query, rtk-query, swr, or custom
|
|
83
|
+
2. `view_file[src/api/]` (first 30 lines) → confirm wrapper pattern
|
|
84
|
+
3. Identify: base URL config, auth header injection, error interceptor location
|
|
85
|
+
|
|
86
|
+
**Decision:**
|
|
87
|
+
```
|
|
88
|
+
IF wrapper/client found (e.g., apiClient.ts, axiosInstance.ts)
|
|
89
|
+
→ Use it. NEVER bypass with raw fetch/axios.
|
|
90
|
+
→ Confidence: HIGH → go to Phase 2
|
|
91
|
+
|
|
92
|
+
ELSE IF no wrapper found
|
|
93
|
+
→ Confirm with user: "Dùng raw fetch hay tạo wrapper mới?"
|
|
94
|
+
→ Confidence: MEDIUM → go to Phase 2
|
|
95
|
+
|
|
96
|
+
ELSE IF conflicting patterns found (mix of fetch + axios + rtk)
|
|
97
|
+
→ EXIT: BLOCKED — ask which pattern to follow
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Exit When:**
|
|
101
|
+
- API client pattern identified → go to Phase 2
|
|
102
|
+
- `max_files_read` reached → go to Phase 2 with MEDIUM confidence
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### Phase 2 — Generate Types
|
|
107
|
+
|
|
108
|
+
**Steps:**
|
|
109
|
+
1. Parse provided JSON payload → extract all fields with types
|
|
110
|
+
2. Generate TypeScript interface (Request + Response)
|
|
111
|
+
3. Flag any field that could be `null` or optional
|
|
112
|
+
|
|
113
|
+
**Decision:**
|
|
114
|
+
```
|
|
115
|
+
IF all fields clearly typed from JSON
|
|
116
|
+
→ Confidence: HIGH → go to Phase 3
|
|
117
|
+
|
|
118
|
+
ELSE IF some fields ambiguous (null | undefined)
|
|
119
|
+
→ Mark as optional (?:) + add comment "// verify with backend"
|
|
120
|
+
→ Confidence: MEDIUM → go to Phase 3
|
|
121
|
+
|
|
122
|
+
ELSE IF nested objects contain mixed null/non-null patterns
|
|
123
|
+
→ EXIT: BLOCKED — cannot safely generate types without backend clarification
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### Phase 3 — Implement Service + UI Binding
|
|
129
|
+
|
|
130
|
+
**Steps:**
|
|
131
|
+
1. Create/update service file (API calls only — no UI logic)
|
|
132
|
+
2. Bind to component: implement Loading state (skeleton/spinner)
|
|
133
|
+
3. Bind Success state: render data using generated types
|
|
134
|
+
4. Bind Error state: handle HTTP errors per table below
|
|
135
|
+
|
|
136
|
+
**HTTP Error Handling (mandatory for ALL integrations):**
|
|
137
|
+
```
|
|
138
|
+
401 Unauthorized → redirect to login or show auth error toast
|
|
139
|
+
403 Forbidden → show permission error toast
|
|
140
|
+
404 Not Found → show empty state component (not a crash)
|
|
141
|
+
422 Validation → map field errors to form fields
|
|
142
|
+
500 Server Error → show generic error toast + retry button
|
|
143
|
+
Network Error → show offline banner or retry prompt
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Decision:**
|
|
147
|
+
```
|
|
148
|
+
IF all 3 states (Loading, Success, Error) implemented + service created → go to Phase 4
|
|
149
|
+
ELSE IF error state incomplete → EXIT: PARTIAL — missing HTTP error handling
|
|
150
|
+
ELSE → EXIT: BLOCKED — cannot complete binding
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Exit When:**
|
|
154
|
+
- All 3 states implemented + service created → go to Phase 4
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### Phase 4 — Self-Audit
|
|
159
|
+
|
|
160
|
+
**Steps:**
|
|
161
|
+
1. Re-read service file: confirm no hardcoded URLs, no UI logic
|
|
162
|
+
2. Re-read component: confirm no API calls inside JSX
|
|
163
|
+
3. Verify cache invalidation if mutation (POST/PUT/DELETE)
|
|
164
|
+
|
|
165
|
+
**Decision:**
|
|
166
|
+
```
|
|
167
|
+
IF all audit points pass → EXIT: SUCCESS
|
|
168
|
+
ELSE IF 1–2 minor issues → fix inline → EXIT: SUCCESS
|
|
169
|
+
ELSE IF architectural violation found → fix → EXIT: PARTIAL
|
|
170
|
+
ELSE IF hardcoded URL (http://localhost, 127.0.0.1) found → EXIT: FAILED — do not ship
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Confidence Model
|
|
176
|
+
|
|
177
|
+
| Level | Condition | Action |
|
|
178
|
+
|-------|-----------|--------|
|
|
179
|
+
| HIGH | API client found, JSON payload complete, all types inferred | Implement directly |
|
|
180
|
+
| MEDIUM | Some fields ambiguous, wrapper partially identified | Note assumptions, proceed |
|
|
181
|
+
| LOW | No JSON payload provided OR conflicting API patterns OR nested nulls unresolved | EXIT: BLOCKED |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Severity
|
|
186
|
+
|
|
187
|
+
| Level | Definition | Example |
|
|
188
|
+
|-------|-----------|---------|
|
|
189
|
+
| CRITICAL | Security data leakage from improper DTO mapping | Auth token in dumb component |
|
|
190
|
+
| HIGH | Missing error state causes white screen of death | No 500 handler |
|
|
191
|
+
| MEDIUM | Hardcoded URL breaks in production | `axios.get("http://localhost:3000/api")` |
|
|
192
|
+
| LOW | Missing cache invalidation after mutation | Stale data after POST |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Evidence Format
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
[SEVERITY] path/to/component.tsx:LINE
|
|
200
|
+
Issue: [specific violation]
|
|
201
|
+
Confidence: [HIGH|MEDIUM|LOW]
|
|
202
|
+
Fix: [one-line suggestion]
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Example:**
|
|
206
|
+
```
|
|
207
|
+
[HIGH] src/pages/Dashboard.tsx:45
|
|
208
|
+
Issue: API call `axios.get('/api/data')` inside JSX render — violates smart/dumb separation
|
|
209
|
+
Confidence: HIGH
|
|
210
|
+
Fix: Move to `src/services/dashboard.service.ts`, inject via hook
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Retry Policy
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
API call fails (runtime verification)
|
|
219
|
+
└─ Check error type
|
|
220
|
+
├─ Network error → show retry button (user-triggered retry, not auto)
|
|
221
|
+
├─ 401/403 → do NOT retry — redirect or show permission error
|
|
222
|
+
├─ 500 → auto-retry once after 1s delay
|
|
223
|
+
│ └─ Still fails → show error toast with "Try again" button
|
|
224
|
+
└─ Never auto-retry more than 1 time (avoid hammering server)
|
|
225
|
+
|
|
226
|
+
Skill execution fails
|
|
227
|
+
└─ Check failure type
|
|
228
|
+
├─ Syntax error in generated code → fix and retry once
|
|
229
|
+
└─ Architectural mismatch → EXIT: FAILED, do NOT retry
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Escalation Rules
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
BLOCKED: Cannot determine API client pattern
|
|
238
|
+
Missing:
|
|
239
|
+
- package.json contents OR
|
|
240
|
+
- Location of existing API client file (e.g., src/lib/api.ts)
|
|
241
|
+
Questions:
|
|
242
|
+
1. Dự án dùng thư viện nào để gọi API? (axios / fetch / react-query / rtk-query)
|
|
243
|
+
2. Có file API wrapper/client nào sẵn không? (ví dụ: src/api/client.ts)
|
|
244
|
+
Recommended Assumptions (if proceeding):
|
|
245
|
+
- Create new Axios instance with interceptors for auth + error handling
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Handoff Contract
|
|
251
|
+
|
|
252
|
+
### Consumes
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"from": "user or qk-context-loader",
|
|
256
|
+
"required_fields": ["json_payload_sample", "api_endpoint"],
|
|
257
|
+
"optional_fields": ["existing_api_client_path", "component_to_bind"]
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Produces
|
|
262
|
+
```json
|
|
263
|
+
{
|
|
264
|
+
"to": "user",
|
|
265
|
+
"output_fields": ["types_file", "service_file", "component_file", "states_implemented", "exit_code"]
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Output Format
|
|
272
|
+
|
|
273
|
+
```
|
|
274
|
+
🔌 FE API Integration
|
|
275
|
+
─────────────────────────────────────────────────
|
|
276
|
+
API Client: [identified — axiosInstance.ts | created new]
|
|
277
|
+
Types: [src/types/[resource].types.ts]
|
|
278
|
+
Service: [src/services/[resource].service.ts]
|
|
279
|
+
|
|
280
|
+
States implemented:
|
|
281
|
+
✅ Loading (skeleton/spinner)
|
|
282
|
+
✅ Success (data rendered)
|
|
283
|
+
✅ Error (toast/empty state per HTTP code)
|
|
284
|
+
⚠️ [any state skipped — reason]
|
|
285
|
+
|
|
286
|
+
Assumptions:
|
|
287
|
+
- [any assumption made]
|
|
288
|
+
|
|
289
|
+
Exit Code: [SUCCESS | PARTIAL | BLOCKED | FAILED]
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Exit Codes
|
|
295
|
+
|
|
296
|
+
| Code | Meaning | When |
|
|
297
|
+
|------|---------|------|
|
|
298
|
+
| SUCCESS | Types + service + UI binding complete with all 3 states | Full integration |
|
|
299
|
+
| PARTIAL | Integration done, missing error/loading state or cache invalidation | Follow-up needed |
|
|
300
|
+
| BLOCKED | No JSON payload or conflicting API patterns | Ask user |
|
|
301
|
+
| FAILED | Cannot integrate without breaking existing architecture | Escalate |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
Consume backend API safely in frontend: identify existing client, generate types, implement service layer, and bind to UI with proper states.
|
|
306
|
+
Triggered when user needs to integrate a backend API endpoint into a frontend application. Requires JSON payload sample and knowledge of existing API client patterns.
|
|
307
|
+
- JSON payload sample (request/response)
|
|
308
|
+
- API endpoint specification
|
|
309
|
+
- Existing API client path (if any)
|
|
310
|
+
- Component to bind (if specified)
|
|
311
|
+
- Context graph (for existing patterns)
|
|
312
|
+
1. **Identify:** Find existing API client or confirm need for new one
|
|
313
|
+
2. **Generate:** Create TypeScript interfaces from JSON payload
|
|
314
|
+
3. **Implement:** Build service layer with proper HTTP methods
|
|
315
|
+
4. **Bind:** Connect to UI with Loading/Success/Error states
|
|
316
|
+
5. **Audit:** Verify no hardcoded URLs, no API in JSX, proper error handling
|
|
317
|
+
- NEVER bypass existing wrapper with raw fetch/axios
|
|
318
|
+
- MUST generate strict TypeScript interfaces (no `any`)
|
|
319
|
+
- MUST handle all 3 UI states: Loading, Success, Error
|
|
320
|
+
- MUST NOT exceed token_budget (max 3 files, 100 lines each, 1 shell command)
|
|
321
|
+
- MUST stop early if confidence threshold reached
|
|
322
|
+
- Zero-Trust: Use existing client pattern, never invent new one without approval
|
|
323
|
+
- Type Safety: All API responses must have explicit TypeScript types
|
|
324
|
+
- Error Handling: All HTTP errors must be handled per mandatory table
|
|
325
|
+
- Separation: Service layer only — no API calls in presentational components
|
|
326
|
+
---
|