sourcecode 4.10.1__tar.gz → 4.10.3__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 (218) hide show
  1. {sourcecode-4.10.1 → sourcecode-4.10.3}/CHANGELOG.md +44 -0
  2. {sourcecode-4.10.1 → sourcecode-4.10.3}/PKG-INFO +11 -4
  3. {sourcecode-4.10.1 → sourcecode-4.10.3}/README.md +10 -3
  4. {sourcecode-4.10.1 → sourcecode-4.10.3}/pyproject.toml +1 -1
  5. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/__init__.py +1 -1
  6. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/runs.py +12 -1
  7. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/security_config_scan.py +38 -10
  8. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_security_audit.py +2 -1
  9. {sourcecode-4.10.1 → sourcecode-4.10.3}/.github/workflows/build-windows.yml +0 -0
  10. {sourcecode-4.10.1 → sourcecode-4.10.3}/.gitignore +0 -0
  11. {sourcecode-4.10.1 → sourcecode-4.10.3}/.ruff.toml +0 -0
  12. {sourcecode-4.10.1 → sourcecode-4.10.3}/CLAUDE.md +0 -0
  13. {sourcecode-4.10.1 → sourcecode-4.10.3}/CONTRIBUTING.md +0 -0
  14. {sourcecode-4.10.1 → sourcecode-4.10.3}/LICENSE +0 -0
  15. {sourcecode-4.10.1 → sourcecode-4.10.3}/SECURITY.md +0 -0
  16. {sourcecode-4.10.1 → sourcecode-4.10.3}/raw +0 -0
  17. {sourcecode-4.10.1 → sourcecode-4.10.3}/scripts/compare_integration_engines.py +0 -0
  18. {sourcecode-4.10.1 → sourcecode-4.10.3}/scripts/customer_smoke_test.sh +0 -0
  19. {sourcecode-4.10.1 → sourcecode-4.10.3}/scripts/generate_jdk_exports.py +0 -0
  20. {sourcecode-4.10.1 → sourcecode-4.10.3}/scripts/perf_harness.py +0 -0
  21. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/adaptive_scanner.py +0 -0
  22. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/archetype.py +0 -0
  23. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/architectural_baseline.py +0 -0
  24. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/architectural_delta.py +0 -0
  25. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/architecture_analyzer.py +0 -0
  26. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/architecture_summary.py +0 -0
  27. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/ast_extractor.py +0 -0
  28. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/audit_report.py +0 -0
  29. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/baseline_autocapture.py +0 -0
  30. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/cache.py +0 -0
  31. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/cache_model.py +0 -0
  32. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/call_surface.py +0 -0
  33. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/caller_metrics.py +0 -0
  34. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/caller_reach.py +0 -0
  35. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/canonical_ir.py +0 -0
  36. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/chain_rules.py +0 -0
  37. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/change_plan.py +0 -0
  38. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/cir_graphs.py +0 -0
  39. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/classifier.py +0 -0
  40. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/cli.py +0 -0
  41. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/client_calls.py +0 -0
  42. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/code_notes_analyzer.py +0 -0
  43. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/compare.py +0 -0
  44. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/confidence_analyzer.py +0 -0
  45. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/constraint_diff.py +0 -0
  46. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/context_cache.py +0 -0
  47. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/context_graph.py +0 -0
  48. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/context_scorer.py +0 -0
  49. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/context_summarizer.py +0 -0
  50. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/contract_diff.py +0 -0
  51. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/contract_init.py +0 -0
  52. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/contract_model.py +0 -0
  53. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/contract_pipeline.py +0 -0
  54. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/coverage_parser.py +0 -0
  55. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/data_exposure.py +0 -0
  56. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/data_labels.py +0 -0
  57. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/defect_identity.py +0 -0
  58. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/degradation.py +0 -0
  59. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/dependency_analyzer.py +0 -0
  60. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/deployment_prefix.py +0 -0
  61. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/__init__.py +0 -0
  62. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/base.py +0 -0
  63. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/csproj_parser.py +0 -0
  64. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/dart.py +0 -0
  65. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/dotnet.py +0 -0
  66. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/elixir.py +0 -0
  67. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/go.py +0 -0
  68. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/heuristic.py +0 -0
  69. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/hybrid.py +0 -0
  70. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/java.py +0 -0
  71. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/jvm_ext.py +0 -0
  72. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/nodejs.py +0 -0
  73. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/parsers.py +0 -0
  74. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/php.py +0 -0
  75. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/project.py +0 -0
  76. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/python.py +0 -0
  77. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/ruby.py +0 -0
  78. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/rust.py +0 -0
  79. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/systems.py +0 -0
  80. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/terraform.py +0 -0
  81. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/detectors/tooling.py +0 -0
  82. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/doc_analyzer.py +0 -0
  83. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/dynamic_argument_surface.py +0 -0
  84. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/endpoint_literals.py +0 -0
  85. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/endpoint_metrics.py +0 -0
  86. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/entrypoint_classifier.py +0 -0
  87. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/env_analyzer.py +0 -0
  88. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/envelope.py +0 -0
  89. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/environment_resolution.py +0 -0
  90. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/error_schema.py +0 -0
  91. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/evidence_provider.py +0 -0
  92. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/explain.py +0 -0
  93. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/facts/__init__.py +0 -0
  94. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/facts/registry.json +0 -0
  95. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/file_chunker.py +0 -0
  96. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/file_classifier.py +0 -0
  97. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/filter_surface.py +0 -0
  98. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/format_contract.py +0 -0
  99. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/fqn_utils.py +0 -0
  100. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/git_analyzer.py +0 -0
  101. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/git_checkout.py +0 -0
  102. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/graph_analyzer.py +0 -0
  103. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/graph_evidence.py +0 -0
  104. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/hibernate_strat.py +0 -0
  105. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/identity_fallback.py +0 -0
  106. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/integration_coordinates.py +0 -0
  107. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/jdk_exports.py +0 -0
  108. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/license.py +0 -0
  109. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/__init__.py +0 -0
  110. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  111. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  112. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  113. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  114. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  115. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/orchestrator.py +0 -0
  116. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/registry.py +0 -0
  117. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/runner.py +0 -0
  118. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp/server.py +0 -0
  119. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/mcp_nudge.py +0 -0
  120. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/metrics_analyzer.py +0 -0
  121. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/migrate_check.py +0 -0
  122. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/migration_blast.py +0 -0
  123. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/non_coverage.py +0 -0
  124. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/openapi_surface.py +0 -0
  125. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/openrewrite_recipe.py +0 -0
  126. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/output_budget.py +0 -0
  127. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/parse_cache.py +0 -0
  128. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/path_admission.py +0 -0
  129. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/path_filters.py +0 -0
  130. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/perf.py +0 -0
  131. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/pipe_contract.py +0 -0
  132. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/posture.py +0 -0
  133. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/pr_comment_renderer.py +0 -0
  134. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/pr_impact.py +0 -0
  135. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/prepare_context.py +0 -0
  136. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/progress.py +0 -0
  137. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/provenance.py +0 -0
  138. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/ranking_engine.py +0 -0
  139. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/readiness_timeline.py +0 -0
  140. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/reconciliation.py +0 -0
  141. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/redactor.py +0 -0
  142. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/reference_facts.py +0 -0
  143. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/release_info.py +0 -0
  144. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/relevance_scorer.py +0 -0
  145. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/remedies.py +0 -0
  146. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/rename_refactor.py +0 -0
  147. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/repo_classifier.py +0 -0
  148. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/repository_ir.py +0 -0
  149. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/__init__.py +0 -0
  150. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/context.py +0 -0
  151. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/errors.py +0 -0
  152. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/executor.py +0 -0
  153. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/planner.py +0 -0
  154. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/query.py +0 -0
  155. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/request.py +0 -0
  156. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/resolution.py +0 -0
  157. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/result.py +0 -0
  158. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/retriever.py +0 -0
  159. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/runtime.py +0 -0
  160. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps.py +0 -0
  161. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  162. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_graph.py +0 -0
  163. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_impact.py +0 -0
  164. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_intf.py +0 -0
  165. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_struct.py +0 -0
  166. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  167. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/ris.py +0 -0
  168. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/risk.py +0 -0
  169. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/rule_catalog.py +0 -0
  170. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/runtime_classifier.py +0 -0
  171. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/sarif.py +0 -0
  172. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/scanner.py +0 -0
  173. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/schema.py +0 -0
  174. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  175. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/security_config.py +0 -0
  176. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/security_posture.py +0 -0
  177. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/semantic_analyzer.py +0 -0
  178. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/semantic_impact_engine.py +0 -0
  179. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/semantic_integration_engine.py +0 -0
  180. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/semantic_services.py +0 -0
  181. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/serializer.py +0 -0
  182. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/servlet_surface.py +0 -0
  183. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/source_text.py +0 -0
  184. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_event_topology.py +0 -0
  185. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_findings.py +0 -0
  186. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_impact.py +0 -0
  187. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_model.py +0 -0
  188. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_profiles.py +0 -0
  189. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_properties.py +0 -0
  190. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_semantic.py +0 -0
  191. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/spring_tx_analyzer.py +0 -0
  192. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/summarizer.py +0 -0
  193. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/target_admission.py +0 -0
  194. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/__init__.py +0 -0
  195. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/config.py +0 -0
  196. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/consent.py +0 -0
  197. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/events.py +0 -0
  198. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/filters.py +0 -0
  199. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/telemetry/transport.py +0 -0
  200. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/test_gap_ranking.py +0 -0
  201. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/test_sources.py +0 -0
  202. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/token_estimate.py +0 -0
  203. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/tree_utils.py +0 -0
  204. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/type_usage_surface.py +0 -0
  205. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/validation_inference.py +0 -0
  206. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/validation_surface.py +0 -0
  207. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/verify_edit.py +0 -0
  208. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/verify_repo.py +0 -0
  209. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/verify_rules.py +0 -0
  210. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/version_check.py +0 -0
  211. {sourcecode-4.10.1 → sourcecode-4.10.3}/src/sourcecode/workspace.py +0 -0
  212. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/functions/README.md +0 -0
  213. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/functions/get-license/index.ts +0 -0
  214. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  215. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/functions/telemetry/index.ts +0 -0
  216. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/sql/license_event_ordering.sql +0 -0
  217. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/sql/licensing_schema.sql +0 -0
  218. {sourcecode-4.10.1 → sourcecode-4.10.3}/supabase/sql/telemetry_events.sql +0 -0
@@ -2,6 +2,50 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [4.10.3] — 2026-08-05
6
+
7
+ ### Fixed
8
+
9
+ - **`GATE-001` no longer reads Java control keywords as method calls.** The regex
10
+ body scan behind the gated-endpoint audit treated `if(...)`, `for(...)`,
11
+ `while(...)`, `switch(...)`, `catch(...)` and `synchronized(...)` as same-class
12
+ invocations, so a handler could be reported as `Controller#if`. Those symbols
13
+ reached the `risk` critical band and `audit-report` top risks. Control keywords
14
+ are now excluded from method-name matches; the real private-method gate finding
15
+ stays covered.
16
+ - **`SEC-007` reports JavaMelody descriptor credentials in their field shape.**
17
+ `authorized-users` is now read directly from the named descriptor parameter even
18
+ when the value carries a digest (`{SHA-256}…`), spans multiple lines, or is
19
+ wrapped in `CDATA`, and the generic descriptor-value fallback is deduplicated so
20
+ one credential yields exactly one finding. The evidence line stays redacted.
21
+
22
+ ### Tests
23
+
24
+ - Regression coverage binds both fixes through the full `spring-audit` CLI path,
25
+ including a `options/DPA/WEB-INF/web.xml` descriptor and a controller whose
26
+ handler body contains the control constructs that produced the false positive.
27
+
28
+ ## [4.10.2] — 2026-08-05
29
+
30
+ ### Fixed
31
+
32
+ - **Durable run records are read-only by default.** Long repo-wide/deep commands
33
+ now write run records under `~/.sourcecode/runs/<repo-hash>/` instead of
34
+ `<repo>/.ask/runs`, with `ASK_RUNS_IN_REPO=1` as the explicit repo-local opt-in.
35
+ - **`DEAD-001` comment scanning avoids ordinary files.** The commented-security
36
+ control pass now prefilters by security-control vocabulary before extracting
37
+ comment spans, preserving `DEAD-001` positives while reducing the cost added to
38
+ large `spring-audit` runs.
39
+ - **Field regression guards for `spring-audit`.** End-to-end tests now lock that
40
+ reserved-keyword handler symbols such as `#if` cannot reach security findings,
41
+ and that JavaMelody `authorized-users` credentials in `web.xml` emit `SEC-007`.
42
+
43
+ ### Documentation
44
+
45
+ - README, user guide, roadmap and defect ledger now record the 4.10.0 field
46
+ confirmation queue, the supervised heartbeat contract and the external run-record
47
+ location.
48
+
5
49
  ## [4.10.1] — 2026-08-05
6
50
 
7
51
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 4.10.1
3
+ Version: 4.10.3
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
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
42
42
 
43
43
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
44
44
 
45
- ![Version](https://img.shields.io/badge/version-4.10.1-blue)
45
+ ![Version](https://img.shields.io/badge/version-4.10.3-blue)
46
46
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
47
47
 
48
48
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
@@ -73,7 +73,14 @@ These numbers are cache-layer benchmarks, not a promise for every command. Per-s
73
73
 
74
74
  With the right command class, ASK Engine becomes **constant infrastructure** inside agent loops — call the fast/context surfaces before edits and reserve deep compositions for the points where their evidence is worth the runtime.
75
75
 
76
- **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY supervised runs. Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep command whose configured budget is below its safe floor. Use `ask audit-report --from-risk risk.json` to package an existing risk run instead of recomputing it.
76
+ **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY
77
+ supervised runs. Long repo-wide/deep runs also write durable records under
78
+ `~/.sourcecode/runs/<repo-hash>/` by default, not inside the audited repository;
79
+ set `ASK_RUNS_IN_REPO=1` only when repo-local `.ask/runs` records are intentional.
80
+ Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep
81
+ command whose configured budget is below its safe floor. Use
82
+ `ask audit-report --from-risk risk.json` to package an existing risk run instead
83
+ of recomputing it.
77
84
 
78
85
  **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
79
86
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
@@ -99,7 +106,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
99
106
  # pip / pipx
100
107
  pipx install sourcecode # or: pip install sourcecode
101
108
 
102
- ask version # ask 4.10.1 — and, on a build that has aged,
109
+ ask version # ask 4.10.3 — and, on a build that has aged,
103
110
  # how many releases have probably shipped since
104
111
  ```
105
112
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
6
6
 
7
- ![Version](https://img.shields.io/badge/version-4.10.1-blue)
7
+ ![Version](https://img.shields.io/badge/version-4.10.3-blue)
8
8
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
9
9
 
10
10
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
@@ -35,7 +35,14 @@ These numbers are cache-layer benchmarks, not a promise for every command. Per-s
35
35
 
36
36
  With the right command class, ASK Engine becomes **constant infrastructure** inside agent loops — call the fast/context surfaces before edits and reserve deep compositions for the points where their evidence is worth the runtime.
37
37
 
38
- **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY supervised runs. Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep command whose configured budget is below its safe floor. Use `ask audit-report --from-risk risk.json` to package an existing risk run instead of recomputing it.
38
+ **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY
39
+ supervised runs. Long repo-wide/deep runs also write durable records under
40
+ `~/.sourcecode/runs/<repo-hash>/` by default, not inside the audited repository;
41
+ set `ASK_RUNS_IN_REPO=1` only when repo-local `.ask/runs` records are intentional.
42
+ Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep
43
+ command whose configured budget is below its safe floor. Use
44
+ `ask audit-report --from-risk risk.json` to package an existing risk run instead
45
+ of recomputing it.
39
46
 
40
47
  **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
41
48
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
@@ -61,7 +68,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
61
68
  # pip / pipx
62
69
  pipx install sourcecode # or: pip install sourcecode
63
70
 
64
- ask version # ask 4.10.1 — and, on a build that has aged,
71
+ ask version # ask 4.10.3 — and, on a build that has aged,
65
72
  # how many releases have probably shipped since
66
73
  ```
67
74
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "4.10.1"
7
+ version = "4.10.3"
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"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "4.10.1"
7
+ __version__ = "4.10.3"
@@ -2,6 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import json
5
+ import hashlib
5
6
  import os
6
7
  import time
7
8
  import uuid
@@ -18,7 +19,17 @@ def _now() -> float:
18
19
 
19
20
 
20
21
  def _runs_dir(root: Path) -> Path:
21
- return Path(root).resolve() / ".ask" / "runs"
22
+ override = os.environ.get("ASK_RUNS_DIR", "").strip()
23
+ if override:
24
+ return Path(override).expanduser().resolve()
25
+ if os.environ.get("ASK_RUNS_IN_REPO", "").lower() in ("1", "true", "yes", "on"):
26
+ return Path(root).resolve() / ".ask" / "runs"
27
+ try:
28
+ key_source = str(Path(root).resolve())
29
+ except Exception:
30
+ key_source = str(Path(root).absolute())
31
+ repo_key = hashlib.sha256(key_source.encode("utf-8", errors="replace")).hexdigest()[:16]
32
+ return Path.home() / ".sourcecode" / "runs" / repo_key
22
33
 
23
34
 
24
35
  @dataclass
@@ -111,8 +111,8 @@ _IS_REFERENCE = re.compile(r"[$@]\{[^}]+\}|^\s*$|^\s*ENC\(|^\s*\*+\s*$")
111
111
  #: XML elements whose text is a configured VALUE. Servlet/JEE spec vocabulary.
112
112
  _DESCRIPTOR_VALUE = re.compile(
113
113
  r"<(?P<tag>param-value|env-entry-value|value|property|password)\b[^>]*>"
114
- r"(?P<value>[^<]*)</(?P=tag)>",
115
- re.IGNORECASE,
114
+ r"(?P<value>.*?)</(?P=tag)>",
115
+ re.IGNORECASE | re.DOTALL,
116
116
  )
117
117
 
118
118
  _DESCRIPTOR_INIT_PARAM = re.compile(
@@ -124,8 +124,8 @@ _DESCRIPTOR_PARAM_NAME = re.compile(
124
124
  re.IGNORECASE,
125
125
  )
126
126
  _DESCRIPTOR_PARAM_VALUE = re.compile(
127
- r"<param-value\b[^>]*>(?P<value>[^<]*)</param-value>",
128
- re.IGNORECASE,
127
+ r"<param-value\b[^>]*>(?P<value>.*?)</param-value>",
128
+ re.IGNORECASE | re.DOTALL,
129
129
  )
130
130
  _JAVAMELODY_CREDENTIAL_PARAMS: frozenset[str] = frozenset({
131
131
  "authorized-users",
@@ -212,6 +212,15 @@ _COMMENTED_CONFIG_CONTROLS: tuple[tuple[re.Pattern, str, str], ...] = (
212
212
  ),
213
213
  )
214
214
 
215
+ _COMMENTED_JAVA_HINTS = (
216
+ "@PreAuthorize", "@PostAuthorize", "@Secured", "@RolesAllowed", "@DenyAll",
217
+ "@PermitAll", "FiltroSeguridad", "Security", "Authz", "Authorize",
218
+ "Authorized", "setSecure", "csrfTokenRepository", "csrf(",
219
+ )
220
+ _COMMENTED_XML_HINTS = (
221
+ "<transport-guarantee", "CONFIDENTIAL", "<security-constraint", "<intercept-url",
222
+ )
223
+
215
224
 
216
225
  @dataclass(frozen=True)
217
226
  class SecurityConfigObservation:
@@ -355,7 +364,14 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
355
364
  holds a reference and is not reported; one that carries a digest literal
356
365
  holds the credential itself, in a file under version control.
357
366
  """
367
+ def _xml_value(raw: str) -> str:
368
+ value = raw.strip()
369
+ if value.startswith("<![CDATA[") and value.endswith("]]>"):
370
+ value = value[len("<![CDATA["):-len("]]>")]
371
+ return value.strip()
372
+
358
373
  out: "list[SecurityConfigObservation]" = []
374
+ javamelody_value_offsets: set[int] = set()
359
375
  for param in _DESCRIPTOR_INIT_PARAM.finditer(text):
360
376
  body = param.group("body")
361
377
  name_m = _DESCRIPTOR_PARAM_NAME.search(body)
@@ -363,22 +379,29 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
363
379
  if name_m is None or value_m is None:
364
380
  continue
365
381
  name = name_m.group("value").strip().lower()
366
- value = value_m.group("value").strip()
382
+ value = _xml_value(value_m.group("value"))
367
383
  if name not in _JAVAMELODY_CREDENTIAL_PARAMS:
368
384
  continue
369
385
  if not value or _IS_REFERENCE.search(value):
370
386
  continue
371
387
  if ":" not in value:
372
388
  continue
373
- if _DIGEST_LITERAL.search(value):
374
- continue
375
389
  user = value.split(":", 1)[0].strip() or "user"
390
+ value_offset = param.start("body") + value_m.start("value")
391
+ javamelody_value_offsets.add(value_offset)
392
+ digest = _DIGEST_LITERAL.search(value)
393
+ evidence = (
394
+ f"<param-value>{user}:…{{{digest.group('algo')}}}"
395
+ f"{digest.group('digest')[:8]}…</param-value>"
396
+ if digest is not None
397
+ else f"<param-value>{user}:…</param-value>"
398
+ )
376
399
  out.append(SecurityConfigObservation(
377
400
  rule="SEC-007",
378
401
  file=rel,
379
- line=_line_of(text, param.start() + value_m.start()),
402
+ line=_line_of(text, value_offset),
380
403
  symbol=rel,
381
- evidence=f"<param-value>{user}:…</param-value>",
404
+ evidence=evidence,
382
405
  detail=(
383
406
  "JavaMelody authorized-users stores a monitoring-console credential "
384
407
  "directly in the deployment descriptor. The value is redacted here; "
@@ -386,7 +409,9 @@ def _scan_descriptor(text: str, rel: str) -> "list[SecurityConfigObservation]":
386
409
  ),
387
410
  ))
388
411
  for match in _DESCRIPTOR_VALUE.finditer(text):
389
- value = match.group("value").strip()
412
+ if match.start("value") in javamelody_value_offsets:
413
+ continue
414
+ value = _xml_value(match.group("value"))
390
415
  if not value or _IS_REFERENCE.search(value):
391
416
  continue
392
417
  digest = _DIGEST_LITERAL.search(value)
@@ -456,6 +481,9 @@ def _scan_commented_controls(
456
481
  from sourcecode.source_text import commented_spans
457
482
 
458
483
  rules = _COMMENTED_XML_CONTROLS if xml else _COMMENTED_JAVA_CONTROLS
484
+ hints = _COMMENTED_XML_HINTS if xml else _COMMENTED_JAVA_HINTS
485
+ if not any(hint in source for hint in hints):
486
+ return []
459
487
  out: "list[SecurityConfigObservation]" = []
460
488
  seen: set[tuple[str, int]] = set()
461
489
  for start, end in commented_spans(source, xml=xml):
@@ -508,7 +508,8 @@ def _line_of(source: str, offset: int) -> int:
508
508
  _JAVA_METHOD_RE = re.compile(
509
509
  r"(?P<mods>(?:(?:public|protected|private|static|final|synchronized|abstract|native)\s+)*)"
510
510
  r"(?P<ret>[\w.$<>\[\], ?]+)\s+"
511
- r"(?P<name>[a-zA-Z_][\w$]*)\s*\([^;{}]*\)\s*(?:throws\s+[^{]+)?\{",
511
+ r"(?P<name>(?!(?:if|for|while|switch|catch|synchronized|return|new|throw|try|else|do)\b)"
512
+ r"[a-zA-Z_][\w$]*)\s*\([^;{}]*\)\s*(?:throws\s+[^{]+)?\{",
512
513
  re.MULTILINE,
513
514
  )
514
515
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes