@vyuhlabs/dxkit 2.4.4 → 2.4.6
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/CHANGELOG.md +339 -0
- package/README.md +33 -19
- package/dist/analyzers/tests/index.d.ts.map +1 -1
- package/dist/analyzers/tests/index.js +2 -0
- package/dist/analyzers/tests/index.js.map +1 -1
- package/dist/analyzers/tools/coverage.d.ts +1 -1
- package/dist/analyzers/tools/coverage.d.ts.map +1 -1
- package/dist/analyzers/tools/coverage.js.map +1 -1
- package/dist/analyzers/tools/jacoco.d.ts +76 -0
- package/dist/analyzers/tools/jacoco.d.ts.map +1 -0
- package/dist/analyzers/tools/jacoco.js +228 -0
- package/dist/analyzers/tools/jacoco.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts +47 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -0
- package/dist/analyzers/tools/osv-scanner-deps.js +175 -0
- package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-fix.d.ts +20 -0
- package/dist/analyzers/tools/osv-scanner-fix.d.ts.map +1 -1
- package/dist/analyzers/tools/osv-scanner-fix.js +45 -20
- package/dist/analyzers/tools/osv-scanner-fix.js.map +1 -1
- package/dist/analyzers/tools/runner.d.ts +47 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -1
- package/dist/analyzers/tools/runner.js +79 -0
- package/dist/analyzers/tools/runner.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts +10 -0
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +131 -0
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -2
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +12 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts +67 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +421 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/kotlin.d.ts +1 -52
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +16 -286
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/ruby.d.ts +77 -0
- package/dist/languages/ruby.d.ts.map +1 -0
- package/dist/languages/ruby.js +531 -0
- package/dist/languages/ruby.js.map +1 -0
- package/dist/languages/types.d.ts +9 -1
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/tools-cli.d.ts +16 -1
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +69 -6
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/templates/.claude/rules/java.md +11 -0
- package/templates/.claude/rules/ruby.md +11 -0
- package/templates/configs/java/README.md +6 -0
- package/templates/configs/ruby/README.md +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,345 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.4.6] - 2026-05-07
|
|
11
|
+
|
|
12
|
+
### Added — Ruby language pack (Phase 10k.2)
|
|
13
|
+
|
|
14
|
+
8th language pack, fully dynamic outside the JVM family. Stress-tests
|
|
15
|
+
the LP-recipe (v3) on a paradigm distinct from Java/Kotlin. Detection
|
|
16
|
+
is source-presence-driven (G9 — requires `.rb` files within depth 5,
|
|
17
|
+
not bare `Gemfile`).
|
|
18
|
+
|
|
19
|
+
All 5 capabilities wired:
|
|
20
|
+
|
|
21
|
+
- **imports** — `require` / `require_relative` / `autoload :Sym, 'path'`
|
|
22
|
+
extraction. File-level resolver no-op (Ruby's `$LOAD_PATH` + Zeitwerk
|
|
23
|
+
+ metaprogramming make resolution fundamentally best-effort; mirrors
|
|
24
|
+
rust/kotlin/csharp/java pattern). Best-effort contract documented
|
|
25
|
+
in pack source.
|
|
26
|
+
- **testFramework** — Gemfile / Gemfile.lock substring scan with
|
|
27
|
+
precedence rspec → minitest → test-unit. Glob-count fallback
|
|
28
|
+
(`*_spec.rb` vs `*_test.rb` / `test_*.rb`) when no Gemfile exists.
|
|
29
|
+
- **coverage** — SimpleCov via `coverage/.resultset.json` (canonical)
|
|
30
|
+
→ `coverage/coverage.json` (simplecov-json formatter) → null.
|
|
31
|
+
Multi-suite resultset handled via per-line max-union (matches
|
|
32
|
+
SimpleCov's own merge semantics).
|
|
33
|
+
- **lint** — RuboCop `--format json`. Severity map: fatal→critical,
|
|
34
|
+
error→high, warning→medium, convention/refactor→low.
|
|
35
|
+
- **depVulns** — osv-scanner against Gemfile.lock with `RubyGems`
|
|
36
|
+
ecosystem filter. Routes through the cross-pack SSOT (see
|
|
37
|
+
Architecture below). bundler-audit deliberately not used — its JSON
|
|
38
|
+
is unstable upstream.
|
|
39
|
+
|
|
40
|
+
`licenses` deliberately omitted — no canonical pure-CLI license tool
|
|
41
|
+
for RubyGems analogous to pip-licenses.
|
|
42
|
+
|
|
43
|
+
Cross-ecosystem matrix wired with the standard 4 benchmark fixtures
|
|
44
|
+
(Secrets/BadLint/Duplications/UntestedModule — G4-scaffolded). New
|
|
45
|
+
`Ruby > osv-scanner surfaces nokogiri@1.10.0 advisories from
|
|
46
|
+
Gemfile.lock` benchmark added with a pinned-vulnerable Gemfile.lock
|
|
47
|
+
(nokogiri 1.10.0 + rack 2.0.1 + loofah 2.2.0). CI gains
|
|
48
|
+
`ruby/setup-ruby@v1` + `gem install rubocop`.
|
|
49
|
+
|
|
50
|
+
### Architecture
|
|
51
|
+
|
|
52
|
+
- **`gemPackage` registry probe field** — extends `ToolDefinition`
|
|
53
|
+
for library-only Ruby gems (mirrors the existing `nodePackage`
|
|
54
|
+
field). Probes via `gem list -i <name>`; used by SimpleCov which
|
|
55
|
+
is required from `spec_helper.rb` rather than invoked as a CLI
|
|
56
|
+
command. Future ecosystems with library-only tools follow the same
|
|
57
|
+
pattern. Surfaced when `tools install simplecov` falsely reported
|
|
58
|
+
"already installed" because the prior `binaries: ['ruby']`
|
|
59
|
+
workaround couldn't distinguish "ruby present" from "simplecov
|
|
60
|
+
gem installed."
|
|
61
|
+
- **`findInGemBin` registry probe step** — discovers Ruby gem bin
|
|
62
|
+
directories dynamically via `gem env executable_directory` +
|
|
63
|
+
`Gem.user_dir + "/bin"`. Memoized once per process (~150ms one-time
|
|
64
|
+
cost). Handles ruby version differences (3.2.0 vs 3.3.0), install
|
|
65
|
+
modes (system vs `--user-install`), and package managers (apt vs
|
|
66
|
+
brew vs rbenv) with no static probePaths needed.
|
|
67
|
+
- **`osv-scanner-deps.ts` SSOT generalization** (renamed from
|
|
68
|
+
`osv-scanner-maven.ts`). `parseOsvScannerFindings(raw, ecosystem)`
|
|
69
|
+
and `gatherOsvScannerDepVulnsResult(cwd, source, ecosystem,
|
|
70
|
+
manifestCandidates)` now take ecosystem + manifest candidates as
|
|
71
|
+
parameters. Kotlin/Java pass `'Maven'` + Maven manifests; Ruby
|
|
72
|
+
passes `'RubyGems'` + `['Gemfile.lock']`. CLAUDE.md rule #2 —
|
|
73
|
+
fork-and-edit avoided. Same dedup semantics, same CVSS resolution
|
|
74
|
+
path.
|
|
75
|
+
|
|
76
|
+
### Recipe v3 (final installment) — closed
|
|
77
|
+
|
|
78
|
+
- **G4** — scaffolder writes templated benchmark fixtures with
|
|
79
|
+
per-language syntax tokens (PascalCase vs snake_case filenames,
|
|
80
|
+
comment markers, AKIA constant placement). Saves ~30 min per new
|
|
81
|
+
pack. Languages without a profile fall back to TODO stubs.
|
|
82
|
+
- **G6** — scaffolder appends `[Unreleased]` CHANGELOG stub on
|
|
83
|
+
`npm run new-lang`. Idempotent. Forces release-notes thinking at
|
|
84
|
+
scaffold time, not ship-tag day.
|
|
85
|
+
- **G1** — class-wide gate parser robustness audit. Auto-derived
|
|
86
|
+
language lists in `check-architecture.sh` (LP-A1/A2/A3 patterns no
|
|
87
|
+
longer drift as new packs land). Self-test pattern documented:
|
|
88
|
+
every gate parsing TS declarations exits 1 with explicit failure
|
|
89
|
+
when its parser produces an empty list. Surfaced its own bug —
|
|
90
|
+
the scaffolder's `LANGUAGES` registry update produced a double
|
|
91
|
+
comma under Prettier multi-line shape; fixed in the same series.
|
|
92
|
+
|
|
93
|
+
Three deferred items carried forward to v4 with explicit trigger
|
|
94
|
+
conditions: G2-Opt2 typed-null capability (Swift consumer), G3
|
|
95
|
+
BENCHMARK_LANGUAGES auto-edit (matrix > 8 packs), G7 pre-commit hook
|
|
96
|
+
polish (multi-gate diagnosis cost).
|
|
97
|
+
|
|
98
|
+
### Recipe v4 (working doc opened)
|
|
99
|
+
|
|
100
|
+
`tmp/recipe-v4-working-doc.md` (gitignored, ephemeral). Surfaced
|
|
101
|
+
during 10k.2:
|
|
102
|
+
|
|
103
|
+
- **G_v4_1** — scaffolder TEST_TEMPLATE conflates source-text vs
|
|
104
|
+
tool-output parsers. Future contributors must re-derive the
|
|
105
|
+
convention by reading existing packs.
|
|
106
|
+
- **G_v4_2** — TOOL_DEFS probe assumed CLI binary; library-only gems
|
|
107
|
+
lacked detection. **DELIVERED in 10k.2.4** via the new `gemPackage`
|
|
108
|
+
field.
|
|
109
|
+
- **G_v4_3** — SimpleCov HTML-only state currently indistinguishable
|
|
110
|
+
from "tool didn't run." Outcome enum extension proposed.
|
|
111
|
+
|
|
112
|
+
Recipe-v4 is paying for itself: G_v4_2 surfaced and shipped in the
|
|
113
|
+
same session; G_v4_1 caught in a meta-conversation about test
|
|
114
|
+
discipline.
|
|
115
|
+
|
|
116
|
+
### Defects
|
|
117
|
+
|
|
118
|
+
- **D002** (Python subprocess fallback) — Ruby pack has no analog
|
|
119
|
+
(osv-scanner reads Gemfile.lock directly, no `bundle env`/`bundle
|
|
120
|
+
show` introspection ladder). Stays accepted-deferred.
|
|
121
|
+
- **D017** (NEW) — `dxkit bom <large-project> > file.json` produces
|
|
122
|
+
0-byte output intermittently on vyuhlabs-platform (1700+ deps).
|
|
123
|
+
EXIT=0, no error. Workaround: pipe through `cat`. Hypothesis:
|
|
124
|
+
Node stdout buffer doesn't drain before process exit when output
|
|
125
|
+
is large + stdout is a regular file. NOT a 2.4.6 ship blocker —
|
|
126
|
+
workaround exists, intermittent, doesn't affect interactive use.
|
|
127
|
+
Investigate in a follow-up commit.
|
|
128
|
+
|
|
129
|
+
### Pre-ship regression — clean
|
|
130
|
+
|
|
131
|
+
Sequential dxkit reports captured against dxkit-on-dxkit and
|
|
132
|
+
vyuhlabs-platform; 12 reports each diffed against the 2.4.5-fixed
|
|
133
|
+
baseline. Zero code regressions detected. All deltas explained:
|
|
134
|
+
|
|
135
|
+
- dxkit/test-gaps 16 → 32 — better data (Istanbul vs import-graph
|
|
136
|
+
fallback in baseline).
|
|
137
|
+
- dxkit/vulnerabilities +3 gitleaks — expected (G4 AKIA placeholder
|
|
138
|
+
strings in scaffolder source).
|
|
139
|
+
- platform/vulnerabilities -3 — platform-side refactor of
|
|
140
|
+
user.controller.ts (not dxkit).
|
|
141
|
+
- BoM advisory deltas — OSV.dev upstream churn (8 days since 2.4.5
|
|
142
|
+
ship).
|
|
143
|
+
|
|
144
|
+
Confidence: high. 1025 tests passing, full suite + all gates green
|
|
145
|
+
at every commit in the 10-commit branch.
|
|
146
|
+
|
|
147
|
+
## [2.4.5] - 2026-04-29
|
|
148
|
+
|
|
149
|
+
### Fixed (high-severity, discovered during 2.4.5 pre-ship regression)
|
|
150
|
+
|
|
151
|
+
- **`osv-scanner fix` was THREE bugs in one** (5-month-old bug shipped
|
|
152
|
+
since 2.4.0 / Phase 10h.6). osv-scanner v2's `fix` subcommand invokes
|
|
153
|
+
`npm install` internally to compute upgrade patches. dxkit was
|
|
154
|
+
invoking it in the user's project cwd, which caused all three of the
|
|
155
|
+
following:
|
|
156
|
+
|
|
157
|
+
1. **Data mutation** — `npm install` wipes / reinstalls the cwd's
|
|
158
|
+
`node_modules` (often with `--legacy-peer-deps` fallback when
|
|
159
|
+
peer-deps don't resolve cleanly). Visible to users running
|
|
160
|
+
back-to-back commands: `dxkit vulnerabilities` followed by `npm
|
|
161
|
+
test` or any other step depending on stable `node_modules` would
|
|
162
|
+
fail cryptically. Discovered when dxkit-on-dxkit crashed mid-run
|
|
163
|
+
with `Cannot find module 'hosted-git-info'`.
|
|
164
|
+
|
|
165
|
+
2. **Process orphan leak** — osv-scanner's `npm install` grandchildren
|
|
166
|
+
outlived dxkit's 120s `execSync` budget. `execSync(..., {timeout})`
|
|
167
|
+
SIGTERMs only the immediate child; npm install + its node-package
|
|
168
|
+
subprocesses orphaned to PID 1 and kept eating CPU/memory until
|
|
169
|
+
they finished or the shell exited. Each `dxkit vulnerabilities`
|
|
170
|
+
invocation could leak 1-3 orphans; in CI this polluted subsequent
|
|
171
|
+
steps.
|
|
172
|
+
|
|
173
|
+
3. **Silent BoM under-reporting** — when osv-scanner's npm install
|
|
174
|
+
left a partially-broken `node_modules` (peer-dep mismatches that
|
|
175
|
+
`--legacy-peer-deps` couldn't fully resolve), dxkit's BoM
|
|
176
|
+
aggregator subsequently couldn't enumerate the affected
|
|
177
|
+
dependencies. Root-project deps got silently dropped from the
|
|
178
|
+
BoM. On dxkit-on-dxkit comparison, 2.4.4 reported only 7 BoM
|
|
179
|
+
entries (sub-fixture deps) vs 2.4.5's 24 (sub-fixtures + dxkit's
|
|
180
|
+
own 17 root deps including `hosted-git-info`, `eslint`,
|
|
181
|
+
`typescript`, etc.). `unfilteredTotalPackages` 22 → 353. The
|
|
182
|
+
analyzed project's own deps were missing from BoM whenever the
|
|
183
|
+
bug hit. Most repos that resolve peer-deps cleanly under
|
|
184
|
+
`--legacy-peer-deps` weren't affected (vyuhlabs-platform's BoM
|
|
185
|
+
stayed correct at 145 packages); repos with subtle peer-dep
|
|
186
|
+
issues silently lost root-dep enumeration.
|
|
187
|
+
|
|
188
|
+
**Fix** (split across 10k.1.5b and 10k.1.5c):
|
|
189
|
+
|
|
190
|
+
- **Temp-dir isolation (10k.1.5b)**: stage `package.json` +
|
|
191
|
+
`package-lock.json` in a fresh temp dir before invoking osv-scanner,
|
|
192
|
+
discard the temp dir after parsing JSON output. Project's tree is
|
|
193
|
+
now read-only treatment (the contract dxkit's analyzers always
|
|
194
|
+
claimed). Stops bug #1 (mutation) and #3 (BoM under-reporting,
|
|
195
|
+
since `node_modules` no longer gets clobbered).
|
|
196
|
+
|
|
197
|
+
- **Process-group SIGKILL on timeout (10k.1.5c)**: new
|
|
198
|
+
`runDetached(cmd, args, opts)` helper in `src/analyzers/tools/runner.ts`
|
|
199
|
+
spawns the child in its own process group via
|
|
200
|
+
`spawn({ detached: true })` and `process.kill(-pid, 'SIGKILL')` on
|
|
201
|
+
timeout — kills grandchildren atomically. Stops bug #2 (orphan
|
|
202
|
+
leak). Reusable for any future tool that may fork grandchildren
|
|
203
|
+
(PMD's JVM, mvn, gradle).
|
|
204
|
+
|
|
205
|
+
Regression tests added: `test/osv-scanner-fix.test.ts` for the
|
|
206
|
+
isolation contract; `test/runner.test.ts` for the process-group
|
|
207
|
+
group-kill semantics (sleep-30-grandchild + 200ms timeout asserts
|
|
208
|
+
elapsed < 2s — would block 30s if process-group regressed). Caught
|
|
209
|
+
by the discipline the user pushed for: "never ship broken;
|
|
210
|
+
understand the root cause and fix properly". The discipline was
|
|
211
|
+
validated end-to-end — the same scan that found bug #1 also
|
|
212
|
+
surfaced #2 and #3 once we knew where to look.
|
|
213
|
+
|
|
214
|
+
**Forensic evidence preserved** at
|
|
215
|
+
`tmp/regression/2.4.4/dxkit/bom.json` (gitignored — 2.4.4 baseline
|
|
216
|
+
with under-reported BoM) vs `tmp/regression/2.4.5-fixed/dxkit/bom.json`
|
|
217
|
+
(full enumeration after the fix).
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
Phase 10k.1 — Java language pack (recipe stress test #1, JVM-cousin
|
|
222
|
+
shape). 7th language pack lands the cross-ecosystem matrix at
|
|
223
|
+
**8 active language packs** including Java with full capability
|
|
224
|
+
coverage. Recipe v3 makes substantial progress (G2 + G5 + G9
|
|
225
|
+
delivered; G1 partial; G4/G6/G7 deferred). D008 + D011 + a vitest
|
|
226
|
+
hookTimeout flake closed in pre-flight commits.
|
|
227
|
+
|
|
228
|
+
No breaking changes for end users. New depVulns/lint/coverage/
|
|
229
|
+
imports/testFramework data on Java/Maven projects; existing analyzer
|
|
230
|
+
commands produce identical output for non-Java projects.
|
|
231
|
+
|
|
232
|
+
### Added
|
|
233
|
+
|
|
234
|
+
- **Java language pack** (Phase 10k.1) with five capability providers:
|
|
235
|
+
- **depVulns** via `osv-scanner` against `pom.xml` /
|
|
236
|
+
`gradle.lockfile` / `gradle/verification-metadata.xml`.
|
|
237
|
+
Implementation lives in the new shared
|
|
238
|
+
`src/analyzers/tools/osv-scanner-maven.ts` module that both
|
|
239
|
+
kotlin and java packs delegate to (CLAUDE.md rule #2 SSOT).
|
|
240
|
+
- **lint** via PMD 7.x with `rulesets/java/quickstart.xml`.
|
|
241
|
+
`parsePmdOutput` tiers PMD's 1-5 priority into dxkit's
|
|
242
|
+
critical/high/medium/low scheme via `mapPmdRuleSeverity`.
|
|
243
|
+
Real-fixture-driven parser tests against captured PMD 7.24.0
|
|
244
|
+
output at `test/fixtures/raw/java/pmd-output.json`.
|
|
245
|
+
- **coverage** via JaCoCo XML — reuses the kotlin pack's parser
|
|
246
|
+
unchanged (the parser was source-language-agnostic from day 1
|
|
247
|
+
and is now hosted in `src/analyzers/tools/jacoco.ts`). Path
|
|
248
|
+
candidates extended for Maven (`target/site/jacoco/jacoco.xml`,
|
|
249
|
+
`target/site/jacoco-aggregate/jacoco.xml`) alongside the existing
|
|
250
|
+
Gradle paths.
|
|
251
|
+
- **imports** via regex extraction over `import [static]
|
|
252
|
+
<fqn>(.<Class>|.*)?;` after stripping line + block comments.
|
|
253
|
+
Best-effort resolution (matches kotlin/rust pack semantics —
|
|
254
|
+
Java package paths don't 1:1 map to filesystem paths in all
|
|
255
|
+
build layouts).
|
|
256
|
+
- **testFramework** via build-file substring scan of pom.xml +
|
|
257
|
+
build.gradle{,.kts} for canonical artifact names. Order honors
|
|
258
|
+
mixed-state migration: junit-jupiter > spock > testng > junit4.
|
|
259
|
+
- **PMD (`pmd`) in TOOL_DEFS**. PMD 7.x as the canonical Java linter,
|
|
260
|
+
with brew on macOS / GitHub releases zip on Linux / scoop on
|
|
261
|
+
Windows. CI install step added.
|
|
262
|
+
- **Java cross-ecosystem benchmark fixture**
|
|
263
|
+
(`test/fixtures/benchmarks/java/`) — five files (Secrets.java with
|
|
264
|
+
fake AWS key, BadLint.java with PMD violations, Duplications.java
|
|
265
|
+
with jscpd clone pair, UntestedModule.java for filename-match
|
|
266
|
+
test-gap, pom.xml with `commons-collections:3.2.1` for the original
|
|
267
|
+
"Mad Gadget" CVE-2015-7501 deserialization advisory + log4j-core
|
|
268
|
+
for Log4Shell). Matrix wins on all four dimensions (secret/dup/
|
|
269
|
+
test-gaps run unconditionally; lint matrix activates with
|
|
270
|
+
`requires: 'pmd'`).
|
|
271
|
+
- **`scripts/check-docs-coverage.sh` (Recipe v3 / G5).** Pre-commit +
|
|
272
|
+
CI gate that asserts every `LanguageId` in `src/languages/index.ts`
|
|
273
|
+
appears in canonical doc anchors (CLAUDE.md path glob; README.md
|
|
274
|
+
ecosystem coverage table row count + ID substring mention). Closes
|
|
275
|
+
the kotlin-PR-#23 follow-up class of failure where a pack ships in
|
|
276
|
+
main but docs go stale because nobody remembered to update them.
|
|
277
|
+
- **`vyuh-dxkit tools install <name>` and `--all` (D011).** Single-tool
|
|
278
|
+
install for cross-stack development (e.g. installing `spotbugs` /
|
|
279
|
+
`pmd` on a Node-only repo); `--all` enumerates every TOOL_DEFS
|
|
280
|
+
entry. Unknown names fail loudly with an "Unknown tool" message +
|
|
281
|
+
pointer to `tools list`. Used during this phase's PMD harvest.
|
|
282
|
+
- **CLAUDE.md merge-strategy guidance**. Codifies when PRs should
|
|
283
|
+
squash-merge (single logical unit) vs rebase-merge (multiple
|
|
284
|
+
independently-meaningful commits with prose-quality messages —
|
|
285
|
+
what this PR did to preserve D008/D011/G2/G5/G9 + 5 capability
|
|
286
|
+
commits as discrete history).
|
|
287
|
+
|
|
288
|
+
### Refactored (architectural improvement)
|
|
289
|
+
|
|
290
|
+
- **`src/analyzers/tools/jacoco.ts`** — extracted from kotlin pack
|
|
291
|
+
in 10k.1.2. Owns `parseJaCoCoXml`, `findJaCoCoReport`,
|
|
292
|
+
`gatherJaCoCoCoverageResult`. Both JVM packs delegate. Parser was
|
|
293
|
+
always source-language-agnostic; just relocating to the right home.
|
|
294
|
+
- **`src/analyzers/tools/osv-scanner-maven.ts`** — extracted from
|
|
295
|
+
kotlin pack in 10k.1.4. Same pattern. Owns
|
|
296
|
+
`parseOsvScannerMavenFindings` + `gatherOsvScannerMavenDepVulnsResult`.
|
|
297
|
+
Both JVM packs delegate. Parser was already ecosystem-filtered to
|
|
298
|
+
Maven (not Kotlin-coupled); just relocating.
|
|
299
|
+
- **Capabilities contract is genuinely optional (Recipe v3 / G2).**
|
|
300
|
+
`capabilities-contract.test.ts:117` previously asserted
|
|
301
|
+
`providers.length === LANGUAGES.length` for the depVulns capability,
|
|
302
|
+
forcing packs without depVulns to register null-stub providers.
|
|
303
|
+
Now: `expect(providers.length).toBe(LANGUAGES.filter((l) =>
|
|
304
|
+
l.capabilities?.depVulns).length)` — precise contract, packs can
|
|
305
|
+
omit. Unblocks Swift's eventual graceful-degradation pattern.
|
|
306
|
+
Java's null-stub from intermediate commits retired.
|
|
307
|
+
- **`detectJava` is source-presence-driven, not manifest-driven
|
|
308
|
+
(Recipe v3 / G9).** Initial detection activated on bare `pom.xml`,
|
|
309
|
+
which broke kotlin's matrix lint test because kotlin's fixture has
|
|
310
|
+
pom.xml (for osv-scanner Maven). Both packs activated → lintTool
|
|
311
|
+
came back as `'detekt, pmd'`. Fix: require either `src/main/java/`
|
|
312
|
+
directory OR actual `.java` source within depth 5. Mixed Kotlin +
|
|
313
|
+
Java projects still activate both packs (correct). G9 noted as a
|
|
314
|
+
scaffolder-template fix candidate — the scaffolded `detect()` stub
|
|
315
|
+
currently suggests "manifest signals" which is the bug we just hit.
|
|
316
|
+
|
|
317
|
+
### Fixed
|
|
318
|
+
|
|
319
|
+
- **D008 — stale test-fixture types + missing contract test.** 21 type
|
|
320
|
+
errors surfaced when `tsc --noEmit` runs against `src + test`
|
|
321
|
+
together (`DimensionScore.details` / `DuplicationStats.totalLines`
|
|
322
|
+
field drift; `DepVulnFinding.source` → renamed to `.tool`;
|
|
323
|
+
`mapLintSeverity` contract was narrower than every impl reality;
|
|
324
|
+
spread-duplication cleanups). Adds `tsconfig.test.json` +
|
|
325
|
+
`npm run typecheck:test` + wires into `.husky/pre-push` and
|
|
326
|
+
`.github/workflows/ci.yml`. The contract test paid for itself in the
|
|
327
|
+
same session — caught a `Record<LanguageId, boolean>` literal
|
|
328
|
+
regression introduced 30 minutes earlier.
|
|
329
|
+
- **`scripts/check-cross-ecosystem-coverage.sh` Prettier robustness
|
|
330
|
+
(Recipe v3 / G1, partial).** Auto-derive parser assumed single-line
|
|
331
|
+
`LANGUAGES = [...]`. Prettier reformatted to multi-line at the 7th
|
|
332
|
+
entry (line-length budget) and the gate parsed 0 entries silently.
|
|
333
|
+
Switched to awk block extract — robust to both shapes. One
|
|
334
|
+
instance fixed; class-wide audit of similar parsers deferred.
|
|
335
|
+
- **Vitest `hookTimeout` default of 10s caused C# `beforeAll` flakes.**
|
|
336
|
+
`dotnet restore` against a cold NuGet cache routinely takes 18-44s
|
|
337
|
+
on WSL2. Now matches `testTimeout` at 180s.
|
|
338
|
+
|
|
339
|
+
### Phase 10k roadmap
|
|
340
|
+
|
|
341
|
+
After 10k.1 (Java) ships in 2.4.5, **10k.2 (Ruby) ships in 2.4.6** as
|
|
342
|
+
recipe stress test #2 — fully dynamic language outside the JVM family.
|
|
343
|
+
Then **2.5.0 (Phase 10i — fingerprints + exec summary across 8-language
|
|
344
|
+
matrix)**. Phase 10j.2 (Swift/iOS) is **deferred to post-10rr / pre-3.0.0
|
|
345
|
+
opportunistic slot** because Linux/WSL2 development can't validate the
|
|
346
|
+
xcodeproj-shape majority without macOS access. See
|
|
347
|
+
`tmp/phase-10k-backend-langs-roadmap.md` for the full phase plan.
|
|
348
|
+
|
|
10
349
|
## [2.4.4] - 2026-04-27
|
|
11
350
|
|
|
12
351
|
Phase 10j.1 — first mobile language pack (Kotlin/Android), Recipe v2
|
package/README.md
CHANGED
|
@@ -32,6 +32,14 @@ npx @vyuhlabs/dxkit init --full --yes # everything: DX + quality + hooks
|
|
|
32
32
|
|
|
33
33
|
The two modes are complementary. The analyzers run anywhere; the scaffolder writes `.claude/` so Claude Code and other agents have project-specific context and slash commands that delegate to the same analyzers.
|
|
34
34
|
|
|
35
|
+
> **Already installed dxkit globally? Upgrade explicitly.** `npx @vyuhlabs/dxkit@<version>` resolves the `vyuh-dxkit` binary off PATH first — if you previously ran `npm install -g @vyuhlabs/dxkit`, npx silently uses that older global binary regardless of the `@<version>` you specified. This is npx behavior, not a dxkit bug. To pick up the latest fixes (e.g. the 2.4.5 osv-scanner-fix data-mutation fix), run:
|
|
36
|
+
>
|
|
37
|
+
> ```bash
|
|
38
|
+
> npm install -g @vyuhlabs/dxkit@latest
|
|
39
|
+
> # or, if you don't need a global install, remove the old one and rely on npx:
|
|
40
|
+
> npm uninstall -g @vyuhlabs/dxkit
|
|
41
|
+
> ```
|
|
42
|
+
|
|
35
43
|
---
|
|
36
44
|
|
|
37
45
|
## Analyzer CLI (`vyuh-dxkit <command>`)
|
|
@@ -45,7 +53,7 @@ Seven deterministic analyzers. Each emits a markdown report to `.dxkit/reports/`
|
|
|
45
53
|
| `test-gaps` | Coverage artifact → import-graph → filename (strongest wins) | <1s | `.dxkit/reports/test-gaps-<date>.md` |
|
|
46
54
|
| `quality` | Slop score + jscpd duplication + eslint/ruff + hygiene | 5–15s | `.dxkit/reports/quality-review-<date>.md` |
|
|
47
55
|
| `dev-report` | Commits, contributors, hot files, velocity, conventional % | <1s | `.dxkit/reports/developer-report-<date>.md` |
|
|
48
|
-
| `licenses` | Dependency license inventory across every active pack (TS
|
|
56
|
+
| `licenses` | Dependency license inventory across every active pack (TS, Python, Go, Rust, C#; Kotlin + Java omitted — no canonical CLI license tool for Maven/Gradle ecosystems) | 5–20s | `.dxkit/reports/licenses-<date>.md` |
|
|
49
57
|
| `bom` | **Bill of Materials** — joins licenses + vulns per package, groups by top-level manifest dep (Snyk-style), enriches with CISA KEV + EPSS + reachability, ranks by composite risk score with "This Week's Triage" summary, aggregates nested sub-projects, `--filter=top-level` collapses transitive rows, 15-col XLSX | 10–40s | `.dxkit/reports/bom-<date>.{md,xlsx}` |
|
|
50
58
|
|
|
51
59
|
Plus a converter: `vyuh-dxkit to-xlsx <json-file>` renders any `licenses` or `bom` detailed JSON as the canonical 15-column XLSX.
|
|
@@ -77,7 +85,7 @@ Plus a converter: `vyuh-dxkit to-xlsx <json-file>` renders any `licenses` or `bo
|
|
|
77
85
|
|
|
78
86
|
Three signals, strongest wins for files it covers:
|
|
79
87
|
|
|
80
|
-
1. **Coverage artifact** — Istanbul JSON (TS/JS), `coverage.json` (Python), `coverage.out` (Go), cobertura XML (C#/Rust), `lcov.info` (Rust). If the tool measured a file, that decision is authoritative.
|
|
88
|
+
1. **Coverage artifact** — Istanbul JSON (TS/JS), `coverage.json` (Python), `coverage.out` (Go), cobertura XML (C#/Rust), `lcov.info` (Rust), JaCoCo XML (Kotlin). If the tool measured a file, that decision is authoritative.
|
|
81
89
|
2. **Import-graph reachability** — files transitively imported from an active test file (up to 3 hops). Rescues integration tests + behavior-named tests the filename matcher misses.
|
|
82
90
|
3. **Filename match** — last-resort basename similarity.
|
|
83
91
|
|
|
@@ -97,14 +105,17 @@ vyuh-dxkit tools install # interactive: prompts per tool
|
|
|
97
105
|
|
|
98
106
|
### Tools integrated
|
|
99
107
|
|
|
100
|
-
| Layer | Tools
|
|
101
|
-
| --------- |
|
|
102
|
-
| Universal | `cloc`, `gitleaks`, `semgrep`, `jscpd`, `graphify` (AST)
|
|
103
|
-
| Node / TS | `eslint`, `npm audit`, `osv-scanner` (fix planner), `@vitest/coverage-v8`
|
|
104
|
-
| Python | `ruff`, `pip-audit`, `coverage` (coverage.py)
|
|
105
|
-
| Go | `golangci-lint`, `govulncheck`
|
|
106
|
-
| Rust | `clippy`, `cargo-audit`, `cargo-llvm-cov`
|
|
107
|
-
| C# | `dotnet-format` (via SDK — formatter, not a linter)
|
|
108
|
+
| Layer | Tools |
|
|
109
|
+
| --------- | -------------------------------------------------------------------------- |
|
|
110
|
+
| Universal | `cloc`, `gitleaks`, `semgrep`, `jscpd`, `graphify` (AST) |
|
|
111
|
+
| Node / TS | `eslint`, `npm audit`, `osv-scanner` (fix planner), `@vitest/coverage-v8` |
|
|
112
|
+
| Python | `ruff`, `pip-audit`, `coverage` (coverage.py) |
|
|
113
|
+
| Go | `golangci-lint`, `govulncheck` |
|
|
114
|
+
| Rust | `clippy`, `cargo-audit`, `cargo-llvm-cov` |
|
|
115
|
+
| C# | `dotnet-format` (via SDK — formatter, not a linter) |
|
|
116
|
+
| Kotlin | `detekt` (Checkstyle XML), `osv-scanner` (Maven), JaCoCo XML |
|
|
117
|
+
| Java | `pmd` (PMD 7.x JSON), `osv-scanner` (Maven), JaCoCo XML reuse |
|
|
118
|
+
| Ruby | `rubocop` (JSON), `bundler-audit`, `osv-scanner` (Gemfile.lock), SimpleCov |
|
|
108
119
|
|
|
109
120
|
Install commands are platform-aware (brew on macOS, user-local install on Linux, winget/scoop on Windows). Tools install into `~/.local/bin` or similar user paths — no `sudo` required.
|
|
110
121
|
|
|
@@ -167,15 +178,18 @@ npm run new-lang kotlin "Kotlin (Android)"
|
|
|
167
178
|
|
|
168
179
|
This scaffolds the 7 recipe files (pack module, test stub, fixture skeleton, Claude rule file, template-config dir, plus `LanguageId` union extension and `LANGUAGES` registration). See [CONTRIBUTING.md](./CONTRIBUTING.md) for the full walkthrough. Recipe enforcement (architecture greps + contract tests + synthetic 6th-pack playbook) runs in pre-commit so packs that miss required metadata fail CI.
|
|
169
180
|
|
|
170
|
-
| Language | Detection
|
|
171
|
-
| -------- |
|
|
172
|
-
| TS / JS | `package.json`
|
|
173
|
-
| Python | `pyproject.toml`, `setup.py`, `*.py`
|
|
174
|
-
| Go | `go.mod`
|
|
175
|
-
| Rust | `Cargo.toml`
|
|
176
|
-
| C# | `*.csproj`, `*.sln`
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
| Language | Detection | Coverage import | Import-graph | Native tools | Lint severity tiers | Vuln severity tiers |
|
|
182
|
+
| -------- | ------------------------------------- | ------------------- | -------------------------------------------- | ----------------------------------- | ---------------------- | --------------------------------------------- |
|
|
183
|
+
| TS / JS | `package.json` | ✅ Istanbul | ✅ import/require/re-export | eslint, npm audit, vitest-coverage | ✅ ESLint rule ID | ✅ npm audit native |
|
|
184
|
+
| Python | `pyproject.toml`, `setup.py`, `*.py` | ✅ coverage.py | ✅ import/from | ruff, pip-audit, coverage | ✅ ruff code prefix | ✅ pip-audit + OSV.dev (CVSS v3+v4) |
|
|
185
|
+
| Go | `go.mod` | ✅ coverprofile | ✅ import blocks | golangci-lint, govulncheck | ✅ `FromLinter` family | ✅ govulncheck embedded + OSV.dev |
|
|
186
|
+
| Rust | `Cargo.toml` | ✅ lcov + cobertura | ⚠️ use statements, extracted only¹ | clippy, cargo-audit, cargo-llvm-cov | ✅ clippy group | ✅ cargo-audit native |
|
|
187
|
+
| C# | `*.csproj`, `*.sln` | ✅ cobertura XML | ⚠️ using declarations, extracted only¹ | dotnet-format (formatter) | ❌ (no linter yet) | ✅ dotnet list --vulnerable |
|
|
188
|
+
| Kotlin | gradle/`*.gradle{.kts,}`, `*.kt` | ✅ JaCoCo XML | ⚠️ import statements, extracted only¹ | detekt, osv-scanner (Maven) | ✅ detekt severity | ✅ osv-scanner + OSV.dev (Maven) |
|
|
189
|
+
| Java | `pom.xml`, `src/main/java/`, `*.java` | ✅ JaCoCo XML | ⚠️ import statements, extracted only¹ | PMD, osv-scanner (Maven) | ✅ PMD priority tiers | ✅ osv-scanner + OSV.dev (Maven) |
|
|
190
|
+
| Ruby | `*.rb` | ✅ SimpleCov JSON | ⚠️ require/require_relative, extracted only¹ | rubocop, bundler-audit, osv-scanner | ✅ rubocop severity | ✅ bundler-audit + osv-scanner (Gemfile.lock) |
|
|
191
|
+
|
|
192
|
+
¹ Rust, C#, Kotlin, Java, and Ruby packs populate `imports.extracted` but the file-level resolver is a no-op — Rust's `use` paths, C#'s `using` namespaces, Kotlin's and Java's `import` package paths, and Ruby's dynamic `require` semantics don't map 1:1 to source files. Downstream analyses that need an edge graph (reachability for dep-vulns, import-graph credit for test-gaps) degrade to conservative defaults for these five languages. Resolvers are planned; see Phase 10i-L.2 in the roadmap.
|
|
179
193
|
|
|
180
194
|
✅ full support. Multi-language repos fully supported — every detected language's tools run, and dep-vuln counts aggregate across all language packs via the `depVulns` capability (pip-audit findings don't silently replace npm-audit ones).
|
|
181
195
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AAErE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CA0GzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AAErE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CA0GzB;AA0BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqFpF"}
|
|
@@ -164,6 +164,8 @@ function coverageSourceLabel(source, file) {
|
|
|
164
164
|
return `from ${file ?? 'lcov.info'}`;
|
|
165
165
|
case 'jacoco':
|
|
166
166
|
return `from ${file ?? 'jacocoTestReport.xml'}`;
|
|
167
|
+
case 'simplecov':
|
|
168
|
+
return `from ${file ?? 'coverage/.resultset.json'}`;
|
|
167
169
|
}
|
|
168
170
|
}
|
|
169
171
|
function formatTestGapsReport(report, elapsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,0CA6GC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* artifact exists or parsing fails; callers (tests analyzer) should
|
|
20
20
|
* treat a null return as "fall back to filename matching."
|
|
21
21
|
*/
|
|
22
|
-
export type CoverageSource = 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov' | 'jacoco';
|
|
22
|
+
export type CoverageSource = 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov' | 'jacoco' | 'simplecov';
|
|
23
23
|
export interface FileCoverage {
|
|
24
24
|
/** Project-relative path (normalized to forward slashes). */
|
|
25
25
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,GACN,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQxE;AAUD,8FAA8F;AAC9F,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AAkDH,oCAQC;AAWD,wBAEC;AAGD,gCAUC;AAlFD,+CAAwD;AACxD,0EAAoE;AAGpE,8CAAkD;AAkClD;;;;;;;;;GASG;AACI,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,SAAS,GAAyC,EAAE,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,IAAA,iCAAqB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,YAAY,EAAE,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAQ,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,qEAAqE;AACrE,kEAAkE;AAClE,oEAAoE;AACpE,kEAAkE;AAElE,8FAA8F;AAC9F,SAAgB,MAAM,CAAC,CAAS;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,SAAgB,UAAU,CAAC,CAAS,EAAE,GAAW;IAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QAClC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QAC3B,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type Coverage } from './coverage';
|
|
2
|
+
import type { CoverageResult } from '../../languages/capabilities/types';
|
|
3
|
+
/**
|
|
4
|
+
* Pure parser for JaCoCo's XML report (DTD: `report.dtd`). The structure:
|
|
5
|
+
*
|
|
6
|
+
* <report name="...">
|
|
7
|
+
* <package name="com/example">
|
|
8
|
+
* <class name="com/example/Foo" sourcefilename="Foo.kt">...</class>
|
|
9
|
+
* <sourcefile name="Foo.kt">
|
|
10
|
+
* <line nr="N" mi="..." ci="..." mb="..." cb="..."/>
|
|
11
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
12
|
+
* </sourcefile>
|
|
13
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
14
|
+
* </package>
|
|
15
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
16
|
+
* </report>
|
|
17
|
+
*
|
|
18
|
+
* Per-file coverage comes from `<sourcefile>` blocks: their LINE counter
|
|
19
|
+
* holds the file's missed/covered totals. Project-level total comes from
|
|
20
|
+
* the top-level `<counter type="LINE">` (last in the document).
|
|
21
|
+
*
|
|
22
|
+
* Path attribution joins `<package name>` (forward-slashed, JVM-style)
|
|
23
|
+
* with `<sourcefile name>` to produce the canonical relative path the
|
|
24
|
+
* downstream consumers expect (`com/example/Foo.kt` or
|
|
25
|
+
* `com/example/Foo.java`). JVM bytecode namespacing isn't 1:1 with
|
|
26
|
+
* on-disk source paths in multi-module projects — accepted limitation
|
|
27
|
+
* (matches C#'s cobertura attribution).
|
|
28
|
+
*
|
|
29
|
+
* Returns null when no `<counter type="LINE">` exists at the top level
|
|
30
|
+
* — that's JaCoCo's "no coverage data" signal, distinct from "0%
|
|
31
|
+
* coverage" (where the counter exists with covered=0).
|
|
32
|
+
*
|
|
33
|
+
* Language-agnostic: works for Kotlin (.kt), Java (.java), and any
|
|
34
|
+
* other JVM language whose JaCoCo output respects the `<package>` /
|
|
35
|
+
* `<sourcefile>` shape — `<sourcefile name>` carries the on-disk
|
|
36
|
+
* filename verbatim so the parser doesn't need to know the language.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseJaCoCoXml(raw: string, sourceFile: string, _cwd: string): Coverage | null;
|
|
39
|
+
/**
|
|
40
|
+
* Standard JaCoCo report locations across JVM build tools and project
|
|
41
|
+
* layouts:
|
|
42
|
+
*
|
|
43
|
+
* GRADLE (kotlin + java):
|
|
44
|
+
* - app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
45
|
+
* (Android default — `app` module, `jacocoTestReport` task)
|
|
46
|
+
* - build/reports/jacoco/test/jacocoTestReport.xml
|
|
47
|
+
* (plain JVM via the `jacoco` plugin's default `test` task)
|
|
48
|
+
* - build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
49
|
+
* (multi-module aggregate; many builds rename the task)
|
|
50
|
+
*
|
|
51
|
+
* MAVEN (java):
|
|
52
|
+
* - target/site/jacoco/jacoco.xml
|
|
53
|
+
* (default Maven JaCoCo plugin — single-module Java)
|
|
54
|
+
* - target/site/jacoco-aggregate/jacoco.xml
|
|
55
|
+
* (Maven multi-module aggregate via jacoco-maven-plugin's
|
|
56
|
+
* `report-aggregate` goal)
|
|
57
|
+
*
|
|
58
|
+
* FALLBACKS:
|
|
59
|
+
* - jacocoTestReport.xml (top-level — fixture / direct path)
|
|
60
|
+
* - jacoco.xml (top-level — Maven fixture / direct path)
|
|
61
|
+
*
|
|
62
|
+
* Returns the first existing path, relative to cwd. Conservative
|
|
63
|
+
* priority: most specific build-tool conventions first, root
|
|
64
|
+
* fallbacks last.
|
|
65
|
+
*/
|
|
66
|
+
export declare function findJaCoCoReport(cwd: string): string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Locate + parse the JaCoCo XML report under cwd, wrap the result in a
|
|
69
|
+
* `CoverageResult` envelope. Identical glue across JVM packs (kotlin,
|
|
70
|
+
* java) — no language-specific dispatch needed because JaCoCo's
|
|
71
|
+
* `<sourcefile name>` carries the on-disk filename verbatim and the
|
|
72
|
+
* file extension survives intact through the parser. Both packs'
|
|
73
|
+
* `coverageProvider.gather` should delegate here.
|
|
74
|
+
*/
|
|
75
|
+
export declare function gatherJaCoCoCoverageResult(cwd: string): CoverageResult | null;
|
|
76
|
+
//# sourceMappingURL=jacoco.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jacoco.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/jacoco.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,QAAQ,EAA6B,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAmE7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAY7E"}
|