sourcecode 5.9.30__tar.gz → 5.9.31__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 (477) hide show
  1. {sourcecode-5.9.30 → sourcecode-5.9.31}/CHANGELOG.md +11 -0
  2. {sourcecode-5.9.30 → sourcecode-5.9.31}/PKG-INFO +3 -3
  3. {sourcecode-5.9.30 → sourcecode-5.9.31}/README.md +2 -2
  4. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/USER_GUIDE.md +1 -1
  5. sourcecode-5.9.31/docs/investigations/2026-09-11-ask-mcp-telemetry.md +117 -0
  6. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/privacy.md +13 -0
  7. {sourcecode-5.9.30 → sourcecode-5.9.31}/pyproject.toml +1 -1
  8. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/__init__.py +1 -1
  9. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cli.py +11 -1
  10. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/release_info.py +1 -1
  11. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/sql/telemetry_events.sql +2 -0
  12. {sourcecode-5.9.30 → sourcecode-5.9.31}/.github/workflows/build-windows.yml +0 -0
  13. {sourcecode-5.9.30 → sourcecode-5.9.31}/.github/workflows/perf-gate.yml +0 -0
  14. {sourcecode-5.9.30 → sourcecode-5.9.31}/.github/workflows/windows-battery.yml +0 -0
  15. {sourcecode-5.9.30 → sourcecode-5.9.31}/.github/workflows/windows-regression.yml +0 -0
  16. {sourcecode-5.9.30 → sourcecode-5.9.31}/.gitignore +0 -0
  17. {sourcecode-5.9.30 → sourcecode-5.9.31}/.ruff.toml +0 -0
  18. {sourcecode-5.9.30 → sourcecode-5.9.31}/CLAUDE.md +0 -0
  19. {sourcecode-5.9.30 → sourcecode-5.9.31}/CODE_OF_CONDUCT.md +0 -0
  20. {sourcecode-5.9.30 → sourcecode-5.9.31}/CONTRIBUTING.md +0 -0
  21. {sourcecode-5.9.30 → sourcecode-5.9.31}/LICENSE +0 -0
  22. {sourcecode-5.9.30 → sourcecode-5.9.31}/NOTICE +0 -0
  23. {sourcecode-5.9.30 → sourcecode-5.9.31}/SECURITY.md +0 -0
  24. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  25. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  26. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  27. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  28. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  29. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  30. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  31. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  32. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  33. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  34. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  35. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  36. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  37. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  38. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  39. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  40. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  41. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  42. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  43. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  44. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  45. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
  46. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
  47. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
  48. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
  49. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +0 -0
  50. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +0 -0
  51. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md +0 -0
  52. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
  53. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
  54. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.29.md +0 -0
  55. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  56. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/CACHE.md +0 -0
  57. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/COMMERCIAL-OFFER.md +0 -0
  58. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/CUSTOMER-VALIDATION.md +0 -0
  59. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/DEFECT-LEDGER.md +0 -0
  60. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/DEMO-5MIN.md +0 -0
  61. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/DEVELOPMENT-ROADMAP.md +0 -0
  62. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  63. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/EXECUTION-PLAN-12MO.md +0 -0
  64. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/EXECUTIVE-ROADMAP.md +0 -0
  65. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/MANUAL-USUARIO.md +0 -0
  66. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/MODERNIZATION.md +0 -0
  67. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/PRODUCT-ROUTE.md +0 -0
  68. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/PRODUCT_AUDIT.md +0 -0
  69. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/PRODUCT_IDENTITY.md +0 -0
  70. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/PRODUCT_TIERS.md +0 -0
  71. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/RC1-CHECKLIST.md +0 -0
  72. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
  73. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/RELEASE-CHECKLIST.md +0 -0
  74. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/RELEASE-VERIFICATION.md +0 -0
  75. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  76. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  77. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  78. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-assessment-report.md +0 -0
  79. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  80. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  81. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  82. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  83. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  84. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  85. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  86. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  87. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  88. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  89. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  90. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  91. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  92. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  93. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  94. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  95. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  96. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  97. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  98. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  99. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  100. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  101. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0006-performance-harness.md +0 -0
  102. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  103. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  104. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/consumer-disposition-inventory.md +0 -0
  105. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/overview.md +0 -0
  106. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/product-architecture-review.md +0 -0
  107. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/product-strategy-layering.md +0 -0
  108. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  109. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/architecture/semantic-ir-roadmap.md +0 -0
  110. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/baseline-ci.yml +0 -0
  111. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/commercial-pipeline-audit.md +0 -0
  112. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/contracts-ci.yml +0 -0
  113. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/contracts.md +0 -0
  114. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  115. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  116. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  117. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  118. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  119. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  120. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  121. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  122. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/licensing-schema.md +0 -0
  123. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/migrate-check.md +0 -0
  124. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/pack-gate-github-actions.yml +0 -0
  125. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/pack-gate-gitlab.yml +0 -0
  126. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/README.md +0 -0
  127. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/REGRESSION-GATE.md +0 -0
  128. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  129. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  130. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  131. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  132. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  133. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  134. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  135. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  136. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  137. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  138. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  139. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  140. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  141. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  142. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  143. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  144. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  145. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  146. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  147. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  148. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  149. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  150. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  151. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  152. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  153. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  154. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  155. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  156. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  157. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  158. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  159. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  160. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  161. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  162. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  163. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  164. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  165. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  166. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  167. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  168. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  169. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  170. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
  171. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
  172. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/README.md +0 -0
  173. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  174. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  175. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  176. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  177. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  178. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  179. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/baselines/reference-best/README.md +0 -0
  180. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  181. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/posture.md +0 -0
  182. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/pro-experience-audit.md +0 -0
  183. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/schema.md +0 -0
  184. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/spec/envelope-v1.md +0 -0
  185. {sourcecode-5.9.30 → sourcecode-5.9.31}/docs/spring-audit-ci.yml +0 -0
  186. {sourcecode-5.9.30 → sourcecode-5.9.31}/hatch_build.py +0 -0
  187. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/compare_integration_engines.py +0 -0
  188. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/context_cost_harness.py +0 -0
  189. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/customer_smoke_test.sh +0 -0
  190. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/generate_jdk_exports.py +0 -0
  191. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/perf_gate.py +0 -0
  192. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/perf_harness.py +0 -0
  193. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/sync_gate_anchors.py +0 -0
  194. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/test_fast.sh +0 -0
  195. {sourcecode-5.9.30 → sourcecode-5.9.31}/scripts/windows_reliability_matrix.py +0 -0
  196. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/__main__.py +0 -0
  197. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/access_drift.py +0 -0
  198. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/adaptive_scanner.py +0 -0
  199. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/analysis_budget.py +0 -0
  200. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/answer_bounds.py +0 -0
  201. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/archetype.py +0 -0
  202. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/architectural_baseline.py +0 -0
  203. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/architectural_delta.py +0 -0
  204. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/architecture_analyzer.py +0 -0
  205. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/architecture_summary.py +0 -0
  206. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/ast_extractor.py +0 -0
  207. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/audit_clusters.py +0 -0
  208. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/audit_recipe.py +0 -0
  209. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/audit_report.py +0 -0
  210. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/audit_since.py +0 -0
  211. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/audit_verify.py +0 -0
  212. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/baseline_attestation.py +0 -0
  213. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/baseline_autocapture.py +0 -0
  214. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/breaking_changes.py +0 -0
  215. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/build_modules.py +0 -0
  216. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/build_stamp.py +0 -0
  217. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/bundled_docs.py +0 -0
  218. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/c4_render.py +0 -0
  219. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cache.py +0 -0
  220. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cache_model.py +0 -0
  221. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cache_observation.py +0 -0
  222. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/call_surface.py +0 -0
  223. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/caller_metrics.py +0 -0
  224. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/caller_reach.py +0 -0
  225. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/canonical_ir.py +0 -0
  226. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/chain_rules.py +0 -0
  227. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/change_plan.py +0 -0
  228. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/ci_output.py +0 -0
  229. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cir_graphs.py +0 -0
  230. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/classifier.py +0 -0
  231. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/click_runtime.py +0 -0
  232. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/client_calls.py +0 -0
  233. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/code_notes_analyzer.py +0 -0
  234. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/compare.py +0 -0
  235. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/concurrency.py +0 -0
  236. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/confidence_analyzer.py +0 -0
  237. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/constraint_diff.py +0 -0
  238. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/consumer_join.py +0 -0
  239. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/container_wiring.py +0 -0
  240. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/context_cache.py +0 -0
  241. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/context_graph.py +0 -0
  242. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/context_scorer.py +0 -0
  243. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/context_summarizer.py +0 -0
  244. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/contract_diff.py +0 -0
  245. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/contract_init.py +0 -0
  246. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/contract_model.py +0 -0
  247. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/contract_pipeline.py +0 -0
  248. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/coverage_parser.py +0 -0
  249. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cve_feed.py +0 -0
  250. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/cve_reachability.py +0 -0
  251. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/data_exposure.py +0 -0
  252. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/data_labels.py +0 -0
  253. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/declarations.py +0 -0
  254. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/defect_classes/__init__.py +0 -0
  255. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/defect_classes/registry.json +0 -0
  256. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/defect_identity.py +0 -0
  257. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/degradation.py +0 -0
  258. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/dependency_analyzer.py +0 -0
  259. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/deployment_prefix.py +0 -0
  260. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detach.py +0 -0
  261. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/__init__.py +0 -0
  262. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/base.py +0 -0
  263. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/csproj_parser.py +0 -0
  264. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/dart.py +0 -0
  265. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/dotnet.py +0 -0
  266. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/elixir.py +0 -0
  267. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/go.py +0 -0
  268. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/heuristic.py +0 -0
  269. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/hybrid.py +0 -0
  270. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/java.py +0 -0
  271. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/jvm_ext.py +0 -0
  272. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/nodejs.py +0 -0
  273. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/parsers.py +0 -0
  274. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/php.py +0 -0
  275. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/project.py +0 -0
  276. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/python.py +0 -0
  277. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/ruby.py +0 -0
  278. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/rust.py +0 -0
  279. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/systems.py +0 -0
  280. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/terraform.py +0 -0
  281. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/detectors/tooling.py +0 -0
  282. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/doc_analyzer.py +0 -0
  283. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/dynamic_argument_surface.py +0 -0
  284. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/empty_answer_diagnostics.py +0 -0
  285. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/empty_reach.py +0 -0
  286. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/endpoint_disposition.py +0 -0
  287. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/endpoint_literals.py +0 -0
  288. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/endpoint_metrics.py +0 -0
  289. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/entrypoint_classifier.py +0 -0
  290. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/env_analyzer.py +0 -0
  291. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/envelope.py +0 -0
  292. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/environment_resolution.py +0 -0
  293. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/error_schema.py +0 -0
  294. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/evidence_provider.py +0 -0
  295. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/execution_plan.py +0 -0
  296. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/explain.py +0 -0
  297. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/explain_endpoint.py +0 -0
  298. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/facts/__init__.py +0 -0
  299. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/facts/registry.json +0 -0
  300. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/field_deprecations.py +0 -0
  301. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/file_chunker.py +0 -0
  302. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/file_classifier.py +0 -0
  303. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/filter_surface.py +0 -0
  304. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/findings_baseline.py +0 -0
  305. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/format_contract.py +0 -0
  306. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/fqn_utils.py +0 -0
  307. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/functional_routes.py +0 -0
  308. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/gate_anchors.py +0 -0
  309. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/git_analyzer.py +0 -0
  310. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/git_checkout.py +0 -0
  311. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/github_diff.py +0 -0
  312. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/graph_analyzer.py +0 -0
  313. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/graph_evidence.py +0 -0
  314. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/hibernate_strat.py +0 -0
  315. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/identity_fallback.py +0 -0
  316. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/inflight.py +0 -0
  317. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/integration_coordinates.py +0 -0
  318. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/intent_router.py +0 -0
  319. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/jdk_exports.py +0 -0
  320. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/jvm_inventory.py +0 -0
  321. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/license.py +0 -0
  322. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/manifest_cache.py +0 -0
  323. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/__init__.py +0 -0
  324. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/dependency_import.py +0 -0
  325. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  326. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  327. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  328. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  329. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  330. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/orchestrator.py +0 -0
  331. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/registry.py +0 -0
  332. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/runner.py +0 -0
  333. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp/server.py +0 -0
  334. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/mcp_nudge.py +0 -0
  335. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/metrics_analyzer.py +0 -0
  336. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/migrate_check.py +0 -0
  337. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/migration_apply.py +0 -0
  338. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/migration_blast.py +0 -0
  339. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/non_coverage.py +0 -0
  340. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/openapi_surface.py +0 -0
  341. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/openrewrite_recipe.py +0 -0
  342. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/output_bounds.py +0 -0
  343. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/output_budget.py +0 -0
  344. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/output_ceiling.py +0 -0
  345. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/output_encoding.py +0 -0
  346. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/output_sink.py +0 -0
  347. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/pack_manifest.py +0 -0
  348. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/packs.py +0 -0
  349. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/parallel.py +0 -0
  350. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/parse_cache.py +0 -0
  351. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/partial_contract.py +0 -0
  352. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/path_admission.py +0 -0
  353. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/path_display.py +0 -0
  354. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/path_filters.py +0 -0
  355. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/perf.py +0 -0
  356. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/phased_run.py +0 -0
  357. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/pipe_contract.py +0 -0
  358. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/posture.py +0 -0
  359. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/pr_comment_renderer.py +0 -0
  360. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/pr_impact.py +0 -0
  361. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/pr_risk.py +0 -0
  362. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/prepare_context.py +0 -0
  363. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/product_info.py +0 -0
  364. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/progress.py +0 -0
  365. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/provenance.py +0 -0
  366. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/ranking_engine.py +0 -0
  367. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/readiness_timeline.py +0 -0
  368. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/readonly.py +0 -0
  369. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/reconciliation.py +0 -0
  370. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/redactor.py +0 -0
  371. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/reference_facts.py +0 -0
  372. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/regress.py +0 -0
  373. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/regulatory_pack.py +0 -0
  374. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/relevance_scorer.py +0 -0
  375. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/remediation_diff.py +0 -0
  376. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/remediation_flow.py +0 -0
  377. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/remediation_report.py +0 -0
  378. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/remedies.py +0 -0
  379. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/rename_refactor.py +0 -0
  380. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/repo_classifier.py +0 -0
  381. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/repository_ir.py +0 -0
  382. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/resource_budget.py +0 -0
  383. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/__init__.py +0 -0
  384. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/context.py +0 -0
  385. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/errors.py +0 -0
  386. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/executor.py +0 -0
  387. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/planner.py +0 -0
  388. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/query.py +0 -0
  389. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/request.py +0 -0
  390. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/resolution.py +0 -0
  391. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/result.py +0 -0
  392. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/retriever.py +0 -0
  393. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/runtime.py +0 -0
  394. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps.py +0 -0
  395. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  396. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_graph.py +0 -0
  397. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_impact.py +0 -0
  398. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_intf.py +0 -0
  399. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_struct.py +0 -0
  400. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  401. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/ris.py +0 -0
  402. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/risk.py +0 -0
  403. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/risk_model.py +0 -0
  404. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/rule_catalog.py +0 -0
  405. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/rule_pass.py +0 -0
  406. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/runs.py +0 -0
  407. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/runtime_classifier.py +0 -0
  408. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/sarif.py +0 -0
  409. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/sarif_emit.py +0 -0
  410. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/scanner.py +0 -0
  411. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schema.py +0 -0
  412. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schema_producers.py +0 -0
  413. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schema_registry.py +0 -0
  414. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  415. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  416. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  417. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  418. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  419. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  420. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  421. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/security_chain.py +0 -0
  422. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/security_config.py +0 -0
  423. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/security_config_scan.py +0 -0
  424. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/security_posture.py +0 -0
  425. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/selection_contract.py +0 -0
  426. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/self_audit.py +0 -0
  427. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/selftest.py +0 -0
  428. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/semantic_analyzer.py +0 -0
  429. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/semantic_impact_engine.py +0 -0
  430. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/semantic_integration_engine.py +0 -0
  431. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/semantic_services.py +0 -0
  432. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/serializer.py +0 -0
  433. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/servlet_surface.py +0 -0
  434. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/source_text.py +0 -0
  435. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_event_topology.py +0 -0
  436. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_findings.py +0 -0
  437. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_impact.py +0 -0
  438. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_model.py +0 -0
  439. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_profiles.py +0 -0
  440. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_properties.py +0 -0
  441. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_security_audit.py +0 -0
  442. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_semantic.py +0 -0
  443. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/spring_tx_analyzer.py +0 -0
  444. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/sql_taint.py +0 -0
  445. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/summarizer.py +0 -0
  446. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/target_admission.py +0 -0
  447. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/__init__.py +0 -0
  448. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/config.py +0 -0
  449. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/consent.py +0 -0
  450. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/events.py +0 -0
  451. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/filters.py +0 -0
  452. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/telemetry/transport.py +0 -0
  453. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/test_gap_ranking.py +0 -0
  454. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/test_sources.py +0 -0
  455. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/text_input.py +0 -0
  456. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/timeline.py +0 -0
  457. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/timeline_cache.py +0 -0
  458. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/token_estimate.py +0 -0
  459. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/tree_utils.py +0 -0
  460. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/type_usage_surface.py +0 -0
  461. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/validation_inference.py +0 -0
  462. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/validation_surface.py +0 -0
  463. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/verify_edit.py +0 -0
  464. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/verify_repo.py +0 -0
  465. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/verify_rules.py +0 -0
  466. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/version_check.py +0 -0
  467. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/vex.py +0 -0
  468. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/waivers.py +0 -0
  469. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/watch_loop.py +0 -0
  470. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/wired_surface.py +0 -0
  471. {sourcecode-5.9.30 → sourcecode-5.9.31}/src/sourcecode/workspace.py +0 -0
  472. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/functions/README.md +0 -0
  473. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/functions/get-license/index.ts +0 -0
  474. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  475. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/functions/telemetry/index.ts +0 -0
  476. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/sql/license_event_ordering.sql +0 -0
  477. {sourcecode-5.9.30 → sourcecode-5.9.31}/supabase/sql/licensing_schema.sql +0 -0
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.31] — 2026-09-12
4
+
5
+ *Patch release correcting MCP/CLI telemetry outcomes and the telemetry schema.*
6
+
7
+ ### Fixed
8
+
9
+ - Successful Click exits no longer appear as failed `execution_completed` events.
10
+ Nonzero exits and unhandled exceptions retain `success=false` and emit only
11
+ the exception class as `error_kind`.
12
+ - The telemetry schema now declares the MCP `tool` column used by the collector.
13
+
3
14
  ## [5.9.30] — 2026-09-02
4
15
 
5
16
  *A full pass over the open queue from the two 5.9.29 field audits. Nine rows
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.30
3
+ Version: 5.9.31
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.30-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.31-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
@@ -290,7 +290,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
290
290
  # pip / pipx
291
291
  pipx install sourcecode # or: pip install sourcecode
292
292
 
293
- ask version # ask 5.9.30 — and, on a build that has aged,
293
+ ask version # ask 5.9.31 — and, on a build that has aged,
294
294
  # how many releases have probably shipped since
295
295
  ```
296
296
 
@@ -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.30-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.31-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
@@ -241,7 +241,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
241
241
  # pip / pipx
242
242
  pipx install sourcecode # or: pip install sourcecode
243
243
 
244
- ask version # ask 5.9.30 — and, on a build that has aged,
244
+ ask version # ask 5.9.31 — and, on a build that has aged,
245
245
  # how many releases have probably shipped since
246
246
  ```
247
247
 
@@ -279,7 +279,7 @@ pipx install sourcecode # isolated install, no venv needed
279
279
 
280
280
  # Verify
281
281
  ask version
282
- # ask 5.9.30
282
+ # ask 5.9.31
283
283
  ```
284
284
 
285
285
  Requires Python 3.9+.
@@ -0,0 +1,117 @@
1
+ # Investigación: resultados ASK por MCP del 11 de septiembre de 2026
2
+
3
+ Investigado el 12 de septiembre de 2026. Código histórico: release 5.8.20,
4
+ commit `0370f9c`. Contraste: checkout 5.9.30. Datos del incidente: las ocho filas
5
+ aportadas por el usuario; no se ha accedido al despliegue ni a la base de datos.
6
+
7
+ ## Conclusión
8
+
9
+ **Los cuatro `execution_completed success=false` no demuestran cuatro fallos.**
10
+ La instrumentación confunde la salida normal de Click con una excepción de error.
11
+ El defecto existe tanto en 5.8.20 como en el checkout 5.9.30 anterior a esta corrección.
12
+
13
+ La lectura más compatible con el código es actividad MCP con tres resultados de
14
+ herramienta marcados como correctos y uno como error, junto con cuatro ejecuciones
15
+ CLI internas cuya medición de éxito está dañada. La atribución de las filas
16
+ `command_executed / mcp` a herramientas requiere confirmar qué colector estaba
17
+ desplegado: el colector antiguo transforma exactamente así los eventos MCP.
18
+ No es posible emparejar inequívocamente cada fila interna con una herramienta.
19
+
20
+ El final de la tabla no prueba abandono, desinstalación ni un cierre del servidor.
21
+ Una instalación anónima tampoco identifica por sí sola a una persona.
22
+
23
+ ## Evidencia confirmada
24
+
25
+ 1. En `src/sourcecode/cli.py`, `_get_command_with_preprocessing()._cmd_main()`
26
+ captura `BaseException`, pone `success=False` y vuelve a lanzar la excepción.
27
+ Click termina las invocaciones correctas en modo standalone con `SystemExit(0)`.
28
+ `CliRunner` recoge esa salida como código 0, pero el evento ya se emitió como fallo.
29
+ Esto también ocurre dentro de `src/sourcecode/mcp/runner.py`.
30
+ 2. `cmd=analyze` es una familia amplia. El wrapper también usa ese valor para
31
+ `prepare-context`, `version` y otros comandos. El campo `command` aporta la
32
+ distinción si el colector lo conserva; no estaba incluido en la tabla recibida.
33
+ 3. En 5.8.20, `get_delta` invoca `prepare-context delta … --since REF`, mientras que
34
+ `get_compact_context(git_context=True)` invoca `… --compact --git-context`.
35
+ Por tanto, los flags encajan con llamadas MCP documentadas, sin indicar por sí
36
+ solos que el agente inventase argumentos o usase mal la CLI.
37
+ 4. El hook de MCP emite `mcp_tool_invoked`, con `cmd=mcp` y el resultado de la
38
+ herramienta. El cliente 5.8.20 permite ese evento. El colector antiguo
39
+ (`41c3e1a`) no lo permite y aplica `event: pick(p.event, EVENTS, "command_executed")`.
40
+ Conserva `cmd` y `success`, pero pierde `tool` y `command`.
41
+ El colector del repositorio actualizado (`44834aa`) sí permite ese evento.
42
+ **Colector desplegado desactualizado: inferencia fuerte, no comprobación remota.**
43
+ 5. El wrapper CLI no enviaba `error_kind` ni el número de archivos.
44
+ Así se explican `error_kind=null` y `repo_size=unknown` incluso con un análisis
45
+ correcto; no son evidencias de que el repositorio no llegase a abrirse.
46
+ 6. Los eventos se envían en hilos independientes, con timeout y sin reintentos.
47
+ `received_at` es recepción, no inicio de ejecución. Puede haber pérdidas y
48
+ cambios de orden; no permite reconstruir con certeza la secuencia de llamadas.
49
+
50
+ ## Reproducción
51
+
52
+ Sobre el código histórico, un repositorio temporal con dos commits y el recorrido
53
+ real `FastMCP Tool.run → herramienta → CliRunner` reproduce:
54
+
55
+ | Llamada | Resultado visible al agente | Evento CLI | Evento MCP |
56
+ |---|---|---|---|
57
+ | `get_delta(since="HEAD~1")` | Correcto, `success=true` | `success=false`, flags `--since` | `success=true` |
58
+ | `get_compact_context(git_context=True)` | Correcto, `success=true` | `success=false`, flags `--compact --git-context` | `success=true` |
59
+ | `get_delta(since="MISSING_REF")` | Error, `isError=true`, `EXECUTION_FAILED` | `success=false`, flags `--since` | `success=false` |
60
+
61
+ La reproducción local usa macOS y Python 3.14; el incidente es Linux/Python 3.12.
62
+ Confirma el defecto de instrumentación compartido, pero no reproduce el entorno,
63
+ repositorio ni argumentos exactos de aquella instalación.
64
+
65
+ ## Qué pudo causar el fallo real
66
+
67
+ Una referencia Git no disponible reproduce un error real con los mismos flags.
68
+ También es relevante la selección automática de `get_delta`: prueba `origin/main`,
69
+ después `origin/master`, y finalmente usa `HEAD~1`. Ese último ref no existe en un
70
+ repositorio con un solo commit o un clon superficial sin padre disponible. Una
71
+ ruta errónea, permisos o una excepción interna son otras posibilidades.
72
+
73
+ No se conserva el valor de `--since`, el repositorio ni stderr por diseño. No hay
74
+ base para elegir una de esas causas como explicación del caso concreto. Tampoco
75
+ hay evidencia específica de incompatibilidad con Python 3.12 o Linux.
76
+
77
+ ## Correcciones locales y comprobación operativa pendiente
78
+
79
+ - El wrapper distingue `SystemExit(0/None)` de salidas fallidas y conserva intacto
80
+ el comportamiento de Click. Para fallos emite solo la clase de excepción.
81
+ `SystemExit` no permite conocer por sí solo el motivo de un error CLI manejado.
82
+ - Cinco pruebas de regresión cubren salida correcta, ayuda, opción inválida,
83
+ excepción sin datos privados y resultado correcto por el runner MCP. Las cinco
84
+ fallaban antes de la corrección.
85
+ - El SQL declara y migra de forma idempotente `tool`: el colector ya intentaba
86
+ insertarlo, pero el esquema versionado no lo declaraba. Sin esa columna, desplegar
87
+ ese colector puede impedir inserciones. No se conoce el esquema remoto real.
88
+ - Estos cambios son locales: no se ha publicado una versión ni desplegado SQL o
89
+ función. Las instalaciones 5.8.20 seguirán enviando el indicador defectuoso.
90
+
91
+ Antes de usar métricas de éxito, comprobar la revisión de la función desplegada y
92
+ las columnas existentes; migrar el esquema antes de desplegar el colector actualizado.
93
+ No reinterpretar masivamente los falsos negativos históricos como éxitos: contienen
94
+ tanto ejecuciones correctas como errores reales. No sumar eventos CLI y MCP como
95
+ acciones independientes.
96
+
97
+ Consulta de solo lectura para ampliar las filas sin exigir que las columnas
98
+ `command` y `tool` ya existan:
99
+
100
+ ```sql
101
+ select received_at, client_ts, event, cmd,
102
+ to_jsonb(t)->>'command' as command,
103
+ to_jsonb(t)->>'tool' as tool,
104
+ flags, success, error_kind, duration, v
105
+ from public.telemetry_events as t
106
+ where received_at >= timestamptz '2026-09-11 00:00:00+00'
107
+ and received_at < timestamptz '2026-09-12 00:00:00+00'
108
+ and session = '03ff2232'
109
+ and install_id = '62d2d283-7369-476f-8828-3cd9f57169b3'
110
+ order by received_at;
111
+ ```
112
+
113
+ Para versiones publicadas con la corrección, contar éxito mediante
114
+ `event='execution_completed' AND success IS TRUE` para invocaciones CLI, o
115
+ `event='mcp_tool_invoked' AND success IS TRUE` para herramientas MCP, manteniendo
116
+ separados ambos indicadores. Hasta confirmar la versión desplegada del colector,
117
+ `command_executed / mcp` debe tratarse como señal heredada, no como arranques del servidor.
@@ -65,6 +65,19 @@ When telemetry is enabled, these fields are sent per command invocation:
65
65
  | `tool` | `get_compact_context` | MCP tool name only, on `mcp_tool_invoked` events (see below) |
66
66
  | `session` | `a3f2c1b0` | 8-char random hex, ephemeral, never persisted |
67
67
 
68
+ ### Interpreting execution outcomes
69
+
70
+ `execution_completed` means the CLI invocation ended. It is not itself a success
71
+ event. Successful process exits (`SystemExit(0)` or `SystemExit(None)`) must record
72
+ `success=true`; nonzero exits and unhandled exceptions record `success=false` and
73
+ only the exception class in `error_kind`, never its message.
74
+
75
+ Historical warning: ASK 5.8.20, and the unpatched 5.9.30 source, recorded successful
76
+ Click exits as failures. Those `execution_completed.success=false` rows cannot be
77
+ used to calculate a failure rate or retrospectively relabelled as successes.
78
+ MCP tool outcomes are a separate event stream; do not count both streams as
79
+ independent user actions. See [the September 11 investigation](investigations/2026-09-11-ask-mcp-telemetry.md).
80
+
68
81
  ### MCP tool invocations
69
82
 
70
83
  When ASK Engine runs as an MCP server (`ask mcp serve`), each tool call records one
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.9.30"
7
+ version = "5.9.31"
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.30"
7
+ __version__ = "5.9.31"
@@ -4897,10 +4897,19 @@ def _get_command_with_preprocessing(typer_instance: Any) -> Any:
4897
4897
  started = time.monotonic()
4898
4898
  command = _telemetry_command(args)
4899
4899
  success = True
4900
+ error_kind = None
4900
4901
  try:
4901
4902
  return _orig_cmd_main(args=args, **kwargs)
4902
- except BaseException:
4903
+ except SystemExit as exc:
4904
+ # Click uses SystemExit(0) even after successful CLI/MCP calls.
4905
+ # Preserve its exit while recording the outcome, not the exception.
4906
+ success = exc.code is None or exc.code == 0
4907
+ if not success:
4908
+ error_kind = type(exc).__name__
4909
+ raise
4910
+ except BaseException as exc:
4903
4911
  success = False
4912
+ error_kind = type(exc).__name__
4904
4913
  raise
4905
4914
  finally:
4906
4915
  try:
@@ -4912,6 +4921,7 @@ def _get_command_with_preprocessing(typer_instance: Any) -> Any:
4912
4921
  flags=_telemetry_flags(args),
4913
4922
  duration_s=time.monotonic() - started,
4914
4923
  success=success,
4924
+ error_kind=error_kind,
4915
4925
  )
4916
4926
  except Exception:
4917
4927
  pass
@@ -27,7 +27,7 @@ from typing import Any, Optional
27
27
  #: The date `__version__` was released, from that version's CHANGELOG entry.
28
28
  #: `tests/test_release_info.py` fails the build if the two disagree, so this is
29
29
  #: a copy of a fact rather than a second authority for it.
30
- RELEASE_DATE = "2026-09-02"
30
+ RELEASE_DATE = "2026-09-12"
31
31
 
32
32
  #: Releases per day, measured over the latest 30 CHANGELOG releases (the same
33
33
  #: computation the test re-runs). The nine-day interval before 5.9.0 lowers
@@ -18,6 +18,7 @@ create table if not exists public.telemetry_events (
18
18
  duration text, -- <1s | <5s | <15s | <60s | 60s+ | unknown
19
19
  success boolean,
20
20
  error_kind text, -- exception class name only
21
+ tool text, -- MCP tool identifier only; never arguments
21
22
  feature text, -- gated feature / task name (closed set)
22
23
  install_id uuid, -- stable anonymous install id (random, no PII)
23
24
  session text -- ephemeral 8-char hex, NOT a stable user id
@@ -26,6 +27,7 @@ create table if not exists public.telemetry_events (
26
27
  -- If the table already exists from an earlier deploy, add the column:
27
28
  alter table public.telemetry_events add column if not exists install_id uuid;
28
29
  alter table public.telemetry_events add column if not exists command text;
30
+ alter table public.telemetry_events add column if not exists tool text;
29
31
 
30
32
  -- Common query axes: funnel by event, adoption by version, time series,
31
33
  -- and unique-install / conversion / retention by install_id.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes