sourcecode 5.9.24__tar.gz → 5.9.26__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 (469) hide show
  1. {sourcecode-5.9.24 → sourcecode-5.9.26}/CHANGELOG.md +69 -3
  2. {sourcecode-5.9.24 → sourcecode-5.9.26}/PKG-INFO +16 -12
  3. {sourcecode-5.9.24 → sourcecode-5.9.26}/README.md +15 -11
  4. sourcecode-5.9.26/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +72 -0
  5. sourcecode-5.9.26/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +112 -0
  6. sourcecode-5.9.26/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +62 -0
  7. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/DEFECT-LEDGER.md +66 -28
  8. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/DEVELOPMENT-ROADMAP.md +29 -0
  9. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/EXECUTIVE-ROADMAP.md +40 -0
  10. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/USER_GUIDE.md +1 -1
  11. {sourcecode-5.9.24 → sourcecode-5.9.26}/pyproject.toml +1 -1
  12. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/answer_bounds.py +16 -1
  14. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cli.py +153 -12
  15. sourcecode-5.9.26/src/sourcecode/empty_answer_diagnostics.py +94 -0
  16. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/envelope.py +4 -1
  17. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/migrate_check.py +9 -0
  18. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/posture.py +10 -1
  19. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/progress.py +21 -0
  20. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/reconciliation.py +14 -5
  21. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/release_info.py +1 -1
  22. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/repository_ir.py +20 -1
  23. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/resource_budget.py +12 -3
  24. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/risk.py +16 -1
  25. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/rule_pass.py +9 -0
  26. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/security_posture.py +30 -4
  27. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/selftest.py +33 -0
  28. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_security_audit.py +31 -5
  29. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/watch_loop.py +1 -1
  30. {sourcecode-5.9.24 → sourcecode-5.9.26}/.github/workflows/build-windows.yml +0 -0
  31. {sourcecode-5.9.24 → sourcecode-5.9.26}/.github/workflows/perf-gate.yml +0 -0
  32. {sourcecode-5.9.24 → sourcecode-5.9.26}/.github/workflows/windows-battery.yml +0 -0
  33. {sourcecode-5.9.24 → sourcecode-5.9.26}/.github/workflows/windows-regression.yml +0 -0
  34. {sourcecode-5.9.24 → sourcecode-5.9.26}/.gitignore +0 -0
  35. {sourcecode-5.9.24 → sourcecode-5.9.26}/.ruff.toml +0 -0
  36. {sourcecode-5.9.24 → sourcecode-5.9.26}/CLAUDE.md +0 -0
  37. {sourcecode-5.9.24 → sourcecode-5.9.26}/CODE_OF_CONDUCT.md +0 -0
  38. {sourcecode-5.9.24 → sourcecode-5.9.26}/CONTRIBUTING.md +0 -0
  39. {sourcecode-5.9.24 → sourcecode-5.9.26}/LICENSE +0 -0
  40. {sourcecode-5.9.24 → sourcecode-5.9.26}/NOTICE +0 -0
  41. {sourcecode-5.9.24 → sourcecode-5.9.26}/SECURITY.md +0 -0
  42. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  43. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  44. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  45. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  46. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  47. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  48. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  49. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  50. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  51. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  52. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  53. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  54. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  55. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  56. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  57. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  58. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  59. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  60. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  61. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  62. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  63. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
  64. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
  65. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  66. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/CACHE.md +0 -0
  67. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/COMMERCIAL-OFFER.md +0 -0
  68. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/CUSTOMER-VALIDATION.md +0 -0
  69. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/DEMO-5MIN.md +0 -0
  70. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  71. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/EXECUTION-PLAN-12MO.md +0 -0
  72. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/MANUAL-USUARIO.md +0 -0
  73. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/MODERNIZATION.md +0 -0
  74. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/PRODUCT-ROUTE.md +0 -0
  75. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/PRODUCT_AUDIT.md +0 -0
  76. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/PRODUCT_IDENTITY.md +0 -0
  77. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/PRODUCT_TIERS.md +0 -0
  78. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/RC1-CHECKLIST.md +0 -0
  79. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
  80. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/RELEASE-CHECKLIST.md +0 -0
  81. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/RELEASE-VERIFICATION.md +0 -0
  82. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  83. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  84. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  85. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-assessment-report.md +0 -0
  86. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  87. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  88. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  89. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  90. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  91. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  92. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  93. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  94. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  95. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  96. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  97. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  98. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  99. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  100. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  101. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  102. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  103. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  104. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  105. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  106. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  107. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  108. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0006-performance-harness.md +0 -0
  109. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  110. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  111. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/consumer-disposition-inventory.md +0 -0
  112. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/overview.md +0 -0
  113. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/product-architecture-review.md +0 -0
  114. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/product-strategy-layering.md +0 -0
  115. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  116. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/architecture/semantic-ir-roadmap.md +0 -0
  117. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/baseline-ci.yml +0 -0
  118. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/commercial-pipeline-audit.md +0 -0
  119. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/contracts-ci.yml +0 -0
  120. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/contracts.md +0 -0
  121. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  122. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  123. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  124. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  125. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  126. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  127. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  128. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  129. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/licensing-schema.md +0 -0
  130. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/migrate-check.md +0 -0
  131. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/pack-gate-github-actions.yml +0 -0
  132. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/pack-gate-gitlab.yml +0 -0
  133. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/README.md +0 -0
  134. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/REGRESSION-GATE.md +0 -0
  135. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  136. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  137. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  138. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  139. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  140. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  141. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  142. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  143. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  144. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  145. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  146. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  147. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  148. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  149. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  150. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  151. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  152. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  153. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  154. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  155. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  156. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  157. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  158. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  159. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  160. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  161. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  162. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  163. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  164. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  165. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  166. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  167. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  168. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  169. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  170. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  171. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  172. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  173. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  174. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  175. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  176. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  177. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
  178. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
  179. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/README.md +0 -0
  180. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  181. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  182. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  183. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  184. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  185. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  186. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/baselines/reference-best/README.md +0 -0
  187. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  188. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/posture.md +0 -0
  189. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/privacy.md +0 -0
  190. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/pro-experience-audit.md +0 -0
  191. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/schema.md +0 -0
  192. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/spec/envelope-v1.md +0 -0
  193. {sourcecode-5.9.24 → sourcecode-5.9.26}/docs/spring-audit-ci.yml +0 -0
  194. {sourcecode-5.9.24 → sourcecode-5.9.26}/hatch_build.py +0 -0
  195. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/compare_integration_engines.py +0 -0
  196. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/context_cost_harness.py +0 -0
  197. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/customer_smoke_test.sh +0 -0
  198. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/generate_jdk_exports.py +0 -0
  199. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/perf_gate.py +0 -0
  200. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/perf_harness.py +0 -0
  201. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/sync_gate_anchors.py +0 -0
  202. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/test_fast.sh +0 -0
  203. {sourcecode-5.9.24 → sourcecode-5.9.26}/scripts/windows_reliability_matrix.py +0 -0
  204. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/__main__.py +0 -0
  205. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/access_drift.py +0 -0
  206. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/adaptive_scanner.py +0 -0
  207. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/analysis_budget.py +0 -0
  208. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/archetype.py +0 -0
  209. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/architectural_baseline.py +0 -0
  210. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/architectural_delta.py +0 -0
  211. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/architecture_analyzer.py +0 -0
  212. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/architecture_summary.py +0 -0
  213. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/ast_extractor.py +0 -0
  214. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/audit_clusters.py +0 -0
  215. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/audit_recipe.py +0 -0
  216. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/audit_report.py +0 -0
  217. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/audit_since.py +0 -0
  218. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/audit_verify.py +0 -0
  219. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/baseline_attestation.py +0 -0
  220. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/baseline_autocapture.py +0 -0
  221. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/breaking_changes.py +0 -0
  222. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/build_modules.py +0 -0
  223. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/build_stamp.py +0 -0
  224. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/bundled_docs.py +0 -0
  225. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/c4_render.py +0 -0
  226. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cache.py +0 -0
  227. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cache_model.py +0 -0
  228. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cache_observation.py +0 -0
  229. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/call_surface.py +0 -0
  230. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/caller_metrics.py +0 -0
  231. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/caller_reach.py +0 -0
  232. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/canonical_ir.py +0 -0
  233. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/chain_rules.py +0 -0
  234. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/change_plan.py +0 -0
  235. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/ci_output.py +0 -0
  236. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cir_graphs.py +0 -0
  237. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/classifier.py +0 -0
  238. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/click_runtime.py +0 -0
  239. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/client_calls.py +0 -0
  240. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/code_notes_analyzer.py +0 -0
  241. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/compare.py +0 -0
  242. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/confidence_analyzer.py +0 -0
  243. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/constraint_diff.py +0 -0
  244. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/consumer_join.py +0 -0
  245. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/container_wiring.py +0 -0
  246. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/context_cache.py +0 -0
  247. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/context_graph.py +0 -0
  248. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/context_scorer.py +0 -0
  249. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/context_summarizer.py +0 -0
  250. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/contract_diff.py +0 -0
  251. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/contract_init.py +0 -0
  252. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/contract_model.py +0 -0
  253. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/contract_pipeline.py +0 -0
  254. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/coverage_parser.py +0 -0
  255. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cve_feed.py +0 -0
  256. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/cve_reachability.py +0 -0
  257. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/data_exposure.py +0 -0
  258. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/data_labels.py +0 -0
  259. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/declarations.py +0 -0
  260. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/defect_classes/__init__.py +0 -0
  261. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/defect_classes/registry.json +0 -0
  262. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/defect_identity.py +0 -0
  263. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/degradation.py +0 -0
  264. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/dependency_analyzer.py +0 -0
  265. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/deployment_prefix.py +0 -0
  266. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detach.py +0 -0
  267. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/__init__.py +0 -0
  268. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/base.py +0 -0
  269. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/csproj_parser.py +0 -0
  270. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/dart.py +0 -0
  271. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/dotnet.py +0 -0
  272. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/elixir.py +0 -0
  273. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/go.py +0 -0
  274. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/heuristic.py +0 -0
  275. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/hybrid.py +0 -0
  276. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/java.py +0 -0
  277. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/jvm_ext.py +0 -0
  278. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/nodejs.py +0 -0
  279. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/parsers.py +0 -0
  280. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/php.py +0 -0
  281. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/project.py +0 -0
  282. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/python.py +0 -0
  283. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/ruby.py +0 -0
  284. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/rust.py +0 -0
  285. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/systems.py +0 -0
  286. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/terraform.py +0 -0
  287. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/detectors/tooling.py +0 -0
  288. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/doc_analyzer.py +0 -0
  289. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/dynamic_argument_surface.py +0 -0
  290. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/empty_reach.py +0 -0
  291. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/endpoint_disposition.py +0 -0
  292. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/endpoint_literals.py +0 -0
  293. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/endpoint_metrics.py +0 -0
  294. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/entrypoint_classifier.py +0 -0
  295. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/env_analyzer.py +0 -0
  296. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/environment_resolution.py +0 -0
  297. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/error_schema.py +0 -0
  298. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/evidence_provider.py +0 -0
  299. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/execution_plan.py +0 -0
  300. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/explain.py +0 -0
  301. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/explain_endpoint.py +0 -0
  302. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/facts/__init__.py +0 -0
  303. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/facts/registry.json +0 -0
  304. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/field_deprecations.py +0 -0
  305. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/file_chunker.py +0 -0
  306. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/file_classifier.py +0 -0
  307. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/filter_surface.py +0 -0
  308. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/findings_baseline.py +0 -0
  309. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/format_contract.py +0 -0
  310. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/fqn_utils.py +0 -0
  311. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/functional_routes.py +0 -0
  312. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/gate_anchors.py +0 -0
  313. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/git_analyzer.py +0 -0
  314. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/git_checkout.py +0 -0
  315. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/github_diff.py +0 -0
  316. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/graph_analyzer.py +0 -0
  317. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/graph_evidence.py +0 -0
  318. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/hibernate_strat.py +0 -0
  319. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/identity_fallback.py +0 -0
  320. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/integration_coordinates.py +0 -0
  321. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/intent_router.py +0 -0
  322. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/jdk_exports.py +0 -0
  323. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/jvm_inventory.py +0 -0
  324. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/license.py +0 -0
  325. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/manifest_cache.py +0 -0
  326. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/__init__.py +0 -0
  327. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/dependency_import.py +0 -0
  328. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  329. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  330. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  331. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  332. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  333. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/orchestrator.py +0 -0
  334. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/registry.py +0 -0
  335. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/runner.py +0 -0
  336. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp/server.py +0 -0
  337. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/mcp_nudge.py +0 -0
  338. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/metrics_analyzer.py +0 -0
  339. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/migration_apply.py +0 -0
  340. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/migration_blast.py +0 -0
  341. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/non_coverage.py +0 -0
  342. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/openapi_surface.py +0 -0
  343. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/openrewrite_recipe.py +0 -0
  344. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/output_bounds.py +0 -0
  345. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/output_budget.py +0 -0
  346. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/output_ceiling.py +0 -0
  347. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/output_encoding.py +0 -0
  348. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/output_sink.py +0 -0
  349. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/pack_manifest.py +0 -0
  350. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/packs.py +0 -0
  351. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/parallel.py +0 -0
  352. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/parse_cache.py +0 -0
  353. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/partial_contract.py +0 -0
  354. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/path_admission.py +0 -0
  355. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/path_display.py +0 -0
  356. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/path_filters.py +0 -0
  357. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/perf.py +0 -0
  358. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/phased_run.py +0 -0
  359. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/pipe_contract.py +0 -0
  360. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/pr_comment_renderer.py +0 -0
  361. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/pr_impact.py +0 -0
  362. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/pr_risk.py +0 -0
  363. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/prepare_context.py +0 -0
  364. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/product_info.py +0 -0
  365. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/provenance.py +0 -0
  366. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/ranking_engine.py +0 -0
  367. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/readiness_timeline.py +0 -0
  368. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/readonly.py +0 -0
  369. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/redactor.py +0 -0
  370. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/reference_facts.py +0 -0
  371. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/regress.py +0 -0
  372. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/regulatory_pack.py +0 -0
  373. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/relevance_scorer.py +0 -0
  374. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/remediation_diff.py +0 -0
  375. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/remediation_flow.py +0 -0
  376. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/remediation_report.py +0 -0
  377. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/remedies.py +0 -0
  378. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/rename_refactor.py +0 -0
  379. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/repo_classifier.py +0 -0
  380. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/__init__.py +0 -0
  381. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/context.py +0 -0
  382. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/errors.py +0 -0
  383. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/executor.py +0 -0
  384. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/planner.py +0 -0
  385. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/query.py +0 -0
  386. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/request.py +0 -0
  387. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/resolution.py +0 -0
  388. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/result.py +0 -0
  389. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/retriever.py +0 -0
  390. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/runtime.py +0 -0
  391. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps.py +0 -0
  392. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  393. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_graph.py +0 -0
  394. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_impact.py +0 -0
  395. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_intf.py +0 -0
  396. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_struct.py +0 -0
  397. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  398. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/ris.py +0 -0
  399. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/risk_model.py +0 -0
  400. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/rule_catalog.py +0 -0
  401. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/runs.py +0 -0
  402. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/runtime_classifier.py +0 -0
  403. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/sarif.py +0 -0
  404. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/sarif_emit.py +0 -0
  405. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/scanner.py +0 -0
  406. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schema.py +0 -0
  407. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schema_producers.py +0 -0
  408. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schema_registry.py +0 -0
  409. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  410. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  411. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  412. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  413. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  414. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  415. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  416. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/security_chain.py +0 -0
  417. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/security_config.py +0 -0
  418. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/security_config_scan.py +0 -0
  419. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/selection_contract.py +0 -0
  420. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/self_audit.py +0 -0
  421. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/semantic_analyzer.py +0 -0
  422. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/semantic_impact_engine.py +0 -0
  423. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/semantic_integration_engine.py +0 -0
  424. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/semantic_services.py +0 -0
  425. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/serializer.py +0 -0
  426. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/servlet_surface.py +0 -0
  427. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/source_text.py +0 -0
  428. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_event_topology.py +0 -0
  429. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_findings.py +0 -0
  430. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_impact.py +0 -0
  431. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_model.py +0 -0
  432. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_profiles.py +0 -0
  433. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_properties.py +0 -0
  434. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_semantic.py +0 -0
  435. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/spring_tx_analyzer.py +0 -0
  436. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/sql_taint.py +0 -0
  437. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/summarizer.py +0 -0
  438. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/target_admission.py +0 -0
  439. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/__init__.py +0 -0
  440. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/config.py +0 -0
  441. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/consent.py +0 -0
  442. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/events.py +0 -0
  443. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/filters.py +0 -0
  444. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/telemetry/transport.py +0 -0
  445. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/test_gap_ranking.py +0 -0
  446. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/test_sources.py +0 -0
  447. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/text_input.py +0 -0
  448. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/timeline.py +0 -0
  449. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/timeline_cache.py +0 -0
  450. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/token_estimate.py +0 -0
  451. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/tree_utils.py +0 -0
  452. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/type_usage_surface.py +0 -0
  453. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/validation_inference.py +0 -0
  454. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/validation_surface.py +0 -0
  455. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/verify_edit.py +0 -0
  456. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/verify_repo.py +0 -0
  457. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/verify_rules.py +0 -0
  458. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/version_check.py +0 -0
  459. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/vex.py +0 -0
  460. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/waivers.py +0 -0
  461. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/wired_surface.py +0 -0
  462. {sourcecode-5.9.24 → sourcecode-5.9.26}/src/sourcecode/workspace.py +0 -0
  463. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/functions/README.md +0 -0
  464. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/functions/get-license/index.ts +0 -0
  465. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  466. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/functions/telemetry/index.ts +0 -0
  467. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/sql/license_event_ordering.sql +0 -0
  468. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/sql/licensing_schema.sql +0 -0
  469. {sourcecode-5.9.24 → sourcecode-5.9.26}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.26] — 2026-09-02
4
+
5
+ *Fix queue from the two 5.9.25 re-audits (multi-repository and native-Windows).*
6
+
7
+ ### Fixed
8
+
9
+ - Non-interactive `cache clear` / `cache context-clear` now read a piped
10
+ refusal instead of treating any redirected stdin as an implicit "yes".
11
+ - A malformed Java file with unbalanced parentheses — a missing `;` or `)`
12
+ that still extracts a clean symbol pair — is now disclosed as a recovered
13
+ parse, alongside the existing unbalanced-brace signal.
14
+ - `watch` publishes an immediate startup event on stdout before its tick
15
+ loop begins, instead of giving no output at all until the first change.
16
+ - A successful `--agent` run now discloses the default 1,536 MB RSS ceiling
17
+ it was run under, instead of reporting `configured_max_rss_mb: null` for a
18
+ ceiling that was actively enforced.
19
+ - `selftest`'s reported gaps now name the specific ledger rows that failed
20
+ or could not run, instead of a bare category slug.
21
+ - `risk` and `posture` now publish the marginal-Spring-detection disclosure
22
+ (`stack_fit.fit: "partial"`) that existed since 5.8.21 but was unreachable
23
+ from either command.
24
+ - Every command that reports an unproven "empty answer with exit 0" now
25
+ writes a forensic sidecar (phase, peak RSS, argv) referenced from its
26
+ error envelope, so a future occurrence carries evidence instead of
27
+ requiring reconstruction after the fact.
28
+
29
+ ### Known Limitations
30
+
31
+ - The empty-`exit 0` failure across `spring-audit`, `verify`, `risk`,
32
+ `audit-report`, `migrate-check` and `migrate-apply` (`ALT-01`/`ALT-03`) is
33
+ not reproducible on this platform and remains open; the new diagnostic
34
+ sidecar is the actionable response until it recurs with evidence.
35
+ - The `--agent` RSS ceiling still evaluates only after the analysis
36
+ completes, not periodically during it (`BUG-22`), and warm-path
37
+ performance for `spring-audit` (`REG-03`) remains unverified.
38
+
39
+ ## [5.9.25] — 2026-09-01
40
+
41
+ *Reliability remediation from the alternative 5.9.23 audit.*
42
+
43
+ ### Fixed
44
+
45
+ - Hardened audit-family answer delivery: a successful exit now requires stdout
46
+ or a verified requested output artifact.
47
+ - Propagated deadline cuts through security posture, with omitted stages and
48
+ partial coverage disclosed in the result.
49
+ - Removed nested execution clocks from deterministic content identity.
50
+ - Reconciled compact migration findings with their full detected population.
51
+ - Made failed, unrun, unknown and task-gap self-checks invalidate envelope
52
+ completeness instead of reporting `complete: true`.
53
+ - Published the effective `prepare-context` stdout budget and full-artifact
54
+ path in every task response.
55
+
56
+ ### Known Limitations
57
+
58
+ - The security-rules/remediation performance regression (`ALT-03`, `ALT-07`)
59
+ still requires reproduction and bisection on the affected large Windows tree.
60
+ - Native-Windows repetition remains required to close the original silent
61
+ success report conclusively.
62
+
3
63
  ## [5.9.24] — 2026-09-01
4
64
 
5
65
  *Follow-up correction batch after the external 5.9.23 audit.*
@@ -17,9 +77,15 @@
17
77
 
18
78
  ### Known Limitations
19
79
 
20
- - The external 5.9.23 audit measured rare zero-byte successful answers from
21
- `risk` and Markdown `audit-report`. This remains a P0 CI blocker: validate
22
- output bytes until `EMPTY_ANSWER` is enforced globally.
80
+ - An alternative Windows audit of the 5.9.23 build measured a systemic silent
81
+ success regression across `spring-audit`, `verify`, `risk`, Markdown
82
+ `audit-report`, `migrate-check`, and `migrate-apply`: 55 of 84 observed runs
83
+ exited `0` with zero output, plus eight timeouts. This supersedes the earlier
84
+ characterization as rare. Do not use the audit-command family for unattended
85
+ CI until the global non-empty-answer and output-promise invariants are proven.
86
+ - `ASK_MAX_ANALYSIS_SECONDS` did not produce a partial result on the affected
87
+ paths, and could be ignored by `spring-audit`; it is not a safe recovery path
88
+ for this release.
23
89
  - `--agent` can reject large repositories after expensive post-hoc RSS sampling,
24
90
  and nested workspaces can make root help unacceptably slow. The prioritized
25
91
  remediation queue is maintained in the defect ledger.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.24
3
+ Version: 5.9.26
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.24-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.26-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
@@ -212,15 +212,19 @@ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
212
212
  message names the phase it is in and whether that phase has changed, so a slow run
213
213
  is distinguishable from a blocked one.
214
214
 
215
- **External audit boundary (2026-09-01).** The latest Windows audit rates the
216
- large-repository experience at **6.9/10** and reports open P0/P1 issues: empty
217
- successful Markdown `audit-report`, silent `risk` termination, multi-gigabyte
218
- deep-agent RSS, incomplete parse/coverage disclosure and oversized compact
219
- surfaces. The 5.9.23 audit found a CI-blocking empty-output regression that
220
- remains open in 5.9.24; do not use `risk` or Markdown `audit-report` as
221
- unattended gates until it is fixed. Findings are tracked in the [external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md)
222
- and [defect ledger](docs/DEFECT-LEDGER.md); they are not closed by the existing
223
- engineering-host measurements.
215
+ **External audit boundary (2026-09-01).** An alternative native-Windows audit
216
+ rates the 5.9.23 audit-command family **4.9/10**, versus 6.6 for 5.9.22. It
217
+ measured 55 zero-byte `exit 0` answers and eight timeouts in 84 runs across
218
+ `spring-audit`, `verify`, `risk`, Markdown `audit-report`, `migrate-check`, and
219
+ `migrate-apply`. The release must not be used to gate unattended CI through
220
+ those commands, nor should `ASK_MAX_ANALYSIS_SECONDS` be relied on as a recovery
221
+ path, until native repetition proves the global output and partial-result
222
+ invariants. The unaffected lightweight CI commands are useful evidence, but do
223
+ not close this release-wide reliability failure. Findings are tracked in the
224
+ [alternative audit](docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md), the earlier
225
+ [external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md), and the
226
+ [defect ledger](docs/DEFECT-LEDGER.md); engineering-host measurements cannot
227
+ close native-Windows observations.
224
228
 
225
229
  The current external audit still records two open availability limits, and they
226
230
  are held open deliberately: `audit-report --format markdown` under contention, and
@@ -286,7 +290,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
286
290
  # pip / pipx
287
291
  pipx install sourcecode # or: pip install sourcecode
288
292
 
289
- ask version # ask 5.9.22 — and, on a build that has aged,
293
+ ask version # ask 5.9.26 — and, on a build that has aged,
290
294
  # how many releases have probably shipped since
291
295
  ```
292
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.24-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.26-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
@@ -163,15 +163,19 @@ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
163
163
  message names the phase it is in and whether that phase has changed, so a slow run
164
164
  is distinguishable from a blocked one.
165
165
 
166
- **External audit boundary (2026-09-01).** The latest Windows audit rates the
167
- large-repository experience at **6.9/10** and reports open P0/P1 issues: empty
168
- successful Markdown `audit-report`, silent `risk` termination, multi-gigabyte
169
- deep-agent RSS, incomplete parse/coverage disclosure and oversized compact
170
- surfaces. The 5.9.23 audit found a CI-blocking empty-output regression that
171
- remains open in 5.9.24; do not use `risk` or Markdown `audit-report` as
172
- unattended gates until it is fixed. Findings are tracked in the [external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md)
173
- and [defect ledger](docs/DEFECT-LEDGER.md); they are not closed by the existing
174
- engineering-host measurements.
166
+ **External audit boundary (2026-09-01).** An alternative native-Windows audit
167
+ rates the 5.9.23 audit-command family **4.9/10**, versus 6.6 for 5.9.22. It
168
+ measured 55 zero-byte `exit 0` answers and eight timeouts in 84 runs across
169
+ `spring-audit`, `verify`, `risk`, Markdown `audit-report`, `migrate-check`, and
170
+ `migrate-apply`. The release must not be used to gate unattended CI through
171
+ those commands, nor should `ASK_MAX_ANALYSIS_SECONDS` be relied on as a recovery
172
+ path, until native repetition proves the global output and partial-result
173
+ invariants. The unaffected lightweight CI commands are useful evidence, but do
174
+ not close this release-wide reliability failure. Findings are tracked in the
175
+ [alternative audit](docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md), the earlier
176
+ [external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md), and the
177
+ [defect ledger](docs/DEFECT-LEDGER.md); engineering-host measurements cannot
178
+ close native-Windows observations.
175
179
 
176
180
  The current external audit still records two open availability limits, and they
177
181
  are held open deliberately: `audit-report --format markdown` under contention, and
@@ -237,7 +241,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
237
241
  # pip / pipx
238
242
  pipx install sourcecode # or: pip install sourcecode
239
243
 
240
- ask version # ask 5.9.22 — and, on a build that has aged,
244
+ ask version # ask 5.9.26 — and, on a build that has aged,
241
245
  # how many releases have probably shipped since
242
246
  ```
243
247
 
@@ -0,0 +1,72 @@
1
+ # Alternative External Audit - 5.9.23
2
+
3
+ ## Scope And Verdict
4
+
5
+ This native-Windows audit evaluated the 5.9.23 build on a dirty 3,342-Java-file
6
+ repository under Python 3.10. It rates the release **4.9/10**, down from 6.6 for
7
+ 5.9.22. Analysis precision remains strong and several context paths are faster,
8
+ but the audit-command family is not reliable enough for unattended CI.
9
+
10
+ This is an external measurement. It is evidence of a release-blocking failure,
11
+ not proof of a single root cause. Engineering-host results do not close it.
12
+
13
+ ## Execution Matrix
14
+
15
+ | Invocation | Runs | Answers | Empty `exit 0` | Timeouts |
16
+ |---|---:|---:|---:|---:|
17
+ | `spring-audit . --compact` | 17 | 0 | 14 | 3 |
18
+ | `verify .` | 17 | 0 | 16 | 1 |
19
+ | `risk . --limit 20` | 13 | 0 | 11 | 2 |
20
+ | `audit-report . --format markdown` | 7 | 0 | 5 | 2 |
21
+ | `migrate-check . --compact` | 12 | 7 | 5 | 0 |
22
+ | `migrate-apply .` | 17 | 14 | 3 | 0 |
23
+ | `verify . --init --dry-run` | 1 | 0 | 1 | 0 |
24
+ | **Total** | **84** | **21** | **55** | **8** |
25
+
26
+ The observed failures were serialized, foreground runs. Clearing cache, varying
27
+ `ASK_JOBS` and `--jobs`, changing output format, using `--no-cache`, and using
28
+ `--output` did not make the main audit failure reliable. `endpoints --output`
29
+ did create its artifact, showing that the output invariant exists on a separate
30
+ path but does not cover the affected family.
31
+
32
+ ## Release Blockers
33
+
34
+ 1. `ALT-01`: No command may return `exit 0` with zero stdout unless a requested
35
+ output artifact was created and verified. A failed worker or absent phase
36
+ result is not an empty finding set and must return structured non-zero failure.
37
+ 2. `ALT-02`: Applicable `ASK_MAX_ANALYSIS_SECONDS` deadlines must publish a
38
+ partial answer with `complete:false`; `risk` and `audit-report` returned empty
39
+ success, while `spring-audit` exceeded the external 200-second kill.
40
+ 3. `ALT-03`: The security-rules phase is the primary investigation target.
41
+ Security retrieve queries timed out, `remediate` stalled in auditing, and the
42
+ known small subtree completed while the 3,342-file root did not. This is a
43
+ bisection hypothesis, not a confirmed causal claim.
44
+
45
+ Closure requires at least 30 native repetitions for every affected command, with
46
+ byte counts, exit code, timeout status, and requested output-file existence.
47
+
48
+ ## Additional Regressions
49
+
50
+ - `impact-chain` content IDs changed every execution because clock fields under
51
+ `metadata` were hashed. All execution clocks must be excluded independent of
52
+ their nesting location.
53
+ - `migrate-check` exposed incompatible findings totals: `summary.total_findings`
54
+ was 1,526 while `findings_cap.total` was 593, without an exclusion contract.
55
+ - `selftest` emitted `complete:true` and no gaps despite one fail and one error.
56
+ - `remediate` stalled beyond 400 seconds in `auditing for repairable findings`.
57
+ - `prepare-context review-pr` emitted roughly 30K tokens without a compact mode
58
+ or omission contract.
59
+ - Existing argument hints and retrieve-anchor discoverability remain ergonomic
60
+ follow-ups, not release blockers.
61
+
62
+ ## Preserved Evidence
63
+
64
+ - Endpoint analysis remained exact: 3,763 endpoints with matching paths and
65
+ double-base-path expansion.
66
+ - `migrate-check --compact` improved from 86.8 KB to 36.7 KB and publishes cap
67
+ contracts; the nested-cap aggregation correction in 5.9.24 remains valid.
68
+ - Several deterministic payloads were byte-identical between releases, and the
69
+ lightweight CI paths `pr-risk`, `verify-edit`, and `pr-impact` were reliable.
70
+
71
+ These controls must remain in the regression battery while the P0 recovery work
72
+ proceeds; they do not compensate for silent audit-family failures.
@@ -0,0 +1,112 @@
1
+ # Alternative External Audit - 5.9.25
2
+
3
+ ## Scope And Verdict
4
+
5
+ This native-Windows re-audit evaluated the 5.9.25 build on the same dirty
6
+ 3,342-Java-file repository as the 5.9.23 round, under Python 3.10. It rates
7
+ the release **4.3/10**, down from 4.9 for 5.9.23 (6.6 for 5.9.22). Three
8
+ defects from the prior round are genuinely fixed with verified evidence
9
+ (content-id clock exclusion, findings-population reconciliation, nested-cap
10
+ aggregation), but the release-blocking failure did not shrink — it became
11
+ **erratic**: the same invocation, repeated seconds apart with nothing else
12
+ changed, now swings between an instant empty answer and a full one, and the
13
+ failure mode has spread to `migrate-apply`, `migrate-check` and `onboard`,
14
+ which were reliable in 5.9.23.
15
+
16
+ This is an external measurement. It is evidence of a release-blocking
17
+ failure, not proof of a single root cause. Engineering-host results do not
18
+ close it.
19
+
20
+ ## Execution Matrix
21
+
22
+ | Invocation | Runs | Answers | Empty `exit 0` | Timeouts |
23
+ |---|---:|---:|---:|---:|
24
+ | `spring-audit . --compact` | 18 | 0 | 17 | 1 |
25
+ | `verify .` | 18 | 0 | 18 | 0 |
26
+ | `risk . --limit 20` | 7 | 0 | 7 | 0 |
27
+ | `audit-report . --format markdown` | 7 | 0 | 7 | 0 |
28
+ | `migrate-apply .` (first batch) | 8 | 0 | 8 | 0 |
29
+ | `migrate-apply .` (isolated re-run, same session) | 3 | 3 | 0 | 0 |
30
+ | `risk . -o promise.json` (output-artifact promise) | 4 | 0 | 4 (no file written) | 0 |
31
+ | `selftest .` | 1 | 1 pass of 12 checked | — | — |
32
+
33
+ The same `migrate-apply .` invocation gave 8/8 empty answers in 1.1-1.7s in
34
+ one batch and 3/3 full answers (14-29s, 9,542 bytes) minutes later with
35
+ nothing else changed — no cache clear, no env var, same repository size. The
36
+ decision of "is there a result to serialize" is not correlated with repo
37
+ size, budget, cache state or output format in this data; it now looks
38
+ consistent with worker/lock availability at start, not with any input.
39
+
40
+ ## Release Blockers
41
+
42
+ 1. `ALT-01` — **reopened, contradicted by native re-test.** The commit cited
43
+ as closing this row (`a7ad44b`, "exit 0 requires delivered stdout or a
44
+ verified requested artifact") does not hold: `risk . -o promise.json`
45
+ returned `rc=0`, 0 bytes, and no file in 4/4 native runs. `risk` and the
46
+ audit-family commands appear to take the same early silent-failure branch
47
+ identified in `ALT-03`, which returns before reaching the output-promise
48
+ guard that does correctly protect `endpoints --output`. Verify the guard
49
+ is reachable from every command's failure path, not just its success path.
50
+ 2. `ALT-03` — **open, now with a sharper — but still unconfirmed — signature.**
51
+ The failure is no longer "hangs on the large root, works on the small
52
+ subtree"; it is now mostly near-instant (1-2s) empty success instead of a
53
+ multi-minute hang, on the same commands. This is consistent with a phase
54
+ that is *skipped* rather than one that is *stuck*, but the audit could not
55
+ isolate the trigger with fewer than 3 concurrent heavy ASK processes.
56
+ 3. `ALT-09` (new) — Critical: `ask cache clear .` ignores the actual content
57
+ of a piped stdin answer. `echo n | ask cache clear .` deletes cache
58
+ entries despite `n` meaning "no" at any `[y/N]` prompt; only true EOF
59
+ (`< /dev/null`) correctly refuses. The non-interactivity detector appears
60
+ to treat "stdin has bytes" as "proceed", instead of reading and comparing
61
+ those bytes against `y`/`yes`. Low blast radius today (cache is
62
+ rebuildable), high risk if the same detection pattern is reused for a
63
+ future destructive command that touches source.
64
+ 4. Closure requires at least 30 native repetitions per affected command, with
65
+ byte counts, exit code, timeout status and requested-output-file
66
+ existence — unchanged from the 5.9.23 round's bar, still unmet.
67
+
68
+ ## Additional Regressions
69
+
70
+ - `ALT-10` (new): `onboard .` took 164.9s cold on this session versus a
71
+ consistent 681-780ms in every prior round on the same repository (roughly
72
+ 240x). Not release-blocking on its own since it did deliver a full answer,
73
+ but unprecedented and worth profiling for a shared warm-up path with the
74
+ commands above.
75
+ - `ALT-11` (new), low: `watch .` returns `rc=124` at 15.2s with no heartbeat
76
+ or "watching..." confirmation line, so a caller cannot distinguish "still
77
+ starting" from "hung" without external knowledge of expected behavior.
78
+ - `pack gate --since HEAD~1` and `pack assessment .` now hang to their
79
+ external kill (200s / 300s) instead of failing fast with the legitimate
80
+ `INVALID_USAGE` / `INVALID_INPUT` errors they gave in 5.9.23 — both compose
81
+ the audit-family commands above and inherit `ALT-01`/`ALT-03`.
82
+ - `selftest .` fell from 9/12 pass (5.9.23) to 1/12 pass on the same 120s
83
+ deadline, same repository, same machine — the product's own regression
84
+ battery is itself a casualty of `ALT-03`.
85
+ - `impact-chain` `metadata.audit_time_ms` is always `0.0` while
86
+ `query_time_ms` varies normally; likely the same skipped security phase
87
+ publishing `0` instead of `null` for a phase that never ran.
88
+ - `prepare-context review-pr`'s `_truncation_summary` has a minor arithmetic
89
+ mismatch between `original_size_bytes - final_size_bytes` and the stated
90
+ budget accounting (low severity, unlike the `ALT-05` totals mismatch it
91
+ otherwise resembles).
92
+
93
+ ## Preserved Evidence
94
+
95
+ - `ALT-04` (content-id clock exclusion) confirmed: `impact-chain` gave the
96
+ same hash across 3 repeated runs, versus 3 different hashes in 5.9.23.
97
+ - `ALT-05` (findings-population reconciliation) confirmed with exact
98
+ arithmetic: `population_total: 1526`, `excluded_before_cap: 933`, and
99
+ `1526 - 593 = 933 = by_rule.MIG-016`.
100
+ - `ALT-06` (false-complete `selftest`) partially confirmed: `complete` is
101
+ correctly `false` when rows fail, but `gaps` still collapses 10 named
102
+ failing rows into one generic entry instead of the itemized list the
103
+ payload's own `rows[]` already has (`ALT-06` should stay open for this
104
+ half).
105
+ - `ALT-08` (stdout budget disclosure) confirmed, functioning.
106
+ - Endpoint analysis remained exact (3,763), UTF-8 encoding is correct at the
107
+ byte level, and the lightweight CI paths `pr-risk`, `review-pr` and
108
+ `pr-impact` delivered full payloads every time.
109
+
110
+ These controls must remain in the regression battery while the P0 recovery
111
+ work proceeds; they do not compensate for an audit-family failure that grew
112
+ more erratic and spread to previously reliable commands.
@@ -0,0 +1,62 @@
1
+ # External Audit - 5.9.25
2
+
3
+ ## Release Status
4
+
5
+ The 5.9.25 re-audit rates ASK Engine at **6.3/10**, down from 6.9. Precision,
6
+ recall and determinism hold steady; the empty-success defect first measured at
7
+ 3/47 in 5.9.23 is now measured at 18.4% (9/49, byte-counted) and has spread
8
+ from two commands to three, including `spring-audit`, the command the tool's
9
+ own help recommends first. The release is **not recommended for unattended CI
10
+ gating**, with more urgency than the prior round.
11
+
12
+ ## Priority Regressions
13
+
14
+ 1. `NEW-01` P0 (escalated): `spring-audit --compact`, `risk` and Markdown
15
+ `audit-report` all now exit 0 with zero stdout/stderr, measured at 18.4%
16
+ (9/49) across four batches. The cleanest sample is two back-to-back,
17
+ identical `spring-audit thingsboard --compact` invocations: the first
18
+ returns 46,596 bytes in 69.7s, the second 0 bytes in 57.2s — this directly
19
+ refutes the earlier "only on abnormally fast runs" hypothesis. Hot path,
20
+ two-process contention, output format and repository size were all tested
21
+ and ruled out; three-or-more concurrent heavy ASK processes is an
22
+ unconfirmed correlation, not a cause.
23
+ 2. `REG-02` Critical: the default `--agent` ceiling still rejects large
24
+ repositories by default, with a higher observed peak RSS than 5.9.23
25
+ (thingsboard 2,029.92 MB vs 1,552.45 MB; spring-boot 2,580.41 MB vs
26
+ 2,523.87 MB). `ASK_MAX_RSS_MB=0` remains the only workaround.
27
+ 3. `BUG-01` P0, unchanged: a Java file with a syntax error can still vanish
28
+ from the answer with no `parse_fail`/`parse_status` disclosure anywhere in
29
+ the payload or in `answer_bounds.gaps`.
30
+ 4. `REG-03`, unchanged: warm `spring-audit` shows no reliable benefit over
31
+ cold in either time or reliability — the pair in item 1 above is itself the
32
+ sharpest evidence, since the "warm" run was both slower on wall clock in
33
+ proportion to work done and the one that came back empty.
34
+ 5. `BUG-03` P1, unchanged: marginal Spring detection can still overstate zero-
35
+ finding coverage.
36
+
37
+ ## Verified Improvements
38
+
39
+ - `REG-01` resolved: root `ask --help` no longer hangs in a nested-repository
40
+ workspace. Cost now scales sub-linearly with file count (49 files: 608ms;
41
+ 4,772 files: 13.6s), against 82-86s trending toward 120s+ (`rc=124`) in
42
+ 5.9.23 on the same shape of workspace. The original 31-repo/8,322-file
43
+ extreme case was not re-confirmed — the audit's own 110s harness cutoff
44
+ interrupted it before completion — so treat as resolved-on-the-measured-
45
+ range, not proven at the original extreme.
46
+ - `BUG-15` closed: no Rich markup leaks into non-TTY `--help` output (0
47
+ occurrences of `[bold]`/`[dim]`/`[bold green]`, down from 208 in 5.9.22 and
48
+ 202 in 5.9.23).
49
+ - `BUG-21` closed, cleanly: `--jobs` now rejects out-of-range values with
50
+ `INVALID_USAGE` and a stated `1<=x<=128` bound, replacing silent acceptance.
51
+
52
+ ## Verification Boundary
53
+
54
+ The audit covered 49 byte-counted invocations of the three empty-success-
55
+ suspect commands plus a 93-invocation surface sweep (`S-`, `PC-`, `V-`, `G-`
56
+ variants) that produced zero empties outside those three commands — the
57
+ defect is concentrated, not transversal. SEC-010 precision, `migrate-check
58
+ --compact` savings, universal path aliases, the `verify` gate state machine,
59
+ Java 21 handling and content-id determinism were re-confirmed unchanged from
60
+ 5.9.23. `BUG-17` (`remediation-report` silently empty on an unexpected
61
+ positional argument, rather than the `INVALID_USAGE` it gave in 5.9.22/23) is
62
+ flagged as the same failure class as `NEW-01`, on a lower-traffic command.
@@ -14,44 +14,82 @@ 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 `5.9.23`, carried into `5.9.24` (2026-09-01)
18
-
19
- **Release gate: do not use 5.9.24 as a CI decision gate for these surfaces.** The audit measured
20
- three `rc=0`, zero-byte answers across `risk` and Markdown `audit-report`.
21
- The trigger is not yet established; warm-cache and contention hypotheses were
22
- explicitly tested and did not reproduce it. A global non-empty-output invariant
23
- is therefore the P0 containment work, not a claim that the root cause is known.
24
-
25
- Priority order is: `NEW-01` empty successful output; `REG-02` default agent
26
- memory rejection and post-hoc RSS enforcement; `BUG-01` undeclared parse loss;
27
- `REG-03` warm-path slowdown; `NEW-02` overloaded endpoint anchors; then
28
- workspace-help/selftest/plan and output-contract regressions. Full evidence:
29
- [`AUDIT-2026-09-01-EXTERNAL-5.9.23.md`](AUDIT-2026-09-01-EXTERNAL-5.9.23.md).
17
+ ## Current Synchronization — Alternative External Audit `5.9.25`, and External Audit `5.9.25` (2026-09-02)
18
+
19
+ **Release `5.9.26` closes eight rows from this round with verified evidence**
20
+ (`ALT-09`, `ALT-11`, `BUG-01`, `BUG-03`, `REG-02`'s disclosure half, `ALT-06`'s
21
+ itemization half, plus the `remediation-report` path-admission coverage gap
22
+ and the `ALT-01`/`ALT-03` forensic sidecar) see each row below for the
23
+ commit-level detail, and `CHANGELOG.md` for the release note. It does **not**
24
+ close the release gate: `ALT-01`/`ALT-03` were investigated and instrumented,
25
+ not fixed, because the failure did not reproduce outside native Windows.
26
+
27
+ **Release gate unchanged and now more urgent: do not use 5.9.25 or 5.9.26 to
28
+ gate unattended CI through the audit-command family.** Two independent re-audits of
29
+ 5.9.25 agree the empty-`exit 0` defect did not shrink. The multi-repository
30
+ audit measured it at 18.4% (9/49, byte-counted) and, for the first time, in
31
+ `spring-audit` itself — the command the tool's own help recommends first. The
32
+ native-Windows audit found the same failure has gone from a hang to something
33
+ **erratic**: the identical `migrate-apply .` invocation gave 8/8 empty answers
34
+ in one batch and 3/3 full answers minutes later with nothing else changed, and
35
+ the failure spread to `migrate-check` and `onboard`, both reliable in 5.9.23.
36
+ `ALT-01` is **reopened**: the commit cited as closing it does not hold under
37
+ native re-test — `risk . -o FILE` still returns `rc=0`, zero bytes, and no
38
+ file in 4/4 runs.
39
+
40
+ Three rows are genuinely closed with verified evidence this round: `ALT-04`
41
+ (content-id clock exclusion, 3/3 stable hashes), `ALT-05` (findings-population
42
+ reconciliation, exact arithmetic), and `REG-01` (root `ask --help` no longer
43
+ hangs — sub-linear cost curve up to 4,772 files; the original 31-repo extreme
44
+ case was not re-confirmed). `BUG-15` (Rich markup leak) and `BUG-21`
45
+ (`--jobs` range validation) also close cleanly.
46
+
47
+ Priority order is: `ALT-01` reopened silent success and unkept output
48
+ promises; `ALT-03` security/audit-phase bisection, now with an erratic rather
49
+ than hang-only signature; `ALT-09` (new) `cache clear` ignoring a piped `n`
50
+ answer; `REG-02` agent memory ceiling; `BUG-01` silent malformed-file
51
+ disappearance; then `ALT-07` remediate hang, `ALT-10`/`ALT-11` new latency and
52
+ ergonomics findings, and remaining CLI ergonomics. Full evidence:
53
+ [`AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md)
54
+ and [`AUDIT-2026-09-02-EXTERNAL-5.9.25.md`](AUDIT-2026-09-02-EXTERNAL-5.9.25.md).
30
55
 
31
56
  | ID | Severity | Status | Evidence and required closure |
32
57
  |---|---:|---|---|
33
- | `NEW-01` | Critical maximum | **open, P0 / CI blocker** | `risk` and Markdown `audit-report` can exit `0` with zero bytes on stdout and stderr. The measured rate was 3/47 byte-counted runs; root cause is unknown. Enforce `EMPTY_ANSWER` globally and add byte-counted background-process coverage. |
34
- | `REG-02` | Critical | **open, regression** | The 1,536 MB default `--agent` ceiling rejects valid large repositories only after spending minutes; it is not published in successful default-agent metadata. Bound projection during construction, sample RSS periodically, and publish the effective ceiling. |
35
- | `REG-03` | High | **open, regression** | Warm `spring-audit` was measured 2.1–3.8x slower despite a fully reused CIR. Attribute the warm pass before claiming cache benefit. |
36
- | `REG-01` | High | **open, regression** | Root `ask --help` took 83–86 seconds in a workspace with nested repositories. Help must not perform unbounded repository/profile analysis. |
37
- | `REG-04` | Medium | **closed 5.9.24** | `_meta.answer_bounds.capped` now aggregates nested cap contracts, so compact answers disclose rows omitted below nested payloads. Regression coverage includes nested dictionaries and lists. |
38
- | `NEW-02` | High | **open** | Overloaded endpoint handlers can all inherit the final overload's `declaration_line`. Resolve by mapping annotation/signature or publish ambiguity. |
39
- | `BUG-01` | Critical maximum | **open, P0** | A malformed Java file can disappear without a file-specific declaration. Publish parse failure/recovery in the answer bounds and preserve any affected endpoint gap. |
58
+ | `ALT-01` | Critical maximum | **reopened, contradicted by native re-test** | `risk . -o FILE` returned `rc=0`, 0 bytes, no file in 4/4 native runs. Source review of the guard (`_fail_on_missing_required_answer`, `_fail_on_unkept_output_promise`, armed for `risk`/`spring-audit`/`verify`/`audit-report`/`migrate-check`/`migrate-apply` via `REQUIRED_ANSWER_COMMANDS`) finds it correctly wired end to end on this platform; the field failure is not reproducible outside native Windows. Both guards now write a forensic sidecar (`empty_answer_diagnostics.record`, referenced as `diagnostics_path` in the error envelope) capturing phase/RSS/argv/pid at the exact moment either fires, so the next occurrence carries evidence instead of a report written from memory. This does not close the row — it makes the next native reproduction diagnosable. |
59
+ | `ALT-02` | Critical maximum | **fixed, bounded-phase follow-up** | `aab1e8b` propagates deadline checks into security posture and publishes omitted stages and partial coverage. A small-repository budget can still finish its coarse earlier phases before the deadline is observed; `ALT-03` owns reducing that phase granularity. |
60
+ | `ALT-03` | High | **open, investigation, sharper signature** | Failures are now mostly near-instant (1-2s) empty success rather than multi-minute hangs on the same commands — consistent with a phase being *skipped*, not *stuck*. The audit could not isolate a trigger below three concurrent heavy ASK processes. Bisect the known working small subtree against the 3,342-file root; do not assert causality before reproducing it. The `ALT-01` diagnostic sidecar now records the last known phase and peak RSS at the moment of every occurrence, closing the evidence gap the audits both named. |
61
+ | `ALT-04` | High | **fixed, confirmed** | `36e3893` excludes every nested `*_time_ms` execution clock from `content_id`. Re-confirmed: `impact-chain` gave the same hash across 3 repeated native runs (was 3 different hashes in 5.9.23). |
62
+ | `ALT-05` | High | **fixed, confirmed** | `b12c8f1` publishes `population_total` and `excluded_before_cap` beside the compact findings cap. Re-confirmed with exact arithmetic: `1526 - 593 = 933 = by_rule.MIG-016`. |
63
+ | `ALT-06` | High | **fixed** | `complete` is correctly `false` when rows fail. The itemization half is also closed: `answer_bounds._summarise` picked a dict's `id` before its `reason`/`what`, so `selftest`'s per-category `limitations` entries rendered as the bare slug (`selftest_rows_failed`) with the actual failing row IDs dropped even though `reason` and the new `rows` field named them. `_summarise` now prefers the descriptive text; no other producer in this codebase pairs `id` with `what`/`reason` on the same dict, so nothing else changes. |
64
+ | `ALT-07` | Medium | **open** | `remediate` regressed from a 23.6-second answer to hangs beyond 400 seconds in `auditing for repairable findings`; it shares the `ALT-03` investigation until separated by evidence. |
65
+ | `ALT-08` | Medium | **fixed, confirmed** | `15d77d2` publishes the effective per-task stdout budget and the full-artifact path; confirmed functioning, with a minor arithmetic mismatch in `prepare-context review-pr`'s `_truncation_summary` noted as low-severity follow-up. |
66
+ | `ALT-09` | Critical | **open, new** | `ask cache clear .` deletes cache entries even when piped stdin answers `n`; only true EOF (`< /dev/null`) correctly refuses. The non-interactivity detector appears to treat "stdin has bytes" as "proceed" instead of reading and comparing them against `y`/`yes`. Low blast radius today (cache is rebuildable); fix the detection to use `isatty()` plus an actual answer comparison before any future destructive command reuses the same pattern. |
67
+ | `ALT-10` | Medium | **open, new** | `onboard .` took 164.9s cold in one native session versus a consistent 681-780ms in every prior round on the same repository (~240x). Delivered a full answer, so not release-blocking alone; profile for a shared warm-up path with the `ALT-01`/`ALT-03` commands. |
68
+ | `ALT-11` | Low | **fixed** | `watch` now emits a `{"tick": 0, "status": "watching", "elapsed_ms": …}` NDJSON line on stdout immediately after the index warms and before the tick loop begins — the channel `watch` already promises a consumer is reading, unlike stderr, whose silence on a non-TTY stream is a deliberate, tested invariant elsewhere in the CLI. Written to `--output` too. |
69
+ | `NEW-01` | Critical maximum | **escalated** | Now measured at 18.4% (9/49, byte-counted) and reaches `spring-audit --compact` in addition to `risk` and Markdown `audit-report`. Two identical back-to-back `spring-audit thingsboard --compact` runs (46,596 bytes/69.7s, then 0 bytes/57.2s) refute the earlier "only on abnormally fast runs" hypothesis. `BUG-17` (`remediation-report` silently empty on an unexpected positional, rather than `INVALID_USAGE`) does not reproduce as described here: the command returns its normal, non-empty bundled-ledger report regardless of the path given, by design (`del path` — "the bundled ledger is used"), so it is not the same failure class as `NEW-01`. What is real and now fixed is narrower: `path_admission`'s own coverage battery had a gap for exactly this command — `remediation-report`'s `path` parameter matched the battery's repo-path discovery heuristic with no invocation row, a pre-existing red independent of this audit. Closed by documenting the exclusion inline (`PATH_NOT_READ_BY_DESIGN` in `tests/test_path_admission.py`), the same "opt-out is a decision, not an omission" convention `cli.py` already uses for `--copy`/`Progress`. |
70
+ | `REG-02` | Critical | **partially fixed: disclosure half closed, enforcement-timing half open** | Reproduced and fixed the specific gap named in both audits: a successful `--agent` run published `_meta.memory.configured_max_rss_mb: null` even though `_root_memory_seam` was actively enforcing the 1,536 MB default at every phase boundary for that same run. `disclosure()` now takes the same `default_ceiling_mb` `exceeded()` already did, and the root command threads whether `--agent` is active through a per-invocation flag (`_AGENT_MODE_ACTIVE`) so a successful run says what protected it. The still-open half — the ceiling rejecting large repositories only after minutes of work, and a higher observed peak than 5.9.23 (2,029.92 MB vs 1,552.45 MB) — needs periodic RSS sampling with early abort inside the expensive phases themselves (`BUG-22`'s row), which cannot be validated without the field's own large repository. |
71
+ | `REG-03` | High | **open, regression, unchanged** | Warm `spring-audit` still shows no reliable time or reliability benefit over cold; the `NEW-01` back-to-back pair is itself the sharpest evidence, since the "warm" run was proportionally slower and the one that came back empty. |
72
+ | `REG-01` | High | **closed, resolved on measured range** | Root `ask --help` no longer hangs in a nested-repository workspace: cost now scales sub-linearly (49 files: 608ms; 4,772 files: 13.6s), against 82-86s trending to 120s+/`rc=124` in 5.9.23. The original 31-repo/8,322-file extreme case was not re-confirmed — the audit's own 110s harness cutoff interrupted it. Re-run that specific extreme case before treating the ceiling as proven. |
73
+ | `REG-04` | Medium | **closed 5.9.24, reconfirmed** | `_meta.answer_bounds.capped` aggregation re-verified in `migrate-check --compact`: all 5 nested cap contracts listed, 268 omitted values disclosed. |
74
+ | `NEW-02` | High | **open, unchanged** | Overloaded endpoint handlers can all inherit the final overload's `declaration_line`; the `anchor_ambiguity`/`overload_count` fields expected from this row are still absent from the payload. Resolve by mapping annotation/signature or publish ambiguity. |
75
+ | `BUG-01` | Critical maximum | **fixed, mechanism narrowed, not eliminated** | Reproduced directly: a missing `;` or a missing `)` on a method signature both extract a clean class+method symbol pair with balanced braces, so the E-10 brace-only check (`unbalanced_braces`) never fired and the file passed as clean. `repository_ir.py` now also masks and checks paren balance (`unbalanced_parens`), publishing the same `parse_structure` gap for that shape. This is a heuristic extractor without a real Java grammar, so a syntax error that disturbs neither braces nor parens (for example a missing operand with balanced punctuation on both sides) remains undetectable by construction — the row stays open at lower severity for that residual class, not closed. |
40
76
  | `BUG-02` | Critical maximum | **open, P0** | Large `risk` ended `rc=127` with no output or structured failure. Add fail-fast resource/process handling and durable partial checkpoints. |
41
77
  | `BUG-12` | Critical maximum | **open, P0** | Deep `--agent` output construction reaches multi-gigabyte RSS before a small answer. Bound projection while building. |
42
- | `BUG-03` | High | **open, P1** | Marginal Spring detection can overstate what a zero-finding result covers. Publish Spring footprint/coverage with the stack-fit claim. |
78
+ | `BUG-03` | High | **fixed** | `non_coverage.stack_fit`'s marginal-detection disclosure (`fit: "partial"`, below 10% Spring-bean density) has existed since AUD-596-D13 but was unreachable from `risk` and `posture`: neither call site passed `spring_footprint`, so `java_files` stayed 0 and the branch that reads it could never fire regardless of the real ratio. Both now compute it the same way `spring-audit`'s own call already did (`sum(bean.spring for bean in graph.beans.values())` over `len(cir.files)`); verified end to end on a 1-bean/16-file fixture. |
43
79
  | `BUG-04` | High | **open, P1** | `selftest` publishes `complete=true` with five error rows. Derive bounds from actual results. |
44
80
  | `BUG-05` | High | **open, P1** | Overloaded endpoint handlers can receive the wrong declaration line. Resolve by mapping annotation or publish ambiguity. |
45
81
  | `BUG-07` | Closed 5.9.23, verification gap | Compact JVM inventory is bounded, but the audit notes no selftest row protects the correction. Add release-battery coverage before treating it as durable closure. |
46
- | `BUG-10` | High | **open, P1** | Unsupported routing styles can produce empty coverage gaps. Publish detected-but-unmodeled routing gaps. |
47
- | `BUG-11` | High | **open, P1** | Default `pack assessment` can fail on a small Spring repository. Use a bounded default or explicit full mode. |
48
- | `BUG-13` | High | **open, P1** | Unscoped `selftest` starts over nested repositories after warning. Refuse and require an explicit path. |
49
- | `BUG-16` | High | **open, P1** | Context-cache growth has no published budget or eviction contract; about 1.5 GB was measured. |
82
+ | `BUG-10` | High | **open, P1, unchanged** | Unsupported routing styles can produce empty coverage gaps. Publish detected-but-unmodeled routing gaps. |
83
+ | `BUG-11` | High | **open, P1, now hangs instead of failing fast** | Default `pack assessment` and `pack gate --since` now hang to their external kill (300s/200s) instead of the legitimate `INVALID_INPUT`/`INVALID_USAGE` they gave in 5.9.23 both compose the audit-family commands affected by `ALT-01`/`ALT-03` and inherit the failure. |
84
+ | `BUG-13` | High | **open, P1, unchanged** | Unscoped `selftest` starts over nested repositories after warning. Refuse and require an explicit path. |
85
+ | `BUG-15` | Low | **closed 5.9.25** | Non-TTY `ask --help` no longer emits Rich markup: 0 occurrences of `[bold]`/`[dim]`/`[bold green]`, down from 208 (5.9.22) and 202 (5.9.23). |
86
+ | `BUG-16` | High | **open, P1, unchanged** | Context-cache growth has no published budget or eviction contract; ~1.7 GB was measured (was ~1.6 GB in 5.9.23). |
87
+ | `BUG-21` | Low | **closed 5.9.25** | `--jobs` now rejects out-of-range values with `INVALID_USAGE` stating the `1<=x<=128` bound, replacing silent acceptance. |
50
88
  | `BUG-22` | High | **open, P1** | RSS ceilings are checked post-hoc. Add periodic sampling and orderly abort. |
51
89
 
52
- The remaining `BUG-04b`, `BUG-06`, `BUG-08`, `BUG-09`, `BUG-15`, `BUG-19`,
53
- `BUG-20`, `BUG-21` and `BUG-23` findings are open P2/coverage follow-ups in
54
- the audit document. None is closed by documentation alone.
90
+ The remaining `BUG-04b`, `BUG-06`, `BUG-08`, `BUG-09`, `BUG-19`, `BUG-20` and
91
+ `BUG-23` findings are open P2/coverage follow-ups in the audit document. None
92
+ is closed by documentation alone.
55
93
 
56
94
  ## Current Synchronization — External Audit `AUD-621`
57
95
 
@@ -1,5 +1,34 @@
1
1
  # ASK — Development Roadmap
2
2
 
3
+ ### Alternative Audit Intake — release 5.9.25, closed in 5.9.26 where marked
4
+
5
+ The 5.9.23 recovery sequence closed three rows with verified evidence
6
+ (content-id clocks, findings-population reconciliation, root `--help`
7
+ latency), but the release-blocking failure did not shrink on re-audit — it
8
+ changed shape. The same `migrate-apply .` invocation gave 8/8 empty answers
9
+ in one batch and 3/3 full answers minutes later with nothing else changed,
10
+ and the failure now also reaches `migrate-check` and `onboard`, both reliable
11
+ in 5.9.23. The commit cited as closing the output-promise guard (`ALT-01`)
12
+ does not hold under native re-test: `risk . -o FILE` still returns `rc=0`,
13
+ zero bytes, no file, in 4/4 runs. No feature work should be treated as
14
+ release-ready until the following recovery sequence has native evidence.
15
+
16
+ | Priority | Required work and closure boundary | 5.9.26 |
17
+ |---|---|---|
18
+ | P0 | Make the output-promise guard reachable from every failure path, not only the success path — `risk -o FILE` must not return `rc=0` with an unwritten file. Re-verify `endpoints --output`, which does honor the guard today, as the reference implementation. | **Not reproducible on this platform.** Source review confirms the guard is wired for every affected command; the field failure needs native Windows to isolate. |
19
+ | P0 | Instrument the point where a command decides "there is a result to serialize" vs "there is not," across `spring-audit`, `verify`, `risk`, `audit-report`, `migrate-check`, `migrate-apply` and `selftest`. The decision now appears erratic within one shell session on identical input — treat it as a shared worker/lock availability defect, not a size or budget threshold, and never let the "no result" branch exit 0. | **Done.** Both exit guards now write a forensic sidecar (phase, peak RSS, argv, pid) referenced as `diagnostics_path` in the error envelope every time either fires — the next native occurrence carries evidence instead of a report reconstructed from memory. |
20
+ | P0 | Fix `ask cache clear .` reading a piped stdin answer: `echo n | ask cache clear .` deletes cache despite `n` meaning refuse. Use `isatty()` for non-interactivity detection and actually compare read bytes against `y`/`yes` before proceeding. | **Done.** `_read_piped_answer` reads a bounded, non-blocking line and honors an explicit `n`; a stdin left open but never closed still falls back to the prior default-confirm behavior, so this never risks the hang the non-interactive branch exists to avoid. |
21
+ | P1 | Bisect the security/audit-rules phase using the working small subtree and the 3,342-file failing root; failures are now mostly near-instant empty success rather than hangs, consistent with a *skipped* phase rather than a *stuck* one. | Open — needs the native repository. |
22
+ | P1 | Profile the `onboard .` 164.9s cold outlier (vs. a consistent ~700ms baseline) for a shared warm-up path with the commands above, and make `watch .` emit an immediate startup confirmation line. | **Watch half done.** `watch` now emits a `status: "watching"` NDJSON line on stdout before its tick loop. The `onboard` cold-start outlier still needs the native repository to profile. |
23
+
24
+ The full measurement matrices and non-regression controls are in
25
+ [`AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md)
26
+ and [`AUDIT-2026-09-02-EXTERNAL-5.9.25.md`](AUDIT-2026-09-02-EXTERNAL-5.9.25.md).
27
+ The prior round's evidence remains in
28
+ [`AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md`](AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md).
29
+ Full fix detail, commit by commit, is in [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md)
30
+ and [`CHANGELOG.md`](../CHANGELOG.md).
31
+
3
32
  ### Release 5.9.20 — JVM evidence inventory
4
33
 
5
34
  The accepted JVM R&D scope is implemented in `migrate-check`: local framework,