scip-query 0.10.1 → 0.10.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/README.md +2 -2
- package/dist/augment-vue-worker.js +1 -1
- package/dist/{chunk-24PFLKFK.js → chunk-3KLLFNT4.js} +2 -2
- package/dist/{chunk-UIWAZ2NT.js → chunk-3UVJJ6Z7.js} +1 -1
- package/dist/chunk-3UW7VM4H.js +62 -0
- package/dist/chunk-3ZYF3ELZ.js +2 -0
- package/dist/{chunk-6YKJSETN.js → chunk-47UA45TU.js} +2 -2
- package/dist/{chunk-5VB3WU7K.js → chunk-4ZUJJRWT.js} +2 -2
- package/dist/chunk-5B53WB6E.js +4 -0
- package/dist/{chunk-LWPEZ4FP.js → chunk-5FOPAXWY.js} +2 -2
- package/dist/{chunk-CCB45WDY.js → chunk-5M4TYWVI.js} +2 -2
- package/dist/{chunk-PV4CEDIL.js → chunk-5QJXH6ZL.js} +5 -5
- package/dist/{chunk-NN3O7TPH.js → chunk-64MNV6AB.js} +1 -1
- package/dist/{chunk-LWWZBABT.js → chunk-77YBOOYT.js} +2 -2
- package/dist/chunk-7KCSELEV.js +2 -0
- package/dist/{chunk-GZXXBDJA.js → chunk-7OHWPJ5N.js} +2 -2
- package/dist/{chunk-BJ7OHKB5.js → chunk-7S5E7KWT.js} +1 -1
- package/dist/chunk-A3VNUGKJ.js +2 -0
- package/dist/{chunk-CMGOXDVP.js → chunk-A4L36SZS.js} +2 -2
- package/dist/{chunk-5D3BT4B4.js → chunk-AUVBR62P.js} +2 -2
- package/dist/chunk-AW4N6MGC.js +18 -0
- package/dist/{chunk-65UWNXEH.js → chunk-B6MJ5VQV.js} +2 -2
- package/dist/chunk-BKDXBJDQ.js +2 -0
- package/dist/{chunk-WZVTADY7.js → chunk-C2QSK7E7.js} +1 -1
- package/dist/chunk-C3MZZ2ZN.js +2 -0
- package/dist/{chunk-GTNPPGZJ.js → chunk-CAWSSEVM.js} +2 -2
- package/dist/chunk-CFL2CNIF.js +10 -0
- package/dist/{chunk-E55WCTLH.js → chunk-CJJP64OC.js} +2 -2
- package/dist/chunk-CNTEQMHA.js +2 -0
- package/dist/{chunk-ADKQX2OY.js → chunk-CRU42NJU.js} +2 -2
- package/dist/chunk-CSWZFD46.js +2 -0
- package/dist/{chunk-QOFKVNFE.js → chunk-CTCAF3YA.js} +2 -2
- package/dist/{chunk-YVQUQIBM.js → chunk-D322LMSA.js} +2 -2
- package/dist/{chunk-IJYWCB57.js → chunk-DAI74TJU.js} +2 -2
- package/dist/chunk-DE7MA6OD.js +3 -0
- package/dist/chunk-DJMK4DBL.js +2 -0
- package/dist/chunk-DRAZH77R.js +7 -0
- package/dist/{chunk-FVX4GEAC.js → chunk-E44ZMVNA.js} +2 -2
- package/dist/{chunk-MESUJJVQ.js → chunk-E7KERP7E.js} +2 -2
- package/dist/{chunk-YIE5FZAF.js → chunk-EOZIZWW4.js} +2 -2
- package/dist/{chunk-XGGTESMN.js → chunk-ERHOS6AW.js} +2 -2
- package/dist/{chunk-5HDYAOSF.js → chunk-ESG4HBEF.js} +2 -2
- package/dist/{chunk-HCQ7J2N5.js → chunk-EWC3UK4V.js} +3 -3
- package/dist/chunk-FGCL6NDB.js +8 -0
- package/dist/chunk-FIB4JPEX.js +2 -0
- package/dist/chunk-FNRPGGVI.js +2 -0
- package/dist/{chunk-QUKZ77A6.js → chunk-FOQHUKNZ.js} +2 -2
- package/dist/chunk-FPMVCDIJ.js +2 -0
- package/dist/{chunk-QH5GTVVB.js → chunk-FUPDW5AC.js} +2 -2
- package/dist/{chunk-B3HMRQDA.js → chunk-G3WGZU5Q.js} +2 -2
- package/dist/{chunk-TUAPDKBI.js → chunk-GS33KGAY.js} +2 -2
- package/dist/{chunk-623UQCVG.js → chunk-GZCQTZLK.js} +2 -2
- package/dist/{chunk-SA6B3EGD.js → chunk-HVTYSC26.js} +2 -2
- package/dist/{chunk-R7S3UCDR.js → chunk-ICXVNWMI.js} +2 -2
- package/dist/chunk-JM72FNGA.js +2 -0
- package/dist/{chunk-DRU74YUM.js → chunk-KPHKX4LP.js} +1 -1
- package/dist/{chunk-YYCQQBMG.js → chunk-LPLGJ4HO.js} +2 -2
- package/dist/chunk-MHK7Z53U.js +2 -0
- package/dist/chunk-MHTDOFV7.js +5 -0
- package/dist/chunk-MUULWXSJ.js +2 -0
- package/dist/chunk-MZ7APUFN.js +3 -0
- package/dist/{chunk-LYS4SMAQ.js → chunk-NNDYO2DX.js} +2 -2
- package/dist/{chunk-ATGRITZP.js → chunk-NP5HYVLX.js} +4 -4
- package/dist/{chunk-MHAQXOZY.js → chunk-NVFERV4U.js} +2 -2
- package/dist/{chunk-LWYIGRHR.js → chunk-NXIAHE7F.js} +1 -1
- package/dist/chunk-O3OKSF6O.js +2 -0
- package/dist/chunk-O4L4AB3T.js +2 -0
- package/dist/{chunk-TMS4JPWY.js → chunk-OBBDKQAG.js} +2 -2
- package/dist/chunk-OLD6PBU6.js +7 -0
- package/dist/{chunk-5BZOSICN.js → chunk-PFOCOG57.js} +1 -1
- package/dist/{chunk-CFLYMEUS.js → chunk-PVZMPG5I.js} +1 -1
- package/dist/{chunk-T67R7V5I.js → chunk-QLNGUWR7.js} +2 -2
- package/dist/chunk-QSXQT3NE.js +2 -0
- package/dist/{chunk-6TWFT4Y5.js → chunk-QVCCLDZI.js} +2 -2
- package/dist/{chunk-PNN3D4BE.js → chunk-RHTJBYZ5.js} +2 -2
- package/dist/chunk-SPE4YCOT.js +7 -0
- package/dist/{chunk-4N7LFYSD.js → chunk-TM6GVHA6.js} +2 -2
- package/dist/chunk-TO54DY4O.js +2 -0
- package/dist/{chunk-HQHFMPLJ.js → chunk-UMNENNTX.js} +2 -2
- package/dist/chunk-UNJG7P2I.js +2 -0
- package/dist/{chunk-TKDJQ2WD.js → chunk-UUBMFL3F.js} +1 -1
- package/dist/chunk-VAA5FFIW.js +2 -0
- package/dist/chunk-WDUTG2ZR.js +4 -0
- package/dist/chunk-X7ZY6FFF.js +4 -0
- package/dist/{chunk-RNLUCQJB.js → chunk-YQH353VA.js} +2 -2
- package/dist/{chunk-44JOJLMO.js → chunk-YTR4CO5S.js} +2 -2
- package/dist/chunk-YUOAAR24.js +2 -0
- package/dist/{chunk-ADTG377O.js → chunk-YYD245WG.js} +2 -2
- package/dist/{chunk-I6PTB2CM.js → chunk-Z4VHYJ5U.js} +2 -2
- package/dist/chunk-ZFMPHDAT.js +4 -0
- package/dist/chunk-ZQLO2SCU.js +6 -0
- package/dist/chunk-ZSLT7NWQ.js +61 -0
- package/dist/cli.js +242 -225
- package/dist/{config-types-Bok4jrO3.d.ts → config-types-Bj4sh28g.d.ts} +8 -0
- package/dist/{db-BkFlkzI3.d.ts → db-CTarohbZ.d.ts} +1 -1
- package/dist/git-history-Dao3_Pu9.d.ts +12 -0
- package/dist/{health-CbGMdRPg.d.ts → health-Bx0x1HAG.d.ts} +23 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/postinstall.js +1 -1
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/bottlenecks.d.ts +6 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +2 -2
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -2
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +2 -2
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +37 -3
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +2 -2
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.d.ts +2 -2
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +2 -2
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/convergence.d.ts +2 -2
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.d.ts +6 -2
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.d.ts +2 -2
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.d.ts +2 -2
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +10 -3
- package/dist/queries/dead.js +1 -1
- package/dist/queries/deep-chains.d.ts +6 -2
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/deps.d.ts +2 -2
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-gate.d.ts +48 -3
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +20 -3
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +10 -3
- package/dist/queries/drift.js +1 -1
- package/dist/queries/extract-candidates.d.ts +11 -3
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.d.ts +2 -2
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.d.ts +2 -2
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.d.ts +3 -3
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.d.ts +2 -2
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.d.ts +2 -2
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +2 -2
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +14 -3
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +17 -15
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.d.ts +2 -2
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.d.ts +51 -0
- package/dist/queries/locality-candidates.js +2 -0
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.d.ts +2 -2
- package/dist/queries/methods.js +1 -1
- package/dist/queries/outline.d.ts +2 -2
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +8 -3
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +4 -2
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +2 -2
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +9 -3
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +9 -3
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.d.ts +25 -3
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +7 -3
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +2 -2
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +2 -2
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.d.ts +2 -2
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.d.ts +2 -2
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.d.ts +2 -2
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +16 -3
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.d.ts +10 -3
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/stats.d.ts +2 -2
- package/dist/queries/stats.js +1 -1
- package/dist/queries/surface.d.ts +2 -2
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.d.ts +2 -2
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +2 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/trace.d.ts +2 -2
- package/dist/queries/trace.js +1 -1
- package/dist/queries/unused-imports.d.ts +4 -0
- package/dist/queries/unused-imports.js +2 -0
- package/dist/queries/unused-params.d.ts +2 -2
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/vue-component-duplicates.d.ts +2 -2
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +9 -3
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.d.ts +9 -3
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +6 -3
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +1 -1
- package/dist/reindex.d.ts +1 -1
- package/dist/reindex.js +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +2 -2
- package/docs/COMMAND_REFERENCE.md +3 -2
- package/docs/analyzer-inventory.md +162 -0
- package/docs/analyzer-validation-ledger.md +262 -0
- package/docs/analyzer-validation-protocol.md +192 -0
- package/docs/locality-analyzer-design.md +193 -0
- package/package.json +14 -3
- package/skills/scip-directory-architecture/SKILL.md +178 -0
- package/skills/scip-maintainability/SKILL.md +1 -1
- package/skills/scip-query/SKILL.md +2 -1
- package/skills/scip-query-setup/SKILL.md +118 -0
- package/skills/scip-react-maintainability/SKILL.md +1 -1
- package/skills/scip-vue-maintainability/SKILL.md +1 -1
- package/dist/chunk-23FVN4Y5.js +0 -2
- package/dist/chunk-27KPKLRJ.js +0 -7
- package/dist/chunk-2NLK4INB.js +0 -2
- package/dist/chunk-2XKAMW6B.js +0 -61
- package/dist/chunk-332L7SRO.js +0 -2
- package/dist/chunk-4EAANIWC.js +0 -2
- package/dist/chunk-5ALI77D7.js +0 -3
- package/dist/chunk-5IDEQEM4.js +0 -4
- package/dist/chunk-62NMBOA5.js +0 -2
- package/dist/chunk-64LH2QUP.js +0 -62
- package/dist/chunk-6U4EODW3.js +0 -2
- package/dist/chunk-A2GVUCZR.js +0 -8
- package/dist/chunk-DBIG4QAJ.js +0 -2
- package/dist/chunk-DMLPJ75B.js +0 -2
- package/dist/chunk-DTERBKUE.js +0 -7
- package/dist/chunk-F4PKYBQB.js +0 -2
- package/dist/chunk-JTRY2YRJ.js +0 -2
- package/dist/chunk-L77GXANO.js +0 -6
- package/dist/chunk-LT6GJ27X.js +0 -10
- package/dist/chunk-LUBKUISI.js +0 -2
- package/dist/chunk-LVYXX7ZW.js +0 -2
- package/dist/chunk-LXM7AHQG.js +0 -4
- package/dist/chunk-LY6NRJPJ.js +0 -2
- package/dist/chunk-N2T2GPYQ.js +0 -2
- package/dist/chunk-OB6PEVI3.js +0 -2
- package/dist/chunk-R42LZMLX.js +0 -2
- package/dist/chunk-RGDUIMNE.js +0 -3
- package/dist/chunk-RYBMW2EN.js +0 -2
- package/dist/chunk-TTGWDUJ4.js +0 -5
- package/dist/chunk-UVK3SL4Z.js +0 -2
- package/dist/chunk-W3PQRAI4.js +0 -2
- package/dist/chunk-WWFBDM5Y.js +0 -2
- package/dist/chunk-Y33GRQK6.js +0 -18
- package/dist/chunk-YISMWW66.js +0 -7
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Analyzer Inventory and Action-Tier Review
|
|
2
|
+
|
|
3
|
+
An analyzer in this project is a query or command-backed program that examines repository evidence such as the SCIP graph, source text, AST profiles, git history, docs, or a diff, and returns a structured answer about code health, change risk, reuse, or navigation.
|
|
4
|
+
|
|
5
|
+
A finding is an analyzer result that names a concrete codebase location, relationship, or diff condition as worth attention. Its defining role is to turn raw evidence into a maintainer-facing claim.
|
|
6
|
+
|
|
7
|
+
The useful product split is not the same as evidence quality. Evidence quality says how the claim was obtained: graph fact, semantic provider, source heuristic, change graph, or baseline. Action tier says how strongly the claim justifies a repair without broader product or architecture judgment.
|
|
8
|
+
|
|
9
|
+
Companion docs:
|
|
10
|
+
|
|
11
|
+
- `docs/analyzer-validation-protocol.md` defines how to validate true positives, false positives, and false negatives across real repositories.
|
|
12
|
+
- `docs/analyzer-validation-ledger.md` tracks the remaining validation work, run batches, and completion state.
|
|
13
|
+
- `docs/locality-analyzer-design.md` designs the missing code-organization analyzer for extraction placement and shared-folder locality.
|
|
14
|
+
|
|
15
|
+
The action tiers are:
|
|
16
|
+
|
|
17
|
+
- Direct repair evidence identifies code or docs that usually need a local action: delete, wire up, finish migration, remove unused surface, break a cycle, or split excessive complexity. Review is still required, but the default next step is action.
|
|
18
|
+
- Contextual signal evidence identifies a pattern that may hide a better design, but the right action depends on ownership, product semantics, locality, naming, or architecture. The default next step is investigation.
|
|
19
|
+
- Support analysis provides facts used by people, agents, or other analyzers, but does not itself assert a smell.
|
|
20
|
+
|
|
21
|
+
## Current Surfaces
|
|
22
|
+
|
|
23
|
+
The published query surface lives in `src/queries/public-query-entries.ts`. The CLI command order and families live in `src/runtime/commands/query-command-specs.ts`. The composite health score runs the phases listed in `HEALTH_PHASES` in `src/queries/health/health.ts`. The diff gate runs the checks listed in `DIFF_GATE_CHECKS` in `src/queries/impact/diff-gate.ts`.
|
|
24
|
+
|
|
25
|
+
`health --json` on this repository currently reports:
|
|
26
|
+
|
|
27
|
+
- score 100, riskScore 100, hygieneScore 100
|
|
28
|
+
- zero active findings across all health phases
|
|
29
|
+
- 174 suppression comments: 72 extract, 62 wrapper, 17 stale, 15 similar, 8 passthrough
|
|
30
|
+
|
|
31
|
+
That suppression shape is evidence that broad candidate analyzers have historically produced enough accepted or false-positive results to need explicit maintainer judgment. The suppression lifecycle review confirmed the current source comments are recent and reasoned, while structured file-scoped suppressions now warn when their file path goes stale.
|
|
32
|
+
|
|
33
|
+
The declared-coupling config has been refreshed after the inventory surfaced old pre-folder-move paths. `config-validate` now warns when a declared-coupling entry names a file that no longer exists, so known maintenance units stay connected to the current file graph instead of silently becoming stale metadata.
|
|
34
|
+
|
|
35
|
+
## Health-Scored Analyzers
|
|
36
|
+
|
|
37
|
+
| Analyzer | Evidence examined | Current health role | Recommended action tier | Evaluation |
|
|
38
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------: | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
39
|
+
| `dead` | Production definitions, SCIP/source/caller references, package roots, framework-discovered route/page roots, and entry exclusions | Risk, graph findings | Direct repair for `dead-code`; contextual for `file-internal` | Strong when `kind === dead-code`: zero references and excluded external-live surfaces make deletion likely. `file-internal` is not direct deletion evidence; it may be private helper ownership. |
|
|
40
|
+
| `cleanup-plan` | `dead --only-dead` seed plus conservative cascade references | Standalone, not direct health phase | Direct repair | Strongest deletion analyzer. It computes ordered batches and can be compiler-verified from the command layer. |
|
|
41
|
+
| `isolated` | Production callables with no callers and no non-self callees | Risk, graph findings | Direct repair | Strong dead-leaf signal. It is stricter than `dead` and usually means remove or wire up. |
|
|
42
|
+
| `cycles` | File dependency graph, with module-hierarchy/test/barrel/entry cycle classification | Risk | Direct repair for `real`; support/noise for `module-hierarchy` | Good split already exists. Real cycles normally need architectural repair. Module-hierarchy cycles should not score. |
|
|
43
|
+
| `similar` / `similarAll` | Callable callee fingerprints, IDF weighting, source-token fallback | Hygiene | Contextual signal | Similarity is a reuse lead, not proof of duplicate semantics. Needs naming, behavior, signatures, and product intent before action. Shared evidence is now labeled as domain, access/query, framework/generic, mixed, or neutral structural overlap. |
|
|
44
|
+
| `recent-duplicates` | `similarAll`, React/Vue duplicate analyzers, git file-age orientation | Standalone cleanup | Direct repair for `echo`; contextual for `twin` | Directionality makes this much stronger than plain similarity. A recent echo usually should reuse/delete. Twins still need choice of owner. |
|
|
45
|
+
| `react-component-duplicates` | JSX structure tokens from React profiles | Hygiene | Contextual signal | Good UI reuse lead. Needs product semantics and design-system judgment before extracting. |
|
|
46
|
+
| `react-hook-candidates` | Shared React hook/state/effect/request/handler tokens, evidence class, action tier, and recommendation | Hygiene, with `scoreCount` discount | Contextual signal for domain or mixed behavior; support for generic workflow/shared abstraction rows | Better than raw similarity because behavior tokens are named. The output now separates generic UI workflow and existing shared abstractions from domain behavior, but extraction still needs product judgment. |
|
|
47
|
+
| `react-large-component-pressure` | Component LOC, file LOC, JSX token count, behavior token count, pressure kind, context, recommendation kind | Hygiene | Direct repair pressure with review direction | Large component pressure usually implies splitting. It now distinguishes JSX, behavior, file, and route/page pressure, but still does not choose the destination directory for extracted code. |
|
|
48
|
+
| `vue-component-duplicates` | Vue template structure tokens | Hygiene | Contextual signal | Same reuse caveat as React component duplicates. |
|
|
49
|
+
| `vue-composable-candidates` | Vue composable/store/reactivity/lifecycle/request/function/template tokens, evidence class, action tier, and recommendation | Hygiene, with `scoreCount` discount | Contextual signal for domain or mixed behavior; support for generic workflow/shared abstraction rows | Good extraction lead when domain behavior is present. Generic workflow scaffolding remains visible as support, and extraction still needs domain and locality judgment. |
|
|
50
|
+
| `vue-large-view-pressure` | SFC total/template/script/style/external-script line counts, pressure kind, context, recommendation kind | Hygiene | Direct repair pressure with review direction | Usually implies splitting a large view. It now distinguishes template, script, style, external-script, and route/page pressure, but still needs companion directory-locality guidance. |
|
|
51
|
+
| `extract-candidates` | Large callable callee clusters, co-occurrence isolation, extraction kind, action tier, and recommendation | Hygiene | Contextual signal | It finds possible extraction seams, not proof of a new abstraction. The output now distinguishes workflow orchestration from broad/cohesive helper clusters and keeps every row as signal. |
|
|
52
|
+
| `wrapper-candidates` | Small production callables with one real external caller, caller fan-in, and boundary-token evidence | Hygiene | Contextual signal, sometimes direct | Single-caller wrappers can be needless indirection, but may also be names, domain/lifecycle boundaries, test seams, or API shaping. Boundary evidence discounts those without hiding them. |
|
|
53
|
+
| `passthrough-candidates` | Small production callables with exactly one callee, literal pass-through body, runtime-boundary evidence, public-facade evidence, action tier, recommendation, and score count | Hygiene, with `scoreCount` discount | Direct when no boundary or public-facade evidence is present; contextual signal when either exists | Body-shape gate is real. Boundary evidence distinguishes adapter, provider, public, capability, transport, lifecycle, access-policy, and facade-shaped forwarders; public-facade evidence separately identifies package-public or rooted exported passthroughs. |
|
|
54
|
+
| `stale-abstractions` | Type-like definitions, real consumers, barrel consumers, transitive reachability, definer usage, confidence, staleness kind, action tier, and recommendation | Hygiene | Direct for unused abstractions; contextual signal for one-consumer ownership rows | `0 consumers` is direct repair. `1 consumer` is contextual, including high-confidence misplaced types, because the repair may be move, inline, keep, or document as public contract. |
|
|
55
|
+
| `drift` | File dep graph, symbol ref graph, semantic/source import usage, explicit or inferred layer policy, sibling patterns, action tier, policy basis, recommendation | Hygiene | Split by kind | `unused-import` is direct repair. Explicit `layer-violation` is direct; inferred layer policy and `pattern-deviation` rows are contextual signal. Pattern deviations remain excluded from health scoring. |
|
|
56
|
+
| `complexity-hotspots` | Production callable LOC, fan-in, fan-out, callee count | Risk | Direct repair pressure | Complexity pressure usually means refactor, but the current score is structural, not cyclomatic. It should be separate from branch-count complexity. |
|
|
57
|
+
| `co-change` / hidden coupling | Git co-change pairs, dependency edges, declared couplings, file noise filters, partner-class labels, declared-coupling suggestions, commit scope, recency context, commit-subject context, and score-weighted count | Risk, weighted by history strength | Contextual signal | Strong evidence that coordination may be missing, but not proof that extraction or unification is correct. Partner classes, history context, subject context, and score weighting now separate contract-like focused current pairs from broad, stale, or unlabeled history before suggesting declared coupling. |
|
|
58
|
+
| Suppression inventory | `scip-query: ignore-*` comments in source, plus structured `.scipquery.json` suppressions | Evidence quality axis | Meta signal | Useful precision feedback. High suppressions should reduce trust or weight for that detector family. Structured file-scoped suppressions now validate path freshness. |
|
|
59
|
+
|
|
60
|
+
## Diff-Gate Checks
|
|
61
|
+
|
|
62
|
+
| Check | Evidence examined | Recommended action tier | Evaluation |
|
|
63
|
+
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
64
|
+
| `echo` | Changed symbols compared to established `similar` matches outside the diff | Direct repair leaning | More actionable than repo-wide `similar` because it is scoped to new or changed code. Still verify semantics before reuse. |
|
|
65
|
+
| `incomplete-migration` | New helpers in the diff, existing references, leftover established sites with helper-callee containment, site coverage, helper-shape evidence, and migration-scope hints | Direct repair | Strong. It models the exact failure mode of half-finished extraction and gives concrete leftover sites, while rejecting broad old sites where the helper pattern is only a small fragment and labeling possible subtype/variant leftovers for review. |
|
|
66
|
+
| `co-change-partner` | Historical partner changed without the other side in current diff, with co-change partner class, commit scope, recency, commit-subject context, and optional declared-coupling suggestion | Contextual signal | Good sync warning, but sometimes the coupling no longer holds or should be intentionally broken. Partner classes, history context, and subject context make doc/code, config/code, schema/script, model/view, test/code, broad-sweep, stale, docs-labeled, fix-labeled, and issue-ref cases easier to review. |
|
|
67
|
+
| `doc-reference` | Living docs citing changed files, excluding import-only source changes, with citation kind and Markdown-local cited-claim context | Split by citation evidence | Behavioral/current doc claims are direct doc-review evidence. Configuration examples and intentional records are support-tier checks unless the cited target changed meaning. |
|
|
68
|
+
| `unused-params` | Trailing unused params in changed files | Direct repair | Conservative enough to be a high-confidence local fix. |
|
|
69
|
+
| `new-dead` | Changed production symbols with zero consumers, excluding entry/root/test/framework-discovered cases | Direct repair | Either wire it up, remove it, or mark it as an externally live root before it lands. |
|
|
70
|
+
| `baseline` | New health finding identity versus committed baseline | Direct gate | It does not explain the smell itself, but correctly blocks regression until fixed or accepted. |
|
|
71
|
+
|
|
72
|
+
## Standalone Cleanup and Similarity Analyzers
|
|
73
|
+
|
|
74
|
+
| Analyzer | Evidence examined | Recommended action tier | Evaluation |
|
|
75
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
76
|
+
| `unused-params` | TS/JS AST facts plus identifier usage lines | Direct repair | Intentionally conservative: trailing only, simple params only, underscore-intent skipped, external roots skipped. Should be in the direct tier despite heuristic metadata. |
|
|
77
|
+
| `unused-imports` | Source/AST import facts plus local binding usage | Direct repair | A narrower direct cleanup analyzer. It should stay direct when the imported binding is unused in executable and type surfaces, with framework/compiler caveats handled in `drift` validation. |
|
|
78
|
+
| `redundant-reexports` | Barrel exports, JS/TS re-export statements, SCIP/source fallback consumers, direct importers, package-surface evidence | Direct for private barrels; signal for package-public barrels | Strong when the candidate barrel is private and both barrel and direct consumers are zero. Package-public barrels stay visible as signal because external consumers may import through them. |
|
|
79
|
+
| `similar-files` | File dependency-profile Jaccard with infrastructure and distinctive-dep gates | Contextual signal | Good for copy-paste family discovery, not direct extraction proof. |
|
|
80
|
+
| `similar-chains` | Dependency chain generation, infrastructure filtering, edit distance | Contextual signal | Finds duplicated pipelines, but pipeline ownership and abstraction shape require design judgment. |
|
|
81
|
+
| `similar-signatures` | Semantic/documented/source normalized function signatures | Contextual signal | Same type shape is only a weak lead. Useful for search, not scoring unless combined with behavior evidence. |
|
|
82
|
+
| `convergence` | Two symbols' shared and unique callees | Support/contextual signal | It explains a possible consolidation strategy; it should not score by itself. |
|
|
83
|
+
| `locality-candidates` | Candidate symbol/file path, directory ancestry, consumer files, consumer coverage, nearest common owner, boundary markers, and counterevidence | Contextual signal | Guides placement and ownership review for extracted or shared code. It is deliberately report-only and should not force moves or affect health score without repair-outcome evidence. |
|
|
84
|
+
| `doc-drift` | Living docs, path citations, cited-claim contexts, doc-code co-change, doc intent, action tier, code churn after doc update, broken references | Split by evidence | Broken references are direct repair. Path-cited stale subjects now expose citation context. Co-change-only staleness is signal for current guidance and support for historical notes. |
|
|
85
|
+
|
|
86
|
+
## Graph, Risk, and Planning Analyzers
|
|
87
|
+
|
|
88
|
+
| Analyzer | Evidence examined | Recommended role | Evaluation |
|
|
89
|
+
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
90
|
+
| `affected` | Transitive symbol impact from a changed symbol | Support analysis | Blast-radius map, not smell. |
|
|
91
|
+
| `change-surface` | Definitions in a file plus external consumer counts | Support/risk analysis | Pre-change risk briefing. Useful for planning and score context, not a repair. |
|
|
92
|
+
| `plan-context` | Trace, references, call graph, dataflow, deps/rdeps, surface, affected, change-surface, complexity, history | Support analysis | Composite planning bundle. It should not contribute smell score directly. |
|
|
93
|
+
| `bottlenecks` | Callable fan-in times fan-out, risk kind, action tier, evidence reasons, recommendation | Contextual signal | Good risk hotspot, not automatic refactor. Output now states `signal` and frames central code as coordination risk rather than repair proof. |
|
|
94
|
+
| `hotspots` | Most referenced symbols | Support/contextual signal | Identifies choke points. Not a smell alone. |
|
|
95
|
+
| `fan-in` / `fan-out` | Reference counts into symbols or out of files | Support analysis | Raw graph metrics. |
|
|
96
|
+
| `coupling` | Shared symbols between two files or top coupled pairs, coupling kind, action tier, evidence reasons, recommendation | Contextual signal | May reveal boundary problems, but shared symbols can be intended. Output now makes the coordination-pressure interpretation explicit. |
|
|
97
|
+
| `deep-chains` | Longest dependency chains after SCC condensation, suffix de-duplication, chain kind, action tier, evidence reasons, recommendation | Contextual signal | Long chains imply propagation risk, but action depends on layers and ownership. Strict suffix duplicates are now removed from top results. |
|
|
98
|
+
| `complexity` | Branch count, cyclomatic estimate, callee count, fan-in, fan-out for one symbol | Direct repair pressure | This is closer to the user-specified "cyclomatic complexity" analyzer than `complexity-hotspots`. Should score strongly when branches/cyclomatic exceed thresholds. |
|
|
99
|
+
| `self-audit` | Cheap evidence paths checked against TypeScript compiler oracle | Meta analysis | Measures analyzer accuracy. Should guide trust/weight, not code health directly. |
|
|
100
|
+
|
|
101
|
+
## Navigation and Evidence Providers
|
|
102
|
+
|
|
103
|
+
These commands analyze the index, but they are not finding detectors and should not affect health score directly: `stats`, `files`, `methods`, `refs`, `trace`, `deps`, `rdeps`, `system`, `surface`, `imports`, `imported-by`, `outline`, `members`, `by-kind`, `kind-counts`, `hierarchy`, `call-graph`, `code`, `dataflow`, and `slice`.
|
|
104
|
+
|
|
105
|
+
They are essential because other analyzers and agents use them to ground claims. Their defining characteristic is retrieval or explanation, not smell detection.
|
|
106
|
+
|
|
107
|
+
The support-analysis accuracy review confirmed that `refs`, `affected`, `change-surface`, `plan-context`, `imports`, `deps`, `rdeps`, `fan-in`, `fan-out`, `hotspots`, `status`, and `self-audit` return useful source-grounded evidence for a TypeScript target. It also fixed diagnostic parity so `status` and `doctor` use the same root-aware config validation as `config-validate`.
|
|
108
|
+
|
|
109
|
+
The cross-language boundary review confirmed that Rust projects have graph-backed indexing, source fallback, cleanup detector output, git/diff support, and compiler cleanup verification when `rust-analyzer` and `cargo check` are available. It also confirmed that TypeScript semantic self-audit is explicitly unavailable on Rust and that React/Vue analyzers return stack-specific empty results rather than Rust findings.
|
|
110
|
+
|
|
111
|
+
`cleanup-apply` is not an analyzer. It is an action command that applies a `cleanup-plan` batch, so it should be validated through the `cleanup-plan --verify` path and normal project checks.
|
|
112
|
+
|
|
113
|
+
## Overlap and Duplication Review
|
|
114
|
+
|
|
115
|
+
The codebase already avoids some duplicate analysis by sharing kernels:
|
|
116
|
+
|
|
117
|
+
- `runCandidateAnalysis` gives candidate-style analyzers one lifecycle for scan limits, preparation, evaluation, ordering, and result caps.
|
|
118
|
+
- `rankedPairwiseProfileResults` gives React, Vue, file-profile, and pairwise similarity analyzers a shared pair-ranking shape.
|
|
119
|
+
- `HEALTH_DETECTOR_PROFILES` keeps health and baseline detector options aligned.
|
|
120
|
+
|
|
121
|
+
The remaining conceptual overlap is mostly healthy, but needs product labels:
|
|
122
|
+
|
|
123
|
+
| Overlap family | Members | Same analysis or distinct? | Recommendation |
|
|
124
|
+
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
125
|
+
| Deletability | `dead`, `isolated`, `cleanup-plan`, `redundant-reexports`, `new-dead` | Distinct evidence scopes over the same core question: can this be removed or must it be wired? | Model as one "deletability" action family with subtypes and confidence. |
|
|
126
|
+
| Similarity and reuse | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, React/Vue duplicates, `recent-duplicates`, `echo` | Distinct evidence bases. The risk is UX confusion, not implementation duplication. | Keep separate, but expose basis, action tier, and root-cause groups where pairwise rows repeat. |
|
|
127
|
+
| Extraction pressure | `extract-candidates`, React/Vue behavior candidates, large component/view pressure, `incomplete-migration` | Different stages: discover seam, detect duplicated behavior, detect excessive size, catch unfinished migration. | Score unfinished migrations higher than discovery leads. |
|
|
128
|
+
| Indirection | `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions` | Related but not the same: single caller, literal forwarding, low-consumer types. | Passthrough and wrapper rows now split by boundary evidence; stale should split by confidence. |
|
|
129
|
+
| Architecture/history drift | `drift`, `doc-drift`, `co-change`, `co-change-partner`, `doc-reference` | Same broad problem of things moving out of sync, but sources differ. | Co-change should remain signal; doc-reference is direct only for behavioral cited claims and support for configuration examples or intentional records. |
|
|
130
|
+
| Graph risk | `fan-in`, `fan-out`, `hotspots`, `bottlenecks`, `coupling`, `deep-chains`, `change-surface`, `affected` | Mostly layered views of graph pressure. | Treat as support/context, except `cycles` and high cyclomatic complexity. |
|
|
131
|
+
|
|
132
|
+
## Score Model Implications
|
|
133
|
+
|
|
134
|
+
The current report has `riskScore`, `hygieneScore`, evidence labels, `scoreCount`, pressure penalties, validation lift, and suppression inventory. That is close, but it does not encode action implication directly.
|
|
135
|
+
|
|
136
|
+
Recommended model:
|
|
137
|
+
|
|
138
|
+
1. Add an action tier to each finding category: `direct`, `signal`, or `support`.
|
|
139
|
+
2. Keep evidence quality separate: `graph-fact`, `semantic`, `heuristic`, `change-graph`, `baseline`.
|
|
140
|
+
3. Score direct findings with heavier base penalties because they usually imply a local repair.
|
|
141
|
+
4. Score signal findings with lighter base penalties and stronger pressure penalties when signals accumulate.
|
|
142
|
+
5. Add a "signal backlog pressure" multiplier when direct findings are near zero but contextual signals remain high. This captures the user's point: a repo with no obvious smells but many unresolved architectural signals is not actually clean.
|
|
143
|
+
6. Let suppression history and `self-audit` validation adjust detector trust. A detector with many suppressions or low validation lift should score less until recalibrated.
|
|
144
|
+
|
|
145
|
+
Suggested initial tier map:
|
|
146
|
+
|
|
147
|
+
- Direct: `cleanup-plan`, `dead-code`, `isolated`, `real cycles`, `unused-params`, `new-dead`, `incomplete-migration`, behavioral/current `doc-reference` claims, broken `doc-drift` references, `redundant-reexports` with zero consumers, direct passthrough rows with no boundary or public-facade role, `unused-import` drift, high branch/cyclomatic `complexity`, large React/Vue pressure.
|
|
148
|
+
- Signal: `co-change`, `co-change-partner`, ordinary `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, `extract-candidates`, `locality-candidates`, `wrapper-candidates`, `passthrough-candidates` with boundary or public-facade roles, single-consumer `stale-abstractions`, React/Vue duplicate or behavior candidates, bottlenecks, hotspots, coupling, deep chains, inferred layer or pattern drift, doc staleness from churn.
|
|
149
|
+
- Support: navigation commands, `affected`, `change-surface`, `plan-context`, `stats`, `self-audit`, suppression inventory, baseline comparison mechanics, configuration-example and intentional-record `doc-reference` rows.
|
|
150
|
+
|
|
151
|
+
## Directory Locality Analyzer
|
|
152
|
+
|
|
153
|
+
`locality-candidates` now evaluates extraction locality after a large component/view or helper extraction. The referents are directories, feature folders, local shared folders, global shared folders, import distances, consumer sets, and abstraction ownership. The analyzer classifies where an extracted unit may belong by comparing actual consumers and directory boundaries.
|
|
154
|
+
|
|
155
|
+
Command shape:
|
|
156
|
+
|
|
157
|
+
- `scip-query locality-candidates [symbol-or-file]`
|
|
158
|
+
- Inputs: extracted or candidate symbol/file, consumer files, nearest common ancestor, feature/domain folders, existing shared folders, import path depth, package/workspace boundaries, and whether consumers cross feature boundaries.
|
|
159
|
+
- Outputs: recommended locality level such as same file, sibling folder, feature-local shared folder, app-level shared folder, package-level shared module, or no extraction.
|
|
160
|
+
- Action tier: contextual signal. It guides placement; it should not force moves without architecture judgment.
|
|
161
|
+
|
|
162
|
+
This should pair with `react-large-component-pressure`, `vue-large-view-pressure`, `extract-candidates`, and `incomplete-migration` so agents do not reduce size scores by dumping extracted pieces into flat local directories.
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Analyzer Validation Ledger
|
|
2
|
+
|
|
3
|
+
This ledger records the analyzer evaluation work carried out after the analyzer inventory, validation protocol, and locality design. It is the operating document for keeping analyzer accuracy work traceable end to end.
|
|
4
|
+
|
|
5
|
+
The companion documents are:
|
|
6
|
+
|
|
7
|
+
- `docs/analyzer-inventory.md`: names the analyzers and their action tiers.
|
|
8
|
+
- `docs/analyzer-validation-protocol.md`: defines the review protocol and per-analyzer TP/FP/FN criteria.
|
|
9
|
+
- `docs/locality-analyzer-design.md`: defines the locality and organization analyzer behavior.
|
|
10
|
+
|
|
11
|
+
## Source Anchors
|
|
12
|
+
|
|
13
|
+
The ledger is anchored to the current tool surface, not memory.
|
|
14
|
+
|
|
15
|
+
| Surface | Source | Why it anchors the ledger |
|
|
16
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
17
|
+
| Repo-wide health analysis | `scip-query code health --json` reported `src/queries/health/health.ts:194`, where `health()` runs `runHealthAnalyses()` and `buildHealthReport()`. | Every repo-wide analyzer validation must eventually reconcile with health output and scoring. |
|
|
18
|
+
| Change-time gate analysis | `scip-query code diffGate --json` reported `src/queries/impact/diff-gate.ts:94`, where `diffGate()` runs `echo`, `incomplete-migration`, `co-change-partner`, `doc-reference`, `unused-params`, `new-dead`, and `baseline`. | Every diff-only analyzer needs a separate validation path from repo-wide health. |
|
|
19
|
+
| Public command registry | `scip-query trace queryCommandOrder --json` reported `src/runtime/commands/query-command-specs.ts:10`, where the public query command order starts. `scip-query code queryCommandDescriptor --json` reported `src/runtime/commands/query-command-specs.ts:94`, where command descriptors are resolved by id. | The ledger must not silently miss a public analyzer command. |
|
|
20
|
+
| Diff-gate check list | `scip-query trace DIFF_GATE_CHECKS --json` reported `src/queries/impact/diff-gate.ts:27`, where the canonical diff-gate check list is exported. | The ledger must cover every change-time check that can block a diff. |
|
|
21
|
+
|
|
22
|
+
## Core Concepts
|
|
23
|
+
|
|
24
|
+
A validation ledger is a maintained record of analyzer evaluation work, including the claim being tested, the repositories used, the evidence captured, the verdict, and the next precision action. Its essential role is to keep validation from dissolving into scattered notes by making every analyzer claim traceable to a reviewed outcome.
|
|
25
|
+
|
|
26
|
+
A ledger item is one independently completable evaluation obligation. It may cover one analyzer, one analyzer family, one repository run, or one score-model decision; its essential characteristic is that it has a clear done signal and can move from ready to complete without needing the whole validation effort to finish.
|
|
27
|
+
|
|
28
|
+
A run batch is a bounded execution of analyzer commands against one repository and revision. It is the smallest repeatable field-test unit because it records the project, commit, commands, raw output, sample selection, and reviewer verdicts together.
|
|
29
|
+
|
|
30
|
+
A calibration decision is a documented change to detector confidence, action tier, score weight, threshold, wording, or evidence fields. It is not just a preference; it is a maintainer decision justified by reviewed true positives, false positives, false negatives, suppressions, or repair outcomes.
|
|
31
|
+
|
|
32
|
+
A repair outcome is the result of acting on an analyzer finding. It matters because an analyzer can be locally accurate while still causing bad repairs, churn, misplaced abstractions, or broader APIs when an agent follows it.
|
|
33
|
+
|
|
34
|
+
## Status Values
|
|
35
|
+
|
|
36
|
+
| Status | Meaning |
|
|
37
|
+
| ---------- | ---------------------------------------------------------------------------------- |
|
|
38
|
+
| `ready` | The item has a defined scope, command set, corpus, and done signal. |
|
|
39
|
+
| `running` | Raw analyzer output or human review is currently being collected. |
|
|
40
|
+
| `blocked` | The item cannot be completed until tooling, indexing, or corpus access improves. |
|
|
41
|
+
| `complete` | The item has reviewed evidence, verdicts, and any next precision actions recorded. |
|
|
42
|
+
| `deferred` | The item is valid but intentionally lower priority than other ledger work. |
|
|
43
|
+
|
|
44
|
+
## Active Ledger
|
|
45
|
+
|
|
46
|
+
Closeout status: all active ledger rows are complete as of 2026-06-22. Remaining future work is provider- or corpus-gated, not an unfinished validation slice: true co-change issue/PR label ingestion needs a repository metadata provider, and locality score integration needs stronger consumer-coverage plus repair-outcome evidence.
|
|
47
|
+
|
|
48
|
+
| ID | Item | Scope | Status | Next action | Done signal |
|
|
49
|
+
| ------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
50
|
+
| AVL-001 | Field evaluation baseline | Run the protocol on `scip-query`, `Stable_Management`, `Vega_2.0`, and `SynthRunnerRust`. | `complete` | Completed in `docs/validation/2026-06-21-second-repo-confirmation.md`. | A dated run summary exists for each repo with raw-output locations and sampling notes. |
|
|
51
|
+
| AVL-002 | Direct repair analyzer verdicts | `cleanup-plan`, `dead`, `new-dead`, `isolated`, `unused-params`, `unused-imports`, `redundant-reexports`, `passthrough-candidates`, `cycles`, broken `doc-drift`, and `doc-reference`. | `complete` | Completed in `docs/validation/2026-06-21-direct-deletion-family-closure-result.md`. | Each direct analyzer has TP/FP/FN counts, accepted-design examples, and precision actions. |
|
|
52
|
+
| AVL-003 | Contextual signal analyzer verdicts | Similarity, extraction, locality, wrapper, stale abstraction, frontend duplicate, hook/composable, co-change, bottleneck, coupling, drift, and deep-chain families. | `complete` | Completed in `docs/validation/2026-06-21-contextual-signal-closure-result.md`. | Each contextual family has a reviewed precision note and a score-weight recommendation. |
|
|
53
|
+
| AVL-004 | Support analysis accuracy | `affected`, `change-surface`, `plan-context`, navigation commands, graph metrics, and `self-audit`. | `complete` | Completed in `docs/validation/2026-06-21-support-analysis-accuracy-result.md`. | Support commands have referential-accuracy notes and known unsupported cases. |
|
|
54
|
+
| AVL-005 | Analyzer implementation parity | Confirm each public analyzer command's documented behavior matches implementation behavior. | `complete` | Completed in `docs/validation/2026-06-21-analyzer-implementation-parity-result.md`. | The inventory and protocol either match implementation or list required doc/code corrections. |
|
|
55
|
+
| AVL-006 | Score calibration | Evaluate direct findings, contextual signals, suppressions, validation ratio, and signal backlog pressure. | `complete` | Completed in `docs/validation/2026-06-21-score-calibration-finalization-result.md`. | A calibration memo states score-weight changes, accepted current weights, or blocked evidence gaps. |
|
|
56
|
+
| AVL-007 | Output and schema quality | Verify each analyzer emits enough structured evidence for users and agents to review the claim. | `complete` | Completed in `docs/validation/2026-06-21-output-schema-quality-finalization-result.md`. | Each analyzer family has an output-quality verdict and missing-field list. |
|
|
57
|
+
| AVL-008 | Performance and budget behavior | Check large-index behavior, `--full`, scan limits, git-history bounds, and graceful degradation. | `complete` | Completed in `docs/validation/2026-06-21-performance-budget-behavior-result.md`. | Budget behavior is documented with any timeout, cap, or misleading-empty-output issues. |
|
|
58
|
+
| AVL-009 | Suppression lifecycle | Evaluate whether suppressions are stale, justified, expired, or useful as detector precision feedback. | `complete` | Completed in `docs/validation/2026-06-21-suppression-lifecycle-result.md`. | Suppression categories have counts, stale examples, and trust-weight recommendations. |
|
|
59
|
+
| AVL-010 | Cross-language capability boundaries | Establish what works for TypeScript, React, Vue, Rust, and any unsupported language surfaces. | `complete` | Completed in `docs/validation/2026-06-21-cross-language-capability-boundaries-result.md`. | Capability notes distinguish "no findings" from "not supported by current evidence." |
|
|
60
|
+
| AVL-011 | Agent repair outcomes | Test whether acting on analyzer findings produces better code rather than churn or misplaced abstraction. | `complete` | Completed in `docs/validation/2026-06-21-agent-repair-outcomes-result.md`. | Each action tier has at least one reviewed repair outcome or an explicit reason it cannot be tested yet. |
|
|
61
|
+
| AVL-012 | Locality analyzer validation | Validate the proposed `locality-candidates` report and `scip-locality-review` skill workflow before implementation. | `complete` | Completed in `docs/validation/2026-06-21-locality-analyzer-validation-result.md`. | The locality design has TP/FP/FN-style examples and a go/no-go recommendation for implementation. |
|
|
62
|
+
| AVL-013 | Config and declared-coupling freshness | Check whether `.scipquery.json` declared couplings and suppressions still point at current paths. | `complete` | Completed in `docs/validation/2026-06-21-config-declared-coupling-freshness-result.md`. | Stale config paths are fixed, removed, or documented as intentionally retained. |
|
|
63
|
+
| AVL-014 | Public command surface coverage | Ensure every public analyzer command is present in the inventory, protocol, and ledger. | `complete` | Completed in `docs/validation/2026-06-21-public-command-surface-coverage-result.md`. | A coverage checklist shows no missing analyzer or marks non-analyzer support commands separately. |
|
|
64
|
+
|
|
65
|
+
## Public Command Coverage Checklist
|
|
66
|
+
|
|
67
|
+
The canonical source is `src/runtime/commands/query-command-specs.ts:10-73`, where `queryCommandOrder` lists the public query command surface.
|
|
68
|
+
|
|
69
|
+
- Core and navigation support: `stats`, `files`, `methods`, `refs`, `trace`, `deps`, `rdeps`, `system`, `surface`, `imports`, `imported-by`, `outline`, `members`, `by-kind`, `kind-counts`, `hierarchy`, `call-graph`, `code`, `dataflow`, `slice`
|
|
70
|
+
- Direct cleanup and deletion analyzers: `dead`, `isolated`, `unused-imports`, `cleanup-plan`, `unused-params`, `passthrough-candidates`, `redundant-reexports`
|
|
71
|
+
- Similarity, reuse, extraction, and locality analyzers: `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `recent-duplicates`, `extract-candidates`, `locality-candidates`, `wrapper-candidates`, `stale-abstractions`, `doc-drift`, `drift`, `convergence`
|
|
72
|
+
- Frontend analyzers: `react-component-duplicates`, `react-hook-candidates`, `react-large-component-pressure`, `vue-component-duplicates`, `vue-composable-candidates`, `vue-large-view-pressure`
|
|
73
|
+
- Graph, risk, and complexity analyzers: `hotspots`, `fan-in`, `fan-out`, `coupling`, `cycles`, `bottlenecks`, `deep-chains`, `complexity-hotspots`, `complexity`
|
|
74
|
+
- Diff, impact, and planning analyzers: `affected`, `change-surface`, `co-change`, `diff-gate`, `incomplete-migration`, `plan-context`
|
|
75
|
+
- Meta and action commands: `self-audit`, `cleanup-apply`
|
|
76
|
+
|
|
77
|
+
## Completed Run Batches
|
|
78
|
+
|
|
79
|
+
The completed effort used this order so early runs created useful evidence for later calibration work.
|
|
80
|
+
|
|
81
|
+
Current pilot:
|
|
82
|
+
|
|
83
|
+
- Plan: `docs/plans/2026-06-21-analyzer-validation-pilot.md`
|
|
84
|
+
- Summary: `docs/validation/2026-06-21-analyzer-validation-pilot.md`
|
|
85
|
+
- Verdict review: `docs/validation/2026-06-21-analyzer-verdict-review.md`
|
|
86
|
+
- Calibration memo: `docs/validation/2026-06-21-analyzer-calibration-memo.md`
|
|
87
|
+
- Precision implementation plan: `docs/plans/2026-06-21-analyzer-precision-implementation.md`
|
|
88
|
+
- Precision implementation result: `docs/validation/2026-06-21-analyzer-precision-implementation-result.md`
|
|
89
|
+
- Stable_Management second confirmation: `docs/validation/2026-06-21-stable-management-second-confirmation.md`
|
|
90
|
+
- Echo tier refinement result: `docs/validation/2026-06-21-echo-tier-refinement-result.md`
|
|
91
|
+
- Wrapper boundary evidence result: `docs/validation/2026-06-21-wrapper-boundary-evidence-result.md`
|
|
92
|
+
- Passthrough boundary evidence result: `docs/validation/2026-06-22-passthrough-boundary-evidence-result.md`
|
|
93
|
+
- Passthrough public-facade caveats result: `docs/validation/2026-06-22-passthrough-public-facade-caveats-result.md`
|
|
94
|
+
- Public surface caveats result: `docs/validation/2026-06-22-public-surface-caveats-result.md`
|
|
95
|
+
- Doc cited-claim metadata result: `docs/validation/2026-06-22-doc-cited-claim-metadata-result.md`
|
|
96
|
+
- Root-cause grouping result: `docs/validation/2026-06-22-root-cause-grouping-result.md`
|
|
97
|
+
- Co-change partner labels result: `docs/validation/2026-06-22-co-change-partner-labels-result.md`
|
|
98
|
+
- Incomplete migration containment result: `docs/validation/2026-06-22-incomplete-migration-containment-result.md`
|
|
99
|
+
- Co-change recency and broad-sweep context result: `docs/validation/2026-06-22-co-change-recency-sweep-result.md`
|
|
100
|
+
- Doc drift historical intent result: `docs/validation/2026-06-22-doc-drift-historical-intent-result.md`
|
|
101
|
+
- Framework entry caveats result: `docs/validation/2026-06-22-framework-entry-caveats-result.md`
|
|
102
|
+
- Incomplete migration scope hints result: `docs/validation/2026-06-22-incomplete-migration-scope-hints-result.md`
|
|
103
|
+
- Doc reference citation parser result: `docs/validation/2026-06-22-doc-reference-citation-parser-result.md`
|
|
104
|
+
- Co-change subject context result: `docs/validation/2026-06-22-co-change-subject-context-result.md`
|
|
105
|
+
- Second-corpus score-weight confirmation result: `docs/validation/2026-06-22-second-corpus-score-weight-confirmation-result.md`
|
|
106
|
+
- Passthrough exported-facade second-corpus result: `docs/validation/2026-06-22-passthrough-exported-facade-second-corpus-result.md`
|
|
107
|
+
- Incomplete migration second-corpus scope result: `docs/validation/2026-06-22-incomplete-migration-second-corpus-scope-result.md`
|
|
108
|
+
- Doc parser second-corpus validation result: `docs/validation/2026-06-22-doc-parser-second-corpus-validation-result.md`
|
|
109
|
+
- Validation ledger closeout result: `docs/validation/2026-06-22-validation-ledger-closeout-result.md`
|
|
110
|
+
- Global install cross-verification result: `docs/validation/2026-06-22-global-install-cross-verification-result.md`
|
|
111
|
+
- Stable Management locality suggested-home review: `docs/validation/2026-06-22-stable-management-locality-suggested-home-review.md`
|
|
112
|
+
- Locality positive suggested-home result: `docs/validation/2026-06-22-locality-positive-suggested-home-result.md`
|
|
113
|
+
- Stable_Management wrapper confirmation: `docs/validation/2026-06-21-stable-management-wrapper-boundary-confirmation.md`
|
|
114
|
+
- Vue pressure-kind output result: `docs/validation/2026-06-21-vue-pressure-kind-output-result.md`
|
|
115
|
+
- Similarity evidence split result: `docs/validation/2026-06-21-similarity-evidence-split-result.md`
|
|
116
|
+
- Doc citation-kind output result: `docs/validation/2026-06-21-doc-citation-kind-output-result.md`
|
|
117
|
+
- Baseline metadata inheritance result: `docs/validation/2026-06-21-baseline-metadata-inheritance-result.md`
|
|
118
|
+
- Second-repo confirmation: `docs/validation/2026-06-21-second-repo-confirmation.md`
|
|
119
|
+
- Rust wrapper and React pressure review: `docs/validation/2026-06-21-rust-wrapper-react-pressure-review.md`
|
|
120
|
+
- React pressure-kind output result: `docs/validation/2026-06-21-react-pressure-kind-output-result.md`
|
|
121
|
+
- Rust wrapper boundary vocabulary result: `docs/validation/2026-06-21-rust-wrapper-boundary-vocabulary-result.md`
|
|
122
|
+
- Frontend behavior evidence classification result: `docs/validation/2026-06-21-frontend-behavior-evidence-classification-result.md`
|
|
123
|
+
- Extract candidate evidence classification result: `docs/validation/2026-06-21-extract-candidate-evidence-classification-result.md`
|
|
124
|
+
- Stale abstraction action-tier result: `docs/validation/2026-06-21-stale-abstraction-action-tier-result.md`
|
|
125
|
+
- Health score action-tier counts result: `docs/validation/2026-06-21-health-score-action-tier-counts-result.md`
|
|
126
|
+
- Graph-risk family result: `docs/validation/2026-06-21-graph-risk-family-result.md`
|
|
127
|
+
- Config declared-coupling freshness result: `docs/validation/2026-06-21-config-declared-coupling-freshness-result.md`
|
|
128
|
+
- Suppression lifecycle result: `docs/validation/2026-06-21-suppression-lifecycle-result.md`
|
|
129
|
+
- Support analysis accuracy result: `docs/validation/2026-06-21-support-analysis-accuracy-result.md`
|
|
130
|
+
- Cross-language capability boundaries result: `docs/validation/2026-06-21-cross-language-capability-boundaries-result.md`
|
|
131
|
+
- Public command surface coverage result: `docs/validation/2026-06-21-public-command-surface-coverage-result.md`
|
|
132
|
+
- Analyzer implementation parity result: `docs/validation/2026-06-21-analyzer-implementation-parity-result.md`
|
|
133
|
+
- Performance and budget behavior result: `docs/validation/2026-06-21-performance-budget-behavior-result.md`
|
|
134
|
+
- Agent repair outcomes result: `docs/validation/2026-06-21-agent-repair-outcomes-result.md`
|
|
135
|
+
- Locality analyzer validation result: `docs/validation/2026-06-21-locality-analyzer-validation-result.md`
|
|
136
|
+
- Direct small analyzer verdicts result: `docs/validation/2026-06-21-direct-small-analyzer-verdicts-result.md`
|
|
137
|
+
- Direct remaining verdicts result: `docs/validation/2026-06-21-direct-remaining-verdicts-result.md`
|
|
138
|
+
- Direct deletion-family closure result: `docs/validation/2026-06-21-direct-deletion-family-closure-result.md`
|
|
139
|
+
- Contextual signal closure result: `docs/validation/2026-06-21-contextual-signal-closure-result.md`
|
|
140
|
+
- Score calibration finalization result: `docs/validation/2026-06-21-score-calibration-finalization-result.md`
|
|
141
|
+
- Output/schema quality finalization result: `docs/validation/2026-06-21-output-schema-quality-finalization-result.md`
|
|
142
|
+
- Raw output root: `/tmp/scip-query-validation/2026-06-21-pilot`
|
|
143
|
+
|
|
144
|
+
### Batch 1: Corpus Baseline
|
|
145
|
+
|
|
146
|
+
- Repositories: `scip-query`, `Stable_Management`, `Vega_2.0`, `SynthRunnerRust`.
|
|
147
|
+
- Commands:
|
|
148
|
+
- `git rev-parse HEAD`
|
|
149
|
+
- `scip-query reindex`
|
|
150
|
+
- `scip-query health --full --json`
|
|
151
|
+
- `scip-query diff-gate --json`
|
|
152
|
+
- `scip-query capability-matrix`
|
|
153
|
+
- Outputs:
|
|
154
|
+
- Raw JSON outside the repo unless intentionally promoted.
|
|
155
|
+
- Plain text output when a command does not expose `--json`.
|
|
156
|
+
- Summary in `docs/validation/YYYY-MM-DD-corpus-baseline.md`.
|
|
157
|
+
|
|
158
|
+
### Batch 2: Direct Repair Families
|
|
159
|
+
|
|
160
|
+
- Commands:
|
|
161
|
+
- `scip-query cleanup-plan --json`
|
|
162
|
+
- `scip-query dead --only-dead --json`
|
|
163
|
+
- `scip-query isolated --json`
|
|
164
|
+
- `scip-query unused-params --json`
|
|
165
|
+
- `scip-query redundant-reexports`
|
|
166
|
+
- `scip-query passthrough-candidates --json`
|
|
167
|
+
- `scip-query cycles --json`
|
|
168
|
+
- `scip-query doc-drift --json`
|
|
169
|
+
- Review:
|
|
170
|
+
- Top 10 findings, 5 threshold-edge findings, and 5 false-negative probes where possible.
|
|
171
|
+
- Classify as `tp`, `fp`, `accepted_design`, `needs_judgment`, or `fn`.
|
|
172
|
+
|
|
173
|
+
### Batch 3: Contextual Signal Families
|
|
174
|
+
|
|
175
|
+
- Commands:
|
|
176
|
+
- `scip-query similar --json`
|
|
177
|
+
- `scip-query similar-files --json`
|
|
178
|
+
- `scip-query similar-chains --json`
|
|
179
|
+
- `scip-query similar-signatures --json`
|
|
180
|
+
- `scip-query recent-duplicates --json`
|
|
181
|
+
- `scip-query extract-candidates --json`
|
|
182
|
+
- `scip-query wrapper-candidates --json`
|
|
183
|
+
- `scip-query stale-abstractions --json`
|
|
184
|
+
- `scip-query co-change --json`
|
|
185
|
+
- `scip-query bottlenecks --json`
|
|
186
|
+
- `scip-query coupling --json`
|
|
187
|
+
- `scip-query deep-chains --json`
|
|
188
|
+
- `scip-query drift --json`
|
|
189
|
+
- Review:
|
|
190
|
+
- Separate "true signal" from "direct repair."
|
|
191
|
+
- Record what product or architecture judgment was needed.
|
|
192
|
+
|
|
193
|
+
### Batch 4: Frontend-Specific Families
|
|
194
|
+
|
|
195
|
+
- React corpus: `Vega_2.0`.
|
|
196
|
+
- Vue corpus: `Stable_Management`.
|
|
197
|
+
- Commands:
|
|
198
|
+
- `scip-query react-component-duplicates --full --json`
|
|
199
|
+
- `scip-query react-hook-candidates --full --json`
|
|
200
|
+
- `scip-query react-large-component-pressure --full --json`
|
|
201
|
+
- `scip-query vue-component-duplicates --full --json`
|
|
202
|
+
- `scip-query vue-composable-candidates --full --json`
|
|
203
|
+
- `scip-query vue-large-view-pressure --full --json`
|
|
204
|
+
- Review:
|
|
205
|
+
- Validate whether findings imply component extraction, hook/composable extraction, locality repair, or only investigation.
|
|
206
|
+
|
|
207
|
+
### Batch 5: Evidence Providers and Agent Outcomes
|
|
208
|
+
|
|
209
|
+
- Commands:
|
|
210
|
+
- `scip-query plan-context <target> --full --json`
|
|
211
|
+
- `scip-query change-surface <file> --json`
|
|
212
|
+
- `scip-query affected <symbol> --json`
|
|
213
|
+
- `scip-query refs <symbol> --json`
|
|
214
|
+
- `scip-query imports <file> --json`
|
|
215
|
+
- `scip-query rdeps <file>`
|
|
216
|
+
- `scip-query self-audit --samples 100 --json`
|
|
217
|
+
- Review:
|
|
218
|
+
- Confirm reference accuracy.
|
|
219
|
+
- Pick a small number of analyzer findings and record whether an agent could repair them cleanly.
|
|
220
|
+
|
|
221
|
+
## Verdict Record Template
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"ledgerId": "AVL-002",
|
|
226
|
+
"repo": "scip-query",
|
|
227
|
+
"revision": "COMMIT",
|
|
228
|
+
"command": "dead --only-dead --json",
|
|
229
|
+
"findingId": "stable id or pasted summary",
|
|
230
|
+
"location": "src/path/file.ts:10",
|
|
231
|
+
"verdict": "tp | fp | accepted_design | needs_judgment | fn",
|
|
232
|
+
"actionTier": "direct | signal | support",
|
|
233
|
+
"evidence": ["facts that support the verdict"],
|
|
234
|
+
"counterevidence": ["facts that weaken the analyzer claim"],
|
|
235
|
+
"repairOutcome": "not_attempted | improved | churn | bad_abstraction | blocked",
|
|
236
|
+
"precisionAction": "none | parser | root_detection | threshold | score_weight | output_schema | docs | tests",
|
|
237
|
+
"notes": "short reviewer note"
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Update Rules
|
|
242
|
+
|
|
243
|
+
When a run batch completes:
|
|
244
|
+
|
|
245
|
+
1. Update the relevant `AVL-*` rows from `ready` or `running` to `complete`, `blocked`, or `deferred`.
|
|
246
|
+
2. Add a dated summary under `docs/validation/` when the result is worth retaining.
|
|
247
|
+
3. Keep raw JSON out of the repo unless it is small and useful as a fixture.
|
|
248
|
+
4. Turn precision actions into implementation issues or a concrete implementation plan.
|
|
249
|
+
5. If a finding changes an action tier or score-weight recommendation, update `docs/analyzer-inventory.md` and `docs/analyzer-validation-protocol.md`.
|
|
250
|
+
|
|
251
|
+
## Initial End-to-End Slice
|
|
252
|
+
|
|
253
|
+
The first concrete run was intentionally narrow:
|
|
254
|
+
|
|
255
|
+
1. Run Batch 1 on `scip-query` and `Stable_Management`.
|
|
256
|
+
2. Run Batch 2 only for `dead`, `unused-params`, `passthrough-candidates`, and `doc-drift`.
|
|
257
|
+
3. Run Batch 3 only for `similar`, `wrapper-candidates`, and `co-change`.
|
|
258
|
+
4. Run Batch 4 only for Vue on `Stable_Management`.
|
|
259
|
+
5. Record at least 30 reviewed verdicts.
|
|
260
|
+
6. Produce one calibration memo that says whether the current direct/signal/support split still holds.
|
|
261
|
+
|
|
262
|
+
That slice tested the ledger, the protocol, the review burden, and the score model before the later completion passes covered the remaining analyzer families.
|