awesome-slash 2.4.2
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/.claude-plugin/marketplace.json +54 -0
- package/.claude-plugin/plugin.json +11 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +261 -0
- package/LICENSE +21 -0
- package/README.md +363 -0
- package/SECURITY.md +101 -0
- package/adapters/README.md +256 -0
- package/adapters/codex/README.md +272 -0
- package/adapters/codex/install.sh +179 -0
- package/adapters/opencode/README.md +301 -0
- package/adapters/opencode/install.sh +223 -0
- package/lib/patterns/review-patterns.js +511 -0
- package/lib/patterns/slop-patterns.js +647 -0
- package/lib/platform/detect-platform.js +535 -0
- package/lib/platform/verify-tools.js +235 -0
- package/lib/state/workflow-state.js +635 -0
- package/lib/state/workflow-state.schema.json +282 -0
- package/lib/utils/context-optimizer.js +227 -0
- package/mcp-server/index.js +303 -0
- package/mcp-server/package.json +23 -0
- package/package.json +63 -0
- package/plugins/deslop-around/.claude-plugin/plugin.json +20 -0
- package/plugins/deslop-around/commands/deslop-around.md +220 -0
- package/plugins/deslop-around/lib/patterns/review-patterns.js +511 -0
- package/plugins/deslop-around/lib/patterns/slop-patterns.js +641 -0
- package/plugins/deslop-around/lib/platform/detect-platform.js +514 -0
- package/plugins/deslop-around/lib/platform/verify-tools.js +235 -0
- package/plugins/deslop-around/lib/state/workflow-state.js +635 -0
- package/plugins/deslop-around/lib/state/workflow-state.schema.json +282 -0
- package/plugins/deslop-around/lib/utils/context-optimizer.js +222 -0
- package/plugins/next-task/.claude-plugin/plugin.json +24 -0
- package/plugins/next-task/agents/ci-fixer.md +236 -0
- package/plugins/next-task/agents/ci-monitor.md +291 -0
- package/plugins/next-task/agents/delivery-validator.md +451 -0
- package/plugins/next-task/agents/deslop-work.md +272 -0
- package/plugins/next-task/agents/docs-updater.md +506 -0
- package/plugins/next-task/agents/exploration-agent.md +277 -0
- package/plugins/next-task/agents/implementation-agent.md +427 -0
- package/plugins/next-task/agents/planning-agent.md +236 -0
- package/plugins/next-task/agents/policy-selector.md +248 -0
- package/plugins/next-task/agents/review-orchestrator.md +521 -0
- package/plugins/next-task/agents/simple-fixer.md +136 -0
- package/plugins/next-task/agents/task-discoverer.md +357 -0
- package/plugins/next-task/agents/test-coverage-checker.md +447 -0
- package/plugins/next-task/agents/worktree-manager.md +419 -0
- package/plugins/next-task/commands/delivery-approval.md +331 -0
- package/plugins/next-task/commands/next-task.md +627 -0
- package/plugins/next-task/commands/update-docs-around.md +418 -0
- package/plugins/next-task/hooks/hooks.json +14 -0
- package/plugins/next-task/lib/patterns/review-patterns.js +511 -0
- package/plugins/next-task/lib/patterns/slop-patterns.js +641 -0
- package/plugins/next-task/lib/platform/detect-platform.js +514 -0
- package/plugins/next-task/lib/platform/verify-tools.js +235 -0
- package/plugins/next-task/lib/state/tasks-registry.schema.json +85 -0
- package/plugins/next-task/lib/state/workflow-state.js +635 -0
- package/plugins/next-task/lib/state/workflow-state.schema.json +282 -0
- package/plugins/next-task/lib/state/worktree-status.schema.json +219 -0
- package/plugins/next-task/lib/utils/context-optimizer.js +222 -0
- package/plugins/project-review/.claude-plugin/plugin.json +20 -0
- package/plugins/project-review/commands/project-review-agents.md +286 -0
- package/plugins/project-review/commands/project-review-github.md +142 -0
- package/plugins/project-review/commands/project-review.md +273 -0
- package/plugins/project-review/lib/patterns/review-patterns.js +511 -0
- package/plugins/project-review/lib/patterns/slop-patterns.js +641 -0
- package/plugins/project-review/lib/platform/detect-platform.js +514 -0
- package/plugins/project-review/lib/platform/verify-tools.js +235 -0
- package/plugins/project-review/lib/state/workflow-state.js +635 -0
- package/plugins/project-review/lib/state/workflow-state.schema.json +282 -0
- package/plugins/project-review/lib/utils/context-optimizer.js +222 -0
- package/plugins/reality-check/.claude-plugin/plugin.json +23 -0
- package/plugins/reality-check/README.md +156 -0
- package/plugins/reality-check/agents/code-explorer.md +353 -0
- package/plugins/reality-check/agents/doc-analyzer.md +337 -0
- package/plugins/reality-check/agents/issue-scanner.md +231 -0
- package/plugins/reality-check/agents/plan-synthesizer.md +479 -0
- package/plugins/reality-check/commands/scan.md +242 -0
- package/plugins/reality-check/commands/set.md +203 -0
- package/plugins/reality-check/lib/state/reality-check-state.js +509 -0
- package/plugins/reality-check/skills/reality-analysis/SKILL.md +317 -0
- package/plugins/ship/.claude-plugin/plugin.json +21 -0
- package/plugins/ship/commands/ship-ci-review-loop.md +443 -0
- package/plugins/ship/commands/ship-deployment.md +330 -0
- package/plugins/ship/commands/ship-error-handling.md +254 -0
- package/plugins/ship/commands/ship.md +370 -0
- package/plugins/ship/lib/patterns/review-patterns.js +511 -0
- package/plugins/ship/lib/patterns/slop-patterns.js +641 -0
- package/plugins/ship/lib/platform/detect-platform.js +514 -0
- package/plugins/ship/lib/platform/verify-tools.js +235 -0
- package/plugins/ship/lib/state/workflow-state.js +635 -0
- package/plugins/ship/lib/state/workflow-state.schema.json +282 -0
- package/plugins/ship/lib/utils/context-optimizer.js +222 -0
- package/scripts/install/claude.sh +50 -0
- package/scripts/install/codex.sh +181 -0
- package/scripts/install/opencode.sh +211 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sync documentation with actual code state across entire repository. Compares docs with actual code, exports, APIs and fixes discrepancies.
|
|
3
|
+
argument-hint: "[path] [--apply] [--report-only]"
|
|
4
|
+
allowed-tools: Bash(git:*), Read, Write, Edit, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /update-docs-around - Documentation Sync
|
|
9
|
+
|
|
10
|
+
Compare documentation with actual code state and fix discrepancies.
|
|
11
|
+
This is a standalone command (not part of workflow) that scans the entire repo.
|
|
12
|
+
|
|
13
|
+
## Arguments
|
|
14
|
+
|
|
15
|
+
- `[path]`: Specific path to check (default: entire repo)
|
|
16
|
+
- `--apply`: Apply fixes (default: report only)
|
|
17
|
+
- `--report-only`: Only report issues, don't fix
|
|
18
|
+
|
|
19
|
+
## Parse Arguments
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
const args = $ARGUMENTS.split(' ').filter(Boolean);
|
|
23
|
+
const applyMode = args.includes('--apply');
|
|
24
|
+
const reportOnly = args.includes('--report-only') || !applyMode;
|
|
25
|
+
const targetPath = args.find(a => !a.startsWith('--')) || '.';
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Phase 1: Find All Documentation Files
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Find all markdown files
|
|
32
|
+
DOC_FILES=$(find ${targetPath} -name "*.md" -type f | grep -v node_modules | grep -v .git)
|
|
33
|
+
|
|
34
|
+
# Categorize docs
|
|
35
|
+
README_FILES=$(echo "$DOC_FILES" | grep -i readme)
|
|
36
|
+
API_DOCS=$(echo "$DOC_FILES" | grep -E '(api|reference)')
|
|
37
|
+
GUIDES=$(echo "$DOC_FILES" | grep -E '(guide|tutorial|getting-started)')
|
|
38
|
+
CHANGELOG=$(echo "$DOC_FILES" | grep -i changelog)
|
|
39
|
+
|
|
40
|
+
echo "Total docs: $(echo "$DOC_FILES" | wc -l)"
|
|
41
|
+
echo "READMEs: $(echo "$README_FILES" | wc -l)"
|
|
42
|
+
echo "API docs: $(echo "$API_DOCS" | wc -l)"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Phase 2: Extract Code References from Docs
|
|
46
|
+
|
|
47
|
+
For each doc file, extract:
|
|
48
|
+
- Import statements in code blocks
|
|
49
|
+
- Function/class references
|
|
50
|
+
- File path references
|
|
51
|
+
- URL references
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
async function extractCodeReferences(docFile) {
|
|
55
|
+
const content = await readFile(docFile);
|
|
56
|
+
const references = [];
|
|
57
|
+
|
|
58
|
+
// Extract code blocks
|
|
59
|
+
const codeBlocks = content.match(/```[\w]*\n[\s\S]*?```/g) || [];
|
|
60
|
+
|
|
61
|
+
for (const block of codeBlocks) {
|
|
62
|
+
// Extract imports
|
|
63
|
+
const imports = block.match(/import .* from ['"]([^'"]+)['"]/g);
|
|
64
|
+
if (imports) {
|
|
65
|
+
references.push(...imports.map(i => ({
|
|
66
|
+
type: 'import',
|
|
67
|
+
value: i.match(/from ['"]([^'"]+)['"]/)[1],
|
|
68
|
+
block
|
|
69
|
+
})));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Extract require statements
|
|
73
|
+
const requires = block.match(/require\(['"]([^'"]+)['"]\)/g);
|
|
74
|
+
if (requires) {
|
|
75
|
+
references.push(...requires.map(r => ({
|
|
76
|
+
type: 'require',
|
|
77
|
+
value: r.match(/\(['"]([^'"]+)['"]\)/)[1],
|
|
78
|
+
block
|
|
79
|
+
})));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Extract function calls
|
|
83
|
+
const functionCalls = block.match(/\b([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g);
|
|
84
|
+
if (functionCalls) {
|
|
85
|
+
references.push(...functionCalls.map(f => ({
|
|
86
|
+
type: 'function',
|
|
87
|
+
value: f.replace(/\s*\($/, ''),
|
|
88
|
+
block
|
|
89
|
+
})));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Extract inline code references
|
|
94
|
+
const inlineCode = content.match(/`[^`]+`/g) || [];
|
|
95
|
+
for (const code of inlineCode) {
|
|
96
|
+
const value = code.replace(/`/g, '');
|
|
97
|
+
if (value.includes('/') || value.includes('.')) {
|
|
98
|
+
references.push({ type: 'path', value, inline: true });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return references;
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Phase 3: Verify References Against Codebase
|
|
107
|
+
|
|
108
|
+
```javascript
|
|
109
|
+
async function verifyReferences(references) {
|
|
110
|
+
const issues = [];
|
|
111
|
+
|
|
112
|
+
for (const ref of references) {
|
|
113
|
+
let exists = false;
|
|
114
|
+
let suggestion = null;
|
|
115
|
+
|
|
116
|
+
switch (ref.type) {
|
|
117
|
+
case 'import':
|
|
118
|
+
case 'require':
|
|
119
|
+
case 'path':
|
|
120
|
+
// Check if file/module exists
|
|
121
|
+
const resolved = resolveImportPath(ref.value);
|
|
122
|
+
exists = await fileExists(resolved);
|
|
123
|
+
|
|
124
|
+
if (!exists) {
|
|
125
|
+
// Try to find similar file
|
|
126
|
+
const similar = await findSimilarFile(ref.value);
|
|
127
|
+
suggestion = similar ? `Did you mean: ${similar}` : null;
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
|
|
131
|
+
case 'function':
|
|
132
|
+
// Check if function exists in exports
|
|
133
|
+
exists = await functionExistsInProject(ref.value);
|
|
134
|
+
|
|
135
|
+
if (!exists) {
|
|
136
|
+
// Try to find renamed function
|
|
137
|
+
const renamed = await findRenamedFunction(ref.value);
|
|
138
|
+
suggestion = renamed ? `Function may have been renamed to: ${renamed}` : null;
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (!exists) {
|
|
144
|
+
issues.push({
|
|
145
|
+
type: 'outdated-reference',
|
|
146
|
+
reference: ref,
|
|
147
|
+
suggestion
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return issues;
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Phase 4: Check Code Examples
|
|
157
|
+
|
|
158
|
+
Verify code examples are syntactically valid and runnable:
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
async function checkCodeExamples(docFile) {
|
|
162
|
+
const content = await readFile(docFile);
|
|
163
|
+
const issues = [];
|
|
164
|
+
|
|
165
|
+
const codeBlocks = content.match(/```(\w+)\n([\s\S]*?)```/g) || [];
|
|
166
|
+
|
|
167
|
+
for (const block of codeBlocks) {
|
|
168
|
+
const [, lang, code] = block.match(/```(\w+)\n([\s\S]*?)```/);
|
|
169
|
+
|
|
170
|
+
if (lang === 'javascript' || lang === 'js' || lang === 'typescript' || lang === 'ts') {
|
|
171
|
+
// Check for syntax errors
|
|
172
|
+
try {
|
|
173
|
+
// Basic syntax check
|
|
174
|
+
new Function(code.replace(/import|export/g, '//'));
|
|
175
|
+
} catch (e) {
|
|
176
|
+
issues.push({
|
|
177
|
+
type: 'invalid-syntax',
|
|
178
|
+
docFile,
|
|
179
|
+
lang,
|
|
180
|
+
error: e.message,
|
|
181
|
+
code: code.substring(0, 100)
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return issues;
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Phase 5: Check README Accuracy
|
|
192
|
+
|
|
193
|
+
```javascript
|
|
194
|
+
async function checkReadmeAccuracy() {
|
|
195
|
+
const issues = [];
|
|
196
|
+
const readme = await readFile('README.md');
|
|
197
|
+
|
|
198
|
+
// Check if installation instructions work
|
|
199
|
+
const installMatch = readme.match(/npm install ([^\n`]+)/);
|
|
200
|
+
if (installMatch) {
|
|
201
|
+
const pkg = await readFile('package.json');
|
|
202
|
+
const pkgJson = JSON.parse(pkg);
|
|
203
|
+
if (!pkgJson.name === installMatch[1]) {
|
|
204
|
+
issues.push({
|
|
205
|
+
type: 'wrong-package-name',
|
|
206
|
+
expected: pkgJson.name,
|
|
207
|
+
found: installMatch[1]
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Check version numbers
|
|
213
|
+
const versionMatch = readme.match(/version[^\d]*(\d+\.\d+\.\d+)/i);
|
|
214
|
+
if (versionMatch) {
|
|
215
|
+
const pkg = await readFile('package.json');
|
|
216
|
+
const pkgJson = JSON.parse(pkg);
|
|
217
|
+
if (pkgJson.version !== versionMatch[1]) {
|
|
218
|
+
issues.push({
|
|
219
|
+
type: 'outdated-version',
|
|
220
|
+
docsVersion: versionMatch[1],
|
|
221
|
+
actualVersion: pkgJson.version
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Check if exports mentioned in docs exist
|
|
227
|
+
const exportMentions = readme.match(/\{([^}]+)\}/g) || [];
|
|
228
|
+
for (const mention of exportMentions) {
|
|
229
|
+
const exports = mention.replace(/[{}]/g, '').split(',').map(e => e.trim());
|
|
230
|
+
for (const exp of exports) {
|
|
231
|
+
if (!await exportExistsInProject(exp)) {
|
|
232
|
+
issues.push({
|
|
233
|
+
type: 'missing-export',
|
|
234
|
+
export: exp
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return issues;
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Phase 6: Check CHANGELOG
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
async function checkChangelog() {
|
|
248
|
+
const issues = [];
|
|
249
|
+
|
|
250
|
+
if (!await fileExists('CHANGELOG.md')) {
|
|
251
|
+
issues.push({ type: 'missing-changelog' });
|
|
252
|
+
return issues;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const changelog = await readFile('CHANGELOG.md');
|
|
256
|
+
|
|
257
|
+
// Check for recent commits not in changelog
|
|
258
|
+
const recentCommits = await exec('git log --oneline -20');
|
|
259
|
+
const commits = recentCommits.split('\n').filter(Boolean);
|
|
260
|
+
|
|
261
|
+
for (const commit of commits) {
|
|
262
|
+
const [hash, ...msgParts] = commit.split(' ');
|
|
263
|
+
const msg = msgParts.join(' ');
|
|
264
|
+
|
|
265
|
+
// Skip merge commits and chore commits
|
|
266
|
+
if (msg.startsWith('Merge') || msg.startsWith('chore')) continue;
|
|
267
|
+
|
|
268
|
+
// Check if commit is mentioned
|
|
269
|
+
if (!changelog.includes(hash) && !changelog.includes(msg.substring(0, 30))) {
|
|
270
|
+
issues.push({
|
|
271
|
+
type: 'missing-commit-entry',
|
|
272
|
+
commit: { hash, msg }
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return issues;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Phase 7: Apply Fixes (if --apply)
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
async function applyFixes(issues) {
|
|
285
|
+
if (reportOnly) {
|
|
286
|
+
console.log('Report-only mode, not applying fixes');
|
|
287
|
+
return { applied: [], skipped: issues };
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const applied = [];
|
|
291
|
+
const skipped = [];
|
|
292
|
+
|
|
293
|
+
for (const issue of issues) {
|
|
294
|
+
switch (issue.type) {
|
|
295
|
+
case 'outdated-reference':
|
|
296
|
+
if (issue.suggestion) {
|
|
297
|
+
// Apply the suggested fix
|
|
298
|
+
const oldPath = issue.reference.value;
|
|
299
|
+
const newPath = issue.suggestion.replace('Did you mean: ', '');
|
|
300
|
+
await editFile(issue.docFile, oldPath, newPath);
|
|
301
|
+
applied.push({ ...issue, fixed: true });
|
|
302
|
+
} else {
|
|
303
|
+
skipped.push(issue);
|
|
304
|
+
}
|
|
305
|
+
break;
|
|
306
|
+
|
|
307
|
+
case 'outdated-version':
|
|
308
|
+
// Update version in docs
|
|
309
|
+
await editFile('README.md', issue.docsVersion, issue.actualVersion);
|
|
310
|
+
applied.push({ ...issue, fixed: true });
|
|
311
|
+
break;
|
|
312
|
+
|
|
313
|
+
default:
|
|
314
|
+
skipped.push(issue);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return { applied, skipped };
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Output Report
|
|
323
|
+
|
|
324
|
+
```markdown
|
|
325
|
+
## Documentation Sync Report
|
|
326
|
+
|
|
327
|
+
**Mode**: ${applyMode ? 'Apply Fixes' : 'Report Only'}
|
|
328
|
+
**Scope**: ${targetPath === '.' ? 'Entire repository' : targetPath}
|
|
329
|
+
**Files Analyzed**: ${docFiles.length}
|
|
330
|
+
|
|
331
|
+
### Summary
|
|
332
|
+
| Category | Issues Found | Fixed |
|
|
333
|
+
|----------|--------------|-------|
|
|
334
|
+
| Outdated References | ${outdatedRefs.length} | ${fixed.filter(f => f.type === 'outdated-reference').length} |
|
|
335
|
+
| Invalid Syntax | ${syntaxErrors.length} | 0 |
|
|
336
|
+
| Missing Changelog Entries | ${missingChangelog.length} | 0 |
|
|
337
|
+
| Version Mismatch | ${versionIssues.length} | ${fixed.filter(f => f.type === 'outdated-version').length} |
|
|
338
|
+
|
|
339
|
+
### Outdated References (${outdatedRefs.length} found)
|
|
340
|
+
${outdatedRefs.map(i => `
|
|
341
|
+
- **${i.docFile}**
|
|
342
|
+
- Reference: \`${i.reference.value}\`
|
|
343
|
+
- ${i.suggestion || 'No suggestion available'}
|
|
344
|
+
- ${i.fixed ? '✓ Fixed' : '⚠️ Manual fix required'}
|
|
345
|
+
`).join('\n')}
|
|
346
|
+
|
|
347
|
+
### Invalid Code Examples (${syntaxErrors.length} found)
|
|
348
|
+
${syntaxErrors.map(i => `
|
|
349
|
+
- **${i.docFile}** (${i.lang})
|
|
350
|
+
- Error: ${i.error}
|
|
351
|
+
- Code: \`${i.code}...\`
|
|
352
|
+
`).join('\n')}
|
|
353
|
+
|
|
354
|
+
### Missing Changelog Entries (${missingChangelog.length} found)
|
|
355
|
+
${missingChangelog.map(i => `
|
|
356
|
+
- ${i.commit.hash}: ${i.commit.msg}
|
|
357
|
+
`).join('\n')}
|
|
358
|
+
|
|
359
|
+
### Recommendations
|
|
360
|
+
${recommendations.map(r => `- ${r}`).join('\n')}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Output Format (JSON)
|
|
364
|
+
|
|
365
|
+
```json
|
|
366
|
+
{
|
|
367
|
+
"mode": "report-only",
|
|
368
|
+
"scope": ".",
|
|
369
|
+
"filesAnalyzed": 15,
|
|
370
|
+
"issues": {
|
|
371
|
+
"total": 12,
|
|
372
|
+
"outdatedReferences": 5,
|
|
373
|
+
"syntaxErrors": 2,
|
|
374
|
+
"missingChangelog": 3,
|
|
375
|
+
"versionMismatch": 1,
|
|
376
|
+
"missingExports": 1
|
|
377
|
+
},
|
|
378
|
+
"fixed": 0,
|
|
379
|
+
"details": [
|
|
380
|
+
{
|
|
381
|
+
"file": "README.md",
|
|
382
|
+
"line": 45,
|
|
383
|
+
"type": "outdated-reference",
|
|
384
|
+
"reference": "import { oldFunction }",
|
|
385
|
+
"suggestion": "Function renamed to newFunction"
|
|
386
|
+
}
|
|
387
|
+
],
|
|
388
|
+
"recommendations": [
|
|
389
|
+
"Update README.md with current version",
|
|
390
|
+
"Add changelog entry for recent commits"
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Examples
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
# Report-only mode (default)
|
|
399
|
+
/update-docs-around
|
|
400
|
+
|
|
401
|
+
# Apply fixes
|
|
402
|
+
/update-docs-around --apply
|
|
403
|
+
|
|
404
|
+
# Check specific directory
|
|
405
|
+
/update-docs-around docs/ --report-only
|
|
406
|
+
|
|
407
|
+
# Apply fixes to specific path
|
|
408
|
+
/update-docs-around docs/api --apply
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Success Criteria
|
|
412
|
+
|
|
413
|
+
- Scans all documentation files
|
|
414
|
+
- Identifies outdated references to code
|
|
415
|
+
- Validates code examples for syntax errors
|
|
416
|
+
- Checks CHANGELOG for missing entries
|
|
417
|
+
- Provides clear, actionable report
|
|
418
|
+
- Applies safe fixes when --apply is used
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SubagentStop": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "prompt",
|
|
8
|
+
"prompt": "## WORKFLOW ENFORCEMENT - SubagentStop Hook\n\nA subagent has completed. You MUST determine and execute the next workflow phase.\n\n### Check Workflow State\n\n```javascript\nconst state = workflowState.readState();\nconst completedAgent = state.phases.current;\nconst agentResult = // from the subagent output\n```\n\n### Decision Tree (MUST FOLLOW)\n\n1. **If implementation-agent completed**:\n - MUST run deslop-work AND test-coverage-checker (parallel)\n - ```javascript\n await Promise.all([\n Task({ subagent_type: 'next-task:deslop-work' }),\n Task({ subagent_type: 'next-task:test-coverage-checker' })\n ]);\n ```\n - Then MUST run review-orchestrator\n\n2. **If pre-review gates completed**:\n - MUST run review-orchestrator\n - ```javascript\n await Task({ subagent_type: 'next-task:review-orchestrator', model: 'opus' });\n ```\n\n3. **If review-orchestrator completed**:\n - Check if approved: `agentResult.approved === true`\n - If APPROVED: MUST run delivery-validator\n ```javascript\n await Task({ subagent_type: 'next-task:delivery-validator' });\n ```\n - If NOT APPROVED: MUST run deslop-work on fixes, then retry review\n\n4. **If delivery-validator completed**:\n - Check if approved: `agentResult.approved === true`\n - If APPROVED: MUST run docs-updater\n ```javascript\n await Task({ subagent_type: 'next-task:docs-updater' });\n ```\n - If NOT APPROVED: Return to implementation with fix instructions\n\n5. **If docs-updater completed**:\n - MUST invoke /ship command\n - ```javascript\n await Skill({ skill: 'ship:ship' });\n ```\n\n### CRITICAL ENFORCEMENT\n\n```\n╔══════════════════════════════════════════════════════════════════╗\n║ ⛔ NEVER skip deslop-work or test-coverage-checker ║\n║ ⛔ NEVER skip review-orchestrator ║\n║ ⛔ NEVER skip delivery-validator ║\n║ ⛔ NEVER skip docs-updater ║\n║ ⛔ NEVER create PR before /ship is invoked ║\n║ ⛔ NEVER push to remote before /ship is invoked ║\n╚══════════════════════════════════════════════════════════════════╝\n```\n\n### Workflow Sequence (MANDATORY)\n\n```\nimplementation-agent\n ↓ (SubagentStop)\npre-review gates (deslop-work + test-coverage-checker)\n ↓ (SubagentStop)\nreview-orchestrator\n ↓ (SubagentStop, if approved)\ndelivery-validator\n ↓ (SubagentStop, if approved)\ndocs-updater\n ↓ (SubagentStop)\n/ship command\n```\n\nReturn: {\"ok\": true, \"nextPhase\": \"<phase-name>\"}"
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
}
|