@uniswap/ai-toolkit-nx-claude 0.5.29 → 0.5.30-next.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/dist/cli-generator.cjs +28 -59
- package/dist/packages/ai-toolkit-nx-claude/src/cli-generator.d.ts +8 -10
- package/dist/packages/ai-toolkit-nx-claude/src/cli-generator.d.ts.map +1 -1
- package/dist/packages/ai-toolkit-nx-claude/src/index.d.ts +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/index.d.ts.map +1 -1
- package/generators.json +0 -15
- package/package.json +4 -35
- package/dist/content/agents/agnostic/CLAUDE.md +0 -282
- package/dist/content/agents/agnostic/agent-capability-analyst.md +0 -575
- package/dist/content/agents/agnostic/agent-optimizer.md +0 -396
- package/dist/content/agents/agnostic/agent-orchestrator.md +0 -475
- package/dist/content/agents/agnostic/cicd-agent.md +0 -301
- package/dist/content/agents/agnostic/claude-agent-discovery.md +0 -304
- package/dist/content/agents/agnostic/claude-docs-fact-checker.md +0 -435
- package/dist/content/agents/agnostic/claude-docs-initializer.md +0 -782
- package/dist/content/agents/agnostic/claude-docs-manager.md +0 -595
- package/dist/content/agents/agnostic/code-explainer.md +0 -269
- package/dist/content/agents/agnostic/code-generator.md +0 -785
- package/dist/content/agents/agnostic/commit-message-generator.md +0 -101
- package/dist/content/agents/agnostic/context-loader.md +0 -432
- package/dist/content/agents/agnostic/debug-assistant.md +0 -321
- package/dist/content/agents/agnostic/doc-writer.md +0 -536
- package/dist/content/agents/agnostic/feedback-collector.md +0 -165
- package/dist/content/agents/agnostic/infrastructure-agent.md +0 -406
- package/dist/content/agents/agnostic/migration-assistant.md +0 -489
- package/dist/content/agents/agnostic/pattern-learner.md +0 -481
- package/dist/content/agents/agnostic/performance-analyzer.md +0 -528
- package/dist/content/agents/agnostic/plan-reviewer.md +0 -173
- package/dist/content/agents/agnostic/planner.md +0 -235
- package/dist/content/agents/agnostic/pr-creator.md +0 -498
- package/dist/content/agents/agnostic/pr-reviewer.md +0 -142
- package/dist/content/agents/agnostic/prompt-engineer.md +0 -541
- package/dist/content/agents/agnostic/refactorer.md +0 -311
- package/dist/content/agents/agnostic/researcher.md +0 -349
- package/dist/content/agents/agnostic/security-analyzer.md +0 -1087
- package/dist/content/agents/agnostic/stack-splitter.md +0 -642
- package/dist/content/agents/agnostic/style-enforcer.md +0 -568
- package/dist/content/agents/agnostic/test-runner.md +0 -481
- package/dist/content/agents/agnostic/test-writer.md +0 -292
- package/dist/content/commands/agnostic/CLAUDE.md +0 -207
- package/dist/content/commands/agnostic/address-pr-issues.md +0 -205
- package/dist/content/commands/agnostic/auto-spec.md +0 -386
- package/dist/content/commands/agnostic/claude-docs.md +0 -409
- package/dist/content/commands/agnostic/claude-init-plus.md +0 -439
- package/dist/content/commands/agnostic/create-pr.md +0 -79
- package/dist/content/commands/agnostic/daily-standup.md +0 -185
- package/dist/content/commands/agnostic/deploy.md +0 -441
- package/dist/content/commands/agnostic/execute-plan.md +0 -167
- package/dist/content/commands/agnostic/explain-file.md +0 -303
- package/dist/content/commands/agnostic/explore.md +0 -82
- package/dist/content/commands/agnostic/fix-bug.md +0 -273
- package/dist/content/commands/agnostic/gen-tests.md +0 -185
- package/dist/content/commands/agnostic/generate-commit-message.md +0 -92
- package/dist/content/commands/agnostic/git-worktree-orchestrator.md +0 -647
- package/dist/content/commands/agnostic/implement-spec.md +0 -270
- package/dist/content/commands/agnostic/monitor.md +0 -581
- package/dist/content/commands/agnostic/perf-analyze.md +0 -214
- package/dist/content/commands/agnostic/plan.md +0 -453
- package/dist/content/commands/agnostic/refactor.md +0 -315
- package/dist/content/commands/agnostic/refine-linear-task.md +0 -575
- package/dist/content/commands/agnostic/research.md +0 -49
- package/dist/content/commands/agnostic/review-code.md +0 -321
- package/dist/content/commands/agnostic/review-plan.md +0 -109
- package/dist/content/commands/agnostic/review-pr.md +0 -393
- package/dist/content/commands/agnostic/split-stack.md +0 -705
- package/dist/content/commands/agnostic/update-claude-md.md +0 -401
- package/dist/content/commands/agnostic/work-through-pr-comments.md +0 -873
- package/dist/generators/add-agent/CLAUDE.md +0 -130
- package/dist/generators/add-agent/files/__name__.md.template +0 -37
- package/dist/generators/add-agent/generator.cjs +0 -640
- package/dist/generators/add-agent/schema.json +0 -59
- package/dist/generators/add-command/CLAUDE.md +0 -131
- package/dist/generators/add-command/files/__name__.md.template +0 -46
- package/dist/generators/add-command/generator.cjs +0 -643
- package/dist/generators/add-command/schema.json +0 -50
- package/dist/generators/files/src/index.ts.template +0 -1
- package/dist/generators/init/CLAUDE.md +0 -520
- package/dist/generators/init/generator.cjs +0 -3304
- package/dist/generators/init/schema.json +0 -180
- package/dist/packages/ai-toolkit-nx-claude/src/generators/add-agent/generator.d.ts +0 -5
- package/dist/packages/ai-toolkit-nx-claude/src/generators/add-agent/generator.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/add-command/generator.d.ts +0 -5
- package/dist/packages/ai-toolkit-nx-claude/src/generators/add-command/generator.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/init/generator.d.ts +0 -5
- package/dist/packages/ai-toolkit-nx-claude/src/generators/init/generator.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/utils/auto-update-utils.d.ts +0 -30
- package/dist/packages/ai-toolkit-nx-claude/src/utils/auto-update-utils.d.ts.map +0 -1
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Orchestrate comprehensive pull request review using specialized agents for architecture, security, performance, testing, and maintainability analysis.
|
|
3
|
-
argument-hint: [branch|commit-range] [--depth standard|comprehensive] [--suggest-fixes] [--check-coverage]
|
|
4
|
-
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git branch:*), Bash(git log:*), Bash(git show:*), Task(subagent_type:agent-orchestrator), Task(subagent_type:*), Read(*), Grep(*)
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Inputs
|
|
8
|
-
|
|
9
|
-
Parse arguments from `$ARGUMENTS`:
|
|
10
|
-
|
|
11
|
-
- **branch/commit-range**: Optional specific branch or commit range (defaults to working changes)
|
|
12
|
-
- **--depth**: Review depth (standard|comprehensive) - default: standard
|
|
13
|
-
- **--suggest-fixes**: Generate fix patches (default: true)
|
|
14
|
-
- **--check-coverage**: Verify test coverage (default: true)
|
|
15
|
-
- **--focus**: Specific concerns (architecture|security|performance|all) - default: all
|
|
16
|
-
- **--baseline**: Compare against baseline branch (default: main/master)
|
|
17
|
-
|
|
18
|
-
Examples:
|
|
19
|
-
|
|
20
|
-
- `/review-pr` (reviews current uncommitted changes)
|
|
21
|
-
- `/review-pr feature-branch --depth comprehensive`
|
|
22
|
-
- `/review-pr HEAD~3..HEAD --focus security --suggest-fixes`
|
|
23
|
-
- `/review-pr main...develop --check-coverage`
|
|
24
|
-
|
|
25
|
-
## Context Gathering
|
|
26
|
-
|
|
27
|
-
First, gather comprehensive context via Bash:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
# Current state
|
|
31
|
-
git branch --show-current
|
|
32
|
-
git status --porcelain
|
|
33
|
-
|
|
34
|
-
# Determine diff scope
|
|
35
|
-
if [[ -z "$ARGUMENTS" ]]; then
|
|
36
|
-
git diff --unified=3 HEAD
|
|
37
|
-
else
|
|
38
|
-
git log --oneline -20 $ARGUMENTS
|
|
39
|
-
git diff --unified=3 $ARGUMENTS
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
# File statistics
|
|
43
|
-
git diff --stat $TARGET
|
|
44
|
-
git diff --name-status $TARGET
|
|
45
|
-
|
|
46
|
-
# Commit messages for context
|
|
47
|
-
git log --format="%h %s" -10 $TARGET
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Task
|
|
51
|
-
|
|
52
|
-
Orchestrate comprehensive PR review through multi-agent coordination:
|
|
53
|
-
|
|
54
|
-
1. **Change Analysis**: Understand the intent and scope
|
|
55
|
-
2. **Risk Assessment**: Multi-dimensional risk evaluation
|
|
56
|
-
3. **Quality Validation**: Architecture, security, performance checks
|
|
57
|
-
4. **Test Coverage**: Verify adequate testing
|
|
58
|
-
5. **Fix Generation**: Provide actionable improvements
|
|
59
|
-
|
|
60
|
-
## Orchestration Strategy
|
|
61
|
-
|
|
62
|
-
### Standard Review (Default)
|
|
63
|
-
|
|
64
|
-
Quick, focused review of key concerns:
|
|
65
|
-
|
|
66
|
-
```typescript
|
|
67
|
-
{
|
|
68
|
-
sequential: [
|
|
69
|
-
{
|
|
70
|
-
agent: 'code-explainer',
|
|
71
|
-
task: 'Analyze changed files for intent and patterns',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
agent: 'security-analyzer',
|
|
75
|
-
task: 'Quick vulnerability scan',
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
agent: 'style-enforcer',
|
|
79
|
-
task: 'Check style compliance',
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
agent: 'test-writer',
|
|
83
|
-
task: 'Identify missing test coverage',
|
|
84
|
-
},
|
|
85
|
-
];
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Comprehensive Review (--depth comprehensive)
|
|
90
|
-
|
|
91
|
-
Deep multi-agent analysis:
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
{
|
|
95
|
-
orchestrator: "agent-orchestrator",
|
|
96
|
-
phases: [
|
|
97
|
-
{
|
|
98
|
-
name: "Impact Analysis",
|
|
99
|
-
parallel: [
|
|
100
|
-
{ agent: "code-explainer", focus: "change-intent" },
|
|
101
|
-
{ agent: "context-loader", focus: "affected-systems" }
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
name: "Quality Assessment",
|
|
106
|
-
parallel: [
|
|
107
|
-
{ agent: "architect-reviewer", focus: "design-consistency" },
|
|
108
|
-
{ agent: "security-analyzer", focus: "vulnerability-assessment" },
|
|
109
|
-
{ agent: "performance-analyzer", focus: "performance-impact" },
|
|
110
|
-
{ agent: "style-enforcer", focus: "code-standards" }
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: "Test & Documentation",
|
|
115
|
-
parallel: [
|
|
116
|
-
{ agent: "test-writer", focus: "coverage-gaps" },
|
|
117
|
-
{ agent: "test-runner", focus: "regression-testing" },
|
|
118
|
-
{ agent: "doc-writer", focus: "documentation-updates" }
|
|
119
|
-
]
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: "Fix Generation",
|
|
123
|
-
sequential: [
|
|
124
|
-
{ agent: "refactorer", focus: "improvement-suggestions" },
|
|
125
|
-
{ agent: "migration-assistant", focus: "breaking-changes" }
|
|
126
|
-
]
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Output Format
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
{
|
|
136
|
-
summary: {
|
|
137
|
-
intent: string; // What this PR is trying to achieve
|
|
138
|
-
scope: {
|
|
139
|
-
files: number;
|
|
140
|
-
insertions: number;
|
|
141
|
-
deletions: number;
|
|
142
|
-
components: string[]; // Affected components
|
|
143
|
-
};
|
|
144
|
-
risk: {
|
|
145
|
-
overall: 'low' | 'medium' | 'high' | 'critical';
|
|
146
|
-
breakdown: {
|
|
147
|
-
architecture: number; // 0-10 scale
|
|
148
|
-
security: number;
|
|
149
|
-
performance: number;
|
|
150
|
-
maintainability: number;
|
|
151
|
-
testing: number;
|
|
152
|
-
};
|
|
153
|
-
};
|
|
154
|
-
recommendation: 'approve' | 'request-changes' | 'comment';
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
findings: {
|
|
158
|
-
critical: Array<{
|
|
159
|
-
type: string; // e.g., "Security Vulnerability", "Breaking Change"
|
|
160
|
-
file: string;
|
|
161
|
-
line: number;
|
|
162
|
-
description: string;
|
|
163
|
-
suggestion: string;
|
|
164
|
-
agent: string; // Which agent found this
|
|
165
|
-
}>;
|
|
166
|
-
|
|
167
|
-
major: Array<{
|
|
168
|
-
type: string;
|
|
169
|
-
file: string;
|
|
170
|
-
line: number;
|
|
171
|
-
description: string;
|
|
172
|
-
suggestion: string;
|
|
173
|
-
autoFixAvailable: boolean;
|
|
174
|
-
}>;
|
|
175
|
-
|
|
176
|
-
minor: Array<{
|
|
177
|
-
type: string;
|
|
178
|
-
file: string;
|
|
179
|
-
line: number;
|
|
180
|
-
description: string;
|
|
181
|
-
suggestion: string;
|
|
182
|
-
}>;
|
|
183
|
-
|
|
184
|
-
positive: string[]; // Good practices observed
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
architectureReview?: {
|
|
188
|
-
patternCompliance: boolean;
|
|
189
|
-
designConsistency: 'excellent' | 'good' | 'acceptable' | 'poor';
|
|
190
|
-
suggestions: Array<{
|
|
191
|
-
pattern: string;
|
|
192
|
-
rationale: string;
|
|
193
|
-
example: string;
|
|
194
|
-
}>;
|
|
195
|
-
breakingChanges: Array<{
|
|
196
|
-
component: string;
|
|
197
|
-
change: string;
|
|
198
|
-
impact: string;
|
|
199
|
-
migration: string; // Migration guide
|
|
200
|
-
}>;
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
securityReview?: {
|
|
204
|
-
vulnerabilities: Array<{
|
|
205
|
-
type: string; // e.g., "SQL Injection", "XSS", "CSRF"
|
|
206
|
-
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
207
|
-
file: string;
|
|
208
|
-
line: number;
|
|
209
|
-
fix: string; // Suggested fix
|
|
210
|
-
cwe: string; // CWE identifier
|
|
211
|
-
}>;
|
|
212
|
-
dependencies: Array<{
|
|
213
|
-
package: string;
|
|
214
|
-
version: string;
|
|
215
|
-
vulnerabilities: string[];
|
|
216
|
-
recommendation: string;
|
|
217
|
-
}>;
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
performanceReview?: {
|
|
221
|
-
issues: Array<{
|
|
222
|
-
type: string; // e.g., "N+1 Query", "Memory Leak", "Inefficient Algorithm"
|
|
223
|
-
file: string;
|
|
224
|
-
line: number;
|
|
225
|
-
impact: 'high' | 'medium' | 'low';
|
|
226
|
-
optimization: string;
|
|
227
|
-
benchmark?: string; // Expected improvement
|
|
228
|
-
}>;
|
|
229
|
-
complexity: {
|
|
230
|
-
before: number; // Cyclomatic complexity
|
|
231
|
-
after: number;
|
|
232
|
-
delta: string; // e.g., "+15%", "-5%"
|
|
233
|
-
};
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
testingReview: {
|
|
237
|
-
coverage: {
|
|
238
|
-
current: number; // Current coverage %
|
|
239
|
-
required: number; // Required coverage %
|
|
240
|
-
gap: number; // Coverage gap
|
|
241
|
-
uncoveredFiles: Array<{
|
|
242
|
-
file: string;
|
|
243
|
-
uncoveredLines: number[];
|
|
244
|
-
}>;
|
|
245
|
-
};
|
|
246
|
-
missingTests: Array<{
|
|
247
|
-
file: string;
|
|
248
|
-
functionality: string;
|
|
249
|
-
suggestedTests: string[];
|
|
250
|
-
generatedTests?: string; // Generated test code
|
|
251
|
-
}>;
|
|
252
|
-
testQuality: {
|
|
253
|
-
score: number; // 0-100
|
|
254
|
-
issues: string[]; // e.g., "No edge case testing", "Missing mocks"
|
|
255
|
-
};
|
|
256
|
-
};
|
|
257
|
-
|
|
258
|
-
patches: Array<{
|
|
259
|
-
id: string;
|
|
260
|
-
type: 'fix' | 'improvement' | 'style' | 'documentation';
|
|
261
|
-
file: string;
|
|
262
|
-
description: string;
|
|
263
|
-
diff: string; // Git-style patch
|
|
264
|
-
automated: boolean; // Can be auto-applied
|
|
265
|
-
priority: 'must-fix' | 'should-fix' | 'nice-to-have';
|
|
266
|
-
command?: string; // Command to apply patch
|
|
267
|
-
}>;
|
|
268
|
-
|
|
269
|
-
documentation: {
|
|
270
|
-
needed: boolean;
|
|
271
|
-
missing: string[]; // What documentation is missing
|
|
272
|
-
suggestions: Array<{
|
|
273
|
-
type: string; // e.g., "API docs", "README update", "Migration guide"
|
|
274
|
-
content: string; // Suggested content
|
|
275
|
-
}>;
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
actionItems: {
|
|
279
|
-
mustFix: string[]; // Blocking issues
|
|
280
|
-
shouldFix: string[]; // Important but not blocking
|
|
281
|
-
consider: string[]; // Suggestions for improvement
|
|
282
|
-
automated: Array<{ // Auto-applicable fixes
|
|
283
|
-
description: string;
|
|
284
|
-
command: string;
|
|
285
|
-
}>;
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
## Review Categories
|
|
291
|
-
|
|
292
|
-
### Architecture Review
|
|
293
|
-
|
|
294
|
-
- Design pattern compliance
|
|
295
|
-
- SOLID principle violations
|
|
296
|
-
- Dependency management
|
|
297
|
-
- Module boundaries
|
|
298
|
-
- API consistency
|
|
299
|
-
|
|
300
|
-
### Security Review
|
|
301
|
-
|
|
302
|
-
- Input validation
|
|
303
|
-
- Authentication/authorization
|
|
304
|
-
- Injection vulnerabilities
|
|
305
|
-
- Sensitive data exposure
|
|
306
|
-
- Dependency vulnerabilities
|
|
307
|
-
|
|
308
|
-
### Performance Review
|
|
309
|
-
|
|
310
|
-
- Algorithm complexity
|
|
311
|
-
- Database query efficiency
|
|
312
|
-
- Memory management
|
|
313
|
-
- Caching opportunities
|
|
314
|
-
- Async/concurrent issues
|
|
315
|
-
|
|
316
|
-
### Maintainability Review
|
|
317
|
-
|
|
318
|
-
- Code complexity
|
|
319
|
-
- Documentation coverage
|
|
320
|
-
- Test coverage
|
|
321
|
-
- Technical debt
|
|
322
|
-
- Code duplication
|
|
323
|
-
|
|
324
|
-
## Integration Features
|
|
325
|
-
|
|
326
|
-
### GitHub/GitLab Integration
|
|
327
|
-
|
|
328
|
-
```typescript
|
|
329
|
-
{
|
|
330
|
-
prMetadata: {
|
|
331
|
-
number: number;
|
|
332
|
-
title: string;
|
|
333
|
-
author: string;
|
|
334
|
-
labels: string[];
|
|
335
|
-
milestone: string;
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
comments: Array<{
|
|
339
|
-
file: string;
|
|
340
|
-
line: number;
|
|
341
|
-
comment: string;
|
|
342
|
-
severity: 'blocking' | 'important' | 'suggestion';
|
|
343
|
-
}>;
|
|
344
|
-
|
|
345
|
-
checkStatus: {
|
|
346
|
-
passed: boolean;
|
|
347
|
-
checks: Array<{
|
|
348
|
-
name: string;
|
|
349
|
-
status: 'passed' | 'failed' | 'warning';
|
|
350
|
-
details: string;
|
|
351
|
-
}>;
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
## Examples
|
|
357
|
-
|
|
358
|
-
### Quick Review of Working Changes
|
|
359
|
-
|
|
360
|
-
```bash
|
|
361
|
-
/review-pr
|
|
362
|
-
# Reviews uncommitted changes with standard depth
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
### Comprehensive Feature Branch Review
|
|
366
|
-
|
|
367
|
-
```bash
|
|
368
|
-
/review-pr feature/new-api --depth comprehensive --check-coverage
|
|
369
|
-
# Deep review with test coverage verification
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
### Security-Focused Review
|
|
373
|
-
|
|
374
|
-
```bash
|
|
375
|
-
/review-pr HEAD~5..HEAD --focus security --suggest-fixes
|
|
376
|
-
# Security audit of last 5 commits with fix suggestions
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### Pre-Merge Final Review
|
|
380
|
-
|
|
381
|
-
```bash
|
|
382
|
-
/review-pr main...feature-branch --depth comprehensive --baseline main
|
|
383
|
-
# Full review comparing feature branch against main
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
## Best Practices
|
|
387
|
-
|
|
388
|
-
1. **Early Reviews**: Run on draft PRs for early feedback
|
|
389
|
-
2. **Incremental Reviews**: Review commits as they're added
|
|
390
|
-
3. **Focus Reviews**: Use focused reviews for faster feedback
|
|
391
|
-
4. **Automate Fixes**: Apply automated fixes to save time
|
|
392
|
-
5. **Track Metrics**: Monitor PR quality metrics over time
|
|
393
|
-
6. **CI Integration**: Include in CI/CD pipelines for consistency
|