sourcecode 1.60.0__tar.gz → 1.62.0__tar.gz

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.
Files changed (122) hide show
  1. {sourcecode-1.60.0 → sourcecode-1.62.0}/CHANGELOG.md +66 -0
  2. {sourcecode-1.60.0 → sourcecode-1.62.0}/PKG-INFO +1 -1
  3. {sourcecode-1.60.0 → sourcecode-1.62.0}/pyproject.toml +1 -1
  4. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/cli.py +7 -0
  6. sourcecode-1.62.0/src/sourcecode/hibernate_strat.py +599 -0
  7. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/registry.py +6 -3
  8. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/server.py +4 -1
  9. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/migrate_check.py +223 -32
  10. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/serializer.py +44 -1
  11. {sourcecode-1.60.0 → sourcecode-1.62.0}/.github/workflows/build-windows.yml +0 -0
  12. {sourcecode-1.60.0 → sourcecode-1.62.0}/.gitignore +0 -0
  13. {sourcecode-1.60.0 → sourcecode-1.62.0}/.ruff.toml +0 -0
  14. {sourcecode-1.60.0 → sourcecode-1.62.0}/CONTRIBUTING.md +0 -0
  15. {sourcecode-1.60.0 → sourcecode-1.62.0}/LICENSE +0 -0
  16. {sourcecode-1.60.0 → sourcecode-1.62.0}/README.md +0 -0
  17. {sourcecode-1.60.0 → sourcecode-1.62.0}/SECURITY.md +0 -0
  18. {sourcecode-1.60.0 → sourcecode-1.62.0}/raw +0 -0
  19. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/adaptive_scanner.py +0 -0
  20. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/architecture_analyzer.py +0 -0
  21. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/architecture_summary.py +0 -0
  22. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/ast_extractor.py +0 -0
  23. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/cache.py +0 -0
  24. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/canonical_ir.py +0 -0
  25. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/cir_graphs.py +0 -0
  26. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/classifier.py +0 -0
  27. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  28. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/confidence_analyzer.py +0 -0
  29. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/context_scorer.py +0 -0
  30. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/context_summarizer.py +0 -0
  31. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/contract_model.py +0 -0
  32. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/contract_pipeline.py +0 -0
  33. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/coverage_parser.py +0 -0
  34. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/dependency_analyzer.py +0 -0
  35. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/__init__.py +0 -0
  36. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/base.py +0 -0
  37. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  38. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/dart.py +0 -0
  39. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/dotnet.py +0 -0
  40. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/elixir.py +0 -0
  41. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/go.py +0 -0
  42. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/heuristic.py +0 -0
  43. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/hybrid.py +0 -0
  44. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/java.py +0 -0
  45. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  46. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/nodejs.py +0 -0
  47. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/parsers.py +0 -0
  48. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/php.py +0 -0
  49. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/project.py +0 -0
  50. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/python.py +0 -0
  51. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/ruby.py +0 -0
  52. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/rust.py +0 -0
  53. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/systems.py +0 -0
  54. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/terraform.py +0 -0
  55. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/detectors/tooling.py +0 -0
  56. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/doc_analyzer.py +0 -0
  57. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  58. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/env_analyzer.py +0 -0
  59. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/error_schema.py +0 -0
  60. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/explain.py +0 -0
  61. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/file_chunker.py +0 -0
  62. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/file_classifier.py +0 -0
  63. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/flow_analyzer.py +0 -0
  64. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/format_contract.py +0 -0
  65. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/fqn_utils.py +0 -0
  66. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/git_analyzer.py +0 -0
  67. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/graph_analyzer.py +0 -0
  68. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/integration_detector.py +0 -0
  69. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/license.py +0 -0
  70. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/__init__.py +0 -0
  71. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  72. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  73. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  74. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  75. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  76. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/orchestrator.py +0 -0
  77. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp/runner.py +0 -0
  78. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/mcp_nudge.py +0 -0
  79. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/metrics_analyzer.py +0 -0
  80. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/openapi_surface.py +0 -0
  81. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/output_budget.py +0 -0
  82. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/path_filters.py +0 -0
  83. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/pr_comment_renderer.py +0 -0
  84. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/pr_impact.py +0 -0
  85. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/prepare_context.py +0 -0
  86. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/progress.py +0 -0
  87. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/ranking_engine.py +0 -0
  88. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/redactor.py +0 -0
  89. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/relevance_scorer.py +0 -0
  90. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/rename_refactor.py +0 -0
  91. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/repo_classifier.py +0 -0
  92. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/repository_ir.py +0 -0
  93. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/ris.py +0 -0
  94. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/runtime_classifier.py +0 -0
  95. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/scanner.py +0 -0
  96. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/schema.py +0 -0
  97. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/security_config.py +0 -0
  98. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/semantic_analyzer.py +0 -0
  99. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_event_topology.py +0 -0
  100. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_findings.py +0 -0
  101. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_impact.py +0 -0
  102. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_model.py +0 -0
  103. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_security_audit.py +0 -0
  104. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_semantic.py +0 -0
  105. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
  106. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/summarizer.py +0 -0
  107. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/__init__.py +0 -0
  108. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/config.py +0 -0
  109. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/consent.py +0 -0
  110. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/events.py +0 -0
  111. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/filters.py +0 -0
  112. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/transport.py +0 -0
  113. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/tree_utils.py +0 -0
  114. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/validation_surface.py +0 -0
  115. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/version_check.py +0 -0
  116. {sourcecode-1.60.0 → sourcecode-1.62.0}/src/sourcecode/workspace.py +0 -0
  117. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/functions/README.md +0 -0
  118. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/functions/get-license/index.ts +0 -0
  119. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  120. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/functions/telemetry/index.ts +0 -0
  121. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/sql/license_event_ordering.sql +0 -0
  122. {sourcecode-1.60.0 → sourcecode-1.62.0}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,71 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.62.0] — 2026-06-29
4
+
5
+ ### Added — Hibernate 5.x → 6.x migration stratification (`migrate-check`)
6
+
7
+ `migrate-check` no longer treats Hibernate as a single dependency-version bump.
8
+ For enterprise monoliths that use dynamic persistence (verified against the
9
+ Broadleaf Commerce CE Open Admin Platform pattern), a Hibernate major upgrade is
10
+ a **persistence-layer rewrite problem in the dynamic-ORM areas, not an upgrade**.
11
+ Output now carries a `hibernate` section (and a Hibernate block in `--format text`)
12
+ built by the new `hibernate_strat` module.
13
+
14
+ - **Four independent migration domains** — each classified on its own risk axis,
15
+ never aggregated into one score:
16
+ 1. **JPA Annotation Layer** — LOW, escalates to HIGH on deprecated/reworked
17
+ annotations (`@Type(type=)`, `@TypeDef`, `@GenericGenerator`).
18
+ 2. **Criteria API Layer** — HIGH, escalates to **CRITICAL** when Criteria is
19
+ built via reflection or abstraction DAOs (`DynamicEntityDao`, `GenericDao`,
20
+ `BasicPersistenceModule`). Legacy `org.hibernate.Criteria` /
21
+ `Restrictions` / `Projections` flagged (removed in Hibernate 6).
22
+ 3. **HQL / String Queries** — MEDIUM, escalates to HIGH on string concatenation
23
+ (SQL shape not statically inferable under H6 parser changes).
24
+ 4. **Hibernate SPI / Internal API** — CRITICAL blocker (`UserType`,
25
+ `CompositeUserType`, `Interceptor`, `EventListener`, `org.hibernate.engine.spi`).
26
+ - **Hibernate Migration Impact Matrix** — per-layer risk, reason, and estimated effort.
27
+ - **Module-level Hibernate exposure map** — per Maven/Gradle module: max risk,
28
+ layers present, and `dynamic-criteria` / `custom-SPI` / `reflection` tags.
29
+ - **Critical call-chain detection** — flags dynamic query-generation paths
30
+ (`DynamicEntityDaoImpl`, `BasicPersistenceModule`, reflection-based DAOs).
31
+ - **Stop-condition logic** — any of {dynamic Criteria, custom SPI, reflection-built
32
+ queries, concatenated query strings} forces the verdict
33
+ **"HIBERNATE 6 MIGRATION IS HIGH RISK REWRITE ZONE (NOT UPGRADE ZONE)"**;
34
+ otherwise UPGRADE-WITH-CARE or UPGRADE ZONE.
35
+ - **Risk separation** — observable code risk vs inferred runtime risk reported distinctly.
36
+
37
+ ## [1.61.0] — 2026-06-29
38
+
39
+ ### Fixed — `migrate-check` false positives on already-migrated Spring Boot 3 repos
40
+
41
+ Three defects made `migrate-check` report a Boot 3 / Jakarta repo as an
42
+ un-migrated Boot 2 project (verified on Broadleaf Commerce CE 7.0.x —
43
+ Boot 3.5.14, Java 17, `jakarta.*` fully adopted). The verdict contradicted the
44
+ code; this corrects all three at the root and adds regression guardrails.
45
+ Report `schema_version` bumped **1.2 → 1.3**.
46
+
47
+ - **`spring_boot_2_detected` no longer defaults to `true`.** The detector now
48
+ resolves Maven `${...}` properties before reading versions and recognises
49
+ Boot in every form: `spring-boot-starter-parent`, a managed
50
+ `spring-boot-dependencies` BOM, a `spring-boot*` dependency versioned by
51
+ property, and the Gradle plugin. The old heuristic used a `DOTALL` regex that
52
+ matched any stray `2.x` library version anywhere in the pom. The field is now
53
+ **tri-state** — `true` (Boot 2 confirmed) / `false` (Boot 3+ confirmed) /
54
+ `null` (undetermined). **Absence of evidence is never reported as `true`.**
55
+ A new `spring_boot_version_detected` exposes the resolved version. Massive
56
+ `jakarta.*` import adoption vetoes any Boot-2 verdict.
57
+ - **`readiness_score` no longer collapses to 0 on JDK-modernization volume.**
58
+ Blockers (critical/high) still floor a genuinely blocked repo, but orthogonal
59
+ JDK debt (`java.util.Date`, reflection) is capped so it can no longer sink a
60
+ jakarta-ready repo. The report now separates dimensions:
61
+ `jakarta_readiness`, `boot3_readiness`, and `jdk_modernization` (each 0–100).
62
+ - **`javax.*` JDK/JSR namespaces are no longer flagged with
63
+ `javax-to-jakarta-migration-risk`.** `javax.cache` (JSR-107), `javax.sql`,
64
+ `javax.xml` (JAXP), `javax.naming`, `javax.management`, `javax.crypto`, etc.
65
+ keep the `javax` prefix forever and are now allowlisted. Only the Jakarta EE 9
66
+ renamed namespaces (`javax.servlet`, `javax.persistence`, `javax.validation`,
67
+ `javax.xml.bind`, …) still carry the flag.
68
+
3
69
  ## [1.60.0] — 2026-06-29
4
70
 
5
71
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.60.0
3
+ Version: 1.62.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.60.0"
7
+ version = "1.62.0"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +1,3 @@
1
1
  """sourcecode — Deterministic codebase context maps for AI coding agents."""
2
2
 
3
- __version__ = "1.60.0"
3
+ __version__ = "1.62.0"
@@ -4838,6 +4838,13 @@ def migrate_check_cmd(
4838
4838
  MIG-007 javax.inject import (MEDIUM)
4839
4839
  MIG-008 javax.ws.rs import (MEDIUM — JAX-RS changed)
4840
4840
 
4841
+ \b
4842
+ Hibernate 5→6 stratification (in the 'hibernate' output section):
4843
+ 4 independent layers (JPA annotations / Criteria / HQL / SPI), a per-layer
4844
+ risk matrix, a module exposure map, critical call-chain detection, and an
4845
+ UPGRADE vs REWRITE verdict (dynamic Criteria, custom SPI, reflection-built
4846
+ queries, or concatenated query strings force the REWRITE classification).
4847
+
4841
4848
  \b
4842
4849
  Examples:
4843
4850
  sourcecode migrate-check .