sourcecode 1.18.0__tar.gz → 1.19.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. sourcecode-1.19.0/.continue-here.md +178 -0
  2. {sourcecode-1.18.0 → sourcecode-1.19.0}/PKG-INFO +3 -3
  3. {sourcecode-1.18.0 → sourcecode-1.19.0}/README.md +2 -2
  4. {sourcecode-1.18.0 → sourcecode-1.19.0}/pyproject.toml +1 -1
  5. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/__init__.py +1 -1
  6. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/prepare_context.py +41 -3
  7. sourcecode-1.18.0/.continue-here.md +0 -125
  8. {sourcecode-1.18.0 → sourcecode-1.19.0}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
  9. {sourcecode-1.18.0 → sourcecode-1.19.0}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
  10. {sourcecode-1.18.0 → sourcecode-1.19.0}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
  11. {sourcecode-1.18.0 → sourcecode-1.19.0}/.github/workflows/build-windows.yml +0 -0
  12. {sourcecode-1.18.0 → sourcecode-1.19.0}/.gitignore +0 -0
  13. {sourcecode-1.18.0 → sourcecode-1.19.0}/.ruff.toml +0 -0
  14. {sourcecode-1.18.0 → sourcecode-1.19.0}/CONTRIBUTING.md +0 -0
  15. {sourcecode-1.18.0 → sourcecode-1.19.0}/LICENSE +0 -0
  16. {sourcecode-1.18.0 → sourcecode-1.19.0}/SECURITY.md +0 -0
  17. {sourcecode-1.18.0 → sourcecode-1.19.0}/docs/privacy.md +0 -0
  18. {sourcecode-1.18.0 → sourcecode-1.19.0}/docs/schema.md +0 -0
  19. {sourcecode-1.18.0 → sourcecode-1.19.0}/raw +0 -0
  20. {sourcecode-1.18.0 → sourcecode-1.19.0}/run_cli.py +0 -0
  21. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/adaptive_scanner.py +0 -0
  22. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/architecture_analyzer.py +0 -0
  23. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/architecture_summary.py +0 -0
  24. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/ast_extractor.py +0 -0
  25. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/classifier.py +0 -0
  26. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/cli.py +0 -0
  27. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  28. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/confidence_analyzer.py +0 -0
  29. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/context_scorer.py +0 -0
  30. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/context_summarizer.py +0 -0
  31. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/contract_model.py +0 -0
  32. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/contract_pipeline.py +0 -0
  33. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/coverage_parser.py +0 -0
  34. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/dependency_analyzer.py +0 -0
  35. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/__init__.py +0 -0
  36. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/base.py +0 -0
  37. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  38. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/dart.py +0 -0
  39. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/dotnet.py +0 -0
  40. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/elixir.py +0 -0
  41. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/go.py +0 -0
  42. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/heuristic.py +0 -0
  43. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/hybrid.py +0 -0
  44. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/java.py +0 -0
  45. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  46. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/nodejs.py +0 -0
  47. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/parsers.py +0 -0
  48. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/php.py +0 -0
  49. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/project.py +0 -0
  50. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/python.py +0 -0
  51. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/ruby.py +0 -0
  52. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/rust.py +0 -0
  53. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/systems.py +0 -0
  54. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/terraform.py +0 -0
  55. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/detectors/tooling.py +0 -0
  56. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/doc_analyzer.py +0 -0
  57. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  58. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/env_analyzer.py +0 -0
  59. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/file_classifier.py +0 -0
  60. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/git_analyzer.py +0 -0
  61. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/graph_analyzer.py +0 -0
  62. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/metrics_analyzer.py +0 -0
  63. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/progress.py +0 -0
  64. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/ranking_engine.py +0 -0
  65. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/redactor.py +0 -0
  66. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/relevance_scorer.py +0 -0
  67. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/repo_classifier.py +0 -0
  68. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/runtime_classifier.py +0 -0
  69. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/scanner.py +0 -0
  70. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/schema.py +0 -0
  71. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/semantic_analyzer.py +0 -0
  72. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/serializer.py +0 -0
  73. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/summarizer.py +0 -0
  74. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/__init__.py +0 -0
  75. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/config.py +0 -0
  76. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/consent.py +0 -0
  77. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/events.py +0 -0
  78. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/filters.py +0 -0
  79. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/telemetry/transport.py +0 -0
  80. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/tree_utils.py +0 -0
  81. {sourcecode-1.18.0 → sourcecode-1.19.0}/src/sourcecode/workspace.py +0 -0
  82. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/__init__.py +0 -0
  83. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/conftest.py +0 -0
  84. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/coverage.xml +0 -0
  85. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  86. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
  87. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  88. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/go_service/go.mod +0 -0
  89. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/jacoco.xml +0 -0
  90. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/latin1_sample.java +0 -0
  91. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/latin1_sample_iso.java +0 -0
  92. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/lcov.info +0 -0
  93. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  94. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/nextjs_app/package.json +0 -0
  95. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  96. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  97. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  98. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  99. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  100. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  101. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
  102. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
  103. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
  104. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
  105. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
  106. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
  107. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
  108. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
  109. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
  110. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
  111. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
  112. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
  113. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
  114. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
  115. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
  116. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
  117. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
  118. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
  119. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
  120. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
  121. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
  122. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
  123. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
  124. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
  125. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
  126. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
  127. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
  128. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_architecture_analyzer.py +0 -0
  129. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_architecture_summary.py +0 -0
  130. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_ast_extractor.py +0 -0
  131. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_block1_reliability.py +0 -0
  132. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_block2_coverage.py +0 -0
  133. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_block5_quality.py +0 -0
  134. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_bug_fixes_v16.py +0 -0
  135. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_classifier.py +0 -0
  136. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_cli.py +0 -0
  137. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_code_notes_analyzer.py +0 -0
  138. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_context_scorer.py +0 -0
  139. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_contract_pipeline.py +0 -0
  140. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_coverage_parser.py +0 -0
  141. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_cross_consistency.py +0 -0
  142. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_dependency_analyzer_node_python.py +0 -0
  143. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_dependency_analyzer_polyglot.py +0 -0
  144. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_dependency_schema.py +0 -0
  145. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_dotnet.py +0 -0
  146. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_go_rust_java.py +0 -0
  147. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_nodejs.py +0 -0
  148. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_php_ruby_dart.py +0 -0
  149. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_python.py +0 -0
  150. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_universal_managed.py +0 -0
  151. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detector_universal_systems.py +0 -0
  152. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_detectors_base.py +0 -0
  153. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_doc_analyzer_jsdom.py +0 -0
  154. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_doc_analyzer_python.py +0 -0
  155. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_encoding_regression.py +0 -0
  156. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_graph_analyzer_polyglot.py +0 -0
  157. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_graph_analyzer_python_node.py +0 -0
  158. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_graph_schema.py +0 -0
  159. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_hybrid_inference.py +0 -0
  160. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration.py +0 -0
  161. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_dependencies.py +0 -0
  162. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_detection.py +0 -0
  163. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_docs.py +0 -0
  164. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_graph_modules.py +0 -0
  165. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_lqn.py +0 -0
  166. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_metrics.py +0 -0
  167. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_multistack.py +0 -0
  168. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_semantics.py +0 -0
  169. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_integration_universal.py +0 -0
  170. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_java_spring_integration.py +0 -0
  171. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_metrics_analyzer.py +0 -0
  172. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_packaging.py +0 -0
  173. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_phase1_improvements.py +0 -0
  174. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_pipeline_integrity.py +0 -0
  175. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_real_projects.py +0 -0
  176. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_redactor.py +0 -0
  177. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_scanner.py +0 -0
  178. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_schema.py +0 -0
  179. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_schema_normalization.py +0 -0
  180. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_semantic_analyzer_node.py +0 -0
  181. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_semantic_analyzer_python.py +0 -0
  182. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_semantic_import_resolution.py +0 -0
  183. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_semantic_schema.py +0 -0
  184. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_signal_hierarchy.py +0 -0
  185. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_summarizer.py +0 -0
  186. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_surface_honesty.py +0 -0
  187. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_task_differentiation.py +0 -0
  188. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_telemetry.py +0 -0
  189. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_v1_10_regressions.py +0 -0
  190. {sourcecode-1.18.0 → sourcecode-1.19.0}/tests/test_workspace_analyzer.py +0 -0
@@ -0,0 +1,178 @@
1
+ # Continue Here — atlas-cli v1.17.0 defect patch (saint-server round 2)
2
+
3
+ **Paused:** 2026-05-13 (session 2)
4
+ **Repo:** `/Users/user/Downloads/atlas-cli`
5
+ **Branch:** master
6
+
7
+ ---
8
+
9
+ ## Estado actual
10
+
11
+ Sesión 2: 6 defectos adicionales contra saint-server. **Sin commit** (instrucción explícita). Pipx venv reinstalado en modo editable para pruebas en vivo. 743 tests pasan.
12
+
13
+ ---
14
+
15
+ ## Defectos corregidos sesión 2 (ESTA SESIÓN)
16
+
17
+ | ID | Sev | Fix | Fichero |
18
+ |----|-----|-----|---------|
19
+ | FIX-1 | CRITICAL-3 | `--symptom` secondary pass: inyecta ficheros del árbol cuyo path contiene keywords del síntoma (antes solo re-ordenaba candidatos ya en pool). role="symptom_match", score=0.5+boost | `prepare_context.py:655-676` |
20
+ | FIX-2 | HIGH-2 | `_security_surface_from_eps` resuelve constantes Java `ClassName.FIELD_NAME` → busca `ClassName.java` en file_paths y extrae valor literal. `resource_names_unresolved[]` para las irresolubles. Call sites actualizados con root+file_paths | `serializer.py:428-522` |
21
+ | FIX-3 | HIGH-3 | Nota truncación: `"use --full for complete list"` → `"use --full to see all {total}"` | `serializer.py:434` |
22
+ | FIX-4 | REGRESSION | `_file_relevance` items ahora tienen campo `"score"` (= relevance_val). `GenericRestController`/`GenericCRUDRestController` override: category="runtime_core", score=0.95, relevance=0.95, reason/evidence/ranking_reasons específicos | `serializer.py:714-737` |
23
+ | FIX-5 | MEDIUM-3 | `compact_view` confidence_summary ahora incluye `"sections"` breakdown (igual que agent_view) | `serializer.py:1046-1052` |
24
+ | FIX-6 | LOW-1 | `_spring_profiles_context` portal profiles (con `-` en nombre): busca en path completo (no solo stem). Si no hay ficheros, añade perfil con `[]` para que esté presente en `per_profile_variants` | `serializer.py:386-406` |
25
+
26
+ ---
27
+
28
+ ## Defectos corregidos sesión 1 (pendientes de commit)
29
+
30
+ ### CRITICAL
31
+ | ID | Fix | Fichero |
32
+ |----|-----|---------|
33
+ | C1 | `_extract_first_useful_paragraph()` rechaza snippets startup via `_STARTUP_RE` | `summarizer.py` |
34
+ | C2 | `_bootstrap_structured()` emite `sample` (5 primeros) en vez de `modules` (todos) | `serializer.py` |
35
+ | C3 | `safe_read_text()` fallback UTF-8→ISO-8859-1→UTF-8/replace | `tree_utils.py` + consumidores |
36
+ | C4 | `_scan_java_patterns()` custom_annotations[] + base_classes[] | `architecture_analyzer.py` + `schema.py` |
37
+
38
+ ### HIGH
39
+ | ID | Fix | Fichero |
40
+ |----|-----|---------|
41
+ | H1 | `_spring_profiles_context()` estructura detallada | `serializer.py` |
42
+ | H2 | `_is_dto_mapper()` separa @Mapper real de DtoMapper | `serializer.py` |
43
+ | H3 | `_transactional_summary()` truncate a 10 + nota | `serializer.py` |
44
+ | H4 | `_TASK_CONTENT_MAP` per-task filter en prepare-context | `cli.py` + `prepare_context.py` |
45
+ | H5 | Fallback `git log -n 100` + campo `hotspot_method` | `git_analyzer.py` + `schema.py` |
46
+
47
+ ### MEDIUM / LOW
48
+ M1–M5, L1 — ver sesión 1.
49
+
50
+ ---
51
+
52
+ ## Ficheros modificados (ambas sesiones)
53
+
54
+ ```
55
+ src/sourcecode/architecture_analyzer.py sesión 1
56
+ src/sourcecode/cli.py sesión 1
57
+ src/sourcecode/code_notes_analyzer.py sesión 1
58
+ src/sourcecode/confidence_analyzer.py sesión 1
59
+ src/sourcecode/doc_analyzer.py sesión 1
60
+ src/sourcecode/git_analyzer.py sesión 1
61
+ src/sourcecode/schema.py sesión 1
62
+ src/sourcecode/serializer.py sesión 1 + sesión 2 (FIX-2,3,4,5,6)
63
+ src/sourcecode/summarizer.py sesión 1
64
+ src/sourcecode/tree_utils.py sesión 1
65
+ src/sourcecode/prepare_context.py sesión 1 + sesión 2 (FIX-1)
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Tests
71
+
72
+ - **743 passed, 3 skipped** (sin regresiones)
73
+ - Fallos pre-existentes excluidos:
74
+ - `test_block2_coverage.py::test_java_marked_unsupported`
75
+ - `test_dependency_analyzer_node_python.py::test_python_requirements_without_lockfile`
76
+ - `test_pipeline_integrity.py::TestBenchmarkContamination`
77
+
78
+ ---
79
+
80
+ ## Smoke tests para saint-server (pendientes — no tenemos acceso a saint-server aquí)
81
+
82
+ ```bash
83
+ # FIX-1: síntoma inyecta ficheros
84
+ sourcecode prepare-context fix-bug saint-server --symptom "ausencias contador" \
85
+ --output /tmp/fix_symptom.json
86
+ python3 -c "
87
+ import json; d=json.load(open('/tmp/fix_symptom.json'))
88
+ paths=[f['path'] for f in d['relevant_files']]
89
+ assert any('ausencias' in p for p in paths), 'ausencias not found'
90
+ assert any('contador' in p for p in paths), 'contador not found'
91
+ print('FIX-1 PASS')
92
+ "
93
+
94
+ # FIX-2: resource_names resueltos
95
+ sourcecode saint-server --compact --output /tmp/sec_test.json
96
+ python3 -c "
97
+ import json; d=json.load(open('/tmp/sec_test.json'))
98
+ unresolved=[r for r in d['security_surface']['resource_names']
99
+ if 'SeguridadRecursosConst.' in str(r)]
100
+ print(f'Unresolved: {len(unresolved)}')
101
+ assert len(unresolved) < 73, 'No improvement'
102
+ "
103
+
104
+ # FIX-3: note text correcto
105
+ sourcecode saint-server --compact --output /tmp/txn.json
106
+ python3 -c "
107
+ import json; d=json.load(open('/tmp/txn.json'))
108
+ note=d.get('transactional_boundaries',{}).get('note','')
109
+ assert '--full' in note and 'for complete list' not in note, f'bad note: {note}'
110
+ print('FIX-3 PASS:', note)
111
+ "
112
+
113
+ # FIX-4: score presente y no nulo
114
+ sourcecode saint-server --agent --output /tmp/agent_test.json
115
+ python3 -c "
116
+ import json; d=json.load(open('/tmp/agent_test.json'))
117
+ gcr=next((f for f in d['file_relevance'] if 'GenericRestController' in f['path']),None)
118
+ assert gcr is not None,'not found'
119
+ assert gcr['score'] is not None,'null score'
120
+ assert isinstance(gcr['score'],(int,float)),'not numeric'
121
+ print('FIX-4 PASS: score=', gcr['score'])
122
+ "
123
+
124
+ # FIX-5: sections en compact
125
+ sourcecode saint-server --compact --output /tmp/conf_test.json
126
+ python3 -c "
127
+ import json; d=json.load(open('/tmp/conf_test.json'))
128
+ cs=d['confidence_summary']
129
+ assert 'sections' in cs,'sections missing'
130
+ assert 'file_relevance' in cs['sections'],'file_relevance key missing'
131
+ print('FIX-5 PASS:', cs['sections'])
132
+ "
133
+
134
+ # FIX-6: portal profiles presentes
135
+ sourcecode saint-server --compact --output /tmp/prof_test.json
136
+ python3 -c "
137
+ import json; d=json.load(open('/tmp/prof_test.json'))
138
+ variants=d['spring_profiles']['per_profile_variants']
139
+ portal=[p for p in d['spring_profiles']['detected'] if 'portal' in p]
140
+ missing=[p for p in portal if p not in variants]
141
+ assert len(missing)==0, f'Still missing: {missing}'
142
+ print('FIX-6 PASS')
143
+ "
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Commit cuando listo
149
+
150
+ ```bash
151
+ git add src/sourcecode/serializer.py src/sourcecode/prepare_context.py \
152
+ src/sourcecode/architecture_analyzer.py src/sourcecode/cli.py \
153
+ src/sourcecode/code_notes_analyzer.py src/sourcecode/confidence_analyzer.py \
154
+ src/sourcecode/doc_analyzer.py src/sourcecode/git_analyzer.py \
155
+ src/sourcecode/schema.py src/sourcecode/summarizer.py \
156
+ src/sourcecode/tree_utils.py \
157
+ tests/test_encoding_regression.py tests/test_task_differentiation.py \
158
+ tests/fixtures/
159
+ git commit -m "fix: 21 saint-server defects across 2 sessions (C1-C4, H1-H5, M1-M5, L1, FIX-1 to FIX-6)"
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Para retomar
165
+
166
+ ```bash
167
+ cd /Users/user/Downloads/atlas-cli
168
+ git diff --stat # verificar ficheros modificados
169
+ python3 -m pytest tests/ \
170
+ --ignore=tests/test_block2_coverage.py \
171
+ --ignore=tests/test_dependency_analyzer_node_python.py \
172
+ --ignore=tests/test_pipeline_integrity.py -q
173
+ # Expected: 743 passed, 3 skipped
174
+ # Then run smoke tests above against saint-server
175
+ ```
176
+
177
+ ---
178
+ *Pausado 2026-05-13 sesión 2 — gsd:pause-work*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.18.0
3
+ Version: 1.19.0
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
  **Compressed AI-ready context for Java/Spring enterprise codebases.**
223
223
 
224
- ![Version](https://img.shields.io/badge/version-1.18.0-blue)
224
+ ![Version](https://img.shields.io/badge/version-1.19.0-blue)
225
225
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
226
226
 
227
227
  ---
@@ -255,7 +255,7 @@ pipx install sourcecode
255
255
 
256
256
  ```bash
257
257
  sourcecode version
258
- # sourcecode 1.18.0
258
+ # sourcecode 1.19.0
259
259
  ```
260
260
 
261
261
  ---
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Compressed AI-ready context for Java/Spring enterprise codebases.**
4
4
 
5
- ![Version](https://img.shields.io/badge/version-1.18.0-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.19.0-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -36,7 +36,7 @@ pipx install sourcecode
36
36
 
37
37
  ```bash
38
38
  sourcecode version
39
- # sourcecode 1.18.0
39
+ # sourcecode 1.19.0
40
40
  ```
41
41
 
42
42
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.18.0"
7
+ version = "1.19.0"
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.18.0"
3
+ __version__ = "1.19.0"
@@ -637,8 +637,10 @@ class TaskContextBuilder:
637
637
  related_notes: list[dict] = []
638
638
  if task_name == "fix-bug" and symptom:
639
639
  import re as _re
640
+ _camel_expanded = _re.sub(r'([a-z])([A-Z])', r'\1 \2', symptom)
641
+ _camel_expanded = _re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1 \2', _camel_expanded)
640
642
  symptom_keywords = [
641
- w.lower() for w in _re.split(r"[\s\W]+", symptom)
643
+ w.lower() for w in _re.split(r"[\s\W]+", _camel_expanded)
642
644
  if len(w) > 2
643
645
  ]
644
646
  if symptom_keywords:
@@ -682,6 +684,30 @@ class TaskContextBuilder:
682
684
  return rf.score + 0.2 * sum(1.0 for kw in symptom_keywords if kw in path_lower)
683
685
  relevant_files = sorted(relevant_files, key=lambda rf: -_symptom_score(rf))
684
686
 
687
+ # Content scan boost: read file body for symptom keywords
688
+ _src_exts = frozenset({".java", ".py", ".ts", ".js", ".kt", ".go"})
689
+ _content_boosted: list[RelevantFile] = []
690
+ for _rf in relevant_files:
691
+ _extra = 0.0
692
+ if Path(_rf.path).suffix.lower() in _src_exts:
693
+ try:
694
+ _lines = (self.root / _rf.path).read_text(
695
+ encoding="utf-8", errors="replace"
696
+ ).splitlines()[:300]
697
+ _body = "\n".join(_lines).lower()
698
+ _hits = sum(_body.count(kw) for kw in symptom_keywords)
699
+ _extra = min(0.30, _hits * 0.02)
700
+ except OSError:
701
+ pass
702
+ _content_boosted.append(RelevantFile(
703
+ path=_rf.path,
704
+ role=_rf.role,
705
+ score=round(min(_rf.score + _extra, 1.0), 2),
706
+ reason=_rf.reason + (f", content-match symptom (+{_extra:.2f})" if _extra > 0 else ""),
707
+ why=_rf.why,
708
+ ))
709
+ relevant_files = sorted(_content_boosted, key=lambda rf: -rf.score)
710
+
685
711
  # ── 7. Test gaps (generate-tests only) ────────────────────────────
686
712
  test_gaps: list[str] = []
687
713
  if task_name == "generate-tests":
@@ -863,7 +889,7 @@ class TaskContextBuilder:
863
889
  _dominant_stack = ""
864
890
  _recently_changed_stacks: set[str] = set()
865
891
  if task_name == "fix-bug":
866
- _bug_kinds = {"FIXME", "BUG"}
892
+ _bug_kinds = {"FIXME", "BUG", "HACK", "XXX"}
867
893
  for _n in (code_notes or []):
868
894
  if getattr(_n, "kind", "").upper() in _bug_kinds:
869
895
  _annotated_files.add(getattr(_n, "path", ""))
@@ -1020,7 +1046,16 @@ class TaskContextBuilder:
1020
1046
  )
1021
1047
  for total, path, rf in scored
1022
1048
  }
1023
- _selected = _ctx.select_subgraph(_ns, contracts=[], budget=15, min_score=0.15)
1049
+ _repo_size = len(all_paths)
1050
+ _task_budget = {
1051
+ "fix-bug": max(20, min(40, _repo_size // 80)),
1052
+ "onboard": max(15, min(25, _repo_size // 150)),
1053
+ "explain": max(10, min(20, _repo_size // 200)),
1054
+ "generate-tests": max(20, min(35, _repo_size // 100)),
1055
+ "refactor": max(15, min(30, _repo_size // 120)),
1056
+ }
1057
+ _budget = _task_budget.get(task_name, 15)
1058
+ _selected = _ctx.select_subgraph(_ns, contracts=[], budget=_budget, min_score=0.15)
1024
1059
  _rf_map = {path: rf for _, path, rf in scored}
1025
1060
  return [_rf_map[p] for p in _selected if p in _rf_map]
1026
1061
  except Exception:
@@ -1036,6 +1071,9 @@ class TaskContextBuilder:
1036
1071
  or "/tests/" in path
1037
1072
  or "/test/" in path
1038
1073
  or "/spec/" in path
1074
+ or (name.endswith("test.java") and name != "test.java")
1075
+ or name.endswith("tests.java")
1076
+ or (name.startswith("test") and name.endswith(".java") and len(name) > 9)
1039
1077
  )
1040
1078
 
1041
1079
  def _is_source(self, path: str) -> bool:
@@ -1,125 +0,0 @@
1
- # Continue Here — atlas-cli v1.14.0 defect patch (saint-server)
2
-
3
- **Paused:** 2026-05-13
4
- **Repo:** `/Users/user/Downloads/atlas-cli`
5
- **Branch:** master
6
-
7
- ---
8
-
9
- ## Estado actual
10
-
11
- Sesión: patch de 15 defectos contra saint-server (Spring Boot 2.7 / Java 8 / 100 módulos DDD / 467 controllers). **Sin commit** (instrucción explícita: "no hagas commit"). 10 ficheros fuente modificados + 4 ficheros nuevos de test/fixtures.
12
-
13
- ---
14
-
15
- ## Defectos corregidos esta sesión
16
-
17
- ### CRITICAL
18
- | ID | Fix | Fichero |
19
- |----|-----|---------|
20
- | C1 | `_extract_first_useful_paragraph()` rechaza snippets de startup via `_STARTUP_RE` (≥2 hits) | `summarizer.py` |
21
- | C2 | `_bootstrap_structured()` emite `modules` (todos los DDD modules) en vez de `sample` (5 primeros) | `serializer.py` |
22
- | C3 | `safe_read_text()` con fallback UTF-8→ISO-8859-1→UTF-8/replace — elimina double-encoding de chars españoles | `tree_utils.py` + 3 consumidores |
23
- | C4 | `_scan_java_patterns()` escanea Java para `@interface` + `extends`, emite `custom_annotations[]` + `base_classes[]` | `architecture_analyzer.py` + `schema.py` |
24
-
25
- ### HIGH
26
- | ID | Fix | Fichero |
27
- |----|-----|---------|
28
- | H1 | `_spring_profiles_context()` → `{detected, per_profile_variants, note}` | `serializer.py` |
29
- | H2 | `_is_dto_mapper()` separa `@Mapper` reales de DtoMapper. Añade `dto_mappers[]`, elimina falsos positivos en `missing_xml` | `serializer.py` |
30
- | H3 | `_transactional_summary()` emite todas las clases; trunca a 10 con `truncated: true` + `note` | `serializer.py` |
31
- | H4 | `_TASK_CONTENT_MAP` per-task filter en prepare-context. Fix `review-pr` suspected_areas filtrado a root | `cli.py` + `prepare_context.py` |
32
- | H5 | Fallback `git log -n 100` cuando scan por fecha retorna 0. Nuevo campo `hotspot_method` | `git_analyzer.py` + `schema.py` |
33
-
34
- ### MEDIUM
35
- | ID | Fix | Fichero |
36
- |----|-----|---------|
37
- | M1 | `_security_surface_from_eps()` añade campo `schema` descriptor. Mantiene `resource_names` (compat) | `serializer.py` |
38
- | M2 | `_jndi_datasources()` escanea `application.yml` / `persistence.xml` para JNDI names | `serializer.py` |
39
- | M3 | `_file_relevance()` scoring: +10 entry points, +8 base classes, +6 security config, +2 utils | `serializer.py` |
40
- | M4 | `--agent` auto-habilita `architecture = True` | `cli.py` |
41
- | M5 | Help `--compact` actualizado: "1000–3000 tokens" (era "600–800") | `cli.py` |
42
-
43
- ### LOW
44
- | ID | Fix | Fichero |
45
- |----|-----|---------|
46
- | L1 | `analysis_gaps` expandido: ADRs missing, OpenAPI missing, profile YAMLs sin comentarios | `confidence_analyzer.py` |
47
-
48
- ---
49
-
50
- ## Ficheros modificados
51
-
52
- ```
53
- src/sourcecode/architecture_analyzer.py +147 líneas — C4
54
- src/sourcecode/cli.py +90 líneas — H4, M4, M5
55
- src/sourcecode/code_notes_analyzer.py +5 líneas — C3
56
- src/sourcecode/confidence_analyzer.py +54 líneas — L1
57
- src/sourcecode/doc_analyzer.py +4 líneas — C3
58
- src/sourcecode/git_analyzer.py +29 líneas — H5
59
- src/sourcecode/schema.py +5 líneas — C4, H5
60
- src/sourcecode/serializer.py +245 líneas — C2, H1-H3, M1-M3
61
- src/sourcecode/summarizer.py +26 líneas — C1, C3
62
- src/sourcecode/tree_utils.py +19 líneas — C3 utility
63
- src/sourcecode/prepare_context.py +5 líneas — H4
64
- ```
65
-
66
- ### Ficheros nuevos
67
- ```
68
- tests/test_encoding_regression.py — 4 tests C3
69
- tests/test_task_differentiation.py — 6 tests H4
70
- tests/fixtures/latin1_sample.java — fixture UTF-8
71
- tests/fixtures/latin1_sample_iso.java — fixture Latin-1
72
- ```
73
-
74
- ---
75
-
76
- ## Tests
77
-
78
- - **743 passed, 3 skipped** — 0 regresiones
79
- - Fallos pre-existentes excluidos:
80
- - `test_block2_coverage.py::test_java_marked_unsupported` — bug pre-existente en test (`name` vs `symbol`)
81
- - `test_dependency_analyzer_node_python.py::test_python_requirements_without_lockfile_keeps_declared_versions` — versión fixture incorrecta
82
- - `test_pipeline_integrity.py::TestBenchmarkContamination::test_agent_splits_development_and_auxiliary_eps` — pre-existente
83
-
84
- ---
85
-
86
- ## Pendientes para próxima sesión
87
-
88
- 1. **Smoke test en saint-server real:**
89
- ```bash
90
- python3 run_cli.py /path/to/saint-server --compact --agent --git-context 2>/dev/null | python3 -c "
91
- import json,sys; d=json.load(sys.stdin)
92
- print('profiles:', d.get('spring_profiles'))
93
- print('arch method:', d.get('architecture',{}).get('method'))
94
- print('custom_annotations:', len(d.get('architecture',{}).get('custom_annotations',[])))
95
- print('hotspot_method:', d.get('git_context',{}).get('hotspot_method'))
96
- "
97
- ```
98
-
99
- 2. **Commit** cuando listo:
100
- ```bash
101
- git add src/sourcecode/ tests/test_encoding_regression.py tests/test_task_differentiation.py tests/fixtures/latin1_sample*.java
102
- git commit -m "fix: 15 saint-server defects — C1-C4 critical, H1-H5 high, M1-M5 medium, L1 low"
103
- ```
104
-
105
- 3. **Pre-existing bugs** (no tocados):
106
- - `_OPTIONAL_LABEL_MAP` en `architecture_summary.py` tiene valores en español
107
- - `lombok` / `sqlite-jdbc` clasificados `role: runtime` incorrectamente
108
- - `test_pipeline_integrity::test_agent_splits_development_and_auxiliary_eps` — `agent_view()` no emite `auxiliary_entry_points`
109
-
110
- ---
111
-
112
- ## Para retomar
113
-
114
- ```bash
115
- cd /Users/user/Downloads/atlas-cli
116
- git diff --stat # verificar 10 ficheros modificados
117
- python3 -m pytest tests/ \
118
- --ignore=tests/test_block2_coverage.py \
119
- --ignore=tests/test_dependency_analyzer_node_python.py \
120
- --ignore=tests/test_pipeline_integrity.py -q
121
- # Expected: 743 passed, 3 skipped
122
- ```
123
-
124
- ---
125
- *Pausado 2026-05-13 — gsd:pause-work*
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