ai-developer-skill-os 6.0.2 → 7.0.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 +8 -0
- package/CHANGELOG.md +11 -0
- package/package.json +44 -44
- package/skills/qk-access-policy/SKILL.md +13 -9
- package/skills/qk-ai-builder/SKILL.md +15 -12
- package/skills/qk-api-lifecycle/SKILL.md +19 -11
- package/skills/qk-bug-resolution/SKILL.md +20 -13
- package/skills/qk-context-loader/SKILL.md +14 -7
- package/skills/qk-data-lifecycle/SKILL.md +19 -10
- package/skills/qk-db-optimizer/SKILL.md +17 -11
- package/skills/qk-design-to-code/SKILL.md +15 -6
- package/skills/qk-docs/SKILL.md +15 -11
- package/skills/qk-engineering-standard/SKILL.md +17 -13
- package/skills/qk-feature-delivery/SKILL.md +21 -12
- package/skills/qk-help/SKILL.md +13 -9
- package/skills/qk-orchestrator/SKILL.md +13 -6
- package/skills/qk-policy-engine/SKILL.md +13 -9
- package/skills/qk-production-release/SKILL.md +15 -9
- package/skills/qk-project-bootstrap/SKILL.md +3 -1
- package/skills/qk-project-health/SKILL.md +15 -11
- package/skills/qk-project-memory/SKILL.md +15 -10
- package/skills/qk-system-evolution/SKILL.md +15 -10
- package/skills/qk-ui-audit/SKILL.md +16 -9
- package/skills/qk-ui-system-builder/SKILL.md +15 -7
- package/skills/qk-validation-gate/SKILL.md +14 -10
- package/skills.json +1 -1
- package/templates/DESIGN.md +38 -0
- package/tests/behavior-conformance.test.js +14 -11
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# DESIGN.md - The Brand Contract
|
|
2
|
+
|
|
3
|
+
> **CRITICAL RULE:** This file is the Single Source of Truth for all UI/UX in this project.
|
|
4
|
+
> Any AI agent performing frontend work MUST adhere strictly to the rules, tokens, and components defined here.
|
|
5
|
+
> DO NOT invent generic Tailwind colors or default layouts. DO NOT use "slop" AI aesthetics.
|
|
6
|
+
|
|
7
|
+
## 1. Typography
|
|
8
|
+
- **Primary Font:** [Specify Font Family, e.g., Inter, Roboto]
|
|
9
|
+
- **Heading Font:** [Specify Font Family if different]
|
|
10
|
+
- **Base Size:** [e.g., 16px]
|
|
11
|
+
- **Scale:** [e.g., Major Third (1.25) or Perfect Fourth (1.333)]
|
|
12
|
+
|
|
13
|
+
## 2. Color Palette (Strict Constraints)
|
|
14
|
+
- **Primary:** HSL(xxx, xx%, xx%)
|
|
15
|
+
- **Secondary:** HSL(xxx, xx%, xx%)
|
|
16
|
+
- **Background (Light):** HSL(xxx, xx%, xx%)
|
|
17
|
+
- **Background (Dark):** HSL(xxx, xx%, xx%)
|
|
18
|
+
- **Text (Light/Dark):** HSL(xxx, xx%, xx%)
|
|
19
|
+
- **Forbidden Colors:** [e.g., Default Tailwind `blue-500`, `red-500`. NEVER use default primary colors].
|
|
20
|
+
|
|
21
|
+
## 3. Spacing & Grid System
|
|
22
|
+
- **Base Unit:** [e.g., 4px / 0.25rem]
|
|
23
|
+
- **Grid Layout:** [e.g., 12-column grid, max-width: 1280px]
|
|
24
|
+
- **Whitespace Rule:** Always favor generous whitespace (whitespace is cheap, clutter is expensive).
|
|
25
|
+
|
|
26
|
+
## 4. UI Components & Micro-interactions
|
|
27
|
+
- **Border Radius:** [e.g., 8px for cards, 4px for buttons, 9999px for pills]
|
|
28
|
+
- **Shadows/Elevation:** [Define soft, organic shadows; avoid harsh, generic drop shadows]
|
|
29
|
+
- **Animations:** [e.g., 200ms ease-out for hover states, use micro-animations for button presses].
|
|
30
|
+
|
|
31
|
+
## 5. Anti-Slop Guidelines (Hallmark Rules)
|
|
32
|
+
- **NO Default Borders:** Avoid adding a 1px solid border to everything. Use background color shifts or soft shadows instead.
|
|
33
|
+
- **NO Cluttered Forms:** Forms must have clear visual hierarchy, grouped inputs, and explicit focus states.
|
|
34
|
+
- **NO Floating Elements:** Elements must be anchored visually to a grid.
|
|
35
|
+
- **MUST Check Contrast:** All text must meet WCAG AA contrast ratios.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
*Note to AI Agent: If you are about to emit code that violates these rules, STOP. Redesign it, run an [AUDIT], and apply the correct constraints.*
|
|
@@ -22,12 +22,14 @@ function parseBSF(skillPath) {
|
|
|
22
22
|
const fmMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
23
23
|
if (!fmMatch) return null;
|
|
24
24
|
const frontmatter = YAML.load(fmMatch[1]);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
let type = 'legacy';
|
|
26
|
+
if (frontmatter.version && frontmatter.version.startsWith('7.')) type = 'v7';
|
|
27
|
+
else if (frontmatter.version && frontmatter.version.startsWith('6.')) type = 'v6';
|
|
28
|
+
|
|
29
|
+
const bsf = { type, frontmatter };
|
|
28
30
|
|
|
29
31
|
// Parse YAML blocks
|
|
30
|
-
const yamlBlocks = [...content.matchAll(/```yaml\n([\s\S]*?)\n```/g)];
|
|
32
|
+
const yamlBlocks = [...content.matchAll(/```yaml\r?\n([\s\S]*?)\r?\n```/g)];
|
|
31
33
|
|
|
32
34
|
try {
|
|
33
35
|
let parsedBlocks = {};
|
|
@@ -61,24 +63,24 @@ function parseBSF(skillPath) {
|
|
|
61
63
|
describe('Behavior Validation Framework', () => {
|
|
62
64
|
|
|
63
65
|
describe('Level 1: Specification Valid', () => {
|
|
64
|
-
it('Every v6 skill must have valid Schema (Metadata, Scope, Constraints)', () => {
|
|
66
|
+
it('Every v6/v7 skill must have valid Schema (Metadata, Scope, Constraints)', () => {
|
|
65
67
|
const dirs = getActiveSkillDirs();
|
|
66
|
-
const
|
|
68
|
+
const modernSkills = [];
|
|
67
69
|
|
|
68
70
|
dirs.forEach(dir => {
|
|
69
71
|
const skillPath = path.join(dir, 'SKILL.md');
|
|
70
72
|
if (!fs.existsSync(skillPath)) return;
|
|
71
73
|
const bsf = parseBSF(skillPath);
|
|
72
74
|
|
|
73
|
-
if (bsf && bsf.type === '
|
|
74
|
-
|
|
75
|
+
if (bsf && bsf.type === 'v7') {
|
|
76
|
+
modernSkills.push(dir);
|
|
75
77
|
expect(bsf.error, `Parser error in ${path.basename(dir)}: ${bsf.error}`).toBeUndefined();
|
|
76
78
|
expect(bsf.frontmatter.category, `Missing category metadata in ${path.basename(dir)}`).toBeDefined();
|
|
77
79
|
expect(bsf.constraints, `Missing Constraints in ${path.basename(dir)}`).toBeDefined();
|
|
78
80
|
}
|
|
79
81
|
});
|
|
80
82
|
|
|
81
|
-
expect(
|
|
83
|
+
expect(modernSkills.length).toBeGreaterThan(0);
|
|
82
84
|
});
|
|
83
85
|
});
|
|
84
86
|
|
|
@@ -91,12 +93,13 @@ describe('Behavior Validation Framework', () => {
|
|
|
91
93
|
if (!fs.existsSync(skillPath)) return;
|
|
92
94
|
const bsf = parseBSF(skillPath);
|
|
93
95
|
|
|
94
|
-
if (bsf && bsf.type === '
|
|
96
|
+
if (bsf && bsf.type === 'v7' && !bsf.error) {
|
|
95
97
|
const must = bsf.constraints.must || [];
|
|
96
98
|
const must_not = bsf.constraints.must_not || [];
|
|
97
99
|
|
|
98
100
|
must.forEach(rule => {
|
|
99
|
-
|
|
101
|
+
if (typeof rule !== 'string') return;
|
|
102
|
+
const conflict = must_not.some(c => typeof c === 'string' && c.toLowerCase() === rule.toLowerCase());
|
|
100
103
|
expect(conflict, `Conflict detected in ${path.basename(dir)}: '${rule}' is in both must and must_not`).toBe(false);
|
|
101
104
|
});
|
|
102
105
|
}
|