sourcecode 1.31.26__tar.gz → 1.31.27__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 (230) hide show
  1. sourcecode-1.31.27/.continue-here.md +73 -0
  2. {sourcecode-1.31.26 → sourcecode-1.31.27}/PKG-INFO +3 -3
  3. {sourcecode-1.31.26 → sourcecode-1.31.27}/README.md +2 -2
  4. {sourcecode-1.31.26 → sourcecode-1.31.27}/pyproject.toml +1 -1
  5. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/__init__.py +1 -1
  6. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/canonical_ir.py +2 -0
  7. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/cli.py +4 -0
  8. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/server.py +6 -3
  9. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/repository_ir.py +71 -2
  10. sourcecode-1.31.26/.continue-here.md +0 -70
  11. {sourcecode-1.31.26 → sourcecode-1.31.27}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
  12. {sourcecode-1.31.26 → sourcecode-1.31.27}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
  13. {sourcecode-1.31.26 → sourcecode-1.31.27}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
  14. {sourcecode-1.31.26 → sourcecode-1.31.27}/.github/workflows/build-windows.yml +0 -0
  15. {sourcecode-1.31.26 → sourcecode-1.31.27}/.gitignore +0 -0
  16. {sourcecode-1.31.26 → sourcecode-1.31.27}/.ruff.toml +0 -0
  17. {sourcecode-1.31.26 → sourcecode-1.31.27}/.sourcecode-cache/snapshot-3b5997a-fa5c742c.json +0 -0
  18. {sourcecode-1.31.26 → sourcecode-1.31.27}/AUDIT_REAL_REPOS.md +0 -0
  19. {sourcecode-1.31.26 → sourcecode-1.31.27}/AUDIT_v1.31.23.md +0 -0
  20. {sourcecode-1.31.26 → sourcecode-1.31.27}/CHANGELOG.md +0 -0
  21. {sourcecode-1.31.26 → sourcecode-1.31.27}/CONTRIBUTING.md +0 -0
  22. {sourcecode-1.31.26 → sourcecode-1.31.27}/LICENSE +0 -0
  23. {sourcecode-1.31.26 → sourcecode-1.31.27}/SECURITY.md +0 -0
  24. {sourcecode-1.31.26 → sourcecode-1.31.27}/docs/PRODUCT_TIERS.md +0 -0
  25. {sourcecode-1.31.26 → sourcecode-1.31.27}/docs/privacy.md +0 -0
  26. {sourcecode-1.31.26 → sourcecode-1.31.27}/docs/schema.md +0 -0
  27. {sourcecode-1.31.26 → sourcecode-1.31.27}/raw +0 -0
  28. {sourcecode-1.31.26 → sourcecode-1.31.27}/run_cli.py +0 -0
  29. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/adaptive_scanner.py +0 -0
  30. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/architecture_analyzer.py +0 -0
  31. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/architecture_summary.py +0 -0
  32. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/ast_extractor.py +0 -0
  33. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/cache.py +0 -0
  34. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/classifier.py +0 -0
  35. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/code_notes_analyzer.py +0 -0
  36. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/confidence_analyzer.py +0 -0
  37. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/context_scorer.py +0 -0
  38. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/context_summarizer.py +0 -0
  39. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/contract_model.py +0 -0
  40. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/contract_pipeline.py +0 -0
  41. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/coverage_parser.py +0 -0
  42. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/dependency_analyzer.py +0 -0
  43. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/__init__.py +0 -0
  44. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/base.py +0 -0
  45. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/csproj_parser.py +0 -0
  46. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/dart.py +0 -0
  47. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/dotnet.py +0 -0
  48. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/elixir.py +0 -0
  49. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/go.py +0 -0
  50. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/heuristic.py +0 -0
  51. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/hybrid.py +0 -0
  52. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/java.py +0 -0
  53. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/jvm_ext.py +0 -0
  54. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/nodejs.py +0 -0
  55. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/parsers.py +0 -0
  56. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/php.py +0 -0
  57. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/project.py +0 -0
  58. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/python.py +0 -0
  59. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/ruby.py +0 -0
  60. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/rust.py +0 -0
  61. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/systems.py +0 -0
  62. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/terraform.py +0 -0
  63. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/detectors/tooling.py +0 -0
  64. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/doc_analyzer.py +0 -0
  65. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/entrypoint_classifier.py +0 -0
  66. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/env_analyzer.py +0 -0
  67. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/file_classifier.py +0 -0
  68. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/flow_analyzer.py +0 -0
  69. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/git_analyzer.py +0 -0
  70. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/graph_analyzer.py +0 -0
  71. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/__init__.py +0 -0
  72. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  73. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  74. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  75. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  76. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  77. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/mcp/runner.py +0 -0
  78. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/metrics_analyzer.py +0 -0
  79. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/output_budget.py +0 -0
  80. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/path_filters.py +0 -0
  81. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/pr_comment_renderer.py +0 -0
  82. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/prepare_context.py +0 -0
  83. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/progress.py +0 -0
  84. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/ranking_engine.py +0 -0
  85. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/redactor.py +0 -0
  86. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/relevance_scorer.py +0 -0
  87. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/repo_classifier.py +0 -0
  88. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/runtime_classifier.py +0 -0
  89. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/scanner.py +0 -0
  90. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/schema.py +0 -0
  91. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/semantic_analyzer.py +0 -0
  92. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/serializer.py +0 -0
  93. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/summarizer.py +0 -0
  94. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/__init__.py +0 -0
  95. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/config.py +0 -0
  96. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/consent.py +0 -0
  97. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/events.py +0 -0
  98. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/filters.py +0 -0
  99. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/telemetry/transport.py +0 -0
  100. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/tree_utils.py +0 -0
  101. {sourcecode-1.31.26 → sourcecode-1.31.27}/src/sourcecode/workspace.py +0 -0
  102. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/__init__.py +0 -0
  103. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/conftest.py +0 -0
  104. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/coverage.xml +0 -0
  105. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  106. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/fastapi_app/src/main.py +0 -0
  107. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  108. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/go_service/go.mod +0 -0
  109. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/jacoco.xml +0 -0
  110. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/latin1_sample.java +0 -0
  111. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/latin1_sample_iso.java +0 -0
  112. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/lcov.info +0 -0
  113. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  114. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/nextjs_app/package.json +0 -0
  115. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  116. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  117. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  118. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  119. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  120. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  121. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
  122. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
  123. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
  124. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
  125. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
  126. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
  127. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
  128. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
  129. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
  130. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
  131. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
  132. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
  133. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
  134. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
  135. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
  136. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
  137. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
  138. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
  139. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
  140. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
  141. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
  142. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
  143. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
  144. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
  145. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
  146. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
  147. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
  148. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_architecture_analyzer.py +0 -0
  149. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_architecture_summary.py +0 -0
  150. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_ast_extractor.py +0 -0
  151. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_audit_fixes.py +0 -0
  152. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_audit_sas_v2.py +0 -0
  153. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_block1_reliability.py +0 -0
  154. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_block2_coverage.py +0 -0
  155. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_block5_quality.py +0 -0
  156. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_broadleaf_fixes.py +0 -0
  157. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v1302.py +0 -0
  158. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v13115.py +0 -0
  159. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v1312.py +0 -0
  160. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v13122.py +0 -0
  161. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v1313.py +0 -0
  162. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v1321.py +0 -0
  163. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v16.py +0 -0
  164. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_bug_fixes_v2.py +0 -0
  165. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_cache.py +0 -0
  166. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_canonical_ir.py +0 -0
  167. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_classifier.py +0 -0
  168. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_cli.py +0 -0
  169. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_code_notes_analyzer.py +0 -0
  170. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_context_scorer.py +0 -0
  171. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_contract_pipeline.py +0 -0
  172. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_coverage_parser.py +0 -0
  173. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_cross_consistency.py +0 -0
  174. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_dependency_analyzer_node_python.py +0 -0
  175. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_dependency_analyzer_polyglot.py +0 -0
  176. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_dependency_schema.py +0 -0
  177. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_dotnet.py +0 -0
  178. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_go_rust_java.py +0 -0
  179. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_nodejs.py +0 -0
  180. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_php_ruby_dart.py +0 -0
  181. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_python.py +0 -0
  182. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_universal_managed.py +0 -0
  183. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detector_universal_systems.py +0 -0
  184. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_detectors_base.py +0 -0
  185. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_doc_analyzer_jsdom.py +0 -0
  186. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_doc_analyzer_python.py +0 -0
  187. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_encoding_regression.py +0 -0
  188. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_enterprise_benchmarks.py +0 -0
  189. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_graph_analyzer_polyglot.py +0 -0
  190. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_graph_analyzer_python_node.py +0 -0
  191. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_graph_schema.py +0 -0
  192. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_hybrid_inference.py +0 -0
  193. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration.py +0 -0
  194. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_dependencies.py +0 -0
  195. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_detection.py +0 -0
  196. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_docs.py +0 -0
  197. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_graph_modules.py +0 -0
  198. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_lqn.py +0 -0
  199. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_metrics.py +0 -0
  200. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_multistack.py +0 -0
  201. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_semantics.py +0 -0
  202. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_integration_universal.py +0 -0
  203. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_java_spring_integration.py +0 -0
  204. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_mcp_runner.py +0 -0
  205. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_mcp_serve.py +0 -0
  206. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_mcp_tools.py +0 -0
  207. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_metrics_analyzer.py +0 -0
  208. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_output_ux.py +0 -0
  209. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_packaging.py +0 -0
  210. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_phase1_improvements.py +0 -0
  211. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_pipeline_integrity.py +0 -0
  212. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_real_projects.py +0 -0
  213. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_redactor.py +0 -0
  214. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_repository_ir.py +0 -0
  215. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_scanner.py +0 -0
  216. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_schema.py +0 -0
  217. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_schema_normalization.py +0 -0
  218. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_scoring_calibration.py +0 -0
  219. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_semantic_analyzer_node.py +0 -0
  220. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_semantic_analyzer_python.py +0 -0
  221. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_semantic_import_resolution.py +0 -0
  222. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_semantic_schema.py +0 -0
  223. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_signal_hierarchy.py +0 -0
  224. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_summarizer.py +0 -0
  225. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_surface_honesty.py +0 -0
  226. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_task_differentiation.py +0 -0
  227. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_telemetry.py +0 -0
  228. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_v131_improvements.py +0 -0
  229. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_v1_10_regressions.py +0 -0
  230. {sourcecode-1.31.26 → sourcecode-1.31.27}/tests/test_workspace_analyzer.py +0 -0
@@ -0,0 +1,73 @@
1
+ # Handoff — Sesión 31 (2026-05-26)
2
+
3
+ ## Position
4
+
5
+ **Project:** sourcecode (atlas-cli)
6
+ **Activity:** Post-audit bug fixing — AUDIT_v1.31.23.md / P0 blockers
7
+ **Branch:** master
8
+ **Last commit:** e0fab96 — fix(mcp,cli): three P0 blockers — exit codes, Windows paths, timeout
9
+ **Tests:** 1590 passed, 3 skipped ✅
10
+
11
+ ---
12
+
13
+ ## Work Done This Session
14
+
15
+ ### Session 31 (this session)
16
+ **Three P0 blockers fixed:**
17
+
18
+ **P0-1: Exit codes** (`cli.py`)
19
+ - `--compact --full` now exits 1 (was 2); all controlled errors → exit 1
20
+ - Updated `test_enterprise_benchmarks.py::test_compact_full_conflict_is_error` assertion 2→1
21
+
22
+ **P0-2: MCP Windows paths** (`mcp/server.py`)
23
+ - `_normalize_repo_path()`: MINGW `/c/Users/...` → `C:/Users/...`, backslash → forward slash
24
+ - Applied to all 13 tools that accept `repo_path`
25
+ - Each tool wrapped in `try/except Exception` → never exposes uncaught exception to stdio transport
26
+ - Forward-slash note added to `mcp status` and `mcp init` output
27
+
28
+ **P0-3: generate_tests_context timeout** (`mcp/server.py`)
29
+ - Bounded by `SOURCECODE_TESTS_TIMEOUT_MS` env var (default: 15 000 ms)
30
+ - Uses `concurrent.futures.wait([future], timeout=timeout_s)` for wall-clock limit
31
+ - Returns `{truncated: true, truncated_reason: "timeout_15s", files_analyzed: 0, results: []}` on timeout
32
+ - Normal repos complete well within limit (0.8s on atlas-cli itself)
33
+
34
+ ---
35
+
36
+ ## Remaining from AUDIT_v1.31.23.md
37
+
38
+ ### P2 unfixed (section 13, items 6–18)
39
+ | # | Issue | File | Effort |
40
+ |---|---|---|---|
41
+ | P2-06 | `subsystem_summary.member_count` always 0 | cli.py modernize_cmd | Medium |
42
+ | P2-07 | `no_security_signal` → detect filter-based security → `security_model: "filter_based"` | repository_ir.py | Medium |
43
+ | P2-10 | `architecture.confidence` inconsistent between `--compact` and `--agent` | serializer.py | Low |
44
+ | P2-13 | `--no-cache` flag inconsistent across subcommands | cli.py | Medium |
45
+ | P2-14 | URLs in code_notes truncated (missing `https://bugs.` prefix) | code_notes_analyzer.py | Low (needs repro) |
46
+ | P2-16 | `entry_points.controllers.methods` mismatches `endpoints` count | cli.py | Medium |
47
+ | P2-17 | `--compact --help` token claim outdated | cli.py | Trivial |
48
+ | P2-18 | `impact` via file path: resolve to FQN before IR lookup | repository_ir.py | Low |
49
+
50
+ ---
51
+
52
+ ## Key Files Modified (this session)
53
+
54
+ ```
55
+ src/sourcecode/cli.py — exit code 2→1 for --compact --full; forward-slash notes
56
+ src/sourcecode/mcp/server.py — _normalize_repo_path, try/except all tools, timeout P0-3
57
+ tests/test_enterprise_benchmarks.py — assertion exit_code 2→1
58
+ ```
59
+
60
+ ---
61
+
62
+ ## Next Session
63
+
64
+ **Recommended start:** Fix `subsystem_summary.member_count` (P2-06).
65
+
66
+ Root cause: `_detect_subsystems()` in `repository_ir.py` builds subsystems without populating
67
+ `members` list. `modernize_cmd` reads `len(s.get("members") or [])` → always 0.
68
+
69
+ Then: `--no-cache` flag consistency audit (P2-13).
70
+
71
+ **Resume command:** `/gsd:resume-work`
72
+
73
+ **Test baseline:** `python3 -m pytest tests/ → 1590 passed, 3 skipped`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.31.26
3
+ Version: 1.31.27
4
4
  Summary: Deterministic codebase context for AI coding agents
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -225,7 +225,7 @@ Description-Content-Type: text/markdown
225
225
 
226
226
  **AI-ready change intelligence for Java/Spring enterprise monoliths.**
227
227
 
228
- ![Version](https://img.shields.io/badge/version-1.31.26-blue)
228
+ ![Version](https://img.shields.io/badge/version-1.31.27-blue)
229
229
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
230
230
 
231
231
  ---
@@ -263,7 +263,7 @@ pipx install sourcecode
263
263
 
264
264
  ```bash
265
265
  sourcecode version
266
- # sourcecode 1.31.26
266
+ # sourcecode 1.31.27
267
267
  ```
268
268
 
269
269
  ---
@@ -2,7 +2,7 @@
2
2
 
3
3
  **AI-ready change intelligence for Java/Spring enterprise monoliths.**
4
4
 
5
- ![Version](https://img.shields.io/badge/version-1.31.26-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.31.27-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -40,7 +40,7 @@ pipx install sourcecode
40
40
 
41
41
  ```bash
42
42
  sourcecode version
43
- # sourcecode 1.31.26
43
+ # sourcecode 1.31.27
44
44
  ```
45
45
 
46
46
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.31.26"
7
+ version = "1.31.27"
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.31.26"
3
+ __version__ = "1.31.27"
@@ -332,6 +332,7 @@ def ir_dict_to_canonical(
332
332
  "spring_events": ir.get("spring_events") or {},
333
333
  "score_basis": (ir.get("impact") or {}).get("score_basis", "none"),
334
334
  "reverse_graph_size": len(ir.get("reverse_graph") or {}),
335
+ "security_model": ir.get("security_model", "unknown"),
335
336
  }
336
337
 
337
338
  cir_hash = _compute_cir_hash(
@@ -452,6 +453,7 @@ def project_endpoint_surface(cir: CanonicalRepositoryIR) -> dict:
452
453
  "endpoints": endpoints,
453
454
  "total": len(endpoints),
454
455
  "no_security_signal": no_security_signal,
456
+ "security_model": cir.metadata.get("security_model", "unknown"),
455
457
  # Legacy field alias — same count, kept for backward compat
456
458
  "undocumented": no_security_signal,
457
459
  }
@@ -1127,10 +1127,14 @@ def main(
1127
1127
 
1128
1128
  # --compact implicitly enables lightweight analysis passes so that
1129
1129
  # dependency_summary, env_summary and code_notes_summary are never null.
1130
+ # architecture=True is also enabled so that architecture.confidence is
1131
+ # consistent with --agent (which auto-enables architecture). The
1132
+ # ArchitectureAnalyzer is path-based and adds negligible latency.
1130
1133
  if compact:
1131
1134
  dependencies = True
1132
1135
  env_map = True
1133
1136
  code_notes = True
1137
+ architecture = True
1134
1138
 
1135
1139
  dependency_analyzer = DependencyAnalyzer() if dependencies else None
1136
1140
  graph_analyzer = GraphAnalyzer() if graph_modules else None
@@ -158,9 +158,12 @@ def get_endpoints(repo_path: str = ".") -> dict:
158
158
  Returns: endpoints list with method, path, controller, handler fields;
159
159
  security dict when authorization annotations are present
160
160
  (policy: roles_allowed|permit_all|deny_all|authenticated|...);
161
- total (int) and no_security_signal (int) counts.
162
- no_security_signal counts endpoints with no recognized auth annotation
163
- repos using framework-level auth (e.g. Keycloak) may show high counts.
161
+ total (int), no_security_signal (int), and security_model (str) fields.
162
+ no_security_signal counts endpoints with no recognized auth annotation.
163
+ security_model values: "filter_based" (centralized Spring Security config
164
+ high no_security_signal is expected and does NOT mean endpoints are unprotected),
165
+ "annotation_based" (per-endpoint annotations only), "mixed" (both),
166
+ "unknown" (no security signals detected).
164
167
  Supports Spring MVC (@GetMapping etc.) and JAX-RS (@GET/@POST etc.).
165
168
  Security annotations detected: @RolesAllowed, @PermitAll, @DenyAll,
166
169
  @Authenticated, @PreAuthorize, @Secured, @SecurityRequirement, @M3FiltroSeguridad.
@@ -192,6 +192,15 @@ _SECURITY_MARKER_ANNOTATIONS: frozenset[str] = frozenset({
192
192
  "@PermitAll", "@DenyAll", "@Authenticated",
193
193
  })
194
194
 
195
+ # Annotations on config classes that indicate a centralized security filter chain
196
+ # (Spring Security / Spring Boot). When present, per-endpoint no_security_signal
197
+ # is expected and does NOT mean endpoints are unprotected.
198
+ _FILTER_SECURITY_ANNOTATIONS: frozenset[str] = frozenset({
199
+ "@EnableWebSecurity",
200
+ "@EnableMethodSecurity",
201
+ "@EnableGlobalMethodSecurity",
202
+ })
203
+
195
204
  _MODIFIER_WORDS: frozenset[str] = frozenset({
196
205
  "public", "private", "protected", "static", "final", "abstract",
197
206
  "synchronized", "native", "strictfp", "transient", "volatile", "default",
@@ -1711,6 +1720,7 @@ def _detect_subsystems(all_fqns: list[str], relations: list[RelationEdge]) -> li
1711
1720
  "label": label,
1712
1721
  "package_prefix": pkg_prefix,
1713
1722
  "member_count": len(members),
1723
+ "members": members,
1714
1724
  "summary": summary,
1715
1725
  })
1716
1726
  return result
@@ -2132,17 +2142,47 @@ def _assemble(
2132
2142
  "change_set": change_set_out,
2133
2143
  }
2134
2144
 
2135
- _route_surface = _build_route_surface(sorted_syms, route_diffs, extends_map={
2145
+ _extends_map = {
2136
2146
  e.from_symbol: e.to_symbol.split(".")[-1]
2137
2147
  for e in sorted_rels if e.type == "extends"
2138
- })
2148
+ }
2149
+ _route_surface = _build_route_surface(sorted_syms, route_diffs, extends_map=_extends_map)
2139
2150
  _analysis_gaps = _compute_analysis_gaps(sorted_syms, spring_summary, _route_surface, sorted_rels)
2140
2151
 
2152
+ # Detect filter-based security model for the assembled IR.
2153
+ # Stored here so CIR projections (project_endpoint_surface) can read it without
2154
+ # re-parsing symbols.
2155
+ _class_syms_asm = [s for s in sorted_syms if s.type in ("class", "interface")]
2156
+ _filter_based_asm = (
2157
+ any(
2158
+ ann in _FILTER_SECURITY_ANNOTATIONS
2159
+ for sym in _class_syms_asm
2160
+ for ann in sym.annotations
2161
+ )
2162
+ or any(
2163
+ _extends_map.get(sym.symbol, "") == "WebSecurityConfigurerAdapter"
2164
+ for sym in _class_syms_asm
2165
+ )
2166
+ )
2167
+ _has_ann_sec_asm = any(
2168
+ r.get("security_annotations") for r in _route_surface
2169
+ if isinstance(r, dict)
2170
+ )
2171
+ if _filter_based_asm and _has_ann_sec_asm:
2172
+ _security_model_asm = "mixed"
2173
+ elif _filter_based_asm:
2174
+ _security_model_asm = "filter_based"
2175
+ elif _has_ann_sec_asm:
2176
+ _security_model_asm = "annotation_based"
2177
+ else:
2178
+ _security_model_asm = "unknown"
2179
+
2141
2180
  return {
2142
2181
  **_base,
2143
2182
  "route_surface": _route_surface,
2144
2183
  "spring_events": _spring_events,
2145
2184
  "analysis_gaps": _analysis_gaps,
2185
+ "security_model": _security_model_asm,
2146
2186
  "audit": {
2147
2187
  "dropped_fields": dropped_fields,
2148
2188
  },
@@ -2908,10 +2948,39 @@ def extract_java_endpoints(root: Path) -> "dict[str, Any]":
2908
2948
  # Note: repos may use framework-level security (e.g. Keycloak itself) with no
2909
2949
  # per-endpoint annotations — this count reflects annotation-based coverage only.
2910
2950
  no_security_signal = sum(1 for e in endpoints if "security" not in e)
2951
+
2952
+ # Detect filter-based security: centralized Spring Security config class.
2953
+ # When present, high no_security_signal is expected — security is enforced by
2954
+ # the filter chain, not per-endpoint annotations.
2955
+ _class_syms = [s for s in all_symbols if s.type in ("class", "interface")]
2956
+ _filter_based = (
2957
+ # Config class annotated with EnableWebSecurity / EnableMethodSecurity
2958
+ any(
2959
+ ann in _FILTER_SECURITY_ANNOTATIONS
2960
+ for sym in _class_syms
2961
+ for ann in sym.annotations
2962
+ )
2963
+ # Class extends WebSecurityConfigurerAdapter (pre-Spring 5.7 style)
2964
+ or any(
2965
+ extends_map.get(sym.symbol, "") == "WebSecurityConfigurerAdapter"
2966
+ for sym in _class_syms
2967
+ )
2968
+ )
2969
+ _has_annotation_security = any("security" in e for e in endpoints)
2970
+ if _filter_based and _has_annotation_security:
2971
+ security_model = "mixed"
2972
+ elif _filter_based:
2973
+ security_model = "filter_based"
2974
+ elif _has_annotation_security:
2975
+ security_model = "annotation_based"
2976
+ else:
2977
+ security_model = "unknown"
2978
+
2911
2979
  return {
2912
2980
  "endpoints": endpoints,
2913
2981
  "total": len(endpoints),
2914
2982
  "no_security_signal": no_security_signal,
2983
+ "security_model": security_model,
2915
2984
  # Keep legacy field name for backward compat, now means same as no_security_signal
2916
2985
  "undocumented": no_security_signal,
2917
2986
  }
@@ -1,70 +0,0 @@
1
- # Handoff — Sesión 30 (2026-05-26)
2
-
3
- ## Position
4
-
5
- **Project:** sourcecode (atlas-cli)
6
- **Activity:** Post-audit bug fixing — AUDIT_v1.31.23.md
7
- **Branch:** master
8
- **Last commit:** f225ab2 — (fix) updating flags in order to copy the output in the clipboard
9
- **Tests:** 1590 passed, 3 skipped ✅
10
-
11
- ---
12
-
13
- ## Work Done This Session
14
-
15
- ### Session 30 (this session)
16
- **`--copy/-c` flag parity across all output commands** (`cli.py`):
17
- - `impact_cmd`: added `--copy/-c` option + copy logic (fires only when no `--output`)
18
- - `repo_ir_cmd`: added `--copy/-c` option + copy logic (after stdout write, before UnicodeEncodeError path)
19
- - `endpoints_cmd`: added `--copy/-c` option + copy logic
20
-
21
- All three now consistent with existing commands (`main`, `prepare-context`, `onboard`, `review-pr`, `fix-bug`, `modernize`).
22
-
23
- Pattern: `if copy: if _copy_to_clipboard(output): typer.echo("✓ copied to clipboard", err=True)`
24
-
25
- ---
26
-
27
- ## Remaining from AUDIT_v1.31.23.md
28
-
29
- ### P2 unfixed (section 13, items 6–18)
30
- | # | Issue | File | Effort |
31
- |---|---|---|---|
32
- | P2-06 | `subsystem_summary.member_count` always 0 | cli.py modernize_cmd | Medium |
33
- | P2-07 | `no_security_signal` → detect filter-based security → `security_model: "filter_based"` | repository_ir.py | Medium |
34
- | P2-10 | `architecture.confidence` inconsistent between `--compact` and `--agent` | serializer.py | Low |
35
- | P2-13 | `--no-cache` flag inconsistent across subcommands (`--copy` now fixed) | cli.py | Medium |
36
- | P2-14 | URLs in code_notes truncated (missing `https://bugs.` prefix) | code_notes_analyzer.py | Low (needs repro) |
37
- | P2-16 | `entry_points.controllers.methods` mismatches `endpoints` count | cli.py | Medium |
38
- | P2-17 | `--compact --help` token claim outdated | cli.py | Trivial |
39
- | P2-18 | `impact` via file path: resolve to FQN before IR lookup | repository_ir.py | Low |
40
-
41
- ### Score from Session 29
42
- | Dimension | v1.31.23 | After S29 | Fix applied |
43
- |---|---|---|---|
44
- | Correctness impl classes | 8/10 | 8.5/10 | BFS sampling |
45
- | Onboarding context quality | 7/10 | 8/10 | project_summary quantitative + bounded_contexts |
46
- | Modernize/dead code | 3/10 | 5.5/10 | hotspots with churn, roles classified |
47
- | Java/Spring depth | 8/10 | 8.5/10 | bounded_contexts Maven modules |
48
- | **TOTAL** | **6.5/10** | **~7.2/10** | |
49
-
50
- ---
51
-
52
- ## Key Files Modified (this session)
53
-
54
- ```
55
- src/sourcecode/cli.py — --copy/-c added to impact_cmd, repo_ir_cmd, endpoints_cmd
56
- ```
57
-
58
- ---
59
-
60
- ## Next Session
61
-
62
- **Recommended start:** Fix `subsystem_summary.member_count` (P2-06).
63
-
64
- Root cause: `_detect_subsystems()` in `repository_ir.py` builds subsystems but doesn't populate the `members` list that `modernize_cmd` reads via `len(s.get("members") or [])`. Fix: ensure each subsystem dict includes the list of FQNs.
65
-
66
- Then: `--no-cache` flag consistency audit (P2-13 remainder).
67
-
68
- **Resume command:** `/gsd:resume-work`
69
-
70
- **Test baseline:** `python3 -m pytest tests/ → 1590 passed, 3 skipped`
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes