scip-query 0.1.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/IMPROVEMENTS.md +143 -0
- package/PLAN.md +320 -0
- package/README.md +1213 -0
- package/dist/chunk-2QZ23IBN.js +55 -0
- package/dist/chunk-2QZ23IBN.js.map +1 -0
- package/dist/chunk-36OMT7ZJ.js +144 -0
- package/dist/chunk-36OMT7ZJ.js.map +1 -0
- package/dist/chunk-3E2X7RIE.js +101 -0
- package/dist/chunk-3E2X7RIE.js.map +1 -0
- package/dist/chunk-3UOUTZQT.js +45 -0
- package/dist/chunk-3UOUTZQT.js.map +1 -0
- package/dist/chunk-3ZZJVBIO.js +88 -0
- package/dist/chunk-3ZZJVBIO.js.map +1 -0
- package/dist/chunk-4TYLS5XX.js +10 -0
- package/dist/chunk-4TYLS5XX.js.map +1 -0
- package/dist/chunk-5FGUEU7N.js +101 -0
- package/dist/chunk-5FGUEU7N.js.map +1 -0
- package/dist/chunk-5WTJAXY2.js +61 -0
- package/dist/chunk-5WTJAXY2.js.map +1 -0
- package/dist/chunk-6NBLIDF4.js +24 -0
- package/dist/chunk-6NBLIDF4.js.map +1 -0
- package/dist/chunk-6SXADWLW.js +43 -0
- package/dist/chunk-6SXADWLW.js.map +1 -0
- package/dist/chunk-6VJ6Q7IE.js +65 -0
- package/dist/chunk-6VJ6Q7IE.js.map +1 -0
- package/dist/chunk-7OZPA5OO.js +258 -0
- package/dist/chunk-7OZPA5OO.js.map +1 -0
- package/dist/chunk-BEPIEVLR.js +76 -0
- package/dist/chunk-BEPIEVLR.js.map +1 -0
- package/dist/chunk-BFSCMC22.js +42 -0
- package/dist/chunk-BFSCMC22.js.map +1 -0
- package/dist/chunk-BP2ATLK2.js +110 -0
- package/dist/chunk-BP2ATLK2.js.map +1 -0
- package/dist/chunk-CM454WL3.js +114 -0
- package/dist/chunk-CM454WL3.js.map +1 -0
- package/dist/chunk-DCKMSTJ4.js +74 -0
- package/dist/chunk-DCKMSTJ4.js.map +1 -0
- package/dist/chunk-DEZKCZXD.js +40 -0
- package/dist/chunk-DEZKCZXD.js.map +1 -0
- package/dist/chunk-DVWGWHFW.js +99 -0
- package/dist/chunk-DVWGWHFW.js.map +1 -0
- package/dist/chunk-EMDQWNYR.js +102 -0
- package/dist/chunk-EMDQWNYR.js.map +1 -0
- package/dist/chunk-FFSWWE5O.js +33 -0
- package/dist/chunk-FFSWWE5O.js.map +1 -0
- package/dist/chunk-FGXRVW7G.js +73 -0
- package/dist/chunk-FGXRVW7G.js.map +1 -0
- package/dist/chunk-FUHJCHS4.js +158 -0
- package/dist/chunk-FUHJCHS4.js.map +1 -0
- package/dist/chunk-GJFURBEW.js +64 -0
- package/dist/chunk-GJFURBEW.js.map +1 -0
- package/dist/chunk-GTILYBH6.js +102 -0
- package/dist/chunk-GTILYBH6.js.map +1 -0
- package/dist/chunk-JJP7KQND.js +1 -0
- package/dist/chunk-JJP7KQND.js.map +1 -0
- package/dist/chunk-JKP5GH6T.js +213 -0
- package/dist/chunk-JKP5GH6T.js.map +1 -0
- package/dist/chunk-KCBMVQL5.js +38 -0
- package/dist/chunk-KCBMVQL5.js.map +1 -0
- package/dist/chunk-KVSW5KYP.js +78 -0
- package/dist/chunk-KVSW5KYP.js.map +1 -0
- package/dist/chunk-LAWMH22O.js +172 -0
- package/dist/chunk-LAWMH22O.js.map +1 -0
- package/dist/chunk-LB7OS35Q.js +72 -0
- package/dist/chunk-LB7OS35Q.js.map +1 -0
- package/dist/chunk-LUSIFBXO.js +57 -0
- package/dist/chunk-LUSIFBXO.js.map +1 -0
- package/dist/chunk-MBVNHJVN.js +44 -0
- package/dist/chunk-MBVNHJVN.js.map +1 -0
- package/dist/chunk-MGNMHKX3.js +15 -0
- package/dist/chunk-MGNMHKX3.js.map +1 -0
- package/dist/chunk-N5KEREIA.js +41 -0
- package/dist/chunk-N5KEREIA.js.map +1 -0
- package/dist/chunk-NDSQYIWT.js +71 -0
- package/dist/chunk-NDSQYIWT.js.map +1 -0
- package/dist/chunk-NUZ4OMU3.js +28 -0
- package/dist/chunk-NUZ4OMU3.js.map +1 -0
- package/dist/chunk-QOV2R2WT.js +170 -0
- package/dist/chunk-QOV2R2WT.js.map +1 -0
- package/dist/chunk-SEFSL2GF.js +78 -0
- package/dist/chunk-SEFSL2GF.js.map +1 -0
- package/dist/chunk-T6ARFSBZ.js +103 -0
- package/dist/chunk-T6ARFSBZ.js.map +1 -0
- package/dist/chunk-TBP6BICL.js +46 -0
- package/dist/chunk-TBP6BICL.js.map +1 -0
- package/dist/chunk-TDNNOR6D.js +97 -0
- package/dist/chunk-TDNNOR6D.js.map +1 -0
- package/dist/chunk-TSPZOMHC.js +195 -0
- package/dist/chunk-TSPZOMHC.js.map +1 -0
- package/dist/chunk-UNTPVD36.js +55 -0
- package/dist/chunk-UNTPVD36.js.map +1 -0
- package/dist/chunk-VRUJH4BO.js +88 -0
- package/dist/chunk-VRUJH4BO.js.map +1 -0
- package/dist/chunk-VZ7AMAFL.js +76 -0
- package/dist/chunk-VZ7AMAFL.js.map +1 -0
- package/dist/chunk-XFXDXEUN.js +24 -0
- package/dist/chunk-XFXDXEUN.js.map +1 -0
- package/dist/chunk-YZAA4LYG.js +169 -0
- package/dist/chunk-YZAA4LYG.js.map +1 -0
- package/dist/chunk-Z73NYSBZ.js +92 -0
- package/dist/chunk-Z73NYSBZ.js.map +1 -0
- package/dist/chunk-ZJRYBOEE.js +125 -0
- package/dist/chunk-ZJRYBOEE.js.map +1 -0
- package/dist/cli.js +5798 -0
- package/dist/cli.js.map +1 -0
- package/dist/db-BxaevAyc.d.ts +683 -0
- package/dist/index.d.ts +254 -0
- package/dist/index.js +1271 -0
- package/dist/index.js.map +1 -0
- package/dist/postinstall.js +167 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/queries/affected.d.ts +14 -0
- package/dist/queries/affected.js +9 -0
- package/dist/queries/affected.js.map +1 -0
- package/dist/queries/bottlenecks.d.ts +18 -0
- package/dist/queries/bottlenecks.js +8 -0
- package/dist/queries/bottlenecks.js.map +1 -0
- package/dist/queries/by-kind.d.ts +20 -0
- package/dist/queries/by-kind.js +10 -0
- package/dist/queries/by-kind.js.map +1 -0
- package/dist/queries/call-graph.d.ts +13 -0
- package/dist/queries/call-graph.js +9 -0
- package/dist/queries/call-graph.js.map +1 -0
- package/dist/queries/change-surface.d.ts +10 -0
- package/dist/queries/change-surface.js +9 -0
- package/dist/queries/change-surface.js.map +1 -0
- package/dist/queries/clean-signature.d.ts +9 -0
- package/dist/queries/clean-signature.js +7 -0
- package/dist/queries/clean-signature.js.map +1 -0
- package/dist/queries/code.d.ts +17 -0
- package/dist/queries/code.js +9 -0
- package/dist/queries/code.js.map +1 -0
- package/dist/queries/complexity-hotspots.d.ts +19 -0
- package/dist/queries/complexity-hotspots.js +9 -0
- package/dist/queries/complexity-hotspots.js.map +1 -0
- package/dist/queries/complexity.d.ts +13 -0
- package/dist/queries/complexity.js +9 -0
- package/dist/queries/complexity.js.map +1 -0
- package/dist/queries/convergence.d.ts +11 -0
- package/dist/queries/convergence.js +9 -0
- package/dist/queries/convergence.js.map +1 -0
- package/dist/queries/coupling.d.ts +17 -0
- package/dist/queries/coupling.js +9 -0
- package/dist/queries/coupling.js.map +1 -0
- package/dist/queries/cycles.d.ts +16 -0
- package/dist/queries/cycles.js +8 -0
- package/dist/queries/cycles.js.map +1 -0
- package/dist/queries/dataflow.d.ts +19 -0
- package/dist/queries/dataflow.js +9 -0
- package/dist/queries/dataflow.js.map +1 -0
- package/dist/queries/dead.d.ts +10 -0
- package/dist/queries/dead.js +9 -0
- package/dist/queries/dead.js.map +1 -0
- package/dist/queries/deep-chains.d.ts +16 -0
- package/dist/queries/deep-chains.js +8 -0
- package/dist/queries/deep-chains.js.map +1 -0
- package/dist/queries/deps.d.ts +9 -0
- package/dist/queries/deps.js +9 -0
- package/dist/queries/deps.js.map +1 -0
- package/dist/queries/diff-impact.d.ts +13 -0
- package/dist/queries/diff-impact.js +9 -0
- package/dist/queries/diff-impact.js.map +1 -0
- package/dist/queries/doc-coverage.d.ts +14 -0
- package/dist/queries/doc-coverage.js +8 -0
- package/dist/queries/doc-coverage.js.map +1 -0
- package/dist/queries/drift.d.ts +25 -0
- package/dist/queries/drift.js +8 -0
- package/dist/queries/drift.js.map +1 -0
- package/dist/queries/extract-candidates.d.ts +25 -0
- package/dist/queries/extract-candidates.js +9 -0
- package/dist/queries/extract-candidates.js.map +1 -0
- package/dist/queries/fan.d.ts +29 -0
- package/dist/queries/fan.js +14 -0
- package/dist/queries/fan.js.map +1 -0
- package/dist/queries/files.d.ts +6 -0
- package/dist/queries/files.js +7 -0
- package/dist/queries/files.js.map +1 -0
- package/dist/queries/health.d.ts +18 -0
- package/dist/queries/health.js +21 -0
- package/dist/queries/health.js.map +1 -0
- package/dist/queries/hierarchy.d.ts +13 -0
- package/dist/queries/hierarchy.js +8 -0
- package/dist/queries/hierarchy.js.map +1 -0
- package/dist/queries/hotspots.d.ts +13 -0
- package/dist/queries/hotspots.js +8 -0
- package/dist/queries/hotspots.js.map +1 -0
- package/dist/queries/imports.d.ts +19 -0
- package/dist/queries/imports.js +12 -0
- package/dist/queries/imports.js.map +1 -0
- package/dist/queries/index.d.ts +47 -0
- package/dist/queries/index.js +207 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/isolated.d.ts +14 -0
- package/dist/queries/isolated.js +9 -0
- package/dist/queries/isolated.js.map +1 -0
- package/dist/queries/members.d.ts +10 -0
- package/dist/queries/members.js +8 -0
- package/dist/queries/members.js.map +1 -0
- package/dist/queries/methods.d.ts +6 -0
- package/dist/queries/methods.js +8 -0
- package/dist/queries/methods.js.map +1 -0
- package/dist/queries/outline.d.ts +10 -0
- package/dist/queries/outline.js +8 -0
- package/dist/queries/outline.js.map +1 -0
- package/dist/queries/passthrough-candidates.d.ts +18 -0
- package/dist/queries/passthrough-candidates.js +9 -0
- package/dist/queries/passthrough-candidates.js.map +1 -0
- package/dist/queries/redundant-reexports.d.ts +22 -0
- package/dist/queries/redundant-reexports.js +8 -0
- package/dist/queries/redundant-reexports.js.map +1 -0
- package/dist/queries/refs.d.ts +6 -0
- package/dist/queries/refs.js +7 -0
- package/dist/queries/refs.js.map +1 -0
- package/dist/queries/similar-chains.d.ts +29 -0
- package/dist/queries/similar-chains.js +8 -0
- package/dist/queries/similar-chains.js.map +1 -0
- package/dist/queries/similar-files.d.ts +19 -0
- package/dist/queries/similar-files.js +8 -0
- package/dist/queries/similar-files.js.map +1 -0
- package/dist/queries/similar-signatures.d.ts +21 -0
- package/dist/queries/similar-signatures.js +8 -0
- package/dist/queries/similar-signatures.js.map +1 -0
- package/dist/queries/similar.d.ts +34 -0
- package/dist/queries/similar.js +11 -0
- package/dist/queries/similar.js.map +1 -0
- package/dist/queries/slice.d.ts +21 -0
- package/dist/queries/slice.js +9 -0
- package/dist/queries/slice.js.map +1 -0
- package/dist/queries/stale-abstractions.d.ts +18 -0
- package/dist/queries/stale-abstractions.js +9 -0
- package/dist/queries/stale-abstractions.js.map +1 -0
- package/dist/queries/stats.d.ts +6 -0
- package/dist/queries/stats.js +7 -0
- package/dist/queries/stats.js.map +1 -0
- package/dist/queries/surface.d.ts +7 -0
- package/dist/queries/surface.js +8 -0
- package/dist/queries/surface.js.map +1 -0
- package/dist/queries/symbols.d.ts +6 -0
- package/dist/queries/symbols.js +9 -0
- package/dist/queries/symbols.js.map +1 -0
- package/dist/queries/system.d.ts +7 -0
- package/dist/queries/system.js +9 -0
- package/dist/queries/system.js.map +1 -0
- package/dist/queries/test-coverage.d.ts +22 -0
- package/dist/queries/test-coverage.js +11 -0
- package/dist/queries/test-coverage.js.map +1 -0
- package/dist/queries/trace.d.ts +6 -0
- package/dist/queries/trace.js +8 -0
- package/dist/queries/trace.js.map +1 -0
- package/dist/queries/wrapper-candidates.d.ts +17 -0
- package/dist/queries/wrapper-candidates.js +9 -0
- package/dist/queries/wrapper-candidates.js.map +1 -0
- package/dist/reindex-worker.js +368 -0
- package/dist/reindex-worker.js.map +1 -0
- package/docs/AGENT_GUIDE.md +359 -0
- package/package.json +70 -0
- package/reports/debloat/2026-04-10-scip-query-self-audit.md +161 -0
- package/skills/concrete-plan/SKILL.md +318 -0
- package/skills/scip-debloat/SKILL.md +413 -0
- package/skills/scip-explore/SKILL.md +235 -0
- package/skills/scip-verify/SKILL.md +323 -0
- package/src/cli.ts +1480 -0
- package/src/config.ts +117 -0
- package/src/db.ts +127 -0
- package/src/gitignore-filter.ts +143 -0
- package/src/index.ts +11 -0
- package/src/postinstall.ts +8 -0
- package/src/queries/affected.ts +86 -0
- package/src/queries/bottlenecks.ts +67 -0
- package/src/queries/by-kind.ts +204 -0
- package/src/queries/call-graph.ts +66 -0
- package/src/queries/change-surface.ts +110 -0
- package/src/queries/clean-signature.ts +22 -0
- package/src/queries/code.ts +101 -0
- package/src/queries/complexity-hotspots.ts +119 -0
- package/src/queries/complexity.ts +152 -0
- package/src/queries/convergence.ts +82 -0
- package/src/queries/coupling.ts +99 -0
- package/src/queries/cycles.ts +78 -0
- package/src/queries/dataflow.ts +128 -0
- package/src/queries/dead.ts +122 -0
- package/src/queries/deep-chains.ts +59 -0
- package/src/queries/deps.ts +46 -0
- package/src/queries/diff-impact.ts +204 -0
- package/src/queries/doc-coverage.ts +86 -0
- package/src/queries/drift.ts +224 -0
- package/src/queries/extract-candidates.ts +167 -0
- package/src/queries/fan.ts +148 -0
- package/src/queries/files.ts +16 -0
- package/src/queries/health.ts +324 -0
- package/src/queries/hierarchy.ts +49 -0
- package/src/queries/hotspots.ts +53 -0
- package/src/queries/imports.ts +95 -0
- package/src/queries/index.ts +45 -0
- package/src/queries/isolated.ts +67 -0
- package/src/queries/members.ts +54 -0
- package/src/queries/methods.ts +27 -0
- package/src/queries/outline.ts +52 -0
- package/src/queries/passthrough-candidates.ts +94 -0
- package/src/queries/redundant-reexports.ts +170 -0
- package/src/queries/refs.ts +27 -0
- package/src/queries/similar-chains.ts +314 -0
- package/src/queries/similar-files.ts +140 -0
- package/src/queries/similar-signatures.ts +151 -0
- package/src/queries/similar.ts +305 -0
- package/src/queries/slice.ts +154 -0
- package/src/queries/stale-abstractions.ts +82 -0
- package/src/queries/stats.ts +22 -0
- package/src/queries/surface.ts +34 -0
- package/src/queries/symbols.ts +39 -0
- package/src/queries/system.ts +86 -0
- package/src/queries/test-coverage.ts +106 -0
- package/src/queries/trace.ts +55 -0
- package/src/queries/wrapper-candidates.ts +112 -0
- package/src/query-support.ts +226 -0
- package/src/reindex/detect.ts +58 -0
- package/src/reindex/index.ts +153 -0
- package/src/reindex/indexers.ts +220 -0
- package/src/reindex/install.ts +125 -0
- package/src/reindex-worker.ts +35 -0
- package/src/setup.ts +202 -0
- package/src/symbol-parser.ts +278 -0
- package/src/types.ts +654 -0
- package/src/watch.ts +274 -0
- package/tests/gitignore-filter.test.ts +48 -0
- package/tests/queries.test.ts +300 -0
- package/tests/symbol-parser.test.ts +157 -0
- package/tsconfig.json +20 -0
- package/tsup.config.ts +40 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-verify
|
|
3
|
+
description: Post-implementation verification using scip-query. Confirms changes are wired correctly — no broken references, no new cycles, no orphaned code, no test gaps, no health regressions. Run after making changes and before committing.
|
|
4
|
+
allowed-tools: [Bash, Write, Edit, Glob, Agent, TaskCreate, TaskUpdate, TaskGet, TaskList]
|
|
5
|
+
keywords: [verify, check, validate, wire, confirm, post-implementation, review, regression, health, test]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Post-Implementation Verification with scip-query
|
|
9
|
+
|
|
10
|
+
You are verifying that a code change was implemented correctly. Every check must use `scip-query` to confirm the change didn't break references, introduce cycles, orphan code, or miss test coverage. This is the "measure twice" step — run it after making changes, before committing.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
- "Verify my changes"
|
|
17
|
+
- "Check if everything is wired correctly"
|
|
18
|
+
- "Did I break anything?"
|
|
19
|
+
- "Is it safe to commit?"
|
|
20
|
+
- "Run a post-implementation check"
|
|
21
|
+
- After completing a `/concrete-plan` implementation
|
|
22
|
+
- Before any commit of non-trivial changes
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Hard Rules
|
|
27
|
+
|
|
28
|
+
1. **Reindex first.** Always run `scip-query reindex` before verification. You're checking the current code, not the old index.
|
|
29
|
+
|
|
30
|
+
2. **Every check must produce evidence.** Don't say "looks good." Say "scip-query cycles returned 0 cycles, scip-query diff-impact shows 3 changed symbols affecting 12 files, all 3 have test coverage."
|
|
31
|
+
|
|
32
|
+
3. **Fail loudly.** If any check fails, stop and report the exact failure with the scip-query command output. Do not proceed to "looks mostly fine."
|
|
33
|
+
|
|
34
|
+
4. **Compare against baseline.** If a health score or finding count was recorded before the change, compare against it. A regression is a finding.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Symbol Lookup Tips
|
|
39
|
+
|
|
40
|
+
scip-query accepts partial symbol names — you don't need the full SCIP symbol path. These all work:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
scip-query code processVegaMention # just the function name
|
|
44
|
+
scip-query call-graph ChatService # just the class name
|
|
45
|
+
scip-query trace getActiveInferenceConfig # any unique substring
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Avoid parentheses** — `()` causes shell parse errors in zsh/bash:
|
|
49
|
+
```bash
|
|
50
|
+
# BAD — shell tries to execute a subshell
|
|
51
|
+
scip-query code processVegaMention()
|
|
52
|
+
|
|
53
|
+
# GOOD — no parens needed, scip-query strips them internally
|
|
54
|
+
scip-query code processVegaMention
|
|
55
|
+
|
|
56
|
+
# ALSO GOOD — single quotes protect special characters
|
|
57
|
+
scip-query code 'processVegaMention'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Read source by file + line range** when the symbol name is ambiguous:
|
|
61
|
+
```bash
|
|
62
|
+
scip-query code 'src/modules/chat/chat.service.ts:100-200'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**If "Symbol not found":**
|
|
66
|
+
1. Try a shorter/simpler name — `login` instead of `AuthService:login`
|
|
67
|
+
2. Try `scip-query symbols <file>` to see what symbols exist in the file
|
|
68
|
+
3. Try `scip-query trace <name>` which uses a different lookup path
|
|
69
|
+
4. Use the `file:line-line` syntax for `code` if you know the location
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## The 8 Verification Checks
|
|
74
|
+
|
|
75
|
+
Run every one of these. Each catches a different class of implementation error.
|
|
76
|
+
|
|
77
|
+
### Check 1: Diff Impact Assessment
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
scip-query reindex
|
|
81
|
+
scip-query diff-impact
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**What you're checking:** Which symbols changed, how many consumer files are affected, and whether test coverage exists for changed symbols.
|
|
85
|
+
|
|
86
|
+
**Pass criteria:**
|
|
87
|
+
- Every changed symbol is intentional (no accidental modifications)
|
|
88
|
+
- The number of affected consumer files matches expectations
|
|
89
|
+
- Changed symbols have test references (or test gaps are acknowledged)
|
|
90
|
+
|
|
91
|
+
**Fail if:** Unexpected symbols appear in the diff, or the affected file count is much larger than expected (blast radius exceeded plan).
|
|
92
|
+
|
|
93
|
+
### Check 2: No New Cycles
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
scip-query cycles
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**What you're checking:** The change didn't introduce a circular dependency.
|
|
100
|
+
|
|
101
|
+
**Pass criteria:** Zero cycles, OR the same cycles that existed before the change.
|
|
102
|
+
|
|
103
|
+
**Fail if:** New cycle(s) appear. Report the full cycle path.
|
|
104
|
+
|
|
105
|
+
### Check 3: No New Dead Code
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
scip-query dead --min-loc 5
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**What you're checking:** The change didn't orphan existing code. If you renamed a function, did you update all callers? If you moved a module, did you update all imports?
|
|
112
|
+
|
|
113
|
+
**Pass criteria:** No new dead symbols compared to before the change. Existing dead code doesn't count.
|
|
114
|
+
|
|
115
|
+
**Fail if:** A symbol that was alive before the change is now dead. This means something was disconnected.
|
|
116
|
+
|
|
117
|
+
### Check 4: No New Isolated Symbols
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
scip-query isolated --min-loc 3
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**What you're checking:** The change didn't completely disconnect a symbol from the graph.
|
|
124
|
+
|
|
125
|
+
**Pass criteria:** No new isolated symbols.
|
|
126
|
+
|
|
127
|
+
**Fail if:** New isolated symbol(s) appear — something got orphaned.
|
|
128
|
+
|
|
129
|
+
### Check 5: References Intact
|
|
130
|
+
|
|
131
|
+
For each symbol that was modified (from diff-impact), verify it's still referenced by the expected consumers:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
scip-query refs <changed-symbol>
|
|
135
|
+
scip-query fan-in <changed-symbol>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**What you're checking:** Consumers of modified symbols still reference them. If you changed a function signature, callers should still compile and reference it.
|
|
139
|
+
|
|
140
|
+
**Pass criteria:** Fan-in count for each changed symbol is the same or higher than before.
|
|
141
|
+
|
|
142
|
+
**Fail if:** A changed symbol's fan-in dropped — a consumer was disconnected.
|
|
143
|
+
|
|
144
|
+
### Check 6: Test Coverage for Changes
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
scip-query test-coverage <changed-symbol>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
For each changed symbol, verify test files reference it.
|
|
151
|
+
|
|
152
|
+
**Pass criteria:** Every changed symbol is referenced by at least one test file.
|
|
153
|
+
|
|
154
|
+
**Fail if:** Changed symbols with zero test references. Report which ones need tests.
|
|
155
|
+
|
|
156
|
+
### Check 7: Change Surface Risk Check
|
|
157
|
+
|
|
158
|
+
For each modified file:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
scip-query change-surface <modified-file>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**What you're checking:** High-risk symbols in modified files (high consumer count + no tests).
|
|
165
|
+
|
|
166
|
+
**Pass criteria:** No HIGH RISK symbols, or all high-risk symbols were intentionally modified.
|
|
167
|
+
|
|
168
|
+
**Fail if:** A HIGH RISK symbol was modified without test coverage.
|
|
169
|
+
|
|
170
|
+
### Check 8: Health Score
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
scip-query health
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**What you're checking:** The overall codebase health didn't regress.
|
|
177
|
+
|
|
178
|
+
**Pass criteria:** Health score is the same or higher than before the change. If it dropped, every finding that increased must be explained.
|
|
179
|
+
|
|
180
|
+
**Fail if:** Health score dropped by more than 5 points without explanation.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Verification Workflow
|
|
185
|
+
|
|
186
|
+
### Phase 1: Reindex and Assess Impact
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
scip-query reindex
|
|
190
|
+
scip-query diff-impact
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Record: changed files, changed symbols, affected consumers, test coverage %.
|
|
194
|
+
|
|
195
|
+
### Phase 2: Structural Checks (parallel)
|
|
196
|
+
|
|
197
|
+
Run checks 2-4 simultaneously — they're independent:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
scip-query cycles
|
|
201
|
+
scip-query dead --min-loc 5
|
|
202
|
+
scip-query isolated --min-loc 3
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Phase 3: Per-Symbol Checks
|
|
206
|
+
|
|
207
|
+
For each changed symbol from diff-impact:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
scip-query refs <symbol>
|
|
211
|
+
scip-query fan-in <symbol>
|
|
212
|
+
scip-query test-coverage <symbol>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Phase 4: Per-File Checks
|
|
216
|
+
|
|
217
|
+
For each modified file:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
scip-query change-surface <file>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Phase 5: Health Comparison
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
scip-query health
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Compare against the pre-change score.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Output Format
|
|
234
|
+
|
|
235
|
+
The verification report is structured as:
|
|
236
|
+
|
|
237
|
+
```markdown
|
|
238
|
+
# Verification Report
|
|
239
|
+
|
|
240
|
+
**Date:** YYYY-MM-DD
|
|
241
|
+
**Change:** [description]
|
|
242
|
+
**Pre-change health:** N/100
|
|
243
|
+
**Post-change health:** N/100
|
|
244
|
+
|
|
245
|
+
## Diff Impact
|
|
246
|
+
- Changed files: N
|
|
247
|
+
- Changed symbols: N
|
|
248
|
+
- Affected consumer files: N
|
|
249
|
+
- Test coverage: N%
|
|
250
|
+
|
|
251
|
+
## Check Results
|
|
252
|
+
|
|
253
|
+
| # | Check | Result | Evidence |
|
|
254
|
+
|---|---|---|---|
|
|
255
|
+
| 1 | Diff impact | PASS/FAIL | [summary] |
|
|
256
|
+
| 2 | No new cycles | PASS/FAIL | [count] |
|
|
257
|
+
| 3 | No new dead code | PASS/FAIL | [count] |
|
|
258
|
+
| 4 | No new isolated | PASS/FAIL | [count] |
|
|
259
|
+
| 5 | References intact | PASS/FAIL | [fan-in changes] |
|
|
260
|
+
| 6 | Test coverage | PASS/FAIL | [uncovered symbols] |
|
|
261
|
+
| 7 | Risk assessment | PASS/FAIL | [high-risk symbols] |
|
|
262
|
+
| 8 | Health score | PASS/FAIL | [score delta] |
|
|
263
|
+
|
|
264
|
+
## Failures
|
|
265
|
+
[Detailed explanation of any failures with scip-query output]
|
|
266
|
+
|
|
267
|
+
## Verdict
|
|
268
|
+
PASS — safe to commit
|
|
269
|
+
FAIL — [list what needs fixing before commit]
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Using with /concrete-plan
|
|
275
|
+
|
|
276
|
+
The ideal workflow:
|
|
277
|
+
|
|
278
|
+
1. **Before:** Run `/concrete-plan` to design the change with full scip-query evidence
|
|
279
|
+
2. **During:** Implement the plan
|
|
280
|
+
3. **After:** Run `/scip-verify` to confirm the implementation matches the plan
|
|
281
|
+
|
|
282
|
+
The verification report should reference the original plan's blast radius predictions and confirm they were accurate.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Subagent Briefing Template
|
|
287
|
+
|
|
288
|
+
When parallelizing verification checks:
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
## Task: Run verification check [N]
|
|
292
|
+
|
|
293
|
+
You are verifying a code change using scip-query. First run `scip-query reindex`.
|
|
294
|
+
|
|
295
|
+
Run the following command:
|
|
296
|
+
[specific scip-query command]
|
|
297
|
+
|
|
298
|
+
Report:
|
|
299
|
+
1. The exact command output
|
|
300
|
+
2. Whether it PASSES or FAILS the criteria: [specific criteria]
|
|
301
|
+
3. If FAIL: exactly what went wrong and which symbols/files are affected
|
|
302
|
+
|
|
303
|
+
Do NOT use grep, rg, or Read. Use only scip-query commands.
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## scip-query Quick Reference
|
|
309
|
+
|
|
310
|
+
| Check | Command |
|
|
311
|
+
|---|---|
|
|
312
|
+
| Reindex | `scip-query reindex` |
|
|
313
|
+
| Diff impact | `scip-query diff-impact` |
|
|
314
|
+
| Cycles | `scip-query cycles` |
|
|
315
|
+
| Dead code | `scip-query dead --min-loc 5` |
|
|
316
|
+
| Isolated | `scip-query isolated --min-loc 3` |
|
|
317
|
+
| References | `scip-query refs <symbol>` |
|
|
318
|
+
| Fan-in | `scip-query fan-in <symbol>` |
|
|
319
|
+
| Test coverage | `scip-query test-coverage <symbol>` |
|
|
320
|
+
| Change surface | `scip-query change-surface <file>` |
|
|
321
|
+
| Health | `scip-query health` |
|
|
322
|
+
| Full blast radius | `scip-query affected <symbol>` |
|
|
323
|
+
| Read source | `scip-query code <symbol>` |
|