sourcecode 5.7.2__tar.gz → 5.8.1__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 (363) hide show
  1. {sourcecode-5.7.2 → sourcecode-5.8.1}/CHANGELOG.md +261 -0
  2. {sourcecode-5.7.2 → sourcecode-5.8.1}/CLAUDE.md +10 -2
  3. {sourcecode-5.7.2 → sourcecode-5.8.1}/PKG-INFO +5 -3
  4. {sourcecode-5.7.2 → sourcecode-5.8.1}/README.md +3 -2
  5. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/CACHE.md +1 -1
  6. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/DEFECT-LEDGER.md +55 -20
  7. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/DEVELOPMENT-ROADMAP.md +370 -1
  8. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/USER_GUIDE.md +1 -1
  9. {sourcecode-5.7.2 → sourcecode-5.8.1}/pyproject.toml +12 -2
  10. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/__init__.py +1 -1
  11. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/archetype.py +8 -1
  12. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/audit_report.py +31 -3
  13. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/cache_model.py +5 -3
  14. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/canonical_ir.py +13 -1
  15. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/change_plan.py +7 -0
  16. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/cir_graphs.py +67 -0
  17. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/cli.py +237 -144
  18. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/container_wiring.py +226 -17
  19. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/contract_diff.py +6 -1
  20. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/java.py +7 -1
  21. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/explain.py +46 -0
  22. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/integration_coordinates.py +109 -1
  23. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/non_coverage.py +31 -0
  24. sourcecode-5.8.1/src/sourcecode/output_bounds.py +194 -0
  25. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/output_ceiling.py +62 -9
  26. sourcecode-5.8.1/src/sourcecode/output_sink.py +230 -0
  27. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/parallel.py +6 -2
  28. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/parse_cache.py +132 -9
  29. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/phased_run.py +19 -8
  30. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/posture.py +138 -28
  31. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/pr_impact.py +52 -1
  32. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/reconciliation.py +33 -0
  33. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/repository_ir.py +969 -79
  34. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/risk.py +13 -1
  35. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/risk_model.py +35 -0
  36. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/security_posture.py +27 -7
  37. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/semantic_integration_engine.py +33 -0
  38. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/serializer.py +9 -2
  39. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_impact.py +24 -6
  40. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_model.py +19 -0
  41. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_tx_analyzer.py +8 -0
  42. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/verify_edit.py +49 -0
  43. sourcecode-5.7.2/raw +0 -0
  44. {sourcecode-5.7.2 → sourcecode-5.8.1}/.github/workflows/build-windows.yml +0 -0
  45. {sourcecode-5.7.2 → sourcecode-5.8.1}/.github/workflows/perf-gate.yml +0 -0
  46. {sourcecode-5.7.2 → sourcecode-5.8.1}/.gitignore +0 -0
  47. {sourcecode-5.7.2 → sourcecode-5.8.1}/.ruff.toml +0 -0
  48. {sourcecode-5.7.2 → sourcecode-5.8.1}/CONTRIBUTING.md +0 -0
  49. {sourcecode-5.7.2 → sourcecode-5.8.1}/LICENSE +0 -0
  50. {sourcecode-5.7.2 → sourcecode-5.8.1}/NOTICE +0 -0
  51. {sourcecode-5.7.2 → sourcecode-5.8.1}/SECURITY.md +0 -0
  52. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/COMMERCIAL-OFFER.md +0 -0
  53. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/CUSTOMER-VALIDATION.md +0 -0
  54. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/DEMO-5MIN.md +0 -0
  55. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/EXECUTION-PLAN-12MO.md +0 -0
  56. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/EXECUTIVE-ROADMAP.md +0 -0
  57. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/MANUAL-USUARIO.md +0 -0
  58. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/MODERNIZATION.md +0 -0
  59. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/PRODUCT_AUDIT.md +0 -0
  60. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/PRODUCT_IDENTITY.md +0 -0
  61. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/PRODUCT_TIERS.md +0 -0
  62. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/RC1-CHECKLIST.md +0 -0
  63. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/RELEASE-CHECKLIST.md +0 -0
  64. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  65. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  66. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  67. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  68. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  69. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  70. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  71. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  72. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  73. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  74. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  75. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  76. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  77. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  78. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  79. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  80. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  81. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  82. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  83. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0006-performance-harness.md +0 -0
  84. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  85. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  86. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/consumer-disposition-inventory.md +0 -0
  87. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/overview.md +0 -0
  88. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/product-architecture-review.md +0 -0
  89. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/product-strategy-layering.md +0 -0
  90. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  91. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/architecture/semantic-ir-roadmap.md +0 -0
  92. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/baseline-ci.yml +0 -0
  93. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/commercial-pipeline-audit.md +0 -0
  94. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/contracts-ci.yml +0 -0
  95. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/contracts.md +0 -0
  96. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  97. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  98. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  99. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  100. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  101. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  102. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  103. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  104. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/licensing-schema.md +0 -0
  105. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/migrate-check.md +0 -0
  106. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/README.md +0 -0
  107. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/REGRESSION-GATE.md +0 -0
  108. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  109. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  110. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  111. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  112. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  113. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  114. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  115. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  116. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  117. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  118. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  119. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  120. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  121. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  122. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  123. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  124. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  125. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  126. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  127. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  128. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  129. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  130. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  131. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  132. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  133. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  134. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  135. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  136. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  137. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  138. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  139. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  140. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  141. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  142. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  143. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  144. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  145. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  146. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  147. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  148. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  149. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  150. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/README.md +0 -0
  151. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  152. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  153. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  154. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  155. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  156. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  157. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/perf/baselines/reference-best/README.md +0 -0
  158. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/posture.md +0 -0
  159. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/privacy.md +0 -0
  160. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/pro-experience-audit.md +0 -0
  161. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/schema.md +0 -0
  162. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/spec/envelope-v1.md +0 -0
  163. {sourcecode-5.7.2 → sourcecode-5.8.1}/docs/spring-audit-ci.yml +0 -0
  164. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/compare_integration_engines.py +0 -0
  165. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/customer_smoke_test.sh +0 -0
  166. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/generate_jdk_exports.py +0 -0
  167. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/perf_gate.py +0 -0
  168. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/perf_harness.py +0 -0
  169. {sourcecode-5.7.2 → sourcecode-5.8.1}/scripts/sync_gate_anchors.py +0 -0
  170. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/adaptive_scanner.py +0 -0
  171. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/architectural_baseline.py +0 -0
  172. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/architectural_delta.py +0 -0
  173. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/architecture_analyzer.py +0 -0
  174. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/architecture_summary.py +0 -0
  175. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/ast_extractor.py +0 -0
  176. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/baseline_autocapture.py +0 -0
  177. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/bundled_docs.py +0 -0
  178. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/cache.py +0 -0
  179. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/call_surface.py +0 -0
  180. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/caller_metrics.py +0 -0
  181. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/caller_reach.py +0 -0
  182. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/chain_rules.py +0 -0
  183. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/classifier.py +0 -0
  184. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/client_calls.py +0 -0
  185. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/code_notes_analyzer.py +0 -0
  186. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/compare.py +0 -0
  187. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/confidence_analyzer.py +0 -0
  188. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/constraint_diff.py +0 -0
  189. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/consumer_join.py +0 -0
  190. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/context_cache.py +0 -0
  191. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/context_graph.py +0 -0
  192. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/context_scorer.py +0 -0
  193. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/context_summarizer.py +0 -0
  194. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/contract_init.py +0 -0
  195. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/contract_model.py +0 -0
  196. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/contract_pipeline.py +0 -0
  197. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/coverage_parser.py +0 -0
  198. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/data_exposure.py +0 -0
  199. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/data_labels.py +0 -0
  200. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/declarations.py +0 -0
  201. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/defect_identity.py +0 -0
  202. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/degradation.py +0 -0
  203. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/dependency_analyzer.py +0 -0
  204. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/deployment_prefix.py +0 -0
  205. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detach.py +0 -0
  206. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/__init__.py +0 -0
  207. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/base.py +0 -0
  208. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/csproj_parser.py +0 -0
  209. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/dart.py +0 -0
  210. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/dotnet.py +0 -0
  211. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/elixir.py +0 -0
  212. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/go.py +0 -0
  213. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/heuristic.py +0 -0
  214. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/hybrid.py +0 -0
  215. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/jvm_ext.py +0 -0
  216. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/nodejs.py +0 -0
  217. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/parsers.py +0 -0
  218. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/php.py +0 -0
  219. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/project.py +0 -0
  220. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/python.py +0 -0
  221. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/ruby.py +0 -0
  222. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/rust.py +0 -0
  223. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/systems.py +0 -0
  224. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/terraform.py +0 -0
  225. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/detectors/tooling.py +0 -0
  226. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/doc_analyzer.py +0 -0
  227. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/dynamic_argument_surface.py +0 -0
  228. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/endpoint_literals.py +0 -0
  229. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/endpoint_metrics.py +0 -0
  230. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/entrypoint_classifier.py +0 -0
  231. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/env_analyzer.py +0 -0
  232. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/envelope.py +0 -0
  233. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/environment_resolution.py +0 -0
  234. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/error_schema.py +0 -0
  235. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/evidence_provider.py +0 -0
  236. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/execution_plan.py +0 -0
  237. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/facts/__init__.py +0 -0
  238. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/facts/registry.json +0 -0
  239. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/file_chunker.py +0 -0
  240. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/file_classifier.py +0 -0
  241. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/filter_surface.py +0 -0
  242. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/format_contract.py +0 -0
  243. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/fqn_utils.py +0 -0
  244. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/gate_anchors.py +0 -0
  245. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/git_analyzer.py +0 -0
  246. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/git_checkout.py +0 -0
  247. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/graph_analyzer.py +0 -0
  248. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/graph_evidence.py +0 -0
  249. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/hibernate_strat.py +0 -0
  250. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/identity_fallback.py +0 -0
  251. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/jdk_exports.py +0 -0
  252. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/license.py +0 -0
  253. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/manifest_cache.py +0 -0
  254. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/__init__.py +0 -0
  255. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/dependency_import.py +0 -0
  256. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  257. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  258. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  259. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  260. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  261. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/orchestrator.py +0 -0
  262. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/registry.py +0 -0
  263. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/runner.py +0 -0
  264. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp/server.py +0 -0
  265. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/mcp_nudge.py +0 -0
  266. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/metrics_analyzer.py +0 -0
  267. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/migrate_check.py +0 -0
  268. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/migration_blast.py +0 -0
  269. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/openapi_surface.py +0 -0
  270. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/openrewrite_recipe.py +0 -0
  271. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/output_budget.py +0 -0
  272. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/output_encoding.py +0 -0
  273. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/partial_contract.py +0 -0
  274. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/path_admission.py +0 -0
  275. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/path_filters.py +0 -0
  276. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/perf.py +0 -0
  277. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/pipe_contract.py +0 -0
  278. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/pr_comment_renderer.py +0 -0
  279. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/prepare_context.py +0 -0
  280. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/product_info.py +0 -0
  281. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/progress.py +0 -0
  282. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/provenance.py +0 -0
  283. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/ranking_engine.py +0 -0
  284. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/readiness_timeline.py +0 -0
  285. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/readonly.py +0 -0
  286. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/redactor.py +0 -0
  287. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/reference_facts.py +0 -0
  288. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/release_info.py +0 -0
  289. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/relevance_scorer.py +0 -0
  290. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/remedies.py +0 -0
  291. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/rename_refactor.py +0 -0
  292. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/repo_classifier.py +0 -0
  293. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/__init__.py +0 -0
  294. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/context.py +0 -0
  295. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/errors.py +0 -0
  296. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/executor.py +0 -0
  297. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/planner.py +0 -0
  298. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/query.py +0 -0
  299. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/request.py +0 -0
  300. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/resolution.py +0 -0
  301. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/result.py +0 -0
  302. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/retriever.py +0 -0
  303. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/runtime.py +0 -0
  304. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps.py +0 -0
  305. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  306. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_graph.py +0 -0
  307. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_impact.py +0 -0
  308. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_intf.py +0 -0
  309. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_struct.py +0 -0
  310. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  311. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/ris.py +0 -0
  312. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/rule_catalog.py +0 -0
  313. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/rule_pass.py +0 -0
  314. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/runs.py +0 -0
  315. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/runtime_classifier.py +0 -0
  316. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/sarif.py +0 -0
  317. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/scanner.py +0 -0
  318. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/schema.py +0 -0
  319. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  320. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/security_chain.py +0 -0
  321. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/security_config.py +0 -0
  322. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/security_config_scan.py +0 -0
  323. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/semantic_analyzer.py +0 -0
  324. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/semantic_impact_engine.py +0 -0
  325. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/semantic_services.py +0 -0
  326. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/servlet_surface.py +0 -0
  327. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/source_text.py +0 -0
  328. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_event_topology.py +0 -0
  329. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_findings.py +0 -0
  330. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_profiles.py +0 -0
  331. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_properties.py +0 -0
  332. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_security_audit.py +0 -0
  333. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/spring_semantic.py +0 -0
  334. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/sql_taint.py +0 -0
  335. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/summarizer.py +0 -0
  336. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/target_admission.py +0 -0
  337. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/__init__.py +0 -0
  338. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/config.py +0 -0
  339. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/consent.py +0 -0
  340. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/events.py +0 -0
  341. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/filters.py +0 -0
  342. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/telemetry/transport.py +0 -0
  343. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/test_gap_ranking.py +0 -0
  344. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/test_sources.py +0 -0
  345. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/text_input.py +0 -0
  346. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/timeline.py +0 -0
  347. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/token_estimate.py +0 -0
  348. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/tree_utils.py +0 -0
  349. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/type_usage_surface.py +0 -0
  350. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/validation_inference.py +0 -0
  351. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/validation_surface.py +0 -0
  352. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/verify_repo.py +0 -0
  353. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/verify_rules.py +0 -0
  354. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/version_check.py +0 -0
  355. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/waivers.py +0 -0
  356. {sourcecode-5.7.2 → sourcecode-5.8.1}/src/sourcecode/workspace.py +0 -0
  357. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/functions/README.md +0 -0
  358. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/functions/get-license/index.ts +0 -0
  359. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  360. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/functions/telemetry/index.ts +0 -0
  361. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/sql/license_event_ordering.sql +0 -0
  362. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/sql/licensing_schema.sql +0 -0
  363. {sourcecode-5.7.2 → sourcecode-5.8.1}/supabase/sql/telemetry_events.sql +0 -0
@@ -2,6 +2,267 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.8.1] — 2026-08-17
6
+
7
+ *Ten rows from the two 5.8.0 re-audits, closed one commit at a time. The theme
8
+ is not the engine: of the ten, **three were analysis defects and seven were the
9
+ payload failing to say what the analysis already knew** — a population that
10
+ moved with no field to explain it, two empty lists beside two full builds, a
11
+ census naming production trees as excluded, a compact view that dropped its own
12
+ identity, a tier that read as a severity. Two reported causes were **refuted by
13
+ measurement** and are recorded as such rather than "fixed": the claimed
14
+ 5.7.3 → 5.8.0 slowdown (±2 % over 10 repo×command pairs) and the ceiling hint
15
+ said to name no smaller variant when one exists.*
16
+
17
+ ### Added
18
+ - `posture` and `validation` take `--limit N` and `--compact` (ASK-10). Both
19
+ could exceed the output ceiling and declared no flag that could get under it,
20
+ so the only ways out were `--output FILE` — which puts the answer outside the
21
+ agent that asked for it — and `ASK_MAX_OUTPUT_TOKENS=0`, which switches the
22
+ guard off. `posture` exited 1 on 2 of 8 corpus repositories, and what pushed
23
+ it over was a *better* answer: conditional beans now name
24
+ `@ConditionalOnExpression` instead of a generic reason (`unresolved`
25
+ 64 120 → 184 864 B). Bounding lives in one authority, reaches every depth of
26
+ the payload (a `--diff` is bounded on both sides), touches lists and never
27
+ counts, and every cut publishes `{total, shown, omitted}` with the registered
28
+ effect. Nothing is bounded unless you ask. Measured: `posture` on
29
+ keycloak-config-cli 53 115 → 4 605 B under `--compact`, summary unchanged.
30
+ A registry-derived battery now fails when a command that can exceed the
31
+ ceiling declares no way under it.
32
+
33
+ ### Fixed
34
+ - A risk tier is not a rule severity, and no longer reads like one (B2). The
35
+ band and the severity shared a vocabulary while measuring different things,
36
+ and disagreed on 34 of 50 rows — both correct, since a severity is what the
37
+ rule says about a defect and a band is what the composition says about it in
38
+ this repository. `audit-report` announced 14 critical over bands while
39
+ `--min-severity critical` filtered severities and returned 0. Every risk row
40
+ and census now also carries `risk_tier` (R1…R5) beside `band`, with one
41
+ crosswalk sentence that names both axes, says they disagree by construction,
42
+ and points at `--min-band` as the flag that filters tiers.
43
+ - `--compact` makes an answer smaller, never unattributable (B14).
44
+ `cold-start --compact` dropped 11 of 19 keys — `schema_version`, `repo_id`,
45
+ `current_git_head`, and a 331-character `hotspots` section — from a document
46
+ whose weight was 97,7 % endpoints, and cut the endpoint list to 30 with
47
+ nothing to say it had. There is now an immutable minimum no compact view may
48
+ remove, every cut collection declares `{total, shown, omitted}` (on
49
+ BroadleafCommerce: 272 total, 30 shown, 242 omitted), and trimming goes by
50
+ weight rather than by a fixed key list, with every removed section named and
51
+ measured in `compact_omitted`.
52
+ - An excluded *pattern* is a directory whose files are all excluded (ASK-12).
53
+ `spring-audit` published `core/`, `module/` and `cli/` — three production
54
+ trees, 5 955 files between them — as excluded patterns, because the
55
+ constructor fell back to naming the first path segment. The exclusion itself
56
+ was conservative and correct; the field describing it was not, and an auditor
57
+ filed and withdrew an over-exclusion report over it. The same field also had
58
+ two constructors with two shapes. Both surfaces now call one producer beside
59
+ the authority that decides what a test source is: `patterns_matched` holds
60
+ only declared test roots, and per-file rules are published as a
61
+ `rules_matched` census with a sentence explaining each rule.
62
+ - One authority writes every output-ceiling hint (ASK-09). `repo-ir` carried two
63
+ hand-written hints — one for stdout, one for the separate megabyte guard on a
64
+ written file — and `migrate-check` a third that reimplemented `build_hint`
65
+ line for line. A hand-written escape list cannot know which flags the caller
66
+ already passed, which is the defect the field reported from the other side.
67
+ `output_ceiling` now expresses what those commands needed: `--force` as a
68
+ bypass, offered only where it is declared; `--gzip` as a file-only bound; a
69
+ `destination="file"` view where `--output FILE` is not an escape and the token
70
+ env var does not apply; and the "no smaller inline variant" prefix decided by
71
+ counting the bounding escapes rather than the sentence. The reported half —
72
+ `endpoints` and `cold-start` claiming nothing smaller exists while `--compact`
73
+ fits — does not reproduce against the unified emit seam.
74
+ - `verify-edit` names the change that bought its model (B4). A clean worktree
75
+ already short-circuits — measured 0,47 s with `model_built: false` on a
76
+ 2 985-file repository — but a single changed path that is neither `.java`
77
+ nor a build descriptor (a stray `.yml`, an unclassified extension) forces two
78
+ repository-wide builds while appearing in **neither** published list. The
79
+ payload therefore read `changed_files: []`, `changed_build_files: []`,
80
+ `model_built: true` and 16,3 s of work with nothing to explain it, which is
81
+ how it was reported as a broken short circuit. `analysis.model_forced_by:
82
+ {count, paths, reason}` now names those paths, and `basis` says the model was
83
+ forced rather than implying nothing changed.
84
+ - A write that cannot finish leaves the filesystem as it found it (B15). The
85
+ payload was written to a temporary beside the destination and renamed onto it
86
+ — atomic, and correct — but a failed rename left the temporary behind: a field
87
+ matrix of five bad destinations left **13,9 MB of untracked files inside the
88
+ repository**, which is the premise "read-only analysis" being false. The
89
+ write now lives in one authority (`sourcecode.output_sink`) and removes its
90
+ temporary in a `finally`. Three edges came with it: a discard sink (`nul`,
91
+ `NUL`, `CON` on Windows, `/dev/null` on POSIX) is a destination, not an I/O
92
+ error — `written: false`, `sink: "null-device"`, `exit 0`, matched only on the
93
+ platform that reserves the name; the operating system's message no longer
94
+ enters our English sentence but travels in `os_error: {raw, errno, errno_name,
95
+ locale}`, beside a `cleaned_up` list of what the run took back with it; and
96
+ `-o reports/today/out.json` creates the parent directories, deliberately, with
97
+ a hint that says so instead of telling you to check for a directory we would
98
+ have made.
99
+ - The parse store publishes the ceiling its policy can hold, not only its budget
100
+ (ASK-15 / AS-18). The resting excess over the 512 MB budget was measured going
101
+ 5,45 → 44,35 MB and, followed across three further commands, **not
102
+ converging** — because the policy is "swept every 32 MB written" and with no
103
+ writes there is no sweep. Nothing was lying; the figure to size a disk by was
104
+ simply not published. `cache status` now carries `effective_ceiling_mb`
105
+ (`budget + sweep_interval × concurrent writers`, the writer count read from
106
+ the authority the parse pool resolves `--jobs` against) with a basis that
107
+ names both terms and says why the excess *rests*: the last interval before a
108
+ process exits is never swept. `over_budget` — normal, bounded, expected — is
109
+ separated from `over_ceiling`, the only state that contradicts what we
110
+ publish. `cache model` and `docs/CACHE.md` corrected from the same fact.
111
+ - Retiring a stale parse-cache generation is a rename, not a walk of the store
112
+ (ASK-14 / AS-17). The first run after an upgrade is the one run that finds a
113
+ whole unreachable generation, and it unlinked every file of it *inside* the
114
+ analysis, before its own first write — so a cold run's cost scaled with what
115
+ the store already held, which is the exact condition the field measured its
116
+ worst cold number under. The generation is now renamed out of reach in one
117
+ directory operation and unlinked on a daemon thread behind the run: **990 ms →
118
+ 10,9 ms** on the analysis path over 20 000 entries / 153 MB. A filesystem that
119
+ refuses the rename still gets the inline delete, and a deletion cut short by
120
+ process exit is finished by the next run. `cache status` keeps counting those
121
+ bytes, named `retired (deleting)` — they are on the disk until they are not.
122
+ The other half of the report, a claimed 5.7.3 → 5.8.0 slowdown in the analysis
123
+ path itself, **did not reproduce**: 10 repo×command pairs A/B'd against
124
+ `0900336` with an isolated cache per cell put every delta inside ±2 %.
125
+ - An analysed population does not move between releases without a field that
126
+ explains the move (B17-sv / AS-16). 5.8.0's E-35 fix removed symbols that were
127
+ never declarations — `return unknownHelper("x");` parsed as one — and
128
+ `metadata.symbols_analyzed` fell with them (`saint-server` 43 642 → 43 003,
129
+ −1,46 %, after five constant versions). The correction was right and the
130
+ release said nothing, so the next field re-audit read it as lost coverage and
131
+ filed it P0. Every command that publishes `symbols_analyzed` now publishes
132
+ `symbols_excluded: {count, reason, basis}` beside it — `repo-ir`'s
133
+ `analysis_meta`, the CIR metadata and `spring-audit`'s metadata, from one
134
+ authority — **always present, `count: 0` included**, because a field that
135
+ appears only when it is non-zero says nothing by its absence. The count is
136
+ carried in the parse-cache entry, so a warm run reports the same number as a
137
+ cold one and a file prepared by a worker reports the same as one parsed in
138
+ sequence. `reason` names the phantom and the release that removed it; `basis`
139
+ names the discriminator (`statement_head_in_return_type_slot`), which is
140
+ checkable against the source.
141
+
142
+ ## [5.8.0] — 2026-08-16
143
+
144
+ *The field queue from the two 5.7.3 validations, closed end to end: the blast
145
+ radius stopped losing the relation everything else is projected over, and the
146
+ answers that were floors stopped being published as totals. One commit per row,
147
+ A/B measured against the parent commit on each.*
148
+
149
+ ### Fixed
150
+ - A type that declares parameters of its own still declares a supertype (E-34).
151
+ The parameter block was matched as "everything up to the next `>`", which
152
+ stops inside `<T, V>`; to reach the body brace the group then swallowed the
153
+ whole `extends …` clause. `class Generic<T, V> extends Base {` produced **no
154
+ edge of either kind**, and 254 of 8 182 types across the fleet (3,1 %) had no
155
+ supertype anywhere in the model. The block is now a balanced `<…>` span, which
156
+ also settles the bounded-parameter trap `class E<T extends Map<String, X>>`.
157
+ Measured over 25 repositories: 0 type declarations lost, 0 gained; clauses
158
+ recovered wherever the shape occurs (dubbo +207, alfresco +130, jenkins +104).
159
+ - A call made through an inherited member belongs to the class that makes it
160
+ (E-27). Neither pass climbed the supertype chain: the field map is keyed on
161
+ the class that declares the field, and the intra-class scan only ever saw the
162
+ methods a class declares itself. Both now resolve against `supertype_closure`,
163
+ one authority for what is above a type, nearest declaration first — Java's own
164
+ rule. On BroadleafCommerce, `ask impact ExploitProtectionService .` goes from
165
+ **38 to 276 endpoints affected** and from **34 to 247 security declarations**;
166
+ `ask impact FormBuilderService .` from 3 to 7 direct callers. Fleet: +1 021
167
+ call-graph edges on Broadleaf, +7 210 on killbill, **+0 on mall** — the
168
+ correct answer for a repository whose calls are not inheritance-mediated.
169
+ - A filter is container-wired through the chain, not the clause (E-28). The
170
+ classification compared a class's *immediate* supertypes against the
171
+ framework's published extension points, so one repository-local hop hid a
172
+ filter: `AdminSecurityFilter` published `low` / `1.0` / `confidence: high` /
173
+ "Low-risk isolated change" over the admin chain, while its base class one
174
+ level up published `high`. Now `high` / `risk_score: null` / `container_wired`,
175
+ and the evidence names the hop (`inherits X via Y`) instead of citing a clause
176
+ the class never wrote. `ask spring-audit .` carries 20 → 42 authentication
177
+ pipeline relations.
178
+ - Two routes that share one inherited handler are two endpoints (E-30). The
179
+ de-duplication was already keyed on `endpoint_id`; the loss was one step
180
+ earlier, in walking from a caller to its own class when the route's controller
181
+ is a subclass. `impact-chain ExploitProtectionService` 189 → 239 affected
182
+ endpoints, `FormBuilderService` 186 → 236.
183
+ - A walk that stopped short says so (E-32). `bfs_truncated` reported whether the
184
+ hub guard cut the depth, not whether the closure was exhausted, so a run whose
185
+ frontier was still 76 nodes wide published `false` beside its depth. It now
186
+ means "the closure was not exhausted", with `closure_complete`,
187
+ `depth_capped_by_guard` and `frontier_open_at_depth_limit` beside it — the two
188
+ ways a walk stops early have different remedies — and the explanation says it
189
+ in prose.
190
+ - The owner of an anonymous member, and the `throws` clause it declares (E-33).
191
+ `verify-edit` answered correctly and cited the wrong evidence twice: a method
192
+ of an anonymous `Runnable` reported as removed from the file's named type, and
193
+ a removed `throws PrivilegedActionException` not reported at all. Anonymous
194
+ class bodies now open a scope named the way Java names it (`Outer$1`), the
195
+ public-surface readers skip such owners, and the `throws` clause is part of the
196
+ compared signature (the DR-1 precedent).
197
+ - A bean reached from a template is declared, not silently missed (E-31).
198
+ **NC-012** states that a SpEL `@beanName` reference in a template is outside
199
+ what a call-graph projection looks at, and what answers it today. The block
200
+ itself was published only by `pr-impact`; `impact`, `impact-chain` and `plan`
201
+ publish it now.
202
+ - A JAX-RS client is an outbound integration (E-26). `export --integrations`
203
+ returned 0 on a codebase that exists to speak HTTP. The JAX-RS client API and
204
+ RESTEasy are admitted the way every other row is — an FQN-guarded import edge
205
+ to a type named by a published specification, never the build coordinate.
206
+ keycloak-config-cli 0 → 3, seven golden repositories byte-identical.
207
+ - A statement is not a declaration (E-35). `return unknownHelper("x");` matched
208
+ the method-declaration shape and minted a method that does not exist, with a
209
+ call edge pointing at it: 1 047 such symbols on BroadleafCommerce (4,4 % of
210
+ its methods), 846 on killbill. The return-type slot is the discriminator;
211
+ `void` is deliberately not in the rejected set. Phantoms → 0, and the method
212
+ population falls by exactly that count, so no real declaration is lost.
213
+
214
+ ### Changed
215
+ - `impact`, `impact-chain` and `plan` publish the `blast_radius` non-coverage
216
+ block (E-31), and `impact` publishes `closure_complete`,
217
+ `depth_capped_by_guard` and `frontier_open_at_depth_limit` (E-32).
218
+ - The symbol population grows by the anonymous types now modelled and shrinks by
219
+ the phantom methods no longer minted (E-33, E-35). Endpoint populations are
220
+ byte-identical on every repository measured.
221
+
222
+ ### Positioning
223
+ - **CL-30 reversed.** The exclusion claim it froze is measurable again — the
224
+ reversal condition the row set was met, not argued. The field revalidation on
225
+ the evaluator's repository is still owed before the differential promise goes
226
+ into commercial material, and the row says so.
227
+
228
+ ## [5.7.3] — 2026-08-16
229
+
230
+ *Two more rows of the same family — a population published under the wrong name,
231
+ and source read past the point it could be read — plus one row closed by
232
+ measurement rather than by code.*
233
+
234
+ ### Fixed
235
+ - A caller that never names the target is not a direct caller (E-11). On
236
+ `examples`, `ask impact OrdersService` reported critical/35.5 with four direct
237
+ callers; three were `MicroserviceUtils` and its nested classes, which contain
238
+ zero occurrences of `OrdersService` — what they touch is the `Service`
239
+ interface it implements. The DI recovery stays (a walk that stops at the
240
+ interface loses every real production dependent), but the population is
241
+ published under its own name — `interface_mediated_callers` — and scored on
242
+ the indirect axis, because a class that reaches the target only if the
243
+ container binds this implementation is at the same conditional distance as a
244
+ transitive caller. Reach is untouched: endpoints, transactions, mappers and
245
+ cross-module figures are unchanged. Measured across 8 symbols on 7
246
+ repositories: 7 byte-identical, `examples/OrdersService` 4 → 1 direct callers,
247
+ 35.5 → 31.0, endpoints still 3.
248
+ - Source that cannot compile is named as such (E-10). spaghetti-api's
249
+ `BrokenSyntax.java` has two opening braces and no closing one, and the payload
250
+ reported a clean class and method from it with nothing anywhere saying the file
251
+ was broken. A `parse_structure` gap now names files whose braces do not balance
252
+ once comments and strings are masked, and states what is missing from the
253
+ model. The symbols stay — a file that fails to compile still tells us its type
254
+ exists — and the cost is a `str.count` per file, with the mask running only for
255
+ the rare candidate, so braces inside strings and comments are not false
256
+ positives.
257
+
258
+ ### Verified
259
+ - C3-112 was open on a stale state: B4 (5.7.0) already replaced the clean-tree
260
+ predicate with `_can_move_a_verdict`, and `analysis.disregarded_changes`
261
+ already publishes the paths git printed that no axis reads. Re-measured on
262
+ jobrunr with an untracked `.md` present: **0.44 s**, `model_built: false`,
263
+ against the 3.74 s the row recorded at 5.2.0. Closed by measurement; no code
264
+ was changed for it.
265
+
5
266
  ## [5.7.2] — 2026-08-16
6
267
 
7
268
  *Four rows from the open ledger, chosen for one property: each was a number or a
@@ -70,5 +70,13 @@ the same command runs on a 3 300-file monolith.
70
70
  `unknown`, never `0` and never "not reachable".
71
71
  - **Vendor-agnostic inference.** Logic never branches on a proprietary name;
72
72
  names are evidence, never the rule.
73
- - Run the suite with `-o addopts=""` to see the summary line; the entry point for
74
- local runs is `run_cli.py`, not `python -m sourcecode.cli`.
73
+ - **The suite runs in parallel by default.** `addopts = "-q -n auto"`, so plain
74
+ `pytest` runs the whole battery and prints the summary line — 70 s on 8 cores,
75
+ not 246 s. `-o addopts=""` is no longer the way to see the count; it now
76
+ *removes* the parallelism. Override the worker count with `-n <k>`, not by
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.
82
+ - 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.7.2
3
+ Version: 5.8.1
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
@@ -35,6 +35,7 @@ Requires-Dist: tree-sitter>=0.21; extra == 'ast'
35
35
  Provides-Extra: dev
36
36
  Requires-Dist: mcp<2,>=1.2; extra == 'dev'
37
37
  Requires-Dist: mypy>=1.10; extra == 'dev'
38
+ Requires-Dist: pytest-xdist>=3.8; extra == 'dev'
38
39
  Requires-Dist: pytest>=8; extra == 'dev'
39
40
  Requires-Dist: ruff>=0.15; extra == 'dev'
40
41
  Provides-Extra: mcp
@@ -47,7 +48,7 @@ Description-Content-Type: text/markdown
47
48
 
48
49
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
49
50
 
50
- ![Version](https://img.shields.io/badge/version-5.7.2-blue)
51
+ ![Version](https://img.shields.io/badge/version-5.8.1-blue)
51
52
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
52
53
 
53
54
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -135,7 +136,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
135
136
  # pip / pipx
136
137
  pipx install sourcecode # or: pip install sourcecode
137
138
 
138
- ask version # ask 5.7.2 — and, on a build that has aged,
139
+ ask version # ask 5.8.1 — and, on a build that has aged,
139
140
  # how many releases have probably shipped since
140
141
  ```
141
142
 
@@ -487,6 +488,7 @@ And one about blast radius:
487
488
  | Not covered | Why | What answers it |
488
489
  |---|---|---|
489
490
  | **The reach of a component the container invokes rather than the code — a security filter chain, an around-advice aspect, a `@ControllerAdvice`, a bean resolved through the interface it implements.** | Blast radius here is projected over the call graph: who calls the changed symbol, and which routes reach those callers. Nothing in the repository calls a container-wired component, so its measured call-graph fan-in is ~0 and every figure derived from it — affected endpoints, direct callers, rollback surface — reads as no impact. The fan-in figure is correct; using it as a risk proxy on this population is not. Publishing that as a low verdict would be a confident zero, which is the one thing this product does not do. | Such a change is flagged in `analysis_warnings` and its verdict is floored, never rated on fan-in. The reach itself is measured elsewhere and was there all along: `ask endpoints` resolves a gate annotation to the routes carrying it, `ask explain <class>` prints the request chain a configuration declares with its source line, and `ask posture --profile <set>` states what each profile leaves open. Projecting those into the blast radius (pointcut → routes, matcher → routes) is a measurement this command does not yet make. |
491
+ | **A bean reached from a template rather than from code — a Thymeleaf or JSP expression that resolves a bean by name (`${@blExploitProtectionService.getCsrfTokenParameter()}`) and invokes a method on it.** | Every reacher this blast radius models is a typed edge or a structural fact recovered from Java: a call, an injection, a container extension point, a string literal inside a reflective lookup. A template is none of those — it is not compiled against the bean, and the reference lives in a file this analysis does not parse. So a component invoked only from a template has a measured fan-in of ~0 and, unlike every other blind spot here, that silence was published without a label: the field found `blind_spots: []` on a service two templates call by name. The miss is ordinary; presenting it as an empty result is the defect (E-31). | A SpEL bean reference in a template is fixed, published syntax (`@beanName` inside `${...}`), so a text search for the bean's name across `.html`/`.jsp` answers it today: `grep -rn '@<beanName>' src/main/resources`. Admitting it as a fourth reacher would be evidence-shaped for the same reason — the reference is a literal naming a bean this repository declares — and it is not modelled yet, which is what this row states rather than implies. |
490
492
 
491
493
  And one about request-body validation:
492
494
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
6
6
 
7
- ![Version](https://img.shields.io/badge/version-5.7.2-blue)
7
+ ![Version](https://img.shields.io/badge/version-5.8.1-blue)
8
8
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
9
9
 
10
10
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -92,7 +92,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
92
92
  # pip / pipx
93
93
  pipx install sourcecode # or: pip install sourcecode
94
94
 
95
- ask version # ask 5.7.2 — and, on a build that has aged,
95
+ ask version # ask 5.8.1 — and, on a build that has aged,
96
96
  # how many releases have probably shipped since
97
97
  ```
98
98
 
@@ -444,6 +444,7 @@ And one about blast radius:
444
444
  | Not covered | Why | What answers it |
445
445
  |---|---|---|
446
446
  | **The reach of a component the container invokes rather than the code — a security filter chain, an around-advice aspect, a `@ControllerAdvice`, a bean resolved through the interface it implements.** | Blast radius here is projected over the call graph: who calls the changed symbol, and which routes reach those callers. Nothing in the repository calls a container-wired component, so its measured call-graph fan-in is ~0 and every figure derived from it — affected endpoints, direct callers, rollback surface — reads as no impact. The fan-in figure is correct; using it as a risk proxy on this population is not. Publishing that as a low verdict would be a confident zero, which is the one thing this product does not do. | Such a change is flagged in `analysis_warnings` and its verdict is floored, never rated on fan-in. The reach itself is measured elsewhere and was there all along: `ask endpoints` resolves a gate annotation to the routes carrying it, `ask explain <class>` prints the request chain a configuration declares with its source line, and `ask posture --profile <set>` states what each profile leaves open. Projecting those into the blast radius (pointcut → routes, matcher → routes) is a measurement this command does not yet make. |
447
+ | **A bean reached from a template rather than from code — a Thymeleaf or JSP expression that resolves a bean by name (`${@blExploitProtectionService.getCsrfTokenParameter()}`) and invokes a method on it.** | Every reacher this blast radius models is a typed edge or a structural fact recovered from Java: a call, an injection, a container extension point, a string literal inside a reflective lookup. A template is none of those — it is not compiled against the bean, and the reference lives in a file this analysis does not parse. So a component invoked only from a template has a measured fan-in of ~0 and, unlike every other blind spot here, that silence was published without a label: the field found `blind_spots: []` on a service two templates call by name. The miss is ordinary; presenting it as an empty result is the defect (E-31). | A SpEL bean reference in a template is fixed, published syntax (`@beanName` inside `${...}`), so a text search for the bean's name across `.html`/`.jsp` answers it today: `grep -rn '@<beanName>' src/main/resources`. Admitting it as a fourth reacher would be evidence-shaped for the same reason — the reference is a literal naming a bean this repository declares — and it is not modelled yet, which is what this row states rather than implies. |
447
448
 
448
449
  And one about request-body validation:
449
450
 
@@ -59,7 +59,7 @@ the enclosing monorepo, and `cache status` / `cache clear` resolve to that same
59
59
  | `ris` | the Repository Intelligence Snapshot — structural index, endpoint index, summaries | tree state (the snapshot records the tree it describes) | rebuilt on every warm |
60
60
  | `cir` | the shared Canonical IR — the Java parse every knowledge command reuses | tree state · analyzer fingerprint · schema version | built |
61
61
  | `task` | one `prepare-context` task answer, per task and per option set | tree state · task · --symptom / --all / --include-config / --format | never — a warm does not run any task |
62
- | `parse` | the symbol extraction of one file, keyed by its bytes | the file's own bytes and the extractor's source — content-addressed, so it is never stale and never needs invalidating. Bounded by `ASK_PARSE_CACHE_MAX_MB` (default 512 MB, least-recently-used, swept every 32 MB written rather than on every write, so the size can sit one sweep interval per running process above the budget) and reported in `cache status` (F-AR) | filled for every Java file the warm parses |
62
+ | `parse` | the symbol extraction of one file, keyed by its bytes | the file's own bytes and the extractor's source — content-addressed, so it is never stale and never needs invalidating. Bounded by `ASK_PARSE_CACHE_MAX_MB` (default 512 MB, least-recently-used, swept every 32 MB written rather than on every write, and the last interval before a process exits is never swept — so the store rests up to one interval per writing process above its budget, and the figure to size a disk by is the ceiling `cache status` publishes beside it, not the budget itself (ASK-15)) and reported in `cache status` (F-AR) | filled for every Java file the warm parses |
63
63
 
64
64
  Measured on BroadleafCommerce (2 000+ Java files, dirty tree), warm machine, 3.2.2, each command in isolation.
65
65