sourcecode 5.9.19__tar.gz → 5.9.22__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 (463) hide show
  1. {sourcecode-5.9.19 → sourcecode-5.9.22}/CHANGELOG.md +48 -0
  2. {sourcecode-5.9.19 → sourcecode-5.9.22}/PKG-INFO +4 -4
  3. {sourcecode-5.9.19 → sourcecode-5.9.22}/README.md +3 -3
  4. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/DEVELOPMENT-ROADMAP.md +35 -0
  5. sourcecode-5.9.22/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +78 -0
  6. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/USER_GUIDE.md +1 -1
  7. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/migrate-check.md +24 -0
  8. sourcecode-5.9.22/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +59 -0
  9. sourcecode-5.9.22/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +47 -0
  10. {sourcecode-5.9.19 → sourcecode-5.9.22}/pyproject.toml +1 -1
  11. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/__init__.py +1 -1
  12. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/canonical_ir.py +11 -4
  13. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cli.py +13 -11
  14. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/context_graph.py +24 -18
  15. sourcecode-5.9.22/src/sourcecode/jvm_inventory.py +294 -0
  16. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/migrate_check.py +7 -0
  17. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/parallel.py +3 -11
  18. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/repository_ir.py +93 -20
  19. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/risk.py +3 -2
  20. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schema_registry.py +2 -0
  21. {sourcecode-5.9.19 → sourcecode-5.9.22}/.github/workflows/build-windows.yml +0 -0
  22. {sourcecode-5.9.19 → sourcecode-5.9.22}/.github/workflows/perf-gate.yml +0 -0
  23. {sourcecode-5.9.19 → sourcecode-5.9.22}/.github/workflows/windows-battery.yml +0 -0
  24. {sourcecode-5.9.19 → sourcecode-5.9.22}/.github/workflows/windows-regression.yml +0 -0
  25. {sourcecode-5.9.19 → sourcecode-5.9.22}/.gitignore +0 -0
  26. {sourcecode-5.9.19 → sourcecode-5.9.22}/.ruff.toml +0 -0
  27. {sourcecode-5.9.19 → sourcecode-5.9.22}/CLAUDE.md +0 -0
  28. {sourcecode-5.9.19 → sourcecode-5.9.22}/CODE_OF_CONDUCT.md +0 -0
  29. {sourcecode-5.9.19 → sourcecode-5.9.22}/CONTRIBUTING.md +0 -0
  30. {sourcecode-5.9.19 → sourcecode-5.9.22}/LICENSE +0 -0
  31. {sourcecode-5.9.19 → sourcecode-5.9.22}/NOTICE +0 -0
  32. {sourcecode-5.9.19 → sourcecode-5.9.22}/SECURITY.md +0 -0
  33. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  34. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  35. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  36. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  37. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  38. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  39. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  40. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  41. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  42. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  43. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  44. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  45. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  46. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  47. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  48. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  49. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  50. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  51. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  52. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  53. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  54. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  55. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/CACHE.md +0 -0
  56. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/COMMERCIAL-OFFER.md +0 -0
  57. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/CUSTOMER-VALIDATION.md +0 -0
  58. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/DEFECT-LEDGER.md +0 -0
  59. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/DEMO-5MIN.md +0 -0
  60. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  61. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/EXECUTION-PLAN-12MO.md +0 -0
  62. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/EXECUTIVE-ROADMAP.md +0 -0
  63. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/MANUAL-USUARIO.md +0 -0
  64. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/MODERNIZATION.md +0 -0
  65. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/PRODUCT-ROUTE.md +0 -0
  66. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/PRODUCT_AUDIT.md +0 -0
  67. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/PRODUCT_IDENTITY.md +0 -0
  68. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/PRODUCT_TIERS.md +0 -0
  69. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/RC1-CHECKLIST.md +0 -0
  70. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/RELEASE-CHECKLIST.md +0 -0
  71. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/RELEASE-VERIFICATION.md +0 -0
  72. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  73. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  74. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  75. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-assessment-report.md +0 -0
  76. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  77. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  78. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  79. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  80. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  81. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  82. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  83. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  84. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  85. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  86. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  87. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  88. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  89. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  90. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  91. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  92. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  93. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  94. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  95. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  96. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  97. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  98. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0006-performance-harness.md +0 -0
  99. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  100. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  101. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/consumer-disposition-inventory.md +0 -0
  102. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/overview.md +0 -0
  103. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/product-architecture-review.md +0 -0
  104. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/product-strategy-layering.md +0 -0
  105. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  106. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/architecture/semantic-ir-roadmap.md +0 -0
  107. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/baseline-ci.yml +0 -0
  108. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/commercial-pipeline-audit.md +0 -0
  109. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/contracts-ci.yml +0 -0
  110. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/contracts.md +0 -0
  111. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  112. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  113. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  114. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  115. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  116. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  117. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  118. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  119. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/licensing-schema.md +0 -0
  120. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/pack-gate-github-actions.yml +0 -0
  121. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/pack-gate-gitlab.yml +0 -0
  122. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/README.md +0 -0
  123. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/REGRESSION-GATE.md +0 -0
  124. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  125. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  126. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  127. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  128. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  129. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  130. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  131. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  132. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  133. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  134. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  135. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  136. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  137. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  138. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  139. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  140. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  141. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  142. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  143. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  144. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  145. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  146. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  147. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  148. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  149. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  150. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  151. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  152. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  153. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  154. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  155. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  156. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  157. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  158. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  159. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  160. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  161. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  162. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  163. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  164. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  165. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  166. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/README.md +0 -0
  167. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  168. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  169. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  170. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  171. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  172. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  173. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/baselines/reference-best/README.md +0 -0
  174. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  175. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/posture.md +0 -0
  176. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/privacy.md +0 -0
  177. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/pro-experience-audit.md +0 -0
  178. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/schema.md +0 -0
  179. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/spec/envelope-v1.md +0 -0
  180. {sourcecode-5.9.19 → sourcecode-5.9.22}/docs/spring-audit-ci.yml +0 -0
  181. {sourcecode-5.9.19 → sourcecode-5.9.22}/hatch_build.py +0 -0
  182. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/compare_integration_engines.py +0 -0
  183. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/context_cost_harness.py +0 -0
  184. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/customer_smoke_test.sh +0 -0
  185. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/generate_jdk_exports.py +0 -0
  186. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/perf_gate.py +0 -0
  187. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/perf_harness.py +0 -0
  188. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/sync_gate_anchors.py +0 -0
  189. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/test_fast.sh +0 -0
  190. {sourcecode-5.9.19 → sourcecode-5.9.22}/scripts/windows_reliability_matrix.py +0 -0
  191. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/__main__.py +0 -0
  192. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/access_drift.py +0 -0
  193. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/adaptive_scanner.py +0 -0
  194. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/analysis_budget.py +0 -0
  195. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/answer_bounds.py +0 -0
  196. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/archetype.py +0 -0
  197. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/architectural_baseline.py +0 -0
  198. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/architectural_delta.py +0 -0
  199. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/architecture_analyzer.py +0 -0
  200. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/architecture_summary.py +0 -0
  201. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/ast_extractor.py +0 -0
  202. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/audit_clusters.py +0 -0
  203. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/audit_recipe.py +0 -0
  204. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/audit_report.py +0 -0
  205. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/audit_since.py +0 -0
  206. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/audit_verify.py +0 -0
  207. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/baseline_attestation.py +0 -0
  208. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/baseline_autocapture.py +0 -0
  209. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/breaking_changes.py +0 -0
  210. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/build_modules.py +0 -0
  211. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/build_stamp.py +0 -0
  212. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/bundled_docs.py +0 -0
  213. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/c4_render.py +0 -0
  214. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cache.py +0 -0
  215. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cache_model.py +0 -0
  216. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cache_observation.py +0 -0
  217. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/call_surface.py +0 -0
  218. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/caller_metrics.py +0 -0
  219. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/caller_reach.py +0 -0
  220. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/chain_rules.py +0 -0
  221. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/change_plan.py +0 -0
  222. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/ci_output.py +0 -0
  223. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cir_graphs.py +0 -0
  224. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/classifier.py +0 -0
  225. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/click_runtime.py +0 -0
  226. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/client_calls.py +0 -0
  227. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/code_notes_analyzer.py +0 -0
  228. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/compare.py +0 -0
  229. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/confidence_analyzer.py +0 -0
  230. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/constraint_diff.py +0 -0
  231. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/consumer_join.py +0 -0
  232. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/container_wiring.py +0 -0
  233. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/context_cache.py +0 -0
  234. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/context_scorer.py +0 -0
  235. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/context_summarizer.py +0 -0
  236. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/contract_diff.py +0 -0
  237. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/contract_init.py +0 -0
  238. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/contract_model.py +0 -0
  239. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/contract_pipeline.py +0 -0
  240. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/coverage_parser.py +0 -0
  241. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cve_feed.py +0 -0
  242. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/cve_reachability.py +0 -0
  243. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/data_exposure.py +0 -0
  244. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/data_labels.py +0 -0
  245. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/declarations.py +0 -0
  246. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/defect_classes/__init__.py +0 -0
  247. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/defect_classes/registry.json +0 -0
  248. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/defect_identity.py +0 -0
  249. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/degradation.py +0 -0
  250. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/dependency_analyzer.py +0 -0
  251. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/deployment_prefix.py +0 -0
  252. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detach.py +0 -0
  253. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/__init__.py +0 -0
  254. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/base.py +0 -0
  255. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/csproj_parser.py +0 -0
  256. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/dart.py +0 -0
  257. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/dotnet.py +0 -0
  258. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/elixir.py +0 -0
  259. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/go.py +0 -0
  260. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/heuristic.py +0 -0
  261. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/hybrid.py +0 -0
  262. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/java.py +0 -0
  263. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/jvm_ext.py +0 -0
  264. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/nodejs.py +0 -0
  265. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/parsers.py +0 -0
  266. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/php.py +0 -0
  267. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/project.py +0 -0
  268. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/python.py +0 -0
  269. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/ruby.py +0 -0
  270. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/rust.py +0 -0
  271. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/systems.py +0 -0
  272. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/terraform.py +0 -0
  273. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/detectors/tooling.py +0 -0
  274. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/doc_analyzer.py +0 -0
  275. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/dynamic_argument_surface.py +0 -0
  276. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/empty_reach.py +0 -0
  277. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/endpoint_disposition.py +0 -0
  278. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/endpoint_literals.py +0 -0
  279. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/endpoint_metrics.py +0 -0
  280. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/entrypoint_classifier.py +0 -0
  281. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/env_analyzer.py +0 -0
  282. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/envelope.py +0 -0
  283. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/environment_resolution.py +0 -0
  284. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/error_schema.py +0 -0
  285. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/evidence_provider.py +0 -0
  286. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/execution_plan.py +0 -0
  287. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/explain.py +0 -0
  288. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/explain_endpoint.py +0 -0
  289. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/facts/__init__.py +0 -0
  290. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/facts/registry.json +0 -0
  291. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/field_deprecations.py +0 -0
  292. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/file_chunker.py +0 -0
  293. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/file_classifier.py +0 -0
  294. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/filter_surface.py +0 -0
  295. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/findings_baseline.py +0 -0
  296. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/format_contract.py +0 -0
  297. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/fqn_utils.py +0 -0
  298. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/functional_routes.py +0 -0
  299. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/gate_anchors.py +0 -0
  300. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/git_analyzer.py +0 -0
  301. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/git_checkout.py +0 -0
  302. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/github_diff.py +0 -0
  303. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/graph_analyzer.py +0 -0
  304. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/graph_evidence.py +0 -0
  305. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/hibernate_strat.py +0 -0
  306. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/identity_fallback.py +0 -0
  307. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/integration_coordinates.py +0 -0
  308. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/intent_router.py +0 -0
  309. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/jdk_exports.py +0 -0
  310. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/license.py +0 -0
  311. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/manifest_cache.py +0 -0
  312. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/__init__.py +0 -0
  313. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/dependency_import.py +0 -0
  314. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  315. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  316. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  317. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  318. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  319. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/orchestrator.py +0 -0
  320. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/registry.py +0 -0
  321. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/runner.py +0 -0
  322. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp/server.py +0 -0
  323. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/mcp_nudge.py +0 -0
  324. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/metrics_analyzer.py +0 -0
  325. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/migration_apply.py +0 -0
  326. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/migration_blast.py +0 -0
  327. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/non_coverage.py +0 -0
  328. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/openapi_surface.py +0 -0
  329. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/openrewrite_recipe.py +0 -0
  330. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/output_bounds.py +0 -0
  331. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/output_budget.py +0 -0
  332. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/output_ceiling.py +0 -0
  333. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/output_encoding.py +0 -0
  334. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/output_sink.py +0 -0
  335. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/pack_manifest.py +0 -0
  336. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/packs.py +0 -0
  337. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/parse_cache.py +0 -0
  338. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/partial_contract.py +0 -0
  339. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/path_admission.py +0 -0
  340. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/path_display.py +0 -0
  341. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/path_filters.py +0 -0
  342. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/perf.py +0 -0
  343. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/phased_run.py +0 -0
  344. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/pipe_contract.py +0 -0
  345. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/posture.py +0 -0
  346. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/pr_comment_renderer.py +0 -0
  347. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/pr_impact.py +0 -0
  348. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/pr_risk.py +0 -0
  349. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/prepare_context.py +0 -0
  350. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/product_info.py +0 -0
  351. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/progress.py +0 -0
  352. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/provenance.py +0 -0
  353. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/ranking_engine.py +0 -0
  354. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/readiness_timeline.py +0 -0
  355. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/readonly.py +0 -0
  356. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/reconciliation.py +0 -0
  357. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/redactor.py +0 -0
  358. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/reference_facts.py +0 -0
  359. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/regress.py +0 -0
  360. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/regulatory_pack.py +0 -0
  361. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/release_info.py +0 -0
  362. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/relevance_scorer.py +0 -0
  363. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/remediation_diff.py +0 -0
  364. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/remediation_flow.py +0 -0
  365. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/remediation_report.py +0 -0
  366. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/remedies.py +0 -0
  367. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/rename_refactor.py +0 -0
  368. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/repo_classifier.py +0 -0
  369. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/resource_budget.py +0 -0
  370. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/__init__.py +0 -0
  371. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/context.py +0 -0
  372. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/errors.py +0 -0
  373. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/executor.py +0 -0
  374. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/planner.py +0 -0
  375. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/query.py +0 -0
  376. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/request.py +0 -0
  377. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/resolution.py +0 -0
  378. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/result.py +0 -0
  379. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/retriever.py +0 -0
  380. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/runtime.py +0 -0
  381. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps.py +0 -0
  382. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  383. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_graph.py +0 -0
  384. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_impact.py +0 -0
  385. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_intf.py +0 -0
  386. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_struct.py +0 -0
  387. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  388. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/ris.py +0 -0
  389. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/risk_model.py +0 -0
  390. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/rule_catalog.py +0 -0
  391. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/rule_pass.py +0 -0
  392. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/runs.py +0 -0
  393. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/runtime_classifier.py +0 -0
  394. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/sarif.py +0 -0
  395. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/sarif_emit.py +0 -0
  396. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/scanner.py +0 -0
  397. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schema.py +0 -0
  398. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schema_producers.py +0 -0
  399. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  400. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  401. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  402. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  403. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  404. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  405. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  406. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/security_chain.py +0 -0
  407. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/security_config.py +0 -0
  408. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/security_config_scan.py +0 -0
  409. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/security_posture.py +0 -0
  410. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/selection_contract.py +0 -0
  411. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/self_audit.py +0 -0
  412. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/selftest.py +0 -0
  413. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/semantic_analyzer.py +0 -0
  414. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/semantic_impact_engine.py +0 -0
  415. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/semantic_integration_engine.py +0 -0
  416. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/semantic_services.py +0 -0
  417. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/serializer.py +0 -0
  418. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/servlet_surface.py +0 -0
  419. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/source_text.py +0 -0
  420. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_event_topology.py +0 -0
  421. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_findings.py +0 -0
  422. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_impact.py +0 -0
  423. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_model.py +0 -0
  424. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_profiles.py +0 -0
  425. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_properties.py +0 -0
  426. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_security_audit.py +0 -0
  427. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_semantic.py +0 -0
  428. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/spring_tx_analyzer.py +0 -0
  429. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/sql_taint.py +0 -0
  430. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/summarizer.py +0 -0
  431. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/target_admission.py +0 -0
  432. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/__init__.py +0 -0
  433. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/config.py +0 -0
  434. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/consent.py +0 -0
  435. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/events.py +0 -0
  436. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/filters.py +0 -0
  437. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/telemetry/transport.py +0 -0
  438. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/test_gap_ranking.py +0 -0
  439. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/test_sources.py +0 -0
  440. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/text_input.py +0 -0
  441. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/timeline.py +0 -0
  442. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/timeline_cache.py +0 -0
  443. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/token_estimate.py +0 -0
  444. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/tree_utils.py +0 -0
  445. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/type_usage_surface.py +0 -0
  446. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/validation_inference.py +0 -0
  447. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/validation_surface.py +0 -0
  448. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/verify_edit.py +0 -0
  449. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/verify_repo.py +0 -0
  450. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/verify_rules.py +0 -0
  451. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/version_check.py +0 -0
  452. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/vex.py +0 -0
  453. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/waivers.py +0 -0
  454. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/watch_loop.py +0 -0
  455. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/wired_surface.py +0 -0
  456. {sourcecode-5.9.19 → sourcecode-5.9.22}/src/sourcecode/workspace.py +0 -0
  457. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/functions/README.md +0 -0
  458. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/functions/get-license/index.ts +0 -0
  459. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  460. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/functions/telemetry/index.ts +0 -0
  461. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/sql/license_event_ordering.sql +0 -0
  462. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/sql/licensing_schema.sql +0 -0
  463. {sourcecode-5.9.19 → sourcecode-5.9.22}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,53 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.22] — 2026-08-31
4
+
5
+ *Large-repository route projection performance.*
6
+
7
+ ### Fixed
8
+
9
+ - Inherited route projection now resolves parent candidates through a module/name
10
+ index instead of scanning every class for every child. The ambiguity rule and
11
+ emitted routes remain unchanged, while cold `--agent --full` improved from about
12
+ 20.5 to 19.6 seconds on openmrs-core and from 32.0 to 30.8 seconds on Jenkins.
13
+
14
+ ### Verification Boundary
15
+
16
+ - Endpoint, inheritance, canonical IR and migration regression tests pass. Large
17
+ cold runs remain memory-heavy; reducing the duplicated canonical/raw model is
18
+ still required before claiming the 8/10 performance target.
19
+
20
+ ## [5.9.21] — 2026-08-31
21
+
22
+ *Cold-path memory and JVM inventory performance follow-up.*
23
+
24
+ ### Fixed
25
+
26
+ - Full CIR builds no longer retain every Java source body in the per-file linking
27
+ queue; the linking pass rereads source only when needed and keeps repository
28
+ constants and annotation references as compact metadata.
29
+ - Completed linking drops pass-local containers before canonical projection, reducing
30
+ overlap between raw IR assembly and the canonical model.
31
+ - `migrate-check` JVM inventory reuses the already discovered Java file list instead
32
+ of walking and rescanning the source tree a second time.
33
+
34
+ ### Verification Boundary
35
+
36
+ - Focused JVM, CIR cache-equivalence, canonical IR, source-span and migration tests
37
+ pass. Cold `--agent --full` remains memory-heavy on large repositories: the latest
38
+ controlled run measured about 710 MB on openmrs-core and 1.24 GB on Jenkins; this
39
+ release does not claim that the 8/10 performance target is fully reached.
40
+
41
+ ## [5.9.20] — 2026-08-31
42
+
43
+ *JVM ecosystem evidence and local SBOM inventory.*
44
+
45
+ ### Added
46
+
47
+ - `migrate-check` now publishes bounded `jvm_inventory` evidence for JVM frameworks, Java runtime declarations in CI/containers, modern JVM patterns and local CycloneDX/SPDX JSON documents.
48
+ - Added deterministic, negative-control and schema-registry coverage for the new inventory.
49
+ - Documented the accepted JVM R&D scope and its explicit no-network/non-coverage boundaries.
50
+
3
51
  ## [5.9.19] — 2026-08-31
4
52
 
5
53
  *Critical `pack gate --since` compatibility correction.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.19
3
+ Version: 5.9.22
4
4
  Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
5
5
  Project-URL: Homepage, https://github.com/HarounDominique/sourcecode
6
6
  Project-URL: Repository, https://github.com/HarounDominique/sourcecode
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
59
59
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
60
60
  > before inspecting a repository whose telemetry policy you need to control.
61
61
 
62
- ![Version](https://img.shields.io/badge/version-5.9.19-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.22-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
196
196
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
197
197
  unset, or set it to `0`, to disable the ceiling explicitly.
198
198
 
199
- **Current performance status.** Release 5.9.17 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.22 retains the shared Canonical IR
200
200
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
201
201
  runs; the no-label path remains parse-free. These are implementation properties,
202
202
  not duration promises. It also removes two repeated walks of the same file tree in
@@ -276,7 +276,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
276
276
  # pip / pipx
277
277
  pipx install sourcecode # or: pip install sourcecode
278
278
 
279
- ask version # ask 5.9.19 — and, on a build that has aged,
279
+ ask version # ask 5.9.22 — and, on a build that has aged,
280
280
  # how many releases have probably shipped since
281
281
  ```
282
282
 
@@ -10,7 +10,7 @@
10
10
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
11
11
  > before inspecting a repository whose telemetry policy you need to control.
12
12
 
13
- ![Version](https://img.shields.io/badge/version-5.9.19-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.22-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -147,7 +147,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
147
147
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
148
148
  unset, or set it to `0`, to disable the ceiling explicitly.
149
149
 
150
- **Current performance status.** Release 5.9.17 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.22 retains the shared Canonical IR
151
151
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
152
152
  runs; the no-label path remains parse-free. These are implementation properties,
153
153
  not duration promises. It also removes two repeated walks of the same file tree in
@@ -227,7 +227,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
227
227
  # pip / pipx
228
228
  pipx install sourcecode # or: pip install sourcecode
229
229
 
230
- ask version # ask 5.9.19 — and, on a build that has aged,
230
+ ask version # ask 5.9.22 — and, on a build that has aged,
231
231
  # how many releases have probably shipped since
232
232
  ```
233
233
 
@@ -1,11 +1,46 @@
1
1
  # ASK — Development Roadmap
2
2
 
3
+ ### Release 5.9.20 — JVM evidence inventory
4
+
5
+ The accepted JVM R&D scope is implemented in `migrate-check`: local framework,
6
+ toolchain, runtime-pattern and Docker/CI evidence plus bounded CycloneDX/SPDX JSON
7
+ reading. The output is advisory and additive; no network, dependency resolution,
8
+ CVE lookup, signature verification or runtime recommendation is performed.
9
+
10
+ ### Performance pass — 2026-08-31
11
+
12
+ The JVM inventory no longer rediscovers the Java tree inside `migrate-check`: the
13
+ command reuses its already-resolved source population and only discovers local
14
+ configuration, CI, container and SBOM candidates. On the current testing corpus,
15
+ fresh measurements were approximately 4.8 s for `openmrs-core` and 7.6 s for
16
+ `jenkins` using `migrate-check --compact`; no output or readiness semantics changed.
17
+
18
+ This is a bounded improvement, not closure of the performance target. The remaining
19
+ 8/10 work is the cold/full-graph path and high-cost `--agent`, `posture`, `risk` and
20
+ `impact-chain` cases. Those require separate profiling and memory measurements before
21
+ claiming a broad speedup.
22
+
3
23
  ### Release 5.9.19 — `AUD-621` remediation
4
24
 
5
25
  Release `5.9.19` carries the `5.9.18` Windows safeguards and fixes the separate `pack gate --since` crash caused by calling the Python 3.12-only tarfile filter API on Python 3.10. The compatibility path is covered by regression tests; native Windows repetition remains required for the broader reliability findings.
6
26
 
7
27
  These code changes do not replace the required native evidence. `AUD-621-R` and `AUD-621-WIN-PROC` remain open until the repetition matrix and process-tree cases pass on native Windows; `AUD-621-CONTEXT` remains profiling work.
8
28
 
29
+ ### JVM I+D triage — accepted scope from 2026-08-31
30
+
31
+ The external JVM report has been depurated against primary sources and the current
32
+ ASK route. It receives a limited green light: extend `migrate-check` with a
33
+ source-backed JDK/build/framework inventory (P0), then add small detectors for
34
+ virtual threads, `ScopedValue`, modules, native-image/jlink/jpackage and Java
35
+ versions declared by CI or containers (P1). The decision record, accepted facts,
36
+ rejected scope and sources are in
37
+ [`RD-JVM-ASK-TRIAGE-2026-08-31.md`](RD-JVM-ASK-TRIAGE-2026-08-31.md).
38
+
39
+ This does not authorize embeddings, hosted vector search, APM/repository
40
+ integrations, Sigstore verification, CVE database work or prescriptive runtime
41
+ tuning. A local CycloneDX/SPDX reader remains a conditional P2 experiment and
42
+ must preserve ASK's no-network, source-evidence and non-coverage contracts.
43
+
9
44
  ### External Audit Intake — `AUD-621` re-audit, release 5.9.17
10
45
 
11
46
  The 2026-08-31 re-audit corrects the optimistic interpretation of the previous
@@ -0,0 +1,78 @@
1
+ # Depuracion I+D JVM para ASK
2
+
3
+ **Fecha:** 2026-08-31
4
+ **Entrada:** informe externo sobre novedades del ecosistema JVM 2025-2026
5
+ **Decision:** luz verde parcial para inventario y deteccion estructural; no para ampliar ASK a busqueda vectorial, APM o integraciones externas.
6
+
7
+ ## Criterio
8
+
9
+ Una propuesta entra en el roadmap solo si cumple las cuatro condiciones siguientes:
10
+
11
+ - aporta un hecho que ASK pueda verificar localmente;
12
+ - puede publicarse con ruta y linea de evidencia;
13
+ - no requiere red, credenciales ni una base externa durante el analisis;
14
+ - mejora una pregunta que ASK ya responde sobre modernizacion, arquitectura o seguridad del cambio.
15
+
16
+ El informe original es util como lista de hipotesis, pero no como inventario de actualidad: mezcla releases confirmadas, roadmaps, previsiones y afirmaciones de proveedor sin enlaces reproducibles. Las versiones concretas no se convierten en reglas hasta que exista una fuente primaria y una prueba sobre un repositorio fixture.
17
+
18
+ ## Hechos aceptados
19
+
20
+ | Area | Hecho verificable | Uso en ASK |
21
+ |---|---|---|
22
+ | JDK 25 | `import module` esta finalizado en JEP 511; los archivos fuente compactos y los `main` de instancia pertenecen a JEP 512. | Detectar sintaxis y declarar el nivel de lenguaje observado, sin recomendar una migracion automaticamente. |
23
+ | Spring | Spring Framework 7 y Spring Boot 4.0 mantienen Java 17 como baseline y adoptan Java 25 como foco. | Extender la evidencia de version/framework de `migrate-check` y separar Boot 3/4. |
24
+ | Quarkus | Quarkus 3.31 declara soporte para Java 25, incluyendo runtime images y native builds con Mandrel. | Reconocer toolchain y empaquetado, sin inferir que Java 25 sea una recomendacion para todos los proyectos. |
25
+ | Jakarta EE | Jakarta EE 11 requiere Java 17 o superior e incorpora Jakarta Data 1.0, soporte para records y recursos basados en virtual threads. | Mejorar la lectura de stack y de requisitos de plataforma. |
26
+ | Gradle | Gradle 9 requiere JVM 17 o superior para ejecutar el daemon; toolchains permiten compilar para niveles diferentes. | Separar JVM del build y nivel de compilacion en el inventario. |
27
+ | SBOM | CycloneDX 1.7 y SPDX 3.0 son formatos publicos con esquemas y serializaciones verificables. | Posible entrada local futura; no implica una base CVE ni una integracion de repositorio. |
28
+
29
+ Fuentes primarias: [JEP 511](https://openjdk.org/jeps/8344700), [Spring Framework 7](https://spring.io/blog/2025/11/13/spring-framework-7-0-general-availability), [Spring Boot 4.0](https://spring.io/blog/2025/11/20/spring-boot-4-0-0-available-now), [Quarkus 3.31](https://quarkus.io/blog/quarkus-3-31-released/), [Jakarta EE 11](https://jakarta.ee/specifications/platform/11/), [Gradle 9](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html), [CycloneDX](https://cyclonedx.org/specification/overview/) y [SPDX](https://spdx.dev/use/specifications/).
30
+
31
+ ## Propuestas aceptadas
32
+
33
+ ### P0 — Inventario de toolchain y framework
34
+
35
+ Ampliar el inventario existente de `migrate-check` para publicar, cuando haya evidencia:
36
+
37
+ - version de lenguaje/JDK objetivo y version de runtime declarada;
38
+ - proveedor o distribucion JDK solo cuando aparece de forma explicita;
39
+ - Maven/Gradle, wrapper, plugin y toolchain;
40
+ - Spring Boot, Spring Framework, Hibernate, Jakarta EE, Quarkus y Micronaut;
41
+ - separacion entre "declarado por build", "detectado en codigo" y "no observado".
42
+
43
+ No se debe resolver una version consultando Maven Central ni inferir el proveedor a partir de una imagen generica. La salida debe conservar el modelo actual de ASK: hecho, fuente, confianza y no cobertura.
44
+
45
+ ### P1 — Patrones JVM con evidencia
46
+
47
+ Añadir detecciones pequenas y especificas para:
48
+
49
+ - `Thread.ofVirtual`, `Executors.newVirtualThreadPerTaskExecutor` y APIs equivalentes;
50
+ - `ScopedValue`;
51
+ - `module-info.java` e instrucciones de empaquetado `jlink`, `jpackage` y `native-image`;
52
+ - version de Java en Dockerfiles y pipelines CI cuando el fichero esta en el repositorio.
53
+
54
+ Cada detector debe producir una observacion `archivo:linea`, evitar recomendaciones normativas y no alterar las poblaciones actuales de endpoints, riesgo o impacto. Si un patron no puede confirmarse, debe quedar como `unknown` o no observado, nunca como ausencia.
55
+
56
+ ### P2 — Entrada local de SBOM, incorporada
57
+
58
+ Se incorpora el parseo local de SBOM CycloneDX/SPDX en JSON ya presentes en el repositorio. El alcance se limita a formato, version y coordenadas de componentes. Quedan fuera la consulta de CVEs, la validacion de licencias, la verificacion Sigstore, la conexion con Artifactory/Nexus y el almacenamiento de claves.
59
+
60
+ La implementacion se ejecuta sin red y con limites de tamano. No confunde "componente declarado" con "vulnerabilidad explotable"; XML y documentos no reconocidos permanecen fuera del alcance explicito.
61
+
62
+ ## No aprobado
63
+
64
+ - Embeddings, Qdrant/Pinecone y busqueda semantica como camino principal: coste, deriva y falta de evidencia de que la busqueda estructural actual sea el cuello de botella.
65
+ - Subida o correlacion de perfiles JFR/async-profiler: superficie de privacidad y operacion fuera del producto actual.
66
+ - Plugins directos para APM, Artifactory, Nexus, Sigstore o proveedores JDK: dependencia externa y coste de mantenimiento desproporcionado.
67
+ - Recomendaciones automaticas de GC, Java 25 o framework: el repositorio no prueba por si solo la carga de produccion ni la compatibilidad operacional.
68
+ - Extender ASK a Docker/Kubernetes/Go como analizador general: no es una consecuencia de detectar un fichero de pipeline o una imagen base.
69
+
70
+ ## Criterios de cierre
71
+
72
+ La iniciativa no se considera hecha por reconocer una cadena. Debe aportar fixtures de Maven y Gradle, al menos un proyecto Spring Boot, uno Quarkus o Jakarta, un Dockerfile/CI con version Java y controles negativos. La bateria debe comprobar:
73
+
74
+ - evidencia de archivo y linea;
75
+ - determinismo frio/caliente y ausencia de red;
76
+ - distincion entre declarado, observado y desconocido;
77
+ - no regresion byte a byte de los payloads existentes cuando los nuevos campos no aplican;
78
+ - limites de salida y no mutacion del repositorio.
@@ -332,7 +332,7 @@ value in field use, and they are the ones to learn first:
332
332
  | `ask posture . --diff dev:prod` | The only command that answers *"what changes about effective access between two profile sets, across every endpoint at once"*. Experimental, and the most differentiated capability in the product. |
333
333
  | `ask endpoints .` | Every REST endpoint with its **effective path** (context-path + `spring.mvc.servlet.path` resolved), inferred security policy and per-endpoint confidence. Turns "audit the API" into a list. |
334
334
  | `ask spring-audit .` | Transactional anomalies that a compiler cannot see — `@Transactional` on a private method is a silent CGLIB no-op — plus the security surface. |
335
- | `ask migrate-check . --compact` | Boot 2→3 readiness plus Java LTS/licensing inventory: blockers, effort, target JDK evidence and explicit licensing-review signals. |
335
+ | `ask migrate-check . --compact` | Boot 2→3 readiness plus Java LTS/licensing and local JVM ecosystem inventory: blockers, effort, target JDK evidence, framework/runtime signals and explicit licensing-review signals. |
336
336
 
337
337
  Everything else is either a projection of the same model (`impact`, `export`, `explain`) or an
338
338
  agent-facing packaging of it (`--compact`, `--agent`, `prepare-context`). The full surface is
@@ -97,6 +97,30 @@ resolved for this field, and ASK does not make a legal entitlement claim. If the
97
97
  not declare a Java version, the inventory reports `java_version_unknown`; it never treats missing
98
98
  evidence as ready for the target LTS.
99
99
 
100
+ ## JVM ecosystem inventory (`jvm_inventory`)
101
+
102
+ The report also includes `jvm_inventory` (`jvm-inventory-v1`), a bounded and
103
+ advisory evidence block for modernization planning. It records local build
104
+ coordinates and source imports for Spring Boot/Framework, Hibernate, Jakarta EE,
105
+ Quarkus and Micronaut, plus evidence for virtual threads, `ScopedValue`, Java
106
+ modules, `native-image`, `jlink`, `jpackage`, and Java versions declared in Docker
107
+ or CI files. Source/build evidence includes a POSIX path and line number; SBOM
108
+ documents include their local path and format/version.
109
+
110
+ Frameworks are classified as `declared_only`, `observed_only`,
111
+ `declared_and_observed`, or `unobserved`; missing evidence is not a positive claim.
112
+ The scanner reads local text only, caps its file/evidence population, does not
113
+ execute Maven/Gradle, resolve dependencies, access the network, inspect a CVE
114
+ database, or make runtime recommendations. It is additive and does not affect
115
+ readiness, findings, effort, or existing endpoint populations.
116
+
117
+ The conditional P2 SBOM reader is available under `jvm_inventory.sbom` for
118
+ local CycloneDX JSON (`bomFormat`) and SPDX JSON (`spdxVersion`) documents. It
119
+ reports document format/version and bounded component coordinates only. It does
120
+ not query CVE or license databases, verify signatures, contact artifact
121
+ repositories, or make a supply-chain verdict. XML SBOMs and unrecognized JSON
122
+ remain outside this reader and are not interpreted.
123
+
100
124
  ## Claim provenance (`evidence_manifest`)
101
125
 
102
126
  Every JSON report also includes `evidence_manifest`: a compact index of the claims already
@@ -0,0 +1,59 @@
1
+ {
2
+ "schema_version": "perf-baseline-v1",
3
+ "tool_version": "5.9.22",
4
+ "captured_at": "2026-09-01T08:51:30Z",
5
+ "command": "ask",
6
+ "repo": {
7
+ "name": "spring-petclinic",
8
+ "commit": "45649e0",
9
+ "files": 47,
10
+ "bytes": 123264,
11
+ "classes": 25,
12
+ "methods": 72
13
+ },
14
+ "scale_dimensions": {
15
+ "files": 47,
16
+ "classes": 25,
17
+ "methods": 72
18
+ },
19
+ "scale_dimensions_basis": "The repository axes this timing is expected to scale over. A performance claim without these dimensions is not comparable across repositories.",
20
+ "mode": "cold",
21
+ "runs": 2,
22
+ "wall_ms": {
23
+ "p50": 742.306,
24
+ "p95": 753.485,
25
+ "min": 729.885,
26
+ "max": 754.727
27
+ },
28
+ "phase_ms": {
29
+ "discovery": {
30
+ "p50": 6.152,
31
+ "p95": 6.238
32
+ },
33
+ "detection": {
34
+ "p50": 19.386,
35
+ "p95": 19.954
36
+ },
37
+ "analysis": {
38
+ "p50": 126.555,
39
+ "p95": 127.517
40
+ },
41
+ "serialize": {
42
+ "p50": 0.898,
43
+ "p95": 0.906
44
+ },
45
+ "unattributed_p50": 589.315
46
+ },
47
+ "rss_peak_bytes": {
48
+ "p50": 75284480.0,
49
+ "p95": 75284480.0
50
+ },
51
+ "env": {
52
+ "python": "3.14.6",
53
+ "os": "darwin",
54
+ "cpu": "arm",
55
+ "cores": 8,
56
+ "hostname_hash": "3972fec0",
57
+ "host_id_declared": false
58
+ }
59
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "schema_version": "perf-baseline-v1",
3
+ "tool_version": "5.9.22",
4
+ "captured_at": "2026-09-01T08:51:32Z",
5
+ "command": "ask",
6
+ "repo": {
7
+ "name": "spring-petclinic",
8
+ "commit": "45649e0",
9
+ "files": 47,
10
+ "bytes": 123264,
11
+ "classes": 25,
12
+ "methods": 72
13
+ },
14
+ "scale_dimensions": {
15
+ "files": 47,
16
+ "classes": 25,
17
+ "methods": 72
18
+ },
19
+ "scale_dimensions_basis": "The repository axes this timing is expected to scale over. A performance claim without these dimensions is not comparable across repositories.",
20
+ "mode": "warm",
21
+ "runs": 2,
22
+ "wall_ms": {
23
+ "p50": 352.405,
24
+ "p95": 356.578,
25
+ "min": 347.768,
26
+ "max": 357.042
27
+ },
28
+ "phase_ms": {
29
+ "discovery": null,
30
+ "detection": null,
31
+ "analysis": null,
32
+ "serialize": null,
33
+ "instrumentation": "absent"
34
+ },
35
+ "rss_peak_bytes": {
36
+ "p50": 75284480.0,
37
+ "p95": 75284480.0
38
+ },
39
+ "env": {
40
+ "python": "3.14.6",
41
+ "os": "darwin",
42
+ "cpu": "arm",
43
+ "cores": 8,
44
+ "hostname_hash": "3972fec0",
45
+ "host_id_declared": false
46
+ }
47
+ }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.9.19"
7
+ version = "5.9.22"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "5.9.19"
7
+ __version__ = "5.9.22"
@@ -528,10 +528,17 @@ def ir_dict_to_canonical(
528
528
  files = sorted(file_set)
529
529
 
530
530
  # Sorted call graph edges — stable ordering: from, type, to
531
- call_graph = sorted(
532
- edges,
533
- key=lambda e: (e.get("from", ""), e.get("type", ""), e.get("to", "")),
534
- )
531
+ # The raw graph is owned by this CIR conversion and its edge order is not
532
+ # observable until after conversion. Sort in place instead of creating a
533
+ # second repository-sized list during the raw/CIR overlap peak.
534
+ if isinstance(edges, list):
535
+ edges.sort(key=lambda e: (e.get("from", ""), e.get("type", ""), e.get("to", "")))
536
+ call_graph = edges
537
+ else:
538
+ call_graph = sorted(
539
+ edges,
540
+ key=lambda e: (e.get("from", ""), e.get("type", ""), e.get("to", "")),
541
+ )
535
542
 
536
543
  # Dependency edges (structural subset of call_graph)
537
544
  _dep_types = frozenset({"imports", "extends", "implements", "injects"})
@@ -4404,7 +4404,9 @@ app = typer.Typer(
4404
4404
  name="ask",
4405
4405
  help=_HELP,
4406
4406
  add_completion=False,
4407
- rich_markup_mode="rich",
4407
+ # Rich's Windows help renderer can drop options from long command panels;
4408
+ # plain Click help keeps the complete option contract visible there.
4409
+ rich_markup_mode=None if os.name == "nt" else "rich",
4408
4410
  no_args_is_help=False,
4409
4411
  )
4410
4412
 
@@ -7531,6 +7533,7 @@ def prepare_context_cmd(
7531
7533
  Path("."),
7532
7534
  help="Repository path to analyze (default: current directory)",
7533
7535
  ),
7536
+ jobs: Optional[int] = _jobs_option(),
7534
7537
  since: Optional[str] = typer.Option(
7535
7538
  None,
7536
7539
  "--since",
@@ -7605,7 +7608,6 @@ def prepare_context_cmd(
7605
7608
  ),
7606
7609
  ),
7607
7610
  progress_mode: Optional[str] = _progress_option(),
7608
- jobs: Optional[int] = _jobs_option(),
7609
7611
  ) -> None:
7610
7612
  """Task-specific context for AI coding agents.
7611
7613
 
@@ -8426,6 +8428,7 @@ def repo_ir_cmd(
8426
8428
  Path("."),
8427
8429
  help="Repository root to analyze (default: current directory)",
8428
8430
  ),
8431
+ jobs: Optional[int] = _jobs_option(),
8429
8432
  since: Optional[str] = typer.Option(
8430
8433
  None,
8431
8434
  "--since",
@@ -8491,7 +8494,6 @@ def repo_ir_cmd(
8491
8494
  help="Compress output with gzip. Requires --output. Reduces large IR files by ~70-80%.",
8492
8495
  ),
8493
8496
  progress_mode: Optional[str] = _progress_option(),
8494
- jobs: Optional[int] = _jobs_option(),
8495
8497
  ) -> None:
8496
8498
  """Deterministic symbol-level IR for Java repositories.
8497
8499
 
@@ -9185,6 +9187,7 @@ def endpoints_cmd(
9185
9187
  Path("."),
9186
9188
  help="Repository path to scan for REST endpoints (default: current directory)",
9187
9189
  ),
9190
+ jobs: Optional[int] = _jobs_option(),
9188
9191
  output_path: Optional[Path] = typer.Option(
9189
9192
  None, "--output", "-o",
9190
9193
  help="Write output to a file instead of stdout.",
@@ -9251,7 +9254,6 @@ def endpoints_cmd(
9251
9254
  "than protect).",
9252
9255
  ),
9253
9256
  progress_mode: Optional[str] = _progress_option(),
9254
- jobs: Optional[int] = _jobs_option(),
9255
9257
  ) -> None:
9256
9258
  """Extract REST API endpoint surface from Java source files.
9257
9259
 
@@ -9806,6 +9808,7 @@ def export_cmd(
9806
9808
  Path("."),
9807
9809
  help="Repository path to export (default: current directory)",
9808
9810
  ),
9811
+ jobs: Optional[int] = _jobs_option(),
9809
9812
  output_path: Optional[Path] = typer.Option(
9810
9813
  None, "--output", "-o",
9811
9814
  help="Write output to a file instead of stdout.",
@@ -9848,7 +9851,6 @@ def export_cmd(
9848
9851
  "written on the diagram whenever it bites.",
9849
9852
  ),
9850
9853
  progress_mode: Optional[str] = _progress_option(),
9851
- jobs: Optional[int] = _jobs_option(),
9852
9854
  ) -> None:
9853
9855
  """Export structured, tool-agnostic codebase views for downstream tooling.
9854
9856
 
@@ -10015,6 +10017,7 @@ def validation_cmd(
10015
10017
  Path("."),
10016
10018
  help="Repository path to scan for request-body validation (default: current directory)",
10017
10019
  ),
10020
+ jobs: Optional[int] = _jobs_option(),
10018
10021
  output_path: Optional[Path] = typer.Option(
10019
10022
  None, "--output", "-o",
10020
10023
  help="Write output to a file instead of stdout.",
@@ -10045,7 +10048,6 @@ def validation_cmd(
10045
10048
  help=_NO_CACHE_SUBCOMMAND_HELP,
10046
10049
  ),
10047
10050
  progress_mode: Optional[str] = _progress_option(),
10048
- jobs: Optional[int] = _jobs_option(),
10049
10051
  ) -> None:
10050
10052
  """Map request-body validation per endpoint (constraints + custom validators).
10051
10053
 
@@ -12173,6 +12175,7 @@ def spring_audit_cmd(
12173
12175
  Path("."),
12174
12176
  help="Repository path to audit (default: current directory)",
12175
12177
  ),
12178
+ jobs: Optional[int] = _jobs_option(),
12176
12179
  output_path: Optional[Path] = typer.Option(
12177
12180
  None, "--output", "-o",
12178
12181
  help="Write output to a file instead of stdout.",
@@ -12304,7 +12307,6 @@ def spring_audit_cmd(
12304
12307
  ),
12305
12308
  detach: bool = _detach_option(),
12306
12309
  progress_mode: Optional[str] = _progress_option(),
12307
- jobs: Optional[int] = _jobs_option(),
12308
12310
  ) -> None:
12309
12311
  """Spring semantic audit: {{RULE_SUMMARY}}.
12310
12312
 
@@ -13483,6 +13485,7 @@ def risk_cmd(
13483
13485
  Path("."),
13484
13486
  help="Repository path (default: current directory).",
13485
13487
  ),
13488
+ jobs: Optional[int] = _jobs_option(),
13486
13489
  limit: int = typer.Option(
13487
13490
  50, "--limit", help="How many composed risks to publish (highest first).", min=0,
13488
13491
  ),
@@ -13542,7 +13545,6 @@ def risk_cmd(
13542
13545
  allow_partial: bool = _allow_partial_option(),
13543
13546
  detach: bool = _detach_option(),
13544
13547
  progress_mode: Optional[str] = _progress_option(),
13545
- jobs: Optional[int] = _jobs_option(),
13546
13548
  ) -> None:
13547
13549
  """What each defect actually costs, once reach and access are in it.
13548
13550
 
@@ -14796,6 +14798,7 @@ def posture_cmd(
14796
14798
  Path("."),
14797
14799
  help="Repository path (default: current directory).",
14798
14800
  ),
14801
+ jobs: Optional[int] = _jobs_option(),
14799
14802
  profile: Optional[str] = typer.Option(
14800
14803
  None,
14801
14804
  "--profile",
@@ -14877,7 +14880,6 @@ def posture_cmd(
14877
14880
  format: str = _format_option(help="Output format: json or yaml."),
14878
14881
  copy: bool = _copy_option(),
14879
14882
  progress_mode: Optional[str] = _progress_option(),
14880
- jobs: Optional[int] = _jobs_option(),
14881
14883
  ) -> None:
14882
14884
  """Which beans are wired under a profile set — and which cannot be decided.
14883
14885
 
@@ -15300,6 +15302,7 @@ def migrate_check_cmd(
15300
15302
  Path("."),
15301
15303
  help="Repository path to scan (default: current directory)",
15302
15304
  ),
15305
+ jobs: Optional[int] = _jobs_option(),
15303
15306
  output_path: Optional[Path] = typer.Option(
15304
15307
  None, "--output", "-o",
15305
15308
  help="Write output to a file instead of stdout.",
@@ -15441,7 +15444,6 @@ def migrate_check_cmd(
15441
15444
  ),
15442
15445
  detach: bool = _detach_option(),
15443
15446
  progress_mode: Optional[str] = _progress_option(),
15444
- jobs: Optional[int] = _jobs_option(),
15445
15447
  ) -> None:
15446
15448
  """Spring Boot 2→3 migration readiness + Java LTS/licensing inventory.
15447
15449
 
@@ -15847,6 +15849,7 @@ def impact_chain_cmd(
15847
15849
  Path("."),
15848
15850
  help="Repository root (default: current directory)",
15849
15851
  ),
15852
+ jobs: Optional[int] = _jobs_option(),
15850
15853
  depth: int = typer.Option(
15851
15854
  4,
15852
15855
  "--depth",
@@ -15886,7 +15889,6 @@ def impact_chain_cmd(
15886
15889
  ),
15887
15890
  ),
15888
15891
  progress_mode: Optional[str] = _progress_option(),
15889
- jobs: Optional[int] = _jobs_option(),
15890
15892
  ) -> None:
15891
15893
  """Spring impact-chain: systemic blast radius of a symbol; TX/SEC findings are opt-in.
15892
15894