sourcecode 5.9.0__tar.gz → 5.9.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 (443) hide show
  1. {sourcecode-5.9.0 → sourcecode-5.9.1}/CHANGELOG.md +25 -0
  2. {sourcecode-5.9.0 → sourcecode-5.9.1}/PKG-INFO +5 -5
  3. {sourcecode-5.9.0 → sourcecode-5.9.1}/README.md +4 -4
  4. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +7 -0
  5. sourcecode-5.9.1/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +98 -0
  6. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/DEFECT-LEDGER.md +17 -0
  7. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/DEVELOPMENT-ROADMAP.md +15 -1
  8. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/EXECUTIVE-ROADMAP.md +12 -1
  9. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/USER_GUIDE.md +3 -3
  10. {sourcecode-5.9.0 → sourcecode-5.9.1}/pyproject.toml +1 -1
  11. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/__init__.py +1 -1
  12. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cli.py +65 -16
  13. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cve_reachability.py +27 -1
  14. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/output_bounds.py +34 -8
  15. {sourcecode-5.9.0 → sourcecode-5.9.1}/.github/workflows/build-windows.yml +0 -0
  16. {sourcecode-5.9.0 → sourcecode-5.9.1}/.github/workflows/perf-gate.yml +0 -0
  17. {sourcecode-5.9.0 → sourcecode-5.9.1}/.github/workflows/windows-battery.yml +0 -0
  18. {sourcecode-5.9.0 → sourcecode-5.9.1}/.gitignore +0 -0
  19. {sourcecode-5.9.0 → sourcecode-5.9.1}/.ruff.toml +0 -0
  20. {sourcecode-5.9.0 → sourcecode-5.9.1}/CLAUDE.md +0 -0
  21. {sourcecode-5.9.0 → sourcecode-5.9.1}/CODE_OF_CONDUCT.md +0 -0
  22. {sourcecode-5.9.0 → sourcecode-5.9.1}/CONTRIBUTING.md +0 -0
  23. {sourcecode-5.9.0 → sourcecode-5.9.1}/LICENSE +0 -0
  24. {sourcecode-5.9.0 → sourcecode-5.9.1}/NOTICE +0 -0
  25. {sourcecode-5.9.0 → sourcecode-5.9.1}/SECURITY.md +0 -0
  26. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  27. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  28. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  29. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  30. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  31. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  32. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  33. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  34. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  35. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  36. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  37. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  38. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  39. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  40. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/CACHE.md +0 -0
  41. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/COMMERCIAL-OFFER.md +0 -0
  42. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/CUSTOMER-VALIDATION.md +0 -0
  43. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/DEMO-5MIN.md +0 -0
  44. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  45. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/EXECUTION-PLAN-12MO.md +0 -0
  46. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/MANUAL-USUARIO.md +0 -0
  47. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/MODERNIZATION.md +0 -0
  48. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/PRODUCT-ROUTE.md +0 -0
  49. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/PRODUCT_AUDIT.md +0 -0
  50. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/PRODUCT_IDENTITY.md +0 -0
  51. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/PRODUCT_TIERS.md +0 -0
  52. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/RC1-CHECKLIST.md +0 -0
  53. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/RELEASE-CHECKLIST.md +0 -0
  54. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  55. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  56. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  57. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-assessment-report.md +0 -0
  58. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  59. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  60. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  61. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  62. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  63. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  64. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  65. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  66. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  67. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  68. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  69. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  70. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  71. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  72. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  73. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  74. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  75. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  76. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  77. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  78. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  79. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  80. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0006-performance-harness.md +0 -0
  81. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  82. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  83. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/consumer-disposition-inventory.md +0 -0
  84. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/overview.md +0 -0
  85. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/product-architecture-review.md +0 -0
  86. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/product-strategy-layering.md +0 -0
  87. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  88. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/architecture/semantic-ir-roadmap.md +0 -0
  89. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/baseline-ci.yml +0 -0
  90. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/commercial-pipeline-audit.md +0 -0
  91. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/contracts-ci.yml +0 -0
  92. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/contracts.md +0 -0
  93. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  94. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  95. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  96. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  97. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  98. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  99. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  100. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  101. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/licensing-schema.md +0 -0
  102. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/migrate-check.md +0 -0
  103. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/pack-gate-github-actions.yml +0 -0
  104. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/pack-gate-gitlab.yml +0 -0
  105. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/README.md +0 -0
  106. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/REGRESSION-GATE.md +0 -0
  107. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  108. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  109. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  110. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  111. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  112. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  113. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  114. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  115. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  116. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  117. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  118. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  119. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  120. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  121. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  122. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  123. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  124. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  125. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  126. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  127. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  128. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  129. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  130. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  131. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  132. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  133. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  134. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  135. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  136. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  137. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  138. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  139. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  140. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  141. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  142. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  143. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  144. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  145. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  146. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  147. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  148. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  149. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/README.md +0 -0
  150. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  151. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  152. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  153. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  154. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  155. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  156. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/baselines/reference-best/README.md +0 -0
  157. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  158. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/posture.md +0 -0
  159. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/privacy.md +0 -0
  160. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/pro-experience-audit.md +0 -0
  161. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/schema.md +0 -0
  162. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/spec/envelope-v1.md +0 -0
  163. {sourcecode-5.9.0 → sourcecode-5.9.1}/docs/spring-audit-ci.yml +0 -0
  164. {sourcecode-5.9.0 → sourcecode-5.9.1}/hatch_build.py +0 -0
  165. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/compare_integration_engines.py +0 -0
  166. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/customer_smoke_test.sh +0 -0
  167. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/generate_jdk_exports.py +0 -0
  168. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/perf_gate.py +0 -0
  169. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/perf_harness.py +0 -0
  170. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/sync_gate_anchors.py +0 -0
  171. {sourcecode-5.9.0 → sourcecode-5.9.1}/scripts/test_fast.sh +0 -0
  172. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/__main__.py +0 -0
  173. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/access_drift.py +0 -0
  174. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/adaptive_scanner.py +0 -0
  175. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/analysis_budget.py +0 -0
  176. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/answer_bounds.py +0 -0
  177. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/archetype.py +0 -0
  178. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/architectural_baseline.py +0 -0
  179. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/architectural_delta.py +0 -0
  180. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/architecture_analyzer.py +0 -0
  181. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/architecture_summary.py +0 -0
  182. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/ast_extractor.py +0 -0
  183. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/audit_clusters.py +0 -0
  184. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/audit_recipe.py +0 -0
  185. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/audit_report.py +0 -0
  186. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/audit_since.py +0 -0
  187. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/baseline_autocapture.py +0 -0
  188. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/breaking_changes.py +0 -0
  189. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/build_modules.py +0 -0
  190. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/build_stamp.py +0 -0
  191. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/bundled_docs.py +0 -0
  192. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/c4_render.py +0 -0
  193. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cache.py +0 -0
  194. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cache_model.py +0 -0
  195. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cache_observation.py +0 -0
  196. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/call_surface.py +0 -0
  197. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/caller_metrics.py +0 -0
  198. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/caller_reach.py +0 -0
  199. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/canonical_ir.py +0 -0
  200. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/chain_rules.py +0 -0
  201. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/change_plan.py +0 -0
  202. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/ci_output.py +0 -0
  203. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cir_graphs.py +0 -0
  204. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/classifier.py +0 -0
  205. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/client_calls.py +0 -0
  206. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/code_notes_analyzer.py +0 -0
  207. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/compare.py +0 -0
  208. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/confidence_analyzer.py +0 -0
  209. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/constraint_diff.py +0 -0
  210. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/consumer_join.py +0 -0
  211. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/container_wiring.py +0 -0
  212. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/context_cache.py +0 -0
  213. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/context_graph.py +0 -0
  214. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/context_scorer.py +0 -0
  215. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/context_summarizer.py +0 -0
  216. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/contract_diff.py +0 -0
  217. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/contract_init.py +0 -0
  218. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/contract_model.py +0 -0
  219. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/contract_pipeline.py +0 -0
  220. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/coverage_parser.py +0 -0
  221. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/cve_feed.py +0 -0
  222. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/data_exposure.py +0 -0
  223. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/data_labels.py +0 -0
  224. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/declarations.py +0 -0
  225. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/defect_classes/__init__.py +0 -0
  226. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/defect_classes/registry.json +0 -0
  227. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/defect_identity.py +0 -0
  228. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/degradation.py +0 -0
  229. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/dependency_analyzer.py +0 -0
  230. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/deployment_prefix.py +0 -0
  231. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detach.py +0 -0
  232. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/__init__.py +0 -0
  233. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/base.py +0 -0
  234. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/csproj_parser.py +0 -0
  235. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/dart.py +0 -0
  236. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/dotnet.py +0 -0
  237. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/elixir.py +0 -0
  238. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/go.py +0 -0
  239. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/heuristic.py +0 -0
  240. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/hybrid.py +0 -0
  241. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/java.py +0 -0
  242. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/jvm_ext.py +0 -0
  243. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/nodejs.py +0 -0
  244. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/parsers.py +0 -0
  245. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/php.py +0 -0
  246. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/project.py +0 -0
  247. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/python.py +0 -0
  248. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/ruby.py +0 -0
  249. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/rust.py +0 -0
  250. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/systems.py +0 -0
  251. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/terraform.py +0 -0
  252. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/detectors/tooling.py +0 -0
  253. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/doc_analyzer.py +0 -0
  254. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/dynamic_argument_surface.py +0 -0
  255. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/empty_reach.py +0 -0
  256. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/endpoint_disposition.py +0 -0
  257. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/endpoint_literals.py +0 -0
  258. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/endpoint_metrics.py +0 -0
  259. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/entrypoint_classifier.py +0 -0
  260. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/env_analyzer.py +0 -0
  261. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/envelope.py +0 -0
  262. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/environment_resolution.py +0 -0
  263. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/error_schema.py +0 -0
  264. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/evidence_provider.py +0 -0
  265. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/execution_plan.py +0 -0
  266. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/explain.py +0 -0
  267. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/explain_endpoint.py +0 -0
  268. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/facts/__init__.py +0 -0
  269. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/facts/registry.json +0 -0
  270. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/field_deprecations.py +0 -0
  271. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/file_chunker.py +0 -0
  272. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/file_classifier.py +0 -0
  273. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/filter_surface.py +0 -0
  274. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/findings_baseline.py +0 -0
  275. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/format_contract.py +0 -0
  276. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/fqn_utils.py +0 -0
  277. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/functional_routes.py +0 -0
  278. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/gate_anchors.py +0 -0
  279. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/git_analyzer.py +0 -0
  280. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/git_checkout.py +0 -0
  281. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/github_diff.py +0 -0
  282. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/graph_analyzer.py +0 -0
  283. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/graph_evidence.py +0 -0
  284. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/hibernate_strat.py +0 -0
  285. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/identity_fallback.py +0 -0
  286. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/integration_coordinates.py +0 -0
  287. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/intent_router.py +0 -0
  288. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/jdk_exports.py +0 -0
  289. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/license.py +0 -0
  290. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/manifest_cache.py +0 -0
  291. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/__init__.py +0 -0
  292. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/dependency_import.py +0 -0
  293. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  294. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  295. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  296. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  297. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  298. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/orchestrator.py +0 -0
  299. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/registry.py +0 -0
  300. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/runner.py +0 -0
  301. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp/server.py +0 -0
  302. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/mcp_nudge.py +0 -0
  303. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/metrics_analyzer.py +0 -0
  304. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/migrate_check.py +0 -0
  305. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/migration_apply.py +0 -0
  306. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/migration_blast.py +0 -0
  307. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/non_coverage.py +0 -0
  308. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/openapi_surface.py +0 -0
  309. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/openrewrite_recipe.py +0 -0
  310. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/output_budget.py +0 -0
  311. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/output_ceiling.py +0 -0
  312. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/output_encoding.py +0 -0
  313. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/output_sink.py +0 -0
  314. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/pack_manifest.py +0 -0
  315. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/packs.py +0 -0
  316. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/parallel.py +0 -0
  317. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/parse_cache.py +0 -0
  318. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/partial_contract.py +0 -0
  319. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/path_admission.py +0 -0
  320. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/path_display.py +0 -0
  321. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/path_filters.py +0 -0
  322. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/perf.py +0 -0
  323. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/phased_run.py +0 -0
  324. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/pipe_contract.py +0 -0
  325. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/posture.py +0 -0
  326. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/pr_comment_renderer.py +0 -0
  327. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/pr_impact.py +0 -0
  328. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/pr_risk.py +0 -0
  329. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/prepare_context.py +0 -0
  330. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/product_info.py +0 -0
  331. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/progress.py +0 -0
  332. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/provenance.py +0 -0
  333. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/ranking_engine.py +0 -0
  334. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/readiness_timeline.py +0 -0
  335. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/readonly.py +0 -0
  336. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/reconciliation.py +0 -0
  337. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/redactor.py +0 -0
  338. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/reference_facts.py +0 -0
  339. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/regress.py +0 -0
  340. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/release_info.py +0 -0
  341. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/relevance_scorer.py +0 -0
  342. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/remediation_diff.py +0 -0
  343. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/remediation_flow.py +0 -0
  344. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/remedies.py +0 -0
  345. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/rename_refactor.py +0 -0
  346. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/repo_classifier.py +0 -0
  347. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/repository_ir.py +0 -0
  348. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/resource_budget.py +0 -0
  349. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/__init__.py +0 -0
  350. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/context.py +0 -0
  351. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/errors.py +0 -0
  352. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/executor.py +0 -0
  353. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/planner.py +0 -0
  354. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/query.py +0 -0
  355. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/request.py +0 -0
  356. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/resolution.py +0 -0
  357. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/result.py +0 -0
  358. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/retriever.py +0 -0
  359. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/runtime.py +0 -0
  360. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps.py +0 -0
  361. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  362. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_graph.py +0 -0
  363. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_impact.py +0 -0
  364. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_intf.py +0 -0
  365. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_struct.py +0 -0
  366. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  367. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/ris.py +0 -0
  368. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/risk.py +0 -0
  369. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/risk_model.py +0 -0
  370. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/rule_catalog.py +0 -0
  371. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/rule_pass.py +0 -0
  372. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/runs.py +0 -0
  373. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/runtime_classifier.py +0 -0
  374. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/sarif.py +0 -0
  375. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/sarif_emit.py +0 -0
  376. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/scanner.py +0 -0
  377. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schema.py +0 -0
  378. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schema_producers.py +0 -0
  379. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schema_registry.py +0 -0
  380. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  381. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  382. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  383. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  384. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  385. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  386. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  387. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/security_chain.py +0 -0
  388. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/security_config.py +0 -0
  389. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/security_config_scan.py +0 -0
  390. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/security_posture.py +0 -0
  391. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/selection_contract.py +0 -0
  392. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/self_audit.py +0 -0
  393. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/selftest.py +0 -0
  394. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/semantic_analyzer.py +0 -0
  395. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/semantic_impact_engine.py +0 -0
  396. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/semantic_integration_engine.py +0 -0
  397. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/semantic_services.py +0 -0
  398. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/serializer.py +0 -0
  399. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/servlet_surface.py +0 -0
  400. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/source_text.py +0 -0
  401. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_event_topology.py +0 -0
  402. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_findings.py +0 -0
  403. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_impact.py +0 -0
  404. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_model.py +0 -0
  405. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_profiles.py +0 -0
  406. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_properties.py +0 -0
  407. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_security_audit.py +0 -0
  408. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_semantic.py +0 -0
  409. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/spring_tx_analyzer.py +0 -0
  410. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/sql_taint.py +0 -0
  411. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/summarizer.py +0 -0
  412. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/target_admission.py +0 -0
  413. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/__init__.py +0 -0
  414. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/config.py +0 -0
  415. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/consent.py +0 -0
  416. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/events.py +0 -0
  417. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/filters.py +0 -0
  418. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/telemetry/transport.py +0 -0
  419. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/test_gap_ranking.py +0 -0
  420. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/test_sources.py +0 -0
  421. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/text_input.py +0 -0
  422. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/timeline.py +0 -0
  423. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/timeline_cache.py +0 -0
  424. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/token_estimate.py +0 -0
  425. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/tree_utils.py +0 -0
  426. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/type_usage_surface.py +0 -0
  427. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/validation_inference.py +0 -0
  428. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/validation_surface.py +0 -0
  429. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/verify_edit.py +0 -0
  430. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/verify_repo.py +0 -0
  431. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/verify_rules.py +0 -0
  432. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/version_check.py +0 -0
  433. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/waivers.py +0 -0
  434. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/watch_loop.py +0 -0
  435. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/wired_surface.py +0 -0
  436. {sourcecode-5.9.0 → sourcecode-5.9.1}/src/sourcecode/workspace.py +0 -0
  437. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/functions/README.md +0 -0
  438. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/functions/get-license/index.ts +0 -0
  439. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  440. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/functions/telemetry/index.ts +0 -0
  441. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/sql/license_event_ordering.sql +0 -0
  442. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/sql/licensing_schema.sql +0 -0
  443. {sourcecode-5.9.0 → sourcecode-5.9.1}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.1] — 2026-08-26
4
+
5
+ *Audit correction and stress-validation patch release. The `AUD-608` fixes
6
+ from the `5.9.0` audit are shipped and documented; command contracts now
7
+ disclose their limits and failure boundaries.*
8
+
9
+ **Fixed**
10
+
11
+ - `cve` publishes that its dependency inventory comes from static manifests and
12
+ supported lockfiles, without implying Maven or Gradle graph resolution.
13
+ - `pr-risk --since` reports unreadable base refs as structured execution errors
14
+ instead of misleading `non_coverage`.
15
+ - `posture --diff --limit` bounds `permit_all` and effective-access evidence
16
+ maps while preserving unrelated `evidence` payloads.
17
+ - Seven new command helps state their command-level analysis and memory budget
18
+ applicability.
19
+
20
+ **Documentation and validation**
21
+
22
+ - README, roadmaps and defect ledger identify `5.9.1` as the current release;
23
+ the `5.9.0` audit remains historical evidence.
24
+ - Focused regression batteries pass for all four corrections. A representative
25
+ stress smoke test passed on seven repositories under
26
+ `Documents/workspace/testing` with isolated caches and clean stderr.
27
+
3
28
  ## [5.9.0] — 2026-08-26
4
29
 
5
30
  *The `AUD-607` external round, closed: three defects fixed and the whole feature
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.0
3
+ Version: 5.9.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
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
59
59
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
60
60
  > before inspecting a repository whose telemetry policy you need to control.
61
61
 
62
- ![Version](https://img.shields.io/badge/version-5.9.0-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.1-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -188,13 +188,13 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
188
188
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
189
189
  unset, or set it to `0`, to disable the ceiling explicitly.
190
190
 
191
- **Current performance status.** Release 5.9.0 retains the shared Canonical IR
191
+ **Current performance status.** Release 5.9.1 retains the shared Canonical IR
192
192
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
193
193
  runs; the no-label path remains parse-free. These are implementation properties,
194
194
  not duration promises. A controlled external warm-path audit has opened performance
195
195
  and bounded-output regressions for this release; use `ask cache model <repo>` and
196
196
  `--progress stderr` for supervised runs, and consult the
197
- [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
197
+ [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md) before
198
198
  treating a historical timing or bounded flag as a current guarantee.
199
199
 
200
200
  **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
@@ -222,7 +222,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
222
222
  # pip / pipx
223
223
  pipx install sourcecode # or: pip install sourcecode
224
224
 
225
- ask version # ask 5.9.0 — and, on a build that has aged,
225
+ ask version # ask 5.9.1 — and, on a build that has aged,
226
226
  # how many releases have probably shipped since
227
227
  ```
228
228
 
@@ -10,7 +10,7 @@
10
10
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
11
11
  > before inspecting a repository whose telemetry policy you need to control.
12
12
 
13
- ![Version](https://img.shields.io/badge/version-5.9.0-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.1-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -139,13 +139,13 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
139
139
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
140
140
  unset, or set it to `0`, to disable the ceiling explicitly.
141
141
 
142
- **Current performance status.** Release 5.9.0 retains the shared Canonical IR
142
+ **Current performance status.** Release 5.9.1 retains the shared Canonical IR
143
143
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
144
144
  runs; the no-label path remains parse-free. These are implementation properties,
145
145
  not duration promises. A controlled external warm-path audit has opened performance
146
146
  and bounded-output regressions for this release; use `ask cache model <repo>` and
147
147
  `--progress stderr` for supervised runs, and consult the
148
- [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
148
+ [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md) before
149
149
  treating a historical timing or bounded flag as a current guarantee.
150
150
 
151
151
  **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
@@ -173,7 +173,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
173
173
  # pip / pipx
174
174
  pipx install sourcecode # or: pip install sourcecode
175
175
 
176
- ask version # ask 5.9.0 — and, on a build that has aged,
176
+ ask version # ask 5.9.1 — and, on a build that has aged,
177
177
  # how many releases have probably shipped since
178
178
  ```
179
179
 
@@ -10,6 +10,13 @@ This note separates reproduced defects from unreproduced claims, inconclusive
10
10
  measurements and feature intake, per the ledger's maintenance rule: no row is
11
11
  closed from a report alone, and no row is dismissed from a report alone.
12
12
 
13
+ > **Historical snapshot.** The subsequent `5.9.0` reconciliation identified an
14
+ > effective-access payload shape not covered by this note's posture test, so
15
+ > its `AUD-607-O01` non-reproduction is superseded by `AUD-608-O01`. Its
16
+ > `cache warm` exit-143 observation was rejected after controlled runs found an
17
+ > external 120-second timeout. See
18
+ > [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
19
+
13
20
  ## Executive Result
14
21
 
15
22
  The reverification round confirms **five findings still closed on their third or
@@ -0,0 +1,98 @@
1
+ # External Audit - 5.9.0
2
+
3
+ **Received:** 2026-08-26
4
+ **Audited revision:** `b4c3691c4110d863fedcd54a61a08fd2997e400c` (`5.9.0`)
5
+ **Method:** external findings reconciled against the released source tree
6
+
7
+ ## Result
8
+
9
+ This is `AUD-608`. The report is not adopted verbatim: each item below records
10
+ the result of source-level reconciliation and the action justified by it.
11
+
12
+ ## Confirmed defects
13
+
14
+ ### AUD-608-C01 - `cve` does not disclose inventory coverage
15
+
16
+ **Priority:** P1
17
+ **Status:** closed in `fe1f624`
18
+
19
+ `ask cve` builds its inventory from static dependency analysis; it does not
20
+ resolve a Maven or Gradle dependency graph. A vulnerable transitive component
21
+ absent from that inventory can therefore be indistinguishable from no matching
22
+ advisory. Individual match records may contain scope, but the top-level result
23
+ and `--help` do not disclose the inventory coverage.
24
+
25
+ **Required correction:** publish inventory scope and non-coverage in output and
26
+ help; do not imply resolved transitive coverage without an explicitly declared
27
+ resolved-graph mode; add manifest-versus-resolved fixtures.
28
+
29
+ ### AUD-608-P01 - `pr-risk --since` hides an execution error as non-coverage
30
+
31
+ **Priority:** P1
32
+ **Status:** closed in `b479465`
33
+
34
+ The `--since` path uses `ContextGraph` without importing it. A broad exception
35
+ handler turns the resulting `NameError` into `non_coverage`, then states that
36
+ the comparison was not requested. This is an execution failure, not an
37
+ analytical limitation.
38
+
39
+ **Required correction:** construct the base context correctly; return genuine
40
+ base-materialisation failures as structured errors; keep
41
+ `new_endpoints_basis` consistent with invocation and result; test both a valid
42
+ `--since` comparison and an unreadable base.
43
+
44
+ ### AUD-608-O01 - effective-access branches bypass `posture --diff --limit`
45
+
46
+ **Priority:** P2
47
+ **Status:** closed in `5f8a50b`
48
+
49
+ `POSTURE_BOUNDED_LISTS` omits `permit_all`, while the shared helper bounds only
50
+ list values. Effective-access `evidence` is a dictionary and also bypasses the
51
+ cap. This is a real output-bounding gap in a diff shape absent from the earlier
52
+ reproduction.
53
+
54
+ **Required correction:** bound `permit_all` and bounded dictionaries, or
55
+ normalise them before the shared pass; exercise every list and map branch from
56
+ the public CLI; verify emitted bytes and estimated size fall under `--limit`.
57
+
58
+ ## Carried documentation item
59
+
60
+ ### AUD-607-U01 - new command help does not state budget-policy applicability
61
+
62
+ **Priority:** P3
63
+ **Status:** closed in `19811ac`
64
+
65
+ The helpers for `cve`, `drift`, `intent`, `pr-risk`, `remediate`,
66
+ `self-audit`, and `watch` expose generic ceilings but do not say whether
67
+ analysis or memory budgets apply. Help must state the applicable policy or
68
+ explicit non-applicability from the command registry.
69
+
70
+ ## Rejected or follow-up observations
71
+
72
+ ### AUD-607-U02 - `cache warm` exit 143
73
+
74
+ **Status:** not reproduced
75
+
76
+ The apparent failure was an external 120-second wrapper timeout. Controlled
77
+ runs with sufficient time completed successfully; no cache defect is tracked.
78
+
79
+ ### AUD-608-C02 - UTF-8 mojibake reported for `chunk-file`
80
+
81
+ **Status:** external reproduction required
82
+
83
+ The released reader explicitly uses UTF-8 and serialises Unicode text; the
84
+ reported default-encoding cause is absent from source. Retain a platform/output
85
+ transport follow-up only until raw UTF-8 input and raw CLI output prove a
86
+ mismatch.
87
+
88
+ The cache-warm timing and compact empty-output reports are also rejected as
89
+ timeout artefacts after the audit's later controlled measurements.
90
+
91
+ ## Reconciliation
92
+
93
+ - The audit revision is the current release revision, so these findings apply
94
+ to shipped `5.9.0` code.
95
+ - `AUD-608-O01` supersedes the earlier `AUD-607-O01` non-reproduction: the new
96
+ evidence identifies a previously untested effective-access payload shape.
97
+ - Previous closures remain closed unless a new public reproduction contradicts
98
+ them.
@@ -16,6 +16,23 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
16
16
 
17
17
  ## Current Synchronization
18
18
 
19
+ **External `5.9.0` audit received, 2026-08-26 - `AUD-608`; corrections shipped in `5.9.1`.** The audited
20
+ revision is the released `5.9.0` commit. The three confirmed corrections are
21
+ closed: `AUD-608-C01` (P1, `cve` now declares its static inventory scope,
22
+ `fe1f624`), `AUD-608-P01` (P1, `pr-risk --since` returns structured base-ref
23
+ errors, `b479465`), and `AUD-608-O01` (P2, `posture --diff --limit` bounds
24
+ `permit_all` plus effective-access evidence maps, `5f8a50b`). `AUD-607-U01`
25
+ is also closed (`19811ac`): the seven new command helps state budget-policy
26
+ non-applicability. `AUD-607-U02` is
27
+ withdrawn after controlled runs showed an external 120-second timeout;
28
+ `AUD-608-C02` (reported UTF-8 mojibake in `chunk-file`) remains a platform
29
+ reproduction follow-up because the released reader is explicitly UTF-8.
30
+
31
+ The new effective-access evidence supersedes the prior `AUD-607-O01`
32
+ non-reproduction: that check did not exercise the payload shape now identified.
33
+ Historical records below remain snapshots. Full evidence is in
34
+ [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
35
+
19
36
  **External `5.8.32` audit received, 2026-08-26 — `AUD-607`.** Two independent
20
37
  reports ([`AUDIT-2026-08-26-EXTERNAL-5.8.32.md`](AUDIT-2026-08-26-EXTERNAL-5.8.32.md)):
21
38
  a reverification round (9.7/10) and a comparison round against `5.8.31` (8/10).
@@ -3,7 +3,21 @@
3
3
  *Chief-engineer development record. This is the internal, dev-facing counterpart to the
4
4
  customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
5
5
 
6
- > **CURRENT QUEUE — release `5.9.0`, following two external audits of `5.8.32`, received 2026-08-26 (`AUD-607`).**
6
+ > **CURRENT QUEUE — release `5.9.1`; external reconciliation `AUD-608` is implemented.**
7
+ > `AUD-608-C01` is closed in `fe1f624`: `cve` declares static
8
+ > dependency-inventory coverage and non-coverage. `AUD-608-P01` is closed in
9
+ > `b479465`: `pr-risk --since` constructs its base context and surfaces failures
10
+ > as structured errors. `AUD-608-O01` is closed in `5f8a50b`: all
11
+ > effective-access branches in `posture --diff` are bounded and covered by
12
+ > byte-size tests. `AUD-607-U01` is closed in `19811ac`: seven command helps
13
+ > state analysis and memory budget non-applicability. `AUD-607-U02` is closed as a
14
+ > 120-second external timeout artefact. The reported `chunk-file` mojibake is
15
+ > follow-up only until a raw platform reproduction proves a Unicode mismatch.
16
+ > The earlier `AUD-607-O01` non-reproduction did not cover the newly identified
17
+ > effective-access shape and is superseded. Full evidence is in
18
+ > [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
19
+
20
+ > **Historical queue — release `5.9.0`, following two external audits of `5.8.32`, received 2026-08-26 (`AUD-607`).**
7
21
  > A reverification round (9.7/10) and a comparison round against `5.8.31` (8/10). **No regression reported by either round**;
8
22
  > six previously closed findings hold on their third or fourth consecutive re-check.
9
23
  > `AUD-607-C01` (P1, `chunk-file` chunk content did not match its own declared `start_line`/`end_line`; reproduction found
@@ -5,7 +5,18 @@
5
5
  > `pack assessment` and `pack gate`, and make evidence and safe change the
6
6
  > product surface. This roadmap must not introduce a competing product thesis.
7
7
 
8
- > **CURRENT STATUS — release `5.9.0`, following two external audits of `5.8.32`, 2026-08-26.** Two
8
+ > **CURRENT UPDATE — release `5.9.1`, following the external `5.9.0` reconciliation (`AUD-608`).**
9
+ > Three defects confirmed in the shipped release are closed: `cve` now
10
+ > discloses its static inventory (`fe1f624`), `pr-risk --since` returns a
11
+ > structured error for unreadable base context (`b479465`), and
12
+ > `posture --diff --limit` bounds effective-access lists and maps (`5f8a50b`).
13
+ > The seven new command helps now state analysis and memory budget
14
+ > non-applicability (`19811ac`). The reported `cache warm` exit-143 was an external
15
+ > 120-second timeout, not a product regression. The prior posture
16
+ > non-reproduction did not cover the payload shape now identified. Details are
17
+ > in [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
18
+
19
+ > **HISTORICAL STATUS — release `5.9.0`, following two external audits of `5.8.32`, 2026-08-26.** Two
9
20
  > independent rounds scored the release **9.7/10** (reverification) and **8/10** (comparison against
10
21
  > `5.8.31`). **Neither round reported a regression**, and both maintained the same commercial
11
22
  > position: buy, at `$30-50` per developer per month. Six previously reported findings are confirmed
@@ -46,13 +46,13 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
46
46
  The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
47
47
  where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
48
48
  warm buys for each command rather than implying that every projection costs the same. In
49
- 5.9.0, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.9.1, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
50
50
  model across all declared label seeds. (The extraction and consumption contract is fixed in
51
51
  the architecture ADRs 0001–0004 under `docs/architecture/`.)
52
52
 
53
53
  The current external pack audit intake is tracked in
54
54
  [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
55
- the two pack fixes are included in release 5.9.0, with release-artifact verification
55
+ the two pack fixes are included in release 5.9.1, with release-artifact verification
56
56
  remaining for detached execution and pack evidence.
57
57
 
58
58
  ---
@@ -206,7 +206,7 @@ pipx install sourcecode # isolated install, no venv needed
206
206
 
207
207
  # Verify
208
208
  ask version
209
- # ask 5.9.0
209
+ # ask 5.9.1
210
210
  ```
211
211
 
212
212
  Requires Python 3.9+.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.9.0"
7
+ version = "5.9.1"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "5.9.0"
7
+ __version__ = "5.9.1"
@@ -826,6 +826,31 @@ from sourcecode.analysis_budget import ( # noqa: E402
826
826
  )
827
827
 
828
828
 
829
+ def _command_budget_help(command: str) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
830
+ """Append the command-level budget contract derived from the shared registry."""
831
+ from sourcecode.analysis_budget import budget_registry_name
832
+
833
+ if budget_registry_name(command) is not None:
834
+ policy = (
835
+ "\n\b\nBudget policy: this command is registered for "
836
+ "`ASK_MAX_ANALYSIS_SECONDS`; its result publishes the applicable "
837
+ "analysis-budget and memory contract."
838
+ )
839
+ else:
840
+ policy = (
841
+ "\n\b\nBudget policy: this command does not consume "
842
+ "`ASK_MAX_ANALYSIS_SECONDS` and does not create a command-level "
843
+ "`ASK_MAX_RSS_MB` enforcement scope. A delegated analysis, if any, "
844
+ "publishes its own budget contract."
845
+ )
846
+
847
+ def decorate(command_fn: Callable[..., Any]) -> Callable[..., Any]:
848
+ command_fn.__doc__ = (command_fn.__doc__ or "") + policy
849
+ return command_fn
850
+
851
+ return decorate
852
+
853
+
829
854
  def _build_help_text(scope: "Optional[Any]" = None) -> str:
830
855
  """Build --help text dynamically based on current license state."""
831
856
  try:
@@ -14508,7 +14533,12 @@ def posture_cmd(
14508
14533
  # answered in — a `--diff` carries a bean list per profile set and a
14509
14534
  # `--diff-ref` one per ref, so the bound has to reach every depth or the
14510
14535
  # caller believes they bounded something they did not.
14511
- from sourcecode.output_bounds import POSTURE_BOUNDED_LISTS, bound_lists, resolve_limit
14536
+ from sourcecode.output_bounds import (
14537
+ POSTURE_BOUNDED_LISTS,
14538
+ POSTURE_BOUNDED_MAPS,
14539
+ bound_lists,
14540
+ resolve_limit,
14541
+ )
14512
14542
 
14513
14543
  _posture_limit = resolve_limit(limit, compact)
14514
14544
  # B-8 / AUD-592-B01. A compact answer must retain one actionable unresolved
@@ -14518,6 +14548,7 @@ def posture_cmd(
14518
14548
  _posture_limit = 1 if data.get("summary", {}).get("unresolved", 0) else 0
14519
14549
  bound_lists(
14520
14550
  data, POSTURE_BOUNDED_LISTS, _posture_limit,
14551
+ map_keys=POSTURE_BOUNDED_MAPS,
14521
14552
  # `--compact` is a size contract for agent output. The monotone
14522
14553
  # optimisation may keep a list whole when its disclosure costs more
14523
14554
  # than that individual cut, leaving a large diff above the ceiling.
@@ -16543,6 +16574,7 @@ def _audit_population_for(root: "Path", *, progress: "Any" = None):
16543
16574
  # ── self-audit (what this build can say about itself, and what it cannot) ────
16544
16575
 
16545
16576
  @app.command("self-audit")
16577
+ @_command_budget_help("self-audit")
16546
16578
  def self_audit_cmd(
16547
16579
  fail_on: Optional[str] = typer.Option(
16548
16580
  None, "--fail-on",
@@ -16619,6 +16651,7 @@ def self_audit_cmd(
16619
16651
  # ── drift (what changed in the effective access, and when) ───────────────────
16620
16652
 
16621
16653
  @app.command("drift")
16654
+ @_command_budget_help("drift")
16622
16655
  def drift_cmd(
16623
16656
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
16624
16657
  profile: Optional[str] = typer.Option(
@@ -16759,6 +16792,7 @@ def drift_cmd(
16759
16792
  # ── watch (re-answer only what changed, while you are still editing) ─────────
16760
16793
 
16761
16794
  @app.command("watch")
16795
+ @_command_budget_help("watch")
16762
16796
  def watch_cmd(
16763
16797
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
16764
16798
  once: bool = typer.Option(
@@ -16858,6 +16892,7 @@ def watch_cmd(
16858
16892
  # ── pr-risk (the risk of THIS change, not the state of the repository) ───────
16859
16893
 
16860
16894
  @app.command("pr-risk")
16895
+ @_command_budget_help("pr-risk")
16861
16896
  def pr_risk_cmd(
16862
16897
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
16863
16898
  files: Optional[str] = typer.Option(
@@ -16901,6 +16936,7 @@ def pr_risk_cmd(
16901
16936
  ask pr-risk . --files changed.txt --since origin/main --fail-on block
16902
16937
  """
16903
16938
  from sourcecode.pr_risk import assess, VERDICT_BLOCK, VERDICT_REVIEW, VERDICT_UNKNOWN
16939
+ from sourcecode.context_graph import ContextGraph
16904
16940
  from sourcecode.repository_ir import find_java_files
16905
16941
  from sourcecode.spring_model import SpringSemanticModel
16906
16942
 
@@ -16939,7 +16975,7 @@ def pr_risk_cmd(
16939
16975
  base_routes = None
16940
16976
  if since:
16941
16977
  _prog.start(f"differencing routes against {since}")
16942
- from sourcecode.git_checkout import materialize_ref
16978
+ from sourcecode.git_checkout import RefError, materialize_ref
16943
16979
  from sourcecode.pr_risk import _routes_of
16944
16980
 
16945
16981
  try:
@@ -16947,14 +16983,24 @@ def pr_risk_cmd(
16947
16983
  base_files = find_java_files(base_tree)
16948
16984
  base_cir = ContextGraph.build(base_files, base_tree).cir
16949
16985
  base_routes = _routes_of(base_cir)
16950
- except Exception as _base_exc:
16951
- # A base that could not be read is not a base with no routes:
16952
- # differencing against an empty set would report every existing
16953
- # endpoint as newly added by this diff.
16954
- base_routes = None
16955
- _base_error = f"{type(_base_exc).__name__}: {_base_exc}"
16956
- else:
16957
- _base_error = ""
16986
+ except RefError as exc:
16987
+ _emit_error_json(
16988
+ exc.code,
16989
+ exc.message,
16990
+ ref=since,
16991
+ hint="Pass a commit available in this repository; no ref is fetched or substituted.",
16992
+ )
16993
+ raise typer.Exit(code=1)
16994
+ except Exception as exc:
16995
+ _emit_error_json(
16996
+ EXECUTION_FAILED_CODE,
16997
+ f"Could not build the base route inventory for {since!r}: "
16998
+ f"{type(exc).__name__}: {exc}",
16999
+ ref=since,
17000
+ stage="base_route_inventory",
17001
+ hint="Fix the base tree or retry with a readable local ref; no comparison was produced.",
17002
+ )
17003
+ raise typer.Exit(code=1)
16958
17004
 
16959
17005
  _prog.start("scoring the change")
16960
17006
  result = assess(
@@ -16968,12 +17014,6 @@ def pr_risk_cmd(
16968
17014
  finally:
16969
17015
  _prog.stop()
16970
17016
 
16971
- if since and base_routes is None:
16972
- result.non_coverage.append(
16973
- f"the base ref `{since}` could not be read, so no route was reported "
16974
- f"as newly added: {_base_error}"
16975
- )
16976
-
16977
17017
  data = result.to_dict()
16978
17018
  _emit_command_output(
16979
17019
  _serialize_dict(data, format),
@@ -16998,6 +17038,7 @@ def pr_risk_cmd(
16998
17038
  # ── remediate (finding → recipe → apply → verify, as one loop) ───────────────
16999
17039
 
17000
17040
  @app.command("remediate")
17041
+ @_command_budget_help("remediate")
17001
17042
  def remediate_cmd(
17002
17043
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
17003
17044
  write: bool = typer.Option(
@@ -17101,6 +17142,7 @@ def remediate_cmd(
17101
17142
  # ── intent (natural language → a typed query this CLI already answers) ───────
17102
17143
 
17103
17144
  @app.command("intent")
17145
+ @_command_budget_help("intent")
17104
17146
  def intent_cmd(
17105
17147
  question: str = typer.Argument(..., help="The question, in plain language."),
17106
17148
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
@@ -17179,6 +17221,7 @@ def intent_cmd(
17179
17221
  # ── cve (dependency advisories, gated on reachability) ───────────────────────
17180
17222
 
17181
17223
  @app.command("cve")
17224
+ @_command_budget_help("cve")
17182
17225
  def cve_cmd(
17183
17226
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)"),
17184
17227
  feed: Optional[Path] = typer.Option(
@@ -17231,6 +17274,12 @@ def cve_cmd(
17231
17274
  Nothing here answers "not reachable": reflection, SPI loading and container
17232
17275
  wiring reach code no import statement names.
17233
17276
 
17277
+ \b
17278
+ Dependency coverage is the static manifest and supported-lockfile inventory.
17279
+ This command does not execute Maven or Gradle, so a transitive dependency
17280
+ absent from that inventory is not assessed. The JSON result publishes this
17281
+ coverage explicitly; it never treats an unobserved coordinate as safe.
17282
+
17234
17283
  \b
17235
17284
  ask cve . --feed ./osv-maven.json
17236
17285
  ask cve . --feed ./feeds/ --reachable-only --fail-on reachable
@@ -371,6 +371,29 @@ def assess(
371
371
  }
372
372
  non_coverage: list[str] = []
373
373
 
374
+ # DependencyAnalyzer reads manifests and the lockfiles it understands. It
375
+ # deliberately does not execute Maven or Gradle, so a missing record cannot
376
+ # mean a dependency resolver proved the coordinate absent.
377
+ java_records = [
378
+ record for record in dependencies
379
+ if str(getattr(record, "ecosystem", "")).lower() == "java"
380
+ ]
381
+ scopes_observed: dict[str, int] = {}
382
+ for record in java_records:
383
+ scope = str(getattr(record, "scope", None) or "unknown")
384
+ scopes_observed[scope] = scopes_observed.get(scope, 0) + 1
385
+ dependency_inventory = {
386
+ "basis": "static_manifests_and_supported_lockfiles",
387
+ "dependency_resolution": "not_performed",
388
+ "java_records_observed": len(java_records),
389
+ "scopes_observed": dict(sorted(scopes_observed.items())),
390
+ "non_coverage": (
391
+ "Maven and Gradle are not executed. Dependencies absent from the "
392
+ "static manifest or supported lockfile inventory, including "
393
+ "tool-resolved transitive dependencies, are not assessed."
394
+ ),
395
+ }
396
+
374
397
  if not feed.loaded:
375
398
  # A refusal, not a clean scan. The caller turns this into an exit code.
376
399
  return {
@@ -378,6 +401,7 @@ def assess(
378
401
  "schema": SCHEMA_ID,
379
402
  "status": "no_feed",
380
403
  "feed": feed.to_dict(),
404
+ "dependency_inventory": dependency_inventory,
381
405
  "dependencies_examined": 0,
382
406
  "matches": [],
383
407
  "counts": counts,
@@ -490,8 +514,10 @@ def assess(
490
514
  "schema": SCHEMA_ID,
491
515
  "status": "ok",
492
516
  "feed": feed.to_dict(),
517
+ "dependency_inventory": dependency_inventory,
493
518
  "dependencies_examined": examined,
494
519
  "matches": matches,
495
520
  "counts": counts,
496
- "non_coverage": non_coverage + list(feed.limitations),
521
+ "non_coverage": [dependency_inventory["non_coverage"]]
522
+ + non_coverage + list(feed.limitations),
497
523
  }