sourcecode 5.8.31__tar.gz → 5.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. sourcecode-5.9.0/.github/workflows/windows-battery.yml +46 -0
  2. {sourcecode-5.8.31 → sourcecode-5.9.0}/CHANGELOG.md +71 -0
  3. {sourcecode-5.8.31 → sourcecode-5.9.0}/PKG-INFO +77 -18
  4. {sourcecode-5.8.31 → sourcecode-5.9.0}/README.md +76 -17
  5. sourcecode-5.9.0/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +87 -0
  6. sourcecode-5.9.0/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +271 -0
  7. sourcecode-5.9.0/docs/AUDIT-2026-08-26-MONETIZATION.md +86 -0
  8. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/CACHE.md +7 -0
  9. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEFECT-LEDGER.md +89 -1
  10. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEMO-5MIN.md +16 -0
  11. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEVELOPMENT-ROADMAP.md +58 -15
  12. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/EXECUTIVE-ROADMAP.md +62 -9
  13. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/MANUAL-USUARIO.md +157 -2
  14. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT-ROUTE.md +49 -1
  15. sourcecode-5.9.0/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +93 -0
  16. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/USER_GUIDE.md +92 -6
  17. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-gate-ci.md +14 -5
  18. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-mcp-api.md +12 -2
  19. {sourcecode-5.8.31 → sourcecode-5.9.0}/pyproject.toml +1 -1
  20. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/__init__.py +1 -1
  21. sourcecode-5.9.0/src/sourcecode/access_drift.py +232 -0
  22. sourcecode-5.9.0/src/sourcecode/c4_render.py +245 -0
  23. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cache_model.py +28 -0
  24. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cli.py +1168 -9
  25. sourcecode-5.9.0/src/sourcecode/cve_feed.py +290 -0
  26. sourcecode-5.9.0/src/sourcecode/cve_reachability.py +497 -0
  27. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/explain.py +25 -6
  28. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/file_chunker.py +15 -4
  29. sourcecode-5.9.0/src/sourcecode/findings_baseline.py +270 -0
  30. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/format_contract.py +7 -0
  31. sourcecode-5.9.0/src/sourcecode/intent_router.py +402 -0
  32. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/server.py +66 -8
  33. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/non_coverage.py +15 -7
  34. sourcecode-5.9.0/src/sourcecode/pr_risk.py +281 -0
  35. sourcecode-5.9.0/src/sourcecode/remediation_flow.py +259 -0
  36. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schema_registry.py +16 -0
  37. sourcecode-5.9.0/src/sourcecode/schemas/cve-reachability-v1.schema.json +130 -0
  38. sourcecode-5.9.0/src/sourcecode/self_audit.py +289 -0
  39. sourcecode-5.9.0/src/sourcecode/watch_loop.py +214 -0
  40. sourcecode-5.8.31/.github/workflows/windows-battery.yml +0 -60
  41. {sourcecode-5.8.31 → sourcecode-5.9.0}/.github/workflows/build-windows.yml +0 -0
  42. {sourcecode-5.8.31 → sourcecode-5.9.0}/.github/workflows/perf-gate.yml +0 -0
  43. {sourcecode-5.8.31 → sourcecode-5.9.0}/.gitignore +0 -0
  44. {sourcecode-5.8.31 → sourcecode-5.9.0}/.ruff.toml +0 -0
  45. {sourcecode-5.8.31 → sourcecode-5.9.0}/CLAUDE.md +0 -0
  46. {sourcecode-5.8.31 → sourcecode-5.9.0}/CODE_OF_CONDUCT.md +0 -0
  47. {sourcecode-5.8.31 → sourcecode-5.9.0}/CONTRIBUTING.md +0 -0
  48. {sourcecode-5.8.31 → sourcecode-5.9.0}/LICENSE +0 -0
  49. {sourcecode-5.8.31 → sourcecode-5.9.0}/NOTICE +0 -0
  50. {sourcecode-5.8.31 → sourcecode-5.9.0}/SECURITY.md +0 -0
  51. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  52. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  53. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  54. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  55. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  56. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  57. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  58. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  59. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  60. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
  61. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  62. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  63. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/COMMERCIAL-OFFER.md +0 -0
  64. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/CUSTOMER-VALIDATION.md +0 -0
  65. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  66. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/EXECUTION-PLAN-12MO.md +0 -0
  67. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/MODERNIZATION.md +0 -0
  68. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_AUDIT.md +0 -0
  69. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_IDENTITY.md +0 -0
  70. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_TIERS.md +0 -0
  71. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/RC1-CHECKLIST.md +0 -0
  72. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/RELEASE-CHECKLIST.md +0 -0
  73. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  74. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  75. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-report.md +0 -0
  76. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  77. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  78. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  79. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  80. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  81. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  82. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  83. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  84. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  85. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  86. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  87. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  88. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  89. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  90. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  91. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  92. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  93. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  94. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  95. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  96. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0006-performance-harness.md +0 -0
  97. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  98. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  99. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/consumer-disposition-inventory.md +0 -0
  100. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/overview.md +0 -0
  101. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/product-architecture-review.md +0 -0
  102. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/product-strategy-layering.md +0 -0
  103. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  104. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/semantic-ir-roadmap.md +0 -0
  105. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/baseline-ci.yml +0 -0
  106. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/commercial-pipeline-audit.md +0 -0
  107. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/contracts-ci.yml +0 -0
  108. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/contracts.md +0 -0
  109. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  110. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  111. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  112. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  113. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  114. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  115. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  116. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  117. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/licensing-schema.md +0 -0
  118. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/migrate-check.md +0 -0
  119. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pack-gate-github-actions.yml +0 -0
  120. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pack-gate-gitlab.yml +0 -0
  121. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/README.md +0 -0
  122. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/REGRESSION-GATE.md +0 -0
  123. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  124. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  125. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  126. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  127. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  128. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  129. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  130. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  131. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  132. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  133. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  134. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  135. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  136. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  137. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  138. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  139. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  140. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  141. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  142. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  143. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  144. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  145. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  146. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  147. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  148. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  149. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  150. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  151. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  152. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  153. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  154. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  155. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  156. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  157. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  158. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  159. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  160. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  161. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  162. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  163. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  164. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  165. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/README.md +0 -0
  166. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  167. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  168. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  169. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  170. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  171. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  172. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/reference-best/README.md +0 -0
  173. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  174. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/posture.md +0 -0
  175. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/privacy.md +0 -0
  176. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pro-experience-audit.md +0 -0
  177. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/schema.md +0 -0
  178. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/spec/envelope-v1.md +0 -0
  179. {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/spring-audit-ci.yml +0 -0
  180. {sourcecode-5.8.31 → sourcecode-5.9.0}/hatch_build.py +0 -0
  181. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/compare_integration_engines.py +0 -0
  182. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/customer_smoke_test.sh +0 -0
  183. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/generate_jdk_exports.py +0 -0
  184. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/perf_gate.py +0 -0
  185. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/perf_harness.py +0 -0
  186. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/sync_gate_anchors.py +0 -0
  187. {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/test_fast.sh +0 -0
  188. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/__main__.py +0 -0
  189. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/adaptive_scanner.py +0 -0
  190. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/analysis_budget.py +0 -0
  191. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/answer_bounds.py +0 -0
  192. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/archetype.py +0 -0
  193. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architectural_baseline.py +0 -0
  194. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architectural_delta.py +0 -0
  195. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architecture_analyzer.py +0 -0
  196. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architecture_summary.py +0 -0
  197. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ast_extractor.py +0 -0
  198. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_clusters.py +0 -0
  199. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_recipe.py +0 -0
  200. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_report.py +0 -0
  201. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_since.py +0 -0
  202. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/baseline_autocapture.py +0 -0
  203. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/breaking_changes.py +0 -0
  204. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/build_modules.py +0 -0
  205. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/build_stamp.py +0 -0
  206. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/bundled_docs.py +0 -0
  207. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cache.py +0 -0
  208. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cache_observation.py +0 -0
  209. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/call_surface.py +0 -0
  210. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/caller_metrics.py +0 -0
  211. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/caller_reach.py +0 -0
  212. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/canonical_ir.py +0 -0
  213. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/chain_rules.py +0 -0
  214. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/change_plan.py +0 -0
  215. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ci_output.py +0 -0
  216. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cir_graphs.py +0 -0
  217. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/classifier.py +0 -0
  218. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/client_calls.py +0 -0
  219. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  220. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/compare.py +0 -0
  221. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/confidence_analyzer.py +0 -0
  222. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/constraint_diff.py +0 -0
  223. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/consumer_join.py +0 -0
  224. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/container_wiring.py +0 -0
  225. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_cache.py +0 -0
  226. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_graph.py +0 -0
  227. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_scorer.py +0 -0
  228. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_summarizer.py +0 -0
  229. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_diff.py +0 -0
  230. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_init.py +0 -0
  231. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_model.py +0 -0
  232. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_pipeline.py +0 -0
  233. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/coverage_parser.py +0 -0
  234. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/data_exposure.py +0 -0
  235. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/data_labels.py +0 -0
  236. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/declarations.py +0 -0
  237. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_classes/__init__.py +0 -0
  238. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_classes/registry.json +0 -0
  239. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_identity.py +0 -0
  240. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/degradation.py +0 -0
  241. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/dependency_analyzer.py +0 -0
  242. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/deployment_prefix.py +0 -0
  243. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detach.py +0 -0
  244. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/__init__.py +0 -0
  245. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/base.py +0 -0
  246. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  247. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/dart.py +0 -0
  248. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/dotnet.py +0 -0
  249. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/elixir.py +0 -0
  250. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/go.py +0 -0
  251. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/heuristic.py +0 -0
  252. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/hybrid.py +0 -0
  253. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/java.py +0 -0
  254. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  255. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/nodejs.py +0 -0
  256. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/parsers.py +0 -0
  257. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/php.py +0 -0
  258. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/project.py +0 -0
  259. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/python.py +0 -0
  260. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/ruby.py +0 -0
  261. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/rust.py +0 -0
  262. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/systems.py +0 -0
  263. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/terraform.py +0 -0
  264. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/tooling.py +0 -0
  265. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/doc_analyzer.py +0 -0
  266. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
  267. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/empty_reach.py +0 -0
  268. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_disposition.py +0 -0
  269. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_literals.py +0 -0
  270. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_metrics.py +0 -0
  271. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  272. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/env_analyzer.py +0 -0
  273. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/envelope.py +0 -0
  274. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/environment_resolution.py +0 -0
  275. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/error_schema.py +0 -0
  276. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/evidence_provider.py +0 -0
  277. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/execution_plan.py +0 -0
  278. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/explain_endpoint.py +0 -0
  279. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/facts/__init__.py +0 -0
  280. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/facts/registry.json +0 -0
  281. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/field_deprecations.py +0 -0
  282. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/file_classifier.py +0 -0
  283. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/filter_surface.py +0 -0
  284. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/fqn_utils.py +0 -0
  285. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/functional_routes.py +0 -0
  286. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/gate_anchors.py +0 -0
  287. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/git_analyzer.py +0 -0
  288. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/git_checkout.py +0 -0
  289. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/github_diff.py +0 -0
  290. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/graph_analyzer.py +0 -0
  291. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/graph_evidence.py +0 -0
  292. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/hibernate_strat.py +0 -0
  293. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/identity_fallback.py +0 -0
  294. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/integration_coordinates.py +0 -0
  295. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/jdk_exports.py +0 -0
  296. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/license.py +0 -0
  297. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/manifest_cache.py +0 -0
  298. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/__init__.py +0 -0
  299. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/dependency_import.py +0 -0
  300. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  301. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  302. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  303. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  304. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  305. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/orchestrator.py +0 -0
  306. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/registry.py +0 -0
  307. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/runner.py +0 -0
  308. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp_nudge.py +0 -0
  309. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/metrics_analyzer.py +0 -0
  310. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migrate_check.py +0 -0
  311. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migration_apply.py +0 -0
  312. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migration_blast.py +0 -0
  313. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/openapi_surface.py +0 -0
  314. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/openrewrite_recipe.py +0 -0
  315. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_bounds.py +0 -0
  316. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_budget.py +0 -0
  317. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_ceiling.py +0 -0
  318. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_encoding.py +0 -0
  319. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_sink.py +0 -0
  320. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pack_manifest.py +0 -0
  321. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/packs.py +0 -0
  322. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/parallel.py +0 -0
  323. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/parse_cache.py +0 -0
  324. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/partial_contract.py +0 -0
  325. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_admission.py +0 -0
  326. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_display.py +0 -0
  327. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_filters.py +0 -0
  328. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/perf.py +0 -0
  329. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/phased_run.py +0 -0
  330. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pipe_contract.py +0 -0
  331. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/posture.py +0 -0
  332. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pr_comment_renderer.py +0 -0
  333. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pr_impact.py +0 -0
  334. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/prepare_context.py +0 -0
  335. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/product_info.py +0 -0
  336. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/progress.py +0 -0
  337. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/provenance.py +0 -0
  338. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ranking_engine.py +0 -0
  339. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/readiness_timeline.py +0 -0
  340. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/readonly.py +0 -0
  341. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/reconciliation.py +0 -0
  342. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/redactor.py +0 -0
  343. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/reference_facts.py +0 -0
  344. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/regress.py +0 -0
  345. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/release_info.py +0 -0
  346. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/relevance_scorer.py +0 -0
  347. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/remediation_diff.py +0 -0
  348. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/remedies.py +0 -0
  349. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rename_refactor.py +0 -0
  350. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/repo_classifier.py +0 -0
  351. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/repository_ir.py +0 -0
  352. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/resource_budget.py +0 -0
  353. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/__init__.py +0 -0
  354. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/context.py +0 -0
  355. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/errors.py +0 -0
  356. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/executor.py +0 -0
  357. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/planner.py +0 -0
  358. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/query.py +0 -0
  359. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/request.py +0 -0
  360. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/resolution.py +0 -0
  361. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/result.py +0 -0
  362. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/retriever.py +0 -0
  363. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/runtime.py +0 -0
  364. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps.py +0 -0
  365. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  366. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_graph.py +0 -0
  367. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_impact.py +0 -0
  368. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_intf.py +0 -0
  369. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_struct.py +0 -0
  370. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  371. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ris.py +0 -0
  372. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/risk.py +0 -0
  373. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/risk_model.py +0 -0
  374. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rule_catalog.py +0 -0
  375. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rule_pass.py +0 -0
  376. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/runs.py +0 -0
  377. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/runtime_classifier.py +0 -0
  378. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sarif.py +0 -0
  379. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sarif_emit.py +0 -0
  380. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/scanner.py +0 -0
  381. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schema.py +0 -0
  382. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schema_producers.py +0 -0
  383. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  384. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  385. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  386. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  387. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  388. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  389. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_chain.py +0 -0
  390. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_config.py +0 -0
  391. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_config_scan.py +0 -0
  392. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_posture.py +0 -0
  393. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/selection_contract.py +0 -0
  394. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/selftest.py +0 -0
  395. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_analyzer.py +0 -0
  396. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_impact_engine.py +0 -0
  397. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_integration_engine.py +0 -0
  398. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_services.py +0 -0
  399. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/serializer.py +0 -0
  400. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/servlet_surface.py +0 -0
  401. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/source_text.py +0 -0
  402. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_event_topology.py +0 -0
  403. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_findings.py +0 -0
  404. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_impact.py +0 -0
  405. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_model.py +0 -0
  406. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_profiles.py +0 -0
  407. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_properties.py +0 -0
  408. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_security_audit.py +0 -0
  409. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_semantic.py +0 -0
  410. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
  411. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sql_taint.py +0 -0
  412. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/summarizer.py +0 -0
  413. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/target_admission.py +0 -0
  414. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/__init__.py +0 -0
  415. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/config.py +0 -0
  416. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/consent.py +0 -0
  417. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/events.py +0 -0
  418. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/filters.py +0 -0
  419. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/transport.py +0 -0
  420. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/test_gap_ranking.py +0 -0
  421. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/test_sources.py +0 -0
  422. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/text_input.py +0 -0
  423. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/timeline.py +0 -0
  424. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/timeline_cache.py +0 -0
  425. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/token_estimate.py +0 -0
  426. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/tree_utils.py +0 -0
  427. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/type_usage_surface.py +0 -0
  428. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/validation_inference.py +0 -0
  429. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/validation_surface.py +0 -0
  430. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_edit.py +0 -0
  431. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_repo.py +0 -0
  432. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_rules.py +0 -0
  433. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/version_check.py +0 -0
  434. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/waivers.py +0 -0
  435. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/wired_surface.py +0 -0
  436. {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/workspace.py +0 -0
  437. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/README.md +0 -0
  438. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/get-license/index.ts +0 -0
  439. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  440. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/telemetry/index.ts +0 -0
  441. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/sql/license_event_ordering.sql +0 -0
  442. {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/sql/licensing_schema.sql +0 -0
  443. {sourcecode-5.8.31 → sourcecode-5.9.0}/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,76 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.9.0] — 2026-08-26
4
+
5
+ *The `AUD-607` external round, closed: three defects fixed and the whole feature
6
+ intake built, one commit per row. Seven new commands (`cve`, `intent`,
7
+ `remediate`, `pr-risk`, `drift`, `watch`, `self-audit`) and two extended ones
8
+ (`baseline --kind findings`, `export --c4 --render`) make this the largest
9
+ addition to the command surface since 5.0, so the minor version moves.*
10
+
11
+ **Fixed**
12
+
13
+ - `chunk-file` emitted chunk content that did not match its own declared
14
+ `start_line`/`end_line`: the boundary path serialised the untruncated buffer
15
+ while declaring a truncated end line, so a chunk ran past its own range and
16
+ those lines repeated at the head of the next one. A second, separate defect
17
+ made the annotation buffer's clearing guard unreachable, so a field's
18
+ `@Autowired` was carried onto the following method while the field's own
19
+ declaration dropped out of that chunk. The reported "deliberate overlap" is
20
+ refuted; the declared range is now exact and asserted against file content.
21
+ - `explain` answered *"No stereotype detected"* under **Purpose** while listing
22
+ that same class's routes under **REST Endpoints**. Fixed by reading the
23
+ endpoint evidence the answer already computed — not by adding JAX-RS to a
24
+ Spring annotation list, which is the branching this project does not do.
25
+ - `--files -` claimed *"stdin is a terminal"* for a Git Bash/MSYS redirect it
26
+ cannot verify. The message now names the outcome and states both routes into
27
+ it (the C3-106 rule, already applied to `_confirm`).
28
+
29
+ **Added**
30
+
31
+ - `ask cve --feed <osv>` — dependency advisories gated on whether a route can
32
+ **reach** the vulnerable package. Takes no network at analysis time; an
33
+ unreadable feed is a refusal, never a clean scan; nothing answers *"not
34
+ reachable"*, and an unresolvable Maven version is `unknown`, never
35
+ `not_affected`. Schema `cve-reachability-v1`, published as a document.
36
+ - `ask intent "<question>"` — a plain-language question resolved to one of
37
+ `retrieve`'s typed queries. A scored lexical match against a declared
38
+ vocabulary: no model, no generation. Ambiguous or unanchored questions are
39
+ refused with the closest intents named.
40
+ - `ask remediate` — finding → recipe → apply in a dedicated worktree →
41
+ `verify-edit`. Dry by default; an apply that could not be verified reports
42
+ `unverified`, never `applied`. Schema `remediation-plan-v1`.
43
+ - `ask pr-risk` — one verdict for one diff, distinct from `pack gate`'s verdict
44
+ about the repository. `UNKNOWN` outranks `PASS` and fails every gate. Schema
45
+ `pr-risk-v1`.
46
+ - `ask drift` — what changed in the effective access, across time or across two
47
+ profile sets, with one arithmetic for both axes. Schema `access-drift-v1`.
48
+ - `ask watch` — one answer per save against a warm index; `--once` is the
49
+ pre-commit shape. Schema `watch-event-v1`.
50
+ - `ask self-audit` — whether the **installed** build's registries agree with each
51
+ other, and an explicit statement of what it cannot check. Schema
52
+ `self-audit-v1`.
53
+ - `ask baseline capture|diff|trend --kind findings` — the defect population as a
54
+ persisted series, so "how long has this been open?" has an answer. Schema
55
+ `findings-baseline-v1`.
56
+ - `ask export --c4 --render mermaid|svg` — draws the C4 model instead of only
57
+ emitting it, with the node cap written on the canvas.
58
+
59
+ **Note.** Building the features surfaced three defects no audit round had
60
+ reported: the C4 renderer's first version drew report metadata (`summary`,
61
+ `coverage_note`) as system architecture; the watch loop stat-ed
62
+ repository-relative paths against the process CWD and so reported "nothing
63
+ changed" on every tick; and `self-audit` found its own schema identifier
64
+ unregistered on its first run. Each is now held by an assertion.
65
+
66
+ ## [5.8.32] — 2026-08-26
67
+
68
+ *MCP and documentation alignment release. MCP assessment packs now support
69
+ validated selective component execution through `only`, with omitted coverage
70
+ and a reproducible CLI command recorded in the projection. MCP pull-request
71
+ gates, pack guidance and the public roadmap are synchronized with the current
72
+ release state.*
73
+
3
74
  ## [5.8.31] — 2026-08-26
4
75
 
5
76
  *Windows portability and release-evidence remediation. Cache and licensing test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.31
3
+ Version: 5.9.0
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.31-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.9.0-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
@@ -88,6 +88,8 @@ workflow-shaped packs for users who want one consumable result:
88
88
  ask pack assessment . --profile prod --output-dir .ask/packs/assessment
89
89
  ask pack gate . --since origin/main --output-dir .ask/packs/gate
90
90
  ask pack assessment . --format markdown -o assessment.md
91
+ ask pack assessment . --only risk,posture --output-dir .ask/packs/assessment
92
+ ask pack gate . --pr 123 --output-dir .ask/packs/gate
91
93
  ```
92
94
 
93
95
  For deployment-aware posture evidence, pass the artefacts that describe the
@@ -104,8 +106,17 @@ contract:
104
106
  ```bash
105
107
  ask pack gate . --since origin/main --format github-actions
106
108
  ask pack gate . --since origin/main --format gitlab
109
+ ask pack gate . --since origin/main --format sarif -o gate.sarif
107
110
  ```
108
111
 
112
+ `pack gate --pr NUMBER` uses the local `gh` CLI to resolve changed files and
113
+ the exact base commit; the base SHA must already exist locally. It does not
114
+ fetch or modify the repository. `pack assessment --only` runs named assessment
115
+ components and records omissions in the manifest. MCP's
116
+ `get_assessment_pack` accepts the same selection as `only: list[str]` and
117
+ returns the reproducible CLI command in its `mcp` projection. SARIF is a bounded
118
+ export of ASK-owned gate decisions, not a re-emission of third-party findings.
119
+
109
120
  `PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
110
121
  the CI signal; `--allow-unverified` can change only that exit code, never the
111
122
  reported verdict. Every pack carries a manifest with component invocations,
@@ -177,18 +188,19 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
177
188
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
178
189
  unset, or set it to `0`, to disable the ceiling explicitly.
179
190
 
180
- **Current performance status.** Release 5.8.31 retains the shared Canonical IR
191
+ **Current performance status.** Release 5.9.0 retains the shared Canonical IR
181
192
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
182
193
  runs; the no-label path remains parse-free. These are implementation properties,
183
194
  not duration promises. A controlled external warm-path audit has opened performance
184
195
  and bounded-output regressions for this release; use `ask cache model <repo>` and
185
196
  `--progress stderr` for supervised runs, and consult the
186
- [active pack audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md) before
197
+ [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
187
198
  treating a historical timing or bounded flag as a current guarantee.
188
199
 
189
- **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
200
+ **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
190
201
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
191
- IR) and the **compact view**. Pass `--agent` to warm the agent view as well. Deeper projections
202
+ IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
203
+ `--views`, all declared views are warmed. Deeper projections
192
204
  are separate keys and are *not* covered by either — `--full`, `--env-map` and a raised `--depth`
193
205
  recompute on first use, as do most `prepare-context` tasks. Measured on a 3,342-file Spring
194
206
  monolith: `cache warm` 103s → `--compact --git-context` 1s (hit), but `--agent --full --env-map
@@ -210,7 +222,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
210
222
  # pip / pipx
211
223
  pipx install sourcecode # or: pip install sourcecode
212
224
 
213
- ask version # ask 5.8.31 — and, on a build that has aged,
225
+ ask version # ask 5.9.0 — and, on a build that has aged,
214
226
  # how many releases have probably shipped since
215
227
  ```
216
228
 
@@ -320,6 +332,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
320
332
  ask verify /path/to/repo # then: only new violations block
321
333
  ```
322
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
+
323
370
  > **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
324
371
  > monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
325
372
  > executes each before writing it — init followed by verify passes by construction.
@@ -348,27 +395,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
348
395
 
349
396
  ### 2 · Impact Analysis
350
397
  Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
351
- `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)
352
399
  → [reference](docs/USER_GUIDE.md#core-commands)
353
400
 
354
401
  ### 3 · Architecture Intelligence
355
402
  The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
356
- `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)
357
404
  → [reference](docs/USER_GUIDE.md#core-commands)
358
405
 
359
406
  ### 4 · Migration & Modernization
360
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.
361
- `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)
362
409
  → [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
363
410
 
364
411
  ### 5 · Spring Analysis
365
412
  Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
366
- `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)
367
414
  → [reference](docs/USER_GUIDE.md#core-commands)
368
415
 
369
416
  ### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
370
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.*
371
- `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)
372
419
  → [posture.md](docs/posture.md)
373
420
 
374
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.
@@ -420,11 +467,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
420
467
 
421
468
  ### 6 · Developer Workflows
422
469
  The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
423
- `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)
424
471
  → [reference](docs/USER_GUIDE.md#typical-workflows)
425
472
 
426
473
  ### 7 · Utilities
427
- `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?)
428
475
  → [reference](docs/USER_GUIDE.md)
429
476
 
430
477
  ---
@@ -473,13 +520,20 @@ from it.
473
520
  | `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
474
521
  | `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
475
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 |
476
- | `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 |
477
524
  | `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
478
525
  | `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
479
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 |
480
527
  | `validation` | supported | request-body validation coverage and gaps | |
481
- | `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) |
482
- | `retrieve` | parked | typed knowledge queries over the model | |
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 |
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 |
483
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 |
484
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 |
485
539
  | `explain-endpoint` | supported | the derivation behind one route's verdict | six steps — match, declaration, handler, chain, profiles, verdict — each naming the authority that produced it and the file it can be checked against; a step that could not be derived is `undetermined` with the reason, never absent |
@@ -531,7 +585,7 @@ reading JSON sees the same boundary a buyer reads here.
531
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. |
532
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). |
533
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. |
534
- | **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. |
535
589
 
536
590
  Two more boundaries worth stating in the same voice:
537
591
 
@@ -631,6 +685,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
631
685
  ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
632
686
  Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
633
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
+
634
692
  ---
635
693
 
636
694
  ## Configuration & privacy
@@ -705,4 +763,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
705
763
  | [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
706
764
  | [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
707
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 |
708
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.31-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.9.0-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
@@ -39,6 +39,8 @@ workflow-shaped packs for users who want one consumable result:
39
39
  ask pack assessment . --profile prod --output-dir .ask/packs/assessment
40
40
  ask pack gate . --since origin/main --output-dir .ask/packs/gate
41
41
  ask pack assessment . --format markdown -o assessment.md
42
+ ask pack assessment . --only risk,posture --output-dir .ask/packs/assessment
43
+ ask pack gate . --pr 123 --output-dir .ask/packs/gate
42
44
  ```
43
45
 
44
46
  For deployment-aware posture evidence, pass the artefacts that describe the
@@ -55,8 +57,17 @@ contract:
55
57
  ```bash
56
58
  ask pack gate . --since origin/main --format github-actions
57
59
  ask pack gate . --since origin/main --format gitlab
60
+ ask pack gate . --since origin/main --format sarif -o gate.sarif
58
61
  ```
59
62
 
63
+ `pack gate --pr NUMBER` uses the local `gh` CLI to resolve changed files and
64
+ the exact base commit; the base SHA must already exist locally. It does not
65
+ fetch or modify the repository. `pack assessment --only` runs named assessment
66
+ components and records omissions in the manifest. MCP's
67
+ `get_assessment_pack` accepts the same selection as `only: list[str]` and
68
+ returns the reproducible CLI command in its `mcp` projection. SARIF is a bounded
69
+ export of ASK-owned gate decisions, not a re-emission of third-party findings.
70
+
60
71
  `PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
61
72
  the CI signal; `--allow-unverified` can change only that exit code, never the
62
73
  reported verdict. Every pack carries a manifest with component invocations,
@@ -128,18 +139,19 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
128
139
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
129
140
  unset, or set it to `0`, to disable the ceiling explicitly.
130
141
 
131
- **Current performance status.** Release 5.8.31 retains the shared Canonical IR
142
+ **Current performance status.** Release 5.9.0 retains the shared Canonical IR
132
143
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
133
144
  runs; the no-label path remains parse-free. These are implementation properties,
134
145
  not duration promises. A controlled external warm-path audit has opened performance
135
146
  and bounded-output regressions for this release; use `ask cache model <repo>` and
136
147
  `--progress stderr` for supervised runs, and consult the
137
- [active pack audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md) before
148
+ [latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
138
149
  treating a historical timing or bounded flag as a current guarantee.
139
150
 
140
- **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
151
+ **What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
141
152
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
142
- IR) and the **compact view**. Pass `--agent` to warm the agent view as well. Deeper projections
153
+ IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
154
+ `--views`, all declared views are warmed. Deeper projections
143
155
  are separate keys and are *not* covered by either — `--full`, `--env-map` and a raised `--depth`
144
156
  recompute on first use, as do most `prepare-context` tasks. Measured on a 3,342-file Spring
145
157
  monolith: `cache warm` 103s → `--compact --git-context` 1s (hit), but `--agent --full --env-map
@@ -161,7 +173,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
161
173
  # pip / pipx
162
174
  pipx install sourcecode # or: pip install sourcecode
163
175
 
164
- ask version # ask 5.8.31 — and, on a build that has aged,
176
+ ask version # ask 5.9.0 — and, on a build that has aged,
165
177
  # how many releases have probably shipped since
166
178
  ```
167
179
 
@@ -271,6 +283,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
271
283
  ask verify /path/to/repo # then: only new violations block
272
284
  ```
273
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
+
274
321
  > **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
275
322
  > monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
276
323
  > executes each before writing it — init followed by verify passes by construction.
@@ -299,27 +346,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
299
346
 
300
347
  ### 2 · Impact Analysis
301
348
  Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
302
- `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)
303
350
  → [reference](docs/USER_GUIDE.md#core-commands)
304
351
 
305
352
  ### 3 · Architecture Intelligence
306
353
  The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
307
- `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)
308
355
  → [reference](docs/USER_GUIDE.md#core-commands)
309
356
 
310
357
  ### 4 · Migration & Modernization
311
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.
312
- `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)
313
360
  → [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
314
361
 
315
362
  ### 5 · Spring Analysis
316
363
  Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
317
- `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)
318
365
  → [reference](docs/USER_GUIDE.md#core-commands)
319
366
 
320
367
  ### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
321
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.*
322
- `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)
323
370
  → [posture.md](docs/posture.md)
324
371
 
325
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.
@@ -371,11 +418,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
371
418
 
372
419
  ### 6 · Developer Workflows
373
420
  The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
374
- `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)
375
422
  → [reference](docs/USER_GUIDE.md#typical-workflows)
376
423
 
377
424
  ### 7 · Utilities
378
- `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?)
379
426
  → [reference](docs/USER_GUIDE.md)
380
427
 
381
428
  ---
@@ -424,13 +471,20 @@ from it.
424
471
  | `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
425
472
  | `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
426
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 |
427
- | `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 |
428
475
  | `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
429
476
  | `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
430
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 |
431
478
  | `validation` | supported | request-body validation coverage and gaps | |
432
- | `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) |
433
- | `retrieve` | parked | typed knowledge queries over the model | |
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 |
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 |
434
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 |
435
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 |
436
490
  | `explain-endpoint` | supported | the derivation behind one route's verdict | six steps — match, declaration, handler, chain, profiles, verdict — each naming the authority that produced it and the file it can be checked against; a step that could not be derived is `undetermined` with the reason, never absent |
@@ -482,7 +536,7 @@ reading JSON sees the same boundary a buyer reads here.
482
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. |
483
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). |
484
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. |
485
- | **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. |
486
540
 
487
541
  Two more boundaries worth stating in the same voice:
488
542
 
@@ -582,6 +636,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
582
636
  ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
583
637
  Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
584
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
+
585
643
  ---
586
644
 
587
645
  ## Configuration & privacy
@@ -656,4 +714,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
656
714
  | [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
657
715
  | [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
658
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 |
659
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 |