sourcecode 5.8.32__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 (444) hide show
  1. sourcecode-5.9.1/.github/workflows/windows-battery.yml +46 -0
  2. {sourcecode-5.8.32 → sourcecode-5.9.1}/CHANGELOG.md +88 -0
  3. {sourcecode-5.8.32 → sourcecode-5.9.1}/PKG-INFO +62 -15
  4. {sourcecode-5.8.32 → sourcecode-5.9.1}/README.md +61 -14
  5. sourcecode-5.9.1/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +278 -0
  6. sourcecode-5.9.1/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +98 -0
  7. sourcecode-5.9.1/docs/AUDIT-2026-08-26-MONETIZATION.md +86 -0
  8. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/CACHE.md +7 -0
  9. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/DEFECT-LEDGER.md +87 -0
  10. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/DEMO-5MIN.md +16 -0
  11. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/DEVELOPMENT-ROADMAP.md +64 -19
  12. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/EXECUTIVE-ROADMAP.md +62 -13
  13. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/MANUAL-USUARIO.md +135 -0
  14. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/PRODUCT-ROUTE.md +30 -0
  15. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +12 -2
  16. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/USER_GUIDE.md +58 -5
  17. {sourcecode-5.8.32 → sourcecode-5.9.1}/pyproject.toml +1 -1
  18. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/__init__.py +1 -1
  19. sourcecode-5.9.1/src/sourcecode/access_drift.py +232 -0
  20. sourcecode-5.9.1/src/sourcecode/c4_render.py +245 -0
  21. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/cache_model.py +28 -0
  22. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/cli.py +1203 -5
  23. sourcecode-5.9.1/src/sourcecode/cve_feed.py +290 -0
  24. sourcecode-5.9.1/src/sourcecode/cve_reachability.py +523 -0
  25. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/explain.py +25 -6
  26. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/file_chunker.py +15 -4
  27. sourcecode-5.9.1/src/sourcecode/findings_baseline.py +270 -0
  28. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/format_contract.py +7 -0
  29. sourcecode-5.9.1/src/sourcecode/intent_router.py +402 -0
  30. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/non_coverage.py +15 -7
  31. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/output_bounds.py +34 -8
  32. sourcecode-5.9.1/src/sourcecode/pr_risk.py +281 -0
  33. sourcecode-5.9.1/src/sourcecode/remediation_flow.py +259 -0
  34. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schema_registry.py +16 -0
  35. sourcecode-5.9.1/src/sourcecode/schemas/cve-reachability-v1.schema.json +130 -0
  36. sourcecode-5.9.1/src/sourcecode/self_audit.py +289 -0
  37. sourcecode-5.9.1/src/sourcecode/watch_loop.py +214 -0
  38. sourcecode-5.8.32/.github/workflows/windows-battery.yml +0 -60
  39. {sourcecode-5.8.32 → sourcecode-5.9.1}/.github/workflows/build-windows.yml +0 -0
  40. {sourcecode-5.8.32 → sourcecode-5.9.1}/.github/workflows/perf-gate.yml +0 -0
  41. {sourcecode-5.8.32 → sourcecode-5.9.1}/.gitignore +0 -0
  42. {sourcecode-5.8.32 → sourcecode-5.9.1}/.ruff.toml +0 -0
  43. {sourcecode-5.8.32 → sourcecode-5.9.1}/CLAUDE.md +0 -0
  44. {sourcecode-5.8.32 → sourcecode-5.9.1}/CODE_OF_CONDUCT.md +0 -0
  45. {sourcecode-5.8.32 → sourcecode-5.9.1}/CONTRIBUTING.md +0 -0
  46. {sourcecode-5.8.32 → sourcecode-5.9.1}/LICENSE +0 -0
  47. {sourcecode-5.8.32 → sourcecode-5.9.1}/NOTICE +0 -0
  48. {sourcecode-5.8.32 → sourcecode-5.9.1}/SECURITY.md +0 -0
  49. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  50. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  51. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  52. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  53. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  54. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  55. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  56. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  57. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  58. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  59. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  60. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
  61. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  62. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/COMMERCIAL-OFFER.md +0 -0
  63. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/CUSTOMER-VALIDATION.md +0 -0
  64. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  65. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/EXECUTION-PLAN-12MO.md +0 -0
  66. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/MODERNIZATION.md +0 -0
  67. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/PRODUCT_AUDIT.md +0 -0
  68. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/PRODUCT_IDENTITY.md +0 -0
  69. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/PRODUCT_TIERS.md +0 -0
  70. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/RC1-CHECKLIST.md +0 -0
  71. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/RELEASE-CHECKLIST.md +0 -0
  72. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  73. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  74. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-assessment-report.md +0 -0
  75. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  76. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  77. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  78. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  79. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  80. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  81. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  82. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  83. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  84. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  85. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  86. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  87. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  88. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  89. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  90. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  91. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  92. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  93. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  94. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  95. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  96. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  97. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0006-performance-harness.md +0 -0
  98. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  99. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  100. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/consumer-disposition-inventory.md +0 -0
  101. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/overview.md +0 -0
  102. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/product-architecture-review.md +0 -0
  103. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/product-strategy-layering.md +0 -0
  104. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  105. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/architecture/semantic-ir-roadmap.md +0 -0
  106. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/baseline-ci.yml +0 -0
  107. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/commercial-pipeline-audit.md +0 -0
  108. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/contracts-ci.yml +0 -0
  109. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/contracts.md +0 -0
  110. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  111. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  112. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  113. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  114. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  115. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  116. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  117. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  118. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/licensing-schema.md +0 -0
  119. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/migrate-check.md +0 -0
  120. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/pack-gate-github-actions.yml +0 -0
  121. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/pack-gate-gitlab.yml +0 -0
  122. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/README.md +0 -0
  123. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/REGRESSION-GATE.md +0 -0
  124. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  125. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  126. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  127. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  128. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  129. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  130. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  131. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  132. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  133. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  134. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  135. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  136. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  137. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  138. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  139. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  140. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  141. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  142. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  143. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  144. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  145. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  146. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  147. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  148. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  149. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  150. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  151. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  152. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  153. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  154. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  155. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  156. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  157. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  158. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  159. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  160. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  161. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  162. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  163. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  164. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  165. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  166. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/README.md +0 -0
  167. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  168. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  169. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  170. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  171. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  172. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  173. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/baselines/reference-best/README.md +0 -0
  174. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  175. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/posture.md +0 -0
  176. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/privacy.md +0 -0
  177. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/pro-experience-audit.md +0 -0
  178. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/schema.md +0 -0
  179. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/spec/envelope-v1.md +0 -0
  180. {sourcecode-5.8.32 → sourcecode-5.9.1}/docs/spring-audit-ci.yml +0 -0
  181. {sourcecode-5.8.32 → sourcecode-5.9.1}/hatch_build.py +0 -0
  182. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/compare_integration_engines.py +0 -0
  183. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/customer_smoke_test.sh +0 -0
  184. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/generate_jdk_exports.py +0 -0
  185. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/perf_gate.py +0 -0
  186. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/perf_harness.py +0 -0
  187. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/sync_gate_anchors.py +0 -0
  188. {sourcecode-5.8.32 → sourcecode-5.9.1}/scripts/test_fast.sh +0 -0
  189. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/__main__.py +0 -0
  190. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/adaptive_scanner.py +0 -0
  191. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/analysis_budget.py +0 -0
  192. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/answer_bounds.py +0 -0
  193. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/archetype.py +0 -0
  194. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/architectural_baseline.py +0 -0
  195. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/architectural_delta.py +0 -0
  196. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/architecture_analyzer.py +0 -0
  197. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/architecture_summary.py +0 -0
  198. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/ast_extractor.py +0 -0
  199. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/audit_clusters.py +0 -0
  200. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/audit_recipe.py +0 -0
  201. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/audit_report.py +0 -0
  202. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/audit_since.py +0 -0
  203. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/baseline_autocapture.py +0 -0
  204. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/breaking_changes.py +0 -0
  205. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/build_modules.py +0 -0
  206. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/build_stamp.py +0 -0
  207. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/bundled_docs.py +0 -0
  208. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/cache.py +0 -0
  209. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/cache_observation.py +0 -0
  210. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/call_surface.py +0 -0
  211. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/caller_metrics.py +0 -0
  212. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/caller_reach.py +0 -0
  213. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/canonical_ir.py +0 -0
  214. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/chain_rules.py +0 -0
  215. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/change_plan.py +0 -0
  216. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/ci_output.py +0 -0
  217. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/cir_graphs.py +0 -0
  218. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/classifier.py +0 -0
  219. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/client_calls.py +0 -0
  220. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/code_notes_analyzer.py +0 -0
  221. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/compare.py +0 -0
  222. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/confidence_analyzer.py +0 -0
  223. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/constraint_diff.py +0 -0
  224. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/consumer_join.py +0 -0
  225. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/container_wiring.py +0 -0
  226. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/context_cache.py +0 -0
  227. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/context_graph.py +0 -0
  228. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/context_scorer.py +0 -0
  229. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/context_summarizer.py +0 -0
  230. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/contract_diff.py +0 -0
  231. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/contract_init.py +0 -0
  232. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/contract_model.py +0 -0
  233. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/contract_pipeline.py +0 -0
  234. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/coverage_parser.py +0 -0
  235. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/data_exposure.py +0 -0
  236. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/data_labels.py +0 -0
  237. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/declarations.py +0 -0
  238. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/defect_classes/__init__.py +0 -0
  239. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/defect_classes/registry.json +0 -0
  240. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/defect_identity.py +0 -0
  241. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/degradation.py +0 -0
  242. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/dependency_analyzer.py +0 -0
  243. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/deployment_prefix.py +0 -0
  244. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detach.py +0 -0
  245. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/__init__.py +0 -0
  246. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/base.py +0 -0
  247. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/csproj_parser.py +0 -0
  248. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/dart.py +0 -0
  249. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/dotnet.py +0 -0
  250. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/elixir.py +0 -0
  251. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/go.py +0 -0
  252. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/heuristic.py +0 -0
  253. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/hybrid.py +0 -0
  254. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/java.py +0 -0
  255. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/jvm_ext.py +0 -0
  256. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/nodejs.py +0 -0
  257. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/parsers.py +0 -0
  258. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/php.py +0 -0
  259. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/project.py +0 -0
  260. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/python.py +0 -0
  261. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/ruby.py +0 -0
  262. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/rust.py +0 -0
  263. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/systems.py +0 -0
  264. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/terraform.py +0 -0
  265. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/detectors/tooling.py +0 -0
  266. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/doc_analyzer.py +0 -0
  267. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/dynamic_argument_surface.py +0 -0
  268. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/empty_reach.py +0 -0
  269. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/endpoint_disposition.py +0 -0
  270. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/endpoint_literals.py +0 -0
  271. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/endpoint_metrics.py +0 -0
  272. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/entrypoint_classifier.py +0 -0
  273. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/env_analyzer.py +0 -0
  274. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/envelope.py +0 -0
  275. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/environment_resolution.py +0 -0
  276. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/error_schema.py +0 -0
  277. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/evidence_provider.py +0 -0
  278. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/execution_plan.py +0 -0
  279. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/explain_endpoint.py +0 -0
  280. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/facts/__init__.py +0 -0
  281. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/facts/registry.json +0 -0
  282. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/field_deprecations.py +0 -0
  283. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/file_classifier.py +0 -0
  284. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/filter_surface.py +0 -0
  285. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/fqn_utils.py +0 -0
  286. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/functional_routes.py +0 -0
  287. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/gate_anchors.py +0 -0
  288. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/git_analyzer.py +0 -0
  289. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/git_checkout.py +0 -0
  290. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/github_diff.py +0 -0
  291. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/graph_analyzer.py +0 -0
  292. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/graph_evidence.py +0 -0
  293. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/hibernate_strat.py +0 -0
  294. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/identity_fallback.py +0 -0
  295. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/integration_coordinates.py +0 -0
  296. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/jdk_exports.py +0 -0
  297. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/license.py +0 -0
  298. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/manifest_cache.py +0 -0
  299. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/__init__.py +0 -0
  300. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/dependency_import.py +0 -0
  301. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  302. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  303. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  304. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  305. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  306. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/orchestrator.py +0 -0
  307. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/registry.py +0 -0
  308. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/runner.py +0 -0
  309. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp/server.py +0 -0
  310. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/mcp_nudge.py +0 -0
  311. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/metrics_analyzer.py +0 -0
  312. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/migrate_check.py +0 -0
  313. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/migration_apply.py +0 -0
  314. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/migration_blast.py +0 -0
  315. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/openapi_surface.py +0 -0
  316. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/openrewrite_recipe.py +0 -0
  317. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/output_budget.py +0 -0
  318. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/output_ceiling.py +0 -0
  319. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/output_encoding.py +0 -0
  320. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/output_sink.py +0 -0
  321. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/pack_manifest.py +0 -0
  322. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/packs.py +0 -0
  323. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/parallel.py +0 -0
  324. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/parse_cache.py +0 -0
  325. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/partial_contract.py +0 -0
  326. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/path_admission.py +0 -0
  327. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/path_display.py +0 -0
  328. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/path_filters.py +0 -0
  329. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/perf.py +0 -0
  330. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/phased_run.py +0 -0
  331. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/pipe_contract.py +0 -0
  332. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/posture.py +0 -0
  333. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/pr_comment_renderer.py +0 -0
  334. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/pr_impact.py +0 -0
  335. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/prepare_context.py +0 -0
  336. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/product_info.py +0 -0
  337. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/progress.py +0 -0
  338. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/provenance.py +0 -0
  339. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/ranking_engine.py +0 -0
  340. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/readiness_timeline.py +0 -0
  341. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/readonly.py +0 -0
  342. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/reconciliation.py +0 -0
  343. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/redactor.py +0 -0
  344. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/reference_facts.py +0 -0
  345. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/regress.py +0 -0
  346. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/release_info.py +0 -0
  347. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/relevance_scorer.py +0 -0
  348. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/remediation_diff.py +0 -0
  349. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/remedies.py +0 -0
  350. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/rename_refactor.py +0 -0
  351. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/repo_classifier.py +0 -0
  352. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/repository_ir.py +0 -0
  353. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/resource_budget.py +0 -0
  354. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/__init__.py +0 -0
  355. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/context.py +0 -0
  356. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/errors.py +0 -0
  357. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/executor.py +0 -0
  358. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/planner.py +0 -0
  359. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/query.py +0 -0
  360. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/request.py +0 -0
  361. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/resolution.py +0 -0
  362. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/result.py +0 -0
  363. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/retriever.py +0 -0
  364. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/runtime.py +0 -0
  365. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps.py +0 -0
  366. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  367. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_graph.py +0 -0
  368. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_impact.py +0 -0
  369. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_intf.py +0 -0
  370. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_struct.py +0 -0
  371. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  372. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/ris.py +0 -0
  373. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/risk.py +0 -0
  374. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/risk_model.py +0 -0
  375. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/rule_catalog.py +0 -0
  376. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/rule_pass.py +0 -0
  377. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/runs.py +0 -0
  378. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/runtime_classifier.py +0 -0
  379. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/sarif.py +0 -0
  380. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/sarif_emit.py +0 -0
  381. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/scanner.py +0 -0
  382. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schema.py +0 -0
  383. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schema_producers.py +0 -0
  384. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  385. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  386. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  387. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  388. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  389. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  390. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/security_chain.py +0 -0
  391. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/security_config.py +0 -0
  392. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/security_config_scan.py +0 -0
  393. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/security_posture.py +0 -0
  394. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/selection_contract.py +0 -0
  395. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/selftest.py +0 -0
  396. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/semantic_analyzer.py +0 -0
  397. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/semantic_impact_engine.py +0 -0
  398. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/semantic_integration_engine.py +0 -0
  399. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/semantic_services.py +0 -0
  400. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/serializer.py +0 -0
  401. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/servlet_surface.py +0 -0
  402. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/source_text.py +0 -0
  403. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_event_topology.py +0 -0
  404. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_findings.py +0 -0
  405. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_impact.py +0 -0
  406. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_model.py +0 -0
  407. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_profiles.py +0 -0
  408. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_properties.py +0 -0
  409. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_security_audit.py +0 -0
  410. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_semantic.py +0 -0
  411. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/spring_tx_analyzer.py +0 -0
  412. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/sql_taint.py +0 -0
  413. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/summarizer.py +0 -0
  414. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/target_admission.py +0 -0
  415. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/__init__.py +0 -0
  416. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/config.py +0 -0
  417. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/consent.py +0 -0
  418. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/events.py +0 -0
  419. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/filters.py +0 -0
  420. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/telemetry/transport.py +0 -0
  421. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/test_gap_ranking.py +0 -0
  422. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/test_sources.py +0 -0
  423. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/text_input.py +0 -0
  424. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/timeline.py +0 -0
  425. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/timeline_cache.py +0 -0
  426. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/token_estimate.py +0 -0
  427. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/tree_utils.py +0 -0
  428. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/type_usage_surface.py +0 -0
  429. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/validation_inference.py +0 -0
  430. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/validation_surface.py +0 -0
  431. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/verify_edit.py +0 -0
  432. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/verify_repo.py +0 -0
  433. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/verify_rules.py +0 -0
  434. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/version_check.py +0 -0
  435. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/waivers.py +0 -0
  436. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/wired_surface.py +0 -0
  437. {sourcecode-5.8.32 → sourcecode-5.9.1}/src/sourcecode/workspace.py +0 -0
  438. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/functions/README.md +0 -0
  439. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/functions/get-license/index.ts +0 -0
  440. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  441. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/functions/telemetry/index.ts +0 -0
  442. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/sql/license_event_ordering.sql +0 -0
  443. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/sql/licensing_schema.sql +0 -0
  444. {sourcecode-5.8.32 → sourcecode-5.9.1}/supabase/sql/telemetry_events.sql +0 -0
@@ -0,0 +1,46 @@
1
+ name: Windows battery
2
+
3
+ # AUD-601-X01 / S-10. Windows remains a release-evidence battery, but a full
4
+ # 20+ minute suite on every worktree commit exhausted the Actions allowance
5
+ # without providing a usable signal. Run it deliberately before a release or
6
+ # while investigating a Windows-specific regression.
7
+
8
+ on:
9
+ workflow_dispatch:
10
+
11
+ concurrency:
12
+ group: windows-battery-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ battery:
17
+ runs-on: windows-latest
18
+ timeout-minutes: 35
19
+ env:
20
+ # CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
21
+ # decodes child-process output with the active code page, turning a valid
22
+ # JSON answer containing source text into an empty/failed test response.
23
+ PYTHONUTF8: "1"
24
+ PYTHONIOENCODING: "utf-8"
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ fetch-depth: 0
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: "3.11"
33
+
34
+ - name: Install
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e .
38
+ pip install pytest pytest-xdist
39
+
40
+ - name: Suite
41
+ run: pytest
42
+ # `runner.*` is valid at step scope. Both stores stay outside the
43
+ # checkout so their files never become untracked input to an analysis.
44
+ env:
45
+ SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
46
+ SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
@@ -1,5 +1,93 @@
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
+
28
+ ## [5.9.0] — 2026-08-26
29
+
30
+ *The `AUD-607` external round, closed: three defects fixed and the whole feature
31
+ intake built, one commit per row. Seven new commands (`cve`, `intent`,
32
+ `remediate`, `pr-risk`, `drift`, `watch`, `self-audit`) and two extended ones
33
+ (`baseline --kind findings`, `export --c4 --render`) make this the largest
34
+ addition to the command surface since 5.0, so the minor version moves.*
35
+
36
+ **Fixed**
37
+
38
+ - `chunk-file` emitted chunk content that did not match its own declared
39
+ `start_line`/`end_line`: the boundary path serialised the untruncated buffer
40
+ while declaring a truncated end line, so a chunk ran past its own range and
41
+ those lines repeated at the head of the next one. A second, separate defect
42
+ made the annotation buffer's clearing guard unreachable, so a field's
43
+ `@Autowired` was carried onto the following method while the field's own
44
+ declaration dropped out of that chunk. The reported "deliberate overlap" is
45
+ refuted; the declared range is now exact and asserted against file content.
46
+ - `explain` answered *"No stereotype detected"* under **Purpose** while listing
47
+ that same class's routes under **REST Endpoints**. Fixed by reading the
48
+ endpoint evidence the answer already computed — not by adding JAX-RS to a
49
+ Spring annotation list, which is the branching this project does not do.
50
+ - `--files -` claimed *"stdin is a terminal"* for a Git Bash/MSYS redirect it
51
+ cannot verify. The message now names the outcome and states both routes into
52
+ it (the C3-106 rule, already applied to `_confirm`).
53
+
54
+ **Added**
55
+
56
+ - `ask cve --feed <osv>` — dependency advisories gated on whether a route can
57
+ **reach** the vulnerable package. Takes no network at analysis time; an
58
+ unreadable feed is a refusal, never a clean scan; nothing answers *"not
59
+ reachable"*, and an unresolvable Maven version is `unknown`, never
60
+ `not_affected`. Schema `cve-reachability-v1`, published as a document.
61
+ - `ask intent "<question>"` — a plain-language question resolved to one of
62
+ `retrieve`'s typed queries. A scored lexical match against a declared
63
+ vocabulary: no model, no generation. Ambiguous or unanchored questions are
64
+ refused with the closest intents named.
65
+ - `ask remediate` — finding → recipe → apply in a dedicated worktree →
66
+ `verify-edit`. Dry by default; an apply that could not be verified reports
67
+ `unverified`, never `applied`. Schema `remediation-plan-v1`.
68
+ - `ask pr-risk` — one verdict for one diff, distinct from `pack gate`'s verdict
69
+ about the repository. `UNKNOWN` outranks `PASS` and fails every gate. Schema
70
+ `pr-risk-v1`.
71
+ - `ask drift` — what changed in the effective access, across time or across two
72
+ profile sets, with one arithmetic for both axes. Schema `access-drift-v1`.
73
+ - `ask watch` — one answer per save against a warm index; `--once` is the
74
+ pre-commit shape. Schema `watch-event-v1`.
75
+ - `ask self-audit` — whether the **installed** build's registries agree with each
76
+ other, and an explicit statement of what it cannot check. Schema
77
+ `self-audit-v1`.
78
+ - `ask baseline capture|diff|trend --kind findings` — the defect population as a
79
+ persisted series, so "how long has this been open?" has an answer. Schema
80
+ `findings-baseline-v1`.
81
+ - `ask export --c4 --render mermaid|svg` — draws the C4 model instead of only
82
+ emitting it, with the node cap written on the canvas.
83
+
84
+ **Note.** Building the features surfaced three defects no audit round had
85
+ reported: the C4 renderer's first version drew report metadata (`summary`,
86
+ `coverage_note`) as system architecture; the watch loop stat-ed
87
+ repository-relative paths against the process CWD and so reported "nothing
88
+ changed" on every tick; and `self-audit` found its own schema identifier
89
+ unregistered on its first run. Each is now held by an assertion.
90
+
3
91
  ## [5.8.32] — 2026-08-26
4
92
 
5
93
  *MCP and documentation alignment release. MCP assessment packs now support
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.32
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.8.32-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.8.32 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.8.32 — 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
 
@@ -332,6 +332,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
332
332
  ask verify /path/to/repo # then: only new violations block
333
333
  ```
334
334
 
335
+ **And the loop that closes.** Finding, question and change each had a command; what they
336
+ did not have was a way through. These are the joins, and each refuses rather than guess:
337
+
338
+ ```bash
339
+ # Which advisories a route can actually REACH — not which are on the classpath.
340
+ # Reads a LOCAL feed; no network is taken, so a CI gate can never pass because a
341
+ # fetch timed out. Nothing answers "not reachable": absence of a resolved edge is
342
+ # not absence of use, and the payload says so.
343
+ ask cve /path/to/repo --feed ./osv-maven.json --reachable-only
344
+
345
+ # Ask in your own words. It SELECTS one of retrieve's 29 typed queries and prints
346
+ # it (--run executes it); it never invents an answer, and a question that fits two
347
+ # intents too closely is refused with both named.
348
+ ask intent "what breaks if I change OrderService?"
349
+
350
+ # Finding → recipe → apply in a dedicated worktree → verify. Dry by default. Most
351
+ # findings are not mechanical, and the plan says which and why.
352
+ ask remediate /path/to/repo
353
+
354
+ # One verdict for THIS diff, not for the repository. A changed file that maps to no
355
+ # class caps the verdict at UNKNOWN — a partial blast radius is not a small one —
356
+ # and UNKNOWN fails every gate.
357
+ git diff --name-only main | ask pr-risk /path/to/repo --files - --fail-on block
358
+
359
+ # What opened up since the last capture, on the axis posture --diff does not have.
360
+ ask drift /path/to/repo --profile prod --capture # record today
361
+ ask drift /path/to/repo --profile prod # then: what moved
362
+
363
+ # While you edit: one answer per save, against the warm index.
364
+ ask watch /path/to/repo --once
365
+
366
+ # Show me the architecture, don't hand me JSON to render.
367
+ ask export /path/to/repo --c4 --render mermaid
368
+ ```
369
+
335
370
  > **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
336
371
  > monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
337
372
  > executes each before writing it — init followed by verify passes by construction.
@@ -360,27 +395,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
360
395
 
361
396
  ### 2 · Impact Analysis
362
397
  Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
363
- `ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
398
+ `ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact` · `ask pr-risk` (one verdict for the diff — `UNKNOWN` when the blast radius has a hole, and `UNKNOWN` fails the gate)
364
399
  → [reference](docs/USER_GUIDE.md#core-commands)
365
400
 
366
401
  ### 3 · Architecture Intelligence
367
402
  The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
368
- `ask export` · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
403
+ `ask export` (`--c4 --render mermaid|svg` draws it) · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
369
404
  → [reference](docs/USER_GUIDE.md#core-commands)
370
405
 
371
406
  ### 4 · Migration & Modernization
372
407
  Is this codebase ready to upgrade? Per-dimension readiness (Jakarta / Spring Boot / JDK / Hibernate), located blockers, an effort estimate, and — with `--blast-radius` — the endpoints whose call path runs through each blocker, so the re-test plan is ordered by regression scope.
373
- `ask migrate-check` · `ask modernize`
408
+ `ask migrate-check` · `ask modernize` · `ask remediate` (finding → recipe → apply → **verify**; dry by default, and an apply it could not verify is never reported as applied)
374
409
  → [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
375
410
 
376
411
  ### 5 · Spring Analysis
377
412
  Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
378
- `ask spring-audit` · `ask validation`
413
+ `ask spring-audit` · `ask validation` · `ask cve` (dependency advisories gated on whether a route can **reach** the vulnerable package — from a local feed, with no network taken)
379
414
  → [reference](docs/USER_GUIDE.md#core-commands)
380
415
 
381
416
  ### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
382
417
  What a profile set **actually wires**: which conditional beans register, which do not, and which conditions could not be decided at all — then the effective endpoint access that follows from the filter chain. `--diff` answers the question nobody else answers in one command: *what changes between `dev` and `prod`, across every endpoint at once.*
383
- `ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v`
418
+ `ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v` · `ask drift` (the same comparison across **time** — what opened up since the last capture)
384
419
  → [posture.md](docs/posture.md)
385
420
 
386
421
  **`--diff-ref` makes it a gate instead of a report.** `--diff` moves the profile set; `--diff-ref origin/main:HEAD` (or `--since origin/main`, which compares a ref with the working tree) moves the *tree* under one profile set and answers *did this branch open an endpoint*. `--fail-on opened` exits 1 when it did. Both refs are read with `git archive` — nothing is written to the repository. The comparison is keyed on the request (`METHOD path`), counts requests only one side serves, and never reports a rule that disappeared as protection gained.
@@ -432,11 +467,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
432
467
 
433
468
  ### 6 · Developer Workflows
434
469
  The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
435
- `ask review-pr` · `ask fix-bug` · `ask prepare-context`
470
+ `ask review-pr` · `ask fix-bug` · `ask prepare-context` · `ask watch` (one answer per save, against a warm index) · `ask intent "<question>"` (a plain-language question resolved to a typed query — it selects one, it never invents an answer)
436
471
  → [reference](docs/USER_GUIDE.md#typical-workflows)
437
472
 
438
473
  ### 7 · Utilities
439
- `ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness)
474
+ `ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness) · `ask self-audit` (does the installed build's own registry agree with itself?)
440
475
  → [reference](docs/USER_GUIDE.md)
441
476
 
442
477
  ---
@@ -485,12 +520,19 @@ from it.
485
520
  | `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
486
521
  | `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
487
522
  | `onboard` / `explain` / `cold-start` | supported | orientation in an unfamiliar repo; per-class summary; bootstrap snapshot | `onboard` publishes `population`, `population_unit` and `population_total` for its source-file universe |
488
- | `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | |
523
+ | `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | `export --c4 --render mermaid\|svg` **draws** the model instead of only emitting it — presentation over the same payload, with the node cap written on the canvas |
489
524
  | `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
490
525
  | `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
491
526
  | `plan` / `compare` / `delta` / `contract-diff` | supported | what to review for a change; candidates by measured cost; outcome of a change; public-contract break | no verdicts, measured cost only |
492
527
  | `validation` | supported | request-body validation coverage and gaps | |
493
- | `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time; `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
528
+ | `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time — and, with `--kind findings`, the **defect population** as a series, so "open since 5.8.28" is answerable without anybody keeping the tally (`first_seen` is the earliest STORED capture, and the payload says so); `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
529
+ | `cve` | supported | which dependency advisories a route can actually **reach** — not which are on the classpath | reads a **local** OSV feed (`--feed`); takes no network at analysis time, so a CI gate can never pass because a fetch timed out. Four verdicts: `reachable` (with the routes), `imported_not_exposed`, `not_observed` and `unknown`. Nothing answers *"not reachable"* — reflection, SPI loading and container wiring reach code no source edge names — and an unresolved Maven version is `unknown`, never `not_affected`. Feed staleness is read off the feed's own dates |
530
+ | `intent` | supported | a plain-language question, resolved to the typed `retrieve` query that answers it | `ask intent "what breaks if I change OrderService?"`. A scored lexical match against a declared vocabulary — **no model, no generation** — so it resolves identically on every machine. It selects a query and prints it; `--run` executes it. A question fitting two intents too closely is refused with both named, because a well-formed answer to a question you did not ask is invisible once printed |
531
+ | `remediate` | supported | the loop from a finding to a **verified** change | audit → recipe → apply in a dedicated worktree → `verify-edit`. Dry by default. Most findings are not mechanical and the plan says which and why; an apply that could not be verified reports `unverified`, never `applied` |
532
+ | `pr-risk` | supported | one verdict for **this diff** — does the change make things worse? | `pack gate` answers about the repository; this answers about the change. Joins `pr-impact` reach, endpoint access, the shared risk model and CODEOWNERS. `--since` differences route inventories so `new_endpoints` is a fact rather than a guess. A changed file that maps to no class caps the verdict at `UNKNOWN`, which fails every gate — a partial blast radius is not a small one |
533
+ | `drift` | supported | what changed in the **effective access**, and when | `--capture` records; the default compares against the last record; `--against` compares two profile sets. One arithmetic for both axes, so the time answer and the environment answer cannot disagree. `newly_unmatched` and `newly_matched` are separate buckets, and a `removed` route is never reported as having become safe |
534
+ | `watch` | supported | what each save affected, against a warm index | one JSON line per tick. `--once` is the pre-commit shape; `--ticks`/`--for` bound the loop. A failed analysis is an `error` tick, never an empty change list; a file added since the warm is `unresolved`, not `unreachable` |
535
+ | `self-audit` | supported | whether the **installed build's** own registries agree with each other | a battery proves the source tree consistent while a user runs a wheel. Checks the cache model, format contract, schema registry and output affordances. Says plainly what it cannot check: the semantic engine analyses Java and this build is Python, so those figures are declared absent rather than reported as zeros |
494
536
  | `retrieve` | parked | typed knowledge queries over the model | symbol-oriented queries accept `--target/-t`; domain aliases such as `--module/-m`, `--subsystem/-s` and `--endpoint/-e` remain supported |
495
537
  | `timeline` | experimental | since when a number moved, and in which commit window | walks the commit series and re-runs the shipped analyses (`posture`, `data-exposure`, `endpoints`, `spring-audit`) on a read-only materialisation of each sampled tree; publishes transitions, not a per-commit dump. A sample that could not be analysed is `null` with a reason, never 0, and a transition under sampling carries the window it could have happened in |
496
538
  | `regress` | supported | what moved between two payloads of the same command, and which declaration accounts for it | attributes each delta to a declaration the answers carry (`test_source_excluded`, `symbols_excluded`, `coverage.gaps`, `*_cap`, `waivers`); a delta nothing explains is `unattributed`. Refuses the comparison when `cache_layers`, `base_env` or the analyzer fingerprint differ |
@@ -543,7 +585,7 @@ reading JSON sees the same boundary a buyer reads here.
543
585
  | **General request-input-to-sink taint analysis.** | `ask risk` includes two bounded slices for annotated HTTP parameters and positional calls in repository Java sources: known query sinks, and MyBatis statements that splice a value into their SQL. “Known” is a published list — `risk` prints it as `query_sink_vocabulary`, with the calls it deliberately leaves out and why — so a concatenation into a call outside that list is not a miss to be discovered, it is a stated boundary. Anything broader needs value flow through a program, which is a different analysis with a different failure mode: an unsound one produces confident findings that are wrong, and every claim here is meant to be checkable against the line that produced it. | A dataflow scanner (Semgrep, CodeQL) for complete taint. What this product adds on top is reachability and, for the two bounded slices, whether an annotated HTTP input reaches a known concatenated query sink or a spliced SQL statement — the latter with a three-state verdict that says `undecidable` rather than clearing a route it could not follow. |
544
586
  | **Secrets outside Java, Spring configuration and the deployment descriptors — a Helm value, a CI variable file, a shell script.** | The file population this analyzer reads is the Java source, the Spring configuration convention and the descriptors it already parses to resolve an environment. A secret elsewhere is not missed by a weak rule; it is outside the set of files anything here opens. Narrowed by CL-10: a credential stored in `web.xml` or a Spring XML context IS reported (SEC-007), because those files were already being read. | A dedicated secret scanner over the whole tree (gitleaks, trufflehog). |
545
587
  | **Filter-chain order and per-filter URL patterns — the presence of a custom filter is structural only.** | Which filter runs first is decided by bean ordering this analyzer does not resolve. Where two active configurations both match a request, the answer published is `undecided` rather than a guess. | `ask posture --profile <set>` states per endpoint what the readable rules decide and what they leave undecided. |
546
- | **Known vulnerabilities in dependencies — no CVE database, no version advisory matching.** | Enriching a vulnerability feed is a different product with a different update cadence; a stale embedded database is worse than no database, because it reads as a clean bill of health. | A dependency scanner (Trivy, OWASP Dependency-Check). `impact-chain` then answers which of its findings anything actually reaches. |
588
+ | **Discovering vulnerabilities, and shipping the database that lists them — no embedded CVE feed, no network lookup at analysis time.** | Maintaining a vulnerability feed is a different product with a different update cadence, and a stale embedded database is worse than no database because it reads as a clean bill of health. That boundary is unchanged. What IS built is the half this project can be responsible for: `ask cve --feed <osv.json>` takes a feed you supply and pin, and answers whether a route can actually REACH the vulnerable package, using the same blast radius as `impact-chain`. The feed's own staleness travels with the answer, an unreadable feed is a refusal rather than a clean scan, and nothing there answers "not reachable". | A dependency scanner (Trivy, OWASP Dependency-Check, an OSV export) supplies the advisories; `ask cve` says which of them anything actually reaches. |
547
589
 
548
590
  Two more boundaries worth stating in the same voice:
549
591
 
@@ -643,6 +685,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
643
685
  ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
644
686
  Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
645
687
 
688
+ The future commercial direction is staged rather than an immediate product
689
+ restriction: free adoption, self-serve scale, B2B infrastructure licensing and
690
+ a generated public trust projection. See the [monetization review](docs/AUDIT-2026-08-26-MONETIZATION.md).
691
+
646
692
  ---
647
693
 
648
694
  ## Configuration & privacy
@@ -717,4 +763,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
717
763
  | [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
718
764
  | [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
719
765
  | [DEFECT-LEDGER.md](docs/DEFECT-LEDGER.md) | Every defect found in the field, its class, and which release closed it — published on purpose |
766
+ | [AUDIT-2026-08-26-EXTERNAL-5.8.32.md](docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md) | The most recent external review, its reproduced and **unreproduced** findings, and the feature intake it opened |
720
767
  | [spec/envelope-v1.md](docs/spec/envelope-v1.md) | The output format as an **open specification** — provenance, a named unit, a stated basis, declared non-coverage. Implementable by tools that are not this one; the field table is generated from the schema `ask schema envelope-v1` prints |
@@ -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.8.32-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.8.32 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.8.32 — 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
 
@@ -283,6 +283,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
283
283
  ask verify /path/to/repo # then: only new violations block
284
284
  ```
285
285
 
286
+ **And the loop that closes.** Finding, question and change each had a command; what they
287
+ did not have was a way through. These are the joins, and each refuses rather than guess:
288
+
289
+ ```bash
290
+ # Which advisories a route can actually REACH — not which are on the classpath.
291
+ # Reads a LOCAL feed; no network is taken, so a CI gate can never pass because a
292
+ # fetch timed out. Nothing answers "not reachable": absence of a resolved edge is
293
+ # not absence of use, and the payload says so.
294
+ ask cve /path/to/repo --feed ./osv-maven.json --reachable-only
295
+
296
+ # Ask in your own words. It SELECTS one of retrieve's 29 typed queries and prints
297
+ # it (--run executes it); it never invents an answer, and a question that fits two
298
+ # intents too closely is refused with both named.
299
+ ask intent "what breaks if I change OrderService?"
300
+
301
+ # Finding → recipe → apply in a dedicated worktree → verify. Dry by default. Most
302
+ # findings are not mechanical, and the plan says which and why.
303
+ ask remediate /path/to/repo
304
+
305
+ # One verdict for THIS diff, not for the repository. A changed file that maps to no
306
+ # class caps the verdict at UNKNOWN — a partial blast radius is not a small one —
307
+ # and UNKNOWN fails every gate.
308
+ git diff --name-only main | ask pr-risk /path/to/repo --files - --fail-on block
309
+
310
+ # What opened up since the last capture, on the axis posture --diff does not have.
311
+ ask drift /path/to/repo --profile prod --capture # record today
312
+ ask drift /path/to/repo --profile prod # then: what moved
313
+
314
+ # While you edit: one answer per save, against the warm index.
315
+ ask watch /path/to/repo --once
316
+
317
+ # Show me the architecture, don't hand me JSON to render.
318
+ ask export /path/to/repo --c4 --render mermaid
319
+ ```
320
+
286
321
  > **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
287
322
  > monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
288
323
  > executes each before writing it — init followed by verify passes by construction.
@@ -311,27 +346,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
311
346
 
312
347
  ### 2 · Impact Analysis
313
348
  Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
314
- `ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
349
+ `ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact` · `ask pr-risk` (one verdict for the diff — `UNKNOWN` when the blast radius has a hole, and `UNKNOWN` fails the gate)
315
350
  → [reference](docs/USER_GUIDE.md#core-commands)
316
351
 
317
352
  ### 3 · Architecture Intelligence
318
353
  The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
319
- `ask export` · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
354
+ `ask export` (`--c4 --render mermaid|svg` draws it) · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
320
355
  → [reference](docs/USER_GUIDE.md#core-commands)
321
356
 
322
357
  ### 4 · Migration & Modernization
323
358
  Is this codebase ready to upgrade? Per-dimension readiness (Jakarta / Spring Boot / JDK / Hibernate), located blockers, an effort estimate, and — with `--blast-radius` — the endpoints whose call path runs through each blocker, so the re-test plan is ordered by regression scope.
324
- `ask migrate-check` · `ask modernize`
359
+ `ask migrate-check` · `ask modernize` · `ask remediate` (finding → recipe → apply → **verify**; dry by default, and an apply it could not verify is never reported as applied)
325
360
  → [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
326
361
 
327
362
  ### 5 · Spring Analysis
328
363
  Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
329
- `ask spring-audit` · `ask validation`
364
+ `ask spring-audit` · `ask validation` · `ask cve` (dependency advisories gated on whether a route can **reach** the vulnerable package — from a local feed, with no network taken)
330
365
  → [reference](docs/USER_GUIDE.md#core-commands)
331
366
 
332
367
  ### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
333
368
  What a profile set **actually wires**: which conditional beans register, which do not, and which conditions could not be decided at all — then the effective endpoint access that follows from the filter chain. `--diff` answers the question nobody else answers in one command: *what changes between `dev` and `prod`, across every endpoint at once.*
334
- `ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v`
369
+ `ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v` · `ask drift` (the same comparison across **time** — what opened up since the last capture)
335
370
  → [posture.md](docs/posture.md)
336
371
 
337
372
  **`--diff-ref` makes it a gate instead of a report.** `--diff` moves the profile set; `--diff-ref origin/main:HEAD` (or `--since origin/main`, which compares a ref with the working tree) moves the *tree* under one profile set and answers *did this branch open an endpoint*. `--fail-on opened` exits 1 when it did. Both refs are read with `git archive` — nothing is written to the repository. The comparison is keyed on the request (`METHOD path`), counts requests only one side serves, and never reports a rule that disappeared as protection gained.
@@ -383,11 +418,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
383
418
 
384
419
  ### 6 · Developer Workflows
385
420
  The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
386
- `ask review-pr` · `ask fix-bug` · `ask prepare-context`
421
+ `ask review-pr` · `ask fix-bug` · `ask prepare-context` · `ask watch` (one answer per save, against a warm index) · `ask intent "<question>"` (a plain-language question resolved to a typed query — it selects one, it never invents an answer)
387
422
  → [reference](docs/USER_GUIDE.md#typical-workflows)
388
423
 
389
424
  ### 7 · Utilities
390
- `ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness)
425
+ `ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness) · `ask self-audit` (does the installed build's own registry agree with itself?)
391
426
  → [reference](docs/USER_GUIDE.md)
392
427
 
393
428
  ---
@@ -436,12 +471,19 @@ from it.
436
471
  | `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
437
472
  | `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
438
473
  | `onboard` / `explain` / `cold-start` | supported | orientation in an unfamiliar repo; per-class summary; bootstrap snapshot | `onboard` publishes `population`, `population_unit` and `population_total` for its source-file universe |
439
- | `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | |
474
+ | `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | `export --c4 --render mermaid\|svg` **draws** the model instead of only emitting it — presentation over the same payload, with the node cap written on the canvas |
440
475
  | `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
441
476
  | `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
442
477
  | `plan` / `compare` / `delta` / `contract-diff` | supported | what to review for a change; candidates by measured cost; outcome of a change; public-contract break | no verdicts, measured cost only |
443
478
  | `validation` | supported | request-body validation coverage and gaps | |
444
- | `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time; `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
479
+ | `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time — and, with `--kind findings`, the **defect population** as a series, so "open since 5.8.28" is answerable without anybody keeping the tally (`first_seen` is the earliest STORED capture, and the payload says so); `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
480
+ | `cve` | supported | which dependency advisories a route can actually **reach** — not which are on the classpath | reads a **local** OSV feed (`--feed`); takes no network at analysis time, so a CI gate can never pass because a fetch timed out. Four verdicts: `reachable` (with the routes), `imported_not_exposed`, `not_observed` and `unknown`. Nothing answers *"not reachable"* — reflection, SPI loading and container wiring reach code no source edge names — and an unresolved Maven version is `unknown`, never `not_affected`. Feed staleness is read off the feed's own dates |
481
+ | `intent` | supported | a plain-language question, resolved to the typed `retrieve` query that answers it | `ask intent "what breaks if I change OrderService?"`. A scored lexical match against a declared vocabulary — **no model, no generation** — so it resolves identically on every machine. It selects a query and prints it; `--run` executes it. A question fitting two intents too closely is refused with both named, because a well-formed answer to a question you did not ask is invisible once printed |
482
+ | `remediate` | supported | the loop from a finding to a **verified** change | audit → recipe → apply in a dedicated worktree → `verify-edit`. Dry by default. Most findings are not mechanical and the plan says which and why; an apply that could not be verified reports `unverified`, never `applied` |
483
+ | `pr-risk` | supported | one verdict for **this diff** — does the change make things worse? | `pack gate` answers about the repository; this answers about the change. Joins `pr-impact` reach, endpoint access, the shared risk model and CODEOWNERS. `--since` differences route inventories so `new_endpoints` is a fact rather than a guess. A changed file that maps to no class caps the verdict at `UNKNOWN`, which fails every gate — a partial blast radius is not a small one |
484
+ | `drift` | supported | what changed in the **effective access**, and when | `--capture` records; the default compares against the last record; `--against` compares two profile sets. One arithmetic for both axes, so the time answer and the environment answer cannot disagree. `newly_unmatched` and `newly_matched` are separate buckets, and a `removed` route is never reported as having become safe |
485
+ | `watch` | supported | what each save affected, against a warm index | one JSON line per tick. `--once` is the pre-commit shape; `--ticks`/`--for` bound the loop. A failed analysis is an `error` tick, never an empty change list; a file added since the warm is `unresolved`, not `unreachable` |
486
+ | `self-audit` | supported | whether the **installed build's** own registries agree with each other | a battery proves the source tree consistent while a user runs a wheel. Checks the cache model, format contract, schema registry and output affordances. Says plainly what it cannot check: the semantic engine analyses Java and this build is Python, so those figures are declared absent rather than reported as zeros |
445
487
  | `retrieve` | parked | typed knowledge queries over the model | symbol-oriented queries accept `--target/-t`; domain aliases such as `--module/-m`, `--subsystem/-s` and `--endpoint/-e` remain supported |
446
488
  | `timeline` | experimental | since when a number moved, and in which commit window | walks the commit series and re-runs the shipped analyses (`posture`, `data-exposure`, `endpoints`, `spring-audit`) on a read-only materialisation of each sampled tree; publishes transitions, not a per-commit dump. A sample that could not be analysed is `null` with a reason, never 0, and a transition under sampling carries the window it could have happened in |
447
489
  | `regress` | supported | what moved between two payloads of the same command, and which declaration accounts for it | attributes each delta to a declaration the answers carry (`test_source_excluded`, `symbols_excluded`, `coverage.gaps`, `*_cap`, `waivers`); a delta nothing explains is `unattributed`. Refuses the comparison when `cache_layers`, `base_env` or the analyzer fingerprint differ |
@@ -494,7 +536,7 @@ reading JSON sees the same boundary a buyer reads here.
494
536
  | **General request-input-to-sink taint analysis.** | `ask risk` includes two bounded slices for annotated HTTP parameters and positional calls in repository Java sources: known query sinks, and MyBatis statements that splice a value into their SQL. “Known” is a published list — `risk` prints it as `query_sink_vocabulary`, with the calls it deliberately leaves out and why — so a concatenation into a call outside that list is not a miss to be discovered, it is a stated boundary. Anything broader needs value flow through a program, which is a different analysis with a different failure mode: an unsound one produces confident findings that are wrong, and every claim here is meant to be checkable against the line that produced it. | A dataflow scanner (Semgrep, CodeQL) for complete taint. What this product adds on top is reachability and, for the two bounded slices, whether an annotated HTTP input reaches a known concatenated query sink or a spliced SQL statement — the latter with a three-state verdict that says `undecidable` rather than clearing a route it could not follow. |
495
537
  | **Secrets outside Java, Spring configuration and the deployment descriptors — a Helm value, a CI variable file, a shell script.** | The file population this analyzer reads is the Java source, the Spring configuration convention and the descriptors it already parses to resolve an environment. A secret elsewhere is not missed by a weak rule; it is outside the set of files anything here opens. Narrowed by CL-10: a credential stored in `web.xml` or a Spring XML context IS reported (SEC-007), because those files were already being read. | A dedicated secret scanner over the whole tree (gitleaks, trufflehog). |
496
538
  | **Filter-chain order and per-filter URL patterns — the presence of a custom filter is structural only.** | Which filter runs first is decided by bean ordering this analyzer does not resolve. Where two active configurations both match a request, the answer published is `undecided` rather than a guess. | `ask posture --profile <set>` states per endpoint what the readable rules decide and what they leave undecided. |
497
- | **Known vulnerabilities in dependencies — no CVE database, no version advisory matching.** | Enriching a vulnerability feed is a different product with a different update cadence; a stale embedded database is worse than no database, because it reads as a clean bill of health. | A dependency scanner (Trivy, OWASP Dependency-Check). `impact-chain` then answers which of its findings anything actually reaches. |
539
+ | **Discovering vulnerabilities, and shipping the database that lists them — no embedded CVE feed, no network lookup at analysis time.** | Maintaining a vulnerability feed is a different product with a different update cadence, and a stale embedded database is worse than no database because it reads as a clean bill of health. That boundary is unchanged. What IS built is the half this project can be responsible for: `ask cve --feed <osv.json>` takes a feed you supply and pin, and answers whether a route can actually REACH the vulnerable package, using the same blast radius as `impact-chain`. The feed's own staleness travels with the answer, an unreadable feed is a refusal rather than a clean scan, and nothing there answers "not reachable". | A dependency scanner (Trivy, OWASP Dependency-Check, an OSV export) supplies the advisories; `ask cve` says which of them anything actually reaches. |
498
540
 
499
541
  Two more boundaries worth stating in the same voice:
500
542
 
@@ -594,6 +636,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
594
636
  ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
595
637
  Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
596
638
 
639
+ The future commercial direction is staged rather than an immediate product
640
+ restriction: free adoption, self-serve scale, B2B infrastructure licensing and
641
+ a generated public trust projection. See the [monetization review](docs/AUDIT-2026-08-26-MONETIZATION.md).
642
+
597
643
  ---
598
644
 
599
645
  ## Configuration & privacy
@@ -668,4 +714,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
668
714
  | [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
669
715
  | [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
670
716
  | [DEFECT-LEDGER.md](docs/DEFECT-LEDGER.md) | Every defect found in the field, its class, and which release closed it — published on purpose |
717
+ | [AUDIT-2026-08-26-EXTERNAL-5.8.32.md](docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md) | The most recent external review, its reproduced and **unreproduced** findings, and the feature intake it opened |
671
718
  | [spec/envelope-v1.md](docs/spec/envelope-v1.md) | The output format as an **open specification** — provenance, a named unit, a stated basis, declared non-coverage. Implementable by tools that are not this one; the field table is generated from the schema `ask schema envelope-v1` prints |