start-vibing 1.1.2 → 1.1.4

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.
Files changed (38) hide show
  1. package/package.json +1 -1
  2. package/template/.claude/CLAUDE.md +129 -168
  3. package/template/.claude/agents/analyzer.md +0 -14
  4. package/template/.claude/agents/commit-manager.md +0 -19
  5. package/template/.claude/agents/documenter.md +0 -10
  6. package/template/.claude/agents/domain-updater.md +194 -200
  7. package/template/.claude/agents/final-validator.md +0 -18
  8. package/template/.claude/agents/orchestrator.md +36 -34
  9. package/template/.claude/agents/quality-checker.md +0 -24
  10. package/template/.claude/agents/research.md +299 -262
  11. package/template/.claude/agents/security-auditor.md +1 -14
  12. package/template/.claude/agents/tester.md +0 -8
  13. package/template/.claude/agents/ui-ux-reviewer.md +80 -18
  14. package/template/.claude/commands/feature.md +48 -102
  15. package/template/.claude/config/README.md +30 -30
  16. package/template/.claude/config/project-config.json +53 -53
  17. package/template/.claude/config/quality-gates.json +46 -46
  18. package/template/.claude/config/security-rules.json +45 -45
  19. package/template/.claude/config/testing-config.json +168 -168
  20. package/template/.claude/hooks/SETUP.md +52 -181
  21. package/template/.claude/hooks/user-prompt-submit.py +184 -46
  22. package/template/.claude/settings.json +0 -39
  23. package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
  24. package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +260 -321
  25. package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
  26. package/template/.claude/skills/final-check/SKILL.md +284 -284
  27. package/template/.claude/skills/quality-gate/SKILL.md +278 -278
  28. package/template/.claude/skills/research-cache/SKILL.md +207 -207
  29. package/template/.claude/skills/security-scan/SKILL.md +206 -206
  30. package/template/.claude/skills/test-coverage/SKILL.md +441 -441
  31. package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
  32. package/template/.claude/config/domain-mapping.json +0 -26
  33. package/template/.claude/hooks/post-tool-use.py +0 -155
  34. package/template/.claude/hooks/pre-tool-use.py +0 -159
  35. package/template/.claude/hooks/stop-validation.py +0 -155
  36. package/template/.claude/hooks/validate-commit.py +0 -200
  37. package/template/.claude/hooks/workflow-manager.py +0 -350
  38. package/template/.claude/workflow-state.schema.json +0 -200
@@ -1,254 +1,254 @@
1
- ---
2
- name: ui-ux-audit
3
- description: Automates UI/UX audits. Researches competitors, validates accessibility (WCAG 2.1), verifies responsiveness, audits design system consistency. Use when implementing any UI feature.
4
- allowed-tools: Read, WebSearch, WebFetch, Grep, Glob
5
- ---
6
-
7
- # UI/UX Audit - Interface Audit System
8
-
9
- ## Purpose
10
-
11
- This skill automates UI/UX audits:
12
-
13
- - **Research** competitors before implementing
14
- - **Validate** accessibility (WCAG, contrast, touch targets)
15
- - **Verify** responsiveness
16
- - **Audit** design system consistency
17
- - **Document** design decisions
18
-
19
- ---
20
-
21
- ## Workflow
22
-
23
- ```
24
- 1. IDENTIFY FEATURE → What type of UI? Mobile-first or desktop-first?
25
-
26
- 2. RESEARCH COMPETITORS → 3-5 relevant competitors, screenshots
27
-
28
- 3. DEFINE PATTERN → What do all do alike? Where to differentiate?
29
-
30
- 4. IMPLEMENT → Follow accessibility and responsiveness checklists
31
-
32
- 5. VALIDATE → Run final checklist, capture screenshots
33
- ```
34
-
35
- ---
36
-
37
- ## Competitor Research
38
-
39
- ### Required Search Queries
40
-
41
- ```
42
- "[UI type] design examples 2025"
43
- "[similar product] UI/UX"
44
- "[functionality] best practices"
45
- "[framework] [component] examples"
46
- ```
47
-
48
- ### Research Template
49
-
50
- ```markdown
51
- ## Research: [Feature Name]
52
-
53
- ### Competitors Analyzed
54
-
55
- 1. **[Name]** - [URL]
56
- - Strong points: [list]
57
- - Weak points: [list]
58
-
59
- ### Market Pattern
60
-
61
- - [What everyone does alike]
62
-
63
- ### Our Approach
64
-
65
- - **Decision:** [what we'll do]
66
- - **Justification:** [why]
67
- - **Differentiator:** [how we stand out]
68
- ```
69
-
70
- ---
71
-
72
- ## Accessibility Checklist (WCAG 2.1)
73
-
74
- ### Level A (Required)
75
-
76
- - [ ] **Text contrast:** Minimum 4.5:1 normal, 3:1 large text
77
- - [ ] **Alt text:** All images have descriptive alt
78
- - [ ] **Keyboard navigation:** All interactive elements via Tab
79
- - [ ] **Visible focus:** Clear outline on focused elements
80
- - [ ] **Form labels:** All inputs have associated label
81
- - [ ] **Error messages:** Clear and associated to field
82
-
83
- ### Level AA (Recommended)
84
-
85
- - [ ] **Resize:** Works up to 200% zoom
86
- - [ ] **Touch targets:** Minimum 44x44px (`h-11 w-11`)
87
- - [ ] **Hover/Focus:** Content visible on hover also via focus
88
-
89
- ---
90
-
91
- ## Responsiveness Checklist
92
-
93
- ### Required Viewports
94
-
95
- ```typescript
96
- const REQUIRED_VIEWPORTS = {
97
- mobile: { width: 375, height: 667 }, // iPhone SE
98
- tablet: { width: 768, height: 1024 }, // iPad
99
- desktop: { width: 1280, height: 800 }, // Laptop
100
- fullhd: { width: 1920, height: 1080 }, // Common monitor
101
- };
102
- ```
103
-
104
- ### Mobile (375px)
105
-
106
- - [ ] Vertical stack layout (flex-col)
107
- - [ ] Hamburger menu or bottom nav
108
- - [ ] Touch-friendly buttons (min 44px)
109
- - [ ] Readable text without zoom
110
- - [ ] Vertical scroll only
111
-
112
- ### Desktop (1280px+)
113
-
114
- - [ ] Use horizontal space
115
- - [ ] Expanded sidebar
116
- - [ ] Can increase info density
117
-
118
- ---
119
-
120
- ## CRITICAL: Zero Horizontal Overflow
121
-
122
- > **NEVER** should there be horizontal scroll.
123
-
124
- ### Required CSS Patterns
125
-
126
- ```tsx
127
- // Main layout
128
- <div className="flex h-screen w-screen overflow-hidden">
129
- {/* Sidebar */}
130
- <aside className="w-[260px] flex-shrink-0 overflow-y-auto">...</aside>
131
-
132
- {/* Main content */}
133
- <main className="flex-1 min-w-0 overflow-hidden">...</main>
134
- </div>
135
- ```
136
-
137
- ### Overflow Checklist
138
-
139
- - [ ] Main container has `overflow-hidden`?
140
- - [ ] Sidebar has `flex-shrink-0`?
141
- - [ ] Main content has `min-w-0`?
142
- - [ ] No element with width larger than container?
143
- - [ ] Tested at 1920x1080?
144
-
145
- ---
146
-
147
- ## Skeleton Loading
148
-
149
- ### Rule: Every Component HAS Skeleton
150
-
151
- - [ ] Skeleton created with component
152
- - [ ] Same dimensions as final content
153
- - [ ] `animate-pulse` animation
154
- - [ ] Same visual structure
155
-
156
- ### Structure
157
-
158
- ```
159
- components/features/UserCard/
160
- ├── UserCard.tsx
161
- └── UserCardSkeleton.tsx
162
- ```
163
-
164
- ### Template
165
-
166
- ```tsx
167
- export function ComponentSkeleton() {
168
- return (
169
- <div className="animate-pulse">
170
- <div className="h-4 bg-gray-200 rounded w-3/4 mb-2" />
171
- <div className="h-4 bg-gray-200 rounded w-1/2" />
172
- </div>
173
- );
174
- }
175
- ```
176
-
177
- ---
178
-
179
- ## Design System (Tailwind)
180
-
181
- ### Colors
182
-
183
- - **Primary:** `indigo-600` (buttons, links)
184
- - **Secondary:** `gray-600` (secondary text)
185
- - **Success:** `green-600`
186
- - **Error:** `red-600`
187
- - **Warning:** `yellow-600`
188
-
189
- ### Spacing (4px scale)
190
-
191
- ```
192
- p-1: 4px p-2: 8px p-4: 16px
193
- p-6: 24px p-8: 32px p-12: 48px
194
- ```
195
-
196
- ### Border & Shadow
197
-
198
- - **Border radius:** `rounded-lg` (8px) default
199
- - **Shadows:** `shadow-sm` for cards, `shadow-lg` for modals
200
-
201
- ---
202
-
203
- ## Output Format
204
-
205
- ```markdown
206
- ## UI/UX AUDIT - Report
207
-
208
- ### Feature
209
-
210
- - **Name:** [name]
211
- - **Type:** [form/dashboard/list/etc]
212
- - **Approach:** [mobile-first/desktop-first]
213
-
214
- ### Competitor Research
215
-
216
- - [x] Researched 5 competitors
217
- - **Pattern identified:** [description]
218
-
219
- ### Accessibility
220
-
221
- - [x] Contrast validated (4.5:1+)
222
- - [x] Touch targets 44x44px
223
- - [x] Alt text on images
224
- - [x] Labels on forms
225
-
226
- ### Responsiveness
227
-
228
- - [x] Mobile (375px) - OK
229
- - [x] Tablet (768px) - OK
230
- - [x] Desktop (1280px) - OK
231
- - [x] FullHD (1920px) - OK
232
- - [x] Zero horizontal overflow
233
-
234
- ### Skeleton
235
-
236
- - [x] Created
237
- - [x] Correct dimensions
238
- ```
239
-
240
- ---
241
-
242
- ## Critical Rules
243
-
244
- 1. **ALWAYS research competitors** - Before implementing UI
245
- 2. **ALWAYS validate accessibility** - WCAG 2.1 Level AA
246
- 3. **ALWAYS test viewports** - Mobile, tablet, desktop, fullhd
247
- 4. **NEVER horizontal overflow** - Check all viewports
248
- 5. **ALWAYS create skeleton** - With the component
249
-
250
- ---
251
-
252
- ## Version
253
-
254
- - **v2.0.0** - Generic template
1
+ ---
2
+ name: ui-ux-audit
3
+ description: Automates UI/UX audits. Researches competitors, validates accessibility (WCAG 2.1), verifies responsiveness, audits design system consistency. Use when implementing any UI feature.
4
+ allowed-tools: Read, WebSearch, WebFetch, Grep, Glob
5
+ ---
6
+
7
+ # UI/UX Audit - Interface Audit System
8
+
9
+ ## Purpose
10
+
11
+ This skill automates UI/UX audits:
12
+
13
+ - **Research** competitors before implementing
14
+ - **Validate** accessibility (WCAG, contrast, touch targets)
15
+ - **Verify** responsiveness
16
+ - **Audit** design system consistency
17
+ - **Document** design decisions
18
+
19
+ ---
20
+
21
+ ## Workflow
22
+
23
+ ```
24
+ 1. IDENTIFY FEATURE → What type of UI? Mobile-first or desktop-first?
25
+
26
+ 2. RESEARCH COMPETITORS → 3-5 relevant competitors, screenshots
27
+
28
+ 3. DEFINE PATTERN → What do all do alike? Where to differentiate?
29
+
30
+ 4. IMPLEMENT → Follow accessibility and responsiveness checklists
31
+
32
+ 5. VALIDATE → Run final checklist, capture screenshots
33
+ ```
34
+
35
+ ---
36
+
37
+ ## Competitor Research
38
+
39
+ ### Required Search Queries
40
+
41
+ ```
42
+ "[UI type] design examples 2025"
43
+ "[similar product] UI/UX"
44
+ "[functionality] best practices"
45
+ "[framework] [component] examples"
46
+ ```
47
+
48
+ ### Research Template
49
+
50
+ ```markdown
51
+ ## Research: [Feature Name]
52
+
53
+ ### Competitors Analyzed
54
+
55
+ 1. **[Name]** - [URL]
56
+ - Strong points: [list]
57
+ - Weak points: [list]
58
+
59
+ ### Market Pattern
60
+
61
+ - [What everyone does alike]
62
+
63
+ ### Our Approach
64
+
65
+ - **Decision:** [what we'll do]
66
+ - **Justification:** [why]
67
+ - **Differentiator:** [how we stand out]
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Accessibility Checklist (WCAG 2.1)
73
+
74
+ ### Level A (Required)
75
+
76
+ - [ ] **Text contrast:** Minimum 4.5:1 normal, 3:1 large text
77
+ - [ ] **Alt text:** All images have descriptive alt
78
+ - [ ] **Keyboard navigation:** All interactive elements via Tab
79
+ - [ ] **Visible focus:** Clear outline on focused elements
80
+ - [ ] **Form labels:** All inputs have associated label
81
+ - [ ] **Error messages:** Clear and associated to field
82
+
83
+ ### Level AA (Recommended)
84
+
85
+ - [ ] **Resize:** Works up to 200% zoom
86
+ - [ ] **Touch targets:** Minimum 44x44px (`h-11 w-11`)
87
+ - [ ] **Hover/Focus:** Content visible on hover also via focus
88
+
89
+ ---
90
+
91
+ ## Responsiveness Checklist
92
+
93
+ ### Required Viewports
94
+
95
+ ```typescript
96
+ const REQUIRED_VIEWPORTS = {
97
+ mobile: { width: 375, height: 667 }, // iPhone SE
98
+ tablet: { width: 768, height: 1024 }, // iPad
99
+ desktop: { width: 1280, height: 800 }, // Laptop
100
+ fullhd: { width: 1920, height: 1080 }, // Common monitor
101
+ };
102
+ ```
103
+
104
+ ### Mobile (375px)
105
+
106
+ - [ ] Vertical stack layout (flex-col)
107
+ - [ ] Hamburger menu or bottom nav
108
+ - [ ] Touch-friendly buttons (min 44px)
109
+ - [ ] Readable text without zoom
110
+ - [ ] Vertical scroll only
111
+
112
+ ### Desktop (1280px+)
113
+
114
+ - [ ] Use horizontal space
115
+ - [ ] Expanded sidebar
116
+ - [ ] Can increase info density
117
+
118
+ ---
119
+
120
+ ## CRITICAL: Zero Horizontal Overflow
121
+
122
+ > **NEVER** should there be horizontal scroll.
123
+
124
+ ### Required CSS Patterns
125
+
126
+ ```tsx
127
+ // Main layout
128
+ <div className="flex h-screen w-screen overflow-hidden">
129
+ {/* Sidebar */}
130
+ <aside className="w-[260px] flex-shrink-0 overflow-y-auto">...</aside>
131
+
132
+ {/* Main content */}
133
+ <main className="flex-1 min-w-0 overflow-hidden">...</main>
134
+ </div>
135
+ ```
136
+
137
+ ### Overflow Checklist
138
+
139
+ - [ ] Main container has `overflow-hidden`?
140
+ - [ ] Sidebar has `flex-shrink-0`?
141
+ - [ ] Main content has `min-w-0`?
142
+ - [ ] No element with width larger than container?
143
+ - [ ] Tested at 1920x1080?
144
+
145
+ ---
146
+
147
+ ## Skeleton Loading
148
+
149
+ ### Rule: Every Component HAS Skeleton
150
+
151
+ - [ ] Skeleton created with component
152
+ - [ ] Same dimensions as final content
153
+ - [ ] `animate-pulse` animation
154
+ - [ ] Same visual structure
155
+
156
+ ### Structure
157
+
158
+ ```
159
+ components/features/UserCard/
160
+ ├── UserCard.tsx
161
+ └── UserCardSkeleton.tsx
162
+ ```
163
+
164
+ ### Template
165
+
166
+ ```tsx
167
+ export function ComponentSkeleton() {
168
+ return (
169
+ <div className="animate-pulse">
170
+ <div className="h-4 bg-gray-200 rounded w-3/4 mb-2" />
171
+ <div className="h-4 bg-gray-200 rounded w-1/2" />
172
+ </div>
173
+ );
174
+ }
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Design System (Tailwind)
180
+
181
+ ### Colors
182
+
183
+ - **Primary:** `indigo-600` (buttons, links)
184
+ - **Secondary:** `gray-600` (secondary text)
185
+ - **Success:** `green-600`
186
+ - **Error:** `red-600`
187
+ - **Warning:** `yellow-600`
188
+
189
+ ### Spacing (4px scale)
190
+
191
+ ```
192
+ p-1: 4px p-2: 8px p-4: 16px
193
+ p-6: 24px p-8: 32px p-12: 48px
194
+ ```
195
+
196
+ ### Border & Shadow
197
+
198
+ - **Border radius:** `rounded-lg` (8px) default
199
+ - **Shadows:** `shadow-sm` for cards, `shadow-lg` for modals
200
+
201
+ ---
202
+
203
+ ## Output Format
204
+
205
+ ```markdown
206
+ ## UI/UX AUDIT - Report
207
+
208
+ ### Feature
209
+
210
+ - **Name:** [name]
211
+ - **Type:** [form/dashboard/list/etc]
212
+ - **Approach:** [mobile-first/desktop-first]
213
+
214
+ ### Competitor Research
215
+
216
+ - [x] Researched 5 competitors
217
+ - **Pattern identified:** [description]
218
+
219
+ ### Accessibility
220
+
221
+ - [x] Contrast validated (4.5:1+)
222
+ - [x] Touch targets 44x44px
223
+ - [x] Alt text on images
224
+ - [x] Labels on forms
225
+
226
+ ### Responsiveness
227
+
228
+ - [x] Mobile (375px) - OK
229
+ - [x] Tablet (768px) - OK
230
+ - [x] Desktop (1280px) - OK
231
+ - [x] FullHD (1920px) - OK
232
+ - [x] Zero horizontal overflow
233
+
234
+ ### Skeleton
235
+
236
+ - [x] Created
237
+ - [x] Correct dimensions
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Critical Rules
243
+
244
+ 1. **ALWAYS research competitors** - Before implementing UI
245
+ 2. **ALWAYS validate accessibility** - WCAG 2.1 Level AA
246
+ 3. **ALWAYS test viewports** - Mobile, tablet, desktop, fullhd
247
+ 4. **NEVER horizontal overflow** - Check all viewports
248
+ 5. **ALWAYS create skeleton** - With the component
249
+
250
+ ---
251
+
252
+ ## Version
253
+
254
+ - **v2.0.0** - Generic template
@@ -1,26 +0,0 @@
1
- {
2
- "$comment": "Maps file patterns to domain names. Used by domain-updater and analyzer agents.",
3
-
4
- "domains": {
5
- "rpc-explorer": {
6
- "patterns": ["apps/rpc-explorer/*"],
7
- "description": "RPC node discovery and testing"
8
- },
9
- "rpc-proxy": {
10
- "patterns": ["apps/rpc-proxy/*"],
11
- "description": "Intelligent RPC proxy with load balancing"
12
- },
13
- "infrastructure": {
14
- "patterns": ["common/*", "docker-compose.yml", "Dockerfile*"],
15
- "description": "Shared infrastructure and configuration"
16
- },
17
- "types": {
18
- "patterns": ["types/*"],
19
- "description": "Shared TypeScript type definitions"
20
- }
21
- },
22
-
23
- "defaultDomain": "general",
24
-
25
- "domainFilesPath": ".claude/skills/codebase-knowledge/domains/"
26
- }
@@ -1,155 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- PostToolUse Hook - Track File Modifications
4
-
5
- This hook records all file modifications to workflow-state.json
6
- for later validation by Husky pre-commit hook.
7
-
8
- Exit codes:
9
- - 0: Always (tracking is non-blocking)
10
- """
11
-
12
- import json
13
- import sys
14
- import os
15
- from datetime import datetime
16
- from pathlib import Path
17
-
18
- # Get project directory
19
- PROJECT_DIR = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
20
- WORKFLOW_STATE_PATH = Path(PROJECT_DIR) / '.claude' / 'workflow-state.json'
21
-
22
- # Tools that modify files
23
- FILE_MODIFY_TOOLS = {'Edit', 'Write', 'NotebookEdit'}
24
- FILE_DELETE_TOOLS = {'Bash'} # rm commands
25
-
26
- # Test file patterns
27
- TEST_PATTERNS = ['test', 'spec', '.test.', '.spec.', '__tests__']
28
-
29
- # Doc file patterns
30
- DOC_PATTERNS = ['docs/', 'README', 'CHANGELOG', '.md', 'domains/']
31
-
32
-
33
- def load_workflow_state():
34
- """Load current workflow state"""
35
- if not WORKFLOW_STATE_PATH.exists():
36
- return {"version": "1.0.0", "currentTask": None, "sessions": []}
37
- try:
38
- with open(WORKFLOW_STATE_PATH) as f:
39
- return json.load(f)
40
- except (json.JSONDecodeError, IOError):
41
- return {"version": "1.0.0", "currentTask": None, "sessions": []}
42
-
43
-
44
- def save_workflow_state(state: dict):
45
- """Save workflow state"""
46
- WORKFLOW_STATE_PATH.parent.mkdir(parents=True, exist_ok=True)
47
- with open(WORKFLOW_STATE_PATH, 'w') as f:
48
- json.dump(state, f, indent=2)
49
-
50
-
51
- def is_test_file(path: str) -> bool:
52
- """Check if file is a test file"""
53
- return any(p in path.lower() for p in TEST_PATTERNS)
54
-
55
-
56
- def is_doc_file(path: str) -> bool:
57
- """Check if file is a documentation file"""
58
- return any(p in path.lower() for p in DOC_PATTERNS)
59
-
60
-
61
- def main():
62
- # Read hook input from stdin
63
- try:
64
- hook_input = json.load(sys.stdin)
65
- except json.JSONDecodeError:
66
- sys.exit(0)
67
-
68
- tool_name = hook_input.get('tool_name', '')
69
- tool_input = hook_input.get('tool_input', {})
70
- tool_result = hook_input.get('tool_result', {})
71
-
72
- # Only track file modification tools
73
- if tool_name not in FILE_MODIFY_TOOLS:
74
- sys.exit(0)
75
-
76
- # Get file path
77
- file_path = tool_input.get('file_path', tool_input.get('notebook_path', ''))
78
-
79
- if not file_path:
80
- sys.exit(0)
81
-
82
- # Skip workflow state file itself
83
- if 'workflow-state.json' in file_path:
84
- sys.exit(0)
85
-
86
- # Load state
87
- state = load_workflow_state()
88
-
89
- # If no current task, just exit (pre-tool-use should have blocked)
90
- if not state.get('currentTask'):
91
- sys.exit(0)
92
-
93
- task = state['currentTask']
94
-
95
- # Determine action type
96
- # For Write tool, check if file existed
97
- action = 'modified'
98
- if tool_name == 'Write':
99
- # Assume created if not in modified list
100
- existing = [m['path'] for m in task.get('modifiedFiles', [])]
101
- if file_path not in existing:
102
- action = 'created'
103
-
104
- # Normalize path
105
- file_path = file_path.replace('\\', '/')
106
-
107
- # Check if file was approved
108
- approved_files = task.get('approvedFiles', [])
109
- was_approved = any(
110
- file_path.endswith(af) or file_path == af or
111
- (af.endswith('*') and file_path.startswith(af[:-1]))
112
- for af in approved_files
113
- )
114
-
115
- # Record modification
116
- modification = {
117
- 'path': file_path,
118
- 'action': action,
119
- 'timestamp': datetime.now().isoformat(),
120
- 'approved': was_approved
121
- }
122
-
123
- if 'modifiedFiles' not in task:
124
- task['modifiedFiles'] = []
125
-
126
- # Update or add
127
- existing_paths = [m['path'] for m in task['modifiedFiles']]
128
- if file_path in existing_paths:
129
- idx = existing_paths.index(file_path)
130
- task['modifiedFiles'][idx] = modification
131
- else:
132
- task['modifiedFiles'].append(modification)
133
-
134
- # Track test files
135
- if is_test_file(file_path):
136
- if 'testsCreated' not in task:
137
- task['testsCreated'] = []
138
- if file_path not in task['testsCreated']:
139
- task['testsCreated'].append(file_path)
140
-
141
- # Track doc files
142
- if is_doc_file(file_path):
143
- if 'docsUpdated' not in task:
144
- task['docsUpdated'] = []
145
- if file_path not in task['docsUpdated']:
146
- task['docsUpdated'].append(file_path)
147
-
148
- # Save state
149
- save_workflow_state(state)
150
-
151
- sys.exit(0)
152
-
153
-
154
- if __name__ == '__main__':
155
- main()