sourcecode 5.9.27__tar.gz → 5.9.28__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 (472) hide show
  1. {sourcecode-5.9.27 → sourcecode-5.9.28}/CHANGELOG.md +76 -0
  2. {sourcecode-5.9.27 → sourcecode-5.9.28}/PKG-INFO +3 -3
  3. {sourcecode-5.9.27 → sourcecode-5.9.28}/README.md +2 -2
  4. sourcecode-5.9.28/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +102 -0
  5. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/DEFECT-LEDGER.md +119 -0
  6. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/DEVELOPMENT-ROADMAP.md +56 -6
  7. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/EXECUTIVE-ROADMAP.md +41 -0
  8. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/USER_GUIDE.md +1 -1
  9. {sourcecode-5.9.27 → sourcecode-5.9.28}/pyproject.toml +1 -1
  10. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/__init__.py +1 -1
  11. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cache.py +81 -4
  12. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cli.py +161 -6
  13. sourcecode-5.9.28/src/sourcecode/concurrency.py +264 -0
  14. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/context_cache.py +43 -2
  15. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/degradation.py +15 -0
  16. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/output_budget.py +49 -10
  17. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/parallel.py +35 -2
  18. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/repository_ir.py +149 -0
  19. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/resource_budget.py +106 -0
  20. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_impact.py +17 -3
  21. {sourcecode-5.9.27 → sourcecode-5.9.28}/.github/workflows/build-windows.yml +0 -0
  22. {sourcecode-5.9.27 → sourcecode-5.9.28}/.github/workflows/perf-gate.yml +0 -0
  23. {sourcecode-5.9.27 → sourcecode-5.9.28}/.github/workflows/windows-battery.yml +0 -0
  24. {sourcecode-5.9.27 → sourcecode-5.9.28}/.github/workflows/windows-regression.yml +0 -0
  25. {sourcecode-5.9.27 → sourcecode-5.9.28}/.gitignore +0 -0
  26. {sourcecode-5.9.27 → sourcecode-5.9.28}/.ruff.toml +0 -0
  27. {sourcecode-5.9.27 → sourcecode-5.9.28}/CLAUDE.md +0 -0
  28. {sourcecode-5.9.27 → sourcecode-5.9.28}/CODE_OF_CONDUCT.md +0 -0
  29. {sourcecode-5.9.27 → sourcecode-5.9.28}/CONTRIBUTING.md +0 -0
  30. {sourcecode-5.9.27 → sourcecode-5.9.28}/LICENSE +0 -0
  31. {sourcecode-5.9.27 → sourcecode-5.9.28}/NOTICE +0 -0
  32. {sourcecode-5.9.27 → sourcecode-5.9.28}/SECURITY.md +0 -0
  33. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  34. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  35. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  36. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  37. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  38. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  39. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  40. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  41. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  42. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  43. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  44. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  45. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  46. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  47. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  48. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  49. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  50. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  51. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  52. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  53. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  54. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
  55. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
  56. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
  57. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
  58. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
  59. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
  60. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  61. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/CACHE.md +0 -0
  62. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/COMMERCIAL-OFFER.md +0 -0
  63. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/CUSTOMER-VALIDATION.md +0 -0
  64. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/DEMO-5MIN.md +0 -0
  65. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  66. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/EXECUTION-PLAN-12MO.md +0 -0
  67. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/MANUAL-USUARIO.md +0 -0
  68. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/MODERNIZATION.md +0 -0
  69. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/PRODUCT-ROUTE.md +0 -0
  70. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/PRODUCT_AUDIT.md +0 -0
  71. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/PRODUCT_IDENTITY.md +0 -0
  72. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/PRODUCT_TIERS.md +0 -0
  73. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/RC1-CHECKLIST.md +0 -0
  74. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
  75. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/RELEASE-CHECKLIST.md +0 -0
  76. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/RELEASE-VERIFICATION.md +0 -0
  77. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  78. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  79. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  80. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-assessment-report.md +0 -0
  81. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  82. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  83. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  84. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  85. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  86. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  87. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  88. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  89. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  90. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  91. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  92. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  93. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  94. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  95. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  96. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  97. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  98. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  99. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  100. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  101. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  102. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  103. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0006-performance-harness.md +0 -0
  104. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  105. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  106. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/consumer-disposition-inventory.md +0 -0
  107. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/overview.md +0 -0
  108. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/product-architecture-review.md +0 -0
  109. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/product-strategy-layering.md +0 -0
  110. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  111. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/architecture/semantic-ir-roadmap.md +0 -0
  112. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/baseline-ci.yml +0 -0
  113. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/commercial-pipeline-audit.md +0 -0
  114. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/contracts-ci.yml +0 -0
  115. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/contracts.md +0 -0
  116. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  117. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  118. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  119. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  120. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  121. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  122. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  123. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  124. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/licensing-schema.md +0 -0
  125. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/migrate-check.md +0 -0
  126. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/pack-gate-github-actions.yml +0 -0
  127. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/pack-gate-gitlab.yml +0 -0
  128. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/README.md +0 -0
  129. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/REGRESSION-GATE.md +0 -0
  130. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  131. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  132. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  133. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  134. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  135. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  136. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  137. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  138. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  139. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  140. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  141. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  142. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  143. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  144. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  145. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  146. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  147. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  148. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  149. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  150. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  151. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  152. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  153. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  154. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  155. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  156. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  157. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  158. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  159. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  160. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  161. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  162. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  163. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  164. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  165. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  166. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  167. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  168. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  169. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  170. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  171. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  172. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
  173. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
  174. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/README.md +0 -0
  175. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  176. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  177. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  178. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  179. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  180. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  181. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/baselines/reference-best/README.md +0 -0
  182. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  183. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/posture.md +0 -0
  184. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/privacy.md +0 -0
  185. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/pro-experience-audit.md +0 -0
  186. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/schema.md +0 -0
  187. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/spec/envelope-v1.md +0 -0
  188. {sourcecode-5.9.27 → sourcecode-5.9.28}/docs/spring-audit-ci.yml +0 -0
  189. {sourcecode-5.9.27 → sourcecode-5.9.28}/hatch_build.py +0 -0
  190. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/compare_integration_engines.py +0 -0
  191. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/context_cost_harness.py +0 -0
  192. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/customer_smoke_test.sh +0 -0
  193. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/generate_jdk_exports.py +0 -0
  194. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/perf_gate.py +0 -0
  195. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/perf_harness.py +0 -0
  196. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/sync_gate_anchors.py +0 -0
  197. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/test_fast.sh +0 -0
  198. {sourcecode-5.9.27 → sourcecode-5.9.28}/scripts/windows_reliability_matrix.py +0 -0
  199. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/__main__.py +0 -0
  200. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/access_drift.py +0 -0
  201. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/adaptive_scanner.py +0 -0
  202. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/analysis_budget.py +0 -0
  203. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/answer_bounds.py +0 -0
  204. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/archetype.py +0 -0
  205. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/architectural_baseline.py +0 -0
  206. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/architectural_delta.py +0 -0
  207. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/architecture_analyzer.py +0 -0
  208. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/architecture_summary.py +0 -0
  209. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/ast_extractor.py +0 -0
  210. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/audit_clusters.py +0 -0
  211. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/audit_recipe.py +0 -0
  212. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/audit_report.py +0 -0
  213. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/audit_since.py +0 -0
  214. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/audit_verify.py +0 -0
  215. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/baseline_attestation.py +0 -0
  216. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/baseline_autocapture.py +0 -0
  217. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/breaking_changes.py +0 -0
  218. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/build_modules.py +0 -0
  219. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/build_stamp.py +0 -0
  220. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/bundled_docs.py +0 -0
  221. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/c4_render.py +0 -0
  222. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cache_model.py +0 -0
  223. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cache_observation.py +0 -0
  224. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/call_surface.py +0 -0
  225. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/caller_metrics.py +0 -0
  226. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/caller_reach.py +0 -0
  227. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/canonical_ir.py +0 -0
  228. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/chain_rules.py +0 -0
  229. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/change_plan.py +0 -0
  230. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/ci_output.py +0 -0
  231. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cir_graphs.py +0 -0
  232. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/classifier.py +0 -0
  233. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/click_runtime.py +0 -0
  234. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/client_calls.py +0 -0
  235. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/code_notes_analyzer.py +0 -0
  236. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/compare.py +0 -0
  237. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/confidence_analyzer.py +0 -0
  238. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/constraint_diff.py +0 -0
  239. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/consumer_join.py +0 -0
  240. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/container_wiring.py +0 -0
  241. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/context_graph.py +0 -0
  242. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/context_scorer.py +0 -0
  243. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/context_summarizer.py +0 -0
  244. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/contract_diff.py +0 -0
  245. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/contract_init.py +0 -0
  246. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/contract_model.py +0 -0
  247. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/contract_pipeline.py +0 -0
  248. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/coverage_parser.py +0 -0
  249. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cve_feed.py +0 -0
  250. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/cve_reachability.py +0 -0
  251. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/data_exposure.py +0 -0
  252. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/data_labels.py +0 -0
  253. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/declarations.py +0 -0
  254. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/defect_classes/__init__.py +0 -0
  255. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/defect_classes/registry.json +0 -0
  256. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/defect_identity.py +0 -0
  257. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/dependency_analyzer.py +0 -0
  258. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/deployment_prefix.py +0 -0
  259. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detach.py +0 -0
  260. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/__init__.py +0 -0
  261. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/base.py +0 -0
  262. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/csproj_parser.py +0 -0
  263. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/dart.py +0 -0
  264. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/dotnet.py +0 -0
  265. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/elixir.py +0 -0
  266. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/go.py +0 -0
  267. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/heuristic.py +0 -0
  268. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/hybrid.py +0 -0
  269. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/java.py +0 -0
  270. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/jvm_ext.py +0 -0
  271. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/nodejs.py +0 -0
  272. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/parsers.py +0 -0
  273. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/php.py +0 -0
  274. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/project.py +0 -0
  275. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/python.py +0 -0
  276. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/ruby.py +0 -0
  277. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/rust.py +0 -0
  278. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/systems.py +0 -0
  279. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/terraform.py +0 -0
  280. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/detectors/tooling.py +0 -0
  281. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/doc_analyzer.py +0 -0
  282. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/dynamic_argument_surface.py +0 -0
  283. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/empty_answer_diagnostics.py +0 -0
  284. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/empty_reach.py +0 -0
  285. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/endpoint_disposition.py +0 -0
  286. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/endpoint_literals.py +0 -0
  287. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/endpoint_metrics.py +0 -0
  288. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/entrypoint_classifier.py +0 -0
  289. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/env_analyzer.py +0 -0
  290. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/envelope.py +0 -0
  291. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/environment_resolution.py +0 -0
  292. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/error_schema.py +0 -0
  293. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/evidence_provider.py +0 -0
  294. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/execution_plan.py +0 -0
  295. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/explain.py +0 -0
  296. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/explain_endpoint.py +0 -0
  297. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/facts/__init__.py +0 -0
  298. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/facts/registry.json +0 -0
  299. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/field_deprecations.py +0 -0
  300. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/file_chunker.py +0 -0
  301. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/file_classifier.py +0 -0
  302. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/filter_surface.py +0 -0
  303. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/findings_baseline.py +0 -0
  304. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/format_contract.py +0 -0
  305. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/fqn_utils.py +0 -0
  306. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/functional_routes.py +0 -0
  307. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/gate_anchors.py +0 -0
  308. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/git_analyzer.py +0 -0
  309. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/git_checkout.py +0 -0
  310. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/github_diff.py +0 -0
  311. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/graph_analyzer.py +0 -0
  312. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/graph_evidence.py +0 -0
  313. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/hibernate_strat.py +0 -0
  314. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/identity_fallback.py +0 -0
  315. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/integration_coordinates.py +0 -0
  316. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/intent_router.py +0 -0
  317. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/jdk_exports.py +0 -0
  318. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/jvm_inventory.py +0 -0
  319. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/license.py +0 -0
  320. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/manifest_cache.py +0 -0
  321. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/__init__.py +0 -0
  322. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/dependency_import.py +0 -0
  323. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  324. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  325. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  326. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  327. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  328. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/orchestrator.py +0 -0
  329. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/registry.py +0 -0
  330. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/runner.py +0 -0
  331. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp/server.py +0 -0
  332. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/mcp_nudge.py +0 -0
  333. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/metrics_analyzer.py +0 -0
  334. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/migrate_check.py +0 -0
  335. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/migration_apply.py +0 -0
  336. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/migration_blast.py +0 -0
  337. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/non_coverage.py +0 -0
  338. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/openapi_surface.py +0 -0
  339. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/openrewrite_recipe.py +0 -0
  340. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/output_bounds.py +0 -0
  341. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/output_ceiling.py +0 -0
  342. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/output_encoding.py +0 -0
  343. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/output_sink.py +0 -0
  344. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/pack_manifest.py +0 -0
  345. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/packs.py +0 -0
  346. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/parse_cache.py +0 -0
  347. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/partial_contract.py +0 -0
  348. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/path_admission.py +0 -0
  349. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/path_display.py +0 -0
  350. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/path_filters.py +0 -0
  351. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/perf.py +0 -0
  352. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/phased_run.py +0 -0
  353. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/pipe_contract.py +0 -0
  354. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/posture.py +0 -0
  355. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/pr_comment_renderer.py +0 -0
  356. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/pr_impact.py +0 -0
  357. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/pr_risk.py +0 -0
  358. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/prepare_context.py +0 -0
  359. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/product_info.py +0 -0
  360. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/progress.py +0 -0
  361. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/provenance.py +0 -0
  362. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/ranking_engine.py +0 -0
  363. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/readiness_timeline.py +0 -0
  364. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/readonly.py +0 -0
  365. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/reconciliation.py +0 -0
  366. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/redactor.py +0 -0
  367. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/reference_facts.py +0 -0
  368. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/regress.py +0 -0
  369. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/regulatory_pack.py +0 -0
  370. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/release_info.py +0 -0
  371. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/relevance_scorer.py +0 -0
  372. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/remediation_diff.py +0 -0
  373. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/remediation_flow.py +0 -0
  374. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/remediation_report.py +0 -0
  375. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/remedies.py +0 -0
  376. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/rename_refactor.py +0 -0
  377. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/repo_classifier.py +0 -0
  378. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/__init__.py +0 -0
  379. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/context.py +0 -0
  380. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/errors.py +0 -0
  381. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/executor.py +0 -0
  382. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/planner.py +0 -0
  383. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/query.py +0 -0
  384. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/request.py +0 -0
  385. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/resolution.py +0 -0
  386. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/result.py +0 -0
  387. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/retriever.py +0 -0
  388. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/runtime.py +0 -0
  389. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps.py +0 -0
  390. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  391. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_graph.py +0 -0
  392. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_impact.py +0 -0
  393. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_intf.py +0 -0
  394. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_struct.py +0 -0
  395. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  396. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/ris.py +0 -0
  397. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/risk.py +0 -0
  398. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/risk_model.py +0 -0
  399. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/rule_catalog.py +0 -0
  400. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/rule_pass.py +0 -0
  401. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/runs.py +0 -0
  402. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/runtime_classifier.py +0 -0
  403. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/sarif.py +0 -0
  404. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/sarif_emit.py +0 -0
  405. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/scanner.py +0 -0
  406. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schema.py +0 -0
  407. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schema_producers.py +0 -0
  408. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schema_registry.py +0 -0
  409. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  410. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  411. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  412. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  413. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  414. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  415. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  416. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/security_chain.py +0 -0
  417. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/security_config.py +0 -0
  418. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/security_config_scan.py +0 -0
  419. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/security_posture.py +0 -0
  420. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/selection_contract.py +0 -0
  421. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/self_audit.py +0 -0
  422. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/selftest.py +0 -0
  423. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/semantic_analyzer.py +0 -0
  424. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/semantic_impact_engine.py +0 -0
  425. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/semantic_integration_engine.py +0 -0
  426. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/semantic_services.py +0 -0
  427. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/serializer.py +0 -0
  428. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/servlet_surface.py +0 -0
  429. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/source_text.py +0 -0
  430. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_event_topology.py +0 -0
  431. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_findings.py +0 -0
  432. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_model.py +0 -0
  433. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_profiles.py +0 -0
  434. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_properties.py +0 -0
  435. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_security_audit.py +0 -0
  436. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_semantic.py +0 -0
  437. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/spring_tx_analyzer.py +0 -0
  438. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/sql_taint.py +0 -0
  439. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/summarizer.py +0 -0
  440. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/target_admission.py +0 -0
  441. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/__init__.py +0 -0
  442. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/config.py +0 -0
  443. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/consent.py +0 -0
  444. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/events.py +0 -0
  445. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/filters.py +0 -0
  446. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/telemetry/transport.py +0 -0
  447. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/test_gap_ranking.py +0 -0
  448. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/test_sources.py +0 -0
  449. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/text_input.py +0 -0
  450. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/timeline.py +0 -0
  451. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/timeline_cache.py +0 -0
  452. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/token_estimate.py +0 -0
  453. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/tree_utils.py +0 -0
  454. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/type_usage_surface.py +0 -0
  455. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/validation_inference.py +0 -0
  456. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/validation_surface.py +0 -0
  457. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/verify_edit.py +0 -0
  458. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/verify_repo.py +0 -0
  459. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/verify_rules.py +0 -0
  460. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/version_check.py +0 -0
  461. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/vex.py +0 -0
  462. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/waivers.py +0 -0
  463. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/watch_loop.py +0 -0
  464. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/wired_surface.py +0 -0
  465. {sourcecode-5.9.27 → sourcecode-5.9.28}/src/sourcecode/workspace.py +0 -0
  466. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/functions/README.md +0 -0
  467. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/functions/get-license/index.ts +0 -0
  468. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  469. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/functions/telemetry/index.ts +0 -0
  470. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/sql/license_event_ordering.sql +0 -0
  471. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/sql/licensing_schema.sql +0 -0
  472. {sourcecode-5.9.27 → sourcecode-5.9.28}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,81 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.28] — 2026-09-02
4
+
5
+ *Remediation batch on the 5.9.27 audit queue: nine rows, one commit each. The
6
+ round's own P0 — "does the shared worker pool tolerate concurrent `ask`
7
+ processes on one machine, or assume exclusive use?" — is answered here in
8
+ source, and the answer was exclusive use.*
9
+
10
+ ### Fixed
11
+
12
+ - **Concurrent invocations no longer size their worker pools as if each owned
13
+ the machine (`R-01`).** `parallel.default_jobs()` returned `cpu_count() - 1`
14
+ per process, so `k` concurrent runs started `k x (N-1)` parsing workers on
15
+ `N` cores and nothing in any payload said the machine had been shared. A
16
+ best-effort census of live invocations now divides that budget, and
17
+ `_meta.concurrency` publishes peers at start, whether the budget was shared,
18
+ and that a shared run is not an isolated-machine measurement. `cache._gc`
19
+ defers eviction while a peer is live, so a sweep cannot delete the working
20
+ set a concurrent run is reading. `ASK_NO_CONCURRENCY_CENSUS=1` restores the
21
+ previous behaviour.
22
+ - **The RSS ceiling stops a run where it is crossed (`BUG-22`, `REG-02`'s
23
+ enforcement half).** The check ran at phase boundaries only, so a phase
24
+ could allocate without bound and be refused after it finished — the field's
25
+ 2,029.92 MB peak under a 1,536 MB ceiling that was genuinely in force. The
26
+ ceiling is now sampled inside the parse loop (throttled to one footprint
27
+ sample per 0.5 s) and raises a typed refusal rendered as the same
28
+ `MEMORY_TOO_LARGE` envelope, instead of `EXECUTION_FAILED`.
29
+ - **A routing style this model does not read is published rather than reported
30
+ as an absent surface (`BUG-10`).** `unmodeled_routing_evidence` names the
31
+ files declaring an annotation whose argument is a path-like string literal
32
+ that produced no endpoint — a rule that names no framework. Measured:
33
+ `struts` reports 4 files under `@Action`/`@Namespace` where the answer used
34
+ to say nothing was found.
35
+ - **Overloaded handlers publish their ambiguity (`NEW-02`/`BUG-05`).** The
36
+ symbol index is keyed `Class#method` without parameter types, so every
37
+ overload collapsed onto the last declaration scanned. Entries now carry
38
+ `overload_count`, `anchor_ambiguity` and `anchor_candidate_lines`; an
39
+ unambiguous anchor carries none of it.
40
+ - **`selftest` refuses an unscoped run over nested repositories (`BUG-13`).**
41
+ It warned and then ran the ledger against the whole workspace. The implicit
42
+ `.` now refuses with `INVALID_USAGE` before any row runs; `--allow-nested`
43
+ is there for a caller who means it.
44
+ - **Every cache store publishes what evicts it (`BUG-16`).** The context
45
+ cache's 30-day TTL and 256-entry cap lived inside `_gc`, so ~1.7 GB of
46
+ growth had no readable contract. `cache status` now prints each store's
47
+ eviction contract, read from the same authority the sweep uses.
48
+ - **`_truncation_summary` accounts for its own bytes (`ALT-08`).**
49
+ `final_size_bytes` was measured before the summary and note were attached;
50
+ it is now measured over the assembled payload, with `content_size_bytes`
51
+ keeping the trimmed-content figure under a name that says which it is.
52
+ - **`impact-chain` publishes a null audit share when no audit ran
53
+ (`ALT-25`).** `metadata.audit_time_ms` was always ~0.0 on the default path —
54
+ the elapsed time of *not* running an opt-in repository-wide audit, under a
55
+ name readers compare against `query_time_ms`.
56
+ - **`retrieve security-surface --target` says why it has no anchor.** Four
57
+ rounds were answered "No such option: --target". The refusal now states that
58
+ the intent is repository-wide and names `security-chain --target`, derived
59
+ from `intent_router.ANCHOR_KINDS`.
60
+
61
+ ### Known Limitations
62
+
63
+ - `ALT-01`/`ALT-03` remain open. This release removes the contention mechanism
64
+ the 5.9.27 round evidenced; it does not explain the one hang observed with
65
+ nothing else running. The next field round should re-measure with
66
+ `_meta.concurrency` attached — `peer_invocations_at_start: 0` beside a
67
+ failure separates contention from whatever remains.
68
+ - `BUG-02` (`rc=127` with no output) and `BUG-12` (multi-gigabyte RSS while
69
+ building a small answer) still need the field's own large repository.
70
+ `BUG-22`'s in-phase sampler bounds the second one's damage without closing
71
+ it.
72
+ - `ask --help` measures 0.41-0.44 s on the engineering host against
73
+ 14.4-14.7 s in the field under confirmed contention. Not a refutation — a
74
+ different machine — and a reason to re-measure before profiling it as a
75
+ standalone defect.
76
+ - The release gate is unchanged: do not use the audit-command family to gate
77
+ unattended CI until the field re-measures.
78
+
3
79
  ## [5.9.27] — 2026-09-02
4
80
 
5
81
  *Follow-up from the 5.9.26 re-audit — a sharper instrumentation lead and a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.27
3
+ Version: 5.9.28
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.27-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.28-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -290,7 +290,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
290
290
  # pip / pipx
291
291
  pipx install sourcecode # or: pip install sourcecode
292
292
 
293
- ask version # ask 5.9.27 — and, on a build that has aged,
293
+ ask version # ask 5.9.28 — and, on a build that has aged,
294
294
  # how many releases have probably shipped since
295
295
  ```
296
296
 
@@ -10,7 +10,7 @@
10
10
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
11
11
  > before inspecting a repository whose telemetry policy you need to control.
12
12
 
13
- ![Version](https://img.shields.io/badge/version-5.9.27-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.28-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -241,7 +241,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
241
241
  # pip / pipx
242
242
  pipx install sourcecode # or: pip install sourcecode
243
243
 
244
- ask version # ask 5.9.27 — and, on a build that has aged,
244
+ ask version # ask 5.9.28 — and, on a build that has aged,
245
245
  # how many releases have probably shipped since
246
246
  ```
247
247
 
@@ -0,0 +1,102 @@
1
+ # Alternative External Audit - 5.9.27
2
+
3
+ ## Scope And Verdict
4
+
5
+ Native-Windows re-audit on the same MSAS repository (3,342 Java files) used
6
+ in every prior round. Score **4.6/10**, the first uptick in four rounds (5.9.22
7
+ 6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8). The uptick carries a large
8
+ qualification discovered mid-session: this audit's own machine was shared
9
+ with a second, independent automated process, and that materially changes
10
+ how the four-round erratic-failure pattern should be read.
11
+
12
+ ## Priority Finding — Confirmed Shared-Machine Contention
13
+
14
+ The auditor found the shared `entry-trace.jsonl` diagnostic file (added in
15
+ 5.9.27 to answer whether audit-family commands reach `main_entry`) growing
16
+ with invocations they never launched, against five OSS reference
17
+ repositories (`thingsboard`, `mall`, `struts`, `spring-petclinic`,
18
+ `jhipster-sample-app`) under the same `timeout N ask ...` harness pattern the
19
+ auditor uses. `Get-CimInstance Win32_Process` confirmed a live process under
20
+ the same Windows user actively running `ask.exe risk mall --limit 20` at the
21
+ time of inspection — not background noise, a second real test harness on the
22
+ same machine, same user, same shared `~/.sourcecode` cache and diagnostics
23
+ directory. Two of the auditor's own `spring-audit . --compact` hangs
24
+ overlapped a 525-second window in which 34 foreign invocations were traced.
25
+
26
+ This reframes, but does not resolve, the standing question. If ASK's shared
27
+ worker pool and cache do not isolate concurrent `ask` processes on one
28
+ machine, contention could produce exactly the observed pattern — the same
29
+ command sometimes hanging, sometimes returning empty near-instantly, with no
30
+ per-process variable distinguishing the two. It does not explain everything
31
+ (one hang occurred right after the trace went quiet for 20 seconds with
32
+ nothing else running), so contention is documented as a real, evidenced
33
+ contributing factor, not a proven sole cause.
34
+
35
+ ## Integrity Note
36
+
37
+ This round's ledger entry for 5.9.26 described a two-pass, self-contradictory
38
+ session ("an initial 129-invocation pass ... 0/23 ... 7.4/10, then a second
39
+ pass ... 0/35 ... 3.8/10"). This auditor states plainly that the first pass
40
+ and its 7.4/10 score do not correspond to anything they ran or reported. Given
41
+ the newly confirmed shared-machine contention, the likely explanation is that
42
+ 5.9.26's report mixed observations from two concurrent, independent audit
43
+ sessions on the same machine (the MSAS/native-Windows lineage and a
44
+ multi-repository "testing/" corpus lineage matching the five OSS repos found
45
+ in the trace this round) rather than one evaluator's two passes. Recorded as
46
+ an open provenance question, not resolved either way — see
47
+ [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md) for how this changes the 5.9.26 record.
48
+
49
+ ## Priority Regressions
50
+
51
+ None newly introduced. The audit-command family remains the standing issue:
52
+ `spring-audit`, `verify`, `risk`, `audit-report` stayed at 0 successful
53
+ answers in this session's isolated (non-overlapping) invocations;
54
+ `migrate-check` and `migrate-apply` each answered once, both immediately
55
+ after the foreign trace activity appeared to quiet down — noted as a
56
+ correlation worth cross-referencing against `entry-trace.jsonl`, not asserted
57
+ as causal.
58
+
59
+ ## Verified Improvements
60
+
61
+ - **The entry-point trace (5.9.27's response to last round's `R-01`) works as
62
+ designed**: the auditor's own invocations — `verify .`, `migrate-apply .`,
63
+ `risk . --limit 20`, `audit-report . --format markdown`, `risk . -o
64
+ promise.json` — now appear in `entry-trace.jsonl` even when they return
65
+ empty or hang. This confirms `main_entry` is reached on the failing runs,
66
+ closing the question the previous round's diagnostic gap left open. The
67
+ `empty_answer_diagnostics.record()` sidecar still never fires on any
68
+ observed failure, which narrows the search specifically to somewhere
69
+ between `main_entry` and the output-promise guard — a materially smaller
70
+ surface than "somewhere in the process" three rounds ago.
71
+ - `selftest`'s itemized gaps (last round's fix) confirmed: `"10 ledger row(s)
72
+ could not run: ASK-16, B6, E-37, ..."` replaces the prior generic slug.
73
+ - `ALT-09` (piped refusal on `cache clear`) reconfirmed a third consecutive
74
+ session.
75
+ - `BUG-15`/`BUG-21` (markup leak, `--jobs` range) reconfirmed.
76
+ - `migrate-check`/`migrate-apply` produced complete, reasonably sized
77
+ payloads (37.5 KB/41s and 9.5 KB/46s) on the runs that did answer.
78
+
79
+ ## Open, Unchanged
80
+
81
+ - `onboard .` remains the single most erratic measurement across rounds:
82
+ 904ms to a full 200-second external kill within the same session, same
83
+ invocation, same tree, no changes between runs.
84
+ - `ask --help` measured 14.4-14.7s this session, worse than the 3-4s the
85
+ 5.9.26 ledger entry flagged as worth its own row "if it persists" — it has
86
+ persisted across two rounds now. May share `R-01`'s contention signature;
87
+ not verified in isolation this session.
88
+ - `watch`'s ~55s index-warm-before-first-tick is unchanged and correctly
89
+ understood as real cost, not a defect, per the prior round's correction.
90
+ - `retrieve security-surface --target` still rejects `--target` as an unknown
91
+ option, unchanged across four rounds.
92
+
93
+ ## Verification Boundary
94
+
95
+ Session ran on a machine independently confirmed to be shared with a second,
96
+ concurrent `ask` test harness during at least part of the observation window.
97
+ Reliability figures in this round should be read as measured under
98
+ uncontrolled, real contention, not as an isolated single-process baseline.
99
+ The auditor's own recommendation: repeat `spring-audit . --compact` x3 on
100
+ both a reference repo and MSAS in the same clean window, nothing else
101
+ running, to separate "the repository" from "the shared machine" as the
102
+ variable.
@@ -14,8 +14,127 @@ 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 — Release `5.9.28`, nine rows closed on the 5.9.27 queue (2026-09-02)
18
+
19
+ **`R-01`'s architectural question is answered in source, and the answer was
20
+ "exclusive use".** `parallel.default_jobs()` returned `cpu_count() - 1` for
21
+ each process independently, so `k` concurrent `ask` invocations started
22
+ `k × (N-1)` parsing workers on `N` cores — and no field in any payload said the
23
+ run had been sharing the machine. That is what four rounds of "same command,
24
+ sometimes fast, sometimes hung, no per-process variable distinguishing the two"
25
+ looks like from outside. The cache was *not* the same kind of defect: writes
26
+ are unique-temp + `os.replace` with retry and every read is guarded, so a
27
+ concurrent writer degrades a peer to a cache miss; the one operation that hurt
28
+ a peer was eviction, which now defers while a peer is live.
29
+
30
+ Every row marked **fixed** below is closed in release `5.9.28`; the two
31
+ open rows say what closure still needs. This batch does not claim to close
32
+ the erratic-failure row — one hang was
33
+ observed with nothing else running, and that is unexplained. It removes the
34
+ mechanism the 5.9.27 round evidenced, and gives the next round the variable it
35
+ did not have: `_meta.concurrency` on every answer.
36
+
37
+ **Measured here, for the two latency rows:** `ask --help` is 0.41–0.44 s on
38
+ this machine over three consecutive runs (the audit measured 14.4–14.7 s under
39
+ confirmed contention). That is not a refutation of the field figure — it is a
40
+ different machine — but it does put the row behind `R-01` rather than beside
41
+ it, and the next round can separate them with the disclosure block above.
42
+
43
+ | ID | Severity | Status | Evidence and required closure |
44
+ |---|---:|---|---|
45
+ | `R-01` (contention) | Critical maximum | **mechanism removed, row open pending field re-measure** | `concurrency.py` keeps a best-effort census of live invocations (one lease per process, swept by pid liveness on POSIX and lease age everywhere — never `os.kill(pid, 0)` on Windows, where CPython maps a non-console signal onto `TerminateProcess` and the POSIX idiom would kill the peer it was counting). `parallel.default_jobs()` divides the worker budget by that census; `cache._gc` defers eviction while a peer is live; `_meta.concurrency` publishes peers at start, whether the budget was shared, and that a shared run is not an isolated-machine measurement. `ASK_NO_CONCURRENCY_CENSUS=1` restores the previous behaviour. Closure needs a field round measuring the same commands with the block attached. |
46
+ | `BUG-22` / `REG-02` (enforcement half) | High | **fixed** | The ceiling was checked at phase boundaries only, so a phase could allocate without bound and be refused once it finished — the 2 029.92 MB peak under a 1 536 MB ceiling that was genuinely in force. `resource_budget` now arms a ceiling, samples it inside the parse loop (throttled to one footprint sample per 0.5 s; a per-file call costs one clock read) and raises a typed `CeilingExceeded` that the CLI renders as the same `MEMORY_TOO_LARGE` refusal the boundary check emits. Deliberately not a sampler thread: a thread can see the crossing but cannot unwind the main thread anywhere safe. `_meta.memory.enforcement` publishes when the ceiling is checked. |
47
+ | `BUG-10` | High | **fixed** | The zero-endpoint answer had four named detections and everything else fell through to "no recognized routing construct was found", which reads as *no HTTP surface*. `unmodeled_routing_evidence` now publishes files declaring an annotation whose argument is a path-like string literal that produced no endpoint — a rule that names no framework, per this repository's vendor-agnostic convention. Measured: `struts` reports 4 files under `@Action`/`@Namespace` where the answer used to say nothing was found; `spring-petclinic` reports none. |
48
+ | `NEW-02` / `BUG-05` | High | **fixed** | Overloaded handlers all inherited the final overload's line because the symbol index is keyed `Class#method` with no parameter types. The extractor has no signature to disambiguate with, so the row's other branch applies: `overload_count`, `anchor_ambiguity` and `anchor_candidate_lines` are published per entry, with `anchor_ambiguity_note` once beside the list, and an unambiguous anchor carries none of it. |
49
+ | `BUG-13` | High | **fixed** | `selftest .` over nested repositories warned and then ran the ledger against the workspace — the shape behind `selftest` falling from 9/12 to 1/12 rows inside one 120 s deadline. The implicit `.` now refuses with `INVALID_USAGE` before any row runs, naming the count, with `--allow-nested` for a caller who means the workspace. |
50
+ | `BUG-16` | High | **fixed** | The context cache's caps (30-day TTL, 256 entries) were real and lived inside `_gc`, so ~1.7 GB of growth had no readable contract. `cache.eviction_contract()` and `context_cache.eviction_contract()` are now the one authority each `_gc` reads, and `cache status` publishes them per store in JSON and text. The parse store already published its budget; its block projects those same figures rather than measuring them again. |
51
+ | `ALT-08` (arithmetic half) | Low | **fixed** | `_truncation_summary.final_size_bytes` was measured before the summary and `_budget_note` were attached, so the one part of the payload the accounting omitted was the accounting. It is now measured over the assembled object and republished to a fixed point, with `final_size_basis` written before the fixed point is sought and `content_size_bytes` keeping the trimmed-content figure under a name that says which it is. |
52
+ | `ALT-25` (`impact-chain` audit clock) | Low | **fixed** | `metadata.audit_time_ms` was always ~0.0 on the default path and the 5.9.25 round read it as a security phase skipped by `ALT-03`. It is not: `include_findings` is opt-in, so the clock measured the elapsed time of *not* running an audit. It is `null` when `findings_status` is `not_computed`, and `query_time_basis` states the rule. |
53
+ | `retrieve security-surface --target` | Low | **fixed** | Four rounds tried it and got "No such option: --target". The intent is repository-wide by construction, and the refusal now says so and names `security-chain --target`, derived from `intent_router.ANCHOR_KINDS` rather than a second list. |
54
+ | `ask --help` latency | Low | **open, not reproduced here** | 0.41–0.44 s over three runs on the engineering host against 14.4–14.7 s in the field under confirmed contention. Re-measure with `_meta.concurrency` attached before treating it as its own row. |
55
+ | `ALT-07` (`remediate` hang), `ALT-10` (`onboard`) | Medium | **open, unchanged** | Both share the erratic signature `R-01` now instruments. No separate mechanism found in source this round; neither reproduces on the engineering host. |
56
+ | `BUG-02`, `BUG-12` | Critical maximum | **open, unchanged** | Both need the field's own large repository to reproduce (`rc=127` with no output; multi-gigabyte RSS while building a small answer). `BUG-22`'s sampler bounds the second one's damage without closing it. |
57
+
58
+ ## Current Synchronization — Alternative External Audit `5.9.27`, shared-machine contention confirmed (2026-09-02)
59
+
60
+ **First score uptick in four rounds (3.8 → 4.6/10), with a large
61
+ qualification found mid-session: the audit machine was shared with a second,
62
+ independent `ask` test harness.** The native-Windows auditor found
63
+ `entry-trace.jsonl` (this ledger's own diagnostic, added last round) growing
64
+ with invocations they never launched, against five OSS reference
65
+ repositories under the exact same `timeout N ask ...` harness pattern they
66
+ use, and confirmed a live foreign `ask.exe` process via `Get-CimInstance
67
+ Win32_Process` under their own Windows user. Two of their own `spring-audit`
68
+ hangs overlapped a 525-second window of 34 foreign invocations. Full
69
+ evidence:
70
+ [`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md).
71
+
72
+ **`R-01` (new, highest priority):** if ASK's shared worker pool and cache do
73
+ not isolate concurrent `ask` processes on one machine, contention could
74
+ produce exactly the pattern reported since 5.9.23 — the same command
75
+ sometimes hanging, sometimes returning empty near-instantly, no per-process
76
+ variable distinguishing the two. This is a real, evidenced contributing
77
+ factor, not a proven sole cause (one hang occurred after 20 seconds of no
78
+ foreign activity at all). The open question for engineering: is ASK's worker
79
+ pool designed to tolerate concurrent `ask` invocations on one machine, or
80
+ does it assume exclusive use? If the latter, that is an architectural
81
+ constraint, not a series of unrelated command bugs, and changes where the
82
+ fix belongs.
83
+
84
+ **Entry-point trace progress, confirmed:** the auditor's own invocations —
85
+ including ones that returned empty or hung — now appear in `entry-trace.jsonl`
86
+ (the fix from last round's `R-01`). This confirms `main_entry` is reached on
87
+ the failing runs. `empty_answer_diagnostics.record()` still never fired on
88
+ any observed failure this session, which narrows the search specifically to
89
+ somewhere between `main_entry` and the output-promise guard — a materially
90
+ smaller surface than "somewhere in the process," three rounds ago.
91
+
92
+ | ID | Severity | Status | Evidence and required closure |
93
+ |---|---:|---|---|
94
+ | `R-01` (contention) | Critical maximum | **open, new evidenced hypothesis** | Confirmed shared-machine contention during this audit session (foreign `ask` process, matching harness pattern, overlapping timing with 2 of the auditor's own hangs). Needs an internal answer, not more external symptom-chasing: does the worker pool serialize or isolate concurrent invocations, or assume exclusive use? If it assumes exclusive use, `ALT-01`/`ALT-03`/`NEW-01` may be one architectural defect, not several. |
95
+ | `R-01` (entry trace) | — | **confirmed working, narrows the search** | The auditor's own failing invocations now appear in `entry-trace.jsonl`. `main_entry` is reached; the gap is between there and `_fail_on_missing_required_answer`/`_fail_on_unkept_output_promise`, which still never fire. |
96
+ | `ALT-09` | Critical | **fixed, reconfirmed a third session** | Piped `n` to `cache clear` aborts correctly. |
97
+ | `BUG-15` / `BUG-21` | Low | **fixed, reconfirmed** | No markup leak; `--jobs` range validated. |
98
+ | `R-05` from last round (`selftest` itemization) | High | **fixed, reconfirmed** | `"10 ledger row(s) could not run: ASK-16, B6, E-37, ..."` replaces the prior generic slug. |
99
+ | `onboard` | Medium | **open, still the most erratic single measurement** | 904ms to a full 200s external kill, same invocation, same tree, within one session. Cross-reference against `entry-trace.jsonl` timing before assuming a cold/warm explanation. |
100
+ | `ask --help` latency | Low | **open, persisted a second round** | 14.4-14.7s this session (was 3-4s last round, flagged then as "worth its own row if it persists"). It has persisted. Not verified in isolation from `R-01`'s contention this session. |
101
+
102
+ The remaining rows (`BUG-01`, `BUG-03`, `BUG-06`, `BUG-08` through `BUG-23`,
103
+ `REG-02`, `REG-03`, `NEW-02`) were not relaunched this round for time budget;
104
+ no regression signal against them. `watch`'s ~55s warm-before-first-tick and
105
+ `retrieve security-surface --target` remain unchanged, correctly understood
106
+ as real cost and a known gap respectively, not new defects.
107
+
108
+ **Corroborating data point, unverified in detail:** a separate exchange the
109
+ same session referenced a distinct "External" lineage audit of 5.9.27 scoring
110
+ **8.1/10** on the five OSS reference repositories found in the trace above —
111
+ consistent with the shared-machine hypothesis (two lineages, two repo
112
+ populations, one machine) but not independently confirmed here; the
113
+ transcript fragment available was too corrupted to verify its table in
114
+ detail and is not published as a standalone audit document.
115
+
17
116
  ## Current Synchronization — External Audit `5.9.26`, self-contradictory session (2026-09-02)
18
117
 
118
+ > **Provenance correction, added during the 5.9.27 round.** The
119
+ > native-Windows auditor for 5.9.27 states plainly that the "initial
120
+ > 129-invocation pass ... 0/23 ... 7.4/10" described below does not
121
+ > correspond to anything they ran. The 5.9.27 round independently confirmed
122
+ > the audit machine was shared with a second, concurrent `ask` test harness
123
+ > exercising five OSS reference repositories (`thingsboard`, `mall`,
124
+ > `struts`, `spring-petclinic`, `jhipster-sample-app`) — a repo set and
125
+ > pattern that matches the "External" multi-repository lineage this ledger
126
+ > has tracked separately since 5.9.22 (`AUDIT-2026-09-02-EXTERNAL-5.9.26.md`
127
+ > below, and the 6.3→3.8 scores it reflects). The likely explanation is that
128
+ > the two-pass narrative below mixed observations from two independent,
129
+ > concurrent sessions on one shared machine rather than being one
130
+ > evaluator's self-revision. Left as written below rather than rewritten,
131
+ > with this correction attached, per this ledger's own discipline of
132
+ > recording when it got something wrong rather than quietly fixing the
133
+ > record. See
134
+ > [`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md)
135
+ > for the evidence (`entry-trace.jsonl` cross-contamination, a live foreign
136
+ > process confirmed via `Get-CimInstance Win32_Process`).
137
+
19
138
  **The 5.9.26 fix batch did not close the release gate, and new evidence
20
139
  narrows the failure to before the guard rather than inside it.** This audit
21
140
  round is internally contradictory and both halves are published rather than
@@ -1,5 +1,55 @@
1
1
  # ASK — Development Roadmap
2
2
 
3
+ ### Release 5.9.28 — remediation batch on the 5.9.27 queue, the pool question answered in source
4
+
5
+ The P0 below it asked whether the shared worker pool tolerates concurrent
6
+ `ask` processes on one machine or assumes exclusive use. Read from source, it
7
+ assumed exclusive use: `parallel.default_jobs()` returned `cpu_count() - 1`
8
+ **per process**, so `k` concurrent invocations started `k × (N-1)` parsing
9
+ workers on `N` cores, with no field in any payload saying the run had shared
10
+ the machine. The cache was not the same kind of defect — writes are
11
+ unique-temp + `os.replace` with retry and every read is guarded — except for
12
+ eviction, which deleted the working set a live peer was reading.
13
+
14
+ Nine rows closed in this batch, one commit each: `R-01` (census, divided
15
+ worker budget, `_meta.concurrency`, deferred eviction), `BUG-22`/`REG-02`'s
16
+ enforcement half (RSS sampled inside the phases, typed refusal), `BUG-10`
17
+ (routing evidence this model does not read), `NEW-02`/`BUG-05` (overload
18
+ anchor ambiguity), `BUG-13` (`selftest` refuses an unscoped workspace run),
19
+ `BUG-16` (every cache store publishes its eviction contract), `ALT-08`'s
20
+ arithmetic half, `ALT-25` (`audit_time_ms` null when the audit never ran) and
21
+ the four-round `retrieve security-surface --target` refusal.
22
+
23
+ | Priority | Required work and closure boundary |
24
+ |---|---|
25
+ | P0 | Re-measure the audit-command family in the field with `_meta.concurrency` attached. The census divides the pool and publishes whether the machine was shared; a round that still shows the erratic pattern with `peer_invocations_at_start: 0` separates contention from whatever else remains, which four rounds could not do. |
26
+ | P0 | `ALT-01`/`ALT-03` stay open: one hang was observed with nothing else running, and this batch removed a mechanism, not the symptom. Keep narrowing between `main_entry` and the output-promise guard. |
27
+ | P1 | `BUG-02` (`rc=127`, no output) and `BUG-12` (multi-gigabyte RSS for a small answer) need the field's own large repository. `BUG-22`'s in-phase sampler bounds the damage of the second without closing it. |
28
+ | P2 | `ask --help` measured 0.41–0.44 s on the engineering host against 14.4–14.7 s in the field under confirmed contention. Re-measure with the disclosure block before profiling it as a standalone defect. |
29
+
30
+ ### Alternative Audit Intake — release 5.9.27, shared-machine contention confirmed
31
+
32
+ First score uptick in four rounds (3.8 → 4.6/10), found alongside evidence
33
+ that the audit machine was shared with a second, independent `ask` test
34
+ harness: `entry-trace.jsonl` (added last release) grew with invocations the
35
+ auditor never launched, against five OSS repositories, under the auditor's
36
+ own exact harness pattern, and `Get-CimInstance Win32_Process` confirmed a
37
+ live foreign `ask.exe` process under the same Windows user. This reframes,
38
+ without resolving, the four-round pattern of the same command sometimes
39
+ hanging and sometimes returning empty near-instantly with no per-process
40
+ variable to distinguish the two.
41
+
42
+ | Priority | Required work and closure boundary |
43
+ |---|---|
44
+ | P0 | Answer directly, with internal data (lock/semaphore metrics, not external inference): is ASK's shared worker pool and cache designed to tolerate concurrent `ask` processes on one machine, or does it assume exclusive use? If the latter, `ALT-01`/`ALT-03`/`NEW-01` may be one architectural defect — the shared pool not isolating or serializing concurrent access — rather than several unrelated command bugs, and the fix belongs at the pool/cache layer, not in each affected command. |
45
+ | P0 | Continue narrowing between `main_entry` (confirmed reached, per `entry-trace.jsonl` now showing failing invocations) and `_fail_on_missing_required_answer`/`_fail_on_unkept_output_promise` (still never fire). The search surface has gone from "somewhere in the process" to "between these two specific points" in one release; keep closing it rather than re-verifying the entry-point question again. |
46
+ | P1 | `onboard .` remains the most erratic single measurement across all rounds — 904ms to a full 200s external kill, same invocation, same tree, within one session. Cross-reference its timestamps against `entry-trace.jsonl` foreign-process activity before assuming a simple cold/warm split. |
47
+ | P2 | `ask --help` costs 14.4-14.7s this round, worse than the 3-4s flagged last round as "worth its own row if it persists" — it has persisted across two rounds. Re-verify in a session confirmed free of the contention `R-01` found, before profiling it as a standalone defect. |
48
+
49
+ Full evidence, including the entry-trace cross-contamination and process
50
+ confirmation, is in
51
+ [`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md).
52
+
3
53
  ### External Audit Intake — release 5.9.26, the guard is not being reached
4
54
 
5
55
  A self-contradictory session (0/23 empty on one pass, 0/35 successful on a
@@ -11,12 +61,12 @@ That rules out "an exception inside command logic reaches the guard and the
11
61
  guard mishandles it" and points at the failing runs never reaching
12
62
  `main_entry`'s wrapper at all.
13
63
 
14
- | Priority | Required work and closure boundary |
15
- |---|---|
16
- | P0 | Add a debug-level log line at the very top of `main_entry`, before `app(prog_name="ask")` is called, and confirm it fires on every invocation including the empty-answer ones. If it does not, the failure is upstream of Python's own entry point (an external kill, a native crash, an `os._exit()`-shaped exit in a dependency) and the whole `ALT-01`/`ALT-03` investigation must move there. This is answerable in one native debugging session and has not been tried in four audit rounds. |
17
- | P1 | `remediation-report` (`BUG-17`) now returns byte-identical output for no path, a real path, and a nonexistent path. Either declare and filter on `path`, or reject any positional explicitly with the `INVALID_USAGE` this command gave through 5.9.25 — "accept and silently ignore" is worse than either alternative. |
18
- | P1 | `onboard .` hit the external 200s kill entirely in one run this session (worse than 5.9.25's 164.9s worst case) and answered in 83.5s in another, untouched run seconds later — the same erratic shape as `ALT-01`/`ALT-03`, not a simple cold/warm split. Bisect with the same instrumentation once the P0 above lands. |
19
- | P2 | `ask --help` costs 3-4s warm on the audited repository (14.4s cold), which `REG-01` did not claim to fix — that row closed the 82-120s nested-workspace hang specifically. Profile whether `--help`'s repository-profile hint line is re-scanning file counts that `cache status` already has cached. |
64
+ | Priority | Required work and closure boundary | 5.9.27 |
65
+ |---|---|---|
66
+ | P0 | Add a debug-level log line at the very top of `main_entry`, before `app(prog_name="ask")` is called, and confirm it fires on every invocation including the empty-answer ones. If it does not, the failure is upstream of Python's own entry point (an external kill, a native crash, an `os._exit()`-shaped exit in a dependency) and the whole `ALT-01`/`ALT-03` investigation must move there. This is answerable in one native debugging session and has not been tried in four audit rounds. | **Done and confirmed on native Windows.** `record_entry_reached` traces every audit-family invocation; the 5.9.27 audit's own failing runs appear in it. `main_entry` is confirmed reached — the search moves to the section above. |
67
+ | P1 | `remediation-report` (`BUG-17`) now returns byte-identical output for no path, a real path, and a nonexistent path. Either declare and filter on `path`, or reject any positional explicitly with the `INVALID_USAGE` this command gave through 5.9.25 — "accept and silently ignore" is worse than either alternative. | **Done.** `path_argument: {given, used: false}` now discloses it in both formats; the path is still accepted, deliberately. |
68
+ | P1 | `onboard .` hit the external 200s kill entirely in one run this session (worse than 5.9.25's 164.9s worst case) and answered in 83.5s in another, untouched run seconds later — the same erratic shape as `ALT-01`/`ALT-03`, not a simple cold/warm split. Bisect with the same instrumentation once the P0 above lands. | Open — still the most erratic single measurement across all rounds (904ms to a full 200s kill in 5.9.27). See the contention hypothesis above. |
69
+ | P2 | `ask --help` costs 3-4s warm on the audited repository (14.4s cold), which `REG-01` did not claim to fix — that row closed the 82-120s nested-workspace hang specifically. Profile whether `--help`'s repository-profile hint line is re-scanning file counts that `cache status` already has cached. | Open, worse (14.4-14.7s in 5.9.27) — but measured on a machine confirmed to have contention this round; re-verify in isolation before profiling further. |
20
70
 
21
71
  The full measurement matrix, including the retracted 7.4/10 intermediate
22
72
  reading, is in
@@ -5,6 +5,47 @@
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
+ > **RELEASE 5.9.28 — the pool question is answered, and the answer was
9
+ > "exclusive use".** The audit asked engineering a direct question
10
+ > instead of reporting another symptom, and reading the source settled it: the
11
+ > parse worker pool sized itself as if every run owned the whole machine, so
12
+ > two concurrent runs asked for twice the machine and nothing in either
13
+ > answer said so. Runs now count each other, divide the worker budget between
14
+ > them, and publish whether the machine was shared — the per-process variable
15
+ > four audit rounds did not have. Eight further rows closed with it, each with
16
+ > its own regression battery: the memory ceiling now stops a run where it is
17
+ > crossed instead of after the phase that crossed it; a repository routed by a
18
+ > framework this product does not model is told so instead of being reported
19
+ > as having no HTTP surface; overloaded handlers publish that their line is one
20
+ > of several rather than guessing one; `selftest` refuses to run against a
21
+ > whole workspace by accident; and every cache store states what evicts it.
22
+ > Suite: 13 710 tests, the same 22 pre-existing failures before and after —
23
+ > zero regressions. The release gate is unchanged until the field re-measures.
24
+
25
+ > **5.9.27 RE-AUDIT — shared-machine contention confirmed, first score uptick
26
+ > in four rounds (3.8 → 4.6/10).** The native-Windows auditor found the audit
27
+ > machine shared with a second, independent `ask` test harness — a shared
28
+ > diagnostic log grew with invocations they never launched, against five OSS
29
+ > repositories, and a live foreign process was confirmed under their own
30
+ > Windows user via `Get-CimInstance Win32_Process`. This reframes, without
31
+ > resolving, the four-round pattern of the same command sometimes hanging and
32
+ > sometimes returning empty near-instantly with nothing to distinguish the
33
+ > two: if ASK's shared worker pool and cache assume exclusive machine use
34
+ > rather than tolerating concurrent invocations, that is one architectural
35
+ > answer to what has looked like several unrelated command bugs. Separately,
36
+ > last release's entry-point trace fix is confirmed working on native
37
+ > Windows — the auditor's own failing runs now appear in it, proving the
38
+ > process reaches this product's entry point before going silent, which
39
+ > narrows the remaining search to a small, specific span of code. The release
40
+ > gate is unchanged: do not use the audit-command family for unattended CI.
41
+ > This round also surfaced a provenance question about the prior release's
42
+ > own audit record — see
43
+ > [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md) for the correction — and a distinct,
44
+ > materially higher score (8.1/10) from a separate audit lineage on clean OSS
45
+ > reference repositories, consistent with the repository itself being a
46
+ > variable worth isolating. See
47
+ > [`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md).
48
+
8
49
  > **5.9.26 RE-AUDIT — self-contradictory session, sharpest lead in four
9
50
  > rounds.** A 129-invocation pass reproducing the exact 5.9.25 empty-answer
10
51
  > methodology found zero empty answers; a second, larger pass in the same
@@ -279,7 +279,7 @@ pipx install sourcecode # isolated install, no venv needed
279
279
 
280
280
  # Verify
281
281
  ask version
282
- # ask 5.9.27
282
+ # ask 5.9.28
283
283
  ```
284
284
 
285
285
  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.27"
7
+ version = "5.9.28"
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.27"
7
+ __version__ = "5.9.28"