sourcecode 1.30.7__tar.gz → 1.30.9__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 (190) hide show
  1. {sourcecode-1.30.7 → sourcecode-1.30.9}/PKG-INFO +3 -3
  2. {sourcecode-1.30.7 → sourcecode-1.30.9}/README.md +2 -2
  3. {sourcecode-1.30.7 → sourcecode-1.30.9}/pyproject.toml +1 -1
  4. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/flow_analyzer.py +6 -5
  6. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/prepare_context.py +168 -28
  7. {sourcecode-1.30.7 → sourcecode-1.30.9}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
  8. {sourcecode-1.30.7 → sourcecode-1.30.9}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
  9. {sourcecode-1.30.7 → sourcecode-1.30.9}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
  10. {sourcecode-1.30.7 → sourcecode-1.30.9}/.continue-here.md +0 -0
  11. {sourcecode-1.30.7 → sourcecode-1.30.9}/.github/workflows/build-windows.yml +0 -0
  12. {sourcecode-1.30.7 → sourcecode-1.30.9}/.gitignore +0 -0
  13. {sourcecode-1.30.7 → sourcecode-1.30.9}/.ruff.toml +0 -0
  14. {sourcecode-1.30.7 → sourcecode-1.30.9}/CONTRIBUTING.md +0 -0
  15. {sourcecode-1.30.7 → sourcecode-1.30.9}/LICENSE +0 -0
  16. {sourcecode-1.30.7 → sourcecode-1.30.9}/SECURITY.md +0 -0
  17. {sourcecode-1.30.7 → sourcecode-1.30.9}/docs/privacy.md +0 -0
  18. {sourcecode-1.30.7 → sourcecode-1.30.9}/docs/schema.md +0 -0
  19. {sourcecode-1.30.7 → sourcecode-1.30.9}/raw +0 -0
  20. {sourcecode-1.30.7 → sourcecode-1.30.9}/run_cli.py +0 -0
  21. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/adaptive_scanner.py +0 -0
  22. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/architecture_analyzer.py +0 -0
  23. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/architecture_summary.py +0 -0
  24. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/ast_extractor.py +0 -0
  25. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/classifier.py +0 -0
  26. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/cli.py +0 -0
  27. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/code_notes_analyzer.py +0 -0
  28. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/confidence_analyzer.py +0 -0
  29. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/context_scorer.py +0 -0
  30. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/context_summarizer.py +0 -0
  31. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/contract_model.py +0 -0
  32. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/contract_pipeline.py +0 -0
  33. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/coverage_parser.py +0 -0
  34. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/dependency_analyzer.py +0 -0
  35. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/__init__.py +0 -0
  36. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/base.py +0 -0
  37. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/csproj_parser.py +0 -0
  38. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/dart.py +0 -0
  39. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/dotnet.py +0 -0
  40. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/elixir.py +0 -0
  41. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/go.py +0 -0
  42. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/heuristic.py +0 -0
  43. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/hybrid.py +0 -0
  44. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/java.py +0 -0
  45. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/jvm_ext.py +0 -0
  46. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/nodejs.py +0 -0
  47. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/parsers.py +0 -0
  48. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/php.py +0 -0
  49. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/project.py +0 -0
  50. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/python.py +0 -0
  51. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/ruby.py +0 -0
  52. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/rust.py +0 -0
  53. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/systems.py +0 -0
  54. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/terraform.py +0 -0
  55. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/detectors/tooling.py +0 -0
  56. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/doc_analyzer.py +0 -0
  57. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/entrypoint_classifier.py +0 -0
  58. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/env_analyzer.py +0 -0
  59. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/file_classifier.py +0 -0
  60. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/git_analyzer.py +0 -0
  61. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/graph_analyzer.py +0 -0
  62. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/metrics_analyzer.py +0 -0
  63. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/progress.py +0 -0
  64. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/ranking_engine.py +0 -0
  65. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/redactor.py +0 -0
  66. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/relevance_scorer.py +0 -0
  67. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/repo_classifier.py +0 -0
  68. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/runtime_classifier.py +0 -0
  69. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/scanner.py +0 -0
  70. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/schema.py +0 -0
  71. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/semantic_analyzer.py +0 -0
  72. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/serializer.py +0 -0
  73. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/summarizer.py +0 -0
  74. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/__init__.py +0 -0
  75. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/config.py +0 -0
  76. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/consent.py +0 -0
  77. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/events.py +0 -0
  78. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/filters.py +0 -0
  79. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/telemetry/transport.py +0 -0
  80. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/tree_utils.py +0 -0
  81. {sourcecode-1.30.7 → sourcecode-1.30.9}/src/sourcecode/workspace.py +0 -0
  82. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/__init__.py +0 -0
  83. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/conftest.py +0 -0
  84. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/coverage.xml +0 -0
  85. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  86. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/fastapi_app/src/main.py +0 -0
  87. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  88. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/go_service/go.mod +0 -0
  89. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/jacoco.xml +0 -0
  90. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/latin1_sample.java +0 -0
  91. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/latin1_sample_iso.java +0 -0
  92. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/lcov.info +0 -0
  93. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  94. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/nextjs_app/package.json +0 -0
  95. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  96. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  97. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  98. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  99. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  100. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  101. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
  102. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
  103. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
  104. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
  105. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
  106. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
  107. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
  108. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
  109. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
  110. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
  111. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
  112. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
  113. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
  114. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
  115. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
  116. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
  117. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
  118. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
  119. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
  120. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
  121. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
  122. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
  123. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
  124. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
  125. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
  126. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
  127. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
  128. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_architecture_analyzer.py +0 -0
  129. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_architecture_summary.py +0 -0
  130. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_ast_extractor.py +0 -0
  131. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_block1_reliability.py +0 -0
  132. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_block2_coverage.py +0 -0
  133. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_block5_quality.py +0 -0
  134. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_bug_fixes_v16.py +0 -0
  135. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_classifier.py +0 -0
  136. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_cli.py +0 -0
  137. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_code_notes_analyzer.py +0 -0
  138. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_context_scorer.py +0 -0
  139. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_contract_pipeline.py +0 -0
  140. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_coverage_parser.py +0 -0
  141. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_cross_consistency.py +0 -0
  142. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_dependency_analyzer_node_python.py +0 -0
  143. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_dependency_analyzer_polyglot.py +0 -0
  144. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_dependency_schema.py +0 -0
  145. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_dotnet.py +0 -0
  146. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_go_rust_java.py +0 -0
  147. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_nodejs.py +0 -0
  148. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_php_ruby_dart.py +0 -0
  149. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_python.py +0 -0
  150. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_universal_managed.py +0 -0
  151. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detector_universal_systems.py +0 -0
  152. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_detectors_base.py +0 -0
  153. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_doc_analyzer_jsdom.py +0 -0
  154. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_doc_analyzer_python.py +0 -0
  155. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_encoding_regression.py +0 -0
  156. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_graph_analyzer_polyglot.py +0 -0
  157. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_graph_analyzer_python_node.py +0 -0
  158. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_graph_schema.py +0 -0
  159. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_hybrid_inference.py +0 -0
  160. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration.py +0 -0
  161. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_dependencies.py +0 -0
  162. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_detection.py +0 -0
  163. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_docs.py +0 -0
  164. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_graph_modules.py +0 -0
  165. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_lqn.py +0 -0
  166. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_metrics.py +0 -0
  167. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_multistack.py +0 -0
  168. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_semantics.py +0 -0
  169. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_integration_universal.py +0 -0
  170. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_java_spring_integration.py +0 -0
  171. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_metrics_analyzer.py +0 -0
  172. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_packaging.py +0 -0
  173. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_phase1_improvements.py +0 -0
  174. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_pipeline_integrity.py +0 -0
  175. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_real_projects.py +0 -0
  176. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_redactor.py +0 -0
  177. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_scanner.py +0 -0
  178. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_schema.py +0 -0
  179. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_schema_normalization.py +0 -0
  180. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_semantic_analyzer_node.py +0 -0
  181. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_semantic_analyzer_python.py +0 -0
  182. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_semantic_import_resolution.py +0 -0
  183. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_semantic_schema.py +0 -0
  184. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_signal_hierarchy.py +0 -0
  185. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_summarizer.py +0 -0
  186. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_surface_honesty.py +0 -0
  187. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_task_differentiation.py +0 -0
  188. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_telemetry.py +0 -0
  189. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_v1_10_regressions.py +0 -0
  190. {sourcecode-1.30.7 → sourcecode-1.30.9}/tests/test_workspace_analyzer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.30.7
3
+ Version: 1.30.9
4
4
  Summary: Deterministic codebase context for AI coding agents
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -221,7 +221,7 @@ Description-Content-Type: text/markdown
221
221
 
222
222
  **Deterministic, behavior-aware codebase context for AI agents and PR review.**
223
223
 
224
- ![Version](https://img.shields.io/badge/version-1.30.7-blue)
224
+ ![Version](https://img.shields.io/badge/version-1.30.9-blue)
225
225
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
226
226
 
227
227
  ---
@@ -257,7 +257,7 @@ pipx install sourcecode
257
257
 
258
258
  ```bash
259
259
  sourcecode version
260
- # sourcecode 1.30.7
260
+ # sourcecode 1.30.9
261
261
  ```
262
262
 
263
263
  ---
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Deterministic, behavior-aware codebase context for AI agents and PR review.**
4
4
 
5
- ![Version](https://img.shields.io/badge/version-1.30.7-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.30.9-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -38,7 +38,7 @@ pipx install sourcecode
38
38
 
39
39
  ```bash
40
40
  sourcecode version
41
- # sourcecode 1.30.7
41
+ # sourcecode 1.30.9
42
42
  ```
43
43
 
44
44
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.30.7"
7
+ version = "1.30.9"
8
8
  description = "Deterministic codebase context 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.30.7"
3
+ __version__ = "1.30.9"
@@ -364,7 +364,8 @@ def _domain_from_class(class_name: str) -> str:
364
364
 
365
365
 
366
366
  def _impact_item(statement: str, support: str, certainty: str) -> dict:
367
- return {"statement": statement, "support": support, "certainty": certainty}
367
+ truth_level = "observed" if certainty == "high" else "inferred"
368
+ return {"statement": statement, "support": support, "certainty": certainty, "truth_level": truth_level}
368
369
 
369
370
 
370
371
  def _impact_descriptions(
@@ -380,14 +381,14 @@ def _impact_descriptions(
380
381
 
381
382
  if changed_type in _REPO_ARTIFACT_TYPES:
382
383
  items.append(_impact_item(
383
- f"{domain} persistence affected" if domain else "persistence affected",
384
- f"{changed_class} is a repository in path",
384
+ f"{domain} persistence may be affected (inferred from path)" if domain else "persistence may be affected (inferred from path)",
385
+ f"{changed_class} classified as repository from path",
385
386
  certainty,
386
387
  ))
387
388
  elif changed_type in _SERVICE_ARTIFACT_TYPES:
388
389
  if end_state == "DB write":
389
390
  items.append(_impact_item(
390
- f"{domain} persistence affected" if domain else "persistence affected",
391
+ f"{domain} persistence may be affected (repository with DB write in path)" if domain else "persistence may be affected (repository with DB write in path)",
391
392
  f"{changed_class} delegates to repository with DB write",
392
393
  certainty,
393
394
  ))
@@ -439,7 +440,7 @@ def _impact_descriptions_for_controller(
439
440
  domain = d
440
441
  break
441
442
  items.append(_impact_item(
442
- f"{domain} persistence affected" if domain else "data persistence affected",
443
+ f"{domain} persistence may be affected (repository with DB write in path)" if domain else "data persistence may be affected (repository with DB write in path)",
443
444
  "repository with DB write detected in path",
444
445
  certainty,
445
446
  ))
@@ -419,20 +419,122 @@ _ALL_EXTENSIONS: frozenset[str] = _SOURCE_EXTENSIONS | frozenset({
419
419
  ".md", ".toml", ".yaml", ".yml", ".json", ".xml",
420
420
  })
421
421
 
422
+ # ── Evidence admission helpers (valid types: git_diff, annotation, import, symbol, config) ──
423
+
424
+ _CLASS_SUFFIX_EVIDENCE: list[tuple[tuple[str, ...], str, str]] = [
425
+ (("Repository", "Dao", "DAO"), "repository pattern", "medium"),
426
+ (("Mapper",), "mapper pattern", "medium"),
427
+ (("Service", "Manager", "Handler", "Facade"), "service pattern", "medium"),
428
+ (("Controller", "Resource", "Endpoint"), "controller pattern", "medium"),
429
+ (("Config", "Configuration"), "config class", "medium"),
430
+ (("Test", "Tests", "IT", "Spec"), "test class", "strong"),
431
+ (("DTO", "Dto"), "DTO pattern", "medium"),
432
+ (("Entity",), "entity pattern", "medium"),
433
+ ]
434
+
435
+
436
+ def _symbol_evidence_from_class(class_name: str) -> "dict | None":
437
+ for suffixes, label, strength in _CLASS_SUFFIX_EVIDENCE:
438
+ for suffix in suffixes:
439
+ if class_name.endswith(suffix) and class_name != suffix:
440
+ return {
441
+ "type": "symbol",
442
+ "strength": strength,
443
+ "signal": f"class name suffix '{suffix}' — {label}",
444
+ }
445
+ return None
446
+
447
+
448
+ _PERSISTENCE_ANNOTATION_SIGNALS = frozenset({
449
+ "@Repository", "@Entity", "@Table", "@MappedSuperclass",
450
+ "@NamedQuery", "@SqlResultSetMapping", "@Embeddable",
451
+ })
452
+ _PERSISTENCE_IMPORT_PREFIXES = (
453
+ "javax.persistence", "jakarta.persistence",
454
+ "org.hibernate", "org.springframework.data.jpa",
455
+ )
456
+ _PERSISTENCE_ORM_SYMBOLS = ("EntityManager", "JpaRepository", "CrudRepository", "HibernateTemplate", "SessionFactory")
457
+
458
+
459
+ def _read_persistence_evidence(root: Path, file_path: str) -> "list[dict]":
460
+ evidence: list[dict] = []
461
+ try:
462
+ with open(root / file_path, encoding="utf-8", errors="replace") as _fp:
463
+ content = _fp.read(8000)
464
+ except OSError:
465
+ return evidence
466
+ for ann in _PERSISTENCE_ANNOTATION_SIGNALS:
467
+ if ann in content:
468
+ evidence.append({"type": "annotation", "strength": "strong", "signal": f"{ann} found in file content"})
469
+ break
470
+ for imp in _PERSISTENCE_IMPORT_PREFIXES:
471
+ if imp in content:
472
+ evidence.append({"type": "import", "strength": "strong", "signal": f"import {imp}.* found in file content"})
473
+ break
474
+ for sym in _PERSISTENCE_ORM_SYMBOLS:
475
+ if sym in content:
476
+ evidence.append({"type": "symbol", "strength": "medium", "signal": f"{sym} usage found in file content"})
477
+ break
478
+ return evidence
479
+
480
+
481
+ # Code signal rules for non-persistence classifiable types.
482
+ # Path/module/suffix are explicitly excluded — only code-grounded signals.
483
+ _CODE_SIGNAL_RULES: dict[str, list[str]] = {
484
+ "service": ["@Service", "@Component(", "@Transactional\n", "@Transactional("],
485
+ "controller": ["@RestController", "@Controller", "@RequestMapping",
486
+ "@GetMapping", "@PostMapping", "@PutMapping", "@DeleteMapping", "@PatchMapping"],
487
+ "entrypoint": ["@SpringBootApplication", "public static void main", "if __name__ == '__main__'"],
488
+ "security": ["@EnableWebSecurity", "SecurityFilterChain", "WebSecurityConfigurerAdapter",
489
+ "extends OncePerRequestFilter"],
490
+ "spring_config": ["@Configuration", "@Bean\n", "@Bean("],
491
+ "spring_profile": ["@Profile(", "@ConditionalOnProperty"],
492
+ "dto": ["@Data\n", "@Data(", "@Value\n", "@JsonProperty", "@Schema(", "@XmlRootElement",
493
+ "@Builder\n", "@Builder(", "@Getter", "@Setter"],
494
+ "test": ["@Test\n", "@Test(", "import org.junit", "import org.testng",
495
+ "import org.mockito", "import org.springframework.boot.test",
496
+ "@BeforeEach", "@BeforeAll", "@Before\n", "@Before("],
497
+ }
498
+
499
+
500
+ def _read_code_signal_evidence(root: Path, file_path: str, artifact_type: str) -> "list[dict]":
501
+ """Verify artifact_type with code signals from file content (first 8KB).
502
+ Returns single-item list on first match, empty list if no signal found.
503
+ Path segments, module names, and class suffixes are excluded — per evidence firewall rules.
504
+ """
505
+ signals = _CODE_SIGNAL_RULES.get(artifact_type, [])
506
+ if not signals:
507
+ return []
508
+ try:
509
+ with open(root / file_path, encoding="utf-8", errors="replace") as _fp:
510
+ content = _fp.read(8000)
511
+ except OSError:
512
+ return []
513
+ for signal in signals:
514
+ if signal in content:
515
+ ev_type = (
516
+ "annotation" if signal.startswith("@")
517
+ else "import" if signal.startswith("import ")
518
+ else "symbol"
519
+ )
520
+ return [{"type": ev_type, "strength": "strong", "signal": f"{signal.strip()} found in file content"}]
521
+ return []
522
+
523
+
422
524
  _ARTIFACT_CHANGE_EFFECT: dict[str, str] = {
423
- "entrypoint": "modifies application startup, CLI entry, or framework bootstrap — all request flows may be affected",
424
- "controller": "alters HTTP routing, API contract, or response shape — API consumers are affected",
425
- "service": "changes business rules, transaction scope, or orchestration logic — callers and dependents affected",
426
- "repository": "modifies persistence queries or data access patterns — data consistency and service layer affected",
427
- "mapper": "alters SQL-to-object binding or query templates — data shape and repositories affected",
428
- "security": "changes authentication flow, access control rules, or session handling — all secured endpoints affected",
429
- "spring_config": "modifies bean wiring, datasource, or framework-wide settings — all wired beans potentially affected",
430
- "spring_profile": "changes environment-specific overrides — behavior differs per active profile",
431
- "config": "adjusts configuration values — all modules reading this config are affected",
525
+ "entrypoint": "may affect application startup, CLI entry, or framework bootstrap — all request flows may be affected (inferred from role)",
526
+ "controller": "may alter HTTP routing, API contract, or response shape — API consumers may be affected (inferred from role)",
527
+ "service": "may change business rules, transaction scope, or orchestration logic — callers and dependents may be affected (inferred from role)",
528
+ "repository": "may modify persistence queries or data access patterns — verify data consistency and service layer (inferred from role)",
529
+ "mapper": "may alter SQL-to-object binding or query templates — data shape and repositories may be affected (inferred from role)",
530
+ "security": "may change authentication flow, access control rules, or session handling — all secured endpoints may be affected (inferred from role)",
531
+ "spring_config": "may modify bean wiring, datasource, or framework-wide settings — wired beans potentially affected (inferred from role)",
532
+ "spring_profile": "may change environment-specific overrides — behavior may differ per active profile (inferred from role)",
533
+ "config": "may adjust configuration values — all modules reading this config may be affected (inferred from role)",
432
534
  "build_manifest": "changes dependencies, plugins, or project structure — compile-time and runtime classpath affected",
433
535
  "db_migration": "modifies database schema — existing queries, mappings, and constraints may break",
434
- "domain_model": "alters entity structure — cascades to repositories, DTOs, serializers, and mappers",
435
- "dto": "changes data transfer contract — serialization and API consumers may break",
536
+ "domain_model": "may alter entity structure — may cascade to repositories, DTOs, serializers, and mappers (inferred from role)",
537
+ "dto": "may change data transfer contract — serialization and API consumers may break (inferred from role)",
436
538
  "test": "modifies test coverage or test behavior — no production code affected",
437
539
  "documentation": "updates documentation only — no runtime impact",
438
540
  "ide_noise": "IDE/tooling artifact — no application impact",
@@ -953,21 +1055,55 @@ class TaskContextBuilder:
953
1055
  if _f_atype == "build_manifest":
954
1056
  _build_artifact_files.append(_f)
955
1057
  continue
956
- # role: always "inferred" no runtime evidence for role classification
957
- _cls_conf = _f_cls["confidence"] # "high"|"medium"|"low" from _classify_changed_file
958
- _role_basis = "naming" if _cls_conf == "high" else ("path" if _cls_conf == "medium" else "extension")
1058
+ # ── Evidence: only admitted types [git_diff, annotation, import, symbol, config] ──
1059
+ _evidence: list[dict] = [
1060
+ {"type": "git_diff", "strength": "weak", "signal": "file present in commit diff"}
1061
+ ]
1062
+ # Symbol evidence from class name (path segments are rejected — not a valid type)
1063
+ _class_name = Path(_f).stem
1064
+ _sym_ev = _symbol_evidence_from_class(_class_name)
1065
+ if _sym_ev:
1066
+ _evidence.append(_sym_ev)
1067
+
1068
+ # All classifiable types require at least one code signal from content.
1069
+ # Path segments and module names are rejected evidence — not a valid type.
1070
+ _PERSISTENCE_SENSITIVE = frozenset({"repository", "mapper", "domain_model"})
1071
+ _CONTENT_VERIFIABLE = frozenset({
1072
+ "service", "controller", "entrypoint", "security",
1073
+ "spring_config", "spring_profile", "dto",
1074
+ })
1075
+ if _f_atype in _PERSISTENCE_SENSITIVE:
1076
+ _content_ev = _read_persistence_evidence(self.root, _f)
1077
+ if _content_ev:
1078
+ _evidence.extend(_content_ev)
1079
+ else:
1080
+ _f_atype = "source"
1081
+ elif _f_atype in _CONTENT_VERIFIABLE:
1082
+ _content_ev = _read_code_signal_evidence(self.root, _f, _f_atype)
1083
+ if _content_ev:
1084
+ _evidence.extend(_content_ev)
1085
+ else:
1086
+ _f_atype = "source"
1087
+ elif _f_atype == "test":
1088
+ # test: class name suffix is valid per gate (naming rule)
1089
+ # additionally verify with test framework signals for stronger evidence
1090
+ _test_ev = _read_code_signal_evidence(self.root, _f, "test")
1091
+ if _test_ev:
1092
+ _evidence.extend(_test_ev)
1093
+ # no downgrade — naming is a valid gate signal for test
1094
+
1095
+ # Role basis: derived from strongest admitted evidence
1096
+ _has_code_ev = any(e["type"] in ("annotation", "import") for e in _evidence)
1097
+ _has_symbol_ev = any(e["type"] == "symbol" for e in _evidence)
1098
+ _role_basis = "annotation" if _has_code_ev else ("symbol" if _has_symbol_ev else "git_diff_only")
1099
+ _cls_conf = _f_cls["confidence"]
959
1100
  _role_obj = {
960
1101
  "type": "inferred",
961
- "confidence": "medium" if _cls_conf == "high" else "low",
1102
+ "confidence": "medium" if (_has_code_ev or (_has_symbol_ev and _cls_conf == "high")) else "low",
962
1103
  "basis": _role_basis,
963
1104
  }
964
- # evidence: list what we actually know
965
- _evidence: list[str] = ["changed in git diff"]
966
- _f_module = _f_cls.get("module", "")
967
- if _f_module:
968
- _evidence.append(f"matched module path: {_f_module}")
969
- _evidence.append("NO call graph evidence")
970
- # file confidence: replaces numeric score
1105
+
1106
+ # File confidence: replaces numeric score
971
1107
  _impact_s = _delta_impact_score_per_file.get(_f, 0.45)
972
1108
  _f_conf = "high" if _impact_s >= 0.60 else ("medium" if _impact_s >= 0.40 else "low")
973
1109
  _pr_runtime_changes.append({
@@ -976,7 +1112,11 @@ class TaskContextBuilder:
976
1112
  "confidence": _f_conf,
977
1113
  "artifact_type": _f_atype,
978
1114
  "evidence": _evidence,
979
- "change_effect": _ARTIFACT_CHANGE_EFFECT.get(_f_atype, "modifies application logic"),
1115
+ "change_effect": {
1116
+ "statement": _ARTIFACT_CHANGE_EFFECT.get(_f_atype, "may modify application logic (role inferred from path)"),
1117
+ "truth_level": "inferred",
1118
+ "confidence": _role_obj["confidence"],
1119
+ },
980
1120
  })
981
1121
 
982
1122
  if _build_artifact_files:
@@ -2521,19 +2661,19 @@ class TaskContextBuilder:
2521
2661
  def _runtime_impact(tc: dict[str, int]) -> list[str]:
2522
2662
  _ri: list[str] = []
2523
2663
  if "entrypoint" in tc:
2524
- _ri.append("Application bootstrap modified — full context restart required before deploy")
2664
+ _ri.append("Entrypoint-classified file modified — may require full context restart before deploy (role inferred from path)")
2525
2665
  if "spring_config" in tc:
2526
- _ri.append("Spring ApplicationContext bean wiring modified — dependent beans rewired on restart")
2666
+ _ri.append("Spring config-classified file modified — wired beans may be rewired on restart (role inferred from path)")
2527
2667
  if "security" in tc:
2528
- _ri.append("Security filter chain modified — all secured endpoints affected after restart")
2668
+ _ri.append("Security-classified file modified — secured endpoints may be affected after restart (role inferred from path)")
2529
2669
  if "db_migration" in tc:
2530
2670
  _ri.append("Database schema migration pending — execute before deploying application")
2531
2671
  _svc = tc.get("service", 0)
2532
2672
  if _svc >= 2:
2533
- _ri.append(f"{_svc} service(s) modified — verify transaction scope and data consistency")
2673
+ _ri.append(f"{_svc} service-classified file(s) modified — verify transaction scope and data consistency (role inferred from path)")
2534
2674
  _repo = tc.get("repository", 0) + tc.get("mapper", 0)
2535
2675
  if _repo > 0:
2536
- _ri.append(f"{_repo} persistence component(s) modified — verify data access queries")
2676
+ _ri.append(f"{_repo} persistence-classified component(s) modified — verify data access queries (role inferred from path)")
2537
2677
  if "build_manifest" in tc:
2538
2678
  _ri.append("Build manifest modified — dependency resolution required before compile")
2539
2679
  return _ri
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes