sourcecode 5.9.16__tar.gz → 5.9.17__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 (457) hide show
  1. {sourcecode-5.9.16 → sourcecode-5.9.17}/.github/workflows/windows-battery.yml +21 -0
  2. {sourcecode-5.9.16 → sourcecode-5.9.17}/CHANGELOG.md +20 -0
  3. {sourcecode-5.9.16 → sourcecode-5.9.17}/PKG-INFO +7 -6
  4. {sourcecode-5.9.16 → sourcecode-5.9.17}/README.md +6 -5
  5. sourcecode-5.9.17/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +54 -0
  6. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/DEFECT-LEDGER.md +30 -0
  7. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/DEVELOPMENT-ROADMAP.md +29 -0
  8. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/EXECUTIVE-ROADMAP.md +13 -0
  9. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/RELEASE-VERIFICATION.md +14 -0
  10. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/USER_GUIDE.md +11 -4
  11. {sourcecode-5.9.16 → sourcecode-5.9.17}/pyproject.toml +1 -1
  12. sourcecode-5.9.17/scripts/windows_reliability_matrix.py +97 -0
  13. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/__init__.py +1 -1
  14. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cli.py +55 -36
  15. {sourcecode-5.9.16 → sourcecode-5.9.17}/.github/workflows/build-windows.yml +0 -0
  16. {sourcecode-5.9.16 → sourcecode-5.9.17}/.github/workflows/perf-gate.yml +0 -0
  17. {sourcecode-5.9.16 → sourcecode-5.9.17}/.github/workflows/windows-regression.yml +0 -0
  18. {sourcecode-5.9.16 → sourcecode-5.9.17}/.gitignore +0 -0
  19. {sourcecode-5.9.16 → sourcecode-5.9.17}/.ruff.toml +0 -0
  20. {sourcecode-5.9.16 → sourcecode-5.9.17}/CLAUDE.md +0 -0
  21. {sourcecode-5.9.16 → sourcecode-5.9.17}/CODE_OF_CONDUCT.md +0 -0
  22. {sourcecode-5.9.16 → sourcecode-5.9.17}/CONTRIBUTING.md +0 -0
  23. {sourcecode-5.9.16 → sourcecode-5.9.17}/LICENSE +0 -0
  24. {sourcecode-5.9.16 → sourcecode-5.9.17}/NOTICE +0 -0
  25. {sourcecode-5.9.16 → sourcecode-5.9.17}/SECURITY.md +0 -0
  26. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  27. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  28. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  29. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  30. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  31. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  32. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  33. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  34. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  35. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  36. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  37. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  38. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  39. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  40. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  41. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  42. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  43. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  44. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  45. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/CACHE.md +0 -0
  46. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/COMMERCIAL-OFFER.md +0 -0
  47. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/CUSTOMER-VALIDATION.md +0 -0
  48. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/DEMO-5MIN.md +0 -0
  49. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  50. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/EXECUTION-PLAN-12MO.md +0 -0
  51. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/MANUAL-USUARIO.md +0 -0
  52. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/MODERNIZATION.md +0 -0
  53. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/PRODUCT-ROUTE.md +0 -0
  54. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/PRODUCT_AUDIT.md +0 -0
  55. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/PRODUCT_IDENTITY.md +0 -0
  56. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/PRODUCT_TIERS.md +0 -0
  57. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/RC1-CHECKLIST.md +0 -0
  58. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/RELEASE-CHECKLIST.md +0 -0
  59. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  60. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  61. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  62. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-assessment-report.md +0 -0
  63. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  64. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  65. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  66. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  67. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  68. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  69. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  70. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  71. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  72. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  73. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  74. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  75. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  76. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  77. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  78. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  79. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  80. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  81. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  82. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  83. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  84. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  85. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0006-performance-harness.md +0 -0
  86. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  87. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  88. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/consumer-disposition-inventory.md +0 -0
  89. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/overview.md +0 -0
  90. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/product-architecture-review.md +0 -0
  91. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/product-strategy-layering.md +0 -0
  92. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  93. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/architecture/semantic-ir-roadmap.md +0 -0
  94. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/baseline-ci.yml +0 -0
  95. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/commercial-pipeline-audit.md +0 -0
  96. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/contracts-ci.yml +0 -0
  97. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/contracts.md +0 -0
  98. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  99. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  100. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  101. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  102. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  103. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  104. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  105. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  106. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/licensing-schema.md +0 -0
  107. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/migrate-check.md +0 -0
  108. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/pack-gate-github-actions.yml +0 -0
  109. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/pack-gate-gitlab.yml +0 -0
  110. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/README.md +0 -0
  111. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/REGRESSION-GATE.md +0 -0
  112. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  113. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  114. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  115. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  116. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  117. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  118. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  119. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  120. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  121. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  122. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  123. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  124. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  125. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  126. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  127. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  128. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  129. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  130. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  131. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  132. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  133. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  134. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  135. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  136. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  137. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  138. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  139. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  140. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  141. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  142. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  143. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  144. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  145. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  146. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  147. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  148. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  149. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  150. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  151. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  152. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  153. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  154. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/README.md +0 -0
  155. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  156. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  157. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  158. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  159. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  160. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  161. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/baselines/reference-best/README.md +0 -0
  162. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  163. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/posture.md +0 -0
  164. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/privacy.md +0 -0
  165. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/pro-experience-audit.md +0 -0
  166. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/schema.md +0 -0
  167. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/spec/envelope-v1.md +0 -0
  168. {sourcecode-5.9.16 → sourcecode-5.9.17}/docs/spring-audit-ci.yml +0 -0
  169. {sourcecode-5.9.16 → sourcecode-5.9.17}/hatch_build.py +0 -0
  170. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/compare_integration_engines.py +0 -0
  171. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/context_cost_harness.py +0 -0
  172. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/customer_smoke_test.sh +0 -0
  173. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/generate_jdk_exports.py +0 -0
  174. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/perf_gate.py +0 -0
  175. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/perf_harness.py +0 -0
  176. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/sync_gate_anchors.py +0 -0
  177. {sourcecode-5.9.16 → sourcecode-5.9.17}/scripts/test_fast.sh +0 -0
  178. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/__main__.py +0 -0
  179. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/access_drift.py +0 -0
  180. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/adaptive_scanner.py +0 -0
  181. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/analysis_budget.py +0 -0
  182. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/answer_bounds.py +0 -0
  183. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/archetype.py +0 -0
  184. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/architectural_baseline.py +0 -0
  185. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/architectural_delta.py +0 -0
  186. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/architecture_analyzer.py +0 -0
  187. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/architecture_summary.py +0 -0
  188. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/ast_extractor.py +0 -0
  189. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/audit_clusters.py +0 -0
  190. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/audit_recipe.py +0 -0
  191. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/audit_report.py +0 -0
  192. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/audit_since.py +0 -0
  193. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/audit_verify.py +0 -0
  194. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/baseline_attestation.py +0 -0
  195. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/baseline_autocapture.py +0 -0
  196. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/breaking_changes.py +0 -0
  197. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/build_modules.py +0 -0
  198. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/build_stamp.py +0 -0
  199. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/bundled_docs.py +0 -0
  200. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/c4_render.py +0 -0
  201. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cache.py +0 -0
  202. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cache_model.py +0 -0
  203. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cache_observation.py +0 -0
  204. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/call_surface.py +0 -0
  205. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/caller_metrics.py +0 -0
  206. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/caller_reach.py +0 -0
  207. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/canonical_ir.py +0 -0
  208. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/chain_rules.py +0 -0
  209. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/change_plan.py +0 -0
  210. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/ci_output.py +0 -0
  211. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cir_graphs.py +0 -0
  212. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/classifier.py +0 -0
  213. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/click_runtime.py +0 -0
  214. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/client_calls.py +0 -0
  215. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/code_notes_analyzer.py +0 -0
  216. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/compare.py +0 -0
  217. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/confidence_analyzer.py +0 -0
  218. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/constraint_diff.py +0 -0
  219. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/consumer_join.py +0 -0
  220. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/container_wiring.py +0 -0
  221. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/context_cache.py +0 -0
  222. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/context_graph.py +0 -0
  223. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/context_scorer.py +0 -0
  224. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/context_summarizer.py +0 -0
  225. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/contract_diff.py +0 -0
  226. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/contract_init.py +0 -0
  227. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/contract_model.py +0 -0
  228. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/contract_pipeline.py +0 -0
  229. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/coverage_parser.py +0 -0
  230. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cve_feed.py +0 -0
  231. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/cve_reachability.py +0 -0
  232. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/data_exposure.py +0 -0
  233. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/data_labels.py +0 -0
  234. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/declarations.py +0 -0
  235. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/defect_classes/__init__.py +0 -0
  236. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/defect_classes/registry.json +0 -0
  237. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/defect_identity.py +0 -0
  238. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/degradation.py +0 -0
  239. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/dependency_analyzer.py +0 -0
  240. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/deployment_prefix.py +0 -0
  241. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detach.py +0 -0
  242. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/__init__.py +0 -0
  243. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/base.py +0 -0
  244. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/csproj_parser.py +0 -0
  245. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/dart.py +0 -0
  246. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/dotnet.py +0 -0
  247. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/elixir.py +0 -0
  248. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/go.py +0 -0
  249. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/heuristic.py +0 -0
  250. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/hybrid.py +0 -0
  251. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/java.py +0 -0
  252. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/jvm_ext.py +0 -0
  253. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/nodejs.py +0 -0
  254. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/parsers.py +0 -0
  255. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/php.py +0 -0
  256. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/project.py +0 -0
  257. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/python.py +0 -0
  258. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/ruby.py +0 -0
  259. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/rust.py +0 -0
  260. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/systems.py +0 -0
  261. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/terraform.py +0 -0
  262. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/detectors/tooling.py +0 -0
  263. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/doc_analyzer.py +0 -0
  264. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/dynamic_argument_surface.py +0 -0
  265. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/empty_reach.py +0 -0
  266. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/endpoint_disposition.py +0 -0
  267. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/endpoint_literals.py +0 -0
  268. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/endpoint_metrics.py +0 -0
  269. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/entrypoint_classifier.py +0 -0
  270. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/env_analyzer.py +0 -0
  271. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/envelope.py +0 -0
  272. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/environment_resolution.py +0 -0
  273. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/error_schema.py +0 -0
  274. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/evidence_provider.py +0 -0
  275. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/execution_plan.py +0 -0
  276. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/explain.py +0 -0
  277. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/explain_endpoint.py +0 -0
  278. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/facts/__init__.py +0 -0
  279. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/facts/registry.json +0 -0
  280. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/field_deprecations.py +0 -0
  281. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/file_chunker.py +0 -0
  282. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/file_classifier.py +0 -0
  283. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/filter_surface.py +0 -0
  284. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/findings_baseline.py +0 -0
  285. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/format_contract.py +0 -0
  286. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/fqn_utils.py +0 -0
  287. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/functional_routes.py +0 -0
  288. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/gate_anchors.py +0 -0
  289. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/git_analyzer.py +0 -0
  290. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/git_checkout.py +0 -0
  291. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/github_diff.py +0 -0
  292. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/graph_analyzer.py +0 -0
  293. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/graph_evidence.py +0 -0
  294. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/hibernate_strat.py +0 -0
  295. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/identity_fallback.py +0 -0
  296. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/integration_coordinates.py +0 -0
  297. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/intent_router.py +0 -0
  298. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/jdk_exports.py +0 -0
  299. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/license.py +0 -0
  300. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/manifest_cache.py +0 -0
  301. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/__init__.py +0 -0
  302. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/dependency_import.py +0 -0
  303. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  304. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  305. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  306. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  307. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  308. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/orchestrator.py +0 -0
  309. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/registry.py +0 -0
  310. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/runner.py +0 -0
  311. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp/server.py +0 -0
  312. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/mcp_nudge.py +0 -0
  313. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/metrics_analyzer.py +0 -0
  314. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/migrate_check.py +0 -0
  315. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/migration_apply.py +0 -0
  316. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/migration_blast.py +0 -0
  317. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/non_coverage.py +0 -0
  318. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/openapi_surface.py +0 -0
  319. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/openrewrite_recipe.py +0 -0
  320. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/output_bounds.py +0 -0
  321. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/output_budget.py +0 -0
  322. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/output_ceiling.py +0 -0
  323. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/output_encoding.py +0 -0
  324. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/output_sink.py +0 -0
  325. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/pack_manifest.py +0 -0
  326. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/packs.py +0 -0
  327. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/parallel.py +0 -0
  328. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/parse_cache.py +0 -0
  329. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/partial_contract.py +0 -0
  330. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/path_admission.py +0 -0
  331. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/path_display.py +0 -0
  332. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/path_filters.py +0 -0
  333. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/perf.py +0 -0
  334. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/phased_run.py +0 -0
  335. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/pipe_contract.py +0 -0
  336. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/posture.py +0 -0
  337. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/pr_comment_renderer.py +0 -0
  338. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/pr_impact.py +0 -0
  339. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/pr_risk.py +0 -0
  340. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/prepare_context.py +0 -0
  341. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/product_info.py +0 -0
  342. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/progress.py +0 -0
  343. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/provenance.py +0 -0
  344. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/ranking_engine.py +0 -0
  345. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/readiness_timeline.py +0 -0
  346. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/readonly.py +0 -0
  347. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/reconciliation.py +0 -0
  348. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/redactor.py +0 -0
  349. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/reference_facts.py +0 -0
  350. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/regress.py +0 -0
  351. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/regulatory_pack.py +0 -0
  352. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/release_info.py +0 -0
  353. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/relevance_scorer.py +0 -0
  354. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/remediation_diff.py +0 -0
  355. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/remediation_flow.py +0 -0
  356. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/remediation_report.py +0 -0
  357. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/remedies.py +0 -0
  358. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/rename_refactor.py +0 -0
  359. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/repo_classifier.py +0 -0
  360. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/repository_ir.py +0 -0
  361. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/resource_budget.py +0 -0
  362. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/__init__.py +0 -0
  363. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/context.py +0 -0
  364. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/errors.py +0 -0
  365. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/executor.py +0 -0
  366. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/planner.py +0 -0
  367. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/query.py +0 -0
  368. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/request.py +0 -0
  369. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/resolution.py +0 -0
  370. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/result.py +0 -0
  371. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/retriever.py +0 -0
  372. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/runtime.py +0 -0
  373. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps.py +0 -0
  374. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  375. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_graph.py +0 -0
  376. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_impact.py +0 -0
  377. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_intf.py +0 -0
  378. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_struct.py +0 -0
  379. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  380. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/ris.py +0 -0
  381. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/risk.py +0 -0
  382. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/risk_model.py +0 -0
  383. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/rule_catalog.py +0 -0
  384. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/rule_pass.py +0 -0
  385. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/runs.py +0 -0
  386. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/runtime_classifier.py +0 -0
  387. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/sarif.py +0 -0
  388. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/sarif_emit.py +0 -0
  389. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/scanner.py +0 -0
  390. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schema.py +0 -0
  391. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schema_producers.py +0 -0
  392. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schema_registry.py +0 -0
  393. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  394. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  395. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  396. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  397. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  398. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  399. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  400. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/security_chain.py +0 -0
  401. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/security_config.py +0 -0
  402. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/security_config_scan.py +0 -0
  403. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/security_posture.py +0 -0
  404. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/selection_contract.py +0 -0
  405. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/self_audit.py +0 -0
  406. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/selftest.py +0 -0
  407. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/semantic_analyzer.py +0 -0
  408. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/semantic_impact_engine.py +0 -0
  409. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/semantic_integration_engine.py +0 -0
  410. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/semantic_services.py +0 -0
  411. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/serializer.py +0 -0
  412. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/servlet_surface.py +0 -0
  413. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/source_text.py +0 -0
  414. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_event_topology.py +0 -0
  415. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_findings.py +0 -0
  416. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_impact.py +0 -0
  417. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_model.py +0 -0
  418. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_profiles.py +0 -0
  419. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_properties.py +0 -0
  420. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_security_audit.py +0 -0
  421. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_semantic.py +0 -0
  422. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/spring_tx_analyzer.py +0 -0
  423. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/sql_taint.py +0 -0
  424. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/summarizer.py +0 -0
  425. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/target_admission.py +0 -0
  426. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/__init__.py +0 -0
  427. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/config.py +0 -0
  428. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/consent.py +0 -0
  429. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/events.py +0 -0
  430. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/filters.py +0 -0
  431. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/telemetry/transport.py +0 -0
  432. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/test_gap_ranking.py +0 -0
  433. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/test_sources.py +0 -0
  434. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/text_input.py +0 -0
  435. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/timeline.py +0 -0
  436. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/timeline_cache.py +0 -0
  437. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/token_estimate.py +0 -0
  438. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/tree_utils.py +0 -0
  439. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/type_usage_surface.py +0 -0
  440. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/validation_inference.py +0 -0
  441. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/validation_surface.py +0 -0
  442. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/verify_edit.py +0 -0
  443. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/verify_repo.py +0 -0
  444. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/verify_rules.py +0 -0
  445. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/version_check.py +0 -0
  446. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/vex.py +0 -0
  447. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/waivers.py +0 -0
  448. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/watch_loop.py +0 -0
  449. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/wired_surface.py +0 -0
  450. {sourcecode-5.9.16 → sourcecode-5.9.17}/src/sourcecode/workspace.py +0 -0
  451. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/functions/README.md +0 -0
  452. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/functions/get-license/index.ts +0 -0
  453. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  454. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/functions/telemetry/index.ts +0 -0
  455. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/sql/license_event_ordering.sql +0 -0
  456. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/sql/licensing_schema.sql +0 -0
  457. {sourcecode-5.9.16 → sourcecode-5.9.17}/supabase/sql/telemetry_events.sql +0 -0
@@ -44,3 +44,24 @@ jobs:
44
44
  env:
45
45
  SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
46
46
  SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
47
+
48
+ - name: Record critical command reliability matrix
49
+ shell: pwsh
50
+ run: |
51
+ $root = Join-Path $env:RUNNER_TEMP "ask-reliability-repo"
52
+ $evidence = Join-Path $env:RUNNER_TEMP "ask-windows-reliability.json"
53
+ New-Item -ItemType Directory -Force (Join-Path $root "src/main/java/com/acme") | Out-Null
54
+ Set-Content -Path (Join-Path $root "pom.xml") -Value '<project><modelVersion>4.0.0</modelVersion><groupId>com.acme</groupId><artifactId>app</artifactId><version>1</version></project>'
55
+ Set-Content -Path (Join-Path $root "src/main/java/com/acme/App.java") -Value 'package com.acme; public class App {}'
56
+ git -C $root init --quiet
57
+ git -C $root config user.email ci@example.invalid
58
+ git -C $root config user.name ASK-CI
59
+ git -C $root add .
60
+ git -C $root commit --quiet -m baseline
61
+ python scripts/windows_reliability_matrix.py $root --output $evidence
62
+
63
+ - name: Upload Windows reliability evidence
64
+ uses: actions/upload-artifact@v4
65
+ with:
66
+ name: ask-windows-reliability-matrix
67
+ path: ${{ runner.temp }}/ask-windows-reliability.json
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.17] — 2026-08-31
4
+
5
+ *Reliability and monorepo performance follow-up after the 5.9.16 external audit.*
6
+
7
+ ### Fixed
8
+
9
+ - `risk`, `verify`, `audit-report` and `migrate-check` now emit structured
10
+ `EXECUTION_FAILED` evidence with a non-zero exit when unexpected analysis
11
+ failures occur; they cannot report an empty successful result through that path.
12
+ - Semantic workspace analysis reuses the already scanned workspace tree, and
13
+ root graph, documentation and metrics analysis share one pruned monorepo tree.
14
+
15
+ ### Verification
16
+
17
+ - Added a Windows reliability-matrix tool and manual workflow artifact covering
18
+ `risk`, `verify`, Markdown `audit-report`, `spring-audit`, `migrate-check` and
19
+ `migrate-apply`. It records each exit code and output size across 30 repetitions.
20
+ - Native Windows process cleanup and the remaining contradictory reliability
21
+ observations remain open until that evidence is collected.
22
+
3
23
  ## [5.9.16] — 2026-08-31
4
24
 
5
25
  *Audit candidate following the 5.9.15 release recovery.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.16
3
+ Version: 5.9.17
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.16-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.17-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,13 +196,14 @@ 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.16 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.17 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
203
203
  the detection phase, measured at **1.69× on a 24,073-file monorepo** — 54.9 s to
204
204
  32.5 s cold, with a byte-identical answer. A measurement on one repository and one
205
- machine is not a duration promise either.
205
+ machine is not a duration promise either. It also avoids repeated monorepo tree
206
+ walks when optional context and semantic analysis share the same scan.
206
207
 
207
208
  The root analysis now stops at `ASK_MAX_ANALYSIS_SECONDS` instead of running past
208
209
  it: a spent budget returns a structured partial result naming the phases that
@@ -233,7 +234,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
233
234
  invalid input rather than treated as an empty repository. This prevents silent
234
235
  entitlement errors in CI and does not change per-repository gates or billing.
235
236
 
236
- Release 5.9.16 also carries the boundary-contract hardening: missing consumer repositories,
237
+ Release 5.9.17 also carries the boundary-contract hardening: missing consumer repositories,
237
238
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
238
239
  input errors; duplicate same-commit baselines are never overwritten. `posture
239
240
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -266,7 +267,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
266
267
  # pip / pipx
267
268
  pipx install sourcecode # or: pip install sourcecode
268
269
 
269
- ask version # ask 5.9.16 — and, on a build that has aged,
270
+ ask version # ask 5.9.17 — and, on a build that has aged,
270
271
  # how many releases have probably shipped since
271
272
  ```
272
273
 
@@ -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.16-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.17-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,13 +147,14 @@ 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.16 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.17 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
154
154
  the detection phase, measured at **1.69× on a 24,073-file monorepo** — 54.9 s to
155
155
  32.5 s cold, with a byte-identical answer. A measurement on one repository and one
156
- machine is not a duration promise either.
156
+ machine is not a duration promise either. It also avoids repeated monorepo tree
157
+ walks when optional context and semantic analysis share the same scan.
157
158
 
158
159
  The root analysis now stops at `ASK_MAX_ANALYSIS_SECONDS` instead of running past
159
160
  it: a spent budget returns a structured partial result naming the phases that
@@ -184,7 +185,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
184
185
  invalid input rather than treated as an empty repository. This prevents silent
185
186
  entitlement errors in CI and does not change per-repository gates or billing.
186
187
 
187
- Release 5.9.16 also carries the boundary-contract hardening: missing consumer repositories,
188
+ Release 5.9.17 also carries the boundary-contract hardening: missing consumer repositories,
188
189
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
189
190
  input errors; duplicate same-commit baselines are never overwritten. `posture
190
191
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -217,7 +218,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
217
218
  # pip / pipx
218
219
  pipx install sourcecode # or: pip install sourcecode
219
220
 
220
- ask version # ask 5.9.16 — and, on a build that has aged,
221
+ ask version # ask 5.9.17 — and, on a build that has aged,
221
222
  # how many releases have probably shipped since
222
223
  ```
223
224
 
@@ -0,0 +1,54 @@
1
+ # External Audit — 5.9.16 Re-audit
2
+
3
+ **Received:** 2026-08-31
4
+ **Scope:** repositories under `testing/`
5
+ **Evidence status:** external observations; contradictory fork results are kept
6
+ open rather than converted into closure claims.
7
+
8
+ ## Summary
9
+
10
+ Release `5.9.16` substantially recovers from the defective `5.9.15` artefact.
11
+ The nine missing commands are restored: `ask --help` lists 57 top-level commands,
12
+ `self-audit` reports 104 registered CLI commands, and independent forks invoked
13
+ the recovered commands rather than only checking help text.
14
+
15
+ The audit also re-confirms recovery of `/dev/null` error handling, the space form
16
+ of `--max-output-tokens`, endpoint/posture validation, `risk --limit 0`, missing
17
+ `explain` error output, and baseline attest/diff/trend behavior.
18
+
19
+ This is not a full reliability clearance. Independent forks still observed silent
20
+ failures for `risk` with a non-zero limit, `verify`, and Markdown `audit-report`.
21
+ The measurements for `spring-audit`, `migrate-check`, and `migrate-apply` conflict
22
+ between forks and therefore cannot close the historical shared-worker defect.
23
+
24
+ ## Measured Improvements
25
+
26
+ | Area | External result | Status |
27
+ |---|---|---|
28
+ | Command surface | Nine commands restored and exercised; `self-audit` passes with 104 CLI commands. | Closed for this incident. |
29
+ | Error handling | `/dev/null` and `--max-output-tokens 10` regressions no longer reproduced. | Closed, retain release tests. |
30
+ | `tutorials` manifest parsing | More than four minutes became 21.5 seconds. | Confirmed improvement. |
31
+ | `tutorials` total root analysis | Completed in 4m52.6s with JSON output. | Improved, not yet bounded at a seconds-scale target. |
32
+ | `review-pr` | No reproduction in 38 accumulated repetitions. | Closed/no-repro, retain regression test. |
33
+
34
+ ## Open Risks
35
+
36
+ | ID | Finding | Required closure |
37
+ |---|---|---|
38
+ | `AUD-620-R` | `risk` with `--limit != 0`, `verify`, and Markdown `audit-report` still silently fail in independent forks. `spring-audit`, `migrate-check`, and `migrate-apply` have conflicting results. | A controlled native Windows/pipx matrix with at least 30 repetitions per command and complete result evidence. |
39
+ | `AUD-620-TUTORIALS` | The improved manifest stage exposed `analyzing repository context` as the new dominant delay, up to roughly 2.3 minutes without progress change. | Profile and optimize that phase; repeat whole-command timing on the same Windows corpus. |
40
+ | `AUD-620-I` | `cold-start --compact` size is state-dependent; observed values across rounds differ. `cache warm` may return agent-view exit 143. | Publish a reproducible priming sequence and investigate agent-view warm failure separately. |
41
+ | `AUD-620-WIN-PROC` | Two to four `ask.exe` descendants were observed after runs. | Native Windows/Git Bash process-tree tests for successful, timed-out and interrupted commands. |
42
+
43
+ ## Audit Procedure Requirement
44
+
45
+ Before every measured command, capture the target repository's `pwd`, `git status
46
+ --short`, and `git rev-parse HEAD`, plus the installed `ask version`. Record command,
47
+ timeout, exit code and bytes written to stdout, stderr and any output file. This avoids
48
+ counting an empty scratch directory as a successful run against the intended corpus.
49
+
50
+ ## Release Position
51
+
52
+ `5.9.16` is a verified recovery of the lost command surface and several concrete
53
+ regressions. It remains suitable for bounded use, but not for production CI-gating
54
+ or enterprise-scale reliability claims until the open native-Windows evidence closes.
@@ -14,6 +14,36 @@ Status values: `open` · `in-progress` · `closed <version>` · `by-design` (wit
14
14
  The facts these rows are keyed to are published: `ask schema facts-v1` prints the registry
15
15
  (authority, definition, consumers, parity test) that the release battery enforces.
16
16
 
17
+ ## Current Synchronization — External Audit `AUD-620`
18
+
19
+ **Re-audit of release `5.9.16`, received 2026-08-31.** This audit confirms that
20
+ the defective `5.9.15` command surface was restored: all nine missing commands
21
+ are again registered and independently invoked. It also confirms the `/dev/null`,
22
+ space-form `--max-output-tokens`, input-validation, baseline and `risk --limit 0`
23
+ repairs. On the same Windows corpus, `tutorials` manifest parsing fell from more
24
+ than four minutes to 21.5 seconds; total root analysis was 4m52.6s.
25
+
26
+ The recovery does **not** close the shared reliability defect. Independent forks
27
+ agree that `risk` with a non-zero limit, `verify`, and Markdown `audit-report`
28
+ can still fail silently. Results for `spring-audit`, `migrate-check`, and
29
+ `migrate-apply` conflict between forks, so they remain open pending a single
30
+ controlled Windows matrix of at least 30 repetitions per command. The authoritative
31
+ record is [`AUDIT-2026-08-31-EXTERNAL-5.9.16.md`](AUDIT-2026-08-31-EXTERNAL-5.9.16.md).
32
+
33
+ | ID | Severity | Status | Evidence and required closure |
34
+ |---|---:|---|---|
35
+ | `AUD-620-COMMAND-SURFACE` | Critical | **closed 5.9.16** | The nine commands absent from `5.9.15` are present in `ask --help`, `self-audit` reports 104 registered CLI commands, and three forks invoked them. Keep the installed-wheel command-surface gate. |
36
+ | `AUD-620-R` | Critical maximum | **open, P0** | `risk` with `--limit != 0`, `verify`, and Markdown `audit-report` still have independently observed silent failures. `spring-audit`, `migrate-check`, and `migrate-apply` gave conflicting results. Capture target identity and run >=30 native-Windows/pipx repetitions per command, recording exit code, stdout/stderr bytes, output file and timeout. |
37
+ | `AUD-620-TUTORIALS` | High | **partially fixed, P1** | Manifest parsing improved to 21.5s, but `analyzing repository context` now dominates and total time remains 4m52.6s. Profile that phase on the auditor platform and publish a sustained size/time envelope. |
38
+ | `AUD-620-I` | High | **open, P1** | `cold-start --compact` remains state-dependent (3,496, 31,260, 19,781 and 15,034 bytes across rounds); `cache warm` can fail its agent view with exit 143. Define the priming sequence and investigate the agent-view failure separately. |
39
+ | `AUD-620-WIN-PROC` | Medium | **open, platform-blocked** | Two to four `ask.exe` descendants were still observed. Establish native Windows/Git Bash process-tree evidence before shipping platform-specific teardown. |
40
+ | `AUD-620-REVIEW-PR` | Medium | **closed/no-repro** | The historical lowercase `no_git_repo` path did not reproduce in 38 accumulated repetitions. Retain its regression test. |
41
+
42
+ The release remains suitable for bounded use, but production CI-gating and
43
+ enterprise-scale reliability claims stay blocked until `AUD-620-R`, the Windows
44
+ process lifecycle and the remaining `tutorials` scale work close with repeatable
45
+ native evidence.
46
+
17
47
  ## Current Synchronization — External Audit `AUD-619`
18
48
 
19
49
  **Re-audit of release `5.9.13`, received 2026-08-28.** The previous apparent
@@ -1,5 +1,34 @@
1
1
  # ASK — Development Roadmap
2
2
 
3
+ ### External Audit Intake — `AUD-620` re-audit, release 5.9.16
4
+
5
+ The external re-audit received 2026-08-31 confirms a major recovery from the
6
+ defective `5.9.15` artefact. The nine missing commands are restored and invoked
7
+ in three independent forks; Bug F, Bug Q, validation and baseline regressions are
8
+ also independently healthy. On the Windows `tutorials` corpus, manifest parsing
9
+ improved from more than four minutes to 21.5 seconds and total root analysis
10
+ completed in 4m52.6s.
11
+
12
+ **Engineering decision: retain the recovery, but keep the reliability gate active.**
13
+ Two independent forks still observed silent failures in `risk` with a non-zero
14
+ limit, `verify`, and Markdown `audit-report`. Results for `spring-audit`,
15
+ `migrate-check`, and `migrate-apply` disagree between forks, so no success sample
16
+ closes them. The next work is a controlled native Windows matrix, not another
17
+ uncontrolled retry: record `pwd`, target Git revision/status, installed wheel
18
+ commit, command, timeout, exit status and output sizes for at least 30 repetitions
19
+ per affected command.
20
+
21
+ | ID | Priority | Next action and closure boundary |
22
+ |---|---:|---|
23
+ | `AUD-620-R` | P0 | Instrument and reproduce the silent paths for `risk`, `verify` and Markdown `audit-report`; run the controlled 30-run native Windows matrix for all six historically affected commands. A command closes only with non-empty success evidence or structured, non-zero failure evidence in every recorded run. |
24
+ | `AUD-620-TUTORIALS` | P1 | Apply phase profiling to `analyzing repository context`, now the dominant Windows delay. Preserve the measured manifest improvement, but do not claim seconds-scale root analysis until the whole command is repeatedly bounded. |
25
+ | `AUD-620-I` | P1 | Specify a cold-start/cache-warm priming procedure and diagnose agent-view exit 143; output size is state-dependent until then. |
26
+ | `AUD-620-WIN-PROC` | P1 | Add native Windows/Git Bash process-tree measurements for success, timeout and interruption. Do not ship untested Job Object changes from Darwin. |
27
+
28
+ The commercial position is bounded pilots only. Do not claim production CI gating
29
+ or enterprise-scale reliability above roughly 3,000 files while these rows remain
30
+ open. Full evidence is in [`AUDIT-2026-08-31-EXTERNAL-5.9.16.md`](AUDIT-2026-08-31-EXTERNAL-5.9.16.md).
31
+
3
32
  ### External Audit Intake — `AUD-619` re-audit, release 5.9.13
4
33
 
5
34
  The follow-up received 2026-08-28 materially revises the apparent closure of
@@ -5,6 +5,19 @@
5
5
  > `pack assessment` and `pack gate`, and make evidence and safe change the
6
6
  > product surface. This roadmap must not introduce a competing product thesis.
7
7
 
8
+ > **CURRENT UPDATE — release `5.9.16`, external re-audit.** The defective
9
+ > `5.9.15` command surface has been recovered: all nine missing commands are
10
+ > restored and independently invoked, and the prior `/dev/null`, option-parser,
11
+ > validation and baseline regressions are again healthy. Windows `tutorials`
12
+ > manifest parsing fell from more than four minutes to 21.5 seconds, although
13
+ > root analysis still took 4m52.6s because the bottleneck moved to repository
14
+ > context analysis. The reliability gate remains active: independent forks still
15
+ > see silent failures in `risk` with a non-zero limit, `verify`, and Markdown
16
+ > `audit-report`; results for `spring-audit`, `migrate-check`, and `migrate-apply`
17
+ > conflict and are not closed. Keep bounded pilots only until a controlled native
18
+ > Windows 30-run matrix closes the affected commands and process cleanup. The
19
+ > authoritative evidence is in [`AUDIT-2026-08-31-EXTERNAL-5.9.16.md`](AUDIT-2026-08-31-EXTERNAL-5.9.16.md).
20
+
8
21
  > **CURRENT UPDATE — release `5.9.14`, following the external `5.9.3` reconciliation.**
9
22
  > The commercial increment adds stateless context budgets, a reproducible context-cost harness,
10
23
  > source-level migration SARIF and an opt-in workspace entitlement pilot. Advisory behaviour remains
@@ -36,6 +36,20 @@ Run every command from a clean checkout at the intended release commit.
36
36
  The worktree must be clean. Record the commit and branch in the release
37
37
  issue; do not infer either from the version string.
38
38
 
39
+ For every external-audit command, also record the **target** identity before
40
+ running it:
41
+
42
+ ```sh
43
+ pwd
44
+ git status --short
45
+ git rev-parse HEAD
46
+ ```
47
+
48
+ Save the canonical target path, Git state, installed `ask version`, command,
49
+ timeout, exit code and stdout/stderr/output-file byte counts with the result.
50
+ A run from an empty scratch directory is not evidence for the intended
51
+ repository and must be discarded rather than counted as a pass.
52
+
39
53
  2. Build a fresh, isolated artefact.
40
54
 
41
55
  ```sh
@@ -46,16 +46,23 @@ 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.16, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.9.17, `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.16, with release-artifact verification
55
+ the two pack fixes are included in release 5.9.17, with release-artifact verification
56
56
  remaining for detached execution and pack evidence.
57
57
 
58
- ### Reliability contracts in 5.9.16
58
+ ### Reliability contracts in 5.9.17
59
+
60
+ **Failures must be visible.** `risk`, `verify`, `audit-report` and
61
+ `migrate-check` turn unexpected analysis failures into structured
62
+ `EXECUTION_FAILED` output and a non-zero exit, rather than an empty success.
63
+ The release battery includes a repeatable six-command Windows matrix; it records
64
+ exit codes and output sizes, but native Windows evidence remains required before
65
+ closing platform-specific findings.
59
66
 
60
67
  **A deadline the root analysis honours.** `ASK_MAX_ANALYSIS_SECONDS=<seconds>` now
61
68
  stops `ask <repo>` at a measured phase boundary. A run that spends its budget
@@ -260,7 +267,7 @@ pipx install sourcecode # isolated install, no venv needed
260
267
 
261
268
  # Verify
262
269
  ask version
263
- # ask 5.9.16
270
+ # ask 5.9.17
264
271
  ```
265
272
 
266
273
  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.16"
7
+ version = "5.9.17"
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"
@@ -0,0 +1,97 @@
1
+ """Record a repeatable Windows answer-delivery matrix for critical commands."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import json
6
+ import os
7
+ import subprocess
8
+ import sys
9
+ import time
10
+ from pathlib import Path
11
+
12
+
13
+ COMMANDS: tuple[tuple[str, tuple[str, ...], frozenset[int]], ...] = (
14
+ ("risk", ("risk", "--limit", "20"), frozenset({0})),
15
+ # A repository with no declared contracts is deliberately unverified.
16
+ ("verify", ("verify",), frozenset({2})),
17
+ ("audit-report-markdown", ("audit-report", "--format", "markdown"), frozenset({0})),
18
+ ("spring-audit", ("spring-audit", "--compact"), frozenset({0})),
19
+ ("migrate-check", ("migrate-check", "--compact"), frozenset({0})),
20
+ ("migrate-apply", ("migrate-apply",), frozenset({0})),
21
+ )
22
+
23
+
24
+ def _run(target: Path, repetitions: int, timeout: float) -> list[dict[str, object]]:
25
+ records: list[dict[str, object]] = []
26
+ for name, args, expected_codes in COMMANDS:
27
+ for attempt in range(1, repetitions + 1):
28
+ started = time.monotonic()
29
+ try:
30
+ completed = subprocess.run(
31
+ [sys.executable, "-m", "sourcecode", *args, str(target)],
32
+ capture_output=True,
33
+ text=False,
34
+ timeout=timeout,
35
+ check=False,
36
+ )
37
+ record: dict[str, object] = {
38
+ "command": name,
39
+ "attempt": attempt,
40
+ "exit_code": completed.returncode,
41
+ "stdout_bytes": len(completed.stdout),
42
+ "stderr_bytes": len(completed.stderr),
43
+ "elapsed_seconds": round(time.monotonic() - started, 3),
44
+ "timed_out": False,
45
+ }
46
+ if completed.returncode not in expected_codes:
47
+ record["failure"] = f"expected exit code {sorted(expected_codes)}"
48
+ elif not completed.stdout:
49
+ record["failure"] = "command completed without stdout evidence"
50
+ except subprocess.TimeoutExpired as exc:
51
+ record = {
52
+ "command": name,
53
+ "attempt": attempt,
54
+ "exit_code": None,
55
+ "stdout_bytes": len(exc.stdout or b""),
56
+ "stderr_bytes": len(exc.stderr or b""),
57
+ "elapsed_seconds": round(time.monotonic() - started, 3),
58
+ "timed_out": True,
59
+ "failure": f"timed out after {timeout:g}s",
60
+ }
61
+ records.append(record)
62
+ return records
63
+
64
+
65
+ def main() -> int:
66
+ parser = argparse.ArgumentParser()
67
+ parser.add_argument("target", type=Path)
68
+ parser.add_argument("--repetitions", type=int, default=30)
69
+ parser.add_argument("--timeout", type=float, default=120.0)
70
+ parser.add_argument("--output", type=Path, required=True)
71
+ args = parser.parse_args()
72
+ if args.repetitions < 1 or args.timeout <= 0:
73
+ parser.error("--repetitions and --timeout must be positive")
74
+
75
+ target = args.target.resolve()
76
+ payload: dict[str, object] = {
77
+ "schema_version": "ask-windows-reliability-matrix-v1",
78
+ "target": str(target),
79
+ "cwd": os.getcwd(),
80
+ "python": sys.version.split()[0],
81
+ "repetitions": args.repetitions,
82
+ "timeout_seconds": args.timeout,
83
+ "records": _run(target, args.repetitions, args.timeout),
84
+ }
85
+ failures = [record for record in payload["records"] if "failure" in record]
86
+ payload["passed"] = not failures
87
+ args.output.parent.mkdir(parents=True, exist_ok=True)
88
+ args.output.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8")
89
+ if failures:
90
+ print(f"{len(failures)} reliability-matrix run(s) failed; see {args.output}", file=sys.stderr)
91
+ return 1
92
+ print(f"{len(payload['records'])} reliability-matrix runs passed; evidence: {args.output}")
93
+ return 0
94
+
95
+
96
+ if __name__ == "__main__":
97
+ raise SystemExit(main())
@@ -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.16"
7
+ __version__ = "5.9.17"
@@ -3015,6 +3015,26 @@ def _require_answer_delivery(command: str) -> None:
3015
3015
  _ANSWER_REQUIRED_BY = command
3016
3016
 
3017
3017
 
3018
+ def _analysis_failed(command: str, phase: str, exc: Exception) -> NoReturn:
3019
+ """Fail a costly command with evidence instead of an empty successful exit.
3020
+
3021
+ The Windows worker failure reported in AUD-620 can surface below the
3022
+ command-specific exception types. These commands are consumed by CI, so an
3023
+ unexpected analysis exception must retain a machine-readable cause and a
3024
+ non-zero process status rather than relying on a framework traceback.
3025
+ """
3026
+ _emit_error_json(
3027
+ EXECUTION_FAILED_CODE,
3028
+ f"{command} failed while {phase}.",
3029
+ command=command,
3030
+ phase=phase,
3031
+ exception_type=type(exc).__name__,
3032
+ hint="Retry once; if it persists, retain this error envelope and the run record.",
3033
+ expected="a completed analysis with a parseable answer",
3034
+ )
3035
+ raise typer.Exit(code=1) from exc
3036
+
3037
+
3018
3038
  def _fail_on_missing_required_answer(exit_code: object) -> None:
3019
3039
  """Turn a silent successful composed run into a typed failure (C3-122)."""
3020
3040
  if exit_code not in (0, None) or _OUTPUT_DELIVERED or not _ANSWER_REQUIRED_BY:
@@ -6430,20 +6450,22 @@ def main(
6430
6450
  # name the broader work that follows instead of leaving a completed stage on
6431
6451
  # screen.
6432
6452
  _progress.update("analyzing repository context")
6453
+ # Graph, documentation and metrics all analyse the root-only portion of the
6454
+ # same tree. Pruning a large monorepo is itself a full traversal, so derive
6455
+ # that view once instead of repeating it for every optional analyzer.
6456
+ root_context_tree = (
6457
+ prune_workspace_paths(
6458
+ file_tree,
6459
+ [workspace.path for workspace in workspace_analysis.workspaces],
6460
+ )
6461
+ if workspace_analysis.workspaces
6462
+ else file_tree
6463
+ )
6433
6464
  module_graphs = []
6434
6465
  if graph_analyzer is not None:
6435
- root_graph_tree = (
6436
- prune_workspace_paths(
6437
- file_tree,
6438
- [workspace.path for workspace in workspace_analysis.workspaces],
6439
- )
6440
- if workspace_analysis.workspaces
6441
- else file_tree
6442
- )
6443
6466
  module_graphs.append(
6444
6467
  graph_analyzer.analyze(
6445
- target,
6446
- root_graph_tree,
6468
+ target, root_context_tree,
6447
6469
  detail="full",
6448
6470
  entry_points=entry_points,
6449
6471
  )
@@ -6451,17 +6473,8 @@ def main(
6451
6473
  doc_records: list[DocRecord] = []
6452
6474
  doc_summaries: list[DocSummary] = []
6453
6475
  if doc_analyzer is not None:
6454
- root_doc_tree = (
6455
- prune_workspace_paths(
6456
- file_tree,
6457
- [workspace.path for workspace in workspace_analysis.workspaces],
6458
- )
6459
- if workspace_analysis.workspaces
6460
- else file_tree
6461
- )
6462
6476
  root_doc_records, root_doc_summary = doc_analyzer.analyze(
6463
- target,
6464
- root_doc_tree,
6477
+ target, root_context_tree,
6465
6478
  depth=docs_depth_typed,
6466
6479
  entry_points=[ep.path for ep in entry_points], # LQN-03
6467
6480
  )
@@ -6471,21 +6484,16 @@ def main(
6471
6484
  file_metrics_records: list[Any] = []
6472
6485
  metrics_summaries = []
6473
6486
  if metrics_analyzer is not None:
6474
- root_metrics_tree = (
6475
- prune_workspace_paths(
6476
- file_tree,
6477
- [workspace.path for workspace in workspace_analysis.workspaces],
6478
- )
6479
- if workspace_analysis.workspaces
6480
- else file_tree
6481
- )
6482
6487
  root_file_metrics, root_metrics_summary = metrics_analyzer.analyze(
6483
- target,
6484
- root_metrics_tree,
6488
+ target, root_context_tree,
6485
6489
  )
6486
6490
  file_metrics_records.extend(root_file_metrics)
6487
6491
  metrics_summaries.append(root_metrics_summary)
6488
6492
 
6493
+ # Semantic analysis follows this loop. Keep each already filtered workspace
6494
+ # tree so it does not walk the same files a second time when --semantics is
6495
+ # enabled; on large monorepos that duplicated the context phase's I/O.
6496
+ workspace_trees: dict[str, Any] = {}
6489
6497
  for workspace in workspace_analysis.workspaces:
6490
6498
  workspace_root = target / workspace.path
6491
6499
  if not workspace_root.exists() or not workspace_root.is_dir():
@@ -6502,6 +6510,7 @@ def main(
6502
6510
  _ws_topology = RepoClassifier().classify(workspace_root)
6503
6511
  workspace_scanner = AdaptiveScanner(workspace_root, topology=_ws_topology, base_depth=depth)
6504
6512
  workspace_tree = filter_sensitive_files(workspace_scanner.scan_tree(), redactor)
6513
+ workspace_trees[workspace.path] = workspace_tree
6505
6514
  workspace_manifests = workspace_scanner.find_manifests()
6506
6515
  workspace_stacks, workspace_entry_points, _ = detector.detect(
6507
6516
  workspace_root,
@@ -6672,14 +6681,15 @@ def main(
6672
6681
  all_sem_links: list[Any] = []
6673
6682
  all_sem_summaries: list[Any] = []
6674
6683
  for ws in workspace_analysis.workspaces:
6684
+ workspace_tree = workspace_trees.get(ws.path)
6685
+ if workspace_tree is None:
6686
+ # The general pass deliberately skipped this workspace (for
6687
+ # example because --exclude named it), so semantics must not
6688
+ # reintroduce it through a fresh scan.
6689
+ continue
6675
6690
  ws_calls, ws_syms, ws_links, ws_sum = semantic_analyzer.analyze(
6676
6691
  target / ws.path,
6677
- (
6678
- filter_sensitive_files(
6679
- AdaptiveScanner(target / ws.path, base_depth=depth).scan_tree(),
6680
- redactor,
6681
- )
6682
- ),
6692
+ workspace_tree,
6683
6693
  workspace=ws.path,
6684
6694
  )
6685
6695
  # Prefix paths to repo-root-relative (sm.file_paths uses root-relative)
@@ -13412,6 +13422,9 @@ def verify_cmd(
13412
13422
  hint=f"--fail-on accepts: {' | '.join(_vr.FAIL_ON_CHOICES)}.",
13413
13423
  )
13414
13424
  raise typer.Exit(code=2 if ci else 0)
13425
+ except Exception as exc:
13426
+ _prog.stop()
13427
+ _analysis_failed("verify", "verifying contracts", exc)
13415
13428
  _prog.stop()
13416
13429
 
13417
13430
  payload = report.to_dict()
@@ -13678,6 +13691,8 @@ def risk_cmd(
13678
13691
  ci=ci,
13679
13692
  allow_partial=allow_partial,
13680
13693
  )
13694
+ except Exception as exc:
13695
+ _analysis_failed("risk", phase, exc)
13681
13696
  finally:
13682
13697
  _prog.stop()
13683
13698
  if table:
@@ -14179,6 +14194,8 @@ def audit_report_cmd(
14179
14194
  checkpoint=_run.checkpoint,
14180
14195
  partial_status=lambda **cut: _run.status(_WHY_BUDGET, **cut),
14181
14196
  )
14197
+ except Exception as exc:
14198
+ _analysis_failed("audit-report", _phase, exc)
14182
14199
  finally:
14183
14200
  _prog.stop()
14184
14201
  output = render_markdown(data) if fmt == "markdown" else _serialize_dict(data, fmt)
@@ -15579,6 +15596,8 @@ def migrate_check_cmd(
15579
15596
  timings=_mig_timings,
15580
15597
  )
15581
15598
  report.include_hygiene = include_hygiene
15599
+ except Exception as exc:
15600
+ _analysis_failed("migrate-check", phase, exc)
15582
15601
  finally:
15583
15602
  _prog.finish()
15584
15603
  if blast_radius:
File without changes
File without changes
File without changes