sourcecode 1.65.0__py3-none-any.whl → 1.66.0__py3-none-any.whl
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.
- sourcecode/__init__.py +1 -1
- sourcecode/migrate_check.py +105 -60
- sourcecode/serializer.py +54 -6
- {sourcecode-1.65.0.dist-info → sourcecode-1.66.0.dist-info}/METADATA +16 -4
- {sourcecode-1.65.0.dist-info → sourcecode-1.66.0.dist-info}/RECORD +8 -8
- {sourcecode-1.65.0.dist-info → sourcecode-1.66.0.dist-info}/WHEEL +0 -0
- {sourcecode-1.65.0.dist-info → sourcecode-1.66.0.dist-info}/entry_points.txt +0 -0
- {sourcecode-1.65.0.dist-info → sourcecode-1.66.0.dist-info}/licenses/LICENSE +0 -0
sourcecode/__init__.py
CHANGED
sourcecode/migrate_check.py
CHANGED
|
@@ -648,6 +648,19 @@ _BOOT3_MIGRATION_TARGETS: frozenset[str] = frozenset(
|
|
|
648
648
|
# upgrade. It is advisory only and must never sink a readiness dimension to 0 —
|
|
649
649
|
# reported as a separate hygiene metric, excluded from JDK-modernization scoring.
|
|
650
650
|
_BEST_PRACTICE_TARGETS: frozenset[str] = frozenset({"java_8_best_practice"})
|
|
651
|
+
|
|
652
|
+
# BUG #3: the migration dimensions that feed the readiness_score aggregate, in
|
|
653
|
+
# order. jdk_modernization is deliberately NOT here — it is orthogonal upkeep debt
|
|
654
|
+
# reported on its own axis, never folded into the migration headline.
|
|
655
|
+
_MIGRATION_DIMENSIONS: tuple[str, ...] = ("jakarta", "boot3", "hibernate")
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
def _parse_major(version: "Optional[str]") -> "Optional[int]":
|
|
659
|
+
"""Leading integer of a version string ('4.0.3' → 4); None when not parseable."""
|
|
660
|
+
if not version:
|
|
661
|
+
return None
|
|
662
|
+
m = re.match(r"\s*(\d+)", version)
|
|
663
|
+
return int(m.group(1)) if m else None
|
|
651
664
|
# Cap on total readiness deduction from JDK-modernization findings (medium/low),
|
|
652
665
|
# so reflection/date cleanups cannot collapse a jakarta-ready repo's headline.
|
|
653
666
|
_JDK_ADVISORY_DEDUCTION_CAP: int = 15
|
|
@@ -1170,6 +1183,9 @@ class MigrationReport:
|
|
|
1170
1183
|
# is excluded from the aggregate — it is never counted as 0. Maps dimension →
|
|
1171
1184
|
# {"applicable": bool, "score": int|None, "reason": str}.
|
|
1172
1185
|
applicable_dimensions: dict = field(default_factory=dict)
|
|
1186
|
+
# BUG #3: how readiness_score was derived (method + the exact applicable
|
|
1187
|
+
# dimension scores it aggregates) so the headline number is fully traceable.
|
|
1188
|
+
readiness_aggregate: dict = field(default_factory=dict)
|
|
1173
1189
|
blocking_count: int = 0
|
|
1174
1190
|
estimated_effort_days: float = 0.0
|
|
1175
1191
|
# Tri-state: True = Boot 2 confirmed, False = Boot 3+ confirmed,
|
|
@@ -1238,71 +1254,67 @@ class MigrationReport:
|
|
|
1238
1254
|
1 for f in main_findings if f.severity in ("critical", "high")
|
|
1239
1255
|
)
|
|
1240
1256
|
|
|
1241
|
-
# BUG #4 / #6: readiness deduction. FRAMEWORK blockers (jakarta / Boot3 /
|
|
1242
|
-
# Security — critical+high) are UNCAPPED so a genuinely blocked repo floors
|
|
1243
|
-
# at 0. Orthogonal JDK-modernization debt (SecurityManager, sun.*, reflection)
|
|
1244
|
-
# is advisory-CAPPED so it can never sink the framework headline. Best-practice
|
|
1245
|
-
# hygiene (java.util.Date) is EXCLUDED entirely — it blocks no version upgrade.
|
|
1246
|
-
fw = _BOOT3_MIGRATION_TARGETS
|
|
1247
|
-
fw_crit = _files_by_sev(main_findings, "critical", targets=fw)
|
|
1248
|
-
fw_high = _files_by_sev(main_findings, "high", targets=fw)
|
|
1249
|
-
fw_med = _files_by_sev(main_findings, "medium", targets=fw)
|
|
1250
|
-
fw_low = _files_by_sev(main_findings, "low", targets=fw)
|
|
1251
|
-
_jdk_exclude = fw | _BEST_PRACTICE_TARGETS
|
|
1252
|
-
jdk_crit = {f.source_file for f in main_findings
|
|
1253
|
-
if f.severity == "critical" and f.migration_target not in _jdk_exclude}
|
|
1254
|
-
jdk_high = {f.source_file for f in main_findings
|
|
1255
|
-
if f.severity == "high" and f.migration_target not in _jdk_exclude}
|
|
1256
|
-
jdk_med = {f.source_file for f in main_findings
|
|
1257
|
-
if f.severity == "medium" and f.migration_target not in _jdk_exclude}
|
|
1258
|
-
jdk_low = {f.source_file for f in main_findings
|
|
1259
|
-
if f.severity == "low" and f.migration_target not in _jdk_exclude}
|
|
1260
|
-
jdk_raw = len(jdk_crit) * 15 + len(jdk_high) * 8 + len(jdk_med) * 3 + len(jdk_low) * 1
|
|
1261
|
-
|
|
1262
|
-
deduction = (
|
|
1263
|
-
len(fw_crit) * 15
|
|
1264
|
-
+ len(fw_high) * 8
|
|
1265
|
-
+ len(fw_med) * 3
|
|
1266
|
-
+ min(len(fw_low) * 1, _LOW_SEVERITY_DEDUCTION_CAP)
|
|
1267
|
-
+ min(jdk_raw, _JDK_ADVISORY_DEDUCTION_CAP)
|
|
1268
|
-
)
|
|
1269
|
-
self.readiness_score = max(0, 100 - deduction)
|
|
1270
|
-
|
|
1271
1257
|
# Per-dimension readiness — independent severity-weighted scores (MAIN only).
|
|
1272
1258
|
self.jakarta_readiness = _dimension_score(main_findings, _JAKARTA_TARGETS)
|
|
1273
1259
|
self.boot3_readiness = _dimension_score(main_findings, _BOOT3_MIGRATION_TARGETS)
|
|
1274
1260
|
self.jdk_modernization = _dimension_score(main_findings, None)
|
|
1261
|
+
if not self.spring_present:
|
|
1262
|
+
self.boot3_readiness = 100
|
|
1275
1263
|
|
|
1276
|
-
# BUG #
|
|
1277
|
-
# repo is actually on Hibernate < 6.
|
|
1278
|
-
# 6
|
|
1279
|
-
#
|
|
1264
|
+
# ── BUG #2: Hibernate applicability — version-driven, never heuristic ────
|
|
1265
|
+
# The 5→6 axis is applicable ONLY when the repo is actually on Hibernate < 6.
|
|
1266
|
+
# resolved < 6 → applicable (rewrite score is a measurement)
|
|
1267
|
+
# resolved ≥ 6 → N/A (already migrated)
|
|
1268
|
+
# unresolved, Boot≥3 → N/A (Boot 3/4 BOM manages Hibernate ORM ≥6)
|
|
1269
|
+
# unresolved, Boot==2 → applicable (Boot 2 BOM manages Hibernate 5.x)
|
|
1270
|
+
# unresolved, no BOM → N/A, status "unresolved" (NEVER a heuristic number
|
|
1271
|
+
# that looks like a measurement on absent data)
|
|
1280
1272
|
hib = self.hibernate
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
if
|
|
1273
|
+
hib_detected = hib is not None and hib.detected
|
|
1274
|
+
boot_major = _parse_major(self.spring_boot_version_detected)
|
|
1275
|
+
_hibernate_applies = False
|
|
1276
|
+
_hib_score: Optional[int] = None
|
|
1277
|
+
hib_status = "not_detected"
|
|
1278
|
+
_hib_reason = "N/A — no Hibernate dependency or import detected"
|
|
1279
|
+
if hib_detected:
|
|
1280
|
+
if hib.version_confidence == "high":
|
|
1281
|
+
if hib.migration_applicable: # resolved major < 6
|
|
1282
|
+
_hibernate_applies, _hib_score = True, hib.readiness
|
|
1283
|
+
hib_status = "resolved_h5"
|
|
1284
|
+
_hib_reason = f"Hibernate 5→6 rewrite axis (resolved {hib.effective_version})"
|
|
1285
|
+
else: # resolved major ≥ 6
|
|
1286
|
+
hib_status = "managed_ge6"
|
|
1287
|
+
_hib_reason = (f"N/A — resolved Hibernate {hib.effective_version} (≥6); "
|
|
1288
|
+
f"no 5→6 migration pending")
|
|
1289
|
+
elif boot_major is not None and boot_major >= 3:
|
|
1290
|
+
hib_status = "managed_ge6"
|
|
1291
|
+
_hib_reason = (f"N/A — Hibernate version managed by Spring Boot "
|
|
1292
|
+
f"{self.spring_boot_version_detected} BOM (Hibernate ORM ≥6); "
|
|
1293
|
+
f"5→6 axis inapplicable")
|
|
1294
|
+
elif boot_major == 2:
|
|
1295
|
+
_hibernate_applies, _hib_score = True, hib.readiness
|
|
1296
|
+
hib_status = "managed_h5"
|
|
1297
|
+
_hib_reason = (f"Hibernate 5→6 rewrite axis (Hibernate 5.x managed by Spring "
|
|
1298
|
+
f"Boot {self.spring_boot_version_detected} BOM)")
|
|
1299
|
+
else:
|
|
1300
|
+
hib_status = "unresolved"
|
|
1301
|
+
_hib_reason = ("N/A — Hibernate version unresolved (not declared and no Spring "
|
|
1302
|
+
"Boot BOM to infer from); not penalized on absent data")
|
|
1303
|
+
# Top-level scalar: the rewrite score only when applicable; else 100 (nothing
|
|
1304
|
+
# pending) — never a heuristic penalty on an inapplicable/unresolved axis.
|
|
1305
|
+
self.hibernate_readiness = _hib_score if _hibernate_applies else 100
|
|
1306
|
+
# Headline blocker only on a DIRECTLY-resolved Hibernate-5 rewrite zone.
|
|
1307
|
+
if _hibernate_applies and hib is not None and hib.classification == "rewrite_zone" \
|
|
1288
1308
|
and hib.version_confidence == "high":
|
|
1289
|
-
# Only a CONFIRMED Hibernate-5 rewrite zone earns the headline blocker.
|
|
1290
1309
|
self.headline_blocker = "hibernate_rewrite"
|
|
1291
1310
|
|
|
1292
|
-
# BUG #
|
|
1293
|
-
#
|
|
1294
|
-
#
|
|
1295
|
-
#
|
|
1296
|
-
#
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
if _hibernate_applies:
|
|
1300
|
-
_hib_reason = f"Hibernate 5→6 rewrite axis (detected {hib.effective_version or 'version unknown'})"
|
|
1301
|
-
elif hib is not None and hib.detected and not hib.migration_applicable:
|
|
1302
|
-
_hib_reason = (f"N/A — already on Hibernate {hib.version_major} "
|
|
1303
|
-
f"({hib.effective_version}); no 5→6 migration pending")
|
|
1304
|
-
else:
|
|
1305
|
-
_hib_reason = "N/A — no Hibernate dependency or import detected"
|
|
1311
|
+
# BUG #3: declare which dimensions apply, then derive readiness_score as a
|
|
1312
|
+
# DOCUMENTED aggregate over the applicable MIGRATION dimensions only. jakarta
|
|
1313
|
+
# is always applicable; boot3 only with Spring; hibernate only for a real
|
|
1314
|
+
# Hibernate < 6. jdk_modernization is an orthogonal upkeep axis (SecurityManager,
|
|
1315
|
+
# reflection, java.time) — reported but EXCLUDED from the headline so JDK debt
|
|
1316
|
+
# cannot sink a framework-complete repo. N/A dimensions carry score=None and
|
|
1317
|
+
# never enter the aggregate.
|
|
1306
1318
|
self.applicable_dimensions = {
|
|
1307
1319
|
"jakarta": {"applicable": True, "score": self.jakarta_readiness,
|
|
1308
1320
|
"reason": "javax→jakarta namespace migration"},
|
|
@@ -1314,14 +1326,44 @@ class MigrationReport:
|
|
|
1314
1326
|
else "N/A — no Spring usage detected (non-Spring stack)"),
|
|
1315
1327
|
},
|
|
1316
1328
|
"jdk_modernization": {"applicable": True, "score": self.jdk_modernization,
|
|
1317
|
-
"reason": "orthogonal JDK modernization debt"
|
|
1329
|
+
"reason": "orthogonal JDK modernization debt (excluded from "
|
|
1330
|
+
"the readiness_score aggregate)",
|
|
1331
|
+
"in_aggregate": False},
|
|
1318
1332
|
"hibernate": {
|
|
1319
1333
|
"applicable": _hibernate_applies,
|
|
1320
1334
|
"score": self.hibernate_readiness if _hibernate_applies else None,
|
|
1321
1335
|
"reason": _hib_reason,
|
|
1336
|
+
"status": hib_status,
|
|
1322
1337
|
},
|
|
1323
1338
|
}
|
|
1324
1339
|
|
|
1340
|
+
# ── BUG #3: aggregate invariant ─────────────────────────────────────────
|
|
1341
|
+
# readiness_score == min(score of every applicable migration dimension).
|
|
1342
|
+
# MIN (not mean): a migration is only as ready as its weakest applicable
|
|
1343
|
+
# axis. _MIGRATION_DIMENSIONS lists exactly which dimensions feed it; the
|
|
1344
|
+
# consistency invariant is asserted in finalize and covered by a unit test.
|
|
1345
|
+
agg_inputs = {
|
|
1346
|
+
name: self.applicable_dimensions[name]["score"]
|
|
1347
|
+
for name in _MIGRATION_DIMENSIONS
|
|
1348
|
+
if self.applicable_dimensions[name]["applicable"]
|
|
1349
|
+
}
|
|
1350
|
+
self.readiness_score = min(agg_inputs.values()) if agg_inputs else 100
|
|
1351
|
+
self.readiness_aggregate = {
|
|
1352
|
+
"method": "min",
|
|
1353
|
+
"inputs": agg_inputs,
|
|
1354
|
+
"excluded": ["jdk_modernization"],
|
|
1355
|
+
"note": ("readiness_score = min over applicable migration dimensions "
|
|
1356
|
+
"(jakarta / boot3 / hibernate). jdk_modernization is an orthogonal "
|
|
1357
|
+
"upkeep axis and is intentionally excluded."),
|
|
1358
|
+
}
|
|
1359
|
+
# Internal consistency guard — the headline cannot diverge from the dimensions
|
|
1360
|
+
# it claims to summarize (catches a future scorer change that breaks the model).
|
|
1361
|
+
if agg_inputs:
|
|
1362
|
+
assert self.readiness_score == min(agg_inputs.values()), (
|
|
1363
|
+
"readiness_score must equal min(applicable migration dimensions); "
|
|
1364
|
+
f"got {self.readiness_score} vs inputs {agg_inputs}"
|
|
1365
|
+
)
|
|
1366
|
+
|
|
1325
1367
|
# BUG #5: effort over MAIN findings only — N/A axes (Hibernate-6 phantom,
|
|
1326
1368
|
# test fixtures) no longer pad the estimate.
|
|
1327
1369
|
self.estimated_effort_days = round(
|
|
@@ -1375,10 +1417,13 @@ class MigrationReport:
|
|
|
1375
1417
|
"jdk_modernization": self.jdk_modernization,
|
|
1376
1418
|
"hibernate_readiness": self.hibernate_readiness,
|
|
1377
1419
|
"applicable_dimensions": self.applicable_dimensions,
|
|
1420
|
+
"readiness_aggregate": self.readiness_aggregate,
|
|
1378
1421
|
"readiness_note": (
|
|
1379
|
-
"readiness_score
|
|
1380
|
-
"(
|
|
1381
|
-
"
|
|
1422
|
+
"readiness_score = min over applicable MIGRATION dimensions "
|
|
1423
|
+
"(jakarta / boot3 / hibernate); see readiness_aggregate for the exact "
|
|
1424
|
+
"inputs. N/A dimensions are excluded (never counted as 0); "
|
|
1425
|
+
"jdk_modernization is orthogonal upkeep and is NOT in the aggregate. "
|
|
1426
|
+
"For decisions read the per-dimension breakdown + blocking_count."
|
|
1382
1427
|
),
|
|
1383
1428
|
"headline_blocker": self.headline_blocker,
|
|
1384
1429
|
"blocking_count": self.blocking_count,
|
sourcecode/serializer.py
CHANGED
|
@@ -291,17 +291,65 @@ _JAKARTA_RENAMED_NAMESPACES: tuple[str, ...] = (
|
|
|
291
291
|
)
|
|
292
292
|
|
|
293
293
|
|
|
294
|
+
# Permanent JDK / JSR javax.* namespaces. These are part of the Java SE platform
|
|
295
|
+
# (or standalone JCP specs) and were NEVER renamed to jakarta.* — Spring Boot 3/4
|
|
296
|
+
# still uses them under javax.*. They must be excluded from EVERY javax→jakarta
|
|
297
|
+
# detection rule (dependency coordinates AND import scanning). This is the single
|
|
298
|
+
# source of truth for the allowlist — do NOT re-implement prefix checks elsewhere.
|
|
299
|
+
# Counterpart in migrate_check._JAKARTA_NO_MIGRATE_PREFIXES (import side); keep both
|
|
300
|
+
# in sync. NOTE: `javax.annotation.processing` is permanent (JSR-269, compiler API)
|
|
301
|
+
# but bare `javax.annotation` (JSR-250 EE subset) DID move — handled below.
|
|
302
|
+
_JAVAX_PERMANENT_NAMESPACES: tuple[str, ...] = (
|
|
303
|
+
"javax.cache", # JSR-107 (JCache) — never renamed
|
|
304
|
+
"javax.sql", # JDBC standard extension (Java SE)
|
|
305
|
+
"javax.xml", # JAXP (parsers/transform/xpath/stream/namespace…)
|
|
306
|
+
"javax.naming", # JNDI (Java SE)
|
|
307
|
+
"javax.management", # JMX (Java SE)
|
|
308
|
+
"javax.crypto", # JCE (Java SE)
|
|
309
|
+
"javax.net", # incl. javax.net.ssl (Java SE)
|
|
310
|
+
"javax.security.auth", # JAAS (Java SE)
|
|
311
|
+
"javax.security.cert", # Java SE
|
|
312
|
+
"javax.security.sasl", # Java SE
|
|
313
|
+
"javax.annotation.processing", # JSR-269 compiler API (NOT the JSR-250 subset)
|
|
314
|
+
"javax.tools", # Java SE compiler API
|
|
315
|
+
"javax.lang.model", # Java SE annotation-processing model
|
|
316
|
+
"javax.sound", # Java SE
|
|
317
|
+
"javax.imageio", # Java SE
|
|
318
|
+
"javax.print", # Java SE
|
|
319
|
+
"javax.accessibility", # Java SE
|
|
320
|
+
"javax.swing", # Java SE
|
|
321
|
+
"javax.smartcardio", # Java SE
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def _longest_namespace_match(nl: str, namespaces: "tuple[str, ...]") -> int:
|
|
326
|
+
"""Length of the longest namespace in *namespaces* that is a prefix of *nl*.
|
|
327
|
+
|
|
328
|
+
Matches an exact namespace or a dotted sub-package (javax.xml → javax.xml.bind);
|
|
329
|
+
returns 0 when none match.
|
|
330
|
+
"""
|
|
331
|
+
best = 0
|
|
332
|
+
for ns in namespaces:
|
|
333
|
+
if (nl == ns or nl.startswith(ns + ".")) and len(ns) > best:
|
|
334
|
+
best = len(ns)
|
|
335
|
+
return best
|
|
336
|
+
|
|
337
|
+
|
|
294
338
|
def _is_jakarta_renamed_namespace(nl: str) -> bool:
|
|
295
339
|
"""True only for javax.* namespaces actually renamed to jakarta.* in Jakarta EE 9.
|
|
296
340
|
|
|
297
|
-
|
|
341
|
+
Decided by LONGEST-prefix match across the renamed list and the permanent
|
|
342
|
+
JDK/JSR allowlist — the more specific namespace wins. This keeps both nuanced
|
|
343
|
+
cases correct simultaneously:
|
|
344
|
+
- javax.xml.bind (renamed, len 14) beats javax.xml (permanent, len 9) → flag.
|
|
345
|
+
- javax.annotation.processing (permanent, len 27) beats javax.annotation
|
|
346
|
+
(renamed, len 16) → no flag.
|
|
298
347
|
JDK/JSR namespaces that keep javax.* forever (javax.cache, javax.sql, javax.xml
|
|
299
|
-
JAXP, javax.naming, …)
|
|
348
|
+
JAXP, javax.naming, …) never flag. A bare javax.* with no match also never flags.
|
|
300
349
|
"""
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
return False
|
|
350
|
+
renamed = _longest_namespace_match(nl, _JAKARTA_RENAMED_NAMESPACES)
|
|
351
|
+
permanent = _longest_namespace_match(nl, _JAVAX_PERMANENT_NAMESPACES)
|
|
352
|
+
return renamed > 0 and renamed >= permanent
|
|
305
353
|
|
|
306
354
|
|
|
307
355
|
def _dep_risk_flags(name: str, version: "Optional[str]") -> list[str]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.66.0
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Keywords: agents,ai,codebase,context,developer-tools,llm
|
|
@@ -738,9 +738,21 @@ evidence. `migrate-check` enforces:
|
|
|
738
738
|
usage; Quarkus / Micronaut / Helidon / Jakarta-pure repos report `boot3` as N/A
|
|
739
739
|
(`spring_present: false`), not a contradictory `applicable: true`.
|
|
740
740
|
- **Permanent `javax.*` are never jakarta debt.** JDK/JSR namespaces
|
|
741
|
-
(`javax.
|
|
742
|
-
`javax.management
|
|
743
|
-
jakarta scorer
|
|
741
|
+
(`javax.cache`, `javax.sql`, `javax.xml` JAXP, `javax.crypto`, `javax.naming`,
|
|
742
|
+
`javax.management`, `javax.security.auth`, `javax.annotation.processing`, …) are
|
|
743
|
+
allowlisted across every jakarta scorer (single source of truth:
|
|
744
|
+
`serializer._JAVAX_PERMANENT_NAMESPACES` + `migrate_check._JAKARTA_NO_MIGRATE_PREFIXES`).
|
|
745
|
+
The `javax→jakarta` dependency flag decides via **longest-prefix match**, so
|
|
746
|
+
`javax.xml.bind` (JAXB — moved) flags while `javax.xml` (JAXP) does not, and
|
|
747
|
+
`javax.annotation` (JSR-250 — moved) flags while `javax.annotation.processing`
|
|
748
|
+
(JSR-269) does not. The allowlist never silences a real migration.
|
|
749
|
+
- **`readiness_score` is a traceable aggregate.** It is `min` over the applicable
|
|
750
|
+
**migration** dimensions (`jakarta` / `boot3` / `hibernate`); `jdk_modernization`
|
|
751
|
+
is orthogonal upkeep and is excluded. The exact inputs are in `readiness_aggregate{}`
|
|
752
|
+
and an invariant (`readiness_score == min(applicable migration dims)`) is asserted in
|
|
753
|
+
code. When the Hibernate version is undeclared it is inferred from the Spring Boot
|
|
754
|
+
BOM (Boot ≥3 → Hibernate ≥6 → N/A; Boot 2 → Hibernate 5 → applicable; no BOM →
|
|
755
|
+
`status: unresolved`, never a heuristic score).
|
|
744
756
|
- **Three buckets: blocker ≠ hygiene ≠ test.** Only product (`main`) code counts
|
|
745
757
|
toward `blocking_count`, readiness, and effort. Test harnesses
|
|
746
758
|
(`testsuite/`, `test-framework/`, `integration-arquillian/`, `*-test*`,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sourcecode/__init__.py,sha256=
|
|
1
|
+
sourcecode/__init__.py,sha256=_rKEwisXr1IeFjMbYXGSfdRcelQmOHaAB0XR84P9tsk,103
|
|
2
2
|
sourcecode/adaptive_scanner.py,sha256=XffluXKzJUXrMtjEiAOnSNPZnztdIcts17T9ouHeID0,10521
|
|
3
3
|
sourcecode/architecture_analyzer.py,sha256=liCwQmLgb5vplohy8arjYxs_HOIv5C9MjLh_gY6bc5Q,44115
|
|
4
4
|
sourcecode/architecture_summary.py,sha256=z34_6v7cSwy98cof2UVciGho7SCrZ93tiqMmq5WNzRQ,20405
|
|
@@ -33,7 +33,7 @@ sourcecode/integration_detector.py,sha256=mQulsXN1P-4V_3ueh3xy_N9x3Aqlvm7GQ-3YGq
|
|
|
33
33
|
sourcecode/license.py,sha256=wckiLuiwaE35KMCStUf1gYzleJuFe6qsSyxUQJvit3s,23500
|
|
34
34
|
sourcecode/mcp_nudge.py,sha256=5ELU_ixzh6uA83NXLOZT8h00OhL53okfQdji3jyKOjg,2917
|
|
35
35
|
sourcecode/metrics_analyzer.py,sha256=m0ENgtqKeBL17kUIK3fmGkgo7UfXBNHxCMj0H_Y5K7c,22750
|
|
36
|
-
sourcecode/migrate_check.py,sha256=
|
|
36
|
+
sourcecode/migrate_check.py,sha256=daZLA7KaeoWoUPSMN8cYqHYD6HBflzc-z_N4bCGVPak,82993
|
|
37
37
|
sourcecode/openapi_surface.py,sha256=BTt0K-woZbkbWTN77IkqeBm_Okag9owR0848fmot8sk,16207
|
|
38
38
|
sourcecode/output_budget.py,sha256=Js9yUlfQtPhqBl9R6wn_9UHVjjJc3GtLcqyfjf5t50Q,9869
|
|
39
39
|
sourcecode/path_filters.py,sha256=DMea0KIlmj2pzTkuy-3YYFF4ktP0q5zP9mH4v4uXh84,5237
|
|
@@ -53,7 +53,7 @@ sourcecode/scanner.py,sha256=WdOQ78mMzjR1NjmKTlbxdgwinnCTfAhxCVLBEFQiFHU,8899
|
|
|
53
53
|
sourcecode/schema.py,sha256=aHNXDf8LGyUC8ZDE_VS9kiskC2-Oswhi_WnpdGy6HDw,24897
|
|
54
54
|
sourcecode/security_config.py,sha256=_m8oQAy2gP7Ho2I-IIMTFFjFVWbJIGlLEOiAWK2TDjs,3503
|
|
55
55
|
sourcecode/semantic_analyzer.py,sha256=4OdG6tTSnTvq3_dSWMbQu8Ad1ndSCKeG-b9qM4hIxkw,89176
|
|
56
|
-
sourcecode/serializer.py,sha256=
|
|
56
|
+
sourcecode/serializer.py,sha256=MSxYZ-_UYDPKMvg-hVk-MnKN-TfrmxXL202siCssa9U,129110
|
|
57
57
|
sourcecode/spring_event_topology.py,sha256=5_ON_21Le5zbG-1GRc5GLIi5HJfy_QjcXLVPC5WeUGQ,18055
|
|
58
58
|
sourcecode/spring_findings.py,sha256=G7Or2lKBUQbcTDqudLvSs9XvNg_YoAa-_lBOG_ULs8E,5457
|
|
59
59
|
sourcecode/spring_impact.py,sha256=qLwLfItX_o9LU-k_qjhD2hFpTX3PpEQ85TsYTAArzvg,56016
|
|
@@ -103,8 +103,8 @@ sourcecode/telemetry/consent.py,sha256=H5z2Wu63pZqbaKucRPoJQJ0zCo4cke9ZlBrJC-MaW
|
|
|
103
103
|
sourcecode/telemetry/events.py,sha256=LtzYfaX9Ilckj5PTvAcTpDa9mLqDsYPDUiDkRa58piY,2580
|
|
104
104
|
sourcecode/telemetry/filters.py,sha256=NHa5T-6DaZduQPFuC34jOqHWQgSizM-Ygq8aZ4j19ng,5834
|
|
105
105
|
sourcecode/telemetry/transport.py,sha256=4gGHsq0WeY9VywEZXA3vUxykfiYnw9uuqfjAAec7F8o,1681
|
|
106
|
-
sourcecode-1.
|
|
107
|
-
sourcecode-1.
|
|
108
|
-
sourcecode-1.
|
|
109
|
-
sourcecode-1.
|
|
110
|
-
sourcecode-1.
|
|
106
|
+
sourcecode-1.66.0.dist-info/METADATA,sha256=PVY4maYclqHt2AKj_bcGmDzF7xmKhD0i7k2MrQepPKo,47341
|
|
107
|
+
sourcecode-1.66.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
108
|
+
sourcecode-1.66.0.dist-info/entry_points.txt,sha256=ex3F9rmbXeyDIoFQHtkEqTsKSaJow8F0LrVu8XfIktQ,57
|
|
109
|
+
sourcecode-1.66.0.dist-info/licenses/LICENSE,sha256=7DdHrU9Z_3e7dSvq4ISijZNjnuHo5NIHNiHDouMQ9JU,10491
|
|
110
|
+
sourcecode-1.66.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|