sourcecode 1.50.0__tar.gz → 1.51.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 (120) hide show
  1. {sourcecode-1.50.0 → sourcecode-1.51.0}/PKG-INFO +1 -1
  2. {sourcecode-1.50.0 → sourcecode-1.51.0}/pyproject.toml +1 -1
  3. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/__init__.py +1 -1
  4. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/migrate_check.py +12 -1
  5. {sourcecode-1.50.0 → sourcecode-1.51.0}/.github/workflows/build-windows.yml +0 -0
  6. {sourcecode-1.50.0 → sourcecode-1.51.0}/.gitignore +0 -0
  7. {sourcecode-1.50.0 → sourcecode-1.51.0}/.ruff.toml +0 -0
  8. {sourcecode-1.50.0 → sourcecode-1.51.0}/CHANGELOG.md +0 -0
  9. {sourcecode-1.50.0 → sourcecode-1.51.0}/CONTRIBUTING.md +0 -0
  10. {sourcecode-1.50.0 → sourcecode-1.51.0}/LICENSE +0 -0
  11. {sourcecode-1.50.0 → sourcecode-1.51.0}/README.md +0 -0
  12. {sourcecode-1.50.0 → sourcecode-1.51.0}/SECURITY.md +0 -0
  13. {sourcecode-1.50.0 → sourcecode-1.51.0}/raw +0 -0
  14. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/adaptive_scanner.py +0 -0
  15. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/architecture_analyzer.py +0 -0
  16. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/architecture_summary.py +0 -0
  17. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/ast_extractor.py +0 -0
  18. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/cache.py +0 -0
  19. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/canonical_ir.py +0 -0
  20. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/cir_graphs.py +0 -0
  21. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/classifier.py +0 -0
  22. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/cli.py +0 -0
  23. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  24. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/confidence_analyzer.py +0 -0
  25. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/context_scorer.py +0 -0
  26. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/context_summarizer.py +0 -0
  27. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/contract_model.py +0 -0
  28. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/contract_pipeline.py +0 -0
  29. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/coverage_parser.py +0 -0
  30. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/dependency_analyzer.py +0 -0
  31. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/__init__.py +0 -0
  32. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/base.py +0 -0
  33. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  34. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/dart.py +0 -0
  35. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/dotnet.py +0 -0
  36. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/elixir.py +0 -0
  37. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/go.py +0 -0
  38. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/heuristic.py +0 -0
  39. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/hybrid.py +0 -0
  40. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/java.py +0 -0
  41. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  42. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/nodejs.py +0 -0
  43. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/parsers.py +0 -0
  44. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/php.py +0 -0
  45. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/project.py +0 -0
  46. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/python.py +0 -0
  47. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/ruby.py +0 -0
  48. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/rust.py +0 -0
  49. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/systems.py +0 -0
  50. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/terraform.py +0 -0
  51. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/detectors/tooling.py +0 -0
  52. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/doc_analyzer.py +0 -0
  53. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  54. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/env_analyzer.py +0 -0
  55. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/error_schema.py +0 -0
  56. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/explain.py +0 -0
  57. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/file_chunker.py +0 -0
  58. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/file_classifier.py +0 -0
  59. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/flow_analyzer.py +0 -0
  60. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/format_contract.py +0 -0
  61. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/fqn_utils.py +0 -0
  62. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/git_analyzer.py +0 -0
  63. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/graph_analyzer.py +0 -0
  64. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/license.py +0 -0
  65. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/__init__.py +0 -0
  66. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  67. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  68. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  69. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  70. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  71. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/orchestrator.py +0 -0
  72. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/registry.py +0 -0
  73. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/runner.py +0 -0
  74. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp/server.py +0 -0
  75. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/mcp_nudge.py +0 -0
  76. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/metrics_analyzer.py +0 -0
  77. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/openapi_surface.py +0 -0
  78. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/output_budget.py +0 -0
  79. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/path_filters.py +0 -0
  80. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/pr_comment_renderer.py +0 -0
  81. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/pr_impact.py +0 -0
  82. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/prepare_context.py +0 -0
  83. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/progress.py +0 -0
  84. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/ranking_engine.py +0 -0
  85. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/redactor.py +0 -0
  86. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/relevance_scorer.py +0 -0
  87. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/rename_refactor.py +0 -0
  88. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/repo_classifier.py +0 -0
  89. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/repository_ir.py +0 -0
  90. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/ris.py +0 -0
  91. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/runtime_classifier.py +0 -0
  92. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/scanner.py +0 -0
  93. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/schema.py +0 -0
  94. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/security_config.py +0 -0
  95. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/semantic_analyzer.py +0 -0
  96. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/serializer.py +0 -0
  97. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_event_topology.py +0 -0
  98. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_findings.py +0 -0
  99. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_impact.py +0 -0
  100. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_model.py +0 -0
  101. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_security_audit.py +0 -0
  102. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_semantic.py +0 -0
  103. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
  104. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/summarizer.py +0 -0
  105. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/__init__.py +0 -0
  106. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/config.py +0 -0
  107. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/consent.py +0 -0
  108. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/events.py +0 -0
  109. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/filters.py +0 -0
  110. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/telemetry/transport.py +0 -0
  111. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/tree_utils.py +0 -0
  112. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/validation_surface.py +0 -0
  113. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/version_check.py +0 -0
  114. {sourcecode-1.50.0 → sourcecode-1.51.0}/src/sourcecode/workspace.py +0 -0
  115. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/functions/README.md +0 -0
  116. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/functions/get-license/index.ts +0 -0
  117. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  118. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/functions/telemetry/index.ts +0 -0
  119. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/sql/license_event_ordering.sql +0 -0
  120. {sourcecode-1.50.0 → sourcecode-1.51.0}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.50.0
3
+ Version: 1.51.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.50.0"
7
+ version = "1.51.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.50.0"
3
+ __version__ = "1.51.0"
@@ -536,6 +536,11 @@ _ALL_RULES: list[_Rule] = (
536
536
 
537
537
  SEVERITY_ORDER: dict[str, int] = {"critical": 0, "high": 1, "medium": 2, "low": 3}
538
538
 
539
+ # G-1: cap on total readiness deduction from low-severity (advisory, non-blocking)
540
+ # findings, so optional modernization cleanups cannot collapse the migration-readiness
541
+ # headline on a repo with zero blockers. See MigrationReport.finalize.
542
+ _LOW_SEVERITY_DEDUCTION_CAP: int = 15
543
+
539
544
 
540
545
  # ---------------------------------------------------------------------------
541
546
  # XML config rules (applied to Spring XML config files)
@@ -1022,11 +1027,17 @@ class MigrationReport:
1022
1027
  else:
1023
1028
  low_files.add(f.source_file)
1024
1029
 
1030
+ # G-1: low-severity findings are advisory (e.g. java.time modernization),
1031
+ # not Boot-2→3 blockers. Cap their total contribution so a repo with zero
1032
+ # blockers cannot score near zero on optional cleanups alone (mall: 96 low
1033
+ # findings dragged readiness to 4/100 despite 0 blocking, already on Boot 3).
1034
+ # Blockers (critical/high) stay uncapped — a genuinely blocked repo still
1035
+ # floors at 0 (shopizer: 301 blocking → 0/100, unchanged).
1025
1036
  deduction = (
1026
1037
  len(critical_files) * 15
1027
1038
  + len(high_files) * 8
1028
1039
  + len(medium_files) * 3
1029
- + len(low_files) * 1
1040
+ + min(len(low_files) * 1, _LOW_SEVERITY_DEDUCTION_CAP)
1030
1041
  )
1031
1042
  self.readiness_score = max(0, 100 - deduction)
1032
1043
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes