sourcecode 5.9.9__tar.gz → 5.9.11__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 (454) hide show
  1. {sourcecode-5.9.9 → sourcecode-5.9.11}/CHANGELOG.md +72 -0
  2. {sourcecode-5.9.9 → sourcecode-5.9.11}/CLAUDE.md +12 -4
  3. {sourcecode-5.9.9 → sourcecode-5.9.11}/PKG-INFO +25 -10
  4. {sourcecode-5.9.9 → sourcecode-5.9.11}/README.md +24 -9
  5. sourcecode-5.9.11/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +169 -0
  6. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/DEFECT-LEDGER.md +106 -3
  7. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/DEVELOPMENT-ROADMAP.md +137 -12
  8. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/EXECUTIVE-ROADMAP.md +57 -11
  9. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/MANUAL-USUARIO.md +26 -2
  10. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/USER_GUIDE.md +33 -4
  11. {sourcecode-5.9.9 → sourcecode-5.9.11}/pyproject.toml +1 -1
  12. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/access_drift.py +10 -3
  14. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/answer_bounds.py +11 -0
  15. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cache.py +68 -0
  16. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/classifier.py +131 -21
  17. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cli.py +61 -0
  18. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/context_summarizer.py +1 -0
  19. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/java.py +24 -1
  20. sourcecode-5.9.11/src/sourcecode/detectors/jvm_ext.py +134 -0
  21. sourcecode-5.9.11/src/sourcecode/manifest_cache.py +101 -0
  22. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/output_ceiling.py +33 -8
  23. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/phased_run.py +34 -2
  24. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/progress.py +85 -12
  25. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/release_info.py +1 -1
  26. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_event_topology.py +1 -0
  27. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/summarizer.py +2 -0
  28. sourcecode-5.9.9/src/sourcecode/detectors/jvm_ext.py +0 -68
  29. sourcecode-5.9.9/src/sourcecode/manifest_cache.py +0 -63
  30. {sourcecode-5.9.9 → sourcecode-5.9.11}/.github/workflows/build-windows.yml +0 -0
  31. {sourcecode-5.9.9 → sourcecode-5.9.11}/.github/workflows/perf-gate.yml +0 -0
  32. {sourcecode-5.9.9 → sourcecode-5.9.11}/.github/workflows/windows-battery.yml +0 -0
  33. {sourcecode-5.9.9 → sourcecode-5.9.11}/.gitignore +0 -0
  34. {sourcecode-5.9.9 → sourcecode-5.9.11}/.ruff.toml +0 -0
  35. {sourcecode-5.9.9 → sourcecode-5.9.11}/CODE_OF_CONDUCT.md +0 -0
  36. {sourcecode-5.9.9 → sourcecode-5.9.11}/CONTRIBUTING.md +0 -0
  37. {sourcecode-5.9.9 → sourcecode-5.9.11}/LICENSE +0 -0
  38. {sourcecode-5.9.9 → sourcecode-5.9.11}/NOTICE +0 -0
  39. {sourcecode-5.9.9 → sourcecode-5.9.11}/SECURITY.md +0 -0
  40. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  41. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  42. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  43. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  44. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  45. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  46. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  47. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  48. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  49. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  50. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  51. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  52. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  53. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  54. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  55. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  56. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
  57. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  58. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/CACHE.md +0 -0
  59. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/COMMERCIAL-OFFER.md +0 -0
  60. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/CUSTOMER-VALIDATION.md +0 -0
  61. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/DEMO-5MIN.md +0 -0
  62. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  63. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/EXECUTION-PLAN-12MO.md +0 -0
  64. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/MODERNIZATION.md +0 -0
  65. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/PRODUCT-ROUTE.md +0 -0
  66. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/PRODUCT_AUDIT.md +0 -0
  67. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/PRODUCT_IDENTITY.md +0 -0
  68. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/PRODUCT_TIERS.md +0 -0
  69. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/RC1-CHECKLIST.md +0 -0
  70. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/RELEASE-CHECKLIST.md +0 -0
  71. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  72. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  73. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  74. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-assessment-report.md +0 -0
  75. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  76. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  77. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  78. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  79. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  80. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  81. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  82. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  83. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  84. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  85. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  86. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  87. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  88. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  89. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  90. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  91. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  92. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  93. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  94. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  95. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  96. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  97. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0006-performance-harness.md +0 -0
  98. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  99. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  100. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/consumer-disposition-inventory.md +0 -0
  101. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/overview.md +0 -0
  102. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/product-architecture-review.md +0 -0
  103. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/product-strategy-layering.md +0 -0
  104. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  105. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/architecture/semantic-ir-roadmap.md +0 -0
  106. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/baseline-ci.yml +0 -0
  107. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/commercial-pipeline-audit.md +0 -0
  108. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/contracts-ci.yml +0 -0
  109. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/contracts.md +0 -0
  110. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  111. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  112. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  113. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  114. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  115. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  116. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  117. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  118. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/licensing-schema.md +0 -0
  119. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/migrate-check.md +0 -0
  120. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/pack-gate-github-actions.yml +0 -0
  121. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/pack-gate-gitlab.yml +0 -0
  122. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/README.md +0 -0
  123. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/REGRESSION-GATE.md +0 -0
  124. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  125. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  126. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  127. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  128. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  129. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  130. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  131. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  132. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  133. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  134. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  135. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  136. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  137. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  138. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  139. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  140. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  141. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  142. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  143. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  144. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  145. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  146. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  147. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  148. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  149. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  150. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  151. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  152. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  153. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  154. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  155. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  156. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  157. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  158. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  159. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  160. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  161. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  162. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  163. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  164. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  165. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  166. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/README.md +0 -0
  167. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  168. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  169. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  170. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  171. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  172. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  173. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/baselines/reference-best/README.md +0 -0
  174. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  175. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/posture.md +0 -0
  176. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/privacy.md +0 -0
  177. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/pro-experience-audit.md +0 -0
  178. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/schema.md +0 -0
  179. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/spec/envelope-v1.md +0 -0
  180. {sourcecode-5.9.9 → sourcecode-5.9.11}/docs/spring-audit-ci.yml +0 -0
  181. {sourcecode-5.9.9 → sourcecode-5.9.11}/hatch_build.py +0 -0
  182. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/compare_integration_engines.py +0 -0
  183. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/context_cost_harness.py +0 -0
  184. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/customer_smoke_test.sh +0 -0
  185. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/generate_jdk_exports.py +0 -0
  186. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/perf_gate.py +0 -0
  187. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/perf_harness.py +0 -0
  188. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/sync_gate_anchors.py +0 -0
  189. {sourcecode-5.9.9 → sourcecode-5.9.11}/scripts/test_fast.sh +0 -0
  190. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/__main__.py +0 -0
  191. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/adaptive_scanner.py +0 -0
  192. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/analysis_budget.py +0 -0
  193. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/archetype.py +0 -0
  194. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/architectural_baseline.py +0 -0
  195. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/architectural_delta.py +0 -0
  196. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/architecture_analyzer.py +0 -0
  197. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/architecture_summary.py +0 -0
  198. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/ast_extractor.py +0 -0
  199. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/audit_clusters.py +0 -0
  200. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/audit_recipe.py +0 -0
  201. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/audit_report.py +0 -0
  202. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/audit_since.py +0 -0
  203. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/audit_verify.py +0 -0
  204. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/baseline_attestation.py +0 -0
  205. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/baseline_autocapture.py +0 -0
  206. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/breaking_changes.py +0 -0
  207. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/build_modules.py +0 -0
  208. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/build_stamp.py +0 -0
  209. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/bundled_docs.py +0 -0
  210. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/c4_render.py +0 -0
  211. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cache_model.py +0 -0
  212. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cache_observation.py +0 -0
  213. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/call_surface.py +0 -0
  214. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/caller_metrics.py +0 -0
  215. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/caller_reach.py +0 -0
  216. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/canonical_ir.py +0 -0
  217. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/chain_rules.py +0 -0
  218. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/change_plan.py +0 -0
  219. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/ci_output.py +0 -0
  220. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cir_graphs.py +0 -0
  221. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/client_calls.py +0 -0
  222. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/code_notes_analyzer.py +0 -0
  223. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/compare.py +0 -0
  224. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/confidence_analyzer.py +0 -0
  225. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/constraint_diff.py +0 -0
  226. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/consumer_join.py +0 -0
  227. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/container_wiring.py +0 -0
  228. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/context_cache.py +0 -0
  229. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/context_graph.py +0 -0
  230. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/context_scorer.py +0 -0
  231. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/contract_diff.py +0 -0
  232. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/contract_init.py +0 -0
  233. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/contract_model.py +0 -0
  234. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/contract_pipeline.py +0 -0
  235. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/coverage_parser.py +0 -0
  236. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cve_feed.py +0 -0
  237. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/cve_reachability.py +0 -0
  238. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/data_exposure.py +0 -0
  239. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/data_labels.py +0 -0
  240. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/declarations.py +0 -0
  241. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/defect_classes/__init__.py +0 -0
  242. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/defect_classes/registry.json +0 -0
  243. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/defect_identity.py +0 -0
  244. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/degradation.py +0 -0
  245. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/dependency_analyzer.py +0 -0
  246. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/deployment_prefix.py +0 -0
  247. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detach.py +0 -0
  248. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/__init__.py +0 -0
  249. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/base.py +0 -0
  250. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/csproj_parser.py +0 -0
  251. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/dart.py +0 -0
  252. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/dotnet.py +0 -0
  253. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/elixir.py +0 -0
  254. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/go.py +0 -0
  255. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/heuristic.py +0 -0
  256. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/hybrid.py +0 -0
  257. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/nodejs.py +0 -0
  258. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/parsers.py +0 -0
  259. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/php.py +0 -0
  260. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/project.py +0 -0
  261. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/python.py +0 -0
  262. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/ruby.py +0 -0
  263. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/rust.py +0 -0
  264. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/systems.py +0 -0
  265. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/terraform.py +0 -0
  266. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/detectors/tooling.py +0 -0
  267. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/doc_analyzer.py +0 -0
  268. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/dynamic_argument_surface.py +0 -0
  269. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/empty_reach.py +0 -0
  270. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/endpoint_disposition.py +0 -0
  271. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/endpoint_literals.py +0 -0
  272. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/endpoint_metrics.py +0 -0
  273. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/entrypoint_classifier.py +0 -0
  274. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/env_analyzer.py +0 -0
  275. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/envelope.py +0 -0
  276. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/environment_resolution.py +0 -0
  277. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/error_schema.py +0 -0
  278. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/evidence_provider.py +0 -0
  279. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/execution_plan.py +0 -0
  280. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/explain.py +0 -0
  281. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/explain_endpoint.py +0 -0
  282. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/facts/__init__.py +0 -0
  283. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/facts/registry.json +0 -0
  284. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/field_deprecations.py +0 -0
  285. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/file_chunker.py +0 -0
  286. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/file_classifier.py +0 -0
  287. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/filter_surface.py +0 -0
  288. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/findings_baseline.py +0 -0
  289. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/format_contract.py +0 -0
  290. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/fqn_utils.py +0 -0
  291. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/functional_routes.py +0 -0
  292. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/gate_anchors.py +0 -0
  293. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/git_analyzer.py +0 -0
  294. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/git_checkout.py +0 -0
  295. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/github_diff.py +0 -0
  296. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/graph_analyzer.py +0 -0
  297. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/graph_evidence.py +0 -0
  298. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/hibernate_strat.py +0 -0
  299. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/identity_fallback.py +0 -0
  300. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/integration_coordinates.py +0 -0
  301. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/intent_router.py +0 -0
  302. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/jdk_exports.py +0 -0
  303. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/license.py +0 -0
  304. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/__init__.py +0 -0
  305. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/dependency_import.py +0 -0
  306. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  307. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  308. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  309. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  310. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  311. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/orchestrator.py +0 -0
  312. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/registry.py +0 -0
  313. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/runner.py +0 -0
  314. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp/server.py +0 -0
  315. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/mcp_nudge.py +0 -0
  316. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/metrics_analyzer.py +0 -0
  317. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/migrate_check.py +0 -0
  318. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/migration_apply.py +0 -0
  319. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/migration_blast.py +0 -0
  320. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/non_coverage.py +0 -0
  321. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/openapi_surface.py +0 -0
  322. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/openrewrite_recipe.py +0 -0
  323. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/output_bounds.py +0 -0
  324. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/output_budget.py +0 -0
  325. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/output_encoding.py +0 -0
  326. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/output_sink.py +0 -0
  327. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/pack_manifest.py +0 -0
  328. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/packs.py +0 -0
  329. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/parallel.py +0 -0
  330. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/parse_cache.py +0 -0
  331. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/partial_contract.py +0 -0
  332. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/path_admission.py +0 -0
  333. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/path_display.py +0 -0
  334. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/path_filters.py +0 -0
  335. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/perf.py +0 -0
  336. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/pipe_contract.py +0 -0
  337. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/posture.py +0 -0
  338. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/pr_comment_renderer.py +0 -0
  339. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/pr_impact.py +0 -0
  340. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/pr_risk.py +0 -0
  341. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/prepare_context.py +0 -0
  342. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/product_info.py +0 -0
  343. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/provenance.py +0 -0
  344. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/ranking_engine.py +0 -0
  345. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/readiness_timeline.py +0 -0
  346. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/readonly.py +0 -0
  347. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/reconciliation.py +0 -0
  348. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/redactor.py +0 -0
  349. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/reference_facts.py +0 -0
  350. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/regress.py +0 -0
  351. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/regulatory_pack.py +0 -0
  352. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/relevance_scorer.py +0 -0
  353. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/remediation_diff.py +0 -0
  354. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/remediation_flow.py +0 -0
  355. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/remediation_report.py +0 -0
  356. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/remedies.py +0 -0
  357. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/rename_refactor.py +0 -0
  358. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/repo_classifier.py +0 -0
  359. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/repository_ir.py +0 -0
  360. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/resource_budget.py +0 -0
  361. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/__init__.py +0 -0
  362. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/context.py +0 -0
  363. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/errors.py +0 -0
  364. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/executor.py +0 -0
  365. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/planner.py +0 -0
  366. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/query.py +0 -0
  367. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/request.py +0 -0
  368. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/resolution.py +0 -0
  369. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/result.py +0 -0
  370. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/retriever.py +0 -0
  371. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/runtime.py +0 -0
  372. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps.py +0 -0
  373. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  374. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_graph.py +0 -0
  375. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_impact.py +0 -0
  376. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_intf.py +0 -0
  377. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_struct.py +0 -0
  378. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  379. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/ris.py +0 -0
  380. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/risk.py +0 -0
  381. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/risk_model.py +0 -0
  382. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/rule_catalog.py +0 -0
  383. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/rule_pass.py +0 -0
  384. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/runs.py +0 -0
  385. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/runtime_classifier.py +0 -0
  386. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/sarif.py +0 -0
  387. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/sarif_emit.py +0 -0
  388. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/scanner.py +0 -0
  389. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schema.py +0 -0
  390. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schema_producers.py +0 -0
  391. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schema_registry.py +0 -0
  392. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  393. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  394. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  395. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  396. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  397. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  398. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  399. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/security_chain.py +0 -0
  400. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/security_config.py +0 -0
  401. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/security_config_scan.py +0 -0
  402. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/security_posture.py +0 -0
  403. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/selection_contract.py +0 -0
  404. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/self_audit.py +0 -0
  405. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/selftest.py +0 -0
  406. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/semantic_analyzer.py +0 -0
  407. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/semantic_impact_engine.py +0 -0
  408. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/semantic_integration_engine.py +0 -0
  409. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/semantic_services.py +0 -0
  410. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/serializer.py +0 -0
  411. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/servlet_surface.py +0 -0
  412. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/source_text.py +0 -0
  413. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_findings.py +0 -0
  414. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_impact.py +0 -0
  415. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_model.py +0 -0
  416. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_profiles.py +0 -0
  417. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_properties.py +0 -0
  418. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_security_audit.py +0 -0
  419. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_semantic.py +0 -0
  420. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/spring_tx_analyzer.py +0 -0
  421. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/sql_taint.py +0 -0
  422. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/target_admission.py +0 -0
  423. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/__init__.py +0 -0
  424. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/config.py +0 -0
  425. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/consent.py +0 -0
  426. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/events.py +0 -0
  427. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/filters.py +0 -0
  428. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/telemetry/transport.py +0 -0
  429. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/test_gap_ranking.py +0 -0
  430. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/test_sources.py +0 -0
  431. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/text_input.py +0 -0
  432. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/timeline.py +0 -0
  433. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/timeline_cache.py +0 -0
  434. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/token_estimate.py +0 -0
  435. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/tree_utils.py +0 -0
  436. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/type_usage_surface.py +0 -0
  437. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/validation_inference.py +0 -0
  438. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/validation_surface.py +0 -0
  439. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/verify_edit.py +0 -0
  440. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/verify_repo.py +0 -0
  441. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/verify_rules.py +0 -0
  442. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/version_check.py +0 -0
  443. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/vex.py +0 -0
  444. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/waivers.py +0 -0
  445. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/watch_loop.py +0 -0
  446. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/wired_surface.py +0 -0
  447. {sourcecode-5.9.9 → sourcecode-5.9.11}/src/sourcecode/workspace.py +0 -0
  448. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/functions/README.md +0 -0
  449. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/functions/get-license/index.ts +0 -0
  450. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  451. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/functions/telemetry/index.ts +0 -0
  452. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/sql/license_event_ordering.sql +0 -0
  453. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/sql/licensing_schema.sql +0 -0
  454. {sourcecode-5.9.9 → sourcecode-5.9.11}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,77 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.11] — 2026-08-28
4
+
5
+ *`AUD-616` remediation: seven of nine rows closed, two partially, one carried forward.*
6
+
7
+ **Fixed**
8
+
9
+ - A stack's confidence now answers to the source in the tree. A repository of 151
10
+ `.kt` files with zero `.java` files and one `pom.xml` in a subdirectory published
11
+ `stack: java`, `confidence: high`, `primary: true` and headlined itself a Java
12
+ library. `JvmExtDetector` admits on source population as well as manifest
13
+ filename, so a Kotlin repository built with the Groovy DSL is no longer
14
+ invisible; and `TypeClassifier._enrich_stack`, which is the real authority for
15
+ `confidence`, now caps a stack with no source files of its own at `low` and
16
+ floors the tree's largest source population at `medium` against a competing
17
+ manifest-backed claim. (`AUD-616-KOTLIN`)
18
+ - A JVM repository with sources and no application-defining framework classifies as
19
+ `library` rather than `unknown`, whether or not it is multi-module. Module count
20
+ describes a build layout, not whether a repository is a library. Measured over
21
+ thirteen JVM repositories: three change and all three are libraries, ten are
22
+ unchanged. (`AUD-616-JUNIT4-SELF`)
23
+ - The output-ceiling refusal offers `--output FILE` before any `--format`
24
+ substitution, and each substitution states that it re-runs the command and that
25
+ its cost on this repository is unmeasured. The first suggestion was previously
26
+ the one path held open as an availability defect. (`AUD-616-O`)
27
+ - The cache GC no longer evicts the entry the calling run has just written. A core
28
+ larger than the whole store budget was written and deleted inside one process on
29
+ every run, so that repository could never be served from cache and nothing said
30
+ why. `cache status` publishes `size_budget_mb`, `largest_core_bytes` and an
31
+ `over_budget_reason`. (`AUD-616-P`)
32
+ - The delayed liveness warning names the phase, the stage and its counts, how long
33
+ the run has been in that phase, and whether the phase changed since the previous
34
+ warning — the signal that separates a blocked run from a slow one. The in-phase
35
+ clock is the phase's own, not the run's. (`AUD-616-L`)
36
+
37
+ **Added**
38
+
39
+ - The root analysis is a phase runner: `ASK_MAX_ANALYSIS_SECONDS` stops it at a
40
+ measured seam and returns a structured `partial-answer-v1` result naming the
41
+ phases completed and pending, the elapsed time and the budget's provenance,
42
+ instead of nothing at all. It declares `--ci` and `--allow-partial` from the same
43
+ factories every other phase runner uses, and a cut gated run exits 75.
44
+ (`AUD-616-TUTORIALS`)
45
+
46
+ **Performance**
47
+
48
+ - Two repeated walks of the same file tree removed from the detection phase:
49
+ `manifest_cache._key()` ran fourteen recursive globs per call and was called by
50
+ both `load()` and `save()` for each module, and the classifier flattened the tree
51
+ seven times per `enrich`. Measured cold on a 24,073-file monorepo: detection
52
+ 30.3 s → 9.2 s, total 54.9 s → 32.5 s (**×1.69**), payload byte-identical.
53
+
54
+ **Known limits**
55
+
56
+ - The two availability items stay open and are not closed on measurements taken
57
+ here. Neither reproduces on the engineering platform — root compact completes in
58
+ 54.9 s with output, and `audit-report --format markdown` ran 2/2 clean — and both
59
+ were reported against a different build and platform. Independent re-measurement
60
+ there, plus a published repository-size envelope, is the remaining work.
61
+ (`AUD-616-TUTORIALS`, `AUD-616-L`)
62
+ - Windows process-tree cleanup is carried forward untouched: it cannot be
63
+ reproduced or refuted from the engineering platform. (`AUD-616-WIN-PROC`)
64
+
65
+ ## [5.9.10] — 2026-08-27
66
+
67
+ *Release-alignment patch release.*
68
+
69
+ **Release**
70
+
71
+ - Synchronizes package metadata, CLI runtime, README and user-guide version surfaces at `5.9.10`.
72
+ - Carries forward the `5.9.9` documentation and availability guidance.
73
+ - Keeps the `AUD-615` reliability limits explicit pending their independent closure.
74
+
3
75
  ## [5.9.9] — 2026-08-27
4
76
 
5
77
  *Release-alignment patch release.*
@@ -75,8 +75,16 @@ the same command runs on a 3 300-file monolith.
75
75
  not 246 s. `-o addopts=""` is no longer the way to see the count; it now
76
76
  *removes* the parallelism. Override the worker count with `-n <k>`, not by
77
77
  clearing `addopts`.
78
- - **Run one file while you work, the suite before you commit.** Naming the file
79
- is ~2 s; the full run is 70 s. `-k <pattern>` is not the shortcut — it
80
- deselects but still collects all ~9 000 tests, so it floors at 16 s. After a
81
- red run, `--lf` re-runs only what failed.
78
+ - **Run only the tests your change touches. The full suite runs once, at the end
79
+ of a session of modifications not per change, not per commit.** Name the
80
+ files that cover what you edited: ~2 s each. A whole-suite run is 70 s plus the
81
+ wait, and repeating it after every step is the single most expensive habit
82
+ available here — a documentation-only edit never needs one at all (the doc
83
+ batteries `test_ledger_*`, `test_bundled_docs`, `test_integration_docs` are the
84
+ whole obligation). `-k <pattern>` is not the shortcut — it deselects but still
85
+ collects all ~9 000 tests, so it floors at 16 s. After a red run, `--lf`
86
+ re-runs only what failed.
87
+ - **A red the suite already had is not yours to discover twice.** Before treating
88
+ a failure as a regression, check it against `HEAD` (`git stash -u`, run the
89
+ same file, pop). Record pre-existing reds once and move on.
82
90
  - The entry point for local runs is `run_cli.py`, not `python -m sourcecode.cli`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.9
3
+ Version: 5.9.11
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.9-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.11-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -196,14 +196,29 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
196
196
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
197
197
  unset, or set it to `0`, to disable the ceiling explicitly.
198
198
 
199
- **Current performance status.** Release 5.9.9 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.11 retains the shared Canonical IR
200
200
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
201
201
  runs; the no-label path remains parse-free. These are implementation properties,
202
- not duration promises. A controlled external warm-path audit has opened performance
203
- and bounded-output regressions for this release; use `ask cache model <repo>` and
204
- `--progress stderr` for supervised runs, and consult the
205
- [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md) before
206
- treating a historical timing or bounded flag as a current guarantee.
202
+ not duration promises. It also removes two repeated walks of the same file tree in
203
+ the detection phase, measured at **1.69× on a 24,073-file monorepo** 54.9 s to
204
+ 32.5 s cold, with a byte-identical answer. A measurement on one repository and one
205
+ machine is not a duration promise either.
206
+
207
+ The root analysis now stops at `ASK_MAX_ANALYSIS_SECONDS` instead of running past
208
+ it: a spent budget returns a structured partial result naming the phases that
209
+ completed and those that did not, and `--ci` makes a cut run fail the gate with
210
+ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
211
+ message names the phase it is in and whether that phase has changed, so a slow run
212
+ is distinguishable from a blocked one.
213
+
214
+ The current external audit still records two open availability limits, and they
215
+ are held open deliberately: `audit-report --format markdown` under contention, and
216
+ the root compact flow under strict timeouts on very large monorepos. Neither
217
+ reproduces on the engineering platform, so neither is closed on measurements taken
218
+ there. Use `ask cache model <repo>`, `--progress stderr`, `audit-report
219
+ --from-risk` and JSON/YAML output for supervised runs; consult the
220
+ [current reliability queue](docs/DEVELOPMENT-ROADMAP.md#external-audit-intake--aud-616-re-audit-release-5910)
221
+ before treating a historical timing or bounded flag as a current guarantee.
207
222
 
208
223
  **CI delivery and workspace licensing.** `migrate-check --format sarif` emits
209
224
  ASK-owned migration findings with source locations and provenance; it does not
@@ -218,7 +233,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
218
233
  invalid input rather than treated as an empty repository. This prevents silent
219
234
  entitlement errors in CI and does not change per-repository gates or billing.
220
235
 
221
- Release 5.9.9 also carries the boundary-contract hardening: missing consumer repositories,
236
+ Release 5.9.11 also carries the boundary-contract hardening: missing consumer repositories,
222
237
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
223
238
  input errors; duplicate same-commit baselines are never overwritten. `posture
224
239
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -251,7 +266,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
251
266
  # pip / pipx
252
267
  pipx install sourcecode # or: pip install sourcecode
253
268
 
254
- ask version # ask 5.9.9 — and, on a build that has aged,
269
+ ask version # ask 5.9.11 — and, on a build that has aged,
255
270
  # how many releases have probably shipped since
256
271
  ```
257
272
 
@@ -10,7 +10,7 @@
10
10
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
11
11
  > before inspecting a repository whose telemetry policy you need to control.
12
12
 
13
- ![Version](https://img.shields.io/badge/version-5.9.9-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.11-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -147,14 +147,29 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
147
147
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
148
148
  unset, or set it to `0`, to disable the ceiling explicitly.
149
149
 
150
- **Current performance status.** Release 5.9.9 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.11 retains the shared Canonical IR
151
151
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
152
152
  runs; the no-label path remains parse-free. These are implementation properties,
153
- not duration promises. A controlled external warm-path audit has opened performance
154
- and bounded-output regressions for this release; use `ask cache model <repo>` and
155
- `--progress stderr` for supervised runs, and consult the
156
- [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md) before
157
- treating a historical timing or bounded flag as a current guarantee.
153
+ not duration promises. It also removes two repeated walks of the same file tree in
154
+ the detection phase, measured at **1.69× on a 24,073-file monorepo** 54.9 s to
155
+ 32.5 s cold, with a byte-identical answer. A measurement on one repository and one
156
+ machine is not a duration promise either.
157
+
158
+ The root analysis now stops at `ASK_MAX_ANALYSIS_SECONDS` instead of running past
159
+ it: a spent budget returns a structured partial result naming the phases that
160
+ completed and those that did not, and `--ci` makes a cut run fail the gate with
161
+ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
162
+ message names the phase it is in and whether that phase has changed, so a slow run
163
+ is distinguishable from a blocked one.
164
+
165
+ The current external audit still records two open availability limits, and they
166
+ are held open deliberately: `audit-report --format markdown` under contention, and
167
+ the root compact flow under strict timeouts on very large monorepos. Neither
168
+ reproduces on the engineering platform, so neither is closed on measurements taken
169
+ there. Use `ask cache model <repo>`, `--progress stderr`, `audit-report
170
+ --from-risk` and JSON/YAML output for supervised runs; consult the
171
+ [current reliability queue](docs/DEVELOPMENT-ROADMAP.md#external-audit-intake--aud-616-re-audit-release-5910)
172
+ before treating a historical timing or bounded flag as a current guarantee.
158
173
 
159
174
  **CI delivery and workspace licensing.** `migrate-check --format sarif` emits
160
175
  ASK-owned migration findings with source locations and provenance; it does not
@@ -169,7 +184,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
169
184
  invalid input rather than treated as an empty repository. This prevents silent
170
185
  entitlement errors in CI and does not change per-repository gates or billing.
171
186
 
172
- Release 5.9.9 also carries the boundary-contract hardening: missing consumer repositories,
187
+ Release 5.9.11 also carries the boundary-contract hardening: missing consumer repositories,
173
188
  malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
174
189
  input errors; duplicate same-commit baselines are never overwritten. `posture
175
190
  --diff` validates unknown profiles when the repository declares profiles. In
@@ -202,7 +217,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
202
217
  # pip / pipx
203
218
  pipx install sourcecode # or: pip install sourcecode
204
219
 
205
- ask version # ask 5.9.9 — and, on a build that has aged,
220
+ ask version # ask 5.9.11 — and, on a build that has aged,
206
221
  # how many releases have probably shipped since
207
222
  ```
208
223
 
@@ -0,0 +1,169 @@
1
+ # External Audit Intake — ASK 5.9.10
2
+
3
+ **Received:** 2026-08-28
4
+ **Scope:** repositories under `Documents/workspace/testing/` only
5
+ **Evidence base:** direct re-verification of the twelve `AUD-615` items, a robustness
6
+ sweep over six previously unaudited repositories (`ktor-samples`, `spock`,
7
+ `Chronicle-Queue`, `javaee7-samples`, `camel-examples`, `shopizer-v1.1.5`), and five
8
+ parallel forks each using its own scratch directory
9
+ **Queue ID:** `AUD-616`
10
+
11
+ ## Executive disposition
12
+
13
+ The report publishes three headline numbers in sequence — a provisional **8.5/10**, a
14
+ corrected **8.0/10** after the `tutorials` trend datum landed, and **8.1/10** on a second
15
+ rubric that scores per axis. As in `AUD-615`, the ledger records the evidence and the
16
+ closure boundaries, not a headline. **The governing score is the conservative `8.0/10`.**
17
+
18
+ The auditor notes that the installed `5.9.10` build self-declares `"stale": true` (four
19
+ releases have shipped since it was installed) and that the audit deliberately continued
20
+ against the installed build. Every timing below is therefore a property of that artefact.
21
+
22
+ Per-axis movement on the second rubric:
23
+
24
+ | Axis | 5.9.9 | 5.9.10 | Δ | Driver |
25
+ |---|---:|---:|:--:|---|
26
+ | Reliability | 8.0 | 7.7 | ▼ | `audit-report --format markdown` still unbounded; new root-cache readback race |
27
+ | Error quality | 9.0 | 8.8 | ▼ | The `OUTPUT_TOO_LARGE` hint recommends the one format under an open critical row |
28
+ | Help ↔ behaviour coherence | 8.9 | 8.9 | ≈ | `cold-start --compact` unchanged for five rounds |
29
+ | Agent-oriented design | 9.6 | 9.6 | ≈ | No change |
30
+ | Safety / non-destructiveness | 9.1 | 9.1 | ≈ | Orphan processes confirmed, but they do terminate eventually |
31
+ | Semantic consistency between siblings | 7.5 | 8.0 | ▲ | `AUD-615-E` closure holds; the impact family is now uniform |
32
+
33
+ Five clean forks, no target-repository writes, no commits, no modified Java files, no
34
+ artefacts outside `.ask/`. Scratch isolation per fork was applied this round, which is the
35
+ methodology correction `AUD-615` required.
36
+
37
+ ## The regression that governs this round
38
+
39
+ `AUD-616-TUTORIALS` is now the most serious open item in the series, above `L`. Root
40
+ compact on `tutorials` (24,073 Java files) has degraded **monotonically across five
41
+ consecutive releases**, with no exception and no measurement out of order:
42
+
43
+ | Release | Wall time | Result |
44
+ |---|---:|---|
45
+ | 5.9.6 | 4m00.1s | exit 124, 0 bytes stdout |
46
+ | 5.9.7 | 5m11.5s | exit 124, 0 bytes stdout |
47
+ | 5.9.8 | 5m39.6s | exit 124, 0 bytes stdout |
48
+ | 5.9.9 | 6m20.1s | exit 124, 0 bytes stdout |
49
+ | 5.9.10 | 7m00.1s | exit 124, 0 bytes stdout |
50
+
51
+ The process is CPU-active throughout and the delayed progress warnings keep advancing from
52
+ 60 s to 420 s, so this is cost, not a trivial deadlock. Six measurements moving in one
53
+ direction is a trend, not variance: the row is escalated to **critical** and reclassified
54
+ from "availability observation" to **sustained performance regression**. It is also the one
55
+ row where every prior round's remediation work is measurable — and measures worse.
56
+
57
+ ## Accepted defects and regressions
58
+
59
+ | ID | Severity | Finding | Triage |
60
+ |---|---:|---|---|
61
+ | `AUD-616-TUTORIALS` | Critical / sustained regression | Root compact on 24,073 Java files degraded 4m00.1s → 7m00.1s across five releases, always exit 124 with zero stdout. | Open, escalated. Attribute the cost per analysis phase against file and module count, publish a scale contract, and emit a structured partial result or a bounded deadline failure instead of nothing. |
62
+ | `AUD-616-L` | Critical / regression | `audit-report --format markdown` on `thingsboard`: the isolated fork ran 2/2 clean (3m1.4s and 1m49.7s, exit 0, 3,701 bytes both times), while the same report's second block asserts four consecutive versions without a single completion and a repeated heartbeat that never changes stage. | Open, evidence conflicting. Two successes under low load do not close a contention-sensitive defect, and the two blocks of the report contradict each other. Reproduce under deliberate contention, add stage-level progress, and bound the run with a structured failure. |
63
+ | `AUD-616-KOTLIN` | Medium / confident falsehood | `ktor-samples` (151 `.kt`, **0** `.java`) publishes `"stack": "java"`, `"detection_method": "manifest"`, `"confidence": "high"`, `"primary": true`. | Open, new, mechanism verified in source. This is a high-confidence claim with zero supporting source evidence, which the product's own rule forbids. |
64
+ | `AUD-616-O` | Medium | When `audit-report --format json/yaml` exceeds the ceiling, the hint opens with `--format markdown` — the exact path held open as critical by `AUD-616-L`. A caller following the first suggestion gets an unbounded run with no error. | Open, new, deterministic, mechanism verified in source. |
65
+ | `AUD-616-P` | Low-medium / investigation | Root `ask . --compact -f yaml`: run 1 cold 112.2 s `served_from_cache: false` (correct); run 2 immediately after 113.3 s and still `false`; run 3 minutes later 1.1 s and `true`. | Open, 1/1 sample. Distinct from `AUD-612-B03` (which was "the cache is never used"): here the entry is written but not yet visible to a process started immediately afterwards. |
66
+ | `AUD-616-JUNIT4-SELF` | Low-medium / classification | The JUnit4 **framework** repository itself still returns `project_type: unknown`. `AUD-615-JUNIT4` closed the consumer case by design; the repository that *provides* `junit:junit` is not covered. | Open, new row on purpose. The previous closure must not be read as covering this case. |
67
+ | `AUD-616-WIN-PROC` | Medium | 6-7 `ask.exe` processes alive after fast, successful commands with no timeout involved. The auditor then declares the round **inconclusive**: the sample was contaminated by processes from unrelated sessions. New nuance: orphans do exit on their own eventually — one child survived a parent timeout by more than 13 minutes while still writing output. | Open, carried forward. It is late cleanup and non-response to the parent's termination signal, not a permanent leak. |
68
+ | `AUD-616-INTENT-TIE-COV` | Low / coverage | The `AUD-615-INTENT-TIE` reclassification is confirmed coherent, but no regression covers a genuine tie: two intents of the **same** requirement class (both repository-wide, or both target-required) with an identical score. | Open as a coverage gap, not a defect. |
69
+ | `AUD-616-E-PROV` | Low / ledger hygiene | `AUD-614-E` cited three divergent `risk_level` values on not-found paths (`unknown`/`low`/`unknown`). The auditor verified `impact` and `impact-chain` but could never identify which command produced the third, divergent `low`. | Open as a documentation requirement: the ledger row must name the exact command so an external evaluator can re-verify the same case. |
70
+
71
+ ## Source-verified mechanisms
72
+
73
+ Three of the new rows were reproduced against the checkout rather than accepted on the
74
+ report's word:
75
+
76
+ **`AUD-616-KOTLIN`.** `JavaDetector.can_detect` admits on the presence of `pom.xml` or
77
+ `build.gradle` alone (`src/sourcecode/detectors/java.py:136`) and `detect()` then emits
78
+ `StackDetection(stack="java", detection_method="manifest", confidence="high", ...)`
79
+ unconditionally (`src/sourcecode/detectors/java.py:218-222`) — no `.java` population is
80
+ ever consulted. The Kotlin/Scala detector admits only on the *filenames*
81
+ `build.gradle.kts`, `settings.gradle.kts` or `build.sbt`
82
+ (`src/sourcecode/detectors/jvm_ext.py:18-23`), so a Kotlin repository built with the Groovy
83
+ DSL publishes **no Kotlin stack at all** and Java is left unopposed. `select_primary_stack`
84
+ uses source-file volume only as the *last* tiebreaker after priority, confidence and
85
+ manifest weight (`src/sourcecode/classifier.py:117-135`), so 151 `.kt` files could not have
86
+ overturned the decision even if the Kotlin stack had been emitted. The control case is
87
+ consistent with this: `spock` (674 `.java` + 607 `.groovy`) claims Java correctly, because
88
+ there the `.java` population is real.
89
+
90
+ **`AUD-616-JUNIT4-SELF`.** The `test` classification requires the `JUnit 4` framework
91
+ **and** every `.java` path under a test root (`src/sourcecode/classifier.py:283-292`); the
92
+ JUnit4 framework repository has production sources under `src/main/java`, so it falls
93
+ through. The `library` branch immediately above it requires a multi-module layout
94
+ (`src/sourcecode/classifier.py:280`), which a single-module framework repository does not
95
+ have, and the fall-through returns `unknown` (`src/sourcecode/classifier.py:298`). The gap
96
+ is structural, not a missing name heuristic.
97
+
98
+ **`AUD-616-O`.** `_BOUNDING_FORMATS` lists `markdown` first
99
+ (`src/sourcecode/output_ceiling.py:105`) and `ways_out()` appends the bounding formats
100
+ before `--output FILE` and before the `ASK_MAX_OUTPUT_TOKENS=0` bypass
101
+ (`src/sourcecode/output_ceiling.py:588-611`). The ordering rule itself is deliberate and
102
+ correct — bound the same answer first, then ask for less of it. The defect is that the
103
+ recommendation is unconditional on whether the recommended path completes.
104
+
105
+ ## Confirmed stable — do not reopen
106
+
107
+ Reverified in this round with no regression: `AUD-615-F` (6/6 correct exits with stdout to
108
+ `/dev/null`), `AUD-615-RISK-L0` (2.8 s, `analysis_skipped: true`), `AUD-615-SELFTEST-TIMEOUT`
109
+ (exit 75 with a 7.2 KB structured diagnostic), `AUD-615-INTENT-TIE` (behaviour coherent with
110
+ the reclassification), `AUD-615-DRIFT` (default profile normalized), `AUD-615-COLD-COMPACT`
111
+ (size stable across runs), `AUD-615-E` and `AUD-615-07`.
112
+
113
+ `pack gate --since develop` measured 208.6 s, consistent with the 234 s recovery in 5.9.9:
114
+ the four-round upward trend on that command remains broken.
115
+
116
+ The whole earlier closure set — `spring_detected` parity, cross-process cache warming,
117
+ Markdown badge extraction in the root summary, compact endpoint disclosure with
118
+ `population_total`, exit status under stdout redirection, `--files -` empty-list rejection,
119
+ canonical `GIT_REF_NOT_FOUND`, the snapshot-dependent `cold-start --compact` contract,
120
+ `impact-chain` null risk score, `risk --limit 0`, the `selftest --timeout` contract, YAML
121
+ `served_from_cache` coherence and the command-typo suggestion — was re-exercised without a
122
+ single regression.
123
+
124
+ **Size-datum note.** The report records `cold-start --compact` as 14,959-14,960 bytes in one
125
+ block and 88,265-88,266 bytes in another. These are different repositories; no
126
+ reconciliation is claimed, and both are stability evidence within their own subject. The
127
+ one-byte delta is the redirection newline, not a payload change.
128
+
129
+ ## Robustness sweep — six new repositories
130
+
131
+ Five of six behaved correctly and produce no queue rows:
132
+
133
+ - `spock` — 674 Java + 607 Groovy, classified without confusing the two languages.
134
+ - `Chronicle-Queue` — CLI tool, `spring_detected: false`, correct.
135
+ - `javaee7-samples` — classic Java EE, correct.
136
+ - `camel-examples` — 474 dependencies resolved without a crash.
137
+ - `shopizer-v1.1.5` — atypical layout with no root `pom.xml`; `project_type: null` with an
138
+ explicit explanation. Correct by design: the type genuinely cannot be inferred.
139
+
140
+ The sixth, `ktor-samples`, produced `AUD-616-KOTLIN`. This is the first Kotlin subject in
141
+ the series.
142
+
143
+ ## Capability requests derived from this round
144
+
145
+ These are feature requirements the findings imply; they are not defects on their own.
146
+
147
+ 1. **Scale contract with partial output.** Root compact and `audit-report` must publish a
148
+ supported repository-size envelope and, past a deadline, a structured partial result or a
149
+ bounded failure — never zero bytes at exit 124. (`TUTORIALS`, `L`.)
150
+ 2. **Stage-level progress.** The current heartbeat repeats without naming the phase, which is
151
+ what prevented the auditor from separating a block from slowness across four rounds.
152
+ 3. **Source-evidence gate on stack confidence,** plus first-class Kotlin admission from
153
+ `.kt` source volume rather than manifest filename. (`KOTLIN`.)
154
+ 4. **A `library` classification for single-module JVM repositories** with no entry point and
155
+ no web/API framework, so a testing framework is not `unknown`. (`JUNIT4-SELF`.)
156
+ 5. **Availability-aware hint ordering,** or an escape recommendation that reflects whether
157
+ the recommended path is bounded. (`O`.)
158
+ 6. **Windows process-tree cleanup** via Job Objects or a verified equivalent. (`WIN-PROC`.)
159
+ 7. **A regression for a genuine same-class intent tie.** (`INTENT-TIE-COV`.)
160
+
161
+ ## Commercial interpretation
162
+
163
+ The auditor holds the band at **`$25-40/developer/month`** and keeps the standing
164
+ condition: **no large-scale CI gating claim**. The `TUTORIALS` trend strengthens that
165
+ condition rather than relaxing it — a degradation visible across five consecutive releases
166
+ is exactly the evidence an annual reliability commitment cannot be sold against. Do not
167
+ market `audit-report --format markdown`, the root command, or production CI gating for
168
+ repositories above roughly 3,000 files until `AUD-616-TUTORIALS` and `AUD-616-L` are closed
169
+ with bounded, independently reproduced evidence.
@@ -112,11 +112,37 @@ are the current release blockers and contract gaps:
112
112
  | AUD-614-SELFTEST-TIMEOUT | High / contract regression | closed 5.9.8 | `selftest --timeout` is now an overall deadline; each child receives the remaining budget, interrupted/unstarted rows are structured as `error`, and the command returns code 75. The real TeaVM flow and dedicated regression pass. The separate fourth-run hang remains mixed evidence. |
113
113
  | AUD-614-WIN-PROC | Medium | open | Windows/MSYS timeout or SIGTERM can leave `ask.exe` descendants alive, with MSYS PIDs unusable by native `taskkill`. Validate signal handling and Windows Job Objects from native Windows and Git Bash. |
114
114
  | AUD-614-G | Medium | closed 5.9.8 | The shared error authority normalizes legacy producer spellings to canonical uppercase codes (`NO_DIFF_SOURCE`, `INVALID_LICENSE`). TeaVM `review-pr` and activation contract tests pass. |
115
- | AUD-614-E | Low | open | Impact commands now agree on unresolved exit status, but their `risk_level` values still diverge (`unknown`/`low`/`unknown`). Define one not-found payload semantics and enforce parity. |
115
+ | AUD-614-E | Low | closed 5.9.9 | Event topology now publishes `risk_level: unknown` for `not_found`, matching `impact` and normal `impact-chain`; `low` remains a resolved no-risk result. Focused TeaVM coverage protects the parity. |
116
116
  | AUD-614-I | Medium | closed 5.9.8 | The user manual and internal compacting comment no longer promise `~10K`; they state that `cold-start --compact` is snapshot-dependent, expose `estimated_tokens`, and require size validation before direct AI injection. The CLI help and payload already used this contract. A hard ceiling remains optional future scope. |
117
- | AUD-614-INTENT-TIE | Medium | open | Exact lexical ties at score `2.8284` still resolve differently for `endpoint security` and `security surface`. Define deterministic tie/margin semantics and add a real-repository regression. |
117
+ | AUD-614-INTENT-TIE | Medium | closed 5.9.9 (reclassified) | The equal score belongs to different questions, not competing candidates. `endpoint security` selects a target-required intent and correctly refuses without a route; `security surface` is repository-wide and resolves. A focused regression locks the distinction. |
118
118
  | AUD-614-07 | Low | closed 5.9.8 (reverified) | The installed `ask spring-audi` entry point returns `Did you mean: spring-audit?`; the TeaVM path/typo regression battery passes. The external wording report is not reproducible in the current checkout. |
119
- | AUD-614-JUNIT4 | Medium | open | JUnit4 projects remain `project_type: unknown`; add evidence-backed classification without broad heuristic false positives. |
119
+ | AUD-614-JUNIT4 | Medium | closed 5.9.9 | JUnit4 test-only repositories classify as `test` only with the `junit:junit` coordinate and test-only Java sources; ordinary applications/libraries retain their structural type. |
120
+
121
+ **External audit intake `AUD-615`, re-audit of release 5.9.9 — 2026-08-27.** The
122
+ auditor exercised only repositories under `testing/` and added three robustness subjects.
123
+ The report contains conflicting headline scores (8.0 and 8.4), and shared fork scratch
124
+ state invalidated the definitive output capture for the long `audit-report` retest. The
125
+ ledger records the evidence and closure boundaries, not either headline score.
126
+
127
+ | ID | Severity | Status | Evidence / closure boundary |
128
+ |---|---:|---|---|
129
+ | AUD-615-F | Critical | closed 5.9.9 (reverified) | Windows/Git Bash verification confirms 11/11 reproductions: stdout `/dev/null` preserves exit 1 and byte-identical structured stderr, including `INVALID_USAGE` as well as `INVALID_INPUT`. Keep release-artifact coverage. |
130
+ | AUD-615-RISK-L0 | High / regression | closed 5.9.9 (reverified) | `risk --limit 0` completes in about 0.8–1.5 s as `zero_row_view`, with `analysis_skipped: true` and null totals; full analysis is not built for a view that requests no rows. |
131
+ | AUD-615-SELFTEST-TIMEOUT | High / contract regression | closed 5.9.9 (reverified) | `selftest --timeout 5` returns exit 75 and a non-empty structured diagnostic payload, including the fourth attempt in this sample. The independent hang history remains mixed evidence. |
132
+ | AUD-615-L | Critical / regression | open | The defect is isolated to `audit-report --format markdown`: identical `thingsboard` runs measured 200 s timeout versus 137.98 s success, with an isolated 114 s run. JSON/YAML correctly returned structured `OUTPUT_TOO_LARGE`; they are not defective here. The 700 s fork lost output to shared scratch interference. |
133
+ | AUD-615-TUTORIALS | High / availability trend | open | Root compact on `tutorials` increased monotonically from 4m00.1s in 5.9.6 to 6m20.1s in 5.9.9, exit 124 with zero stdout. Attribute and bound the cost before large-monorepo claims. |
134
+ | AUD-615-WIN-PROC | Medium | open | Seven `ask.exe` processes remained after successful Windows runs. Validate descendant cleanup for successful and timed-out runs with native Windows/Git Bash process controls. |
135
+ | AUD-615-INTENT-TIE | Medium | closed 5.9.9 (reclassified) | Equal score across distinct questions is not a tie. The target-required endpoint intent refuses without a route while the global surface intent resolves; a focused regression protects that contract. |
136
+ | AUD-615-E | Low | closed 5.9.9 | All impact-family not-found paths publish `risk_level: unknown`; focused TeaVM coverage protects the former event-topology outlier. |
137
+ | AUD-615-07 | Low / evidence conflict | closed 5.9.9 (reverified) | Isolated TeaVM verification returns `Did you mean: spring-audit?` with exit 2, matching the installed-entry-point regression. The contrary report wording is not reproducible. |
138
+ | AUD-615-JUNIT4 | Medium | closed 5.9.9 | JUnit4 test-only repositories classify as `test` from dependency and source-location evidence, without a broad naming heuristic. |
139
+ | AUD-615-DRIFT | Low / investigation | closed 5.9.9 | Spring's explicit `default` profile is normalized to the implicit empty active-profile set at the access-snapshot boundary. An implicit capture and explicit `--profile default` now read one series; focused and TeaVM regression flows pass. |
140
+ | AUD-615-COLD-COMPACT | Low / product decision | closed 5.9.9 (accepted contract) | A repeated 88,265-byte result is compatible with the documented snapshot-dependent contract. ASK exposes `estimated_tokens`; no hard ceiling is claimed or introduced. |
141
+
142
+ **Audit-method control:** each parallel fork must use a unique scratch directory; shared
143
+ `~/askaudit_599` caused cross-fork file deletion/interleaving and blocked a definitive L
144
+ result. **Commercially**, conflicting `$25-40` and `$50-65` estimates are not evidence for
145
+ a price increase; retain the conservative band until the availability trend is closed.
120
146
 
121
147
  The audit also confirms root cache reuse, stdin contracts, pack progress, explain and
122
148
  impact error routing, self-audit population disclosure, endpoint compact disclosure,
@@ -124,6 +150,83 @@ Spring detection controls, baseline safety and the prior `/dev/null` fix matrix.
124
150
  intermittent endpoint-security retrieval issue had 0/18 failures in this pass and stays
125
151
  under observation because its historical rate is about 2% over 51 runs.
126
152
 
153
+ **External audit intake `AUD-616`, re-audit of release 5.9.10 — 2026-08-28.** The scope was
154
+ again restricted to `testing/`, with direct re-verification of all twelve `AUD-615` items, a
155
+ robustness sweep over six previously unaudited repositories and five parallel forks, each
156
+ with its own scratch directory — the methodology control `AUD-615` required is now applied.
157
+ The report publishes three headline numbers (8.5 provisional, 8.0 corrected, 8.1 on a
158
+ per-axis rubric); **the governing score is the conservative 8.0/10**, and as before the rows
159
+ below record evidence, not a headline. The installed artefact self-declares `"stale": true`;
160
+ the auditor continued against it deliberately, so every timing is a property of that build.
161
+ No target-repository writes, commits or Java-file changes were reported.
162
+
163
+ The governing item of this round is the `tutorials` trend: five consecutive releases, each
164
+ slower than the last, with no measurement out of order. It is escalated to critical and
165
+ reclassified from an availability observation to a sustained performance regression.
166
+
167
+ **Verdict on the round (5.9.11).** Seven of the nine rows are closed, two are partially
168
+ closed and one — `WIN-PROC` — is carried forward as not actionable from a Darwin checkout.
169
+ The two critical rows are the two partial ones, and both for the same reason, stated plainly
170
+ because it changes what a future round should measure: **neither timing symptom reproduces
171
+ in this checkout.** Root `--compact` on `tutorials` completes in 54.9 s, exit 0, 15 KB, and
172
+ `audit-report --format markdown` on `thingsboard` ran 2/2 clean at 39.3 s and 26.8 s. The
173
+ 4m00→7m00 trend and the four-round non-completion are properties of the auditor's build and
174
+ platform, and re-measurement there is the outstanding work on both rows.
175
+
176
+ What was done instead of accepting or dismissing them was to attribute the cost and remove
177
+ the silence. The cost is now published per phase against file count, and two mechanisms
178
+ behind it are closed with a measured **×1.69** on the governing subject — detection 30.3 s →
179
+ 9.2 s, total 54.9 s → 32.5 s, payload byte-identical. The silence is closed at both ends: the
180
+ root analysis stops at `ASK_MAX_ANALYSIS_SECONDS` and returns a structured partial envelope
181
+ with a gate verdict instead of zero bytes at exit 124, and the delayed liveness warning names
182
+ the phase, its counts and whether it has changed — the one signal that separates a blocked
183
+ run from a slow one, and the one four consecutive rounds did not have.
184
+
185
+ Three findings of this round belong to the checkout rather than to the report, and are
186
+ recorded so they are not re-derived. `AUD-616-P`'s race did not reproduce serialized, and the
187
+ double miss reproduced here first was **our own concurrency** — the same contamination
188
+ `AUD-615` had to correct for; a deterministic mechanism with the identical symptom was found
189
+ underneath it and fixed. `AUD-616-JUNIT4-SELF`'s filed remedy would not have closed the row —
190
+ JUnit4 has three `main()`-bearing entry points, so "no entry point" was the wrong condition.
191
+ And the root analysis joining the bounded tier exposed three batteries comparing the two
192
+ command-name vocabularies as raw strings, or walking only to command leaves; each now goes
193
+ through the authority that already reconciles them.
194
+
195
+ | ID | Severity | Status | Evidence and required closure |
196
+ |---|---:|---|---|
197
+ | AUD-616-TUTORIALS | Critical / sustained regression | partially closed 5.9.11 — perf attributed and bounded; the reported trend does not reproduce here | **Not reproducible as filed on this platform.** Root `--compact` on `tutorials` (24,073 Java files) completes in 54.9 s, exit 0, 15 KB, four serialized cold runs (54.9 / 52.7 / 53.5 / 57.9, max/min 1.10). The report's 4m00→7m00 with exit 124 is a property of the auditor's build and platform, not of this checkout. What was verified and fixed instead is the cost and the silence. **Cost, attributed per phase against file count** (`SOURCECODE_PERF`): discovery 3.5 s, detection 30.3 s, analysis 13.4 s, serialize 6.0 s. Two mechanisms found by cProfile and closed: `manifest_cache._key()` ran fourteen `rglob` walks per call and was called by both `load()` and `save()` for each of 246 modules (1.5 M `posix.scandir` calls, 26 s) — now one `os.walk`, memoised per root, digest unchanged and asserted against the fourteen calls it replaces; and `TypeClassifier` walked the file tree seven times per `enrich` × 246 modules — now once, threaded. **Measured: detection 30.3 → 9.2 s, total 54.9 → 32.5 s (×1.69), payload byte-identical, max/min 1.003.** **Silence, closed:** the root analysis is a `PhasedRun` over the four `perf` seams, so `ASK_MAX_ANALYSIS_SECONDS` bounds it and a spent budget emits the `partial-answer-v1` envelope — phases completed and pending, elapsed, budget and its provenance — instead of zero bytes. It declares `--ci`/`--allow-partial` and exits 75 on a cut gated run. **Still open:** a published repository-size envelope (the scale contract), and re-measurement on the auditor's platform. |
198
+ | AUD-616-L | Critical / regression | partially closed 5.9.11 — stage-level progress shipped; the unbounded run does not reproduce | **Not reproducible as filed here.** `audit-report --format markdown` on `thingsboard` ran 2/2 clean: exit 0, 3,662 bytes both times, 39.3 s and 26.8 s — consistent with the audit's own isolated fork (3m1.4s, 1m49.7s, 3,701 bytes) and nowhere near a timeout. The **bounded structured failure** the row asks for is already shipped and verified: the command is a `PhasedRun`, and under `ASK_MAX_ANALYSIS_SECONDS=1` it returns a report declaring `Status: partial` and `Total defects: 0 (floor — this run was cut short)`. **The heartbeat half was a real defect and is fixed.** The delayed warning read `run has exceeded 5.0m; still working` and repeated that sentence unchanged for the life of the run — identical at 60 s and 420 s, which is why four rounds could not separate a blocked run from a slow one: a blocked process is also still alive. It now names the phase, the stage and its counts, how long the run has been in that phase, and whether the phase changed since the previous warning. Writing it surfaced a second defect: the first version read `_stage_t0`, which only restarts on a *counted* stage change, and published `parsing manifests for 21.1s` about a phase entered at 3 s — the run's elapsed time under a label claiming to be the phase's. A phase clock now exists separately from the counted-stage clock `_eta_seconds` uses. **Still open:** reproduction under deliberate contention on the auditor's platform. |
199
+ | AUD-616-KOTLIN | Medium / confident falsehood | closed 5.9.11 | Reproduced exactly, then closed at both ends. `JvmExtDetector` also admits on source population now, with the sibling `.java` count as the bar rather than an absolute number, so a Kotlin repository on the Groovy DSL — or with no root build file, which is `ktor-samples` — surfaces a Kotlin stack, while a Java monolith carrying three `.kt` tests does not. Admission by source publishes `detection_method: heuristic`, no `manifests` and no `package_manager`: a build file was not read, so nothing only a build file attests is claimed. The real authority for `confidence` was `TypeClassifier._enrich_stack`, which recomputes what the detector published from a score summing *declarations* and gives the source population one point whether there are two files or twenty thousand; both ends are corrected there, once, for every stack with a source extension — zero source files caps at `low` with a `no_source_evidence` signal, and owning the largest source population against a competing manifest-backed claim floors at `medium`. `ktor-samples` now reports `kotlin` primary at `medium`, `java` at `low`, and headlines "Kotlin library / package". Controls re-measured unchanged: `spring-security`, `shenyu`, `thingsboard` keep `java` primary at `high`. |
200
+ | AUD-616-O | Medium | closed 5.9.11 | `--output FILE` moves ahead of the format substitutions, and each substitution now states in its own text that it re-runs the command and that its cost on this repository is unmeasured. The module's ordering rule is unchanged and was not the defect; the reading of "the same answer" was. A bounding flag and `--output FILE` keep the rendering that has already run to completion here — that run is why the refusal has a size to report at all — while a different `--format` is a different composition this module has measured nothing about. The bypass stays last, the file destination is untouched, and the population is still the intersection of `FORMAT_REGISTRY` with the command's declared options, so nothing branches on a command name. |
201
+ | AUD-616-P | Low-medium / investigation | closed 5.9.11 — race not reproduced, a deterministic mechanism with the same symptom fixed | **The race does not reproduce serialized.** On `tutorials`, store cleared first, four sequential runs: 82.1 s cold and `false`, then 1.58 / 1.48 / 1.47 s, all `true`. A double miss was reproduced here first and then attributed to two `ask` processes analysing the repository at once — runs against one repository share `~/.sourcecode/cache/<repo_id>/` whatever scratch directory they are given, so per-fork scratch isolation does not separate them. **A deterministic mechanism with the same symptom did reproduce and is fixed.** The GC's size pass sorted candidates oldest-first and could walk to the end of that list, and the end of it is the entry the calling run has just written: a core larger than the whole store budget was written and deleted inside one process, on every run, for ever. It is reachable at this scale rather than hypothetically — `tutorials` stores a 9.4 MB core against a 50 MB default. The newest core is no longer a candidate; everything older still is. When the newest entry alone exceeds the budget the store stays over budget, and `cache.status()` publishes `size_budget_mb`, `largest_core_bytes` and an `over_budget_reason` naming the variable to raise. |
202
+ | AUD-616-JUNIT4-SELF | Low-medium / classification | closed 5.9.11 | **One correction to the remedy as filed:** it proposed classifying single-module JVM repositories "with no entry point", and JUnit4 has three — `TestRunner`, `JUnitCore` and `Version` each carry a `main()` — so that condition would have left the row open. The multi-module requirement was what was doing the wrong work: module count describes a build layout, not whether a repository is a library, and it was in the branch only because the row that introduced it (JobRunr) happened to be multi-module. By the time control reaches that point every stronger reading has been ruled out by the branches above, so what is left is a JVM repository with sources and no application-defining framework — the same inference the multi-module branch already makes. Measured over thirteen JVM repositories before and after: three change and all three are libraries (`junit4`, `mybatis-3`, `Mybatis-PageHelper`, each `unknown` → `library`); the other ten are byte-identical. A repository with no detected stack still publishes no type, which is the `shopizer` case confirmed correct by design. |
203
+ | AUD-616-WIN-PROC | Medium | open, carried forward — not actionable on this platform | Unchanged from `AUD-614-WIN-PROC` and `AUD-615-WIN-PROC`. The subject is native Windows process-tree teardown and the auditor's own sample was declared inconclusive (contaminated by unrelated sessions). Nothing in this round can be reproduced or refuted from a Darwin checkout, and shipping a Job Objects path that no test here can exercise would be a change made blind. It needs a native Windows/Git Bash run, and the narrowed reading stands: late cleanup and non-response to the parent's termination signal, not a permanent leak. |
204
+ | AUD-616-INTENT-TIE-COV | Low / coverage | closed 5.9.11 | Behaviour was already correct and nothing held it there. Both sides are covered now, with the tying questions derived from the shipped vocabulary rather than invented: `central classes deployment shape` ties two repository-wide intents at 2.8284, and `what endpoints break cross module impact` ties two target-required ones at 5.1962. Each refuses, names both candidates and the reason, offers no command, and reports no intent — so no consumer reads the rest of the payload as describing a losing candidate. A first test asserts the fixtures still tie, so a vocabulary change that destroys the tie fails the test depending on it instead of passing vacuously; a second asserts both candidates really are of one requirement class, without which the battery would silently become another copy of the rows it complements. |
205
+ | AUD-616-E-PROV | Low / ledger hygiene | closed 5.9.11 | **The command is `ask impact-chain <EventClass> <repo> --type events`** — the event-topology query, a third sibling of `impact` and `impact-chain` and the one the re-audit could not identify. `EventTopologyResult` declares `risk_level: str = "low"` as its dataclass default and the `not_found` branch returned the result without overriding it, so a class absent from the CIR was published as a resolved low-risk answer while its two siblings said `unknown`. The value was corrected in 5.9.9; what nothing covered is the **parity** — three commands, three code paths, one question, and no test that fails when one drifts again. A battery now runs all three through the CLI on a repository, the way an external evaluator would, and asserts they agree. Re-verified: all three publish `resolution: not_found` and `risk_level: unknown`. |
206
+ | AUD-616-F, -RISK-L0, -SELFTEST-TIMEOUT, -INTENT-TIE, -DRIFT, -COLD-COMPACT, -E, -07 | — | closed 5.9.9 (reverified in 5.9.10) | 6/6 correct exits with stdout to `/dev/null`; `risk --limit 0` in 2.8 s with `analysis_skipped: true`; `selftest --timeout` exit 75 with a 7.2 KB structured diagnostic; intent behaviour coherent with the reclassification; `drift` default profile normalized; `cold-start --compact` size stable across repeated runs. No regression in any of them. |
207
+
208
+ **Size-datum note.** The report records `cold-start --compact` as 14,959-14,960 bytes in one
209
+ block and 88,265-88,266 bytes in another. Different repositories; no reconciliation is
210
+ claimed, and the one-byte delta is the redirection newline, not a payload change.
211
+
212
+ **Robustness sweep.** Five of six new repositories behaved correctly and open no row:
213
+ `spock` (674 Java + 607 Groovy, languages not confused), `Chronicle-Queue` (CLI tool,
214
+ `spring_detected: false`), `javaee7-samples` (classic Java EE), `camel-examples` (474
215
+ dependencies, no crash) and `shopizer-v1.1.5` (no root `pom.xml`, `project_type: null` with
216
+ an explicit explanation — correct by design, the type genuinely cannot be inferred). The
217
+ sixth, `ktor-samples`, is the first Kotlin subject in the series and opened `AUD-616-KOTLIN`.
218
+
219
+ **Also stable.** `pack gate --since develop` measured 208.6 s, consistent with the 234 s
220
+ recovery in 5.9.9: the four-round upward trend on that command remains broken. The full
221
+ earlier closure set was re-exercised without a single regression.
222
+
223
+ **Commercially**, the band stays `$25-40/developer/month` with the standing no-large-scale
224
+ CI-gating condition. The `TUTORIALS` trend strengthens that condition rather than relaxing
225
+ it: a degradation visible across five consecutive releases is precisely the evidence an
226
+ annual reliability commitment cannot be sold against. Full triage is in
227
+ [`AUDIT-2026-08-28-EXTERNAL-5.9.10.md`](AUDIT-2026-08-28-EXTERNAL-5.9.10.md).
228
+
229
+
127
230
  **Commercial boundary.** The corrected assessment is `$25-40/developer/month`, not the
128
231
  initial `$45-58` headline. Do not market enterprise-scale support or production CI
129
232
  gating for repositories above roughly 3,000 files until the four critical/high