sourcecode 5.9.14__tar.gz → 5.9.16__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 (455) hide show
  1. {sourcecode-5.9.14 → sourcecode-5.9.16}/.github/workflows/windows-regression.yml +2 -1
  2. {sourcecode-5.9.14 → sourcecode-5.9.16}/CHANGELOG.md +28 -0
  3. {sourcecode-5.9.14 → sourcecode-5.9.16}/CODE_OF_CONDUCT.md +0 -1
  4. {sourcecode-5.9.14 → sourcecode-5.9.16}/PKG-INFO +5 -5
  5. {sourcecode-5.9.14 → sourcecode-5.9.16}/README.md +4 -4
  6. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +3 -3
  7. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +2 -2
  8. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +2 -2
  9. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +8 -8
  10. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +2 -2
  11. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +2 -2
  12. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +2 -2
  13. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +2 -2
  14. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +6 -6
  15. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +2 -2
  16. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +2 -3
  17. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -1
  18. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/RELEASE-CHECKLIST.md +7 -0
  19. sourcecode-5.9.16/docs/RELEASE-VERIFICATION.md +102 -0
  20. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/USER_GUIDE.md +4 -4
  21. {sourcecode-5.9.14 → sourcecode-5.9.16}/pyproject.toml +1 -1
  22. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/perf_gate.py +10 -0
  23. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/perf_harness.py +9 -1
  24. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/__init__.py +1 -1
  25. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cache.py +39 -3
  26. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cli.py +89 -19
  27. sourcecode-5.9.16/src/sourcecode/click_runtime.py +61 -0
  28. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/envelope.py +1 -1
  29. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/git_checkout.py +1 -1
  30. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/manifest_cache.py +11 -1
  31. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/registry.py +4 -2
  32. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/output_ceiling.py +2 -5
  33. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/packs.py +36 -5
  34. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/parallel.py +86 -32
  35. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/release_info.py +9 -11
  36. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/ris.py +9 -0
  37. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/serializer.py +49 -1
  38. {sourcecode-5.9.14 → sourcecode-5.9.16}/.github/workflows/build-windows.yml +0 -0
  39. {sourcecode-5.9.14 → sourcecode-5.9.16}/.github/workflows/perf-gate.yml +0 -0
  40. {sourcecode-5.9.14 → sourcecode-5.9.16}/.github/workflows/windows-battery.yml +0 -0
  41. {sourcecode-5.9.14 → sourcecode-5.9.16}/.gitignore +0 -0
  42. {sourcecode-5.9.14 → sourcecode-5.9.16}/.ruff.toml +0 -0
  43. {sourcecode-5.9.14 → sourcecode-5.9.16}/CLAUDE.md +0 -0
  44. {sourcecode-5.9.14 → sourcecode-5.9.16}/CONTRIBUTING.md +0 -0
  45. {sourcecode-5.9.14 → sourcecode-5.9.16}/LICENSE +0 -0
  46. {sourcecode-5.9.14 → sourcecode-5.9.16}/NOTICE +0 -0
  47. {sourcecode-5.9.14 → sourcecode-5.9.16}/SECURITY.md +0 -0
  48. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  49. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  50. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  51. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  52. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  53. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  54. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  55. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  56. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/CACHE.md +0 -0
  57. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/COMMERCIAL-OFFER.md +0 -0
  58. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/CUSTOMER-VALIDATION.md +0 -0
  59. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/DEFECT-LEDGER.md +0 -0
  60. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/DEMO-5MIN.md +0 -0
  61. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/DEVELOPMENT-ROADMAP.md +0 -0
  62. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/EXECUTION-PLAN-12MO.md +0 -0
  63. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/EXECUTIVE-ROADMAP.md +0 -0
  64. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/MANUAL-USUARIO.md +0 -0
  65. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/MODERNIZATION.md +0 -0
  66. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/PRODUCT-ROUTE.md +0 -0
  67. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/PRODUCT_AUDIT.md +0 -0
  68. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/PRODUCT_IDENTITY.md +0 -0
  69. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/PRODUCT_TIERS.md +0 -0
  70. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/RC1-CHECKLIST.md +0 -0
  71. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  72. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  73. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  74. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-assessment-report.md +0 -0
  75. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  76. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  77. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  78. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  79. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  80. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  81. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  82. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  83. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  84. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  85. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  86. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  87. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  88. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  89. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  90. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  91. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  92. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  93. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  94. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  95. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  96. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  97. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0006-performance-harness.md +0 -0
  98. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  99. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  100. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/consumer-disposition-inventory.md +0 -0
  101. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/overview.md +0 -0
  102. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/product-architecture-review.md +0 -0
  103. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/product-strategy-layering.md +0 -0
  104. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  105. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/architecture/semantic-ir-roadmap.md +0 -0
  106. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/baseline-ci.yml +0 -0
  107. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/commercial-pipeline-audit.md +0 -0
  108. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/contracts-ci.yml +0 -0
  109. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/contracts.md +0 -0
  110. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  111. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  112. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  113. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  114. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  115. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  116. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  117. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  118. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/licensing-schema.md +0 -0
  119. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/migrate-check.md +0 -0
  120. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/pack-gate-github-actions.yml +0 -0
  121. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/pack-gate-gitlab.yml +0 -0
  122. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/README.md +0 -0
  123. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/REGRESSION-GATE.md +0 -0
  124. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  125. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  126. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  127. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  128. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  129. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  130. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  131. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  132. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  133. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  134. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  135. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  136. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  137. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  138. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  139. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  140. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  141. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  142. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  143. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  144. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  145. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  146. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  147. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  148. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  149. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  150. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  151. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  152. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  153. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  154. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  155. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  156. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  157. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  158. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  159. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  160. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  161. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  162. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  163. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  164. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  165. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  166. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/README.md +0 -0
  167. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  168. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  169. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  170. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  171. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  172. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  173. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/baselines/reference-best/README.md +0 -0
  174. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  175. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/posture.md +0 -0
  176. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/privacy.md +0 -0
  177. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/pro-experience-audit.md +0 -0
  178. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/schema.md +0 -0
  179. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/spec/envelope-v1.md +0 -0
  180. {sourcecode-5.9.14 → sourcecode-5.9.16}/docs/spring-audit-ci.yml +0 -0
  181. {sourcecode-5.9.14 → sourcecode-5.9.16}/hatch_build.py +0 -0
  182. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/compare_integration_engines.py +0 -0
  183. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/context_cost_harness.py +0 -0
  184. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/customer_smoke_test.sh +0 -0
  185. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/generate_jdk_exports.py +0 -0
  186. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/sync_gate_anchors.py +0 -0
  187. {sourcecode-5.9.14 → sourcecode-5.9.16}/scripts/test_fast.sh +0 -0
  188. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/__main__.py +0 -0
  189. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/access_drift.py +0 -0
  190. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/adaptive_scanner.py +0 -0
  191. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/analysis_budget.py +0 -0
  192. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/answer_bounds.py +0 -0
  193. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/archetype.py +0 -0
  194. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/architectural_baseline.py +0 -0
  195. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/architectural_delta.py +0 -0
  196. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/architecture_analyzer.py +0 -0
  197. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/architecture_summary.py +0 -0
  198. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/ast_extractor.py +0 -0
  199. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/audit_clusters.py +0 -0
  200. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/audit_recipe.py +0 -0
  201. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/audit_report.py +0 -0
  202. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/audit_since.py +0 -0
  203. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/audit_verify.py +0 -0
  204. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/baseline_attestation.py +0 -0
  205. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/baseline_autocapture.py +0 -0
  206. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/breaking_changes.py +0 -0
  207. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/build_modules.py +0 -0
  208. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/build_stamp.py +0 -0
  209. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/bundled_docs.py +0 -0
  210. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/c4_render.py +0 -0
  211. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cache_model.py +0 -0
  212. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cache_observation.py +0 -0
  213. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/call_surface.py +0 -0
  214. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/caller_metrics.py +0 -0
  215. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/caller_reach.py +0 -0
  216. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/canonical_ir.py +0 -0
  217. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/chain_rules.py +0 -0
  218. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/change_plan.py +0 -0
  219. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/ci_output.py +0 -0
  220. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cir_graphs.py +0 -0
  221. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/classifier.py +0 -0
  222. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/client_calls.py +0 -0
  223. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/code_notes_analyzer.py +0 -0
  224. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/compare.py +0 -0
  225. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/confidence_analyzer.py +0 -0
  226. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/constraint_diff.py +0 -0
  227. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/consumer_join.py +0 -0
  228. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/container_wiring.py +0 -0
  229. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/context_cache.py +0 -0
  230. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/context_graph.py +0 -0
  231. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/context_scorer.py +0 -0
  232. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/context_summarizer.py +0 -0
  233. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/contract_diff.py +0 -0
  234. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/contract_init.py +0 -0
  235. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/contract_model.py +0 -0
  236. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/contract_pipeline.py +0 -0
  237. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/coverage_parser.py +0 -0
  238. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cve_feed.py +0 -0
  239. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/cve_reachability.py +0 -0
  240. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/data_exposure.py +0 -0
  241. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/data_labels.py +0 -0
  242. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/declarations.py +0 -0
  243. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/defect_classes/__init__.py +0 -0
  244. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/defect_classes/registry.json +0 -0
  245. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/defect_identity.py +0 -0
  246. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/degradation.py +0 -0
  247. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/dependency_analyzer.py +0 -0
  248. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/deployment_prefix.py +0 -0
  249. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detach.py +0 -0
  250. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/__init__.py +0 -0
  251. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/base.py +0 -0
  252. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/csproj_parser.py +0 -0
  253. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/dart.py +0 -0
  254. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/dotnet.py +0 -0
  255. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/elixir.py +0 -0
  256. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/go.py +0 -0
  257. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/heuristic.py +0 -0
  258. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/hybrid.py +0 -0
  259. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/java.py +0 -0
  260. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/jvm_ext.py +0 -0
  261. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/nodejs.py +0 -0
  262. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/parsers.py +0 -0
  263. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/php.py +0 -0
  264. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/project.py +0 -0
  265. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/python.py +0 -0
  266. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/ruby.py +0 -0
  267. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/rust.py +0 -0
  268. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/systems.py +0 -0
  269. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/terraform.py +0 -0
  270. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/detectors/tooling.py +0 -0
  271. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/doc_analyzer.py +0 -0
  272. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/dynamic_argument_surface.py +0 -0
  273. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/empty_reach.py +0 -0
  274. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/endpoint_disposition.py +0 -0
  275. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/endpoint_literals.py +0 -0
  276. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/endpoint_metrics.py +0 -0
  277. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/entrypoint_classifier.py +0 -0
  278. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/env_analyzer.py +0 -0
  279. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/environment_resolution.py +0 -0
  280. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/error_schema.py +0 -0
  281. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/evidence_provider.py +0 -0
  282. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/execution_plan.py +0 -0
  283. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/explain.py +0 -0
  284. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/explain_endpoint.py +0 -0
  285. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/facts/__init__.py +0 -0
  286. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/facts/registry.json +0 -0
  287. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/field_deprecations.py +0 -0
  288. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/file_chunker.py +0 -0
  289. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/file_classifier.py +0 -0
  290. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/filter_surface.py +0 -0
  291. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/findings_baseline.py +0 -0
  292. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/format_contract.py +0 -0
  293. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/fqn_utils.py +0 -0
  294. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/functional_routes.py +0 -0
  295. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/gate_anchors.py +0 -0
  296. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/git_analyzer.py +0 -0
  297. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/github_diff.py +0 -0
  298. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/graph_analyzer.py +0 -0
  299. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/graph_evidence.py +0 -0
  300. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/hibernate_strat.py +0 -0
  301. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/identity_fallback.py +0 -0
  302. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/integration_coordinates.py +0 -0
  303. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/intent_router.py +0 -0
  304. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/jdk_exports.py +0 -0
  305. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/license.py +0 -0
  306. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/__init__.py +0 -0
  307. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/dependency_import.py +0 -0
  308. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  309. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  310. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  311. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  312. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  313. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/orchestrator.py +0 -0
  314. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/runner.py +0 -0
  315. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp/server.py +0 -0
  316. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/mcp_nudge.py +0 -0
  317. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/metrics_analyzer.py +0 -0
  318. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/migrate_check.py +0 -0
  319. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/migration_apply.py +0 -0
  320. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/migration_blast.py +0 -0
  321. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/non_coverage.py +0 -0
  322. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/openapi_surface.py +0 -0
  323. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/openrewrite_recipe.py +0 -0
  324. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/output_bounds.py +0 -0
  325. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/output_budget.py +0 -0
  326. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/output_encoding.py +0 -0
  327. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/output_sink.py +0 -0
  328. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/pack_manifest.py +0 -0
  329. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/parse_cache.py +0 -0
  330. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/partial_contract.py +0 -0
  331. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/path_admission.py +0 -0
  332. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/path_display.py +0 -0
  333. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/path_filters.py +0 -0
  334. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/perf.py +0 -0
  335. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/phased_run.py +0 -0
  336. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/pipe_contract.py +0 -0
  337. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/posture.py +0 -0
  338. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/pr_comment_renderer.py +0 -0
  339. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/pr_impact.py +0 -0
  340. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/pr_risk.py +0 -0
  341. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/prepare_context.py +0 -0
  342. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/product_info.py +0 -0
  343. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/progress.py +0 -0
  344. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/provenance.py +0 -0
  345. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/ranking_engine.py +0 -0
  346. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/readiness_timeline.py +0 -0
  347. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/readonly.py +0 -0
  348. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/reconciliation.py +0 -0
  349. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/redactor.py +0 -0
  350. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/reference_facts.py +0 -0
  351. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/regress.py +0 -0
  352. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/regulatory_pack.py +0 -0
  353. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/relevance_scorer.py +0 -0
  354. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/remediation_diff.py +0 -0
  355. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/remediation_flow.py +0 -0
  356. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/remediation_report.py +0 -0
  357. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/remedies.py +0 -0
  358. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/rename_refactor.py +0 -0
  359. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/repo_classifier.py +0 -0
  360. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/repository_ir.py +0 -0
  361. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/resource_budget.py +0 -0
  362. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/__init__.py +0 -0
  363. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/context.py +0 -0
  364. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/errors.py +0 -0
  365. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/executor.py +0 -0
  366. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/planner.py +0 -0
  367. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/query.py +0 -0
  368. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/request.py +0 -0
  369. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/resolution.py +0 -0
  370. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/result.py +0 -0
  371. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/retriever.py +0 -0
  372. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/runtime.py +0 -0
  373. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps.py +0 -0
  374. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  375. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_graph.py +0 -0
  376. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_impact.py +0 -0
  377. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_intf.py +0 -0
  378. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_struct.py +0 -0
  379. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  380. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/risk.py +0 -0
  381. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/risk_model.py +0 -0
  382. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/rule_catalog.py +0 -0
  383. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/rule_pass.py +0 -0
  384. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/runs.py +0 -0
  385. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/runtime_classifier.py +0 -0
  386. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/sarif.py +0 -0
  387. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/sarif_emit.py +0 -0
  388. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/scanner.py +0 -0
  389. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schema.py +0 -0
  390. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schema_producers.py +0 -0
  391. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schema_registry.py +0 -0
  392. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  393. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  394. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  395. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  396. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  397. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  398. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  399. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/security_chain.py +0 -0
  400. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/security_config.py +0 -0
  401. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/security_config_scan.py +0 -0
  402. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/security_posture.py +0 -0
  403. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/selection_contract.py +0 -0
  404. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/self_audit.py +0 -0
  405. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/selftest.py +0 -0
  406. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/semantic_analyzer.py +0 -0
  407. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/semantic_impact_engine.py +0 -0
  408. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/semantic_integration_engine.py +0 -0
  409. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/semantic_services.py +0 -0
  410. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/servlet_surface.py +0 -0
  411. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/source_text.py +0 -0
  412. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_event_topology.py +0 -0
  413. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_findings.py +0 -0
  414. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_impact.py +0 -0
  415. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_model.py +0 -0
  416. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_profiles.py +0 -0
  417. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_properties.py +0 -0
  418. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_security_audit.py +0 -0
  419. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_semantic.py +0 -0
  420. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/spring_tx_analyzer.py +0 -0
  421. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/sql_taint.py +0 -0
  422. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/summarizer.py +0 -0
  423. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/target_admission.py +0 -0
  424. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/__init__.py +0 -0
  425. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/config.py +0 -0
  426. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/consent.py +0 -0
  427. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/events.py +0 -0
  428. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/filters.py +0 -0
  429. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/telemetry/transport.py +0 -0
  430. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/test_gap_ranking.py +0 -0
  431. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/test_sources.py +0 -0
  432. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/text_input.py +0 -0
  433. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/timeline.py +0 -0
  434. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/timeline_cache.py +0 -0
  435. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/token_estimate.py +0 -0
  436. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/tree_utils.py +0 -0
  437. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/type_usage_surface.py +0 -0
  438. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/validation_inference.py +0 -0
  439. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/validation_surface.py +0 -0
  440. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/verify_edit.py +0 -0
  441. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/verify_repo.py +0 -0
  442. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/verify_rules.py +0 -0
  443. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/version_check.py +0 -0
  444. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/vex.py +0 -0
  445. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/waivers.py +0 -0
  446. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/watch_loop.py +0 -0
  447. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/wired_surface.py +0 -0
  448. {sourcecode-5.9.14 → sourcecode-5.9.16}/src/sourcecode/workspace.py +0 -0
  449. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/functions/README.md +0 -0
  450. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/functions/get-license/index.ts +0 -0
  451. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  452. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/functions/telemetry/index.ts +0 -0
  453. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/sql/license_event_ordering.sql +0 -0
  454. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/sql/licensing_schema.sql +0 -0
  455. {sourcecode-5.9.14 → sourcecode-5.9.16}/supabase/sql/telemetry_events.sql +0 -0
@@ -35,7 +35,8 @@ jobs:
35
35
  python -m pytest -q -n 0 \
36
36
  tests/test_encoding_regression.py \
37
37
  tests/test_output_encoding.py \
38
- tests/test_path_prefix_selection.py
38
+ tests/test_path_prefix_selection.py \
39
+ tests/test_parallel_jobs.py
39
40
 
40
41
  - name: Prove Git Bash cannot turn a route filter into a clean zero
41
42
  shell: bash
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.16] — 2026-08-31
4
+
5
+ *Audit candidate following the 5.9.15 release recovery.*
6
+
7
+ ### Release Process
8
+
9
+ - Run a fresh external audit against the wheel built from this commit. Record
10
+ the wheel hash and stamped commit under `docs/RELEASE-VERIFICATION.md` before
11
+ uploading it to PyPI.
12
+
13
+ ## [5.9.15] — 2026-08-31
14
+
15
+ *Release recovery: restore the 5.9.14 implementation line before publishing a
16
+ corrected artefact.*
17
+
18
+ ### Fixed
19
+
20
+ - Restored `audit-verify`, `cve`, `drift`, `intent`, `pr-risk`, `remediate`,
21
+ `remediation-report`, `self-audit` and `watch`, with their implementations
22
+ and regression contracts.
23
+ - Restored the related Windows, output-delivery and input-admission hardening
24
+ from the recovery branch.
25
+
26
+ ### Release Process
27
+
28
+ - Publication is blocked until the wheel's stamped commit, installed command
29
+ surface and PyPI hashes pass `docs/RELEASE-VERIFICATION.md`.
30
+
3
31
  ## [5.9.14] — 2026-08-30
4
32
 
5
33
  *AUD-619 intake, Windows reliability follow-up and release alignment.*
@@ -24,4 +24,3 @@ other conduct that would be inappropriate in a professional setting is not accep
24
24
  Report unacceptable behaviour privately to the project maintainers. Maintainers will review
25
25
  reports promptly and may remove, edit, or reject contributions, or take other action needed to
26
26
  protect participants.
27
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.14
3
+ Version: 5.9.16
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.14-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.16-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
196
196
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
197
197
  unset, or set it to `0`, to disable the ceiling explicitly.
198
198
 
199
- **Current performance status.** Release 5.9.14 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.16 retains the shared Canonical IR
200
200
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
201
201
  runs; the no-label path remains parse-free. These are implementation properties,
202
202
  not duration promises. It also removes two repeated walks of the same file tree in
@@ -233,7 +233,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
233
233
  invalid input rather than treated as an empty repository. This prevents silent
234
234
  entitlement errors in CI and does not change per-repository gates or billing.
235
235
 
236
- Release 5.9.14 also carries the boundary-contract hardening: missing consumer repositories,
236
+ Release 5.9.16 also carries the boundary-contract hardening: missing consumer repositories,
237
237
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
238
238
  input errors; duplicate same-commit baselines are never overwritten. `posture
239
239
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -266,7 +266,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
266
266
  # pip / pipx
267
267
  pipx install sourcecode # or: pip install sourcecode
268
268
 
269
- ask version # ask 5.9.14 — and, on a build that has aged,
269
+ ask version # ask 5.9.16 — and, on a build that has aged,
270
270
  # how many releases have probably shipped since
271
271
  ```
272
272
 
@@ -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.14-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.16-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -147,7 +147,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
147
147
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
148
148
  unset, or set it to `0`, to disable the ceiling explicitly.
149
149
 
150
- **Current performance status.** Release 5.9.14 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.16 retains the shared Canonical IR
151
151
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
152
152
  runs; the no-label path remains parse-free. These are implementation properties,
153
153
  not duration promises. It also removes two repeated walks of the same file tree in
@@ -184,7 +184,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
184
184
  invalid input rather than treated as an empty repository. This prevents silent
185
185
  entitlement errors in CI and does not change per-repository gates or billing.
186
186
 
187
- Release 5.9.14 also carries the boundary-contract hardening: missing consumer repositories,
187
+ Release 5.9.16 also carries the boundary-contract hardening: missing consumer repositories,
188
188
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
189
189
  input errors; duplicate same-commit baselines are never overwritten. `posture
190
190
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -217,7 +217,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
217
217
  # pip / pipx
218
218
  pipx install sourcecode # or: pip install sourcecode
219
219
 
220
- ask version # ask 5.9.14 — and, on a build that has aged,
220
+ ask version # ask 5.9.16 — and, on a build that has aged,
221
221
  # how many releases have probably shipped since
222
222
  ```
223
223
 
@@ -1,8 +1,8 @@
1
1
  # Intake de hallazgos — corpus ampliado ASK 5.8.25
2
2
 
3
- **Fecha:** 2026-08-23
4
- **Build externo:** `5.8.25`, `b6e0e0f`
5
- **Fuente:** [`/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md`](/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md)
3
+ **Fecha:** 2026-08-23
4
+ **Build externo:** `5.8.25`, `b6e0e0f`
5
+ **Fuente:** [`/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md`](/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md)
6
6
  **Estado:** intake incorporado; sin correcciones de código en esta tarea.
7
7
 
8
8
  ## Criterio de triage
@@ -1,7 +1,7 @@
1
1
  # Auditoría externa de regresión — ASK Engine 5.8.25
2
2
 
3
- **Fecha de recepción:** 2026-08-23
4
- **Artefacto auditado:** ASK Engine `5.8.25`, build `b6e0e0f157687a962ce66627afe2e9b388fb2f06`
3
+ **Fecha de recepción:** 2026-08-23
4
+ **Artefacto auditado:** ASK Engine `5.8.25`, build `b6e0e0f157687a962ce66627afe2e9b388fb2f06`
5
5
  **Entornos:** Windows 11 Pro y reference corpus (`3dde0376`)
6
6
  **Alcance:** aproximadamente 180 invocaciones, 0 tracebacks, 0 escrituras observadas.
7
7
 
@@ -1,7 +1,7 @@
1
1
  # ASK Engine 5.8.26 - External Regression Audit Intake
2
2
 
3
- **Received:** 2026-08-23
4
- **Audited artefact:** `5.8.26`, build `e2da5d84a30bc2e8c60325e1e2d48a8d736b8ad7`
3
+ **Received:** 2026-08-23
4
+ **Audited artefact:** `5.8.26`, build `e2da5d84a30bc2e8c60325e1e2d48a8d736b8ad7`
5
5
  **Subject:** reference corpus, commit `3dde0376`, 3,342 Java files
6
6
  **Scope:** 35 read-only invocations, explicit output ceiling, no writes and no tracebacks.
7
7
 
@@ -1,8 +1,8 @@
1
1
  # ThingsBoard field audit findings — commercial value and product gaps
2
2
 
3
- **Date:** 2026-08-23
4
- **ASK:** 5.8.25 (`b6e0e0f157687a962ce66627afe2e9b388fb2f06`)
5
- **Subject:** ThingsBoard, `181ac1392b9728d3e2aed9cd698a246bf1de3de7`
3
+ **Date:** 2026-08-23
4
+ **ASK:** 5.8.25 (`b6e0e0f157687a962ce66627afe2e9b388fb2f06`)
5
+ **Subject:** ThingsBoard, `181ac1392b9728d3e2aed9cd698a246bf1de3de7`
6
6
  **Status:** five corrections implemented in the working tree; release/commit pending
7
7
 
8
8
  ## Implementation status
@@ -36,7 +36,7 @@ hours of manual work.
36
36
 
37
37
  ### AUD-THB-001 — Impact output has no explicit negative scope
38
38
 
39
- **Severity:** P1 product gap
39
+ **Severity:** P1 product gap
40
40
  **Observed:** `impact` and `impact-chain` produced large positive cones (528–556 related
41
41
  endpoints for several targets) but no explicit, evidence-backed `negative_scope` section.
42
42
  `UserController` provided a useful control case with 0 direct callers and 31 endpoints, but
@@ -62,7 +62,7 @@ branch in `in_scope`, the other in `out_of_scope`, and an unresolved reflective
62
62
 
63
63
  ### AUD-THB-002 — TX-006 overstates equivalent self-invocation cases
64
64
 
65
- **Severity:** P1 precision defect
65
+ **Severity:** P1 precision defect
66
66
  **Observed:** the Spring audit reported 18 defects, including many TX-006 findings where an
67
67
  annotated method calls another annotated method internally but both use the default transaction
68
68
  semantics. Manual review of `AssetProfileServiceImpl`, `DeviceServiceImpl` and
@@ -89,7 +89,7 @@ the same severity to semantically equivalent and materially different cases.
89
89
 
90
90
  ### AUD-THB-003 — `none_detected` is too easy to read as public exposure
91
91
 
92
- **Severity:** P1 communication/contract defect
92
+ **Severity:** P1 communication/contract defect
93
93
  **Observed:** the endpoint inventory reported 28 mappings as `none_detected`. Manual review
94
94
  showed static resources, redirects, no-auth routes, device-token routes, readiness and error
95
95
  handlers among the examples.
@@ -108,7 +108,7 @@ distinct states.
108
108
 
109
109
  ### AUD-THB-004 — Audit report does not carry evidence bounds consistently
110
110
 
111
- **Severity:** P1 evidence-contract gap
111
+ **Severity:** P1 evidence-contract gap
112
112
  **Observed:** component outputs exposed coverage gaps, while the generated `audit-report`
113
113
  section declared evidence completeness without explicit bounds. The report therefore looks
114
114
  more exhaustive than the underlying evidence supports.
@@ -133,7 +133,7 @@ verdict.
133
133
 
134
134
  ### AUD-THB-005 — Baseline summary mixes incompatible migration signals
135
135
 
136
- **Severity:** P2 presentation defect
136
+ **Severity:** P2 presentation defect
137
137
  **Observed:** the assessment combined `readiness 94`, `headline blocker jakarta_migration`
138
138
  and `migration blockers 0`.
139
139
 
@@ -1,7 +1,7 @@
1
1
  # ASK Engine 5.8.26 - External Audit Intake
2
2
 
3
- **Received:** 2026-08-26
4
- **Audited artefact:** `5.8.26`, Windows 11 / Git Bash (MSYS), Python 3.14
3
+ **Received:** 2026-08-26
4
+ **Audited artefact:** `5.8.26`, Windows 11 / Git Bash (MSYS), Python 3.14
5
5
  **Scope:** reference and multi-stack repositories; the report's second round tested 44/46 subcommands across Spring, Quarkus, Micronaut and Jakarta EE.
6
6
 
7
7
  This record separates the first round's initial diagnosis from the controlled retest. The
@@ -1,7 +1,7 @@
1
1
  # ASK Engine 5.8.27 - External Audit Intake
2
2
 
3
- **Received:** 2026-08-26
4
- **Audited artefact:** `5.8.27`, Windows 11, Git Bash/MSYS and native PowerShell
3
+ **Received:** 2026-08-26
4
+ **Audited artefact:** `5.8.27`, Windows 11, Git Bash/MSYS and native PowerShell
5
5
  **Comparison:** the prior `5.8.26` audit and the current release artefact
6
6
 
7
7
  This audit contains two assessments. The first confirms the semantic fixes; the
@@ -1,8 +1,8 @@
1
1
  # ASK Engine 5.8.28 - External Pack Audit Intake
2
2
 
3
- **Received:** 2026-08-26
3
+ **Received:** 2026-08-26
4
4
  **Audited surface:** `pack list`, `pack assessment` and `pack gate` on
5
- `spring-petclinic`
5
+ `spring-petclinic`
6
6
  **Related release:** `5.8.28` (remediation release: `5.8.30`)
7
7
 
8
8
  ## Findings
@@ -1,7 +1,7 @@
1
1
  # ASK Engine 5.8.28 - External Audit Intake
2
2
 
3
- **Received:** 2026-08-26
4
- **Audited artefact:** `5.8.28`, Windows 11, Git Bash/MSYS and native PowerShell
3
+ **Received:** 2026-08-26
4
+ **Audited artefact:** `5.8.28`, Windows 11, Git Bash/MSYS and native PowerShell
5
5
  **Comparison:** `5.8.27`
6
6
 
7
7
  ## Executive Summary
@@ -1,7 +1,7 @@
1
1
  # External Audit - 5.9.0
2
2
 
3
- **Received:** 2026-08-26
4
- **Audited revision:** `b4c3691c4110d863fedcd54a61a08fd2997e400c` (`5.9.0`)
3
+ **Received:** 2026-08-26
4
+ **Audited revision:** `b4c3691c4110d863fedcd54a61a08fd2997e400c` (`5.9.0`)
5
5
  **Method:** external findings reconciled against the released source tree
6
6
 
7
7
  ## Result
@@ -13,7 +13,7 @@ the result of source-level reconciliation and the action justified by it.
13
13
 
14
14
  ### AUD-608-C01 - `cve` does not disclose inventory coverage
15
15
 
16
- **Priority:** P1
16
+ **Priority:** P1
17
17
  **Status:** closed in `fe1f624`
18
18
 
19
19
  `ask cve` builds its inventory from static dependency analysis; it does not
@@ -28,7 +28,7 @@ resolved-graph mode; add manifest-versus-resolved fixtures.
28
28
 
29
29
  ### AUD-608-P01 - `pr-risk --since` hides an execution error as non-coverage
30
30
 
31
- **Priority:** P1
31
+ **Priority:** P1
32
32
  **Status:** closed in `b479465`
33
33
 
34
34
  The `--since` path uses `ContextGraph` without importing it. A broad exception
@@ -43,7 +43,7 @@ base-materialisation failures as structured errors; keep
43
43
 
44
44
  ### AUD-608-O01 - effective-access branches bypass `posture --diff --limit`
45
45
 
46
- **Priority:** P2
46
+ **Priority:** P2
47
47
  **Status:** closed in `5f8a50b`
48
48
 
49
49
  `POSTURE_BOUNDED_LISTS` omits `permit_all`, while the shared helper bounds only
@@ -59,7 +59,7 @@ the public CLI; verify emitted bytes and estimated size fall under `--limit`.
59
59
 
60
60
  ### AUD-607-U01 - new command help does not state budget-policy applicability
61
61
 
62
- **Priority:** P3
62
+ **Priority:** P3
63
63
  **Status:** closed in `19811ac`
64
64
 
65
65
  The helpers for `cve`, `drift`, `intent`, `pr-risk`, `remediate`,
@@ -1,7 +1,7 @@
1
1
  # External Audit Intake — ASK 5.9.2
2
2
 
3
- **Received:** 2026-08-27
4
- **Scope:** regression battery and commercial-positioning review against 5.9.1
3
+ **Received:** 2026-08-27
4
+ **Scope:** regression battery and commercial-positioning review against 5.9.1
5
5
  **Source:** external audit supplied in the Codex task attachment
6
6
 
7
7
  ## Executive disposition
@@ -1,7 +1,7 @@
1
1
  # External Audit Intake — ASK 5.9.3
2
2
 
3
- **Received:** 2026-08-27
4
- **Scope:** reliability, semantic consistency, agent ergonomics and commercial fit
3
+ **Received:** 2026-08-27
4
+ **Scope:** reliability, semantic consistency, agent ergonomics and commercial fit
5
5
  **Evidence base:** two external reports covering five parallel batches, eight-plus
6
6
  real Java repositories and approximately 180 CLI invocations
7
7
 
@@ -93,4 +93,3 @@ The external price bands ($25-40 and $35-50 per developer/month in the two repor
93
93
  are hypotheses, not pricing evidence. No price change, compliance claim or ENS/CRA
94
94
  certification claim follows from this audit. The next commercial proof remains a named
95
95
  customer reference, signed historical evidence and validated control mapping.
96
-
@@ -35,4 +35,3 @@ not silently rewritten.
35
35
  The live product set has one repaired missing link (`CONTRIBUTING.md` ->
36
36
  `CODE_OF_CONDUCT.md`). The remaining automated findings are one parser false positive
37
37
  (`CHANGELOG.md`'s literal `url`) and workflow-template placeholders under `.claude/`.
38
-
@@ -4,6 +4,13 @@ Executable by any team member. Runs the commercial pipeline from an empty projec
4
4
  verified first sale, ending by turning the paywall on. **Do the steps in order; do not
5
5
  flip the paywall (step 10) until steps 6–9 pass.**
6
6
 
7
+ ## Release artifact gate
8
+
9
+ Before tagging or uploading any release, complete
10
+ [RELEASE-VERIFICATION.md](RELEASE-VERIFICATION.md). It verifies the wheel's
11
+ stamped commit, installed command surface and PyPI artefact hashes; passing
12
+ checkout tests alone is insufficient evidence for a published build.
13
+
7
14
  Prerequisites: Supabase project + CLI (`supabase`), a Lemon Squeezy store, and the repo.
8
15
 
9
16
  ---
@@ -0,0 +1,102 @@
1
+ # Release Artifact Verification
2
+
3
+ ## Status
4
+
5
+ **Publishing is blocked until this procedure passes on the exact commit that
6
+ will be tagged.** A version number is not evidence that PyPI, the checkout and
7
+ the command surface describe the same build.
8
+
9
+ ## Incident: 5.9.15 provenance divergence
10
+
11
+ The external re-audit labelled its subject `5.9.15` and reported a missing CLI
12
+ surface, Windows failures and argument-validation regressions. The original
13
+ `5.9.15` commit (`5eb36f1`) changed release metadata and documentation only;
14
+ the named commands were absent from the pre-recovery `master` but existed on
15
+ `fix/aud600-queue`. This recovery integrates that implementation before a new
16
+ artefact is built. The original reported artefact still cannot be attributed to
17
+ its source checkout from its version number alone.
18
+
19
+ This does **not** dismiss the report. It makes its first corrective action
20
+ mandatory: identify the built wheel, the commit stamped inside it, the branch
21
+ that supplied it and its registered command manifest before making a behaviour
22
+ claim or publishing a replacement.
23
+
24
+ ## Release Candidate Procedure
25
+
26
+ Run every command from a clean checkout at the intended release commit.
27
+
28
+ 1. Record the source identity.
29
+
30
+ ```sh
31
+ git status --short
32
+ git rev-parse HEAD
33
+ git branch --show-current
34
+ ```
35
+
36
+ The worktree must be clean. Record the commit and branch in the release
37
+ issue; do not infer either from the version string.
38
+
39
+ 2. Build a fresh, isolated artefact.
40
+
41
+ ```sh
42
+ rm -rf /tmp/ask-release-dist
43
+ python -m build --outdir /tmp/ask-release-dist
44
+ twine check /tmp/ask-release-dist/*
45
+ ```
46
+
47
+ 3. Inspect the wheel before installing it.
48
+
49
+ ```sh
50
+ unzip -p /tmp/ask-release-dist/sourcecode-*.whl \
51
+ sourcecode/_build_commit.py
52
+ unzip -l /tmp/ask-release-dist/sourcecode-*.whl | \
53
+ rg 'sourcecode/_docs/(USER_GUIDE|DEFECT-LEDGER)\\.md'
54
+ ```
55
+
56
+ The stamped commit must equal `git rev-parse HEAD`. A missing or
57
+ `unrecorded` stamp blocks the release.
58
+
59
+ 4. Install only that wheel in a fresh environment and collect the runtime
60
+ evidence.
61
+
62
+ ```sh
63
+ python -m venv /tmp/ask-release-venv
64
+ /tmp/ask-release-venv/bin/pip install --no-deps /tmp/ask-release-dist/sourcecode-*.whl
65
+ /tmp/ask-release-venv/bin/ask version
66
+ /tmp/ask-release-venv/bin/ask --help > /tmp/ask-help.txt
67
+ ```
68
+
69
+ Archive `ask version` and `/tmp/ask-help.txt` with the release record. The
70
+ first must report the stamped commit; the second is the command-surface
71
+ manifest for the installed artefact.
72
+
73
+ 5. Run the release contracts against the checkout and the wheel.
74
+
75
+ ```sh
76
+ pytest -q \
77
+ tests/test_published_version_claims.py \
78
+ tests/test_user_guide_coverage.py \
79
+ tests/test_the_wheel_carries_its_commit_x01.py \
80
+ tests/test_bundled_docs.py
81
+ ```
82
+
83
+ 6. Only then upload the exact checked artefacts. After upload, download the
84
+ PyPI wheel by its published hash and repeat steps 3 and 4. PyPI releases are
85
+ immutable: a wrong wheel requires a new version, never an overwrite.
86
+
87
+ ## Required Release Evidence
88
+
89
+ - Commit SHA and branch/ref used to build.
90
+ - SHA-256 of wheel and source distribution.
91
+ - Extracted `BUILD_COMMIT` value.
92
+ - Installed-wheel `ask version` output.
93
+ - Installed-wheel `ask --help` output and command count.
94
+ - Test command and result.
95
+ - PyPI file hashes after publication.
96
+
97
+ ## Compatibility Rule
98
+
99
+ Removing or renaming a top-level command is a breaking change. It requires a
100
+ declared replacement or removal rationale, migration guidance, a major-version
101
+ decision, and a release-note entry before publication. An absent command must
102
+ fail as an unknown command; it must never fall back to root help with exit 0.
@@ -46,16 +46,16 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
46
46
  The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
47
47
  where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
48
48
  warm buys for each command rather than implying that every projection costs the same. In
49
- 5.9.14, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.9.16, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
50
50
  model across all declared label seeds. (The extraction and consumption contract is fixed in
51
51
  the architecture ADRs 0001–0004 under `docs/architecture/`.)
52
52
 
53
53
  The current external pack audit intake is tracked in
54
54
  [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
55
- the two pack fixes are included in release 5.9.14, with release-artifact verification
55
+ the two pack fixes are included in release 5.9.16, with release-artifact verification
56
56
  remaining for detached execution and pack evidence.
57
57
 
58
- ### Reliability contracts in 5.9.14
58
+ ### Reliability contracts in 5.9.16
59
59
 
60
60
  **A deadline the root analysis honours.** `ASK_MAX_ANALYSIS_SECONDS=<seconds>` now
61
61
  stops `ask <repo>` at a measured phase boundary. A run that spends its budget
@@ -260,7 +260,7 @@ pipx install sourcecode # isolated install, no venv needed
260
260
 
261
261
  # Verify
262
262
  ask version
263
- # ask 5.9.14
263
+ # ask 5.9.16
264
264
  ```
265
265
 
266
266
  Requires Python 3.9+.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.9.14"
7
+ version = "5.9.16"
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"
@@ -42,6 +42,15 @@ from sourcecode import perf # noqa: E402
42
42
  from perf_harness import FLEET # noqa: E402
43
43
 
44
44
 
45
+ def _configure_utf8_stdio() -> None:
46
+ """Keep Unicode gate tables printable on Windows legacy code pages."""
47
+ for stream in (sys.stdout, sys.stderr):
48
+ try:
49
+ stream.reconfigure(encoding="utf-8", errors="replace")
50
+ except (AttributeError, OSError):
51
+ pass
52
+
53
+
45
54
  def load_cells(directory: Path) -> dict[str, dict]:
46
55
  """Every `perf-baseline-v1` cell in *directory*, keyed by `<repo>__<cmd>__<mode>`.
47
56
 
@@ -291,4 +300,5 @@ def main() -> int:
291
300
 
292
301
 
293
302
  if __name__ == "__main__":
303
+ _configure_utf8_stdio()
294
304
  raise SystemExit(main())
@@ -65,10 +65,18 @@ DEFAULT_COMMANDS = [""]
65
65
 
66
66
  ASK_BIN = os.environ.get("ASK_BIN", "ask")
67
67
  BYTES_PER_KB = 1024
68
- # darwin ru_maxrss is bytes; linux reports kilobytes.
68
+ # darwin ru_maxrss is bytes; Linux reports kilobytes. Windows reports zero
69
+ # below because the stdlib exposes no equivalent child-process peak counter.
69
70
  RSS_UNIT = 1 if sys.platform == "darwin" else BYTES_PER_KB
70
71
 
71
72
 
73
+ def _children_peak_rss() -> float:
74
+ """Return the POSIX child peak, or an honest unmeasured zero on Windows."""
75
+ if resource is None:
76
+ return 0.0
77
+ return float(resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss)
78
+
79
+
72
80
  def git_commit(repo_path: Path) -> str:
73
81
  try:
74
82
  out = subprocess.run(
@@ -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.14"
7
+ __version__ = "5.9.16"
@@ -58,6 +58,7 @@ import json
58
58
  import os
59
59
  import re
60
60
  import subprocess
61
+ import threading
61
62
  import time
62
63
  import uuid
63
64
  from datetime import datetime, timezone
@@ -156,6 +157,12 @@ _DEFAULT_MAX_SIZE_MB: int = 50
156
157
  _REPLACE_RETRIES: int = 5
157
158
  _REPLACE_BACKOFF_S: float = 0.05
158
159
 
160
+ # Some Windows filesystems expose timestamps too coarsely to order consecutive
161
+ # atomic writes. Persist a process-monotonic stamp in each cache envelope so GC
162
+ # never falls back to directory enumeration order when file timestamps tie.
163
+ _WRITE_CLOCK_LOCK = threading.Lock()
164
+ _LAST_WRITE_NS: int = 0
165
+
159
166
  # Matches "snapshot-<hex_commit>-<hex_flags>.json.gz"
160
167
  _SNAPSHOT_RE = re.compile(r"^snapshot-([0-9a-f]+)-[0-9a-f]+\.json\.gz$")
161
168
 
@@ -777,6 +784,7 @@ def write_core(repo_root: Path, core_key: str, core_data: dict[str, Any]) -> str
777
784
  "key": core_key,
778
785
  "hash": core_hash,
779
786
  "ts": _now_iso(),
787
+ "written_ns": _next_write_ns(),
780
788
  "data": core_data,
781
789
  }
782
790
  payload = gzip.compress(
@@ -848,6 +856,14 @@ def _now_iso() -> str:
848
856
  return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
849
857
 
850
858
 
859
+ def _next_write_ns() -> int:
860
+ """Return a wall-clock nanosecond stamp that increases in this process."""
861
+ global _LAST_WRITE_NS
862
+ with _WRITE_CLOCK_LOCK:
863
+ _LAST_WRITE_NS = max(time.time_ns(), _LAST_WRITE_NS + 1)
864
+ return _LAST_WRITE_NS
865
+
866
+
851
867
  def _build_envelope(
852
868
  cache_key: str,
853
869
  content: str,
@@ -860,6 +876,7 @@ def _build_envelope(
860
876
  "sv": SCHEMA_VERSION,
861
877
  "key": cache_key,
862
878
  "ts": _now_iso(),
879
+ "written_ns": _next_write_ns(),
863
880
  "fmt": fmt,
864
881
  "layers": layers,
865
882
  }
@@ -1034,6 +1051,25 @@ def _cas_restore(
1034
1051
  # Eviction / GC
1035
1052
  # ---------------------------------------------------------------------------
1036
1053
 
1054
+ def _cache_recency(path: Path) -> tuple[int, int, int, str]:
1055
+ """Stable newest-first key for a cache envelope.
1056
+
1057
+ New envelopes carry ``written_ns`` because filesystem timestamps can tie on
1058
+ Windows. Older envelopes remain orderable through their native timestamps.
1059
+ The remaining fields make a genuine cross-process tie deterministic.
1060
+ """
1061
+ stat_result = path.stat()
1062
+ stamp = stat_result.st_mtime_ns
1063
+ try:
1064
+ envelope = json.loads(gzip.decompress(path.read_bytes()).decode("utf-8"))
1065
+ stored = envelope.get("written_ns") if isinstance(envelope, dict) else None
1066
+ if isinstance(stored, int) and stored > 0:
1067
+ stamp = stored
1068
+ except Exception:
1069
+ pass
1070
+ return stamp, stat_result.st_mtime_ns, stat_result.st_ctime_ns, path.name
1071
+
1072
+
1037
1073
  def _gc(cache_d: Path) -> None:
1038
1074
  """Evict old snapshots/cores/views and sweep orphaned CAS blobs.
1039
1075
 
@@ -1072,8 +1108,8 @@ def _gc(cache_d: Path) -> None:
1072
1108
  if keep <= 0 or len(groups) <= keep:
1073
1109
  surviving = all_snapshots + all_cores
1074
1110
  else:
1075
- def _newest_mtime(commit: str) -> float:
1076
- return max(p.stat().st_mtime for p in groups[commit])
1111
+ def _newest_mtime(commit: str) -> tuple[int, int, int, str]:
1112
+ return max(_cache_recency(p) for p in groups[commit])
1077
1113
 
1078
1114
  sorted_commits = sorted(groups, key=_newest_mtime, reverse=True)
1079
1115
  surviving = []
@@ -1088,7 +1124,7 @@ def _gc(cache_d: Path) -> None:
1088
1124
  if max_cores > 0:
1089
1125
  surviving_cores = [p for p in surviving if p.name.startswith("core-") and p.exists()]
1090
1126
  if len(surviving_cores) > max_cores:
1091
- surviving_cores.sort(key=lambda p: p.stat().st_mtime, reverse=True)
1127
+ surviving_cores.sort(key=_cache_recency, reverse=True)
1092
1128
  for evict in surviving_cores[max_cores:]:
1093
1129
  _safe_unlink(evict)
1094
1130
  surviving = [p for p in surviving if p != evict]