sourcecode 5.9.3__tar.gz → 5.9.4__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.

Potentially problematic release.


This version of sourcecode might be problematic. Click here for more details.

Files changed (451) hide show
  1. {sourcecode-5.9.3 → sourcecode-5.9.4}/CHANGELOG.md +22 -0
  2. {sourcecode-5.9.3 → sourcecode-5.9.4}/PKG-INFO +12 -4
  3. {sourcecode-5.9.3 → sourcecode-5.9.4}/README.md +11 -3
  4. sourcecode-5.9.4/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +96 -0
  5. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/DEVELOPMENT-ROADMAP.md +11 -1
  6. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/EXECUTIVE-ROADMAP.md +21 -1
  7. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/MANUAL-USUARIO.md +16 -1
  8. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/PRODUCT-ROUTE.md +9 -0
  9. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/USER_GUIDE.md +18 -3
  10. {sourcecode-5.9.3 → sourcecode-5.9.4}/pyproject.toml +1 -1
  11. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/__init__.py +1 -1
  12. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/architectural_baseline.py +5 -1
  13. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cli.py +75 -8
  14. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cve_feed.py +6 -1
  15. {sourcecode-5.9.3 → sourcecode-5.9.4}/.github/workflows/build-windows.yml +0 -0
  16. {sourcecode-5.9.3 → sourcecode-5.9.4}/.github/workflows/perf-gate.yml +0 -0
  17. {sourcecode-5.9.3 → sourcecode-5.9.4}/.github/workflows/windows-battery.yml +0 -0
  18. {sourcecode-5.9.3 → sourcecode-5.9.4}/.gitignore +0 -0
  19. {sourcecode-5.9.3 → sourcecode-5.9.4}/.ruff.toml +0 -0
  20. {sourcecode-5.9.3 → sourcecode-5.9.4}/CLAUDE.md +0 -0
  21. {sourcecode-5.9.3 → sourcecode-5.9.4}/CODE_OF_CONDUCT.md +0 -0
  22. {sourcecode-5.9.3 → sourcecode-5.9.4}/CONTRIBUTING.md +0 -0
  23. {sourcecode-5.9.3 → sourcecode-5.9.4}/LICENSE +0 -0
  24. {sourcecode-5.9.3 → sourcecode-5.9.4}/NOTICE +0 -0
  25. {sourcecode-5.9.3 → sourcecode-5.9.4}/SECURITY.md +0 -0
  26. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  27. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  28. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  29. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  30. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  31. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  32. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  33. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  34. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  35. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  36. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  37. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  38. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
  39. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
  40. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
  41. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
  42. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  43. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/CACHE.md +0 -0
  44. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/COMMERCIAL-OFFER.md +0 -0
  45. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/CUSTOMER-VALIDATION.md +0 -0
  46. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/DEFECT-LEDGER.md +0 -0
  47. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/DEMO-5MIN.md +0 -0
  48. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  49. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/EXECUTION-PLAN-12MO.md +0 -0
  50. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/MODERNIZATION.md +0 -0
  51. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/PRODUCT_AUDIT.md +0 -0
  52. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/PRODUCT_IDENTITY.md +0 -0
  53. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/PRODUCT_TIERS.md +0 -0
  54. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/RC1-CHECKLIST.md +0 -0
  55. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/RELEASE-CHECKLIST.md +0 -0
  56. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
  57. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  58. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  59. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-assessment-report.md +0 -0
  60. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  61. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  62. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  63. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  64. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  65. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  66. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  67. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  68. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  69. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  70. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  71. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  72. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  73. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  74. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  75. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  76. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  77. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  78. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  79. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  80. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  81. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  82. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0006-performance-harness.md +0 -0
  83. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  84. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  85. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/consumer-disposition-inventory.md +0 -0
  86. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/overview.md +0 -0
  87. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/product-architecture-review.md +0 -0
  88. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/product-strategy-layering.md +0 -0
  89. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  90. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/architecture/semantic-ir-roadmap.md +0 -0
  91. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/baseline-ci.yml +0 -0
  92. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/commercial-pipeline-audit.md +0 -0
  93. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/contracts-ci.yml +0 -0
  94. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/contracts.md +0 -0
  95. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  96. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  97. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  98. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  99. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  100. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  101. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  102. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  103. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/licensing-schema.md +0 -0
  104. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/migrate-check.md +0 -0
  105. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/pack-gate-github-actions.yml +0 -0
  106. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/pack-gate-gitlab.yml +0 -0
  107. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/README.md +0 -0
  108. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/REGRESSION-GATE.md +0 -0
  109. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  110. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  111. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  112. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  113. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  114. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  115. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  116. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  117. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  118. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  119. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  120. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  121. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  122. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  123. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  124. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  125. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  126. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  127. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  128. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  129. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  130. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  131. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  132. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  133. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  134. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  135. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  136. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  137. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  138. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  139. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  140. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  141. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  142. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  143. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  144. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  145. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  146. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  147. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  148. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  149. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  150. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  151. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/README.md +0 -0
  152. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  153. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  154. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  155. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  156. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  157. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  158. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/baselines/reference-best/README.md +0 -0
  159. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  160. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/posture.md +0 -0
  161. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/privacy.md +0 -0
  162. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/pro-experience-audit.md +0 -0
  163. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/schema.md +0 -0
  164. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/spec/envelope-v1.md +0 -0
  165. {sourcecode-5.9.3 → sourcecode-5.9.4}/docs/spring-audit-ci.yml +0 -0
  166. {sourcecode-5.9.3 → sourcecode-5.9.4}/hatch_build.py +0 -0
  167. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/compare_integration_engines.py +0 -0
  168. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/context_cost_harness.py +0 -0
  169. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/customer_smoke_test.sh +0 -0
  170. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/generate_jdk_exports.py +0 -0
  171. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/perf_gate.py +0 -0
  172. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/perf_harness.py +0 -0
  173. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/sync_gate_anchors.py +0 -0
  174. {sourcecode-5.9.3 → sourcecode-5.9.4}/scripts/test_fast.sh +0 -0
  175. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/__main__.py +0 -0
  176. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/access_drift.py +0 -0
  177. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/adaptive_scanner.py +0 -0
  178. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/analysis_budget.py +0 -0
  179. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/answer_bounds.py +0 -0
  180. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/archetype.py +0 -0
  181. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/architectural_delta.py +0 -0
  182. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/architecture_analyzer.py +0 -0
  183. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/architecture_summary.py +0 -0
  184. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/ast_extractor.py +0 -0
  185. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/audit_clusters.py +0 -0
  186. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/audit_recipe.py +0 -0
  187. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/audit_report.py +0 -0
  188. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/audit_since.py +0 -0
  189. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/audit_verify.py +0 -0
  190. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/baseline_attestation.py +0 -0
  191. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/baseline_autocapture.py +0 -0
  192. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/breaking_changes.py +0 -0
  193. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/build_modules.py +0 -0
  194. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/build_stamp.py +0 -0
  195. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/bundled_docs.py +0 -0
  196. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/c4_render.py +0 -0
  197. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cache.py +0 -0
  198. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cache_model.py +0 -0
  199. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cache_observation.py +0 -0
  200. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/call_surface.py +0 -0
  201. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/caller_metrics.py +0 -0
  202. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/caller_reach.py +0 -0
  203. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/canonical_ir.py +0 -0
  204. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/chain_rules.py +0 -0
  205. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/change_plan.py +0 -0
  206. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/ci_output.py +0 -0
  207. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cir_graphs.py +0 -0
  208. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/classifier.py +0 -0
  209. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/client_calls.py +0 -0
  210. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/code_notes_analyzer.py +0 -0
  211. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/compare.py +0 -0
  212. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/confidence_analyzer.py +0 -0
  213. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/constraint_diff.py +0 -0
  214. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/consumer_join.py +0 -0
  215. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/container_wiring.py +0 -0
  216. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/context_cache.py +0 -0
  217. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/context_graph.py +0 -0
  218. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/context_scorer.py +0 -0
  219. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/context_summarizer.py +0 -0
  220. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/contract_diff.py +0 -0
  221. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/contract_init.py +0 -0
  222. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/contract_model.py +0 -0
  223. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/contract_pipeline.py +0 -0
  224. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/coverage_parser.py +0 -0
  225. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/cve_reachability.py +0 -0
  226. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/data_exposure.py +0 -0
  227. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/data_labels.py +0 -0
  228. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/declarations.py +0 -0
  229. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/defect_classes/__init__.py +0 -0
  230. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/defect_classes/registry.json +0 -0
  231. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/defect_identity.py +0 -0
  232. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/degradation.py +0 -0
  233. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/dependency_analyzer.py +0 -0
  234. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/deployment_prefix.py +0 -0
  235. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detach.py +0 -0
  236. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/__init__.py +0 -0
  237. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/base.py +0 -0
  238. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/csproj_parser.py +0 -0
  239. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/dart.py +0 -0
  240. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/dotnet.py +0 -0
  241. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/elixir.py +0 -0
  242. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/go.py +0 -0
  243. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/heuristic.py +0 -0
  244. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/hybrid.py +0 -0
  245. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/java.py +0 -0
  246. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/jvm_ext.py +0 -0
  247. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/nodejs.py +0 -0
  248. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/parsers.py +0 -0
  249. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/php.py +0 -0
  250. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/project.py +0 -0
  251. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/python.py +0 -0
  252. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/ruby.py +0 -0
  253. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/rust.py +0 -0
  254. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/systems.py +0 -0
  255. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/terraform.py +0 -0
  256. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/detectors/tooling.py +0 -0
  257. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/doc_analyzer.py +0 -0
  258. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/dynamic_argument_surface.py +0 -0
  259. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/empty_reach.py +0 -0
  260. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/endpoint_disposition.py +0 -0
  261. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/endpoint_literals.py +0 -0
  262. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/endpoint_metrics.py +0 -0
  263. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/entrypoint_classifier.py +0 -0
  264. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/env_analyzer.py +0 -0
  265. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/envelope.py +0 -0
  266. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/environment_resolution.py +0 -0
  267. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/error_schema.py +0 -0
  268. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/evidence_provider.py +0 -0
  269. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/execution_plan.py +0 -0
  270. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/explain.py +0 -0
  271. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/explain_endpoint.py +0 -0
  272. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/facts/__init__.py +0 -0
  273. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/facts/registry.json +0 -0
  274. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/field_deprecations.py +0 -0
  275. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/file_chunker.py +0 -0
  276. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/file_classifier.py +0 -0
  277. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/filter_surface.py +0 -0
  278. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/findings_baseline.py +0 -0
  279. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/format_contract.py +0 -0
  280. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/fqn_utils.py +0 -0
  281. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/functional_routes.py +0 -0
  282. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/gate_anchors.py +0 -0
  283. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/git_analyzer.py +0 -0
  284. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/git_checkout.py +0 -0
  285. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/github_diff.py +0 -0
  286. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/graph_analyzer.py +0 -0
  287. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/graph_evidence.py +0 -0
  288. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/hibernate_strat.py +0 -0
  289. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/identity_fallback.py +0 -0
  290. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/integration_coordinates.py +0 -0
  291. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/intent_router.py +0 -0
  292. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/jdk_exports.py +0 -0
  293. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/license.py +0 -0
  294. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/manifest_cache.py +0 -0
  295. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/__init__.py +0 -0
  296. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/dependency_import.py +0 -0
  297. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  298. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  299. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  300. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  301. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  302. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/orchestrator.py +0 -0
  303. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/registry.py +0 -0
  304. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/runner.py +0 -0
  305. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp/server.py +0 -0
  306. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/mcp_nudge.py +0 -0
  307. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/metrics_analyzer.py +0 -0
  308. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/migrate_check.py +0 -0
  309. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/migration_apply.py +0 -0
  310. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/migration_blast.py +0 -0
  311. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/non_coverage.py +0 -0
  312. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/openapi_surface.py +0 -0
  313. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/openrewrite_recipe.py +0 -0
  314. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/output_bounds.py +0 -0
  315. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/output_budget.py +0 -0
  316. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/output_ceiling.py +0 -0
  317. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/output_encoding.py +0 -0
  318. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/output_sink.py +0 -0
  319. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/pack_manifest.py +0 -0
  320. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/packs.py +0 -0
  321. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/parallel.py +0 -0
  322. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/parse_cache.py +0 -0
  323. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/partial_contract.py +0 -0
  324. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/path_admission.py +0 -0
  325. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/path_display.py +0 -0
  326. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/path_filters.py +0 -0
  327. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/perf.py +0 -0
  328. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/phased_run.py +0 -0
  329. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/pipe_contract.py +0 -0
  330. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/posture.py +0 -0
  331. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/pr_comment_renderer.py +0 -0
  332. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/pr_impact.py +0 -0
  333. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/pr_risk.py +0 -0
  334. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/prepare_context.py +0 -0
  335. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/product_info.py +0 -0
  336. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/progress.py +0 -0
  337. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/provenance.py +0 -0
  338. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/ranking_engine.py +0 -0
  339. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/readiness_timeline.py +0 -0
  340. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/readonly.py +0 -0
  341. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/reconciliation.py +0 -0
  342. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/redactor.py +0 -0
  343. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/reference_facts.py +0 -0
  344. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/regress.py +0 -0
  345. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/regulatory_pack.py +0 -0
  346. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/release_info.py +0 -0
  347. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/relevance_scorer.py +0 -0
  348. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/remediation_diff.py +0 -0
  349. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/remediation_flow.py +0 -0
  350. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/remediation_report.py +0 -0
  351. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/remedies.py +0 -0
  352. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/rename_refactor.py +0 -0
  353. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/repo_classifier.py +0 -0
  354. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/repository_ir.py +0 -0
  355. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/resource_budget.py +0 -0
  356. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/__init__.py +0 -0
  357. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/context.py +0 -0
  358. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/errors.py +0 -0
  359. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/executor.py +0 -0
  360. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/planner.py +0 -0
  361. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/query.py +0 -0
  362. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/request.py +0 -0
  363. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/resolution.py +0 -0
  364. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/result.py +0 -0
  365. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/retriever.py +0 -0
  366. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/runtime.py +0 -0
  367. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps.py +0 -0
  368. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  369. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_graph.py +0 -0
  370. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_impact.py +0 -0
  371. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_intf.py +0 -0
  372. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_struct.py +0 -0
  373. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  374. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/ris.py +0 -0
  375. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/risk.py +0 -0
  376. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/risk_model.py +0 -0
  377. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/rule_catalog.py +0 -0
  378. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/rule_pass.py +0 -0
  379. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/runs.py +0 -0
  380. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/runtime_classifier.py +0 -0
  381. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/sarif.py +0 -0
  382. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/sarif_emit.py +0 -0
  383. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/scanner.py +0 -0
  384. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schema.py +0 -0
  385. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schema_producers.py +0 -0
  386. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schema_registry.py +0 -0
  387. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  388. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
  389. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  390. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  391. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  392. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  393. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  394. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/security_chain.py +0 -0
  395. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/security_config.py +0 -0
  396. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/security_config_scan.py +0 -0
  397. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/security_posture.py +0 -0
  398. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/selection_contract.py +0 -0
  399. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/self_audit.py +0 -0
  400. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/selftest.py +0 -0
  401. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/semantic_analyzer.py +0 -0
  402. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/semantic_impact_engine.py +0 -0
  403. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/semantic_integration_engine.py +0 -0
  404. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/semantic_services.py +0 -0
  405. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/serializer.py +0 -0
  406. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/servlet_surface.py +0 -0
  407. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/source_text.py +0 -0
  408. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_event_topology.py +0 -0
  409. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_findings.py +0 -0
  410. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_impact.py +0 -0
  411. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_model.py +0 -0
  412. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_profiles.py +0 -0
  413. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_properties.py +0 -0
  414. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_security_audit.py +0 -0
  415. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_semantic.py +0 -0
  416. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/spring_tx_analyzer.py +0 -0
  417. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/sql_taint.py +0 -0
  418. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/summarizer.py +0 -0
  419. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/target_admission.py +0 -0
  420. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/__init__.py +0 -0
  421. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/config.py +0 -0
  422. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/consent.py +0 -0
  423. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/events.py +0 -0
  424. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/filters.py +0 -0
  425. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/telemetry/transport.py +0 -0
  426. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/test_gap_ranking.py +0 -0
  427. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/test_sources.py +0 -0
  428. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/text_input.py +0 -0
  429. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/timeline.py +0 -0
  430. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/timeline_cache.py +0 -0
  431. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/token_estimate.py +0 -0
  432. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/tree_utils.py +0 -0
  433. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/type_usage_surface.py +0 -0
  434. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/validation_inference.py +0 -0
  435. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/validation_surface.py +0 -0
  436. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/verify_edit.py +0 -0
  437. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/verify_repo.py +0 -0
  438. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/verify_rules.py +0 -0
  439. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/version_check.py +0 -0
  440. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/vex.py +0 -0
  441. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/waivers.py +0 -0
  442. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/watch_loop.py +0 -0
  443. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/wired_surface.py +0 -0
  444. {sourcecode-5.9.3 → sourcecode-5.9.4}/src/sourcecode/workspace.py +0 -0
  445. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/functions/README.md +0 -0
  446. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/functions/get-license/index.ts +0 -0
  447. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  448. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/functions/telemetry/index.ts +0 -0
  449. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/sql/license_event_ordering.sql +0 -0
  450. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/sql/licensing_schema.sql +0 -0
  451. {sourcecode-5.9.3 → sourcecode-5.9.4}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.4] — 2026-08-27
4
+
5
+ *External-audit reliability and contract-alignment release.*
6
+
7
+ **Fixed**
8
+
9
+ - Rejects missing consumer repositories, malformed CVE feeds and unresolved
10
+ `pack gate --since` refs as structured input errors.
11
+ - Rejects unknown profiles in `posture --diff` when the repository declares a
12
+ profile population, while preserving annotation-only profile fixtures.
13
+ - Prevents architectural baseline captures from overwriting the snapshot for
14
+ the same commit.
15
+ - Makes `endpoints --compact` disclose inline that its empty row list is an
16
+ intentional omission, and makes unresolved `impact`/`impact-chain` runs exit
17
+ non-zero even when no Java files are present.
18
+
19
+ **Documentation and validation**
20
+
21
+ - Updated README, English and Spanish user guides, roadmap status and CLI help.
22
+ - Dedicated regression tests pass against repositories under
23
+ `Documents/workspace/testing`.
24
+
3
25
  ## [5.9.3] — 2026-08-27
4
26
 
5
27
  *Workspace entitlement correctness patch release.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.9.3
3
+ Version: 5.9.4
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.3-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.4-blue)
63
63
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
64
64
 
65
65
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
196
196
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
197
197
  unset, or set it to `0`, to disable the ceiling explicitly.
198
198
 
199
- **Current performance status.** Release 5.9.3 retains the shared Canonical IR
199
+ **Current performance status.** Release 5.9.4 retains the shared Canonical IR
200
200
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
201
201
  runs; the no-label path remains parse-free. These are implementation properties,
202
202
  not duration promises. A controlled external warm-path audit has opened performance
@@ -218,6 +218,14 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
218
218
  invalid input rather than treated as an empty repository. This prevents silent
219
219
  entitlement errors in CI and does not change per-repository gates or billing.
220
220
 
221
+ Release 5.9.4 also hardens the boundary contracts: missing consumer repositories,
222
+ malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
223
+ input errors; duplicate same-commit baselines are never overwritten. `posture
224
+ --diff` validates unknown profiles when the repository declares profiles. In
225
+ `endpoints --compact`, an empty `endpoints` list is explicitly marked as an
226
+ intentional omission, not an empty API; unresolved `impact` and `impact-chain`
227
+ queries exit non-zero, including on repositories without Java sources.
228
+
221
229
  **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
222
230
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
223
231
  IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
@@ -243,7 +251,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
243
251
  # pip / pipx
244
252
  pipx install sourcecode # or: pip install sourcecode
245
253
 
246
- ask version # ask 5.9.3 — and, on a build that has aged,
254
+ ask version # ask 5.9.4 — and, on a build that has aged,
247
255
  # how many releases have probably shipped since
248
256
  ```
249
257
 
@@ -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.3-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.4-blue)
14
14
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
15
15
 
16
16
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -147,7 +147,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
147
147
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
148
148
  unset, or set it to `0`, to disable the ceiling explicitly.
149
149
 
150
- **Current performance status.** Release 5.9.3 retains the shared Canonical IR
150
+ **Current performance status.** Release 5.9.4 retains the shared Canonical IR
151
151
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
152
152
  runs; the no-label path remains parse-free. These are implementation properties,
153
153
  not duration promises. A controlled external warm-path audit has opened performance
@@ -169,6 +169,14 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
169
169
  invalid input rather than treated as an empty repository. This prevents silent
170
170
  entitlement errors in CI and does not change per-repository gates or billing.
171
171
 
172
+ Release 5.9.4 also hardens the boundary contracts: missing consumer repositories,
173
+ malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
174
+ input errors; duplicate same-commit baselines are never overwritten. `posture
175
+ --diff` validates unknown profiles when the repository declares profiles. In
176
+ `endpoints --compact`, an empty `endpoints` list is explicitly marked as an
177
+ intentional omission, not an empty API; unresolved `impact` and `impact-chain`
178
+ queries exit non-zero, including on repositories without Java sources.
179
+
172
180
  **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
173
181
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
174
182
  IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
@@ -194,7 +202,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
194
202
  # pip / pipx
195
203
  pipx install sourcecode # or: pip install sourcecode
196
204
 
197
- ask version # ask 5.9.3 — and, on a build that has aged,
205
+ ask version # ask 5.9.4 — and, on a build that has aged,
198
206
  # how many releases have probably shipped since
199
207
  ```
200
208
 
@@ -0,0 +1,96 @@
1
+ # External Audit Intake — ASK 5.9.3
2
+
3
+ **Received:** 2026-08-27
4
+ **Scope:** reliability, semantic consistency, agent ergonomics and commercial fit
5
+ **Evidence base:** two external reports covering five parallel batches, eight-plus
6
+ real Java repositories and approximately 180 CLI invocations
7
+
8
+ ## Executive disposition
9
+
10
+ The reports use different rubrics and must not be collapsed into one KPI:
11
+
12
+ - **7.2/10** for the first reliability and commercial review. It reports five
13
+ silent failures, one factual help error and strong agent-oriented bounding.
14
+ - **6.5/10** for the broader semantic and cross-repository review. It reports a
15
+ critical nondeterminism in `selftest`, a high-confidence Spring detection false
16
+ positive and several lower-severity contract inconsistencies.
17
+
18
+ The audit confirms that no analysed repository was modified: five batches remained
19
+ clean, only ASK cache artefacts were created, and no Java files or commits were
20
+ written. It also confirms strong structured errors when an error path is reached,
21
+ default non-destructiveness, deterministic bounding in most commands and accurate
22
+ Spring analysis across Boot 4, Boot 2 and classic Spring repositories.
23
+
24
+ ## Accepted defects and regressions
25
+
26
+ The following are accepted into the engineering queue because the reports provide
27
+ reproduction details or a directly observable contract violation:
28
+
29
+ | ID | Severity | Finding | Triage |
30
+ |---|---:|---|---|
31
+ | `AUD-610-B01` | P0 | `ask selftest .` is nondeterministic: intermittent empty exit-1, hang or success across four repositories; individual rows are stable. | Open. Treat as an aggregation/concurrency or uncaught-worker failure until a controlled trace proves otherwise. A silent failure in the product's own reliability command blocks strong reliability claims. |
32
+ | `AUD-610-B02` | P1 | Root `ask . --compact/-agent -f yaml` can exit 1 with both streams empty. | Open. Reproduce on a clean cache and capture the failing subprocess boundary before choosing a fix. |
33
+ | `AUD-610-B03` | P1 | `ask audit-report .` fails silently in markdown, JSON and YAML, with and without output file. | Open. The documented flagship evidence path must return a payload or structured diagnostic, never zero bytes. |
34
+ | `AUD-610-B04` | P1 | `ask risk . --limit 0` crashes despite `0` being a legal documented value. | Open. Add the boundary regression and preserve the existing rejection for negative limits. |
35
+ | `AUD-610-B05` | P1 | `ask endpoints . --consumer <missing>` does not reject the missing consumer path and can produce an oversized unfiltered result. | Open. Validate consumer paths and prove the filter changes the analysed population. |
36
+ | `AUD-610-B06` | P1 | `spring-audit` reports `spring_detected: true` for ANTLR4 after cache clear, while `migrate-check` says no Spring usage. | Open. Establish one shared stack-detection authority; do not infer Spring from unrelated XML or dependency names. |
37
+ | `AUD-610-B07` | P2 | `pack gate --since <missing-ref>` collapses the structured base-ref error into generic `UNVERIFIED`. | Open. Preserve the cause and actionable ref error through pack aggregation. |
38
+ | `AUD-610-B08` | P2 | Malformed CVE feeds yield `status: ok` with the parse failure buried in limitations. | Open. A broken security feed must be visibly non-successful and fail closed for automation. |
39
+ | `AUD-610-B09` | P2 | Unknown profile names in `posture --diff` are accepted without a `PROFILE_NOT_FOUND`-style diagnostic. | Open. Validate profile identifiers against the repository's declared profile set. |
40
+ | `AUD-610-B10` | P2 | Re-capturing the same baseline commit with another `--ref` silently overwrites the first record. | Open. Require explicit replacement or preserve both records; the series contract says history is not reconstructable. |
41
+
42
+ ## Contract and semantic debt
43
+
44
+ These items are not all regressions, but they weaken cross-command coherence and are
45
+ carried as follow-up acceptance criteria:
46
+
47
+ - `pr-impact` root help incorrectly says `--files` consumes a unified diff from stdin;
48
+ it consumes changed-file paths. The help is factually wrong and must be corrected.
49
+ - `impact-chain`, `impact` and related commands use different `not_found` risk values
50
+ (`0.0`, `low` and `null`). Define one shared unknown/not-found contract and its basis.
51
+ - `endpoints --compact` publishes `endpoints: []` beside a nonzero `total`, while the
52
+ reason is buried in `_meta.answer_bounds`; place the bounded projection explanation
53
+ beside the affected field or expose a named summary field.
54
+ - `migrate-check` can headline a Boot migration at monorepo root when only a minority
55
+ module is Boot-based; attribute the signal to its module and publish mixed-stack scope.
56
+ - `custom_gate_inferred` lacks per-case provenance for inferred counts that exceed
57
+ direct annotation matches; document inheritance evidence or lower the claim.
58
+ - `self-audit` and `mcp list-tools` report different populations (104 versus 110)
59
+ without explaining that CLI registration and MCP exposure are distinct counts.
60
+ - `baseline diff`/`trend` fail without history while `baseline attest` returns
61
+ `no_history`; either document the intentional distinction or unify the family.
62
+ - A replacement character was observed in `posture` non-coverage output. The separate
63
+ UTF-8 `chunk-file` check passed, so the encoding issue remains localized and needs a
64
+ raw reproduction before a parser change.
65
+ - One `retrieve` invocation failed silently and then passed on immediate retry. It is
66
+ not promoted to a confirmed regression without a second controlled reproduction, but
67
+ logging/timeout evidence is warranted.
68
+
69
+ ## Confirmed strengths and non-regressions
70
+
71
+ - `audit-report --sign-key` and `audit-verify` remain functional offline HMAC-SHA256
72
+ integrity checks; this is tamper-evident integrity, not public PKI or certification.
73
+ - `baseline attest` is deterministic and explicit about non-coverage, but remains
74
+ unsigned; `remediation-report` describes ASK's own ledger, not the user's repository.
75
+ - `self-audit` passed its four internal checks in the broader run; the reported count
76
+ discrepancy is a disclosure problem, not evidence that either registry is corrupt.
77
+ - Spring semantic analysis, JAX-RS explanation, `verify` exit semantics, cache reuse,
78
+ UTF-8 chunk preservation and default dry-run/non-destructive behaviour held in the
79
+ tested repositories.
80
+ - The reported cold-cache figures vary within the supplied range and are not, by
81
+ themselves, a performance regression.
82
+
83
+ ## Commercial interpretation
84
+
85
+ The deterministic Spring context and agent-oriented bounding remain differentiated,
86
+ and signed audit bundles strengthen the evidence workflow. However, the flagship
87
+ silent failures and `selftest` nondeterminism directly undermine a reliability-led
88
+ commercial claim. The appropriate position is **conditional pilot**, not an annual
89
+ purchase recommendation, until `AUD-610-B01` through `B06` are fixed and independently
90
+ retested.
91
+
92
+ The external price bands ($25-40 and $35-50 per developer/month in the two reports)
93
+ are hypotheses, not pricing evidence. No price change, compliance claim or ENS/CRA
94
+ certification claim follows from this audit. The next commercial proof remains a named
95
+ customer reference, signed historical evidence and validated control mapping.
96
+
@@ -3,7 +3,17 @@
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.3`; external reconciliation `AUD-608` is implemented.**
6
+ > **CURRENT QUEUE — release `5.9.4`; external reconciliation `AUD-610` is implemented for the reproducible fixes.**
7
+ > The 2026-08-27 external review adds `AUD-610-B01` through `AUD-610-B10`, led by
8
+ > silent `selftest` nondeterminism, silent root/audit-report failures, a legal-zero
9
+ > `risk --limit 0` crash, an unvalidated consumer path and contradictory Spring
10
+ > detection. The reproducible boundary defects are closed in `5.9.4`: consumer
11
+ > admission (`86ed0a3`), CVE feed integrity (`abc6319`), gate ref admission
12
+ > (`6690a7f`), posture profile admission (`f7335b1`, `6e75646`), baseline
13
+ > collision protection (`cbe4da9`), compact endpoint disclosure (`8a1936f`)
14
+ > and unresolved impact exits (`c07581a`). The non-reproduced reliability and
15
+ > Spring observations remain open and must not be presented as fixed. Full triage is in
16
+ > [`AUDIT-2026-08-27-EXTERNAL-5.9.3.md`](AUDIT-2026-08-27-EXTERNAL-5.9.3.md).
7
17
  > The 2026-08-27 external review adds `AUD-609-B01` (overlapping workspace paths
8
18
  > double-count Java files) and `AUD-609-B02` (missing workspace paths accepted as
9
19
  > empty repositories); both are fixed in `5.9.3`. It reports no regression in the
@@ -5,7 +5,7 @@
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 UPDATE — release `5.9.3`, following the external `5.9.0` reconciliation (`AUD-608`).**
8
+ > **CURRENT UPDATE — release `5.9.4`, following the external `5.9.3` reconciliation.**
9
9
  > The commercial increment adds stateless context budgets, a reproducible context-cost harness,
10
10
  > source-level migration SARIF and an opt-in workspace entitlement pilot. Advisory behaviour remains
11
11
  > the default; named-buyer validation is still required before broad enforcement.
@@ -34,6 +34,26 @@
34
34
  > Workspace entitlement is therefore safer to measure, but remains advisory by default;
35
35
  > no pricing or enforcement decision is authorized by this fix alone.
36
36
 
37
+ > **EXTERNAL REVIEW — 5.9.3, received 2026-08-27.** Two independent lenses score the
38
+ > build **7.2/10** and **6.5/10**. The reports confirm clean, non-destructive execution
39
+ > across five batches and strong structured errors on normal validation paths, but open
40
+ > a critical reliability issue: `selftest` intermittently hangs or exits silently with
41
+ > no output. They also reproduce silent failures in the root YAML path and all
42
+ > `audit-report` formats, plus a legal-zero `risk --limit 0` crash, an unvalidated
43
+ > `endpoints --consumer` path and contradictory Spring detection on ANTLR4. These are
44
+ > release-blocking reliability concerns for an annual buyer commitment. The commercial
45
+ > posture is conditional pilot until the flagship failures are fixed and re-tested.
46
+ > Full triage: [`AUDIT-2026-08-27-EXTERNAL-5.9.3.md`](AUDIT-2026-08-27-EXTERNAL-5.9.3.md).
47
+
48
+ > **5.9.4 reliability correction.** The reproducible contract defects from the
49
+ > latest review are closed: missing consumer paths and malformed CVE feeds now
50
+ > fail closed; `pack gate` rejects unresolved refs; posture profile diffs reject
51
+ > unknown declared-population names; baselines refuse same-commit overwrite;
52
+ > compact endpoint output explains omitted rows; and unresolved impact queries
53
+ > return non-zero even without Java sources. The commercial position remains a
54
+ > conditional pilot because the independent `selftest`, root, `audit-report`,
55
+ > `risk --limit 0` and ANTLR4 observations still require reproduction or closure.
56
+
37
57
  > **HISTORICAL STATUS — release `5.9.0`, following two external audits of `5.8.32`, 2026-08-26.** Two
38
58
  > independent rounds scored the release **9.7/10** (reverification) and **8/10** (comparison against
39
59
  > `5.8.31`). **Neither round reported a regression**, and both maintained the same commercial
@@ -1,6 +1,6 @@
1
1
  # Manual de usuario — ASK Engine
2
2
 
3
- > Versión de la herramienta: **5.8.21** · El comando que se ejecuta es `ask`.
3
+ > Versión de la herramienta: **5.9.4** · El comando que se ejecuta es `ask`.
4
4
  > (`sourcecode` sigue funcionando como alias en desactivación y reenvía a `ask`.)
5
5
  > Público: personas que van a usar `ask` por primera vez, sin conocimiento previo.
6
6
 
@@ -8,6 +8,21 @@
8
8
 
9
9
  ## 1. ¿Qué es ASK Engine?
10
10
 
11
+ ### Contratos de fiabilidad de la versión 5.9.4
12
+
13
+ Las entradas inválidas se rechazan antes del análisis costoso mediante el
14
+ envelope estructurado `INVALID_INPUT`: un `--consumer` inexistente, un feed CVE
15
+ mal formado o una referencia `pack gate --since` que no existe nunca se tratan
16
+ como un repositorio vacío ni como `UNVERIFIED`. `posture --diff` valida los
17
+ perfiles desconocidos cuando el repositorio declara su población de perfiles.
18
+
19
+ `baseline capture` no sobrescribe la captura de un mismo commit; en pipelines
20
+ puede usarse `--auto` para omitirla. En `endpoints --compact`, una lista
21
+ `endpoints: []` significa que las filas se omitieron deliberadamente: consulta
22
+ `endpoints_note`, `endpoints_omitted` y `total`, porque no significa que no haya
23
+ rutas. `impact` e `impact-chain` devuelven código de salida 1 si no resuelven
24
+ el objetivo, también cuando el repositorio no contiene fuentes Java.
25
+
11
26
  **ASK** significa **Actionable Software Knowledge** (conocimiento accionable sobre el
12
27
  software); el producto es el *Actionable Software Knowledge Engine*, abreviado
13
28
  **ASK Engine**, y el comando que se ejecuta es `ask`.
@@ -49,6 +49,15 @@ customer reference, concrete control translation and buyer evidence are still
49
49
  required before changing the price, activating workspace enforcement or claiming
50
50
  compliance-market fit. External price opinions are hypotheses, not pricing data.
51
51
 
52
+ The 5.9.3 external review changes the commercial gate: ASK may be evaluated in a
53
+ short, bounded pilot, but the product must not make a reliability-led annual
54
+ commitment while `selftest` can fail silently or hang and flagship evidence paths
55
+ can return zero bytes. The differentiator remains credible; the purchase proof is
56
+ not. The route therefore requires the confirmed silent-failure and stack-detection
57
+ items in [`AUDIT-2026-08-27-EXTERNAL-5.9.3.md`](AUDIT-2026-08-27-EXTERNAL-5.9.3.md)
58
+ to close and survive independent retesting before price or compliance positioning
59
+ is strengthened.
60
+
52
61
  ## Individual commands and packs
53
62
 
54
63
  Every existing command remains supported for users who want a precise answer:
@@ -46,15 +46,30 @@ 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.3, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.9.4, `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.3, with release-artifact verification
55
+ the two pack fixes are included in release 5.9.4, with release-artifact verification
56
56
  remaining for detached execution and pack evidence.
57
57
 
58
+ ### Reliability contracts in 5.9.4
59
+
60
+ Invalid analysis inputs fail before expensive work and use the structured
61
+ `INVALID_INPUT` envelope: a missing `--consumer` repository, a malformed CVE
62
+ feed, or an unresolved `pack gate --since` ref is never treated as an empty or
63
+ `UNVERIFIED` result. `posture --diff` reports unknown profiles when the project
64
+ declares profiles. `baseline capture` does not replace a snapshot already stored
65
+ for the same commit; use `--auto` when a pipeline should skip it.
66
+
67
+ With `endpoints --compact`, `endpoints: []` means the rows were deliberately
68
+ omitted. Read `endpoints_note`, `endpoints_omitted` and `total`; an empty list is
69
+ not evidence that the API has no routes. `impact` and `impact-chain` return exit
70
+ code 1 when the target is unresolved, including when the selected repository
71
+ contains no Java sources.
72
+
58
73
  ---
59
74
 
60
75
  ## The semantic engine
@@ -221,7 +236,7 @@ pipx install sourcecode # isolated install, no venv needed
221
236
 
222
237
  # Verify
223
238
  ask version
224
- # ask 5.9.3
239
+ # ask 5.9.4
225
240
  ```
226
241
 
227
242
  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.3"
7
+ version = "5.9.4"
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.3"
7
+ __version__ = "5.9.4"
@@ -445,11 +445,15 @@ def _announce_ask_dir(ask_dir: Path) -> None:
445
445
 
446
446
 
447
447
  def write_baseline(baseline: dict, out_dir: Path) -> Path:
448
- """Write `baseline` as deterministic JSON under `out_dir`; return the file path."""
448
+ """Write a new baseline without replacing an existing commit snapshot."""
449
449
  _readonly.guard(out_dir, what="baseline history directory")
450
450
  out_dir.mkdir(parents=True, exist_ok=True)
451
451
  protect_ask_dir(out_dir)
452
452
  path = out_dir / _baseline_filename(baseline)
453
+ if path.exists():
454
+ raise FileExistsError(
455
+ f"Baseline already exists for commit {baseline.get('commit') or '-'}: {path}"
456
+ )
453
457
  path.write_text(
454
458
  json.dumps(baseline, sort_keys=True, indent=2) + "\n", encoding="utf-8"
455
459
  )
@@ -4552,6 +4552,25 @@ def pack_gate_cmd(
4552
4552
  )
4553
4553
  raise typer.Exit(code=2)
4554
4554
  comparison_ref = since
4555
+ if since is not None:
4556
+ from sourcecode.git_checkout import RefError, repo_root, resolve_ref
4557
+
4558
+ try:
4559
+ resolve_ref(repo_root(root), since)
4560
+ except RefError as exc:
4561
+ # Test doubles and callers that provide a non-Git analysis root are
4562
+ # still handled by the existing pack component contracts. Only a
4563
+ # ref failure in an actual repository is an invalid comparison.
4564
+ if exc.code == "not_a_git_repository":
4565
+ pass
4566
+ else:
4567
+ _emit_error_json(
4568
+ INVALID_INPUT_CODE,
4569
+ str(exc),
4570
+ ref=exc.ref or since,
4571
+ hint="Use a commit, tag, or local branch that exists in the repository.",
4572
+ )
4573
+ raise typer.Exit(code=2)
4555
4574
  if pr is not None:
4556
4575
  try:
4557
4576
  from sourcecode.github_diff import pull_request_base_ref
@@ -8578,6 +8597,9 @@ def impact_cmd(
8578
8597
  not_found — no symbol and no substring. `risk_score` is null, never 0:
8579
8598
  nothing was measured, which is not measuring zero.
8580
8599
 
8600
+ An unresolved target exits with code 1, including when the selected repository
8601
+ contains no Java sources; the structured answer still names `not_found`.
8602
+
8581
8603
  \b
8582
8604
  NOTE: Free on repos up to the size limit; Pro unlocks enterprise-scale
8583
8605
  monoliths. Run 'ask license' for details.
@@ -8652,7 +8674,7 @@ def impact_cmd(
8652
8674
  format,
8653
8675
  )
8654
8676
  _emit_command_output(_nf_output, output_path, copy)
8655
- return
8677
+ _exit_on_unresolved_target("not_found")
8656
8678
 
8657
8679
  _prog = Progress()
8658
8680
  _prog.start(f"building CIR ({len(file_list)} files) for impact analysis")
@@ -8902,7 +8924,8 @@ def endpoints_cmd(
8902
8924
  False, "--compact",
8903
8925
  help="Answer how exposed the repository is without listing every endpoint: "
8904
8926
  "counts by method, by security policy and by controller. Every count is "
8905
- "measured over the full population.",
8927
+ "measured over the full population; an empty `endpoints` list means the "
8928
+ "rows were intentionally omitted, not that no endpoints exist.",
8906
8929
  ),
8907
8930
  no_cache: bool = typer.Option(
8908
8931
  False, "--no-cache",
@@ -8980,6 +9003,13 @@ def endpoints_cmd(
8980
9003
  _enforce_format("endpoints", format)
8981
9004
 
8982
9005
  target = _admit_path(path)
9006
+ if consumer:
9007
+ # A missing consumer must fail before the server scan. Treating it as an
9008
+ # empty consumer silently turns a requested join into an unfiltered one.
9009
+ consumer = [
9010
+ _admit_path(item, usage="endpoints --consumer")
9011
+ for item in consumer
9012
+ ]
8983
9013
 
8984
9014
  # AUD-591-A10: a prefix that is not a route selects nothing and reports it
8985
9015
  # as no exposure. Rejected before the analysis, so the shell rewrite is
@@ -9116,6 +9146,12 @@ def endpoints_cmd(
9116
9146
 
9117
9147
  _listed = len(data.get("endpoints", []))
9118
9148
  data["endpoints"] = []
9149
+ data["endpoints_note"] = (
9150
+ f"The endpoints list is intentionally omitted by --compact; "
9151
+ f"{_listed} endpoint(s) were measured. An empty `endpoints` list "
9152
+ "does not mean that the repository has no endpoints. Re-run without "
9153
+ "--compact or narrow the request to retrieve rows."
9154
+ )
9119
9155
  data["endpoints_omitted"] = {
9120
9156
  "total": _listed,
9121
9157
  "shown": 0,
@@ -10599,7 +10635,9 @@ def baseline_capture_cmd(
10599
10635
  ref: Optional[str] = typer.Option(
10600
10636
  None, "--ref",
10601
10637
  help="Human label for this baseline (e.g. a version or milestone). "
10602
- "The commit is recorded automatically when the path is a git repo.",
10638
+ "The commit is recorded automatically when the path is a git repo. "
10639
+ "A capture never overwrites an existing snapshot for the same commit; "
10640
+ "use --auto to skip an already captured commit.",
10603
10641
  ),
10604
10642
  kind: str = typer.Option(
10605
10643
  "architecture", "--kind",
@@ -10750,7 +10788,16 @@ def baseline_capture_cmd(
10750
10788
  baseline = build_baseline(
10751
10789
  _cir, ref=ref, commit=git_commit(target_dir), record_env=record_env,
10752
10790
  )
10753
- written = write_baseline(baseline, dest)
10791
+ try:
10792
+ written = write_baseline(baseline, dest)
10793
+ except FileExistsError as exc:
10794
+ _prog.finish()
10795
+ _emit_error_json(
10796
+ INVALID_INPUT_CODE,
10797
+ str(exc),
10798
+ hint="Use `--auto` to skip an already captured commit, or capture a new commit.",
10799
+ )
10800
+ raise typer.Exit(code=1)
10754
10801
  _prog.finish()
10755
10802
 
10756
10803
  t = baseline["totals"]
@@ -14519,7 +14566,9 @@ def posture_cmd(
14519
14566
  Two axes, and they are different questions. `--diff` holds the tree fixed
14520
14567
  and moves the profile set. `--diff-ref` (and `--since`) hold the profile set
14521
14568
  fixed and move the tree: *does this change what a client can reach without
14522
- authenticating?* That one takes `--fail-on` and is the per-PR gate.
14569
+ authenticating?* That one takes `--fail-on` and is the per-PR gate. When the
14570
+ repository declares profiles, `--diff` rejects a profile name outside that
14571
+ population instead of comparing a configuration that does not exist.
14523
14572
 
14524
14573
  \b
14525
14574
  Examples:
@@ -14743,10 +14792,28 @@ def posture_cmd(
14743
14792
  )
14744
14793
  raise typer.Exit(code=1)
14745
14794
  left_raw, right_raw = diff.split(":", 1)
14795
+ left_profiles = _parse_set(left_raw, flag="--diff (left side)")
14796
+ right_profiles = _parse_set(right_raw, flag="--diff (right side)")
14797
+ from sourcecode.spring_profiles import profile_population
14798
+
14799
+ declared_profiles = set(profile_population(path).names)
14800
+ missing_profiles = sorted(
14801
+ (left_profiles | right_profiles) - declared_profiles
14802
+ )
14803
+ if missing_profiles and declared_profiles:
14804
+ _emit_error_json(
14805
+ INVALID_INPUT_CODE,
14806
+ "--diff names profile(s) not declared by the repository: "
14807
+ + ", ".join(missing_profiles),
14808
+ profiles=missing_profiles,
14809
+ hint="Use profiles reported by `ask posture <repo>`; use a single "
14810
+ "posture run to inspect an undeclared profile explicitly.",
14811
+ )
14812
+ raise typer.Exit(code=1)
14746
14813
  data = diff_posture(
14747
14814
  path,
14748
- _parse_set(left_raw, flag="--diff (left side)"),
14749
- _parse_set(right_raw, flag="--diff (right side)"),
14815
+ left_profiles,
14816
+ right_profiles,
14750
14817
  overrides,
14751
14818
  )
14752
14819
  else:
@@ -15571,7 +15638,7 @@ def impact_chain_cmd(
15571
15638
  output = _serialize_dict(data, format)
15572
15639
  _emit_command_output(output, output_path, copy,
15573
15640
  success_msg=f"Impact chain written to {output_path}")
15574
- return
15641
+ _exit_on_unresolved_target("not_found")
15575
15642
 
15576
15643
  _prog = Progress()
15577
15644
  _prog.start(f"analyzing impact ({len(file_list)} files)")
@@ -258,9 +258,14 @@ def load_feed(feed_path: Path, *, now: Optional[datetime] = None) -> Feed:
258
258
  newest = stamp
259
259
 
260
260
  if unreadable:
261
+ feed.error = f"{unreadable} feed file(s) were not valid JSON"
261
262
  feed.limitations.append(
262
- f"{unreadable} feed file(s) were not valid JSON and were skipped"
263
+ f"{unreadable} feed file(s) were not valid JSON; the feed was rejected"
263
264
  )
265
+ # Partial advisory data is unsafe for a reachability gate: a skipped
266
+ # file can contain the one advisory that should have blocked the run.
267
+ feed.loaded = False
268
+ return feed
264
269
  feed.packages = len(feed.by_package)
265
270
  feed.loaded = True
266
271
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes