sourcecode 5.9.12__tar.gz → 5.9.14__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 (453) hide show
  1. sourcecode-5.9.14/.github/workflows/windows-regression.yml +66 -0
  2. {sourcecode-5.9.12 → sourcecode-5.9.14}/CHANGELOG.md +32 -0
  3. {sourcecode-5.9.12 → sourcecode-5.9.14}/PKG-INFO +5 -5
  4. {sourcecode-5.9.12 → sourcecode-5.9.14}/README.md +4 -4
  5. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/DEFECT-LEDGER.md +48 -0
  6. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/DEVELOPMENT-ROADMAP.md +75 -0
  7. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/EXECUTIVE-ROADMAP.md +26 -1
  8. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/MANUAL-USUARIO.md +3 -3
  9. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/PRODUCT-ROUTE.md +12 -9
  10. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/USER_GUIDE.md +4 -4
  11. {sourcecode-5.9.12 → sourcecode-5.9.14}/pyproject.toml +1 -1
  12. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cli.py +88 -7
  14. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/parallel.py +9 -0
  15. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/release_info.py +1 -1
  16. {sourcecode-5.9.12 → sourcecode-5.9.14}/.github/workflows/build-windows.yml +0 -0
  17. {sourcecode-5.9.12 → sourcecode-5.9.14}/.github/workflows/perf-gate.yml +0 -0
  18. {sourcecode-5.9.12 → sourcecode-5.9.14}/.github/workflows/windows-battery.yml +0 -0
  19. {sourcecode-5.9.12 → sourcecode-5.9.14}/.gitignore +0 -0
  20. {sourcecode-5.9.12 → sourcecode-5.9.14}/.ruff.toml +0 -0
  21. {sourcecode-5.9.12 → sourcecode-5.9.14}/CLAUDE.md +0 -0
  22. {sourcecode-5.9.12 → sourcecode-5.9.14}/CODE_OF_CONDUCT.md +0 -0
  23. {sourcecode-5.9.12 → sourcecode-5.9.14}/CONTRIBUTING.md +0 -0
  24. {sourcecode-5.9.12 → sourcecode-5.9.14}/LICENSE +0 -0
  25. {sourcecode-5.9.12 → sourcecode-5.9.14}/NOTICE +0 -0
  26. {sourcecode-5.9.12 → sourcecode-5.9.14}/SECURITY.md +0 -0
  27. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  28. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  29. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  30. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  31. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  32. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  33. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  34. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  35. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  36. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  37. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  38. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  39. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  40. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  41. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  42. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  43. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  44. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  45. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  46. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/CACHE.md +0 -0
  47. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/COMMERCIAL-OFFER.md +0 -0
  48. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/CUSTOMER-VALIDATION.md +0 -0
  49. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/DEMO-5MIN.md +0 -0
  50. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  51. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/EXECUTION-PLAN-12MO.md +0 -0
  52. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/MODERNIZATION.md +0 -0
  53. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/PRODUCT_AUDIT.md +0 -0
  54. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/PRODUCT_IDENTITY.md +0 -0
  55. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/PRODUCT_TIERS.md +0 -0
  56. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/RC1-CHECKLIST.md +0 -0
  57. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/RELEASE-CHECKLIST.md +0 -0
  58. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  59. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  60. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  61. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-assessment-report.md +0 -0
  62. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  63. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  64. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  65. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  66. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  67. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  68. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  69. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  70. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  71. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  72. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  73. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  74. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  75. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  76. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  77. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  78. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  79. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  80. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  81. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  82. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  83. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  84. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0006-performance-harness.md +0 -0
  85. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  86. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  87. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/consumer-disposition-inventory.md +0 -0
  88. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/overview.md +0 -0
  89. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/product-architecture-review.md +0 -0
  90. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/product-strategy-layering.md +0 -0
  91. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  92. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/architecture/semantic-ir-roadmap.md +0 -0
  93. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/baseline-ci.yml +0 -0
  94. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/commercial-pipeline-audit.md +0 -0
  95. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/contracts-ci.yml +0 -0
  96. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/contracts.md +0 -0
  97. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  98. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  99. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  100. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  101. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  102. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  103. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  104. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  105. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/licensing-schema.md +0 -0
  106. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/migrate-check.md +0 -0
  107. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/pack-gate-github-actions.yml +0 -0
  108. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/pack-gate-gitlab.yml +0 -0
  109. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/README.md +0 -0
  110. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/REGRESSION-GATE.md +0 -0
  111. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  112. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  113. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  114. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  115. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  116. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  117. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  118. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  119. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  120. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  121. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  122. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  123. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  124. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  125. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  126. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  127. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  128. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  129. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  130. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  131. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  132. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  133. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  134. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  135. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  136. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  137. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  138. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  139. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  140. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  141. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  142. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  143. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  144. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  145. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  146. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  147. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  148. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  149. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  150. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  151. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  152. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  153. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/README.md +0 -0
  154. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  155. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  156. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  157. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  158. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  159. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  160. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/baselines/reference-best/README.md +0 -0
  161. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  162. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/posture.md +0 -0
  163. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/privacy.md +0 -0
  164. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/pro-experience-audit.md +0 -0
  165. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/schema.md +0 -0
  166. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/spec/envelope-v1.md +0 -0
  167. {sourcecode-5.9.12 → sourcecode-5.9.14}/docs/spring-audit-ci.yml +0 -0
  168. {sourcecode-5.9.12 → sourcecode-5.9.14}/hatch_build.py +0 -0
  169. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/compare_integration_engines.py +0 -0
  170. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/context_cost_harness.py +0 -0
  171. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/customer_smoke_test.sh +0 -0
  172. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/generate_jdk_exports.py +0 -0
  173. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/perf_gate.py +0 -0
  174. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/perf_harness.py +0 -0
  175. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/sync_gate_anchors.py +0 -0
  176. {sourcecode-5.9.12 → sourcecode-5.9.14}/scripts/test_fast.sh +0 -0
  177. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/__main__.py +0 -0
  178. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/access_drift.py +0 -0
  179. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/adaptive_scanner.py +0 -0
  180. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/analysis_budget.py +0 -0
  181. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/answer_bounds.py +0 -0
  182. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/archetype.py +0 -0
  183. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/architectural_baseline.py +0 -0
  184. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/architectural_delta.py +0 -0
  185. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/architecture_analyzer.py +0 -0
  186. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/architecture_summary.py +0 -0
  187. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/ast_extractor.py +0 -0
  188. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/audit_clusters.py +0 -0
  189. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/audit_recipe.py +0 -0
  190. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/audit_report.py +0 -0
  191. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/audit_since.py +0 -0
  192. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/audit_verify.py +0 -0
  193. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/baseline_attestation.py +0 -0
  194. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/baseline_autocapture.py +0 -0
  195. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/breaking_changes.py +0 -0
  196. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/build_modules.py +0 -0
  197. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/build_stamp.py +0 -0
  198. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/bundled_docs.py +0 -0
  199. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/c4_render.py +0 -0
  200. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cache.py +0 -0
  201. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cache_model.py +0 -0
  202. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cache_observation.py +0 -0
  203. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/call_surface.py +0 -0
  204. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/caller_metrics.py +0 -0
  205. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/caller_reach.py +0 -0
  206. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/canonical_ir.py +0 -0
  207. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/chain_rules.py +0 -0
  208. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/change_plan.py +0 -0
  209. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/ci_output.py +0 -0
  210. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cir_graphs.py +0 -0
  211. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/classifier.py +0 -0
  212. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/client_calls.py +0 -0
  213. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/code_notes_analyzer.py +0 -0
  214. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/compare.py +0 -0
  215. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/confidence_analyzer.py +0 -0
  216. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/constraint_diff.py +0 -0
  217. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/consumer_join.py +0 -0
  218. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/container_wiring.py +0 -0
  219. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/context_cache.py +0 -0
  220. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/context_graph.py +0 -0
  221. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/context_scorer.py +0 -0
  222. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/context_summarizer.py +0 -0
  223. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/contract_diff.py +0 -0
  224. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/contract_init.py +0 -0
  225. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/contract_model.py +0 -0
  226. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/contract_pipeline.py +0 -0
  227. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/coverage_parser.py +0 -0
  228. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cve_feed.py +0 -0
  229. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/cve_reachability.py +0 -0
  230. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/data_exposure.py +0 -0
  231. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/data_labels.py +0 -0
  232. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/declarations.py +0 -0
  233. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/defect_classes/__init__.py +0 -0
  234. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/defect_classes/registry.json +0 -0
  235. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/defect_identity.py +0 -0
  236. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/degradation.py +0 -0
  237. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/dependency_analyzer.py +0 -0
  238. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/deployment_prefix.py +0 -0
  239. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detach.py +0 -0
  240. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/__init__.py +0 -0
  241. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/base.py +0 -0
  242. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/csproj_parser.py +0 -0
  243. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/dart.py +0 -0
  244. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/dotnet.py +0 -0
  245. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/elixir.py +0 -0
  246. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/go.py +0 -0
  247. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/heuristic.py +0 -0
  248. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/hybrid.py +0 -0
  249. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/java.py +0 -0
  250. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/jvm_ext.py +0 -0
  251. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/nodejs.py +0 -0
  252. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/parsers.py +0 -0
  253. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/php.py +0 -0
  254. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/project.py +0 -0
  255. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/python.py +0 -0
  256. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/ruby.py +0 -0
  257. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/rust.py +0 -0
  258. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/systems.py +0 -0
  259. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/terraform.py +0 -0
  260. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/detectors/tooling.py +0 -0
  261. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/doc_analyzer.py +0 -0
  262. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/dynamic_argument_surface.py +0 -0
  263. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/empty_reach.py +0 -0
  264. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/endpoint_disposition.py +0 -0
  265. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/endpoint_literals.py +0 -0
  266. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/endpoint_metrics.py +0 -0
  267. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/entrypoint_classifier.py +0 -0
  268. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/env_analyzer.py +0 -0
  269. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/envelope.py +0 -0
  270. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/environment_resolution.py +0 -0
  271. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/error_schema.py +0 -0
  272. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/evidence_provider.py +0 -0
  273. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/execution_plan.py +0 -0
  274. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/explain.py +0 -0
  275. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/explain_endpoint.py +0 -0
  276. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/facts/__init__.py +0 -0
  277. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/facts/registry.json +0 -0
  278. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/field_deprecations.py +0 -0
  279. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/file_chunker.py +0 -0
  280. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/file_classifier.py +0 -0
  281. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/filter_surface.py +0 -0
  282. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/findings_baseline.py +0 -0
  283. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/format_contract.py +0 -0
  284. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/fqn_utils.py +0 -0
  285. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/functional_routes.py +0 -0
  286. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/gate_anchors.py +0 -0
  287. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/git_analyzer.py +0 -0
  288. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/git_checkout.py +0 -0
  289. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/github_diff.py +0 -0
  290. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/graph_analyzer.py +0 -0
  291. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/graph_evidence.py +0 -0
  292. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/hibernate_strat.py +0 -0
  293. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/identity_fallback.py +0 -0
  294. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/integration_coordinates.py +0 -0
  295. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/intent_router.py +0 -0
  296. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/jdk_exports.py +0 -0
  297. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/license.py +0 -0
  298. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/manifest_cache.py +0 -0
  299. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/__init__.py +0 -0
  300. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/dependency_import.py +0 -0
  301. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  302. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  303. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  304. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  305. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  306. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/orchestrator.py +0 -0
  307. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/registry.py +0 -0
  308. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/runner.py +0 -0
  309. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp/server.py +0 -0
  310. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/mcp_nudge.py +0 -0
  311. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/metrics_analyzer.py +0 -0
  312. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/migrate_check.py +0 -0
  313. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/migration_apply.py +0 -0
  314. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/migration_blast.py +0 -0
  315. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/non_coverage.py +0 -0
  316. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/openapi_surface.py +0 -0
  317. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/openrewrite_recipe.py +0 -0
  318. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/output_bounds.py +0 -0
  319. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/output_budget.py +0 -0
  320. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/output_ceiling.py +0 -0
  321. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/output_encoding.py +0 -0
  322. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/output_sink.py +0 -0
  323. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/pack_manifest.py +0 -0
  324. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/packs.py +0 -0
  325. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/parse_cache.py +0 -0
  326. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/partial_contract.py +0 -0
  327. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/path_admission.py +0 -0
  328. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/path_display.py +0 -0
  329. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/path_filters.py +0 -0
  330. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/perf.py +0 -0
  331. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/phased_run.py +0 -0
  332. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/pipe_contract.py +0 -0
  333. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/posture.py +0 -0
  334. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/pr_comment_renderer.py +0 -0
  335. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/pr_impact.py +0 -0
  336. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/pr_risk.py +0 -0
  337. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/prepare_context.py +0 -0
  338. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/product_info.py +0 -0
  339. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/progress.py +0 -0
  340. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/provenance.py +0 -0
  341. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/ranking_engine.py +0 -0
  342. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/readiness_timeline.py +0 -0
  343. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/readonly.py +0 -0
  344. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/reconciliation.py +0 -0
  345. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/redactor.py +0 -0
  346. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/reference_facts.py +0 -0
  347. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/regress.py +0 -0
  348. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/regulatory_pack.py +0 -0
  349. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/relevance_scorer.py +0 -0
  350. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/remediation_diff.py +0 -0
  351. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/remediation_flow.py +0 -0
  352. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/remediation_report.py +0 -0
  353. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/remedies.py +0 -0
  354. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/rename_refactor.py +0 -0
  355. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/repo_classifier.py +0 -0
  356. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/repository_ir.py +0 -0
  357. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/resource_budget.py +0 -0
  358. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/__init__.py +0 -0
  359. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/context.py +0 -0
  360. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/errors.py +0 -0
  361. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/executor.py +0 -0
  362. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/planner.py +0 -0
  363. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/query.py +0 -0
  364. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/request.py +0 -0
  365. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/resolution.py +0 -0
  366. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/result.py +0 -0
  367. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/retriever.py +0 -0
  368. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/runtime.py +0 -0
  369. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps.py +0 -0
  370. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  371. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_graph.py +0 -0
  372. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_impact.py +0 -0
  373. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_intf.py +0 -0
  374. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_struct.py +0 -0
  375. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  376. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/ris.py +0 -0
  377. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/risk.py +0 -0
  378. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/risk_model.py +0 -0
  379. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/rule_catalog.py +0 -0
  380. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/rule_pass.py +0 -0
  381. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/runs.py +0 -0
  382. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/runtime_classifier.py +0 -0
  383. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/sarif.py +0 -0
  384. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/sarif_emit.py +0 -0
  385. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/scanner.py +0 -0
  386. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schema.py +0 -0
  387. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schema_producers.py +0 -0
  388. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schema_registry.py +0 -0
  389. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  390. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  391. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  392. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  393. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  394. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  395. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  396. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/security_chain.py +0 -0
  397. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/security_config.py +0 -0
  398. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/security_config_scan.py +0 -0
  399. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/security_posture.py +0 -0
  400. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/selection_contract.py +0 -0
  401. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/self_audit.py +0 -0
  402. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/selftest.py +0 -0
  403. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/semantic_analyzer.py +0 -0
  404. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/semantic_impact_engine.py +0 -0
  405. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/semantic_integration_engine.py +0 -0
  406. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/semantic_services.py +0 -0
  407. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/serializer.py +0 -0
  408. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/servlet_surface.py +0 -0
  409. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/source_text.py +0 -0
  410. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_event_topology.py +0 -0
  411. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_findings.py +0 -0
  412. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_impact.py +0 -0
  413. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_model.py +0 -0
  414. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_profiles.py +0 -0
  415. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_properties.py +0 -0
  416. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_security_audit.py +0 -0
  417. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_semantic.py +0 -0
  418. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/spring_tx_analyzer.py +0 -0
  419. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/sql_taint.py +0 -0
  420. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/summarizer.py +0 -0
  421. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/target_admission.py +0 -0
  422. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/__init__.py +0 -0
  423. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/config.py +0 -0
  424. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/consent.py +0 -0
  425. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/events.py +0 -0
  426. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/filters.py +0 -0
  427. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/telemetry/transport.py +0 -0
  428. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/test_gap_ranking.py +0 -0
  429. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/test_sources.py +0 -0
  430. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/text_input.py +0 -0
  431. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/timeline.py +0 -0
  432. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/timeline_cache.py +0 -0
  433. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/token_estimate.py +0 -0
  434. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/tree_utils.py +0 -0
  435. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/type_usage_surface.py +0 -0
  436. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/validation_inference.py +0 -0
  437. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/validation_surface.py +0 -0
  438. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/verify_edit.py +0 -0
  439. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/verify_repo.py +0 -0
  440. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/verify_rules.py +0 -0
  441. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/version_check.py +0 -0
  442. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/vex.py +0 -0
  443. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/waivers.py +0 -0
  444. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/watch_loop.py +0 -0
  445. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/wired_surface.py +0 -0
  446. {sourcecode-5.9.12 → sourcecode-5.9.14}/src/sourcecode/workspace.py +0 -0
  447. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/functions/README.md +0 -0
  448. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/functions/get-license/index.ts +0 -0
  449. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  450. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/functions/telemetry/index.ts +0 -0
  451. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/sql/license_event_ordering.sql +0 -0
  452. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/sql/licensing_schema.sql +0 -0
  453. {sourcecode-5.9.12 → sourcecode-5.9.14}/supabase/sql/telemetry_events.sql +0 -0
@@ -0,0 +1,66 @@
1
+ name: Windows CLI regressions
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ # S-10 / AUD-591-A10: the product declares Windows support, but Linux CI cannot
10
+ # observe Git Bash rewriting a route argument such as `/owners` to an absolute
11
+ # Windows path. Keep both the normal Python regression suite and the actual
12
+ # Git Bash invocation on a Windows runner.
13
+ jobs:
14
+ windows-cli:
15
+ runs-on: windows-latest
16
+ timeout-minutes: 15
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.11"
24
+
25
+ - name: Install test dependencies
26
+ shell: pwsh
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ python -m pip install -e ".[dev]"
30
+
31
+ - name: Run Windows encoding and route-prefix regressions
32
+ shell: bash
33
+ run: |
34
+ set -euo pipefail
35
+ python -m pytest -q -n 0 \
36
+ tests/test_encoding_regression.py \
37
+ tests/test_output_encoding.py \
38
+ tests/test_path_prefix_selection.py
39
+
40
+ - name: Prove Git Bash cannot turn a route filter into a clean zero
41
+ shell: bash
42
+ run: |
43
+ set -euo pipefail
44
+ fixture="$RUNNER_TEMP/ask-prefix-fixture"
45
+ mkdir -p "$fixture/src/main/java/com/acme"
46
+ cat > "$fixture/src/main/java/com/acme/OwnerController.java" <<'EOF'
47
+ package com.acme;
48
+ import org.springframework.web.bind.annotation.*;
49
+ @RestController
50
+ @RequestMapping("/owners")
51
+ public class OwnerController {
52
+ @GetMapping("/list") public String list() { return "ok"; }
53
+ }
54
+ EOF
55
+
56
+ # Do not set MSYS_NO_PATHCONV here: this is the shell transformation
57
+ # the guard must diagnose. A successful empty result is a false
58
+ # negative; reject it and require the actionable Git Bash hint.
59
+ set +e
60
+ python run_cli.py endpoints "$fixture" --path-prefix /owners --format json \
61
+ > "$RUNNER_TEMP/ask-prefix.stdout" \
62
+ 2> "$RUNNER_TEMP/ask-prefix.stderr"
63
+ status=$?
64
+ set -e
65
+ test "$status" -ne 0
66
+ grep -F "Git Bash" "$RUNNER_TEMP/ask-prefix.stderr"
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.14] — 2026-08-30
4
+
5
+ *AUD-619 intake, Windows reliability follow-up and release alignment.*
6
+
7
+ **Changed**
8
+
9
+ - Integrated the latest `master` fixes for Windows Git Bash routing, response
10
+ metadata preservation and nonbinding analysis-budget disclosure.
11
+ - Preserved the audit boundary: native Windows repetition, cache-write lifecycle,
12
+ review-pr normalization and process teardown remain verification work.
13
+
14
+ ## [5.9.13] — 2026-08-28
15
+
16
+ *AUD-618 remediation and release-alignment patch.*
17
+
18
+ **Fixed**
19
+
20
+ - Windows now selects the existing sequential parse path instead of creating a
21
+ `ProcessPoolExecutor` whose spawned workers can fail to duplicate IPC handles.
22
+ The fallback preserves the same IR and prevents the observed silent/hanging
23
+ worker-start path.
24
+ - A missing bare token now explains when ASK interpreted it as an implicit
25
+ repository path, while close command spellings retain nearest-command hints.
26
+ - Spanish user documentation no longer states a false fixed token size for
27
+ compact context.
28
+
29
+ **Verification boundary**
30
+
31
+ - TeaVM validations cover risk delivery, migration planning and non-mutation.
32
+ Native Windows/pipx re-audit remains required for the worker, scale and
33
+ process-lifetime findings; this release does not claim that external evidence.
34
+
3
35
  ## [5.9.12] — 2026-08-28
4
36
 
5
37
  *Release-alignment patch release after the `AUD-617` regression battery.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.12
3
+ Version: 5.9.14
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.12-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.14-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.12 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.14 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.12 also carries the boundary-contract hardening: missing consumer repositories,
236
+ Release 5.9.14 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.12 — and, on a build that has aged,
269
+ ask version # ask 5.9.14 — 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.12-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.14-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.12 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.14 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.12 also carries the boundary-contract hardening: missing consumer repositories,
187
+ Release 5.9.14 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.12 — and, on a build that has aged,
220
+ ask version # ask 5.9.14 — and, on a build that has aged,
221
221
  # how many releases have probably shipped since
222
222
  ```
223
223
 
@@ -14,6 +14,54 @@ 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-619`
18
+
19
+ **Re-audit of release `5.9.13`, received 2026-08-28.** The previous apparent
20
+ closure of Bug R is withdrawn: identical Windows invocations failed five times and
21
+ then succeeded once, exposing a high-frequency race rather than a binary version
22
+ state. The score is 6.0/10. The decision remains **patch forward**, with a minimum
23
+ 30-run per-command closure bar.
24
+
25
+ | ID | Severity | Status | Evidence and required closure |
26
+ |---|---:|---|---|
27
+ | `AUD-619-R` | Critical maximum | **open, P0** | `migrate-check` failed 5/6 identical runs; `risk`, `verify`, `audit-report` and `migrate-apply` also remain silent or hang. The known mechanism is Windows `spawn`/`DuplicateHandle` followed by an unbounded wait. Implement deterministic fallback or fail-fast bounded worker handling, then run >=30 Windows/pipx repetitions per affected command. |
28
+ | `AUD-619-CACHE-WRITE` | High | **open, P1** | `tutorials` produced complete 21.7 KB output before a further minute in `building cache entry`. Profile serialization, filesystem and lock costs and separate answer delivery from post-delivery cache work. |
29
+ | `AUD-619-REVIEW-PR` | High | **open, P1** | One of seven runs on a valid Git repository returned lowercase `no_git_repo`; six returned canonical `NO_DIFF_SOURCE`. Find and normalize the nondeterministic fallback. |
30
+ | `AUD-619-WIN-PROC` | Medium | **open, platform-blocked** | Root `--agent` wrote valid 41,336-byte JSON but stayed alive to an external timeout; three descendants remained. Validate native Windows teardown and Job Object lifetime. |
31
+ | `AUD-619-I` | High | **re-opened for comparable measurement** | Compact sizes differed with RIS state: 3,496 bytes cold and 31,260 bytes after partial warm. Publish a reproducible priming sequence before deciding the contract. |
32
+ | `AUD-619-7` | Medium | **partially fixed** | Ambiguity is explained; suggestions remain correctly conditional on a close command candidate. |
33
+ | `AUD-619-WATCH` | Low | **closed/no-repro** | Clean small-repository run completed in 0.526s. |
34
+
35
+ `audit-report --from-risk` produced a valid 156 KB report, confirming that report
36
+ rendering is healthy when the risk computation is bypassed. Preserve the prior Q/E/F/P
37
+ and command-family closures. Commercial positioning remains bounded pilots only at
38
+ the provisional `$25-35/developer/month` hypothesis.
39
+
40
+ ## Current Synchronization — External Audit `AUD-618`
41
+
42
+ **Re-audit of release `5.9.12`, received 2026-08-28.** The score improved modestly
43
+ from 6.0/10 to 6.3/10. Two of six Bug-R commands recovered, but `risk`, `verify`,
44
+ `audit-report` and `migrate-apply` remain unusable on the auditor's Windows corpus;
45
+ `risk` now waits indefinitely rather than failing quickly. The decision is **patch
46
+ forward, not rollback**: the release contains verified fixes and the failure is
47
+ localised to the shared Windows worker/composer path.
48
+
49
+ | ID | Severity | Status | Evidence and required closure |
50
+ |---|---:|---|---|
51
+ | `AUD-618-R` | Critical maximum | **open, P0** | `verify` captured 12 identical `PermissionError: [WinError 5]` failures in `multiprocessing/reduction.py:131` during `_winapi.DuplicateHandle` worker startup. `spring-audit` 3/3 and `migrate-check` 7/7 recovered; `verify` 6/6, `audit-report` in three formats, and `migrate-apply` 4/4 remain silent. `risk --limit 5/20` hangs in `composing risk factors / reading HTTP-input query sinks`; `risk --limit 0` is healthy. Add pool fallback or structured `WORKER_POOL_START_FAILED`, bounded joins and a matrix covering output, detach and formats. |
52
+ | `AUD-618-TUTORIALS` | Critical | **open, P1** | Native Windows root compact was observed at 6m20.1s/exit 124, but a later flush produced valid 21.7 KB JSON. Treat as extreme latency pending reproduction, publish the size envelope and remeasure on Windows. |
53
+ | `AUD-618-MIGRATE-APPLY` | High | **open, P1** | Plan mode remains exit 0 with zero bytes and no output file, 4/4. The `risk -o` to `audit-report --from-risk` mitigation is blocked by the producer failure. Emit a plan or `nothing_to_do`; prove non-mutation. |
54
+ | `AUD-618-I` | High | **open, P1** | `cold-start --compact` emits 88,265-89,139 bytes, about 22K estimated tokens, despite the `~10K` help promise. Enforce a ceiling or correct the contract, then add a size regression. |
55
+ | `AUD-618-7` | Medium | **open, P2** | Unknown command tokens are indistinguishable from missing implicit paths and receive no nearest-command suggestion. Add command admission before path fallback. |
56
+ | `AUD-618-WIN-PROC` | Medium | **open, platform-blocked** | Windows timeout can leave `ask.exe` descendants alive. Requires native Windows/Git Bash process-tree evidence and safe Job Object/equivalent teardown. |
57
+ | `AUD-618-WATCH` | Low | **open, unconfirmed** | One 42.8s `watch --once` sample after heavy work; clean-session reproduction required. |
58
+
59
+ The audit reconfirms Q and E as fixed, the root pipeline as unaffected, and the prior
60
+ F/P/C/#14/D/#9/G/M and other command closures. Commercially, retain bounded pilots and
61
+ a provisional `$25-35/developer/month` hypothesis; do not market annual reliability,
62
+ production CI gating or enterprise scale above roughly 3,000 files while the P0/P1 rows
63
+ remain open.
64
+
17
65
  ## Current Synchronization — External Audit `AUD-617`
18
66
 
19
67
  **Re-audit of release `5.9.11`, received 2026-08-28.** The external battery covered only
@@ -1,5 +1,80 @@
1
1
  # ASK — Development Roadmap
2
2
 
3
+ ### External Audit Intake — `AUD-619` re-audit, release 5.9.13
4
+
5
+ The follow-up received 2026-08-28 materially revises the apparent closure of
6
+ `AUD-618-R`. Across repeated Windows runs, the same invocation can fail silently
7
+ five times and succeed on the sixth; the observed failure rate is approximately
8
+ 50-90% depending on command. Small 3-10 run samples are therefore insufficient
9
+ to label the defect fixed. The score was 6.0/10, down from 6.3/10, not because a
10
+ code regression is proven between releases but because the reliability risk is
11
+ now better measured.
12
+
13
+ **Engineering decision: patch forward from 5.9.13; do not roll back.** The audit
14
+ confirms that the regression is a high-frequency race, not a stable version flag,
15
+ and that `audit-report --from-risk` can produce a valid 156 KB report. Rollback
16
+ would not remove the race and would discard verified fixes. The closure bar is now
17
+ at least 30 consecutive invocations per affected command, with output, exit status,
18
+ timeout and error-channel evidence captured.
19
+
20
+ | ID | Severity | Status | Finding, evidence and required closure |
21
+ |---|---:|---|---|
22
+ | AUD-619-R | Critical maximum / race regression | **Open, P0** | `migrate-check` failed 5/6 identical runs and then succeeded with 28,249 bytes; `risk --limit 5/20`, `spring-audit --compact`, `verify`, `audit-report` and `migrate-apply` remain intermittently silent or hanging. The two symptoms are fast exit 0/zero bytes and an indefinite wait in `composing risk factors`, consistent with Windows `spawn`/`DuplicateHandle` failure followed by an unbounded future/join wait. The current Darwin fallback is not sufficient evidence for the auditor's Windows artefact. Add a deterministic single-process/thread fallback or fail-fast bounded pool startup, bound every join/get, and run >=30 consecutive Windows/pipx tests per command and output mode. |
23
+ | AUD-619-CACHE-WRITE | High / performance and lifecycle | **Open, P1** | On `tutorials` (24,073 files), root compact produced the complete 21.7 KB JSON before spending another minute in `building cache entry (the answer above is complete)`. Profile core size, serialization, filesystem writes and cache locking; publish phase timings and ensure the answer process exits after delivery or reports post-delivery work separately. |
24
+ | AUD-619-REVIEW-PR | High / nondeterministic error | **Open, P1** | `review-pr` returned a false `no_git_repo` error once in 7 runs on a confirmed Git repository; six runs correctly returned `NO_DIFF_SOURCE`. Trace the fallback that emits lowercase `no_git_repo`, normalize it to the canonical error authority, and repeat under clean/concurrent cache conditions. |
25
+ | AUD-619-WIN-PROC | Medium / lifecycle | **Open, platform-blocked** | `ask --agent` wrote valid 41,336-byte JSON but remained alive until an external 300s timeout; three `ask.exe` descendants remained after termination. Measure post-serialization teardown and enforce parent/child lifetime cleanup with native Windows Job Objects or equivalent. |
26
+ | AUD-619-I | High / contract evidence | **Re-opened for comparable measurement** | The auditor saw 3,496 bytes with no RIS and 31,260 bytes after partial warm, not the prior 88-89 KB. Publish the exact priming sequence and classify only after comparing the same snapshot state. |
27
+ | AUD-619-7 | Medium / UX | **Partially fixed** | The ambiguity is now explained and no suggestion is emitted where edit distance yields no valid command. Keep nearest-command suggestions for close spellings and test both branches. |
28
+ | AUD-619-WATCH | Low | **Closed as not reproduced** | `watch --once` completed in 0.526s on a clean small-repository run; retain a clean-session performance probe. |
29
+
30
+ **Confirmed healthy scope.** `audit-report --from-risk` produced valid output,
31
+ the root pipeline remained healthy, Q/E/F/P/C and the prior command families stayed
32
+ stable, and `risk --limit 0` continued to bypass the affected composer. The problem
33
+ is therefore concentrated in the shared heavy computation and its lifecycle, not
34
+ in general serialization or every CLI command.
35
+
36
+ **Commercial decision.** Retain only bounded pilots and the provisional
37
+ `$25-35/developer/month` hypothesis. Do not promise production CI gating, annual
38
+ reliability or enterprise scale above roughly 3,000 files until the 30-run Windows
39
+ matrix, cache-write lifecycle and review-pr error normalization are closed.
40
+
41
+ ### External Audit Intake — `AUD-618` re-audit, release 5.9.12
42
+
43
+ The external re-audit received 2026-08-28 covers only `Documents/workspace/testing/`.
44
+ All five scopes completed after two delivery retries; the seven forks remained clean,
45
+ with no target Java-file changes, commits or out-of-scope artefacts. The score moved
46
+ from 6.0/10 to 6.3/10: real progress exists, but the central reliability regression
47
+ is only partially repaired.
48
+
49
+ **Engineering decision: patch forward from 5.9.12; do not roll back.** The audit
50
+ confirms that `spring-audit` and `migrate-check` recovered (10/10 combined repros),
51
+ Q is fixed byte-for-byte and E is fully closed. Rolling back would restore known
52
+ defects and discard these verified corrections. The release remains blocked for
53
+ reliability-led commitments and production CI-gating claims until the remaining
54
+ P0/P1 rows have independent cross-platform evidence.
55
+
56
+ | ID | Severity | Status | Finding, evidence and required closure |
57
+ |---|---:|---|---|
58
+ | AUD-618-R | Critical maximum / regression | **Implemented; native Windows verification pending** | `cee27de` disables the Windows `ProcessPoolExecutor` before `spawn` duplicates IPC handles, falling back to the existing byte-identical sequential parse. Focused regressions and a TeaVM `risk --limit 5 --output` run pass. The remaining closure evidence is the auditor's native Windows/pipx matrix for `risk`, `verify`, `audit-report`, `spring-audit` and `migrate-check`. |
59
+ | AUD-618-TUTORIALS | Critical / scale | **Open, P1** | Native Windows root `--compact` took 6m20.1s and was observed as exit 124, but the later flush produced a valid 21.7 KB JSON result. Reclassify this as extreme latency, not a confirmed hang: parsing manifests is the dominant stall. Publish a repository-size envelope and measure on the auditor's platform; do not market enterprise scale until then. |
60
+ | AUD-618-MIGRATE-APPLY | High / silent-success | **Implemented; native Windows verification pending** | Existing plan mode plus the pool fallback now produce a valid TeaVM `migrate-apply-v1` file and retain non-mutation. Re-run the auditor's Windows/pipx output matrix before full closure. |
61
+ | AUD-618-I | High / contract | **Closed** | The current CLI help already states that compact output is snapshot-dependent; `5b9f2dc` removes the stale `~10K` Spanish manual claim and protects both user guides. |
62
+ | AUD-618-7 | Medium / CLI admission | **Closed** | `167cdda` preserves valid implicit paths but identifies a missing bare token as an implicit-path interpretation and points to `ask --help`; close spellings still receive nearest-command suggestions. |
63
+ | AUD-618-WIN-PROC | Medium / platform-specific | **Open, platform-blocked** | After a Windows timeout, `ask.exe` descendants can survive for minutes. Validate native Windows and Git Bash process-tree cleanup, preferably with Job Objects or an equivalent parent/child lifetime boundary. Do not ship a Darwin-only assumption. |
64
+ | AUD-618-WATCH | Low / observation | **Open, unconfirmed** | One isolated `ask watch . --once` run took 42.8s after heavy commands; historical behaviour is instant. Re-measure from a clean session before classifying it as a regression. |
65
+
66
+ **Preserved healthy scope.** The audit re-confirmed the root command, `risk --limit 0`,
67
+ the impact family, endpoints, posture, PR commands, drift, remediation, CVE, verify-edit,
68
+ explain, intent, baseline, data exposure, rename-class dry-run, migrate-recipe, retrieve,
69
+ pack gate/list and the prior Q/E/F/P/C/#14/D/#9/G/M closures. This narrows remediation to
70
+ the heavy shared composer and the explicitly listed contracts.
71
+
72
+ **Commercial decision.** Progress supports a provisional `$25-35/developer/month`
73
+ hypothesis, not validated pricing. Continue only bounded pilots with explicit timeouts,
74
+ captured output and a non-empty-answer assertion. Do not promise annual reliability,
75
+ production CI gating or enterprise-scale support above roughly 3,000 files until R,
76
+ MIGRATE-APPLY, the Windows scale evidence and process cleanup close independently.
77
+
3
78
  ### External Audit Intake — `AUD-617` re-audit, release 5.9.11
4
79
 
5
80
  The 2026-08-28 external re-audit is the first report to identify a release-level
@@ -5,7 +5,7 @@
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.12`, following the external `5.9.3` reconciliation.**
8
+ > **CURRENT UPDATE — release `5.9.14`, following the external `5.9.3` reconciliation.**
9
9
  > The commercial increment adds stateless context budgets, a reproducible context-cost harness,
10
10
  > source-level migration SARIF and an opt-in workspace entitlement pilot. Advisory behaviour remains
11
11
  > the default; named-buyer validation is still required before broad enforcement.
@@ -19,6 +19,31 @@
19
19
  > non-reproduction did not cover the payload shape now identified. Details are
20
20
  > in [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
21
21
 
22
+ > **AUD-619 RE-AUDIT — Bug R remains a critical race.** Identical Windows runs
23
+ > failed five times and succeeded once, so earlier small samples cannot support a
24
+ > fixed verdict. `migrate-check`, `risk`, `verify`, `audit-report` and
25
+ > `migrate-apply` remain exposed to silent exit or unbounded wait. `tutorials` can
26
+ > finish its answer before spending another minute building the cache entry.
27
+ > A valid `audit-report --from-risk` proves the renderer itself is healthy. Patch
28
+ > forward from `5.9.13`, retain bounded pilots, and require at least 30 consecutive
29
+ > Windows/pipx runs per affected command before closure. Review-pr fallback
30
+ > normalization, cache-write lifecycle, Windows process cleanup and comparable
31
+ > compact priming remain open. The commercial hypothesis stays
32
+ > `$25-35/developer/month`; no production CI-gating or enterprise-scale promise
33
+ > is authorized above roughly 3,000 files.
34
+
35
+ > **AUD-618 RE-AUDIT — the 5.9.12 reliability gate remains active.** The score
36
+ > improved only to **6.3/10**. `spring-audit` and `migrate-check` recovered, but
37
+ > `risk`, `verify`, `audit-report` and `migrate-apply` remain affected; `risk` now
38
+ > waits indefinitely in the shared composer on Windows. The captured cause is
39
+ > `PermissionError: [WinError 5]` at `_winapi.DuplicateHandle` during `spawn_main`.
40
+ > This is a partial repair, not a release clearance. Patch forward, do not roll
41
+ > back: preserve the verified fixes while blocking reliability-led sales and
42
+ > production CI-gating claims. The price hypothesis is `$25-35/developer/month`,
43
+ > not validated pricing. Windows scale, orphan process cleanup, cold-start output
44
+ > sizing and command admission remain open. Full triage is in the `AUD-618` sections
45
+ > of the development roadmap and defect ledger.
46
+
22
47
  > **CRITICAL REGRESSION — re-audit of `5.9.11`, received 2026-08-28.** The external
23
48
  > battery lowered the score to **6.0/10**: `risk`, `audit-report`, `verify`,
24
49
  > `spring-audit` and intermittently `migrate-check` can exit `0` with no stdout,
@@ -1,6 +1,6 @@
1
1
  # Manual de usuario — ASK Engine
2
2
 
3
- > Versión de la herramienta: **5.9.12** · El comando que se ejecuta es `ask`.
3
+ > Versión de la herramienta: **5.9.14** · El comando que se ejecuta es `ask`.
4
4
  > (`sourcecode` sigue funcionando como alias en desactivación y reenvía a `ask`.)
5
5
  > Público: personas que van a usar `ask` por primera vez, sin conocimiento previo.
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 1. ¿Qué es ASK Engine?
10
10
 
11
- ### Contratos de fiabilidad de la versión 5.9.12
11
+ ### Contratos de fiabilidad de la versión 5.9.14
12
12
 
13
13
  **Un plazo que el análisis raíz sí respeta.** `ASK_MAX_ANALYSIS_SECONDS=<segundos>`
14
14
  ahora detiene `ask <repo>` en una frontera de fase medida. Una ejecución que agota
@@ -292,7 +292,7 @@ lea una persona. Proyectan el mismo modelo semántico en contexto listo para un
292
292
  | `ask prepare-context <tarea>` | Paquete de contexto según la tarea (`onboard`, `review-pr`, `fix-bug`, `refactor`, `generate-tests`) dimensionado para un prompt de LLM. |
293
293
  | `ask repo-ir` | El propio IR de símbolos a bajo nivel — la representación semántica en crudo, para herramientas que quieren el grafo, no un informe. |
294
294
  | `ask --agent` | Envoltorio de salida optimizado para agentes en cualquier comando. |
295
- | `ask --compact` | Un subconjunto de ~10K tokens (estado, stacks, entry points, dependencias clave) para orientación barata. |
295
+ | `ask --compact` | Un subconjunto de orientación (estado, stacks, entry points y dependencias clave). Su tamaño depende del repositorio y de la vista; comprueba el tamaño publicado antes de inyectarlo directamente en un agente. |
296
296
  | `ask mcp` | Ejecuta ASK como servidor MCP para que un agente (Claude Desktop / Cursor) lo llame como herramienta. |
297
297
 
298
298
  Regla práctica: los comandos **para desarrollador** (`impact`, `spring-audit`, `endpoints`,
@@ -33,15 +33,18 @@ The public trust layer, if activated, must be a generated and redacted
33
33
  projection, never the raw defect ledger. Its acceptance rules must exclude
34
34
  maintainer paths, third-party evaluation subjects and unsupported claims.
35
35
 
36
- **5.9.11 commercial gate.** The 2026-08-28 re-audit found a critical regression:
37
- several core commands can return exit `0` with no evidence. This invalidates a
38
- reliability-led annual commitment and production CI-gating positioning until the
39
- shared error boundary is fixed and independently tested. The route therefore
40
- continues with bounded pilots only, retains a provisional `$20-30/developer/month`
41
- working hypothesis, and does not claim enterprise-scale support above roughly
42
- 3,000 files. The correct engineering response is a forward patch, not a rollback,
43
- because 5.9.11 also contains valid fixes that must be preserved. See the detailed
44
- `AUD-617` intake in [`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md) and
36
+ **5.9.14 commercial gate.** The 2026-08-28 re-audit found that the critical
37
+ reliability regression is only partially repaired: `spring-audit` and `migrate-check`
38
+ recovered, while `risk`, `verify`, `audit-report` and `migrate-apply` remain affected;
39
+ the follow-up shows that the failure is a high-frequency race rather than a binary
40
+ version state.
41
+ This invalidates a reliability-led annual commitment and production CI-gating
42
+ positioning until the shared worker/composer boundary is fixed and independently
43
+ tested. The route therefore continues with bounded pilots only, retains a
44
+ provisional `$25-35/developer/month` working hypothesis, and does not claim
45
+ enterprise-scale support above roughly 3,000 files. The correct engineering response
46
+ is a forward patch, not a rollback, because 5.9.14 contains valid fixes that must be
47
+ preserved. See the detailed `AUD-618` intake in [`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md) and
45
48
  [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md).
46
49
 
47
50
  ### Evidence and commercial validation boundary
@@ -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.12, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.9.14, `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.12, with release-artifact verification
55
+ the two pack fixes are included in release 5.9.14, with release-artifact verification
56
56
  remaining for detached execution and pack evidence.
57
57
 
58
- ### Reliability contracts in 5.9.12
58
+ ### Reliability contracts in 5.9.14
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.12
263
+ # ask 5.9.14
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.12"
7
+ version = "5.9.14"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "5.9.12"
7
+ __version__ = "5.9.14"
@@ -1855,6 +1855,21 @@ def _admit_path(
1855
1855
  pass
1856
1856
  return admission.resolved
1857
1857
  hint = rejection_hint(admission, usage=usage)
1858
+ raw_token = str(raw)
1859
+ if (
1860
+ admission.reason == "missing"
1861
+ and raw_token
1862
+ and "/" not in raw_token
1863
+ and "\\" not in raw_token
1864
+ ):
1865
+ # A bare first token belongs to the documented `ask <path>` grammar.
1866
+ # Do not guess that it is a command and make a legitimate not-yet-created
1867
+ # repository impossible to name; instead make the interpretation visible
1868
+ # and point an operator who meant a command at the authoritative list.
1869
+ hint = (
1870
+ f"{hint} `{raw_token}` was interpreted as an implicit repository path. "
1871
+ "If you intended a command, run `ask --help` and retry its exact name."
1872
+ )
1858
1873
  if extra_hint:
1859
1874
  hint = f"{hint} {extra_hint}"
1860
1875
  _emit_error_json(
@@ -2202,12 +2217,11 @@ def _active_command_context() -> "tuple[str, Optional[Path]]":
2202
2217
  ctx = click.get_current_context(silent=True)
2203
2218
  except Exception:
2204
2219
  ctx = None
2205
-
2206
2220
  if ctx is None:
2207
- # Console scripts and embedded entry points can emit after Click has
2208
- # released its context. Derive the command from argv rather than
2209
- # publishing `unknown` for an otherwise valid answer.
2210
- argv = list(sys.argv[1:])
2221
+ # Click may have unwound before the unified emitter runs. Prefer the
2222
+ # invocation captured per thread, then fall back to argv for console
2223
+ # scripts and embedded entry points.
2224
+ argv = list(_tls.__dict__.get("invocation_args", ()) or sys.argv[1:])
2211
2225
  known: set[str] = set()
2212
2226
  try:
2213
2227
  known.update(
@@ -2222,14 +2236,31 @@ def _active_command_context() -> "tuple[str, Optional[Path]]":
2222
2236
  pass
2223
2237
  command = ""
2224
2238
  for index, token in enumerate(argv):
2225
- if token.startswith("-") or token not in known:
2239
+ if token.startswith("-") or (token not in known and token not in _SUBCOMMANDS):
2226
2240
  continue
2227
2241
  command = token
2228
2242
  if token in {"retrieve", "cache", "auth", "mcp", "telemetry", "baseline", "pack"}:
2229
2243
  if index + 1 < len(argv) and argv[index + 1] in known:
2230
2244
  command = f"{token} {argv[index + 1]}"
2231
2245
  break
2232
- target = Path(_get_detected_path() or Path.cwd())
2246
+ if not command:
2247
+ command = _ROOT_COMMAND_NAME
2248
+ target: "Optional[Path]" = None
2249
+ if command == _ROOT_COMMAND_NAME:
2250
+ detected = _get_detected_path()
2251
+ if detected:
2252
+ target = Path(detected)
2253
+ else:
2254
+ for token in argv:
2255
+ try:
2256
+ candidate = Path(token)
2257
+ if candidate.is_dir():
2258
+ target = candidate
2259
+ break
2260
+ except (OSError, ValueError):
2261
+ continue
2262
+ if target is None:
2263
+ target = Path(_get_detected_path() or Path.cwd())
2233
2264
  return command or _ROOT_COMMAND_NAME, target
2234
2265
 
2235
2266
  names: list[str] = []
@@ -2280,6 +2311,11 @@ _EXPENSIVE_ANALYSIS_TTL_SECONDS = 6 * 60 * 60
2280
2311
  #: `cache_model.analysis_class` records.
2281
2312
  _CLASS_FLOOR_SECONDS = {"core": 60, "repo-wide": 600, "deep": 1200}
2282
2313
 
2314
+ # AUD-598-B04. A valid duration is not necessarily a useful limit. This is a
2315
+ # disclosure threshold, never a new input restriction: a caller may choose a
2316
+ # very large budget, but must not be led to believe it will bind.
2317
+ _NON_BINDING_BUDGET_MULTIPLE = 10.0
2318
+
2283
2319
  #: What to do instead when the budget will not cover the run. Per command where
2284
2320
  #: there is something specific to say, per class otherwise.
2285
2321
  _CLASS_FALLBACK = {
@@ -2420,12 +2456,40 @@ def _analysis_budget(command: str) -> dict[str, Any]:
2420
2456
  configured, source, invalid_reason = _parse_analysis_budget_env()
2421
2457
  from sourcecode.phased_run import budget_scope, budget_scope_reason
2422
2458
 
2459
+ advisory: Optional[str] = None
2460
+ if configured is not None:
2461
+ try:
2462
+ from sourcecode.execution_plan import cost_row
2463
+
2464
+ row = cost_row(command)
2465
+ anchors = [
2466
+ float(value)
2467
+ for value in (
2468
+ getattr(row, "cold_seconds", None),
2469
+ getattr(row, "warm_seconds", None),
2470
+ getattr(row, "field_seconds", None),
2471
+ )
2472
+ if isinstance(value, (int, float)) and float(value) > 0
2473
+ ]
2474
+ if anchors:
2475
+ anchor = max(anchors)
2476
+ if float(configured) >= anchor * _NON_BINDING_BUDGET_MULTIPLE:
2477
+ advisory = (
2478
+ f"{_BUDGET_ENV_VAR}={configured:g}s is {float(configured) / anchor:.0f}x "
2479
+ f"the published {command} cost anchor ({anchor:g}s); it is "
2480
+ "unlikely to bind this run. The value remains valid and is "
2481
+ "recorded with the result."
2482
+ )
2483
+ except Exception:
2484
+ pass
2485
+
2423
2486
  scope = budget_scope(command)
2424
2487
  return {
2425
2488
  "class": cls,
2426
2489
  "recommended_min_seconds": recommended,
2427
2490
  "configured_max_seconds": configured,
2428
2491
  "configured_source": source,
2492
+ "configured_nonbinding_advisory": advisory,
2429
2493
  # AUD-596-B03: an unreadable value is not an absent one. Carried beside
2430
2494
  # the budget so `_enforce_analysis_budget` can refuse it by name, and
2431
2495
  # `None` whenever the variable is unset or usable.
@@ -2470,6 +2534,7 @@ def _budget_disclosure(command: str) -> "dict[str, Any]":
2470
2534
  "budget_binds": binding["binds"],
2471
2535
  "budget_binds_basis": binding["basis"],
2472
2536
  "measured_anchor_seconds": binding["anchor_seconds"],
2537
+ "configured_nonbinding_advisory": budget["configured_nonbinding_advisory"],
2473
2538
  }
2474
2539
 
2475
2540
 
@@ -2549,6 +2614,13 @@ def _enforce_analysis_budget(
2549
2614
  return
2550
2615
  source = budget.get("configured_source")
2551
2616
  from sourcecode.phased_run import budget_provenance, budget_warning
2617
+ advisory = budget.get("configured_nonbinding_advisory")
2618
+ if advisory and getattr(sys.stderr, "isatty", lambda: False)():
2619
+ try:
2620
+ sys.stderr.write(f"[ask] budget: {advisory}\n")
2621
+ sys.stderr.flush()
2622
+ except Exception:
2623
+ pass
2552
2624
  if not getattr(sys.stderr, "isatty", lambda: False)() and float(configured) >= recommended:
2553
2625
  return
2554
2626
 
@@ -4437,6 +4509,11 @@ def _get_command_with_preprocessing(typer_instance: Any) -> Any:
4437
4509
  # CliRunner / programmatic call: preprocess the explicit args list.
4438
4510
  _set_detected_path(".")
4439
4511
  args = _preprocess_args(list(args))
4512
+ # The output seam is reached after Click may already have released its
4513
+ # context. Preserve this invocation per thread so its envelope cannot
4514
+ # silently lose command and repository provenance (AUD-598-B01).
4515
+ _previous_invocation = _tls.__dict__.get("invocation_args")
4516
+ _tls.invocation_args = tuple(args if args is not None else sys.argv[1:])
4440
4517
  # args=None → Click reads sys.argv; _preprocess_argv() in main_entry handled it.
4441
4518
  started = time.monotonic()
4442
4519
  command = _telemetry_command(args)
@@ -4459,6 +4536,10 @@ def _get_command_with_preprocessing(typer_instance: Any) -> Any:
4459
4536
  )
4460
4537
  except Exception:
4461
4538
  pass
4539
+ if _previous_invocation is None:
4540
+ _tls.__dict__.pop("invocation_args", None)
4541
+ else:
4542
+ _tls.invocation_args = _previous_invocation
4462
4543
 
4463
4544
  cmd.main = _cmd_main
4464
4545
  return cmd