sourcecode 5.9.28__tar.gz → 5.9.30__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 (476) hide show
  1. {sourcecode-5.9.28 → sourcecode-5.9.30}/CHANGELOG.md +144 -0
  2. {sourcecode-5.9.28 → sourcecode-5.9.30}/PKG-INFO +3 -3
  3. {sourcecode-5.9.28 → sourcecode-5.9.30}/README.md +2 -2
  4. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +2 -2
  5. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +3 -3
  6. sourcecode-5.9.30/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +174 -0
  7. sourcecode-5.9.30/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md +143 -0
  8. sourcecode-5.9.30/docs/AUDIT-2026-09-02-EXTERNAL-5.9.29.md +112 -0
  9. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEFECT-LEDGER.md +174 -0
  10. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEVELOPMENT-ROADMAP.md +114 -0
  11. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/EXECUTIVE-ROADMAP.md +109 -0
  12. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/USER_GUIDE.md +1 -1
  13. {sourcecode-5.9.28 → sourcecode-5.9.30}/pyproject.toml +1 -1
  14. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/__init__.py +1 -1
  15. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_recipe.py +6 -0
  16. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cli.py +239 -20
  17. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/concurrency.py +37 -6
  18. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/dependency_analyzer.py +25 -0
  19. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detach.py +21 -1
  20. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/empty_answer_diagnostics.py +11 -0
  21. sourcecode-5.9.30/src/sourcecode/inflight.py +287 -0
  22. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/manifest_cache.py +11 -9
  23. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/non_coverage.py +14 -3
  24. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/progress.py +34 -0
  25. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/repository_ir.py +148 -62
  26. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/risk.py +99 -19
  27. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rule_pass.py +18 -0
  28. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_findings.py +8 -0
  29. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_security_audit.py +15 -2
  30. {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/build-windows.yml +0 -0
  31. {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/perf-gate.yml +0 -0
  32. {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/windows-battery.yml +0 -0
  33. {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/windows-regression.yml +0 -0
  34. {sourcecode-5.9.28 → sourcecode-5.9.30}/.gitignore +0 -0
  35. {sourcecode-5.9.28 → sourcecode-5.9.30}/.ruff.toml +0 -0
  36. {sourcecode-5.9.28 → sourcecode-5.9.30}/CLAUDE.md +0 -0
  37. {sourcecode-5.9.28 → sourcecode-5.9.30}/CODE_OF_CONDUCT.md +0 -0
  38. {sourcecode-5.9.28 → sourcecode-5.9.30}/CONTRIBUTING.md +0 -0
  39. {sourcecode-5.9.28 → sourcecode-5.9.30}/LICENSE +0 -0
  40. {sourcecode-5.9.28 → sourcecode-5.9.30}/NOTICE +0 -0
  41. {sourcecode-5.9.28 → sourcecode-5.9.30}/SECURITY.md +0 -0
  42. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  43. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  44. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  45. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  46. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  47. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  48. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  49. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  50. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  51. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  52. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  53. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  54. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  55. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  56. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  57. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  58. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  59. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
  60. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
  61. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
  62. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
  63. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
  64. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
  65. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
  66. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
  67. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
  68. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  69. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/CACHE.md +0 -0
  70. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/COMMERCIAL-OFFER.md +0 -0
  71. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/CUSTOMER-VALIDATION.md +0 -0
  72. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEMO-5MIN.md +0 -0
  73. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  74. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/EXECUTION-PLAN-12MO.md +0 -0
  75. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/MANUAL-USUARIO.md +0 -0
  76. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/MODERNIZATION.md +0 -0
  77. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT-ROUTE.md +0 -0
  78. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_AUDIT.md +0 -0
  79. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_IDENTITY.md +0 -0
  80. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_TIERS.md +0 -0
  81. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RC1-CHECKLIST.md +0 -0
  82. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
  83. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RELEASE-CHECKLIST.md +0 -0
  84. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RELEASE-VERIFICATION.md +0 -0
  85. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  86. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  87. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  88. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-assessment-report.md +0 -0
  89. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  90. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  91. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  92. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  93. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  94. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  95. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  96. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  97. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  98. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  99. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  100. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  101. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  102. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  103. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  104. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  105. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  106. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  107. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  108. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  109. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  110. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  111. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0006-performance-harness.md +0 -0
  112. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  113. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  114. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/consumer-disposition-inventory.md +0 -0
  115. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/overview.md +0 -0
  116. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/product-architecture-review.md +0 -0
  117. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/product-strategy-layering.md +0 -0
  118. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  119. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/semantic-ir-roadmap.md +0 -0
  120. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/baseline-ci.yml +0 -0
  121. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/commercial-pipeline-audit.md +0 -0
  122. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/contracts-ci.yml +0 -0
  123. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/contracts.md +0 -0
  124. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  125. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  126. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  127. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  128. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  129. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  130. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  131. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  132. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/licensing-schema.md +0 -0
  133. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/migrate-check.md +0 -0
  134. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pack-gate-github-actions.yml +0 -0
  135. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pack-gate-gitlab.yml +0 -0
  136. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/README.md +0 -0
  137. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/REGRESSION-GATE.md +0 -0
  138. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  139. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  140. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  141. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  142. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  143. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  144. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  145. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  146. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  147. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  148. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  149. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  150. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  151. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  152. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  153. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  154. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  155. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  156. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  157. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  158. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  159. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  160. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  161. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  162. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  163. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  164. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  165. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  166. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  167. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  168. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  169. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  170. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  171. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  172. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  173. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  174. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  175. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  176. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  177. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  178. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  179. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  180. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
  181. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
  182. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/README.md +0 -0
  183. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  184. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  185. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  186. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  187. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  188. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  189. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/reference-best/README.md +0 -0
  190. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  191. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/posture.md +0 -0
  192. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/privacy.md +0 -0
  193. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pro-experience-audit.md +0 -0
  194. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/schema.md +0 -0
  195. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/spec/envelope-v1.md +0 -0
  196. {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/spring-audit-ci.yml +0 -0
  197. {sourcecode-5.9.28 → sourcecode-5.9.30}/hatch_build.py +0 -0
  198. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/compare_integration_engines.py +0 -0
  199. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/context_cost_harness.py +0 -0
  200. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/customer_smoke_test.sh +0 -0
  201. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/generate_jdk_exports.py +0 -0
  202. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/perf_gate.py +0 -0
  203. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/perf_harness.py +0 -0
  204. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/sync_gate_anchors.py +0 -0
  205. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/test_fast.sh +0 -0
  206. {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/windows_reliability_matrix.py +0 -0
  207. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/__main__.py +0 -0
  208. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/access_drift.py +0 -0
  209. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/adaptive_scanner.py +0 -0
  210. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/analysis_budget.py +0 -0
  211. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/answer_bounds.py +0 -0
  212. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/archetype.py +0 -0
  213. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architectural_baseline.py +0 -0
  214. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architectural_delta.py +0 -0
  215. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architecture_analyzer.py +0 -0
  216. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architecture_summary.py +0 -0
  217. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ast_extractor.py +0 -0
  218. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_clusters.py +0 -0
  219. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_report.py +0 -0
  220. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_since.py +0 -0
  221. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_verify.py +0 -0
  222. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/baseline_attestation.py +0 -0
  223. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/baseline_autocapture.py +0 -0
  224. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/breaking_changes.py +0 -0
  225. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/build_modules.py +0 -0
  226. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/build_stamp.py +0 -0
  227. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/bundled_docs.py +0 -0
  228. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/c4_render.py +0 -0
  229. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache.py +0 -0
  230. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache_model.py +0 -0
  231. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache_observation.py +0 -0
  232. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/call_surface.py +0 -0
  233. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/caller_metrics.py +0 -0
  234. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/caller_reach.py +0 -0
  235. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/canonical_ir.py +0 -0
  236. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/chain_rules.py +0 -0
  237. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/change_plan.py +0 -0
  238. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ci_output.py +0 -0
  239. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cir_graphs.py +0 -0
  240. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/classifier.py +0 -0
  241. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/click_runtime.py +0 -0
  242. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/client_calls.py +0 -0
  243. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/code_notes_analyzer.py +0 -0
  244. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/compare.py +0 -0
  245. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/confidence_analyzer.py +0 -0
  246. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/constraint_diff.py +0 -0
  247. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/consumer_join.py +0 -0
  248. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/container_wiring.py +0 -0
  249. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_cache.py +0 -0
  250. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_graph.py +0 -0
  251. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_scorer.py +0 -0
  252. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_summarizer.py +0 -0
  253. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_diff.py +0 -0
  254. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_init.py +0 -0
  255. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_model.py +0 -0
  256. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_pipeline.py +0 -0
  257. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/coverage_parser.py +0 -0
  258. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cve_feed.py +0 -0
  259. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cve_reachability.py +0 -0
  260. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/data_exposure.py +0 -0
  261. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/data_labels.py +0 -0
  262. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/declarations.py +0 -0
  263. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_classes/__init__.py +0 -0
  264. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_classes/registry.json +0 -0
  265. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_identity.py +0 -0
  266. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/degradation.py +0 -0
  267. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/deployment_prefix.py +0 -0
  268. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/__init__.py +0 -0
  269. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/base.py +0 -0
  270. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/csproj_parser.py +0 -0
  271. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/dart.py +0 -0
  272. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/dotnet.py +0 -0
  273. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/elixir.py +0 -0
  274. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/go.py +0 -0
  275. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/heuristic.py +0 -0
  276. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/hybrid.py +0 -0
  277. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/java.py +0 -0
  278. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/jvm_ext.py +0 -0
  279. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/nodejs.py +0 -0
  280. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/parsers.py +0 -0
  281. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/php.py +0 -0
  282. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/project.py +0 -0
  283. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/python.py +0 -0
  284. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/ruby.py +0 -0
  285. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/rust.py +0 -0
  286. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/systems.py +0 -0
  287. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/terraform.py +0 -0
  288. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/tooling.py +0 -0
  289. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/doc_analyzer.py +0 -0
  290. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/dynamic_argument_surface.py +0 -0
  291. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/empty_reach.py +0 -0
  292. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_disposition.py +0 -0
  293. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_literals.py +0 -0
  294. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_metrics.py +0 -0
  295. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/entrypoint_classifier.py +0 -0
  296. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/env_analyzer.py +0 -0
  297. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/envelope.py +0 -0
  298. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/environment_resolution.py +0 -0
  299. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/error_schema.py +0 -0
  300. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/evidence_provider.py +0 -0
  301. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/execution_plan.py +0 -0
  302. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/explain.py +0 -0
  303. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/explain_endpoint.py +0 -0
  304. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/facts/__init__.py +0 -0
  305. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/facts/registry.json +0 -0
  306. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/field_deprecations.py +0 -0
  307. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/file_chunker.py +0 -0
  308. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/file_classifier.py +0 -0
  309. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/filter_surface.py +0 -0
  310. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/findings_baseline.py +0 -0
  311. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/format_contract.py +0 -0
  312. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/fqn_utils.py +0 -0
  313. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/functional_routes.py +0 -0
  314. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/gate_anchors.py +0 -0
  315. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/git_analyzer.py +0 -0
  316. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/git_checkout.py +0 -0
  317. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/github_diff.py +0 -0
  318. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/graph_analyzer.py +0 -0
  319. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/graph_evidence.py +0 -0
  320. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/hibernate_strat.py +0 -0
  321. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/identity_fallback.py +0 -0
  322. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/integration_coordinates.py +0 -0
  323. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/intent_router.py +0 -0
  324. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/jdk_exports.py +0 -0
  325. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/jvm_inventory.py +0 -0
  326. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/license.py +0 -0
  327. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/__init__.py +0 -0
  328. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/dependency_import.py +0 -0
  329. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  330. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  331. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  332. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  333. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  334. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/orchestrator.py +0 -0
  335. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/registry.py +0 -0
  336. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/runner.py +0 -0
  337. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/server.py +0 -0
  338. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp_nudge.py +0 -0
  339. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/metrics_analyzer.py +0 -0
  340. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migrate_check.py +0 -0
  341. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migration_apply.py +0 -0
  342. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migration_blast.py +0 -0
  343. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/openapi_surface.py +0 -0
  344. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/openrewrite_recipe.py +0 -0
  345. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_bounds.py +0 -0
  346. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_budget.py +0 -0
  347. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_ceiling.py +0 -0
  348. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_encoding.py +0 -0
  349. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_sink.py +0 -0
  350. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pack_manifest.py +0 -0
  351. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/packs.py +0 -0
  352. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/parallel.py +0 -0
  353. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/parse_cache.py +0 -0
  354. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/partial_contract.py +0 -0
  355. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_admission.py +0 -0
  356. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_display.py +0 -0
  357. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_filters.py +0 -0
  358. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/perf.py +0 -0
  359. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/phased_run.py +0 -0
  360. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pipe_contract.py +0 -0
  361. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/posture.py +0 -0
  362. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_comment_renderer.py +0 -0
  363. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_impact.py +0 -0
  364. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_risk.py +0 -0
  365. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/prepare_context.py +0 -0
  366. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/product_info.py +0 -0
  367. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/provenance.py +0 -0
  368. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ranking_engine.py +0 -0
  369. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/readiness_timeline.py +0 -0
  370. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/readonly.py +0 -0
  371. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/reconciliation.py +0 -0
  372. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/redactor.py +0 -0
  373. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/reference_facts.py +0 -0
  374. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/regress.py +0 -0
  375. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/regulatory_pack.py +0 -0
  376. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/release_info.py +0 -0
  377. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/relevance_scorer.py +0 -0
  378. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_diff.py +0 -0
  379. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_flow.py +0 -0
  380. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_report.py +0 -0
  381. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remedies.py +0 -0
  382. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rename_refactor.py +0 -0
  383. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/repo_classifier.py +0 -0
  384. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/resource_budget.py +0 -0
  385. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/__init__.py +0 -0
  386. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/context.py +0 -0
  387. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/errors.py +0 -0
  388. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/executor.py +0 -0
  389. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/planner.py +0 -0
  390. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/query.py +0 -0
  391. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/request.py +0 -0
  392. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/resolution.py +0 -0
  393. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/result.py +0 -0
  394. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/retriever.py +0 -0
  395. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/runtime.py +0 -0
  396. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps.py +0 -0
  397. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  398. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_graph.py +0 -0
  399. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_impact.py +0 -0
  400. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_intf.py +0 -0
  401. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_struct.py +0 -0
  402. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  403. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ris.py +0 -0
  404. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/risk_model.py +0 -0
  405. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rule_catalog.py +0 -0
  406. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/runs.py +0 -0
  407. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/runtime_classifier.py +0 -0
  408. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sarif.py +0 -0
  409. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sarif_emit.py +0 -0
  410. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/scanner.py +0 -0
  411. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema.py +0 -0
  412. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema_producers.py +0 -0
  413. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema_registry.py +0 -0
  414. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  415. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  416. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  417. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  418. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  419. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  420. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  421. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_chain.py +0 -0
  422. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_config.py +0 -0
  423. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_config_scan.py +0 -0
  424. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_posture.py +0 -0
  425. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/selection_contract.py +0 -0
  426. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/self_audit.py +0 -0
  427. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/selftest.py +0 -0
  428. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_analyzer.py +0 -0
  429. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_impact_engine.py +0 -0
  430. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_integration_engine.py +0 -0
  431. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_services.py +0 -0
  432. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/serializer.py +0 -0
  433. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/servlet_surface.py +0 -0
  434. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/source_text.py +0 -0
  435. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_event_topology.py +0 -0
  436. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_impact.py +0 -0
  437. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_model.py +0 -0
  438. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_profiles.py +0 -0
  439. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_properties.py +0 -0
  440. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_semantic.py +0 -0
  441. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_tx_analyzer.py +0 -0
  442. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sql_taint.py +0 -0
  443. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/summarizer.py +0 -0
  444. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/target_admission.py +0 -0
  445. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/__init__.py +0 -0
  446. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/config.py +0 -0
  447. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/consent.py +0 -0
  448. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/events.py +0 -0
  449. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/filters.py +0 -0
  450. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/transport.py +0 -0
  451. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/test_gap_ranking.py +0 -0
  452. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/test_sources.py +0 -0
  453. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/text_input.py +0 -0
  454. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/timeline.py +0 -0
  455. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/timeline_cache.py +0 -0
  456. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/token_estimate.py +0 -0
  457. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/tree_utils.py +0 -0
  458. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/type_usage_surface.py +0 -0
  459. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/validation_inference.py +0 -0
  460. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/validation_surface.py +0 -0
  461. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_edit.py +0 -0
  462. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_repo.py +0 -0
  463. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_rules.py +0 -0
  464. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/version_check.py +0 -0
  465. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/vex.py +0 -0
  466. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/waivers.py +0 -0
  467. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/watch_loop.py +0 -0
  468. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/wired_surface.py +0 -0
  469. {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/workspace.py +0 -0
  470. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/README.md +0 -0
  471. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/get-license/index.ts +0 -0
  472. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  473. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/telemetry/index.ts +0 -0
  474. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/license_event_ordering.sql +0 -0
  475. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/licensing_schema.sql +0 -0
  476. {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,149 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.30] — 2026-09-02
4
+
5
+ *A full pass over the open queue from the two 5.9.29 field audits. Nine rows
6
+ closed or materially narrowed, one commit each, every change carrying its own
7
+ test.*
8
+
9
+ ### Fixed
10
+
11
+ - **A run nobody is watching now leaves the same forensic trail a watched
12
+ one does.** The in-flight marker's stage field went blank in exactly the
13
+ environment it exists to observe -- off a TTY, in CI, under `NO_COLOR`,
14
+ piped through `timeout` -- because the code path that records a stage was
15
+ only ever built when the visible progress line was displayed. It no longer
16
+ is: the forensic write and the visible display are now independent, and the
17
+ auditor's own captured hang is the regression test.
18
+ - **`ask endpoints` names a file it could not fully parse, at any answer
19
+ size.** A file whose extracted symbols were not trustworthy -- a type
20
+ declaration that produced none, or a syntax error the extractor's
21
+ brace/paren check catches -- was already disclosed by `spring-audit`/`risk`
22
+ and silently dropped by `endpoints`, because the two commands parse the
23
+ same sources through two independent code paths and only one of them ran
24
+ the check. One shared authority now backs both.
25
+ - **`ask plan` refuses an unscoped run over a workspace before doing any
26
+ work**, the same guard `selftest` shipped last release, applied to the
27
+ same class of defect: a lone positional argument silently left the
28
+ repository path at its default `.`, and an implicit `.` covering nested Git
29
+ repositories used to drive a full, unvalidated analysis.
30
+ - **Every command that names "the repository" accepts every spelling of the
31
+ flag**, including the ones that declare it as an option rather than a
32
+ positional argument -- `compare A B --repo <path>` now works, where it used
33
+ to demand `--path` specifically.
34
+ - **The Spring-density statement names the actual number.** A repository
35
+ where Spring is present but marginal already got a correctly bounded
36
+ answer; the sentence explaining why now states the measured percentage
37
+ instead of leaving the reader to divide two raw counts themselves.
38
+ - **`--detach`'s envelope reports an absolute output path.** A relative
39
+ `--output` used to come back exactly as typed, unusable from outside the
40
+ invocation's own working directory.
41
+ - **Vert.x's fluent router chain is recognized as unmodeled routing
42
+ evidence**, closing the one framework of eleven surveyed that fell through
43
+ to a generic disclaimer with no file named -- `router.get("/x").handler(...)`
44
+ carries no annotation for the existing detection rule to match, so a second,
45
+ equally vendor-neutral rule was added for the call-chain shape specifically.
46
+ - The root `ask` command's asynchronous cache write no longer re-joins its own
47
+ daemon thread at process exit, which could delay returning control to the
48
+ caller for up to 30 seconds after the answer had already been delivered.
49
+
50
+ ### Added
51
+
52
+ - `tests/test_new01_silent_empty_success_regime.py`: an automated, real-CLI
53
+ battery over every command that must never report success with nothing to
54
+ show, closing the standing request behind four consecutive rounds of
55
+ 103-for-103 external verification.
56
+
57
+ ### Investigated, Left Unchanged
58
+
59
+ - The specific mechanism behind a `verify` invocation that produced a
60
+ complete answer and was still killed by an external timeout remains
61
+ unconfirmed; one independently-discovered instance of the same failure
62
+ shape elsewhere in the codebase is fixed above, but `verify` does not share
63
+ that code path.
64
+ - `pack assessment`'s unbounded default output was reproduced and understood,
65
+ not changed: `--compact` already bounds it correctly (a prior round's own
66
+ fix), and the unbounded default is a deliberate, tested, opt-in answer
67
+ rather than an oversight. Flipping it would be a product decision affecting
68
+ every existing caller, not a bug fix.
69
+
70
+ ## [5.9.29] — 2026-09-02
71
+
72
+ *The 5.9.28 field round's two P0s and its P1, plus the suite's first green run
73
+ in several releases. Where 5.9.28 answered a question about the worker pool,
74
+ this release answers the one about where a run stops when it stops.*
75
+
76
+ ### Added
77
+
78
+ - **An in-flight marker for runs that never finish (`R-01-INFLIGHT`).** The
79
+ field measured four `spring-audit` hangs and could say nothing about any of
80
+ them: every diagnostic this product had — the envelope, the forensic sidecar
81
+ — lives on a path a hung run never reaches. A marker is now written when a
82
+ hang-prone command starts, rewritten at each phase and stage change the
83
+ heartbeat already reports, and deleted on the way out. A run killed
84
+ externally leaves `inflight/<pid>.json` naming its argv, its start time, the
85
+ phase and the stage it stopped in. Abandoned markers are published by a
86
+ later run in `_meta.incomplete_runs`, because the run that stops cannot
87
+ report anything itself; each row states whether it is a measurement (the
88
+ process is gone) or an inference (no refresh, on a platform that cannot
89
+ probe liveness safely). Covers the audit family plus `onboard` and
90
+ `remediate`, the two commands the field reports hanging outside it.
91
+ `ASK_NO_INFLIGHT_MARKER=1` disables it.
92
+ - **`timings.rule_families`** — wall time per rule family, highest first, with
93
+ a basis stating that it ranks cost and not complexity. The phase split could
94
+ say `security_rules: 12,617 ms` and never which of six families spent it.
95
+
96
+ ### Fixed
97
+
98
+ - **The most expensive rule family is between 3 and 24 times faster, with a
99
+ byte-identical answer (P1).** `SEC-010` was 85 % of the rule phase and 35 %
100
+ of a whole audit; profiling found the walk under it re-reading every
101
+ remaining source, from disk, once per callee name it resolved — 96,399 reads
102
+ for 28 lookups. It indexes declarable names in the pass that already reads
103
+ each file once. Measured warm: `SEC-010` 10,830 → 3,246 ms on a 3,860-file
104
+ repository (audit 15.5 → 12.2 s) and 64,391 → 2,628 ms on an 878-file one
105
+ (audit 71.1 → 8.4 s), unchanged where a repository has no HTTP-input seeds.
106
+ `content_id` identical on all three.
107
+ - **That family reports while it runs, and a deadline can stop it inside.** It
108
+ owned the longest stretch of an audit and left one heartbeat line unchanged
109
+ for the whole of it, which from outside is what the field calls a hang. A
110
+ budget cut returns what it measured instead of surfacing as an analysis
111
+ error.
112
+ - **`manifest_cache` keyed its entries on a list that omitted every
113
+ lockfile.** Two repositories with identical manifests and different resolved
114
+ dependencies hashed the same, and the second was served the first's answer.
115
+ The key now reads the analyzer's own `INPUT_FILENAMES`, and a battery reads
116
+ that module's source and fails if it opens a file the set does not name.
117
+ - **`SpringAuditResult.merge()` dropped `spring_footprint`**, which switched
118
+ BUG-03's marginal-detection disclosure back off on every `--scope all` run —
119
+ the default.
120
+ - Machine-census leases are refreshed while a run is alive, so a killed run no
121
+ longer makes every later run on that machine halve its worker pool for an
122
+ hour; the lease directory is capped.
123
+
124
+ ### Changed
125
+
126
+ - The suite is green: 13,748 tests, 0 failures. It had carried twenty-one
127
+ standing reds for several releases, which is how a real regression becomes
128
+ indistinguishable from the background. Two were the product defects above;
129
+ the rest were assertions that had fallen behind the code they pin, each
130
+ fixed or opted out with the reason stated.
131
+
132
+ ### Known Limitations
133
+
134
+ - `ALT-01`/`ALT-03` remain open. The bisection the field asked for ran over two
135
+ corpora — 250 to 4,772 files on one, 9,195 on another — and found no size at
136
+ which `spring-audit` stops answering: 5.8 s to 39.6 s, sublinear, `rc=0`
137
+ throughout. File count alone is exonerated on this platform at up to 2.75x
138
+ the field repository's size. This release makes the stretch the failing runs
139
+ sat in several times shorter and, for the first time, visible while it
140
+ happens; it does not claim to have fixed the hang.
141
+ - The next field round should send `inflight/` and `entry-trace.jsonl`
142
+ together after a hang. A marker still stuck in `SEC-010` says the family is
143
+ not the cause; a marker in another stage moves the search there; no marker
144
+ at all keeps it upstream of `main_entry`.
145
+ - `BUG-02` and `BUG-12` still need the field's own large repository.
146
+
3
147
  ## [5.9.28] — 2026-09-02
4
148
 
5
149
  *Remediation batch on the 5.9.27 audit queue: nine rows, one commit each. The
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.28
3
+ Version: 5.9.30
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.28-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.30-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.28 — and, on a build that has aged,
293
+ ask version # ask 5.9.30 — 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.28-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.30-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.28 — and, on a build that has aged,
244
+ ask version # ask 5.9.30 — and, on a build that has aged,
245
245
  # how many releases have probably shipped since
246
246
  ```
247
247
 
@@ -12,7 +12,7 @@ a regression assertion exist.
12
12
 
13
13
  ## Executive Result
14
14
 
15
- The audit rates ASK Engine **6.6/10** on the large MSAS corpus and **7.5/10** on
15
+ The audit rates ASK Engine **6.6/10** on the large native-Windows corpus and **7.5/10** on
16
16
  the smaller nine-axis assessment. The measurements agree on the main risk:
17
17
  source analysis is accurate and unusually explicit about uncertainty, but large
18
18
  repository execution and several output contracts are not yet reliable enough
@@ -52,7 +52,7 @@ SQL-injection recall, memory, and inconsistent CLI contracts.
52
52
  ## Performance Evidence
53
53
 
54
54
  The audit measured `--agent` on ThingsBoard at **182.6 s / 2,088 MB RSS** and
55
- `spring-audit` at **164.2 s cold**. On the larger MSAS corpus it reports
55
+ `spring-audit` at **164.2 s cold**. On the larger native-Windows corpus it reports
56
56
  `ask . --agent` at **447 s**, `contract-diff` at **329 s**, `delta` at **187 s**,
57
57
  and `validation --compact` at **91 s**. Warm root compact analysis can be below
58
58
  one second; these are cold/deep-path costs.
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Scope And Verdict
4
4
 
5
- Native-Windows re-audit on the same MSAS repository (3,342 Java files) used
5
+ Native-Windows re-audit on the same audited repository (3,342 Java files) used
6
6
  in every prior round. Score **4.6/10**, the first uptick in four rounds (5.9.22
7
7
  6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8). The uptick carries a large
8
8
  qualification discovered mid-session: this audit's own machine was shared
@@ -40,7 +40,7 @@ pass ... 0/35 ... 3.8/10"). This auditor states plainly that the first pass
40
40
  and its 7.4/10 score do not correspond to anything they ran or reported. Given
41
41
  the newly confirmed shared-machine contention, the likely explanation is that
42
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
43
+ sessions on the same machine (the native-Windows lineage and a
44
44
  multi-repository "testing/" corpus lineage matching the five OSS repos found
45
45
  in the trace this round) rather than one evaluator's two passes. Recorded as
46
46
  an open provenance question, not resolved either way — see
@@ -97,6 +97,6 @@ concurrent `ask` test harness during at least part of the observation window.
97
97
  Reliability figures in this round should be read as measured under
98
98
  uncontrolled, real contention, not as an isolated single-process baseline.
99
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
100
+ both a reference repo and the audited repository in the same clean window, nothing else
101
101
  running, to separate "the repository" from "the shared machine" as the
102
102
  variable.
@@ -0,0 +1,174 @@
1
+ # Alternative External Audit - 5.9.28
2
+
3
+ *The audited repository is referred to neutrally throughout (3,342 Java files,
4
+ `repo_id 7fced5c877cacfc5`, dirty working tree) — it is the same subject as
5
+ every prior round in this lineage.*
6
+
7
+ ## Scope And Verdict
8
+
9
+ Native-Windows re-audit, sixth round in this lineage. Score **6.2/10** (5.9.22
10
+ 6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8, 5.9.27 4.6, 5.9.28 6.2) — the first
11
+ substantial rise in five versions, and the first with a root cause identified
12
+ in code rather than a symptom patched. **No regression against 5.9.27 was
13
+ found.** Windows 11 Pro 10.0.26200, Python 3.10.0, pipx, `ask.EXE`, build
14
+ `adbbf9ca7652e2ad2dfdb2db911c12e1793dded5`.
15
+
16
+ | Axis | 5.9.27 | 5.9.28 | Basis |
17
+ |---|---:|---:|---|
18
+ | Analysis accuracy | 9.0 | 9.5 | Overload anchoring exact and cross-checked against the real source |
19
+ | Honesty of figures | 9.0 | 9.3 | `audit_time_ms` null instead of a false `0.0`; every cache store publishes its eviction contract |
20
+ | Diagnostic instrumentation | partial progress | real step, known limit | `_meta.concurrency` is precise and actionable — and absent from exactly the runs that fail |
21
+ | CLI ergonomics | 6.5 | 7.5 | Nested-workspace `selftest` refusal; `retrieve --target` explains and redirects |
22
+ | Audit-family reliability | 2/12 | 2/8, cause bounded | `migrate-check`/`migrate-apply` clean; `spring-audit` 0/4, `verify` 0/1, `risk` 0/1, `audit-report` 0/1 |
23
+ | Light-path performance | 6.5 | 6.5 | `impact-chain` 11.3 s, `review-pr` 29.4 s — within range under residual contention |
24
+
25
+ ## Priority Finding — The Hang Reproduces With Contention Ruled Down
26
+
27
+ The most important measurement of this round. The auditor isolated the
28
+ contention variable to its lowest observable level across six sessions, and
29
+ the failure persisted at 100%:
30
+
31
+ 1. `entry-trace.jsonl` was monitored for 120 s with nothing launched, waiting
32
+ for a quiet window.
33
+ 2. 100 s of total calm confirmed — no new lines.
34
+ 3. `timeout -k 5 150 ask spring-audit . --compact` launched into that window.
35
+ 4. Result: `rc=124`, 150,176 ms, **0 bytes of stdout**.
36
+ 5. The trace grew by two lines over the whole 150 s window: the auditor's own
37
+ invocation, and one light foreign invocation (`risk thingsboard --limit
38
+ 20`) — against the *dozens* of concurrent foreign invocations measured in
39
+ the 5.9.27 session.
40
+
41
+ Session total: **4/4 hangs** of `spring-audit . --compact`, the last of them
42
+ under the lowest contention load obtainable in six audits.
43
+
44
+ The 5.9.28 release note states: *"one hang was observed with nothing else
45
+ running, and that is unexplained."* This round supplies four repetitions of
46
+ that case rather than one, which turns "unexplained" into "unexplained and
47
+ reproducible" — a better-defined problem, still unsolved. Contention is a
48
+ real, now precisely measured factor; it is **not the sole cause**. Something
49
+ specific to this repository still breaks `spring-audit` on a near-idle
50
+ machine.
51
+
52
+ The auditor's recommendation: profile the `applying all rules over 3342 Java
53
+ files` phase (the one the stderr heartbeat names) against a growing subset of
54
+ the repository — 250, 500, 1,000, 2,000, 3,342 files — to find where the
55
+ behaviour changes from "answers" to "hangs indefinitely". If the command
56
+ exhausts memory or time deterministically on some code pattern in this tree,
57
+ contention would be worsening a failure that already exists in isolation
58
+ rather than causing one.
59
+
60
+ ## Instrumentation Gap — The Blind Spot `_meta.concurrency` Cannot Cover
61
+
62
+ `_meta.concurrency` is described as the best instrumentation to appear in six
63
+ sessions. On a successful `endpoints --output` run it read
64
+ `{"peer_invocations_at_start": 17, "worker_budget_shared": true, "jobs": 1,
65
+ "jobs_unshared": 4}` — exact, actionable, and enough for any consumer to tell
66
+ a contaminated timing from an isolated one without doing process archaeology.
67
+
68
+ It never appears on a hung or empty run: stderr across the four `spring-audit`
69
+ hangs contains zero mentions of `concurrency`, because those processes die
70
+ before assembling any payload. This is the same blind spot `R-01` identified
71
+ in the 5.9.26 round (the process does not reach the output guard); what has
72
+ changed is that we now know it *would* publish something useful if it got
73
+ there.
74
+
75
+ Concrete suggestion from the auditor: write an in-flight marker
76
+ (`inflight/<pid>.json` carrying `{argv, started_at, last_phase}`, updated at
77
+ each phase change the heartbeat already reports) when an audit-family command
78
+ starts, and delete it on completion. A process that hangs or dies leaves that
79
+ file orphaned — which is precisely the forensic evidence the next field
80
+ session needs, without depending on an external observer correlating
81
+ timestamps in a trace file shared with an unknown number of other processes.
82
+
83
+ ## Measured Reliability — Six Versions, Same Invocation, Same Repository
84
+
85
+ | Invocation | 5.9.23 | 5.9.25 | 5.9.26 | 5.9.27 | 5.9.28 |
86
+ |---|---:|---:|---:|---:|---|
87
+ | `spring-audit . --compact` | 0/24 | 0/18 | 0/8 | 0/5 | 0/4 (3 under verified-minimal contention) |
88
+ | `verify .` | 0/24 | 0/18 | 0/5 | 0/1 | 0/1 |
89
+ | `migrate-check . --compact` | 7/12 | 4/26 | 0/5 | 1/1 | 1/1 ✓ |
90
+ | `migrate-apply .` | 14/24 | 0/26 | 0/5 | 1/1 | 1/1 ✓ |
91
+ | `risk . --limit 20` | 0/13 | 0/7 | 0/4 | 0/1 | 0/1 |
92
+ | `audit-report . --format markdown` | 0/7 | 0/7 | 0/4 | 0/1 | 0/1 |
93
+
94
+ `migrate-check` and `migrate-apply` have now answered reliably in two
95
+ consecutive sessions (38–39 s, correct payloads) — a trend rather than luck.
96
+ The other four remain at zero.
97
+
98
+ ## Verified Fixes — Checked With The Auditor's Own Data
99
+
100
+ - **`NEW-02`/`BUG-05` (overload anchoring) — closed, cross-checked against the
101
+ real source.** `ask endpoints . --output`: the four endpoints of one
102
+ overloaded handler pair now publish `anchor_ambiguity: true`,
103
+ `overload_count: 2`, `anchor_candidate_lines: [134, 145]`, and those two
104
+ line numbers match the two real annotations the auditor had verified by hand
105
+ three sessions earlier. First defect tracked since the 5.9.22 round that is
106
+ genuinely resolved rather than "not reproduced this time".
107
+ - **`BUG-13` (nested-workspace `selftest`) — closed, verified against a
108
+ purpose-built fixture.** The auditor built a workspace holding two real
109
+ nested Git repositories: refusal in **373 ms**, `{"code": "INVALID_USAGE",
110
+ ..., "nested_repositories": 2}`, with `--allow-nested` documented. Against
111
+ 1/12 rows passing in 120 s before.
112
+ - **`BUG-16` (cache eviction contract) — closed.** `ask cache status` now
113
+ prints, per store, when and how entries are evicted — information absent for
114
+ four versions.
115
+ - **`ALT-25` (`impact-chain.audit_time_ms`) — closed.** `null` with
116
+ `findings_status: "not_computed"` and the rule stated, replacing the
117
+ misleading `0.0`.
118
+ - **`retrieve security-surface --target` — closed, high quality.** The refusal
119
+ now says the intent is repository-wide and names
120
+ `ask retrieve security-chain --target <symbol>`, after four sessions of
121
+ "No such option: --target".
122
+ - **`R-01`'s mechanism — confirmed real and quantified** (see above), with the
123
+ reservation that the disclosure cannot reach the failing runs.
124
+
125
+ ## Not Verified This Round
126
+
127
+ - **`ALT-08` — the auditor ran the wrong command and says so.**
128
+ `ask review-pr . --files -` (119,979 bytes, above the declared 100,000-byte
129
+ ceiling) carries no `_truncation_summary` at all: that field belongs to
130
+ `ask prepare-context review-pr`, a different command sharing the task name.
131
+ Neither claimed nor refuted; pending a repeat with the correct command.
132
+ - `BUG-22`/`REG-02` (`--agent` not relaunched), `BUG-10` (needs a repository
133
+ with the routing styles it detects, absent here), `ALT-07`, `ALT-10`,
134
+ `BUG-02`, `BUG-12`, `BUG-09`, `BUG-23`: not relaunched for time budget, no
135
+ regression signal against any of them.
136
+ - `ask --help`: 12.3 s cold, 2.9 s on immediate repetition. Still high on the
137
+ audit machine, consistent with residual contention rather than a defect in
138
+ the command.
139
+
140
+ ## Verified And Defect-Free In 5.9.28
141
+
142
+ `endpoints` (3,763, exact), `impact-chain` (37,445 bytes), `posture`,
143
+ `verify-edit`, `explain`, `impact`, `drift`, `trend`, `chunk-file`, `intent`,
144
+ `pr-risk`, `review-pr` (119,979 bytes, coherent), `migrate-check` (38,081
145
+ bytes), `migrate-apply` (10,142 bytes), `selftest` with an explicit path
146
+ (`rc=75`, 9,910 bytes) and with nesting detection (`rc=2`). `--jobs`
147
+ out-of-range rejection confirmed for the sixth consecutive session.
148
+
149
+ ## Commercial Position
150
+
151
+ The reliable subset grew for real this round — `migrate-check`,
152
+ `migrate-apply`, `endpoints`, `posture`, `impact-chain`, `pr-risk`,
153
+ `review-pr`, `selftest` with an explicit path, now with correct overload
154
+ anchors — and is valued at **18–20 €/dev/month**, up from prior rounds. The
155
+ central security-audit family (`spring-audit`, `verify`, `risk`,
156
+ `audit-report`) remains unusable on this repository for the sixth consecutive
157
+ version.
158
+
159
+ **Upgrade recommendation: yes, unconditionally** — no regression against
160
+ 5.9.27, and four corrections verified with the auditor's own data rather than
161
+ accepted on the changelog's word. For anyone who needs the audit family on
162
+ this repository specifically: still not the moment, but for the first time the
163
+ team has a concrete, reproducible lead instead of a diffuse symptom.
164
+
165
+ ## Attack Order Requested By The Auditor
166
+
167
+ 1. `R-01` — bisect the `applying all rules` phase over a growing file subset
168
+ (250 → 3,342) to find where the behaviour changes; the trigger may not be
169
+ purely concurrency.
170
+ 2. Extend `R-01`'s instrumentation to runs that never complete — the in-flight
171
+ marker above.
172
+ 3. `R-02` — repeat the `ALT-08` verification with `ask prepare-context
173
+ review-pr`.
174
+ 4. Remaining rows unchanged in priority from the 5.9.27 report.
@@ -0,0 +1,143 @@
1
+ # Alternative External Audit - 5.9.29
2
+
3
+ *The audited repository is referred to neutrally (3,342 Java files, `repo_id
4
+ 7fced5c877cacfc5`, dirty working tree) — the same subject as every prior round
5
+ in this lineage.*
6
+
7
+ ## Scope And Verdict
8
+
9
+ Native-Windows re-audit, seventh round. Score **7.8/10** (5.9.22 6.6, 5.9.23
10
+ 4.9, 5.9.25 4.3, 5.9.26 3.8, 5.9.27 4.6, 5.9.28 6.2, 5.9.29 7.8) — the largest
11
+ jump of the seven, and the first with a root cause found and fixed rather than
12
+ mitigated. Build `6df1bd2436f8b562ee173fbaf7ba499ee783f0f8`, Windows 11 Pro
13
+ 10.0.26200, Python 3.10.0, pipx, `ask.EXE`.
14
+
15
+ **All six audit-family commands answered in this session.** The auditor's own
16
+ sentence: *the first time in seven rounds I can write that.*
17
+
18
+ | Invocation | 5.9.23 | 5.9.25 | 5.9.26 | 5.9.27 | 5.9.28 | 5.9.29 |
19
+ |---|---:|---:|---:|---:|---:|---|
20
+ | `spring-audit . --compact` | 0/24 | 0/18 | 0/8 | 0/5 | 0/4 | **3/4** |
21
+ | `verify .` | 0/24 | 0/18 | 0/5 | 0/1 | 0/1 | **2/2** (one killed at 200 s despite a complete answer — see `R-02`) |
22
+ | `migrate-check . --compact` | 7/12 | 4/26 | 0/5 | 1/1 | 1/1 | 1/1 |
23
+ | `migrate-apply .` | 14/24 | 0/26 | 0/5 | 1/1 | 1/1 | 1/1 |
24
+ | `risk . --limit 20` | 0/13 | 0/7 | 0/4 | 0/1 | 0/1 | **1/1**, first in six sessions |
25
+ | `audit-report . --format markdown` | 0/7 | 0/7 | 0/4 | 0/1 | 0/1 | **1/1**, first in six sessions |
26
+ | `remediate .` | — | — | hung | hung | — | **1/1**, 74.8 s, first ever |
27
+
28
+ `onboard` answered in 691 ms. `selftest` with an explicit path rose from 1/12
29
+ to **6/12** passing rows, which the auditor attributes to the `SEC-010` work:
30
+ the `ASK-16` row — does `spring-audit` publish its own timings — now passes
31
+ clean.
32
+
33
+ ## Confirmed With The Auditor's Own Data
34
+
35
+ - **The `SEC-010` fix is real and measured.** Three successive `spring-audit`
36
+ runs, identical `content_id` (`4a0429c7784da360`), 385 findings each, with
37
+ the family's own time falling as the cache warmed: **42.8 s → 25.4 s →
38
+ 20.0 s**. The whole command went 73.9 s → 46.9 s → 35.9 s. This is the
39
+ warm-cache benefit the product had promised and no session had been able to
40
+ observe.
41
+ - **`ALT-08` closed, byte-exact, with the right command this time.**
42
+ `ask prepare-context review-pr` — not `ask review-pr`, the confusion that
43
+ left the row unverified last round — gives `final_size_bytes: 93,462`,
44
+ matching `len(json.dumps(payload without _meta))` exactly.
45
+ - **The in-flight marker works, and works on the case it was built for.** It
46
+ captured the auditor's own hung process with phase and timestamps. It had
47
+ also preserved a genuine *foreign* orphan from an earlier session
48
+ (`audit-report thingsboard`, phase `packaging audit evidence`) that predated
49
+ their run — the mechanism persists orphans exactly as documented.
50
+ - `migrate-check`/`migrate-apply` reliable for a third consecutive session
51
+ (15.9 s and 14.7 s, faster than either previous round).
52
+
53
+ ## `R-01` — New, Precise Evidence: The Hang Happened Before The Rules Phase
54
+
55
+ One of four `spring-audit` runs hung (200 s, 0 bytes). For the first time the
56
+ process left a record:
57
+
58
+ ```json
59
+ {"argv": ["spring-audit", ".", "--compact"],
60
+ "started_at": 1788411595.5325525,
61
+ "last_phase": "applying all rules over 3342 Java files [population=production_java_sources]",
62
+ "phase_entered_at": 1788411734.8912373,
63
+ "last_stage": null, "stage_entered_at": null}
64
+ ```
65
+
66
+ `1788411734.89 − 1788411595.53 = 139.36 s` spent **before** the run entered
67
+ the phase that holds the rules — roughly 70 % of the time it lived. The stderr
68
+ heartbeat agrees: two warnings naming `auditing 3342 Java files` at one and
69
+ two minutes, then `applying all rules … for 41.4s` at three. On the successful
70
+ runs of the same session the same stretch took ~72.7 s in total, so this was
71
+ not a slow phase, it was an outlier by a factor the bisection never saw.
72
+
73
+ Two readings follow, and they belong to different owners:
74
+
75
+ **The auditor's inference is refutable in source.** They suspected the new
76
+ `seeds()` pre-index shipped for `SEC-010` had moved the cost earlier.
77
+ It cannot have: `_http_input_query_sinks` is called from `SEC-010`'s
78
+ `analyze`, which runs inside the `security_rules` phase — that is, *inside*
79
+ "applying all rules", after the point their marker recorded. What lives in the
80
+ 139 s is the phase before it: the CIR build, the XML security-configuration
81
+ scan and the start of the semantic model, all published under one heartbeat
82
+ label.
83
+
84
+ **Their evidence exposes a real defect in the marker.** `last_stage: null`
85
+ should not have happened: the run was in a phase whose stages the heartbeat
86
+ does name (`parsing`, `linking`, `assembling the IR`, `scanning XML security
87
+ configuration`). It is null because stage capture rides on `Progress.work`,
88
+ and the sink that calls it is created only when the heartbeat is *enabled* —
89
+ which it is not off a TTY, in CI, under `NO_COLOR`, or piped through
90
+ `timeout`, which is the field's configuration in every one of these seven
91
+ sessions. The marker's most useful field is therefore blank in exactly the
92
+ environment it was built for. That is ours, and it is the first thing to fix.
93
+
94
+ The auditor's three instrumentation requests stand and are adopted: split the
95
+ `auditing N Java files` phase into visible sub-stages, publish the pre-index
96
+ as its own timing entry, and repeat the bisection measuring that phase
97
+ separately from the rules phase rather than only the total.
98
+
99
+ ## `R-02` — New: A Complete Answer From A Process That Did Not Exit
100
+
101
+ ```
102
+ timeout -k 5 200 ask verify .
103
+ # rc=124 · 200,183 ms · 5,333 bytes of stdout
104
+ ```
105
+
106
+ Unlike every hang in six previous sessions, this one **produced a full,
107
+ valid answer**: `verdict: "pass"`, `contract_count: 14`,
108
+ `content_id: ca00e3a40668e5bf`, `answer_bounds.complete: true`. The analysis
109
+ finished; the process did not leave. This is a different failure class from
110
+ "no answer": the work is done and the exit is late.
111
+
112
+ The auditor's own hypotheses — a non-daemon thread outliving the answer (the
113
+ parse worker pool, the heartbeat thread, or the concurrency lease) — are the
114
+ right place to look, and the last of those is this product's own recent
115
+ addition. Verifying that nothing this codebase starts can delay interpreter
116
+ shutdown after the answer is written belongs in the next round.
117
+
118
+ ## Open, Unchanged
119
+
120
+ `REG-02` (`--agent` fails by default on large repositories: 1,623 MB and
121
+ 2,572 MB observed, in the same range as three prior rounds — fourth
122
+ consecutive report with no functional change), `BUG-02`, `BUG-12`, `BUG-09`,
123
+ `BUG-23`. `pack gate --since` and `pack assessment` still do not complete
124
+ inside the auditor's budget, though `pack assessment` now shows granular
125
+ progress (`5/6 components`) where it used to fail with no sign of internal
126
+ movement.
127
+
128
+ ## Verification Boundary
129
+
130
+ `3/4` and `1/1` are not the 25–30 repetitions per command this ledger's own
131
+ closure criterion requires for `ALT-01`/`ALT-03`. The auditor states plainly
132
+ that `R-01` leaves open the possibility that the bottleneck was moved rather
133
+ than removed. Their recommendation for the next round: repeat this battery at
134
+ that repetition count, and split the phase timings first so the answer is
135
+ attributable when it comes.
136
+
137
+ ## Commercial Position
138
+
139
+ First report of seven where the auditor recommends *starting to evaluate*
140
+ `spring-audit`/`risk`/`audit-report`/`remediate` as part of a CI gate for this
141
+ repository, with the reservation above. Price raised to **25–30 €/dev/month**
142
+ for the full command set, conditional on the next session sustaining an
143
+ audit-family success rate above 80 %. Upgrade recommended without conditions.