sourcecode 5.8.0__tar.gz → 5.8.2__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 (365) hide show
  1. {sourcecode-5.8.0 → sourcecode-5.8.2}/CHANGELOG.md +245 -0
  2. {sourcecode-5.8.0 → sourcecode-5.8.2}/CLAUDE.md +10 -2
  3. {sourcecode-5.8.0 → sourcecode-5.8.2}/PKG-INFO +4 -3
  4. {sourcecode-5.8.0 → sourcecode-5.8.2}/README.md +2 -2
  5. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/CACHE.md +1 -1
  6. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/DEFECT-LEDGER.md +49 -34
  7. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/DEVELOPMENT-ROADMAP.md +130 -10
  8. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/USER_GUIDE.md +1 -1
  9. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/REGRESSION-GATE.md +89 -0
  10. {sourcecode-5.8.0 → sourcecode-5.8.2}/pyproject.toml +12 -2
  11. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/perf_gate.py +73 -1
  12. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/audit_report.py +31 -3
  14. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/baseline_autocapture.py +96 -17
  15. sourcecode-5.8.2/src/sourcecode/breaking_changes.py +163 -0
  16. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/cache_model.py +5 -3
  17. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/canonical_ir.py +7 -0
  18. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/cli.py +411 -163
  19. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/execution_plan.py +61 -5
  20. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/server.py +22 -4
  21. sourcecode-5.8.2/src/sourcecode/output_bounds.py +194 -0
  22. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/output_ceiling.py +62 -9
  23. sourcecode-5.8.2/src/sourcecode/output_sink.py +230 -0
  24. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/parallel.py +6 -2
  25. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/parse_cache.py +132 -9
  26. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/perf.py +256 -3
  27. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/phased_run.py +19 -8
  28. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/release_info.py +1 -1
  29. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/repository_ir.py +186 -22
  30. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/ris.py +24 -3
  31. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/risk.py +13 -1
  32. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/risk_model.py +35 -0
  33. sourcecode-5.8.2/src/sourcecode/schema_registry.py +300 -0
  34. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_tx_analyzer.py +8 -0
  35. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/verify_edit.py +40 -0
  36. sourcecode-5.8.0/raw +0 -0
  37. {sourcecode-5.8.0 → sourcecode-5.8.2}/.github/workflows/build-windows.yml +0 -0
  38. {sourcecode-5.8.0 → sourcecode-5.8.2}/.github/workflows/perf-gate.yml +0 -0
  39. {sourcecode-5.8.0 → sourcecode-5.8.2}/.gitignore +0 -0
  40. {sourcecode-5.8.0 → sourcecode-5.8.2}/.ruff.toml +0 -0
  41. {sourcecode-5.8.0 → sourcecode-5.8.2}/CONTRIBUTING.md +0 -0
  42. {sourcecode-5.8.0 → sourcecode-5.8.2}/LICENSE +0 -0
  43. {sourcecode-5.8.0 → sourcecode-5.8.2}/NOTICE +0 -0
  44. {sourcecode-5.8.0 → sourcecode-5.8.2}/SECURITY.md +0 -0
  45. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/COMMERCIAL-OFFER.md +0 -0
  46. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/CUSTOMER-VALIDATION.md +0 -0
  47. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/DEMO-5MIN.md +0 -0
  48. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/EXECUTION-PLAN-12MO.md +0 -0
  49. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/EXECUTIVE-ROADMAP.md +0 -0
  50. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/MANUAL-USUARIO.md +0 -0
  51. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/MODERNIZATION.md +0 -0
  52. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/PRODUCT_AUDIT.md +0 -0
  53. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/PRODUCT_IDENTITY.md +0 -0
  54. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/PRODUCT_TIERS.md +0 -0
  55. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/RC1-CHECKLIST.md +0 -0
  56. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/RELEASE-CHECKLIST.md +0 -0
  57. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  58. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  59. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  60. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  61. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  62. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  63. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  64. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  65. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  66. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  67. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  68. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  69. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  70. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  71. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  72. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  73. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  74. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  75. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  76. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0006-performance-harness.md +0 -0
  77. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  78. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  79. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/consumer-disposition-inventory.md +0 -0
  80. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/overview.md +0 -0
  81. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/product-architecture-review.md +0 -0
  82. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/product-strategy-layering.md +0 -0
  83. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  84. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/architecture/semantic-ir-roadmap.md +0 -0
  85. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/baseline-ci.yml +0 -0
  86. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/commercial-pipeline-audit.md +0 -0
  87. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/contracts-ci.yml +0 -0
  88. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/contracts.md +0 -0
  89. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  90. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  91. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  92. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  93. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  94. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  95. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  96. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  97. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/licensing-schema.md +0 -0
  98. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/migrate-check.md +0 -0
  99. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/README.md +0 -0
  100. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  101. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  102. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  103. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  104. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  105. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  106. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  107. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  108. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  109. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  110. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  111. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  112. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  113. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  114. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  115. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  116. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  117. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  118. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  119. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  120. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  121. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  122. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  123. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  124. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  125. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  126. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  127. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  128. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  129. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  130. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  131. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  132. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  133. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  134. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  135. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  136. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  137. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  138. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  139. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  140. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  141. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  142. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/README.md +0 -0
  143. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  144. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  145. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  146. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  147. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  148. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  149. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/perf/baselines/reference-best/README.md +0 -0
  150. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/posture.md +0 -0
  151. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/privacy.md +0 -0
  152. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/pro-experience-audit.md +0 -0
  153. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/schema.md +0 -0
  154. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/spec/envelope-v1.md +0 -0
  155. {sourcecode-5.8.0 → sourcecode-5.8.2}/docs/spring-audit-ci.yml +0 -0
  156. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/compare_integration_engines.py +0 -0
  157. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/customer_smoke_test.sh +0 -0
  158. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/generate_jdk_exports.py +0 -0
  159. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/perf_harness.py +0 -0
  160. {sourcecode-5.8.0 → sourcecode-5.8.2}/scripts/sync_gate_anchors.py +0 -0
  161. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/adaptive_scanner.py +0 -0
  162. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/archetype.py +0 -0
  163. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/architectural_baseline.py +0 -0
  164. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/architectural_delta.py +0 -0
  165. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/architecture_analyzer.py +0 -0
  166. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/architecture_summary.py +0 -0
  167. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/ast_extractor.py +0 -0
  168. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/bundled_docs.py +0 -0
  169. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/cache.py +0 -0
  170. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/call_surface.py +0 -0
  171. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/caller_metrics.py +0 -0
  172. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/caller_reach.py +0 -0
  173. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/chain_rules.py +0 -0
  174. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/change_plan.py +0 -0
  175. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/cir_graphs.py +0 -0
  176. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/classifier.py +0 -0
  177. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/client_calls.py +0 -0
  178. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/code_notes_analyzer.py +0 -0
  179. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/compare.py +0 -0
  180. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/confidence_analyzer.py +0 -0
  181. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/constraint_diff.py +0 -0
  182. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/consumer_join.py +0 -0
  183. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/container_wiring.py +0 -0
  184. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/context_cache.py +0 -0
  185. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/context_graph.py +0 -0
  186. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/context_scorer.py +0 -0
  187. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/context_summarizer.py +0 -0
  188. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/contract_diff.py +0 -0
  189. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/contract_init.py +0 -0
  190. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/contract_model.py +0 -0
  191. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/contract_pipeline.py +0 -0
  192. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/coverage_parser.py +0 -0
  193. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/data_exposure.py +0 -0
  194. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/data_labels.py +0 -0
  195. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/declarations.py +0 -0
  196. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/defect_identity.py +0 -0
  197. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/degradation.py +0 -0
  198. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/dependency_analyzer.py +0 -0
  199. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/deployment_prefix.py +0 -0
  200. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detach.py +0 -0
  201. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/__init__.py +0 -0
  202. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/base.py +0 -0
  203. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/csproj_parser.py +0 -0
  204. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/dart.py +0 -0
  205. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/dotnet.py +0 -0
  206. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/elixir.py +0 -0
  207. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/go.py +0 -0
  208. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/heuristic.py +0 -0
  209. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/hybrid.py +0 -0
  210. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/java.py +0 -0
  211. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/jvm_ext.py +0 -0
  212. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/nodejs.py +0 -0
  213. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/parsers.py +0 -0
  214. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/php.py +0 -0
  215. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/project.py +0 -0
  216. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/python.py +0 -0
  217. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/ruby.py +0 -0
  218. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/rust.py +0 -0
  219. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/systems.py +0 -0
  220. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/terraform.py +0 -0
  221. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/detectors/tooling.py +0 -0
  222. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/doc_analyzer.py +0 -0
  223. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/dynamic_argument_surface.py +0 -0
  224. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/endpoint_literals.py +0 -0
  225. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/endpoint_metrics.py +0 -0
  226. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/entrypoint_classifier.py +0 -0
  227. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/env_analyzer.py +0 -0
  228. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/envelope.py +0 -0
  229. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/environment_resolution.py +0 -0
  230. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/error_schema.py +0 -0
  231. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/evidence_provider.py +0 -0
  232. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/explain.py +0 -0
  233. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/facts/__init__.py +0 -0
  234. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/facts/registry.json +0 -0
  235. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/file_chunker.py +0 -0
  236. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/file_classifier.py +0 -0
  237. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/filter_surface.py +0 -0
  238. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/format_contract.py +0 -0
  239. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/fqn_utils.py +0 -0
  240. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/gate_anchors.py +0 -0
  241. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/git_analyzer.py +0 -0
  242. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/git_checkout.py +0 -0
  243. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/graph_analyzer.py +0 -0
  244. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/graph_evidence.py +0 -0
  245. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/hibernate_strat.py +0 -0
  246. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/identity_fallback.py +0 -0
  247. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/integration_coordinates.py +0 -0
  248. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/jdk_exports.py +0 -0
  249. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/license.py +0 -0
  250. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/manifest_cache.py +0 -0
  251. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/__init__.py +0 -0
  252. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/dependency_import.py +0 -0
  253. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  254. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  255. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  256. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  257. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  258. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/orchestrator.py +0 -0
  259. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/registry.py +0 -0
  260. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp/runner.py +0 -0
  261. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/mcp_nudge.py +0 -0
  262. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/metrics_analyzer.py +0 -0
  263. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/migrate_check.py +0 -0
  264. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/migration_blast.py +0 -0
  265. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/non_coverage.py +0 -0
  266. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/openapi_surface.py +0 -0
  267. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/openrewrite_recipe.py +0 -0
  268. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/output_budget.py +0 -0
  269. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/output_encoding.py +0 -0
  270. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/partial_contract.py +0 -0
  271. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/path_admission.py +0 -0
  272. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/path_filters.py +0 -0
  273. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/pipe_contract.py +0 -0
  274. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/posture.py +0 -0
  275. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/pr_comment_renderer.py +0 -0
  276. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/pr_impact.py +0 -0
  277. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/prepare_context.py +0 -0
  278. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/product_info.py +0 -0
  279. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/progress.py +0 -0
  280. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/provenance.py +0 -0
  281. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/ranking_engine.py +0 -0
  282. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/readiness_timeline.py +0 -0
  283. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/readonly.py +0 -0
  284. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/reconciliation.py +0 -0
  285. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/redactor.py +0 -0
  286. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/reference_facts.py +0 -0
  287. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/relevance_scorer.py +0 -0
  288. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/remedies.py +0 -0
  289. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/rename_refactor.py +0 -0
  290. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/repo_classifier.py +0 -0
  291. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/__init__.py +0 -0
  292. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/context.py +0 -0
  293. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/errors.py +0 -0
  294. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/executor.py +0 -0
  295. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/planner.py +0 -0
  296. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/query.py +0 -0
  297. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/request.py +0 -0
  298. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/resolution.py +0 -0
  299. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/result.py +0 -0
  300. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/retriever.py +0 -0
  301. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/runtime.py +0 -0
  302. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps.py +0 -0
  303. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  304. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_graph.py +0 -0
  305. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_impact.py +0 -0
  306. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_intf.py +0 -0
  307. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_struct.py +0 -0
  308. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  309. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/rule_catalog.py +0 -0
  310. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/rule_pass.py +0 -0
  311. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/runs.py +0 -0
  312. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/runtime_classifier.py +0 -0
  313. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/sarif.py +0 -0
  314. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/scanner.py +0 -0
  315. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/schema.py +0 -0
  316. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  317. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/security_chain.py +0 -0
  318. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/security_config.py +0 -0
  319. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/security_config_scan.py +0 -0
  320. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/security_posture.py +0 -0
  321. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/semantic_analyzer.py +0 -0
  322. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/semantic_impact_engine.py +0 -0
  323. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/semantic_integration_engine.py +0 -0
  324. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/semantic_services.py +0 -0
  325. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/serializer.py +0 -0
  326. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/servlet_surface.py +0 -0
  327. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/source_text.py +0 -0
  328. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_event_topology.py +0 -0
  329. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_findings.py +0 -0
  330. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_impact.py +0 -0
  331. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_model.py +0 -0
  332. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_profiles.py +0 -0
  333. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_properties.py +0 -0
  334. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_security_audit.py +0 -0
  335. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/spring_semantic.py +0 -0
  336. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/sql_taint.py +0 -0
  337. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/summarizer.py +0 -0
  338. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/target_admission.py +0 -0
  339. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/__init__.py +0 -0
  340. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/config.py +0 -0
  341. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/consent.py +0 -0
  342. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/events.py +0 -0
  343. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/filters.py +0 -0
  344. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/telemetry/transport.py +0 -0
  345. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/test_gap_ranking.py +0 -0
  346. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/test_sources.py +0 -0
  347. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/text_input.py +0 -0
  348. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/timeline.py +0 -0
  349. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/token_estimate.py +0 -0
  350. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/tree_utils.py +0 -0
  351. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/type_usage_surface.py +0 -0
  352. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/validation_inference.py +0 -0
  353. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/validation_surface.py +0 -0
  354. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/verify_repo.py +0 -0
  355. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/verify_rules.py +0 -0
  356. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/version_check.py +0 -0
  357. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/waivers.py +0 -0
  358. {sourcecode-5.8.0 → sourcecode-5.8.2}/src/sourcecode/workspace.py +0 -0
  359. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/functions/README.md +0 -0
  360. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/functions/get-license/index.ts +0 -0
  361. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  362. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/functions/telemetry/index.ts +0 -0
  363. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/sql/license_event_ordering.sql +0 -0
  364. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/sql/licensing_schema.sql +0 -0
  365. {sourcecode-5.8.0 → sourcecode-5.8.2}/supabase/sql/telemetry_events.sql +0 -0
@@ -2,6 +2,251 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.8.2] — 2026-08-17
6
+
7
+ *The five rows the 5.8.0 re-audits left in the queue, closed one commit at a
8
+ time, in the order the roadmap itself recommended. Four of the five are about
9
+ what the product can **say** rather than what it can compute — a boolean without
10
+ its unit, a count without its cap, an incompatible change without a way to find
11
+ out, forty version identifiers that nothing could look up — which is the same
12
+ theme 5.8.1 found and did not exhaust. The fifth adds the detector that a ratio
13
+ gate structurally cannot be: an absolute cost axis.*
14
+
15
+ *Three defects were found while fixing others and are recorded with their rows:
16
+ `version` and `schema` disagreeing about which registries this release
17
+ publishes; `Scope.large` answering `False` from a saturated count while the
18
+ class's own docstring said it must not; and a scan cap that could drift from the
19
+ cap the message names.*
20
+
21
+ ### Added
22
+ - **The release gate measures cost, not only change** (P1 / F-BR). Every
23
+ comparison it made was a ratio, and a ratio cannot see a cost that was always
24
+ too high: `validation` went 13,8 → 34,1 → 39,5 s across three releases with no
25
+ step over 20 %, so the gate was green at every step and a staircase shipped.
26
+ `absolute_cost` adds a declared ceiling per command — each published beside
27
+ the mark it was calibrated against, because a limit nobody can audit against a
28
+ measurement is just a number — and the anchored assertion the field validated,
29
+ `max(sample) < 8 × posture_warm`, with the anchor measured in the same run so
30
+ a slower runner moves the limit with it. The two formulations prescribed
31
+ before it are refuted with measurement and are carried in the source with the
32
+ counter-example that killed each: one reads only the ends of the series, the
33
+ other scores shape rather than cost and hands the worst release of the six a
34
+ perfect mark. `--self-test` gains two reds, because a green gate is evidence
35
+ only when a red one is reachable.
36
+ - **`ask schema` resolves every `schema_version` this release can emit** (B6) —
37
+ 50 entries over 44 identifiers, each with what it versions, which module
38
+ defines it, which commands carry it, and whether a JSON Schema document exists
39
+ behind it. `endpoints` gains `endpoints-v1`, the version it never had. The
40
+ registry is checked against the source by AST, so a new identifier cannot
41
+ arrive unlisted. `1.0` is published as **ambiguous**: seven unrelated shapes
42
+ spell their version that way, and resolving it to one of them would be a
43
+ confident falsehood.
44
+ - **An `## Upgrading` section, and `ask schema breaking-changes-v1`** (ASK-11).
45
+ A change that turns `exit 0` into `exit 1` is now declared before it fires,
46
+ named in the `--help` of every command it can fire on, and carried with the
47
+ invocations that change and the sizes at which they change.
48
+
49
+ ### Fixed
50
+ - **A boolean about the working tree names the unit it was measured in** (B11).
51
+ `has_uncommitted_changes: false` was published in the same terminal where
52
+ `git status` had just printed `?? .claude/settings.json`. The rule is right and
53
+ stays — no analyser opens an editor or agent state directory — but with no
54
+ basis, "no changes" and "changes I did not count" are the same three
55
+ characters. The boolean now travels with a census that reconciles against the
56
+ reader's own `git status`: `counted + excluded` is exactly what git printed,
57
+ and each exclusion carries its reason. A non-git directory says "not a git
58
+ worktree" instead of a confident `false`.
59
+ - **A count that stops early says what stopped it** (ASK-13). `cache warm`
60
+ reported "at least 8 418 Java files" about a repository holding 24 073,
61
+ because the walk stops after 25 000 *directory entries*, not 25 000 Java
62
+ files. The cap stays — this runs while somebody waits for `--help` to render —
63
+ and now names itself with its unit. `Scope.large` also answered `False` from a
64
+ saturated count, so a repository whose first entries held few sources was
65
+ advised as small; below the threshold a capped count now decides nothing and
66
+ the cost verdict answers `unknown` with its reason.
67
+ - **`version` and `schema` publish the same registries.** They carried a comment
68
+ promising they could not disagree while one held a literal and the other
69
+ derived its list; the second registry made them disagree. Both read one
70
+ authority now.
71
+
72
+ ## Upgrading — incompatible changes
73
+
74
+ *A change that turns `exit 0` into `exit 1` is a breaking change, and it belongs
75
+ here rather than in a line of a release section. Declared in
76
+ `sourcecode.breaking_changes`, printed by `ask schema breaking-changes-v1`, and
77
+ named in the `--help` of every command it can fire on, so an upgrade can be
78
+ planned instead of discovered by a red pipeline.*
79
+
80
+ ### BC-001 — stdout over the output ceiling exits 1 (since 5.7.0)
81
+
82
+ **Who is affected.** Any script, pipeline or agent that reads a large payload
83
+ from stdout. Before 5.7.0 the ~50K-estimated-token ceiling existed on
84
+ `migrate-check` and `repo-ir` only, so the same size was refused by one command
85
+ and printed in silence by another (AS-09). It is now one policy at the single
86
+ emit seam.
87
+
88
+ **The trigger is repository size, not a flag** — so an invocation that fits
89
+ today can stop fitting on a larger repository, or after a release that detects
90
+ more. Measured by the field on the 5.6.1 → 5.7.x upgrade:
91
+
92
+ | Invocation | Payload in 5.6.1 (`exit 0`) |
93
+ |---|---|
94
+ | `ask endpoints tutorials` | 987 141 B — ~247 K estimated tokens |
95
+ | `ask endpoints thingsboard` | 318 380 B |
96
+ | `ask posture spring-boot` | 355 032 B on 8 667 Java files |
97
+
98
+ **Restore the old behaviour now:** `ASK_MAX_OUTPUT_TOKENS=0` (or
99
+ `--max-output-tokens 0`) switches the guard off and prints the whole payload,
100
+ exactly as before 5.7.0. Any other value moves the ceiling rather than removing
101
+ it.
102
+
103
+ **The remedy, when there is time:** a bounding flag keeps the answer where the
104
+ reader is — `--compact`, `--limit N`, `--top-n N` or `--min-severity`, whichever
105
+ the command declares — and `--output FILE` writes the whole payload to disk
106
+ without the stdout ceiling applying at all. The error message names the ones the
107
+ failing invocation has not already used.
108
+
109
+ The decision itself is not being revisited: 247 K tokens printed into an agent's
110
+ context window was worse than a refusal. What was missing was the ability to
111
+ find that out before it fired.
112
+
113
+ ## [5.8.1] — 2026-08-17
114
+
115
+ *Ten rows from the two 5.8.0 re-audits, closed one commit at a time. The theme
116
+ is not the engine: of the ten, **three were analysis defects and seven were the
117
+ payload failing to say what the analysis already knew** — a population that
118
+ moved with no field to explain it, two empty lists beside two full builds, a
119
+ census naming production trees as excluded, a compact view that dropped its own
120
+ identity, a tier that read as a severity. Two reported causes were **refuted by
121
+ measurement** and are recorded as such rather than "fixed": the claimed
122
+ 5.7.3 → 5.8.0 slowdown (±2 % over 10 repo×command pairs) and the ceiling hint
123
+ said to name no smaller variant when one exists.*
124
+
125
+ ### Added
126
+ - `posture` and `validation` take `--limit N` and `--compact` (ASK-10). Both
127
+ could exceed the output ceiling and declared no flag that could get under it,
128
+ so the only ways out were `--output FILE` — which puts the answer outside the
129
+ agent that asked for it — and `ASK_MAX_OUTPUT_TOKENS=0`, which switches the
130
+ guard off. `posture` exited 1 on 2 of 8 corpus repositories, and what pushed
131
+ it over was a *better* answer: conditional beans now name
132
+ `@ConditionalOnExpression` instead of a generic reason (`unresolved`
133
+ 64 120 → 184 864 B). Bounding lives in one authority, reaches every depth of
134
+ the payload (a `--diff` is bounded on both sides), touches lists and never
135
+ counts, and every cut publishes `{total, shown, omitted}` with the registered
136
+ effect. Nothing is bounded unless you ask. Measured: `posture` on
137
+ keycloak-config-cli 53 115 → 4 605 B under `--compact`, summary unchanged.
138
+ A registry-derived battery now fails when a command that can exceed the
139
+ ceiling declares no way under it.
140
+
141
+ ### Fixed
142
+ - A risk tier is not a rule severity, and no longer reads like one (B2). The
143
+ band and the severity shared a vocabulary while measuring different things,
144
+ and disagreed on 34 of 50 rows — both correct, since a severity is what the
145
+ rule says about a defect and a band is what the composition says about it in
146
+ this repository. `audit-report` announced 14 critical over bands while
147
+ `--min-severity critical` filtered severities and returned 0. Every risk row
148
+ and census now also carries `risk_tier` (R1…R5) beside `band`, with one
149
+ crosswalk sentence that names both axes, says they disagree by construction,
150
+ and points at `--min-band` as the flag that filters tiers.
151
+ - `--compact` makes an answer smaller, never unattributable (B14).
152
+ `cold-start --compact` dropped 11 of 19 keys — `schema_version`, `repo_id`,
153
+ `current_git_head`, and a 331-character `hotspots` section — from a document
154
+ whose weight was 97,7 % endpoints, and cut the endpoint list to 30 with
155
+ nothing to say it had. There is now an immutable minimum no compact view may
156
+ remove, every cut collection declares `{total, shown, omitted}` (on
157
+ BroadleafCommerce: 272 total, 30 shown, 242 omitted), and trimming goes by
158
+ weight rather than by a fixed key list, with every removed section named and
159
+ measured in `compact_omitted`.
160
+ - An excluded *pattern* is a directory whose files are all excluded (ASK-12).
161
+ `spring-audit` published `core/`, `module/` and `cli/` — three production
162
+ trees, 5 955 files between them — as excluded patterns, because the
163
+ constructor fell back to naming the first path segment. The exclusion itself
164
+ was conservative and correct; the field describing it was not, and an auditor
165
+ filed and withdrew an over-exclusion report over it. The same field also had
166
+ two constructors with two shapes. Both surfaces now call one producer beside
167
+ the authority that decides what a test source is: `patterns_matched` holds
168
+ only declared test roots, and per-file rules are published as a
169
+ `rules_matched` census with a sentence explaining each rule.
170
+ - One authority writes every output-ceiling hint (ASK-09). `repo-ir` carried two
171
+ hand-written hints — one for stdout, one for the separate megabyte guard on a
172
+ written file — and `migrate-check` a third that reimplemented `build_hint`
173
+ line for line. A hand-written escape list cannot know which flags the caller
174
+ already passed, which is the defect the field reported from the other side.
175
+ `output_ceiling` now expresses what those commands needed: `--force` as a
176
+ bypass, offered only where it is declared; `--gzip` as a file-only bound; a
177
+ `destination="file"` view where `--output FILE` is not an escape and the token
178
+ env var does not apply; and the "no smaller inline variant" prefix decided by
179
+ counting the bounding escapes rather than the sentence. The reported half —
180
+ `endpoints` and `cold-start` claiming nothing smaller exists while `--compact`
181
+ fits — does not reproduce against the unified emit seam.
182
+ - `verify-edit` names the change that bought its model (B4). A clean worktree
183
+ already short-circuits — measured 0,47 s with `model_built: false` on a
184
+ 2 985-file repository — but a single changed path that is neither `.java`
185
+ nor a build descriptor (a stray `.yml`, an unclassified extension) forces two
186
+ repository-wide builds while appearing in **neither** published list. The
187
+ payload therefore read `changed_files: []`, `changed_build_files: []`,
188
+ `model_built: true` and 16,3 s of work with nothing to explain it, which is
189
+ how it was reported as a broken short circuit. `analysis.model_forced_by:
190
+ {count, paths, reason}` now names those paths, and `basis` says the model was
191
+ forced rather than implying nothing changed.
192
+ - A write that cannot finish leaves the filesystem as it found it (B15). The
193
+ payload was written to a temporary beside the destination and renamed onto it
194
+ — atomic, and correct — but a failed rename left the temporary behind: a field
195
+ matrix of five bad destinations left **13,9 MB of untracked files inside the
196
+ repository**, which is the premise "read-only analysis" being false. The
197
+ write now lives in one authority (`sourcecode.output_sink`) and removes its
198
+ temporary in a `finally`. Three edges came with it: a discard sink (`nul`,
199
+ `NUL`, `CON` on Windows, `/dev/null` on POSIX) is a destination, not an I/O
200
+ error — `written: false`, `sink: "null-device"`, `exit 0`, matched only on the
201
+ platform that reserves the name; the operating system's message no longer
202
+ enters our English sentence but travels in `os_error: {raw, errno, errno_name,
203
+ locale}`, beside a `cleaned_up` list of what the run took back with it; and
204
+ `-o reports/today/out.json` creates the parent directories, deliberately, with
205
+ a hint that says so instead of telling you to check for a directory we would
206
+ have made.
207
+ - The parse store publishes the ceiling its policy can hold, not only its budget
208
+ (ASK-15 / AS-18). The resting excess over the 512 MB budget was measured going
209
+ 5,45 → 44,35 MB and, followed across three further commands, **not
210
+ converging** — because the policy is "swept every 32 MB written" and with no
211
+ writes there is no sweep. Nothing was lying; the figure to size a disk by was
212
+ simply not published. `cache status` now carries `effective_ceiling_mb`
213
+ (`budget + sweep_interval × concurrent writers`, the writer count read from
214
+ the authority the parse pool resolves `--jobs` against) with a basis that
215
+ names both terms and says why the excess *rests*: the last interval before a
216
+ process exits is never swept. `over_budget` — normal, bounded, expected — is
217
+ separated from `over_ceiling`, the only state that contradicts what we
218
+ publish. `cache model` and `docs/CACHE.md` corrected from the same fact.
219
+ - Retiring a stale parse-cache generation is a rename, not a walk of the store
220
+ (ASK-14 / AS-17). The first run after an upgrade is the one run that finds a
221
+ whole unreachable generation, and it unlinked every file of it *inside* the
222
+ analysis, before its own first write — so a cold run's cost scaled with what
223
+ the store already held, which is the exact condition the field measured its
224
+ worst cold number under. The generation is now renamed out of reach in one
225
+ directory operation and unlinked on a daemon thread behind the run: **990 ms →
226
+ 10,9 ms** on the analysis path over 20 000 entries / 153 MB. A filesystem that
227
+ refuses the rename still gets the inline delete, and a deletion cut short by
228
+ process exit is finished by the next run. `cache status` keeps counting those
229
+ bytes, named `retired (deleting)` — they are on the disk until they are not.
230
+ The other half of the report, a claimed 5.7.3 → 5.8.0 slowdown in the analysis
231
+ path itself, **did not reproduce**: 10 repo×command pairs A/B'd against
232
+ `0900336` with an isolated cache per cell put every delta inside ±2 %.
233
+ - An analysed population does not move between releases without a field that
234
+ explains the move (B17-sv / AS-16). 5.8.0's E-35 fix removed symbols that were
235
+ never declarations — `return unknownHelper("x");` parsed as one — and
236
+ `metadata.symbols_analyzed` fell with them (`saint-server` 43 642 → 43 003,
237
+ −1,46 %, after five constant versions). The correction was right and the
238
+ release said nothing, so the next field re-audit read it as lost coverage and
239
+ filed it P0. Every command that publishes `symbols_analyzed` now publishes
240
+ `symbols_excluded: {count, reason, basis}` beside it — `repo-ir`'s
241
+ `analysis_meta`, the CIR metadata and `spring-audit`'s metadata, from one
242
+ authority — **always present, `count: 0` included**, because a field that
243
+ appears only when it is non-zero says nothing by its absence. The count is
244
+ carried in the parse-cache entry, so a warm run reports the same number as a
245
+ cold one and a file prepared by a worker reports the same as one parsed in
246
+ sequence. `reason` names the phantom and the release that removed it; `basis`
247
+ names the discriminator (`statement_head_in_return_type_slot`), which is
248
+ checkable against the source.
249
+
5
250
  ## [5.8.0] — 2026-08-16
6
251
 
7
252
  *The field queue from the two 5.7.3 validations, closed end to end: the blast
@@ -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.8.0
3
+ Version: 5.8.2
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.8.0-blue)
51
+ ![Version](https://img.shields.io/badge/version-5.8.2-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.8.0 — and, on a build that has aged,
139
+ ask version # ask 5.8.2 — and, on a build that has aged,
139
140
  # how many releases have probably shipped since
140
141
  ```
141
142
 
@@ -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.8.0-blue)
7
+ ![Version](https://img.shields.io/badge/version-5.8.2-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.8.0 — and, on a build that has aged,
95
+ ask version # ask 5.8.2 — and, on a build that has aged,
96
96
  # how many releases have probably shipped since
97
97
  ```
98
98
 
@@ -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