ruvnet-kb-first 5.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/LICENSE +21 -0
- package/README.md +674 -0
- package/SKILL.md +740 -0
- package/bin/kb-first.js +123 -0
- package/install/init-project.sh +435 -0
- package/install/install-global.sh +257 -0
- package/install/kb-first-autodetect.sh +108 -0
- package/install/kb-first-command.md +80 -0
- package/install/kb-first-skill.md +262 -0
- package/package.json +87 -0
- package/phases/00-assessment.md +529 -0
- package/phases/01-storage.md +194 -0
- package/phases/01.5-hooks-setup.md +521 -0
- package/phases/02-kb-creation.md +413 -0
- package/phases/03-persistence.md +125 -0
- package/phases/04-visualization.md +170 -0
- package/phases/05-integration.md +114 -0
- package/phases/06-scaffold.md +130 -0
- package/phases/07-build.md +493 -0
- package/phases/08-verification.md +597 -0
- package/phases/09-security.md +512 -0
- package/phases/10-documentation.md +613 -0
- package/phases/11-deployment.md +670 -0
- package/phases/testing.md +713 -0
- package/scripts/1.5-hooks-verify.sh +252 -0
- package/scripts/8.1-code-scan.sh +58 -0
- package/scripts/8.2-import-check.sh +42 -0
- package/scripts/8.3-source-returns.sh +52 -0
- package/scripts/8.4-startup-verify.sh +65 -0
- package/scripts/8.5-fallback-check.sh +63 -0
- package/scripts/8.6-attribution.sh +56 -0
- package/scripts/8.7-confidence.sh +56 -0
- package/scripts/8.8-gap-logging.sh +70 -0
- package/scripts/9-security-audit.sh +202 -0
- package/scripts/init-project.sh +395 -0
- package/scripts/verify-enforcement.sh +167 -0
- package/src/commands/hooks.js +361 -0
- package/src/commands/init.js +315 -0
- package/src/commands/phase.js +372 -0
- package/src/commands/score.js +380 -0
- package/src/commands/status.js +193 -0
- package/src/commands/verify.js +286 -0
- package/src/index.js +56 -0
- package/src/mcp-server.js +412 -0
- package/templates/attention-router.ts +534 -0
- package/templates/code-analysis.ts +683 -0
- package/templates/federated-kb-learner.ts +649 -0
- package/templates/gnn-engine.ts +1091 -0
- package/templates/intentions.md +277 -0
- package/templates/kb-client.ts +905 -0
- package/templates/schema.sql +303 -0
- package/templates/sona-config.ts +312 -0
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
# Phase 8: Final Verification
|
|
2
|
+
|
|
3
|
+
Updated: 2026-01-01 19:45:00 EST | Version 2.0.0
|
|
4
|
+
Created: 2026-01-01 15:00:00 EST
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
Comprehensive check that all KB-First rules are followed. This is the final gate before the application is considered complete.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## ⛔ CRITICAL: This Phase Has 8 Sub-Phases
|
|
13
|
+
|
|
14
|
+
Each sub-phase is a hard gate. ALL must pass before completion.
|
|
15
|
+
|
|
16
|
+
| Sub-Phase | Name | Automated? | Hard Gate? |
|
|
17
|
+
|-----------|------|------------|------------|
|
|
18
|
+
| 8.1 | Code Scan (No Hardcoded Values) | ✅ Yes | ⛔ Yes |
|
|
19
|
+
| 8.2 | Import Verification | ✅ Yes | ⛔ Yes |
|
|
20
|
+
| 8.3 | Source Return Check | ✅ Yes | ⛔ Yes |
|
|
21
|
+
| 8.4 | Startup Verification Check | ✅ Yes | ⛔ Yes |
|
|
22
|
+
| 8.5 | Fallback Pattern Check | ✅ Yes | ⛔ Yes |
|
|
23
|
+
| 8.6 | Expert Attribution Check | ✅ Yes | ⛔ Yes |
|
|
24
|
+
| 8.7 | Confidence Score Check | ✅ Yes | ⛔ Yes |
|
|
25
|
+
| 8.8 | Gap Logging Verification | ✅ Yes | ⛔ Yes |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 8.1 Code Scan (No Hardcoded Values)
|
|
30
|
+
|
|
31
|
+
**Purpose:** Verify no domain logic is hardcoded.
|
|
32
|
+
|
|
33
|
+
**Script:**
|
|
34
|
+
```bash
|
|
35
|
+
#!/bin/bash
|
|
36
|
+
# 8.1-code-scan.sh
|
|
37
|
+
|
|
38
|
+
echo "=== 8.1 Code Scan ==="
|
|
39
|
+
ERRORS=0
|
|
40
|
+
|
|
41
|
+
# Check for hardcoded decimals
|
|
42
|
+
DECIMALS=$(grep -rn "= [0-9]\+\.[0-9]\+" src/domain/ 2>/dev/null | grep -v "confidence" | wc -l)
|
|
43
|
+
if [ $DECIMALS -gt 0 ]; then
|
|
44
|
+
echo "❌ Found $DECIMALS hardcoded decimal values:"
|
|
45
|
+
grep -rn "= [0-9]\+\.[0-9]\+" src/domain/ | grep -v "confidence"
|
|
46
|
+
ERRORS=$((ERRORS + DECIMALS))
|
|
47
|
+
else
|
|
48
|
+
echo "✅ No hardcoded decimals"
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Check for rate/age/limit constants
|
|
52
|
+
CONSTANTS=$(grep -rn "const.*\(Rate\|Age\|Limit\|Amount\)" src/domain/ 2>/dev/null | wc -l)
|
|
53
|
+
if [ $CONSTANTS -gt 0 ]; then
|
|
54
|
+
echo "❌ Found $CONSTANTS suspicious constants:"
|
|
55
|
+
grep -rn "const.*\(Rate\|Age\|Limit\|Amount\)" src/domain/
|
|
56
|
+
ERRORS=$((ERRORS + CONSTANTS))
|
|
57
|
+
else
|
|
58
|
+
echo "✅ No suspicious constants"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Check for DEFAULT_ patterns
|
|
62
|
+
DEFAULTS=$(grep -rn "DEFAULT_" src/domain/ 2>/dev/null | wc -l)
|
|
63
|
+
if [ $DEFAULTS -gt 0 ]; then
|
|
64
|
+
echo "❌ Found $DEFAULTS DEFAULT_ patterns:"
|
|
65
|
+
grep -rn "DEFAULT_" src/domain/
|
|
66
|
+
ERRORS=$((ERRORS + DEFAULTS))
|
|
67
|
+
else
|
|
68
|
+
echo "✅ No DEFAULT_ patterns"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
echo ""
|
|
72
|
+
if [ $ERRORS -eq 0 ]; then
|
|
73
|
+
echo "✅ 8.1 PASSED"
|
|
74
|
+
exit 0
|
|
75
|
+
else
|
|
76
|
+
echo "❌ 8.1 FAILED ($ERRORS errors)"
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Gate:** Exit code must be 0
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 8.2 Import Verification
|
|
86
|
+
|
|
87
|
+
**Purpose:** All domain files must import from kb/.
|
|
88
|
+
|
|
89
|
+
**Script:**
|
|
90
|
+
```bash
|
|
91
|
+
#!/bin/bash
|
|
92
|
+
# 8.2-import-check.sh
|
|
93
|
+
|
|
94
|
+
echo "=== 8.2 Import Verification ==="
|
|
95
|
+
ERRORS=0
|
|
96
|
+
|
|
97
|
+
for file in src/domain/*.ts src/domain/*.js 2>/dev/null; do
|
|
98
|
+
if [ -f "$file" ]; then
|
|
99
|
+
if ! grep -q "from.*['\"].*kb" "$file"; then
|
|
100
|
+
echo "❌ $file does not import from kb/"
|
|
101
|
+
ERRORS=$((ERRORS + 1))
|
|
102
|
+
else
|
|
103
|
+
echo "✅ $file imports from kb/"
|
|
104
|
+
fi
|
|
105
|
+
fi
|
|
106
|
+
done
|
|
107
|
+
|
|
108
|
+
echo ""
|
|
109
|
+
if [ $ERRORS -eq 0 ]; then
|
|
110
|
+
echo "✅ 8.2 PASSED"
|
|
111
|
+
exit 0
|
|
112
|
+
else
|
|
113
|
+
echo "❌ 8.2 FAILED ($ERRORS files missing kb import)"
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Gate:** Exit code must be 0
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 8.3 Source Return Check
|
|
123
|
+
|
|
124
|
+
**Purpose:** All domain functions must return kbSources.
|
|
125
|
+
|
|
126
|
+
**Script:**
|
|
127
|
+
```bash
|
|
128
|
+
#!/bin/bash
|
|
129
|
+
# 8.3-source-check.sh
|
|
130
|
+
|
|
131
|
+
echo "=== 8.3 Source Return Check ==="
|
|
132
|
+
ERRORS=0
|
|
133
|
+
|
|
134
|
+
for file in src/domain/*.ts src/domain/*.js 2>/dev/null; do
|
|
135
|
+
if [ -f "$file" ]; then
|
|
136
|
+
# Count return statements
|
|
137
|
+
RETURNS=$(grep -c "return {" "$file" 2>/dev/null || echo 0)
|
|
138
|
+
# Count kbSources in returns
|
|
139
|
+
SOURCES=$(grep -A5 "return {" "$file" 2>/dev/null | grep -c "kbSources" || echo 0)
|
|
140
|
+
|
|
141
|
+
if [ $RETURNS -gt 0 ] && [ $SOURCES -lt $RETURNS ]; then
|
|
142
|
+
echo "❌ $file: $SOURCES/$RETURNS returns have kbSources"
|
|
143
|
+
ERRORS=$((ERRORS + 1))
|
|
144
|
+
elif [ $RETURNS -gt 0 ]; then
|
|
145
|
+
echo "✅ $file: All returns have kbSources"
|
|
146
|
+
fi
|
|
147
|
+
fi
|
|
148
|
+
done
|
|
149
|
+
|
|
150
|
+
echo ""
|
|
151
|
+
if [ $ERRORS -eq 0 ]; then
|
|
152
|
+
echo "✅ 8.3 PASSED"
|
|
153
|
+
exit 0
|
|
154
|
+
else
|
|
155
|
+
echo "❌ 8.3 FAILED ($ERRORS files missing kbSources)"
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Gate:** Exit code must be 0
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 8.4 Startup Verification Check
|
|
165
|
+
|
|
166
|
+
**Purpose:** Entry point must verify KB before anything else.
|
|
167
|
+
|
|
168
|
+
**Script:**
|
|
169
|
+
```bash
|
|
170
|
+
#!/bin/bash
|
|
171
|
+
# 8.4-startup-check.sh
|
|
172
|
+
|
|
173
|
+
echo "=== 8.4 Startup Verification Check ==="
|
|
174
|
+
ERRORS=0
|
|
175
|
+
|
|
176
|
+
ENTRY_FILE=""
|
|
177
|
+
for f in src/index.ts src/index.js src/main.ts src/main.js; do
|
|
178
|
+
[ -f "$f" ] && ENTRY_FILE="$f" && break
|
|
179
|
+
done
|
|
180
|
+
|
|
181
|
+
if [ -z "$ENTRY_FILE" ]; then
|
|
182
|
+
echo "❌ No entry point found (src/index.ts or src/main.ts)"
|
|
183
|
+
exit 1
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
echo "Checking $ENTRY_FILE..."
|
|
187
|
+
|
|
188
|
+
# Check verifyConnection is called
|
|
189
|
+
if ! grep -q "verifyConnection" "$ENTRY_FILE"; then
|
|
190
|
+
echo "❌ verifyConnection not found"
|
|
191
|
+
ERRORS=$((ERRORS + 1))
|
|
192
|
+
else
|
|
193
|
+
echo "✅ verifyConnection present"
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
# Check it's called early (in first 30 lines)
|
|
197
|
+
if ! head -30 "$ENTRY_FILE" | grep -q "verifyConnection"; then
|
|
198
|
+
echo "⚠️ verifyConnection may not be called first"
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
# Check process.exit on failure
|
|
202
|
+
if ! grep -q "process.exit(1)" "$ENTRY_FILE"; then
|
|
203
|
+
echo "❌ No process.exit(1) on KB failure"
|
|
204
|
+
ERRORS=$((ERRORS + 1))
|
|
205
|
+
else
|
|
206
|
+
echo "✅ process.exit(1) present"
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
echo ""
|
|
210
|
+
if [ $ERRORS -eq 0 ]; then
|
|
211
|
+
echo "✅ 8.4 PASSED"
|
|
212
|
+
exit 0
|
|
213
|
+
else
|
|
214
|
+
echo "❌ 8.4 FAILED ($ERRORS issues)"
|
|
215
|
+
exit 1
|
|
216
|
+
fi
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Gate:** Exit code must be 0
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 8.5 Fallback Pattern Check
|
|
224
|
+
|
|
225
|
+
**Purpose:** No fallback logic allowed in domain code.
|
|
226
|
+
|
|
227
|
+
**Script:**
|
|
228
|
+
```bash
|
|
229
|
+
#!/bin/bash
|
|
230
|
+
# 8.5-fallback-check.sh
|
|
231
|
+
|
|
232
|
+
echo "=== 8.5 Fallback Pattern Check ==="
|
|
233
|
+
ERRORS=0
|
|
234
|
+
|
|
235
|
+
# Check for || DEFAULT patterns
|
|
236
|
+
DEFAULTS=$(grep -rn "|| DEFAULT" src/domain/ 2>/dev/null | wc -l)
|
|
237
|
+
if [ $DEFAULTS -gt 0 ]; then
|
|
238
|
+
echo "❌ Found $DEFAULTS || DEFAULT patterns:"
|
|
239
|
+
grep -rn "|| DEFAULT" src/domain/
|
|
240
|
+
ERRORS=$((ERRORS + DEFAULTS))
|
|
241
|
+
fi
|
|
242
|
+
|
|
243
|
+
# Check for || [] patterns
|
|
244
|
+
ARRAYS=$(grep -rn "|| \[\]" src/domain/ 2>/dev/null | wc -l)
|
|
245
|
+
if [ $ARRAYS -gt 0 ]; then
|
|
246
|
+
echo "❌ Found $ARRAYS || [] patterns:"
|
|
247
|
+
grep -rn "|| \[\]" src/domain/
|
|
248
|
+
ERRORS=$((ERRORS + ARRAYS))
|
|
249
|
+
fi
|
|
250
|
+
|
|
251
|
+
# Check for || {} patterns
|
|
252
|
+
OBJECTS=$(grep -rn "|| {}" src/domain/ 2>/dev/null | wc -l)
|
|
253
|
+
if [ $OBJECTS -gt 0 ]; then
|
|
254
|
+
echo "❌ Found $OBJECTS || {} patterns:"
|
|
255
|
+
grep -rn "|| {}" src/domain/
|
|
256
|
+
ERRORS=$((ERRORS + OBJECTS))
|
|
257
|
+
fi
|
|
258
|
+
|
|
259
|
+
# Check for ?? with literal fallbacks
|
|
260
|
+
NULLISH=$(grep -rn "?? [0-9\"\']" src/domain/ 2>/dev/null | wc -l)
|
|
261
|
+
if [ $NULLISH -gt 0 ]; then
|
|
262
|
+
echo "⚠️ Found $NULLISH ?? with literal fallbacks (review manually):"
|
|
263
|
+
grep -rn "?? [0-9\"\']" src/domain/
|
|
264
|
+
fi
|
|
265
|
+
|
|
266
|
+
echo ""
|
|
267
|
+
if [ $ERRORS -eq 0 ]; then
|
|
268
|
+
echo "✅ 8.5 PASSED"
|
|
269
|
+
exit 0
|
|
270
|
+
else
|
|
271
|
+
echo "❌ 8.5 FAILED ($ERRORS fallback patterns)"
|
|
272
|
+
exit 1
|
|
273
|
+
fi
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Gate:** Exit code must be 0
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 8.6 Expert Attribution Check
|
|
281
|
+
|
|
282
|
+
**Purpose:** All KB nodes must have source expert.
|
|
283
|
+
|
|
284
|
+
**Script:**
|
|
285
|
+
```bash
|
|
286
|
+
#!/bin/bash
|
|
287
|
+
# 8.6-attribution-check.sh
|
|
288
|
+
|
|
289
|
+
echo "=== 8.6 Expert Attribution Check ==="
|
|
290
|
+
|
|
291
|
+
MISSING=$(psql "$DATABASE_URL" -t -c "
|
|
292
|
+
SELECT COUNT(*)
|
|
293
|
+
FROM kb_nodes
|
|
294
|
+
WHERE namespace = '$NAMESPACE'
|
|
295
|
+
AND (source_expert IS NULL OR source_expert = '');
|
|
296
|
+
")
|
|
297
|
+
|
|
298
|
+
MISSING=$(echo $MISSING | tr -d ' ')
|
|
299
|
+
|
|
300
|
+
if [ "$MISSING" -gt 0 ]; then
|
|
301
|
+
echo "❌ $MISSING nodes missing expert attribution"
|
|
302
|
+
echo ""
|
|
303
|
+
echo "Nodes without attribution:"
|
|
304
|
+
psql "$DATABASE_URL" -c "
|
|
305
|
+
SELECT id, title
|
|
306
|
+
FROM kb_nodes
|
|
307
|
+
WHERE namespace = '$NAMESPACE'
|
|
308
|
+
AND (source_expert IS NULL OR source_expert = '')
|
|
309
|
+
LIMIT 10;
|
|
310
|
+
"
|
|
311
|
+
exit 1
|
|
312
|
+
else
|
|
313
|
+
echo "✅ All nodes have expert attribution"
|
|
314
|
+
echo "✅ 8.6 PASSED"
|
|
315
|
+
exit 0
|
|
316
|
+
fi
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Gate:** Exit code must be 0
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 8.7 Confidence Score Check
|
|
324
|
+
|
|
325
|
+
**Purpose:** All KB nodes must have confidence scores.
|
|
326
|
+
|
|
327
|
+
**Script:**
|
|
328
|
+
```bash
|
|
329
|
+
#!/bin/bash
|
|
330
|
+
# 8.7-confidence-check.sh
|
|
331
|
+
|
|
332
|
+
echo "=== 8.7 Confidence Score Check ==="
|
|
333
|
+
|
|
334
|
+
MISSING=$(psql "$DATABASE_URL" -t -c "
|
|
335
|
+
SELECT COUNT(*)
|
|
336
|
+
FROM kb_nodes
|
|
337
|
+
WHERE namespace = '$NAMESPACE'
|
|
338
|
+
AND confidence IS NULL;
|
|
339
|
+
")
|
|
340
|
+
|
|
341
|
+
MISSING=$(echo $MISSING | tr -d ' ')
|
|
342
|
+
|
|
343
|
+
if [ "$MISSING" -gt 0 ]; then
|
|
344
|
+
echo "❌ $MISSING nodes missing confidence scores"
|
|
345
|
+
exit 1
|
|
346
|
+
fi
|
|
347
|
+
|
|
348
|
+
AVG=$(psql "$DATABASE_URL" -t -c "
|
|
349
|
+
SELECT ROUND(AVG(confidence)::numeric, 2)
|
|
350
|
+
FROM kb_nodes
|
|
351
|
+
WHERE namespace = '$NAMESPACE';
|
|
352
|
+
")
|
|
353
|
+
|
|
354
|
+
AVG=$(echo $AVG | tr -d ' ')
|
|
355
|
+
|
|
356
|
+
echo "✅ All nodes have confidence scores"
|
|
357
|
+
echo " Average confidence: $AVG"
|
|
358
|
+
|
|
359
|
+
if (( $(echo "$AVG < 0.5" | bc -l) )); then
|
|
360
|
+
echo "⚠️ Average confidence is low (<0.5)"
|
|
361
|
+
fi
|
|
362
|
+
|
|
363
|
+
echo "✅ 8.7 PASSED"
|
|
364
|
+
exit 0
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**Gate:** Exit code must be 0
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 8.8 Gap Logging Verification
|
|
372
|
+
|
|
373
|
+
**Purpose:** Gap detection must be active and working.
|
|
374
|
+
|
|
375
|
+
**Script:**
|
|
376
|
+
```bash
|
|
377
|
+
#!/bin/bash
|
|
378
|
+
# 8.8-gap-logging-check.sh
|
|
379
|
+
|
|
380
|
+
echo "=== 8.8 Gap Logging Verification ==="
|
|
381
|
+
ERRORS=0
|
|
382
|
+
|
|
383
|
+
# Check gap logging function exists in code
|
|
384
|
+
if ! grep -rq "logGap\|log_gap\|recordGap" src/kb/ 2>/dev/null; then
|
|
385
|
+
echo "❌ No gap logging function found in src/kb/"
|
|
386
|
+
ERRORS=$((ERRORS + 1))
|
|
387
|
+
else
|
|
388
|
+
echo "✅ Gap logging function exists"
|
|
389
|
+
fi
|
|
390
|
+
|
|
391
|
+
# Check kb_gaps table exists
|
|
392
|
+
if ! psql "$DATABASE_URL" -c "SELECT 1 FROM kb_gaps LIMIT 1" 2>/dev/null; then
|
|
393
|
+
echo "❌ kb_gaps table does not exist or is inaccessible"
|
|
394
|
+
ERRORS=$((ERRORS + 1))
|
|
395
|
+
else
|
|
396
|
+
echo "✅ kb_gaps table exists"
|
|
397
|
+
fi
|
|
398
|
+
|
|
399
|
+
# Check if gaps are being logged (should have some from testing)
|
|
400
|
+
GAP_COUNT=$(psql "$DATABASE_URL" -t -c "SELECT COUNT(*) FROM kb_gaps WHERE namespace = '$NAMESPACE';" 2>/dev/null | tr -d ' ')
|
|
401
|
+
|
|
402
|
+
if [ -z "$GAP_COUNT" ] || [ "$GAP_COUNT" == "0" ]; then
|
|
403
|
+
echo "⚠️ No gaps logged yet (normal if no queries have failed)"
|
|
404
|
+
else
|
|
405
|
+
echo "✅ $GAP_COUNT gaps logged"
|
|
406
|
+
fi
|
|
407
|
+
|
|
408
|
+
echo ""
|
|
409
|
+
if [ $ERRORS -eq 0 ]; then
|
|
410
|
+
echo "✅ 8.8 PASSED"
|
|
411
|
+
exit 0
|
|
412
|
+
else
|
|
413
|
+
echo "❌ 8.8 FAILED ($ERRORS issues)"
|
|
414
|
+
exit 1
|
|
415
|
+
fi
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**Gate:** Exit code must be 0
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## Master Verification Script
|
|
423
|
+
|
|
424
|
+
Run all 8 sub-phases in sequence:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
#!/bin/bash
|
|
428
|
+
# scripts/verify-all.sh
|
|
429
|
+
|
|
430
|
+
echo "╔═══════════════════════════════════════════════════════════╗"
|
|
431
|
+
echo "║ KB-FIRST PHASE 8: FINAL VERIFICATION ║"
|
|
432
|
+
echo "╚═══════════════════════════════════════════════════════════╝"
|
|
433
|
+
echo ""
|
|
434
|
+
|
|
435
|
+
TOTAL_ERRORS=0
|
|
436
|
+
PASSED=0
|
|
437
|
+
FAILED=0
|
|
438
|
+
|
|
439
|
+
run_check() {
|
|
440
|
+
local name=$1
|
|
441
|
+
local script=$2
|
|
442
|
+
|
|
443
|
+
echo "Running $name..."
|
|
444
|
+
if bash "$script"; then
|
|
445
|
+
PASSED=$((PASSED + 1))
|
|
446
|
+
else
|
|
447
|
+
FAILED=$((FAILED + 1))
|
|
448
|
+
TOTAL_ERRORS=$((TOTAL_ERRORS + 1))
|
|
449
|
+
fi
|
|
450
|
+
echo ""
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
run_check "8.1 Code Scan" "scripts/8.1-code-scan.sh"
|
|
454
|
+
run_check "8.2 Import Verification" "scripts/8.2-import-check.sh"
|
|
455
|
+
run_check "8.3 Source Return Check" "scripts/8.3-source-check.sh"
|
|
456
|
+
run_check "8.4 Startup Verification" "scripts/8.4-startup-check.sh"
|
|
457
|
+
run_check "8.5 Fallback Pattern Check" "scripts/8.5-fallback-check.sh"
|
|
458
|
+
run_check "8.6 Expert Attribution" "scripts/8.6-attribution-check.sh"
|
|
459
|
+
run_check "8.7 Confidence Scores" "scripts/8.7-confidence-check.sh"
|
|
460
|
+
run_check "8.8 Gap Logging" "scripts/8.8-gap-logging-check.sh"
|
|
461
|
+
|
|
462
|
+
echo "╔═══════════════════════════════════════════════════════════╗"
|
|
463
|
+
echo "║ RESULTS ║"
|
|
464
|
+
echo "╠═══════════════════════════════════════════════════════════╣"
|
|
465
|
+
echo "║ Passed: $PASSED/8 ║"
|
|
466
|
+
echo "║ Failed: $FAILED/8 ║"
|
|
467
|
+
echo "╠═══════════════════════════════════════════════════════════╣"
|
|
468
|
+
|
|
469
|
+
if [ $TOTAL_ERRORS -eq 0 ]; then
|
|
470
|
+
echo "║ ✅ ALL CHECKS PASSED - APPLICATION COMPLETE ║"
|
|
471
|
+
echo "╚═══════════════════════════════════════════════════════════╝"
|
|
472
|
+
exit 0
|
|
473
|
+
else
|
|
474
|
+
echo "║ ❌ $TOTAL_ERRORS CHECK(S) FAILED - FIX BEFORE COMPLETION ║"
|
|
475
|
+
echo "╚═══════════════════════════════════════════════════════════╝"
|
|
476
|
+
exit 1
|
|
477
|
+
fi
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Swarm Configuration for Phase 8
|
|
483
|
+
|
|
484
|
+
```yaml
|
|
485
|
+
phase_8_swarm:
|
|
486
|
+
topology: mesh
|
|
487
|
+
strategy: parallel
|
|
488
|
+
maxAgents: 8
|
|
489
|
+
|
|
490
|
+
agents:
|
|
491
|
+
- type: specialist
|
|
492
|
+
name: code-scanner
|
|
493
|
+
task: "8.1"
|
|
494
|
+
script: "scripts/8.1-code-scan.sh"
|
|
495
|
+
|
|
496
|
+
- type: specialist
|
|
497
|
+
name: import-checker
|
|
498
|
+
task: "8.2"
|
|
499
|
+
script: "scripts/8.2-import-check.sh"
|
|
500
|
+
|
|
501
|
+
- type: specialist
|
|
502
|
+
name: source-checker
|
|
503
|
+
task: "8.3"
|
|
504
|
+
script: "scripts/8.3-source-check.sh"
|
|
505
|
+
|
|
506
|
+
- type: specialist
|
|
507
|
+
name: startup-checker
|
|
508
|
+
task: "8.4"
|
|
509
|
+
script: "scripts/8.4-startup-check.sh"
|
|
510
|
+
|
|
511
|
+
- type: specialist
|
|
512
|
+
name: fallback-checker
|
|
513
|
+
task: "8.5"
|
|
514
|
+
script: "scripts/8.5-fallback-check.sh"
|
|
515
|
+
|
|
516
|
+
- type: specialist
|
|
517
|
+
name: attribution-checker
|
|
518
|
+
task: "8.6"
|
|
519
|
+
script: "scripts/8.6-attribution-check.sh"
|
|
520
|
+
|
|
521
|
+
- type: specialist
|
|
522
|
+
name: confidence-checker
|
|
523
|
+
task: "8.7"
|
|
524
|
+
script: "scripts/8.7-confidence-check.sh"
|
|
525
|
+
|
|
526
|
+
- type: specialist
|
|
527
|
+
name: gap-checker
|
|
528
|
+
task: "8.8"
|
|
529
|
+
script: "scripts/8.8-gap-logging-check.sh"
|
|
530
|
+
|
|
531
|
+
parallel_groups:
|
|
532
|
+
- [code-scanner, import-checker, source-checker, startup-checker]
|
|
533
|
+
- [fallback-checker, attribution-checker, confidence-checker, gap-checker]
|
|
534
|
+
|
|
535
|
+
aggregation:
|
|
536
|
+
type: all_must_pass
|
|
537
|
+
on_failure: report_and_halt
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## Exit Criteria
|
|
543
|
+
|
|
544
|
+
All 8 sub-phases must pass:
|
|
545
|
+
|
|
546
|
+
```
|
|
547
|
+
[ ] 8.1 Code Scan: No hardcoded values
|
|
548
|
+
[ ] 8.2 Import Check: All domain files import kb/
|
|
549
|
+
[ ] 8.3 Source Check: All returns have kbSources
|
|
550
|
+
[ ] 8.4 Startup Check: verifyConnection called first
|
|
551
|
+
[ ] 8.5 Fallback Check: No fallback patterns
|
|
552
|
+
[ ] 8.6 Attribution Check: All nodes have experts
|
|
553
|
+
[ ] 8.7 Confidence Check: All nodes have scores
|
|
554
|
+
[ ] 8.8 Gap Logging: Gap detection active
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
**Only mark complete when ALL boxes are checked.**
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## Completion & Delta Report
|
|
562
|
+
|
|
563
|
+
When all checks pass, generate the final delta report:
|
|
564
|
+
|
|
565
|
+
```
|
|
566
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
567
|
+
║ 🎉 KB-FIRST TRANSFORMATION COMPLETE ║
|
|
568
|
+
╠═══════════════════════════════════════════════════════════╣
|
|
569
|
+
║ ║
|
|
570
|
+
║ BEFORE (Phase 0) AFTER (Phase 8) ║
|
|
571
|
+
║ ────────────────── ──────────────── ║
|
|
572
|
+
║ KB Quality: 47 KB Quality: 99 ║
|
|
573
|
+
║ App Compliance: 32 App Compliance: 100 ║
|
|
574
|
+
║ ║
|
|
575
|
+
║ DELTA: +52 KB | +68 App ║
|
|
576
|
+
║ ║
|
|
577
|
+
╠═══════════════════════════════════════════════════════════╣
|
|
578
|
+
║ Phase Completion: ║
|
|
579
|
+
║ ✅ Phase 0: Assessment ║
|
|
580
|
+
║ ✅ Phase 1: Storage ║
|
|
581
|
+
║ ✅ Phase 2: KB Creation (8/8 sub-phases) ║
|
|
582
|
+
║ ✅ Phase 3: Persistence ║
|
|
583
|
+
║ ✅ Phase 4: Visualization ║
|
|
584
|
+
║ ✅ Phase 5: Integration ║
|
|
585
|
+
║ ✅ Phase 6: Scaffold ║
|
|
586
|
+
║ ✅ Phase 7: Build (7/7 sub-phases) ║
|
|
587
|
+
║ ✅ Phase 8: Verification (8/8 sub-phases) ║
|
|
588
|
+
║ ║
|
|
589
|
+
╠═══════════════════════════════════════════════════════════╣
|
|
590
|
+
║ The application now: ║
|
|
591
|
+
║ • Grounds all responses in expert knowledge ║
|
|
592
|
+
║ • Provides full traceability for every answer ║
|
|
593
|
+
║ • Detects and logs knowledge gaps ║
|
|
594
|
+
║ • Cannot function without its knowledge base ║
|
|
595
|
+
║ • Uses appropriate intelligence layer ║
|
|
596
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
597
|
+
```
|