sourcecode 5.9.31__tar.gz → 5.9.33__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 (486) hide show
  1. {sourcecode-5.9.31 → sourcecode-5.9.33}/.github/workflows/build-windows.yml +4 -0
  2. {sourcecode-5.9.31 → sourcecode-5.9.33}/.github/workflows/perf-gate.yml +4 -0
  3. {sourcecode-5.9.31 → sourcecode-5.9.33}/.github/workflows/windows-battery.yml +4 -0
  4. {sourcecode-5.9.31 → sourcecode-5.9.33}/.github/workflows/windows-regression.yml +4 -0
  5. {sourcecode-5.9.31 → sourcecode-5.9.33}/CHANGELOG.md +27 -0
  6. {sourcecode-5.9.31 → sourcecode-5.9.33}/PKG-INFO +3 -3
  7. {sourcecode-5.9.31 → sourcecode-5.9.33}/README.md +2 -2
  8. sourcecode-5.9.33/SPEC-update-notifications.md +85 -0
  9. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/USER_GUIDE.md +1 -1
  10. sourcecode-5.9.33/docs/investigations/2026-09-15-core-audit.md +107 -0
  11. sourcecode-5.9.33/docs/investigations/2026-09-15-telemetry-audit.md +50 -0
  12. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/privacy.md +19 -4
  13. sourcecode-5.9.33/docs/update.md +22 -0
  14. {sourcecode-5.9.31 → sourcecode-5.9.33}/pyproject.toml +1 -1
  15. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/__init__.py +1 -1
  16. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cli.py +140 -24
  17. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/license.py +1 -0
  18. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/runner.py +10 -2
  19. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/server.py +47 -2
  20. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/__init__.py +24 -5
  21. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/config.py +54 -18
  22. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/events.py +6 -0
  23. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/filters.py +14 -4
  24. sourcecode-5.9.33/src/sourcecode/telemetry/lifecycle.py +30 -0
  25. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/transport.py +38 -3
  26. sourcecode-5.9.33/src/sourcecode/update.py +155 -0
  27. sourcecode-5.9.33/supabase/functions/telemetry/contract.test.ts +46 -0
  28. sourcecode-5.9.31/supabase/functions/telemetry/index.ts → sourcecode-5.9.33/supabase/functions/telemetry/contract.ts +32 -67
  29. sourcecode-5.9.33/supabase/functions/telemetry/index.ts +71 -0
  30. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/sql/telemetry_events.sql +15 -0
  31. sourcecode-5.9.33/supabase/sql/telemetry_product_metrics.sql +135 -0
  32. {sourcecode-5.9.31 → sourcecode-5.9.33}/.gitignore +0 -0
  33. {sourcecode-5.9.31 → sourcecode-5.9.33}/.ruff.toml +0 -0
  34. {sourcecode-5.9.31 → sourcecode-5.9.33}/CLAUDE.md +0 -0
  35. {sourcecode-5.9.31 → sourcecode-5.9.33}/CODE_OF_CONDUCT.md +0 -0
  36. {sourcecode-5.9.31 → sourcecode-5.9.33}/CONTRIBUTING.md +0 -0
  37. {sourcecode-5.9.31 → sourcecode-5.9.33}/LICENSE +0 -0
  38. {sourcecode-5.9.31 → sourcecode-5.9.33}/NOTICE +0 -0
  39. {sourcecode-5.9.31 → sourcecode-5.9.33}/SECURITY.md +0 -0
  40. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  41. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  42. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  43. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  44. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  45. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  46. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  47. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  48. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  49. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  50. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  51. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  52. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  53. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  54. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  55. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  56. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  57. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  58. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  59. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  60. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  61. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
  62. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
  63. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
  64. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
  65. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +0 -0
  66. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +0 -0
  67. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md +0 -0
  68. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
  69. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
  70. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.29.md +0 -0
  71. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  72. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/CACHE.md +0 -0
  73. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/COMMERCIAL-OFFER.md +0 -0
  74. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/CUSTOMER-VALIDATION.md +0 -0
  75. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/DEFECT-LEDGER.md +0 -0
  76. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/DEMO-5MIN.md +0 -0
  77. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/DEVELOPMENT-ROADMAP.md +0 -0
  78. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  79. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/EXECUTION-PLAN-12MO.md +0 -0
  80. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/EXECUTIVE-ROADMAP.md +0 -0
  81. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/MANUAL-USUARIO.md +0 -0
  82. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/MODERNIZATION.md +0 -0
  83. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/PRODUCT-ROUTE.md +0 -0
  84. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/PRODUCT_AUDIT.md +0 -0
  85. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/PRODUCT_IDENTITY.md +0 -0
  86. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/PRODUCT_TIERS.md +0 -0
  87. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/RC1-CHECKLIST.md +0 -0
  88. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
  89. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/RELEASE-CHECKLIST.md +0 -0
  90. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/RELEASE-VERIFICATION.md +0 -0
  91. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  92. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  93. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  94. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-assessment-report.md +0 -0
  95. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  96. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  97. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  98. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  99. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  100. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  101. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  102. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  103. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  104. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  105. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  106. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  107. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  108. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  109. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  110. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  111. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  112. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  113. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  114. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  115. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  116. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  117. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0006-performance-harness.md +0 -0
  118. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  119. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  120. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/consumer-disposition-inventory.md +0 -0
  121. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/overview.md +0 -0
  122. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/product-architecture-review.md +0 -0
  123. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/product-strategy-layering.md +0 -0
  124. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  125. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/architecture/semantic-ir-roadmap.md +0 -0
  126. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/baseline-ci.yml +0 -0
  127. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/commercial-pipeline-audit.md +0 -0
  128. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/contracts-ci.yml +0 -0
  129. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/contracts.md +0 -0
  130. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  131. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  132. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  133. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  134. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  135. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  136. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  137. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  138. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/investigations/2026-09-11-ask-mcp-telemetry.md +0 -0
  139. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/licensing-schema.md +0 -0
  140. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/migrate-check.md +0 -0
  141. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/pack-gate-github-actions.yml +0 -0
  142. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/pack-gate-gitlab.yml +0 -0
  143. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/README.md +0 -0
  144. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/REGRESSION-GATE.md +0 -0
  145. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  146. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  147. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  148. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  149. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  150. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  151. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  152. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  153. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  154. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  155. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  156. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  157. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  158. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  159. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  160. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  161. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  162. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  163. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  164. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  165. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  166. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  167. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  168. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  169. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  170. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  171. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  172. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  173. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  174. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  175. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  176. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  177. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  178. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  179. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  180. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  181. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  182. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  183. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  184. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  185. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  186. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  187. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
  188. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
  189. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/README.md +0 -0
  190. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  191. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  192. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  193. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  194. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  195. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  196. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/baselines/reference-best/README.md +0 -0
  197. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  198. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/posture.md +0 -0
  199. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/pro-experience-audit.md +0 -0
  200. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/schema.md +0 -0
  201. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/spec/envelope-v1.md +0 -0
  202. {sourcecode-5.9.31 → sourcecode-5.9.33}/docs/spring-audit-ci.yml +0 -0
  203. {sourcecode-5.9.31 → sourcecode-5.9.33}/hatch_build.py +0 -0
  204. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/compare_integration_engines.py +0 -0
  205. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/context_cost_harness.py +0 -0
  206. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/customer_smoke_test.sh +0 -0
  207. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/generate_jdk_exports.py +0 -0
  208. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/perf_gate.py +0 -0
  209. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/perf_harness.py +0 -0
  210. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/sync_gate_anchors.py +0 -0
  211. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/test_fast.sh +0 -0
  212. {sourcecode-5.9.31 → sourcecode-5.9.33}/scripts/windows_reliability_matrix.py +0 -0
  213. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/__main__.py +0 -0
  214. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/access_drift.py +0 -0
  215. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/adaptive_scanner.py +0 -0
  216. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/analysis_budget.py +0 -0
  217. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/answer_bounds.py +0 -0
  218. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/archetype.py +0 -0
  219. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/architectural_baseline.py +0 -0
  220. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/architectural_delta.py +0 -0
  221. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/architecture_analyzer.py +0 -0
  222. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/architecture_summary.py +0 -0
  223. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/ast_extractor.py +0 -0
  224. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/audit_clusters.py +0 -0
  225. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/audit_recipe.py +0 -0
  226. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/audit_report.py +0 -0
  227. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/audit_since.py +0 -0
  228. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/audit_verify.py +0 -0
  229. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/baseline_attestation.py +0 -0
  230. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/baseline_autocapture.py +0 -0
  231. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/breaking_changes.py +0 -0
  232. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/build_modules.py +0 -0
  233. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/build_stamp.py +0 -0
  234. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/bundled_docs.py +0 -0
  235. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/c4_render.py +0 -0
  236. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cache.py +0 -0
  237. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cache_model.py +0 -0
  238. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cache_observation.py +0 -0
  239. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/call_surface.py +0 -0
  240. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/caller_metrics.py +0 -0
  241. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/caller_reach.py +0 -0
  242. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/canonical_ir.py +0 -0
  243. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/chain_rules.py +0 -0
  244. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/change_plan.py +0 -0
  245. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/ci_output.py +0 -0
  246. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cir_graphs.py +0 -0
  247. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/classifier.py +0 -0
  248. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/click_runtime.py +0 -0
  249. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/client_calls.py +0 -0
  250. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/code_notes_analyzer.py +0 -0
  251. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/compare.py +0 -0
  252. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/concurrency.py +0 -0
  253. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/confidence_analyzer.py +0 -0
  254. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/constraint_diff.py +0 -0
  255. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/consumer_join.py +0 -0
  256. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/container_wiring.py +0 -0
  257. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/context_cache.py +0 -0
  258. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/context_graph.py +0 -0
  259. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/context_scorer.py +0 -0
  260. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/context_summarizer.py +0 -0
  261. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/contract_diff.py +0 -0
  262. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/contract_init.py +0 -0
  263. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/contract_model.py +0 -0
  264. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/contract_pipeline.py +0 -0
  265. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/coverage_parser.py +0 -0
  266. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cve_feed.py +0 -0
  267. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/cve_reachability.py +0 -0
  268. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/data_exposure.py +0 -0
  269. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/data_labels.py +0 -0
  270. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/declarations.py +0 -0
  271. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/defect_classes/__init__.py +0 -0
  272. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/defect_classes/registry.json +0 -0
  273. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/defect_identity.py +0 -0
  274. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/degradation.py +0 -0
  275. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/dependency_analyzer.py +0 -0
  276. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/deployment_prefix.py +0 -0
  277. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detach.py +0 -0
  278. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/__init__.py +0 -0
  279. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/base.py +0 -0
  280. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/csproj_parser.py +0 -0
  281. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/dart.py +0 -0
  282. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/dotnet.py +0 -0
  283. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/elixir.py +0 -0
  284. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/go.py +0 -0
  285. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/heuristic.py +0 -0
  286. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/hybrid.py +0 -0
  287. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/java.py +0 -0
  288. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/jvm_ext.py +0 -0
  289. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/nodejs.py +0 -0
  290. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/parsers.py +0 -0
  291. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/php.py +0 -0
  292. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/project.py +0 -0
  293. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/python.py +0 -0
  294. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/ruby.py +0 -0
  295. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/rust.py +0 -0
  296. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/systems.py +0 -0
  297. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/terraform.py +0 -0
  298. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/detectors/tooling.py +0 -0
  299. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/doc_analyzer.py +0 -0
  300. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/dynamic_argument_surface.py +0 -0
  301. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/empty_answer_diagnostics.py +0 -0
  302. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/empty_reach.py +0 -0
  303. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/endpoint_disposition.py +0 -0
  304. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/endpoint_literals.py +0 -0
  305. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/endpoint_metrics.py +0 -0
  306. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/entrypoint_classifier.py +0 -0
  307. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/env_analyzer.py +0 -0
  308. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/envelope.py +0 -0
  309. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/environment_resolution.py +0 -0
  310. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/error_schema.py +0 -0
  311. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/evidence_provider.py +0 -0
  312. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/execution_plan.py +0 -0
  313. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/explain.py +0 -0
  314. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/explain_endpoint.py +0 -0
  315. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/facts/__init__.py +0 -0
  316. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/facts/registry.json +0 -0
  317. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/field_deprecations.py +0 -0
  318. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/file_chunker.py +0 -0
  319. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/file_classifier.py +0 -0
  320. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/filter_surface.py +0 -0
  321. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/findings_baseline.py +0 -0
  322. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/format_contract.py +0 -0
  323. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/fqn_utils.py +0 -0
  324. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/functional_routes.py +0 -0
  325. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/gate_anchors.py +0 -0
  326. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/git_analyzer.py +0 -0
  327. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/git_checkout.py +0 -0
  328. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/github_diff.py +0 -0
  329. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/graph_analyzer.py +0 -0
  330. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/graph_evidence.py +0 -0
  331. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/hibernate_strat.py +0 -0
  332. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/identity_fallback.py +0 -0
  333. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/inflight.py +0 -0
  334. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/integration_coordinates.py +0 -0
  335. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/intent_router.py +0 -0
  336. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/jdk_exports.py +0 -0
  337. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/jvm_inventory.py +0 -0
  338. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/manifest_cache.py +0 -0
  339. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/__init__.py +0 -0
  340. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/dependency_import.py +0 -0
  341. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  342. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  343. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  344. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  345. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  346. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/orchestrator.py +0 -0
  347. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp/registry.py +0 -0
  348. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/mcp_nudge.py +0 -0
  349. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/metrics_analyzer.py +0 -0
  350. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/migrate_check.py +0 -0
  351. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/migration_apply.py +0 -0
  352. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/migration_blast.py +0 -0
  353. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/non_coverage.py +0 -0
  354. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/openapi_surface.py +0 -0
  355. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/openrewrite_recipe.py +0 -0
  356. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/output_bounds.py +0 -0
  357. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/output_budget.py +0 -0
  358. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/output_ceiling.py +0 -0
  359. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/output_encoding.py +0 -0
  360. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/output_sink.py +0 -0
  361. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/pack_manifest.py +0 -0
  362. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/packs.py +0 -0
  363. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/parallel.py +0 -0
  364. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/parse_cache.py +0 -0
  365. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/partial_contract.py +0 -0
  366. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/path_admission.py +0 -0
  367. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/path_display.py +0 -0
  368. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/path_filters.py +0 -0
  369. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/perf.py +0 -0
  370. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/phased_run.py +0 -0
  371. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/pipe_contract.py +0 -0
  372. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/posture.py +0 -0
  373. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/pr_comment_renderer.py +0 -0
  374. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/pr_impact.py +0 -0
  375. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/pr_risk.py +0 -0
  376. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/prepare_context.py +0 -0
  377. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/product_info.py +0 -0
  378. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/progress.py +0 -0
  379. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/provenance.py +0 -0
  380. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/ranking_engine.py +0 -0
  381. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/readiness_timeline.py +0 -0
  382. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/readonly.py +0 -0
  383. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/reconciliation.py +0 -0
  384. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/redactor.py +0 -0
  385. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/reference_facts.py +0 -0
  386. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/regress.py +0 -0
  387. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/regulatory_pack.py +0 -0
  388. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/release_info.py +0 -0
  389. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/relevance_scorer.py +0 -0
  390. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/remediation_diff.py +0 -0
  391. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/remediation_flow.py +0 -0
  392. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/remediation_report.py +0 -0
  393. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/remedies.py +0 -0
  394. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/rename_refactor.py +0 -0
  395. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/repo_classifier.py +0 -0
  396. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/repository_ir.py +0 -0
  397. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/resource_budget.py +0 -0
  398. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/__init__.py +0 -0
  399. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/context.py +0 -0
  400. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/errors.py +0 -0
  401. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/executor.py +0 -0
  402. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/planner.py +0 -0
  403. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/query.py +0 -0
  404. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/request.py +0 -0
  405. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/resolution.py +0 -0
  406. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/result.py +0 -0
  407. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/retriever.py +0 -0
  408. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/runtime.py +0 -0
  409. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps.py +0 -0
  410. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  411. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_graph.py +0 -0
  412. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_impact.py +0 -0
  413. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_intf.py +0 -0
  414. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_struct.py +0 -0
  415. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  416. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/ris.py +0 -0
  417. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/risk.py +0 -0
  418. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/risk_model.py +0 -0
  419. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/rule_catalog.py +0 -0
  420. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/rule_pass.py +0 -0
  421. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/runs.py +0 -0
  422. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/runtime_classifier.py +0 -0
  423. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/sarif.py +0 -0
  424. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/sarif_emit.py +0 -0
  425. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/scanner.py +0 -0
  426. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schema.py +0 -0
  427. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schema_producers.py +0 -0
  428. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schema_registry.py +0 -0
  429. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  430. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  431. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  432. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  433. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  434. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  435. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  436. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/security_chain.py +0 -0
  437. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/security_config.py +0 -0
  438. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/security_config_scan.py +0 -0
  439. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/security_posture.py +0 -0
  440. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/selection_contract.py +0 -0
  441. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/self_audit.py +0 -0
  442. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/selftest.py +0 -0
  443. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/semantic_analyzer.py +0 -0
  444. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/semantic_impact_engine.py +0 -0
  445. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/semantic_integration_engine.py +0 -0
  446. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/semantic_services.py +0 -0
  447. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/serializer.py +0 -0
  448. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/servlet_surface.py +0 -0
  449. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/source_text.py +0 -0
  450. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_event_topology.py +0 -0
  451. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_findings.py +0 -0
  452. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_impact.py +0 -0
  453. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_model.py +0 -0
  454. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_profiles.py +0 -0
  455. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_properties.py +0 -0
  456. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_security_audit.py +0 -0
  457. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_semantic.py +0 -0
  458. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/spring_tx_analyzer.py +0 -0
  459. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/sql_taint.py +0 -0
  460. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/summarizer.py +0 -0
  461. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/target_admission.py +0 -0
  462. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/telemetry/consent.py +0 -0
  463. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/test_gap_ranking.py +0 -0
  464. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/test_sources.py +0 -0
  465. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/text_input.py +0 -0
  466. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/timeline.py +0 -0
  467. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/timeline_cache.py +0 -0
  468. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/token_estimate.py +0 -0
  469. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/tree_utils.py +0 -0
  470. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/type_usage_surface.py +0 -0
  471. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/validation_inference.py +0 -0
  472. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/validation_surface.py +0 -0
  473. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/verify_edit.py +0 -0
  474. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/verify_repo.py +0 -0
  475. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/verify_rules.py +0 -0
  476. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/version_check.py +0 -0
  477. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/vex.py +0 -0
  478. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/waivers.py +0 -0
  479. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/watch_loop.py +0 -0
  480. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/wired_surface.py +0 -0
  481. {sourcecode-5.9.31 → sourcecode-5.9.33}/src/sourcecode/workspace.py +0 -0
  482. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/functions/README.md +0 -0
  483. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/functions/get-license/index.ts +0 -0
  484. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  485. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/sql/license_event_ordering.sql +0 -0
  486. {sourcecode-5.9.31 → sourcecode-5.9.33}/supabase/sql/licensing_schema.sql +0 -0
@@ -3,6 +3,10 @@ name: Build Windows EXE
3
3
  on:
4
4
  workflow_dispatch:
5
5
 
6
+ env:
7
+ SOURCECODE_TELEMETRY: "0"
8
+ SOURCECODE_TELEMETRY_CONTEXT: "ci"
9
+
6
10
  jobs:
7
11
  build-windows:
8
12
  runs-on: windows-latest
@@ -29,6 +29,10 @@ concurrency:
29
29
  group: perf-gate
30
30
  cancel-in-progress: false
31
31
 
32
+ env:
33
+ SOURCECODE_TELEMETRY: "0"
34
+ SOURCECODE_TELEMETRY_CONTEXT: "ci"
35
+
32
36
  jobs:
33
37
  gate:
34
38
  runs-on: ubuntu-latest
@@ -12,6 +12,10 @@ concurrency:
12
12
  group: windows-battery-${{ github.ref }}
13
13
  cancel-in-progress: true
14
14
 
15
+ env:
16
+ SOURCECODE_TELEMETRY: "0"
17
+ SOURCECODE_TELEMETRY_CONTEXT: "ci"
18
+
15
19
  jobs:
16
20
  battery:
17
21
  runs-on: windows-latest
@@ -10,6 +10,10 @@ on:
10
10
  # observe Git Bash rewriting a route argument such as `/owners` to an absolute
11
11
  # Windows path. Keep both the normal Python regression suite and the actual
12
12
  # Git Bash invocation on a Windows runner.
13
+ env:
14
+ SOURCECODE_TELEMETRY: "0"
15
+ SOURCECODE_TELEMETRY_CONTEXT: "ci"
16
+
13
17
  jobs:
14
18
  windows-cli:
15
19
  runs-on: windows-latest
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.33] — 2026-09-15
4
+
5
+ *Patch release keeping `ask --help` responsive on large repositories.*
6
+
7
+ ### Fixed
8
+
9
+ - Bare `ask --help` no longer scans the current directory while building
10
+ contextual suggestions. Repository-aware help remains available with
11
+ `ask <repo> --help`.
12
+ - Informational `--help` and `--version` exits no longer fail because an
13
+ unrelated `--output` path was not created.
14
+
15
+ ## [5.9.32] — 2026-09-15
16
+
17
+ *Patch release adding safe, explicit PyPI update notifications and installation.*
18
+
19
+ ### Added
20
+
21
+ - `ask version` and `ask update --check` report when a newer ASK release exists.
22
+ - `ask update` asks for confirmation; `ask update --yes` is the explicit
23
+ non-interactive form.
24
+ - MCP agents can use `check_for_updates()` and `update_ask(confirm=true)`.
25
+ - Updates use the active Python interpreter, serialize concurrent installs,
26
+ verify the installed distribution, and attempt rollback after a failed pip run.
27
+ - Update checks are cached for 24 hours and can be disabled with
28
+ `SOURCECODE_UPDATE_DISABLED=1`.
29
+
3
30
  ## [5.9.31] — 2026-09-12
4
31
 
5
32
  *Patch release correcting MCP/CLI telemetry outcomes and the telemetry schema.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.31
3
+ Version: 5.9.33
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.31-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.33-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.31 — and, on a build that has aged,
293
+ ask version # ask 5.9.33 — 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.31-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.33-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.31 — and, on a build that has aged,
244
+ ask version # ask 5.9.33 — and, on a build that has aged,
245
245
  # how many releases have probably shipped since
246
246
  ```
247
247
 
@@ -0,0 +1,85 @@
1
+ # Spec: ASK update notifications and opt-in self-update
2
+
3
+ ## Objective
4
+
5
+ Informar de forma no intrusiva cuando existe una versión más reciente de ASK y
6
+ permitir actualizarla únicamente tras una confirmación explícita. El mismo estado
7
+ debe estar disponible para un agente MCP sin identificar al usuario ni bloquear un
8
+ análisis normal.
9
+
10
+ ## Commands and interfaces
11
+
12
+ ```text
13
+ ask update --check # consulta y muestra la versión disponible; no instala
14
+ ask update # consulta; pide confirmación en TTY; instala solo con sí
15
+ ask update --yes # instala tras la intención explícita del operador
16
+ MCP check_for_updates() # respuesta estructurada, sin instalar
17
+ MCP update_ask(confirm) # confirm=false informa; confirm=true instala
18
+ ```
19
+
20
+ La comprobación automática, si se habilita más adelante, tendrá como máximo una
21
+ consulta cacheada al día y nunca se ejecutará durante un comando de análisis.
22
+
23
+ ## Project structure
24
+
25
+ - `src/sourcecode/update.py` — consulta, comparación, caché y actualización.
26
+ - `src/sourcecode/cli.py` — comandos y confirmación TTY.
27
+ - `src/sourcecode/mcp/server.py` — herramientas MCP estructuradas.
28
+ - `tests/test_update.py` — red, caché, comparación, confirmación e instalación.
29
+ - `docs/update.md` — comportamiento, permisos y recuperación.
30
+
31
+ ## Safety and behavior
32
+
33
+ - Consultar únicamente el endpoint oficial HTTPS de PyPI:
34
+ `https://pypi.org/pypi/sourcecode/json`, y aceptar respuestas JSON con versión
35
+ semántica válida.
36
+ - No ejecutar código descargado directamente: delegar en
37
+ `sys.executable -m pip install --upgrade sourcecode`.
38
+ - Mostrar versión actual, versión objetivo, intérprete y comando antes de instalar.
39
+ - No actualizar si el entorno es CI, pytest, desarrollo editable o si
40
+ `SOURCECODE_TELEMETRY_CONTEXT` no es `production`.
41
+ - No usar `sudo`, no modificar archivos del proyecto y no enviar credenciales.
42
+ - Timeout corto, errores silenciosos en la comprobación y errores explícitos en una
43
+ actualización solicitada.
44
+ - Una sola actualización por entorno a la vez, validación de la distribución
45
+ instalada y recuperación al intentar restaurar la versión anterior si pip falla.
46
+ - `--yes` solo evita la pregunta; no convierte una comprobación en actualización.
47
+ - Tras instalar, verificar que la versión cargada coincide con la objetivo y sugerir
48
+ reiniciar procesos MCP persistentes.
49
+
50
+ ## Testing strategy
51
+
52
+ - Respuestas inválidas, timeout y versiones iguales/no válidas.
53
+ - Caché diaria y ausencia de red en CI/tests.
54
+ - Confirmación no interactiva sin `--yes` no instala.
55
+ - `--yes` ejecuta exactamente el intérprete actual y el paquete `sourcecode`.
56
+ - MCP nunca instala con `confirm=false` y devuelve resultado estructurado.
57
+ - Nunca se muestran ni transmiten rutas, tokens o datos del usuario.
58
+
59
+ ## Boundaries
60
+
61
+ - Always: pedir consentimiento antes de instalar, usar el intérprete actual y
62
+ verificar el resultado.
63
+ - Ask first: activar comprobación automática al inicio de comandos de análisis;
64
+ cambiar el paquete o índice consultado.
65
+ - Never: autoactualizar sin consentimiento, usar `sudo`, ejecutar scripts remotos o
66
+ actualizar un proceso MCP en caliente.
67
+ - `SOURCECODE_UPDATE_DISABLED=1` desactiva tanto las comprobaciones como las
68
+ instalaciones solicitadas (útil para políticas corporativas).
69
+
70
+ ## Success criteria
71
+
72
+ 1. Un usuario puede conocer la última versión con `ask update --check`.
73
+ 2. `ask update` ofrece actualizar y solo instala tras “sí”.
74
+ 3. Un agente puede consultar el estado mediante MCP y solicitar la actualización
75
+ con `confirm=true`.
76
+ 4. CI/tests/desarrollo no generan consultas ni instalaciones.
77
+ 5. Los tests cubren todos los casos de seguridad anteriores.
78
+
79
+ ## Open questions
80
+
81
+ - ¿Debe la notificación automática aparecer al inicio de todos los comandos o solo
82
+ en `ask version`/`ask update`? Esta especificación propone no interrumpir análisis
83
+ hasta obtener una decisión explícita.
84
+ - PyPI oficial es el único índice soportado inicialmente. Un índice alternativo
85
+ requerirá una especificación y decisión separadas.
@@ -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.31
282
+ # ask 5.9.33
283
283
  ```
284
284
 
285
285
  Requires Python 3.9+.
@@ -0,0 +1,107 @@
1
+ # Auditoría intensiva del camino crítico de ASK (2026-09-15)
2
+
3
+ ## Repositorios y ground truth
4
+
5
+ | Repo | SHA auditado | Características |
6
+ |---|---|---|
7
+ | `testing/fullstack-app/spring-boot-server` | `de63350a76b0ad272b43a17d6aa071e5585b904c` | 6 Java, Spring Boot 3.1, Maven, REST/JPA; checkout padre Git |
8
+ | `spring-projects/spring-petclinic` | `818c4136ea971c21674525f9053de0d9c7ad8cfe` | 50 Java, Spring Boot 4.1, Maven/Gradle, MVC/Thymeleaf/JPA |
9
+ | `apache/kafka` | `3eb0b8c1b27d10084a6fee3b787616ddc06bcedc` | 6,188 Java, Gradle, multimódulo, Scala, JAX-RS/Trogdor |
10
+ | `micronaut-projects/micronaut-core` | `09c62d0ed1a51703dab798867218a9a116192ca7` | 5,378 Java, Gradle, JVM/Micronaut, Java/Kotlin/Groovy |
11
+
12
+ Los tres últimos fueron clones shallow de GitHub sin modificar sus fuentes; Kafka y
13
+ Micronaut se usaron para estresar tamaño y arquitectura. El checkout local contiene
14
+ archivos no versionados del entorno (`.ade`, `memory-bank`, `testdb.mv.db`), que ASK
15
+ reporta honestamente como estado Git sucio.
16
+
17
+ ## Alcance y matriz ejecutada
18
+
19
+ Se inspeccionaron CLI, `prepare-context`, parser/IR, serializadores `compact` y
20
+ `agent`, Git, caché, MCP, contratos de salida y tests. Para cada repo se ejecutaron
21
+ las salidas compacta y agent, endpoints cuando aplicaba, tres análisis repetidos,
22
+ frío/cálido, y un ciclo modificar → analizar → revertir → analizar. También se
23
+ probaron repositorio vacío, POM roto, Java inválido, Unicode y symlink.
24
+
25
+ Ground truth independiente: conteo `find`, lectura directa de controladores,
26
+ `ripgrep` de anotaciones, `git log/diff/status`, manifests y SHAs. En el servidor
27
+ local ASK encontró exactamente los 7 mappings REST reales. En Petclinic encontró
28
+ 17 rutas; la inspección de controladores confirma 17 mappings literales. Kafka
29
+ expone 44 rutas JAX-RS en Trogdor, que ASK enumera como 44.
30
+
31
+ ## Rendimiento observado
32
+
33
+ Medianas aproximadas de cuatro ejecuciones de `ask <repo> --compact --format json`
34
+ (primera fría, tres posteriores cálidas; macOS/Python 3.14, caché local):
35
+
36
+ | Repo | Java | Frío | Cálido (mediana) | Compact bytes | Agent bytes |
37
+ |---|---:|---:|---:|---:|---:|
38
+ | server local | 6 | 0.57 s | 0.40 s | 8,603 | 12,288 |
39
+ | Petclinic | 50 | 0.67 s | 0.40 s | 11,661 | 26,778 |
40
+ | Kafka | 6,188 | 6.02 s | 0.46 s | 14,332 | 39,329 |
41
+ | Micronaut | 5,378 | 4.13 s | 0.56 s | 15,096 | 25,120 |
42
+
43
+ No es una baseline de memoria ni de otras plataformas. El principal coste frío es
44
+ el escaneo/parsing inicial; la caché reduce el coste posterior de forma material.
45
+
46
+ ## Findings
47
+
48
+ | ID / severidad / estado | Reproducción y evidencia | Impacto / decisión |
49
+ |---|---|---|
50
+ | CORE-001 / HIGH / CONFIRMED | `ask analyze --since HEAD` no es una invocación válida; `--since` existe en `prepare-context delta`. | La documentación de la tarea usa un nombre conceptual distinto al contrato CLI real. No se cambia retrospectivamente: usar `ask prepare-context delta <repo> --since REF`; añadir alias sería una decisión de API separada. |
51
+ | CORE-002 / MEDIUM / CONFIRMED | `prepare-context delta --since HEAD` publica `git diff --name-only HEAD HEAD` e `includes_uncommitted=false`; una modificación sin commit produce `no_changes`. | Correcto para comparación de refs, peligroso si el agente cree que incluye working tree. El payload lo declara; el bucle de cambios locales debe usar la ruta de análisis con `--git-context`/changed-only. |
52
+ | CORE-003 / MEDIUM / CONFIRMED LIMITATION | Micronaut: 87 controladores aparecen en el inventario, pero `endpoints` devuelve 0 y `coverage.gaps` declara `micronaut: 87 controllers`. | No es un falso cero oculto: la limitación está explícita. ASK no debe usarse como inventario HTTP Micronaut hasta añadir extractor específico. |
53
+ | CORE-004 / LOW / CONFIRMED LIMITATION | Arquitectura de Kafka/Micronaut infiere capas por directorios y emite limitaciones de baja confianza/refutación. | El resultado no presenta la inferencia como certeza y conserva `confidence`/`limitations`. No corregir con heurísticas por repo. |
54
+ | CORE-005 / LOW / CONFIRMED | En el checkout local, archivos no versionados del entorno entran en `uncommitted_files` y hotspots no distinguen intención humana. | Es fiel a Git y no altera la semántica; consumidores deben leer `tree_state` y `scope`. |
55
+ | CORE-006 / LOW / NOT-REPRODUCED | Tres ejecuciones idénticas de Petclinic producen el mismo hash semántico tras quitar clocks/cache metadata. | No hay defecto de determinismo en la muestra. |
56
+
57
+ No se encontraron defectos CRITICAL/HIGH de corrección en las rutas ejecutadas
58
+ fuera de la incompatibilidad de nombre `analyze --since`. No se modificó código de
59
+ análisis porque las limitaciones observadas ya se publican de manera inequívoca.
60
+
61
+ ## CLI, MCP, compact y agent
62
+
63
+ `get_agent_context` MCP y `ask <repo> --agent` devolvieron el mismo proyecto,
64
+ frameworks, entry points y señales para Petclinic. MCP añade la envoltura
65
+ `success/data/error`, conservando el contrato interno. Las llamadas consecutivas
66
+ comparten la misma caché y el mismo scope; los errores se estructuran sin traceback.
67
+
68
+ `--compact` cambia la forma y elimina detalle, pero conserva identidad de proyecto,
69
+ entry points, dependencias, confianza y gaps. No se observaron cifras materiales
70
+ contradictorias respecto a `--agent`; los bytes muestran una reducción clara en
71
+ repos pequeños y grandes. La salida agent puede ser 1.7–2.7× mayor que compacta,
72
+ porque incorpora señales y razones útiles para decisiones del modelo.
73
+
74
+ ## Caché e incrementalidad
75
+
76
+ La clave incorpora SHA, estado dirty y fingerprint del analizador. En Petclinic:
77
+
78
+ ```text
79
+ cold served_from_cache=false, fresh
80
+ repetido served_from_cache=true, L2_view
81
+ modificar served_from_cache=false, fresh, tree=<sha>+dirty:<hash>
82
+ revertir served_from_cache=true, L2_view
83
+ ```
84
+
85
+ No se observó stale-cache, símbolo fantasma ni duplicación en este ciclo. `--since`
86
+ debe interpretarse como comparación de commits/ref; no sustituye la detección de
87
+ cambios no committeados.
88
+
89
+ ## Robustez y seguridad
90
+
91
+ Repos vacío, POM roto, Java sintácticamente inválido, Unicode y symlink terminaron
92
+ con JSON válido y `rc=0` con gaps/confianza, sin traceback. No se escribieron los
93
+ repositorios auditados. Los límites de salida publican `answer_bounds`; las
94
+ superficies no soportadas se enumeran en `non_coverage`/`coverage.gaps`.
95
+
96
+ ## Veredicto
97
+
98
+ 1. `ask <repo> --agent` es suficientemente fiable para comprensión continua de repos Java/Spring muestreados, siempre leyendo confianza y gaps.
99
+ 2. `prepare-context delta --since REF` es fiable para deltas entre refs; no debe tratarse como working-tree delta cuando REF es `HEAD`.
100
+ 3. `--compact` conserva hechos centrales y reduce materialmente el output.
101
+ 4. `--agent` es claro y estable para un LLM, con límites explícitos.
102
+ 5. CLI y MCP son semánticamente equivalentes en la muestra; MCP añade envoltura y límites propios.
103
+ 6. No se confirmó stale-cache; la invalidación por estado dirty funcionó.
104
+ 7. El cuello de botella principal es el primer escaneo/parsing frío de repos grandes.
105
+ 8. El principal riesgo de corrección es interpretar como completa una superficie que ASK declara fuera de cobertura (Micronaut HTTP, servlets y DSLs no soportados).
106
+ 9. La siguiente inversión base debería ser un contrato incremental unificado que nombre explícitamente `ref delta` frente a `working-tree delta`, seguido de extractor Micronaut si ese stack es prioritario.
107
+ 10. Confiaría en ASK para estructura, dependencias, mappings soportados, cambios Git entre refs y contexto agent; no lo usaría como única fuente de verdad para reflexión, proxies runtime o endpoints de frameworks declarados en `coverage.gaps`.
@@ -0,0 +1,50 @@
1
+ # Auditoría de telemetría ASK — diagnóstico previo (2026-09-15)
2
+
3
+ Diagnóstico escrito antes de modificar productores, receptor o tests. Revisión local;
4
+ no se ha accedido a la base de producción ni a los logs de Actions. Los números
5
+ históricos son evidencia aportada por el solicitante, no mediciones verificadas aquí.
6
+
7
+ ## Mapa
8
+
9
+ CLI `cli.py:_get_command_with_preprocessing/_cmd_main` → `telemetry.record`
10
+ → `TelemetryEvent` → `filters.sanitize` → `transport.send` (hilo daemon por evento,
11
+ sin cola persistente/reintentos) → HTTPS Supabase `functions/telemetry/index.ts`
12
+ → INSERT `public.telemetry_events` → `sql/telemetry_events.sql` (retención 90 días).
13
+
14
+ MCP `server.py:FastMCP.Tool.run` → herramienta → `runner.run_command/CliRunner`
15
+ → wrapper CLI anterior; además `_record_tool_invocation` emite `mcp_tool_invoked`.
16
+ Licensing `license.py:_emit_telemetry` → activation / gate_blocked → mismo recorder.
17
+ `cli.py:telemetry_enable` emite telemetry_enabled. No productor actual de
18
+ command_executed, execution_failed ni telemetry_disabled. El receptor convierte
19
+ nombres desconocidos a command_executed.
20
+
21
+ ## Hallazgos
22
+
23
+ | Finding / estado | Evidence | Root cause | Impact on analytics | Severity | Proposed fix |
24
+ |---|---|---|---|---|---|
25
+ | CONFIRMED: tests/CI pueden enviar a producción | config.is_enabled devuelve True en CI; test_telemetry_on_by_default_in_ci lo exige; conftest no aísla red; workflows Windows ejecutan pytest/CLI sin exclusión | default-on sin detección ni defensa en transporte | tests cuentan como instalaciones/ejecuciones | P0 | contexto runtime, bloqueo de red sintética, env global suite/workflows |
26
+ | HIGH-CONFIDENCE: ráfagas Windows compatibles con batería | windows-battery ejecuta pytest en runner efímero, varios procesos xdist; endpoint por defecto real | HOME del runner nuevo + UUID por configuración | adquisición inflada | P0 | excluir CI antes de crear ID; no atribuir filas concretas sin logs |
27
+ | CONFIRMED: carrera creando ID | config.get_install_id lee JSON, escribe sin lock, devuelve UUID propio aunque otro proceso haya sobrescrito | read-modify-write no atómico; _save trunca config | múltiples IDs / corrupción | P0 | identidad independiente publicada atómicamente; migrar UUID legado |
28
+ | CONFIRMED: NULL intencional por fallo de persistencia | get_install_id devuelve cadena vacía; sanitize omite install; receptor uuid devuelve null | degradación deliberada a evento sin identidad | días con eventos y cero instalaciones | P0 | no enviar si identidad estable no disponible; validar v2 en receptor |
29
+ | NOT-REPRODUCED: actualizar versión regenera ID | ruta fija ~/.config/sourcecode/config.json, no usa versión/venv | no hay ruta de actualización que regenere | no atribuir rotación a pip sin pruebas | P0 | test de actualización; documentar HOME/volúmenes/config compartidos |
30
+ | CONFIRMED histórico: éxito marcado false | git show 129fd04^:cli.py captura BaseException incluyendo SystemExit(0); investigación 2026-09-11 reproduce MCP | Click termina con SystemExit incluso con éxito | tasa de éxito histórica inválida | P0 | conservar fix 129fd04; versionar contrato; no reparar filas por suposición |
31
+ | CONFIRMED: failed=0 pese a errores | _cmd_main siempre emite execution_completed; ningún productor execution_failed | evento terminal único sin resultado tipado | errores/negativos/excepciones mezclados | P0 | outcome explícito, inicio correlacionado, failed para error real detectado |
32
+ | CONFIRMED: MCP doble dimensión sin correlación | Tool.run emite y CliRunner emite; session global de 8 hex por proceso | sumar eventos duplica acciones; sesión no es llamada ni usuario | engagement inflado | P1 | UUID ejecución, parent, interface mcp; separar herramientas y comandos |
33
+ | CONFIRMED: sesión por proceso importado | telemetry._SESSION inicializado al importar | 32 bits y herencia por fork | colisiones y sesiones indistinguibles | P1 | 128 bits, renovar por PID; documentar proceso MCP persistente |
34
+ | CONFIRMED: licensing ya separado por evento | activate_license emite activation InvalidLicense; gates emiten gate_blocked | agregación success/error_kind sin event mezcla dominios | atribuir incapacidad/churn sin evidencia | P1 | outcome de dominio y excluir licensing de errores de ejecución |
35
+ | CONFIRMED: flags usa allowlist | filters._SAFE_FLAGS y receptor FLAGS descartan valores | protección existente adecuada; comando buscado entre todos los tokens puede tomar un valor como comando | privacidad preservada para flags, dimensión comando incorrecta | P1 | mantener allowlist, usar contexto Click para comando; capacidades semánticas |
36
+ | CONFIRMED: falta versión de schema | v es versión producto; schema sin campo de contrato | cambios de significado no distinguibles | mezcla de generaciones | P1 | schema_version 2, filas anteriores legacy/unknown |
37
+ | CONFIRMED: pérdidas no medibles | transporte daemon sin flush/retry; rate limit 120/min por IP | salida rápida, red, NAT y límites descartan eventos | conteos observados son incompletos | P1 | flush acotado, documentar límite y no inferir crash de inicio huérfano |
38
+ | SUSPECTED: receptor remoto antiguo | investigación previa documenta coerción de mcp_tool_invoked y falta de tool en esquema antiguo | despliegue posiblemente desincronizado | MCP perdido o inserts fallidos | P1 | migración antes de receptor, no afirmar estado remoto |
39
+
40
+ ## Identidad y límites de atribución
41
+
42
+ La identidad actual pertenece a la configuración del HOME, no al paquete instalado.
43
+ CLI y MCP usan el mismo módulo en el mismo proceso/HOME. pip/pipx/venv no intervienen;
44
+ HOME temporal, borrado de configuración o contenedor sin volumen sí cambian identidad.
45
+ Copiar un HOME/imagen con ID fusiona instalaciones. No hay prueba de qué UUID histórico
46
+ creó qué job. Tests que parchean _CONFIG_FILE generan UUID en tmp_path; otros CLI tests
47
+ usan directamente el HOME del runner. No se han visto fixtures que envíen UUID fijados.
48
+
49
+ No deducir humano/bot del uso MCP ni del volumen. Contexto production significa
50
+ «sin señales sintéticas detectadas», nunca prueba de persona externa.
@@ -63,7 +63,12 @@ When telemetry is enabled, these fields are sent per command invocation:
63
63
  | `success` | `true` | Whether the command succeeded |
64
64
  | `error_kind` | `FileNotFoundError` | Exception class name only, no message |
65
65
  | `tool` | `get_compact_context` | MCP tool name only, on `mcp_tool_invoked` events (see below) |
66
- | `session` | `a3f2c1b0` | 8-char random hex, ephemeral, never persisted |
66
+ | `session` | `7f…` | 32-char random hex, process-scoped and never persisted |
67
+ | `schema_version` | `2` | Telemetry contract version, distinct from ASK `v` |
68
+ | `telemetry_context` | `production` | Runtime origin; `test`, `ci`, and `development` are suppressed |
69
+ | `interface` | `cli` / `mcp` | Invocation surface, never a person identifier |
70
+ | `outcome` | `succeeded` | `started`, `succeeded`, `negative`, `expected_error`, `internal_error`, or `cancelled` |
71
+ | `execution_id` | UUID | Per invocation correlation token; `parent_execution_id` links nested MCP CLI calls |
67
72
 
68
73
  ### Interpreting execution outcomes
69
74
 
@@ -105,7 +110,7 @@ File counts are converted to anonymous ranges before sending:
105
110
 
106
111
  ### Session identifier
107
112
 
108
- The `session` field is an 8-character random hex string generated fresh each time `sourcecode` runs. It is:
113
+ The `session` field is a 32-character random hex string generated fresh for each process (and refreshed after a fork). It is:
109
114
  - **Never persisted** to disk
110
115
  - **Never reused** across invocations
111
116
  - Only useful for correlating multiple events within a single run (e.g., start + completion)
@@ -193,12 +198,22 @@ The first time you run `ask` interactively (not in CI, not piped), you are shown
193
198
 
194
199
  ---
195
200
 
196
- ## CI environments
201
+ ## CI, tests, and development environments
197
202
 
198
- Telemetry remains on in CI unless `SOURCECODE_TELEMETRY=0` or `DO_NOT_TRACK=1` is set. CI is detected only to skip the first-run notice, which has no terminal to appear on:
203
+ Production telemetry is suppressed whenever a standard CI marker (`CI`, `GITHUB_ACTIONS`, and similar), pytest, or an explicit `SOURCECODE_TELEMETRY_CONTEXT` of `test`, `ci`, or `development` is present. This happens before an install ID is created and before the transport opens a connection. A deliberate production deployment must run outside these markers; `SOURCECODE_TELEMETRY=1` cannot override the origin guard. The first-run notice is also skipped:
199
204
 
200
205
  `CI`, `CONTINUOUS_INTEGRATION`, `GITHUB_ACTIONS`, `CIRCLECI`, `TRAVIS`, `JENKINS_URL`, `BUILDKITE`, `GITLAB_CI`, `TF_BUILD`, `TEAMCITY_VERSION`, `DRONE`, `SEMAPHORE`
201
206
 
207
+ ## Contract and analytics limits
208
+
209
+ Schema 2 is the population used by the product queries. Legacy rows remain
210
+ queryable with unknown origin/outcome and are never retroactively relabelled.
211
+ `install_id` identifies a persisted ASK configuration, not a person: cloned homes
212
+ merge installations and deleted or ephemeral homes create new ones. Counts are
213
+ observed installations and lower bounds on activity, not a count of real users.
214
+ MCP intensity is agentic usage evidence, never evidence that a human or bot initiated
215
+ it. See [telemetry_product_metrics.sql](../supabase/sql/telemetry_product_metrics.sql).
216
+
202
217
  ---
203
218
 
204
219
  ## Open source auditability
@@ -0,0 +1,22 @@
1
+ # ASK updates
2
+
3
+ `ask update --check` consults the official PyPI JSON endpoint and reports the
4
+ installed and latest versions. Results are cached for 24 hours. A normal
5
+ `ask update` asks for confirmation in an interactive terminal; `ask update --yes`
6
+ is the explicit non-interactive form.
7
+
8
+ The installer runs `sys.executable -m pip install --upgrade sourcecode`, so the
9
+ same Python environment that launched ASK is updated. It never uses `sudo`, runs
10
+ remote scripts, or changes the repository. Persistent MCP servers must be
11
+ restarted after an update.
12
+
13
+ Checks and installations are suppressed in CI, pytest, editable development
14
+ checkouts, and other non-production telemetry contexts. Network failures leave
15
+ ASK unchanged. The MCP equivalents are `check_for_updates()` and
16
+ `update_ask(confirm=true)`; `confirm=false` only checks status.
17
+
18
+ Only one update may run for an environment at a time. After pip returns, ASK
19
+ verifies the installed distribution metadata. If installation fails, it attempts
20
+ to restore the previously installed version and reports whether restoration
21
+ succeeded. Set `SOURCECODE_UPDATE_DISABLED=1` to disable update checks and
22
+ installation for managed environments.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.9.31"
7
+ version = "5.9.33"
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.31"
7
+ __version__ = "5.9.33"