sourcecode 1.30.17__tar.gz → 1.30.19__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 (195) hide show
  1. sourcecode-1.30.19/.continue-here.md +150 -0
  2. {sourcecode-1.30.17 → sourcecode-1.30.19}/PKG-INFO +3 -3
  3. {sourcecode-1.30.17 → sourcecode-1.30.19}/README.md +2 -2
  4. {sourcecode-1.30.17 → sourcecode-1.30.19}/pyproject.toml +1 -1
  5. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/__init__.py +1 -1
  6. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/cli.py +59 -3
  7. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/contract_pipeline.py +2 -0
  8. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/git_analyzer.py +7 -0
  9. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/prepare_context.py +189 -67
  10. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/repository_ir.py +95 -1
  11. sourcecode-1.30.19/tests/test_v131_improvements.py +474 -0
  12. sourcecode-1.30.17/.continue-here.md +0 -231
  13. {sourcecode-1.30.17 → sourcecode-1.30.19}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
  14. {sourcecode-1.30.17 → sourcecode-1.30.19}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
  15. {sourcecode-1.30.17 → sourcecode-1.30.19}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
  16. {sourcecode-1.30.17 → sourcecode-1.30.19}/.github/workflows/build-windows.yml +0 -0
  17. {sourcecode-1.30.17 → sourcecode-1.30.19}/.gitignore +0 -0
  18. {sourcecode-1.30.17 → sourcecode-1.30.19}/.ruff.toml +0 -0
  19. {sourcecode-1.30.17 → sourcecode-1.30.19}/CONTRIBUTING.md +0 -0
  20. {sourcecode-1.30.17 → sourcecode-1.30.19}/LICENSE +0 -0
  21. {sourcecode-1.30.17 → sourcecode-1.30.19}/SECURITY.md +0 -0
  22. {sourcecode-1.30.17 → sourcecode-1.30.19}/docs/privacy.md +0 -0
  23. {sourcecode-1.30.17 → sourcecode-1.30.19}/docs/schema.md +0 -0
  24. {sourcecode-1.30.17 → sourcecode-1.30.19}/raw +0 -0
  25. {sourcecode-1.30.17 → sourcecode-1.30.19}/run_cli.py +0 -0
  26. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/adaptive_scanner.py +0 -0
  27. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/architecture_analyzer.py +0 -0
  28. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/architecture_summary.py +0 -0
  29. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/ast_extractor.py +0 -0
  30. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/classifier.py +0 -0
  31. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/code_notes_analyzer.py +0 -0
  32. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/confidence_analyzer.py +0 -0
  33. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/context_scorer.py +0 -0
  34. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/context_summarizer.py +0 -0
  35. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/contract_model.py +0 -0
  36. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/coverage_parser.py +0 -0
  37. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/dependency_analyzer.py +0 -0
  38. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/__init__.py +0 -0
  39. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/base.py +0 -0
  40. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/csproj_parser.py +0 -0
  41. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/dart.py +0 -0
  42. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/dotnet.py +0 -0
  43. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/elixir.py +0 -0
  44. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/go.py +0 -0
  45. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/heuristic.py +0 -0
  46. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/hybrid.py +0 -0
  47. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/java.py +0 -0
  48. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/jvm_ext.py +0 -0
  49. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/nodejs.py +0 -0
  50. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/parsers.py +0 -0
  51. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/php.py +0 -0
  52. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/project.py +0 -0
  53. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/python.py +0 -0
  54. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/ruby.py +0 -0
  55. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/rust.py +0 -0
  56. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/systems.py +0 -0
  57. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/terraform.py +0 -0
  58. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/detectors/tooling.py +0 -0
  59. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/doc_analyzer.py +0 -0
  60. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/entrypoint_classifier.py +0 -0
  61. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/env_analyzer.py +0 -0
  62. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/file_classifier.py +0 -0
  63. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/flow_analyzer.py +0 -0
  64. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/graph_analyzer.py +0 -0
  65. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/metrics_analyzer.py +0 -0
  66. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/pr_comment_renderer.py +0 -0
  67. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/progress.py +0 -0
  68. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/ranking_engine.py +0 -0
  69. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/redactor.py +0 -0
  70. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/relevance_scorer.py +0 -0
  71. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/repo_classifier.py +0 -0
  72. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/runtime_classifier.py +0 -0
  73. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/scanner.py +0 -0
  74. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/schema.py +0 -0
  75. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/semantic_analyzer.py +0 -0
  76. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/serializer.py +0 -0
  77. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/summarizer.py +0 -0
  78. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/__init__.py +0 -0
  79. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/config.py +0 -0
  80. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/consent.py +0 -0
  81. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/events.py +0 -0
  82. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/filters.py +0 -0
  83. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/telemetry/transport.py +0 -0
  84. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/tree_utils.py +0 -0
  85. {sourcecode-1.30.17 → sourcecode-1.30.19}/src/sourcecode/workspace.py +0 -0
  86. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/__init__.py +0 -0
  87. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/conftest.py +0 -0
  88. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/coverage.xml +0 -0
  89. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  90. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/fastapi_app/src/main.py +0 -0
  91. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  92. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/go_service/go.mod +0 -0
  93. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/jacoco.xml +0 -0
  94. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/latin1_sample.java +0 -0
  95. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/latin1_sample_iso.java +0 -0
  96. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/lcov.info +0 -0
  97. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  98. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/nextjs_app/package.json +0 -0
  99. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  100. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  101. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  102. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  103. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  104. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  105. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
  106. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
  107. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
  108. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
  109. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
  110. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
  111. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
  112. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
  113. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
  114. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
  115. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
  116. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
  117. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
  118. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
  119. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
  120. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
  121. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
  122. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
  123. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
  124. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
  125. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
  126. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
  127. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
  128. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
  129. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
  130. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
  131. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
  132. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_architecture_analyzer.py +0 -0
  133. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_architecture_summary.py +0 -0
  134. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_ast_extractor.py +0 -0
  135. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_block1_reliability.py +0 -0
  136. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_block2_coverage.py +0 -0
  137. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_block5_quality.py +0 -0
  138. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_bug_fixes_v16.py +0 -0
  139. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_classifier.py +0 -0
  140. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_cli.py +0 -0
  141. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_code_notes_analyzer.py +0 -0
  142. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_context_scorer.py +0 -0
  143. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_contract_pipeline.py +0 -0
  144. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_coverage_parser.py +0 -0
  145. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_cross_consistency.py +0 -0
  146. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_dependency_analyzer_node_python.py +0 -0
  147. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_dependency_analyzer_polyglot.py +0 -0
  148. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_dependency_schema.py +0 -0
  149. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_dotnet.py +0 -0
  150. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_go_rust_java.py +0 -0
  151. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_nodejs.py +0 -0
  152. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_php_ruby_dart.py +0 -0
  153. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_python.py +0 -0
  154. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_universal_managed.py +0 -0
  155. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detector_universal_systems.py +0 -0
  156. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_detectors_base.py +0 -0
  157. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_doc_analyzer_jsdom.py +0 -0
  158. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_doc_analyzer_python.py +0 -0
  159. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_encoding_regression.py +0 -0
  160. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_graph_analyzer_polyglot.py +0 -0
  161. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_graph_analyzer_python_node.py +0 -0
  162. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_graph_schema.py +0 -0
  163. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_hybrid_inference.py +0 -0
  164. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration.py +0 -0
  165. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_dependencies.py +0 -0
  166. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_detection.py +0 -0
  167. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_docs.py +0 -0
  168. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_graph_modules.py +0 -0
  169. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_lqn.py +0 -0
  170. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_metrics.py +0 -0
  171. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_multistack.py +0 -0
  172. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_semantics.py +0 -0
  173. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_integration_universal.py +0 -0
  174. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_java_spring_integration.py +0 -0
  175. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_metrics_analyzer.py +0 -0
  176. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_packaging.py +0 -0
  177. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_phase1_improvements.py +0 -0
  178. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_pipeline_integrity.py +0 -0
  179. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_real_projects.py +0 -0
  180. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_redactor.py +0 -0
  181. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_repository_ir.py +0 -0
  182. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_scanner.py +0 -0
  183. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_schema.py +0 -0
  184. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_schema_normalization.py +0 -0
  185. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_semantic_analyzer_node.py +0 -0
  186. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_semantic_analyzer_python.py +0 -0
  187. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_semantic_import_resolution.py +0 -0
  188. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_semantic_schema.py +0 -0
  189. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_signal_hierarchy.py +0 -0
  190. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_summarizer.py +0 -0
  191. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_surface_honesty.py +0 -0
  192. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_task_differentiation.py +0 -0
  193. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_telemetry.py +0 -0
  194. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_v1_10_regressions.py +0 -0
  195. {sourcecode-1.30.17 → sourcecode-1.30.19}/tests/test_workspace_analyzer.py +0 -0
@@ -0,0 +1,150 @@
1
+ # Continue Here — atlas-cli sesión 15
2
+
3
+ **Paused:** 2026-05-18 (sesión 15)
4
+ **Repo:** `/Users/user/Downloads/atlas-cli`
5
+ **Branch:** master
6
+ **Working tree:** 3 ficheros modificados, SIN commit
7
+
8
+ ---
9
+
10
+ ## Trabajo de esta sesión
11
+
12
+ ### Ya commiteado (66db10b)
13
+
14
+ `fix(cli): three flag-routing bugs in compact/repo-ir paths`
15
+
16
+ | Bug | Fichero | Fix |
17
+ |---|---|---|
18
+ | `--changed-only` = `--compact` (byte idéntico) | `cli.py` | Filtrar `sm.file_paths`, `entry_points`, `code_notes` antes de `compact_view`; `_allowed_changed_files` se computaba pero nunca se aplicaba porque `compact` forzaba `mode=raw` |
19
+ | `--compact --format yaml` ignorado | `cli.py` | Rama compact hardcodeaba `json.dumps`; añadir bloque `if format == "yaml"` igual al de contract_view |
20
+ | `sourcecode repo-ir .` → "No such command '.'" | `cli.py` | `"repo-ir"` ausente de `_SUBCOMMANDS`; preprocessor consumía token como PATH antes de que Click pudiera dispatchar |
21
+
22
+ ---
23
+
24
+ ### Pendiente de commit (3 ficheros modificados)
25
+
26
+ **Para commitear (primera acción al retomar):**
27
+
28
+ ```bash
29
+ cd /Users/user/Downloads/atlas-cli
30
+ git add src/sourcecode/contract_pipeline.py \
31
+ src/sourcecode/repository_ir.py \
32
+ src/sourcecode/prepare_context.py
33
+
34
+ git commit -m "fix(encoding): utf-8 en subprocess + symptom boost por commit messages
35
+
36
+ - repository_ir.py _get_git_old_content: añadir encoding='utf-8', errors='replace'
37
+ al subprocess.run de git show — causa raíz del UnicodeDecodeError cp1252 en Windows
38
+ - contract_pipeline.py grep -rl: mismo fix (fallback Python en Windows, defensivo)
39
+ - prepare_context.py: symptom boost refactor en 6 passes
40
+ - Nuevo: _recent_commits_for_symptom extraído en bloque 5b (sin coste extra)
41
+ - Nuevo: commit message index (file → n commits con keyword en mensaje)
42
+ - Nuevo: inyección desde commit index para ficheros no en candidate pool
43
+ - Fix: content scan +0.05/hit, cap +0.50 (era +0.02, cap +0.30)
44
+ - Fix: code notes matching → back-propagate score al fichero (+0.20/note)
45
+ - Fix: path-kw boost aplicado a candidatos pre-existentes (no solo inyectados)
46
+ - Multi-signal boost en un solo file-read pass; reason string explica cada boost"
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Qué hace cada cambio pendiente
52
+
53
+ ### `repository_ir.py` + `contract_pipeline.py` — encoding fix
54
+
55
+ ```python
56
+ # Antes (crash en Windows cp1252):
57
+ result = subprocess.run([...], text=True, timeout=5)
58
+
59
+ # Después:
60
+ result = subprocess.run([...], text=True, encoding="utf-8", errors="replace", timeout=5)
61
+ ```
62
+
63
+ Causa raíz del bug reportado: `sourcecode repo-ir . --since HEAD~3` en Windows 11 Python 3.10
64
+ crasheaba con `UnicodeDecodeError: 'charmap' codec can't decode byte 0x81` porque
65
+ `subprocess` hereda `cp1252` como encoding por defecto en Windows.
66
+
67
+ ### `prepare_context.py` — symptom boost overhaul
68
+
69
+ **Problema original:** `--symptom "sesiones"` = output idéntico al baseline porque:
70
+ - Ningún path Java contiene "sesiones" (clases no se nombran en español)
71
+ - Content scan era demasiado débil (+0.02/hit → max +0.20 para 10 hits)
72
+ - Git commit messages no se escaneaban
73
+
74
+ **Nuevo pipeline (6 passes):**
75
+
76
+ | Pass | Señal | Boost | Cap |
77
+ |---|---|---|---|
78
+ | 1 | Code notes text match → `related_notes` + `_note_matched_paths` | — | — |
79
+ | 2 | **Commit index**: `file → n_commits` con keyword en mensaje | — | — |
80
+ | 3 | **Inyección desde commit index** (ficheros no en pool) | +0.15/commit desde 0.5 | 0.85 |
81
+ | 4 | Path injection (sin cambios lógicos) | +0.20/kw desde 0.5 | 1.0 |
82
+ | 5 | **Multi-signal boost** en 1 file-read: commit (+0.25/commit, cap+0.40), note (+0.20/note, cap+0.30), path-kw (+0.20/kw), content (+0.05/hit, cap+0.50) | acumulativo | 1.0 |
83
+ | 6 | Cross-layer synonym frontend→backend (sin cambios) | sin cambios | — |
84
+
85
+ **Before/after verificado** en BroadleafCommerce:
86
+ - `--symptom "pagination"`: top 10 pasa de servicios genéricos (0.67) a `PageDao.java` (0.90, role=`symptom_match`, reason="commit-msg symptom ×1 (+0.25)")
87
+ - `--symptom "zookeeper"`: `pom.xml` (1.00, 2 commit hits), `ZookeeperUtil.java` (1.00, path+content)
88
+
89
+ ---
90
+
91
+ ## Estado de tests
92
+
93
+ ```
94
+ 920 passed, 3 skipped
95
+ ```
96
+
97
+ Pre-existing failures (no tocar):
98
+ - `tests/test_block2_coverage.py` — bug `DocRecord` en `doc_analyzer.py`
99
+ - `tests/test_dependency_analyzer_node_python.py::test_python_requirements_without_lockfile_keeps_declared_versions`
100
+
101
+ ---
102
+
103
+ ## Pendientes (próxima sesión)
104
+
105
+ ### Heredados de sesión 14 (aún vigentes)
106
+
107
+ 1. **Spring bean wiring graph** — `_build_relations` emite `injects` edges para `@Autowired`. Falta: trazar `@Configuration → @Bean → @Autowired` completo, exponer como `wiring_graph`.
108
+
109
+ 2. **Smoke test en repo spring-boot real:**
110
+ ```bash
111
+ cd ~/Documents/workspace/spring-boot-realworld-example-app
112
+ sourcecode repo-ir . --since HEAD~1 2>/dev/null | python3 -c "
113
+ import json, sys; d=json.load(sys.stdin)
114
+ print('nodes:', len(d['graph']['nodes']))
115
+ print('route_surface:', d.get('route_surface', []))
116
+ print('reverse_graph keys:', len(d.get('reverse_graph', {})))
117
+ "
118
+ ```
119
+
120
+ 3. **Transaction boundary tracking** — `@Transactional` detectado. Falta: emitir `transactional_boundary` edges.
121
+
122
+ 4. **`_diff_routes` para `@RequestMapping` en clase** — class-level mapping change debería propagarse a todos los endpoints del controller.
123
+
124
+ ### Nuevos de sesión 15
125
+
126
+ 5. **Tests para el symptom fix** — validar que `--symptom "sesiones"` con commits mock que contengan "sesiones" en mensaje produce ranking diferente al baseline. Cobertura en `tests/test_prepare_context_symptom.py` o similar.
127
+
128
+ 6. **`_FRONTEND_SYMPTOM_MAP`** — añadir "sesiones"/"session" como frontend keyword con backend terms `["httpsession", "sessionmanager", "sessionservice", "sessionrepository"]`.
129
+
130
+ ---
131
+
132
+ ## Para retomar
133
+
134
+ ```bash
135
+ cd /Users/user/Downloads/atlas-cli
136
+ git log --oneline -3 # debe mostrar 66db10b como más reciente
137
+ git status # 3 ficheros M: contract_pipeline, prepare_context, repository_ir
138
+
139
+ # Primera acción: commitear (comando arriba)
140
+
141
+ python3 -m pytest tests/ \
142
+ --ignore=tests/test_block2_coverage.py \
143
+ --ignore=tests/test_dependency_analyzer_node_python.py \
144
+ -q
145
+ # Expected: 920 passed, 3 skipped
146
+ ```
147
+
148
+ ---
149
+
150
+ *Pausado 2026-05-18 sesión 15 — gsd:pause-work*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.30.17
3
+ Version: 1.30.19
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.17-blue)
224
+ ![Version](https://img.shields.io/badge/version-1.30.19-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.17
260
+ # sourcecode 1.30.19
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.17-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.30.19-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.17
41
+ # sourcecode 1.30.19
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.17"
7
+ version = "1.30.19"
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.17"
3
+ __version__ = "1.30.19"
@@ -1648,6 +1648,12 @@ def prepare_context_cmd(
1648
1648
  "--format",
1649
1649
  help="Output format: json (default) | github-comment (Markdown PR comment for review-pr task)",
1650
1650
  ),
1651
+ debug_perf: bool = typer.Option(
1652
+ False,
1653
+ "--debug-perf",
1654
+ help="Emit per-phase timing to stderr (git scan ms, symptom scoring ms, total ms)",
1655
+ hidden=True,
1656
+ ),
1651
1657
  ) -> None:
1652
1658
  """Task-specific context for AI coding agents.
1653
1659
 
@@ -1714,9 +1720,21 @@ def prepare_context_cmd(
1714
1720
  raise typer.Exit()
1715
1721
 
1716
1722
  from dataclasses import asdict
1723
+ import time as _time
1717
1724
 
1718
1725
  builder = TaskContextBuilder(target)
1726
+ _t0 = _time.perf_counter()
1719
1727
  output = builder.build(task, since=since, symptom=symptom)
1728
+ _t_total = (_time.perf_counter() - _t0) * 1000
1729
+
1730
+ if debug_perf:
1731
+ _perf = getattr(output, "_perf_ms", {}) or {}
1732
+ typer.echo(
1733
+ f"[debug-perf] total={_t_total:.0f}ms"
1734
+ + (f" git_scan={_perf.get('git_scan_ms', '?')}ms" if "git_scan_ms" in _perf else "")
1735
+ + (f" symptom={_perf.get('symptom_ms', '?')}ms" if "symptom_ms" in _perf else ""),
1736
+ err=True,
1737
+ )
1720
1738
 
1721
1739
  # Task-specific content-filter: each task emphasizes different output fields.
1722
1740
  # Fields marked False are suppressed from this task's output to reduce noise.
@@ -1918,6 +1936,8 @@ def prepare_context_cmd(
1918
1936
  out["related_notes"] = output.related_notes
1919
1937
  if output.symptom_note:
1920
1938
  out["symptom_note"] = output.symptom_note
1939
+ if output.symptom_explain:
1940
+ out["symptom_explain"] = output.symptom_explain
1921
1941
  if llm_prompt:
1922
1942
  out["llm_prompt"] = builder.render_prompt(output)
1923
1943
 
@@ -2012,12 +2032,33 @@ def repo_ir_cmd(
2012
2032
  "--include-tests",
2013
2033
  help="Include test files in analysis (excluded by default)",
2014
2034
  ),
2035
+ max_nodes: Optional[int] = typer.Option(
2036
+ None,
2037
+ "--max-nodes",
2038
+ help="Limit graph.nodes to top N by impact score (reduces output size)",
2039
+ ),
2040
+ max_edges: Optional[int] = typer.Option(
2041
+ None,
2042
+ "--max-edges",
2043
+ help="Limit graph.edges to N (priority: edges between kept nodes)",
2044
+ ),
2045
+ summary_only: bool = typer.Option(
2046
+ False,
2047
+ "--summary-only",
2048
+ help="Omit full graph.nodes/edges; keep analysis summary, impact, and change_set (<300KB typical)",
2049
+ ),
2015
2050
  ) -> None:
2016
2051
  """Deterministic symbol-level IR for Java repositories.
2017
2052
 
2018
2053
  \b
2019
2054
  Extracts symbols, relations, Spring roles, and (with --since) symbol-level diffs.
2020
- Output is JSON: symbols[], relations[], changed_symbols[], spring_summary, graph_metadata.
2055
+ Output is JSON: graph{nodes,edges}, analysis, impact, subsystems, change_set.
2056
+
2057
+ \b
2058
+ Size control:
2059
+ --summary-only Omit full graph; keep analysis + impact (smallest output)
2060
+ --max-nodes N Keep top N nodes by score
2061
+ --max-edges N Keep top N edges (priority: both endpoints kept)
2021
2062
 
2022
2063
  \b
2023
2064
  Examples:
@@ -2025,11 +2066,13 @@ def repo_ir_cmd(
2025
2066
  sourcecode repo-ir /path/to/repo --since HEAD~1
2026
2067
  sourcecode repo-ir --files src/main/java/UserService.java
2027
2068
  sourcecode repo-ir --since main --output ir.json
2069
+ sourcecode repo-ir --since HEAD~3 --summary-only --output ir-small.json
2070
+ sourcecode repo-ir --max-nodes 200 --max-edges 500
2028
2071
  """
2029
2072
  import json as _json
2030
2073
  import sys as _sys
2031
2074
 
2032
- from sourcecode.repository_ir import build_repo_ir, find_java_files
2075
+ from sourcecode.repository_ir import apply_ir_size_limits, build_repo_ir, find_java_files
2033
2076
 
2034
2077
  root = path.resolve()
2035
2078
  if not root.is_dir():
@@ -2063,11 +2106,24 @@ def repo_ir_cmd(
2063
2106
  return
2064
2107
 
2065
2108
  ir = build_repo_ir(file_list, root, since=since)
2109
+ ir = apply_ir_size_limits(
2110
+ ir,
2111
+ max_nodes=max_nodes,
2112
+ max_edges=max_edges,
2113
+ summary_only=summary_only,
2114
+ )
2066
2115
  output = _json.dumps(ir, indent=2, ensure_ascii=False)
2067
2116
 
2068
2117
  if output_path:
2069
2118
  output_path.write_text(output, encoding="utf-8")
2070
- typer.echo(f"IR written to {output_path}", err=True)
2119
+ n_nodes = len((ir.get("graph") or {}).get("nodes") or [])
2120
+ n_edges = len((ir.get("graph") or {}).get("edges") or [])
2121
+ size_kb = len(output.encode("utf-8")) // 1024
2122
+ typer.echo(
2123
+ f"IR written to {output_path} "
2124
+ f"({size_kb}KB, {n_nodes} nodes, {n_edges} edges)",
2125
+ err=True,
2126
+ )
2071
2127
  else:
2072
2128
  _sys.stdout.write(output)
2073
2129
  _sys.stdout.write("\n")
@@ -623,6 +623,8 @@ def _find_symbol_files(
623
623
  cwd=str(root),
624
624
  capture_output=True,
625
625
  text=True,
626
+ encoding="utf-8",
627
+ errors="replace",
626
628
  timeout=20,
627
629
  )
628
630
  for line in result.stdout.splitlines():
@@ -52,8 +52,15 @@ _HOTSPOT_AUX_DIRS: frozenset[str] = frozenset({
52
52
  "sandbox", "sandboxes",
53
53
  "ci", "translations", "locales", "locale", "i18n", "l10n",
54
54
  ".planning",
55
+ # vendor / build dirs: high path count, zero operational signal
56
+ "vendor", "node_modules", "dist", "target", "build",
57
+ ".gradle", ".mvn", "generated-sources", "generated-resources",
55
58
  })
56
59
 
60
+ # When git diff returns more changed files than this, degrade gracefully:
61
+ # truncate hotspot analysis depth and emit a structured warning.
62
+ _CHANGED_FILES_DEGRADATION_THRESHOLD = 200
63
+
57
64
 
58
65
  def _run_git(args: list[str], cwd: Path, timeout: int = 15) -> tuple[str, int]:
59
66
  result = subprocess.run(