sourcecode 5.8.29__tar.gz → 5.8.31__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 (429) hide show
  1. sourcecode-5.8.31/.github/workflows/build-windows.yml +78 -0
  2. {sourcecode-5.8.29 → sourcecode-5.8.31}/.github/workflows/windows-battery.yml +0 -2
  3. {sourcecode-5.8.29 → sourcecode-5.8.31}/CHANGELOG.md +16 -0
  4. {sourcecode-5.8.29 → sourcecode-5.8.31}/PKG-INFO +6 -6
  5. {sourcecode-5.8.29 → sourcecode-5.8.31}/README.md +5 -5
  6. sourcecode-5.8.31/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +35 -0
  7. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/DEFECT-LEDGER.md +12 -0
  8. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/DEVELOPMENT-ROADMAP.md +50 -1
  9. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/EXECUTIVE-ROADMAP.md +34 -1
  10. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/USER_GUIDE.md +6 -5
  11. {sourcecode-5.8.29 → sourcecode-5.8.31}/pyproject.toml +1 -1
  12. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/cache.py +7 -1
  14. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/cli.py +79 -18
  15. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/envelope.py +1 -1
  16. sourcecode-5.8.31/src/sourcecode/github_diff.py +85 -0
  17. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/license.py +11 -2
  18. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp_nudge.py +11 -1
  19. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/migrate_check.py +4 -0
  20. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/packs.py +85 -21
  21. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/pr_impact.py +28 -3
  22. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/readonly.py +3 -1
  23. sourcecode-5.8.29/.github/workflows/build-windows.yml +0 -40
  24. sourcecode-5.8.29/src/sourcecode/github_diff.py +0 -34
  25. {sourcecode-5.8.29 → sourcecode-5.8.31}/.github/workflows/perf-gate.yml +0 -0
  26. {sourcecode-5.8.29 → sourcecode-5.8.31}/.gitignore +0 -0
  27. {sourcecode-5.8.29 → sourcecode-5.8.31}/.ruff.toml +0 -0
  28. {sourcecode-5.8.29 → sourcecode-5.8.31}/CLAUDE.md +0 -0
  29. {sourcecode-5.8.29 → sourcecode-5.8.31}/CODE_OF_CONDUCT.md +0 -0
  30. {sourcecode-5.8.29 → sourcecode-5.8.31}/CONTRIBUTING.md +0 -0
  31. {sourcecode-5.8.29 → sourcecode-5.8.31}/LICENSE +0 -0
  32. {sourcecode-5.8.29 → sourcecode-5.8.31}/NOTICE +0 -0
  33. {sourcecode-5.8.29 → sourcecode-5.8.31}/SECURITY.md +0 -0
  34. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  35. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  36. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  37. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  38. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  39. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  40. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  41. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  42. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  43. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
  44. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  45. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/CACHE.md +0 -0
  46. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/COMMERCIAL-OFFER.md +0 -0
  47. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/CUSTOMER-VALIDATION.md +0 -0
  48. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/DEMO-5MIN.md +0 -0
  49. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  50. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/EXECUTION-PLAN-12MO.md +0 -0
  51. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/MANUAL-USUARIO.md +0 -0
  52. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/MODERNIZATION.md +0 -0
  53. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/PRODUCT-ROUTE.md +0 -0
  54. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/PRODUCT_AUDIT.md +0 -0
  55. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/PRODUCT_IDENTITY.md +0 -0
  56. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/PRODUCT_TIERS.md +0 -0
  57. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/RC1-CHECKLIST.md +0 -0
  58. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/RELEASE-CHECKLIST.md +0 -0
  59. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  60. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  61. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-assessment-report.md +0 -0
  62. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  63. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  64. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  65. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  66. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  67. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  68. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  69. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  70. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  71. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  72. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  73. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  74. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  75. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  76. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  77. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  78. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  79. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  80. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  81. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  82. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  83. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  84. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0006-performance-harness.md +0 -0
  85. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  86. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  87. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/consumer-disposition-inventory.md +0 -0
  88. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/overview.md +0 -0
  89. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/product-architecture-review.md +0 -0
  90. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/product-strategy-layering.md +0 -0
  91. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  92. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/architecture/semantic-ir-roadmap.md +0 -0
  93. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/baseline-ci.yml +0 -0
  94. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/commercial-pipeline-audit.md +0 -0
  95. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/contracts-ci.yml +0 -0
  96. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/contracts.md +0 -0
  97. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  98. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  99. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  100. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  101. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  102. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  103. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  104. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  105. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/licensing-schema.md +0 -0
  106. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/migrate-check.md +0 -0
  107. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/pack-gate-github-actions.yml +0 -0
  108. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/pack-gate-gitlab.yml +0 -0
  109. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/README.md +0 -0
  110. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/REGRESSION-GATE.md +0 -0
  111. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  112. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  113. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  114. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  115. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  116. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  117. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  118. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  119. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  120. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  121. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  122. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  123. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  124. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  125. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  126. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  127. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  128. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  129. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  130. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  131. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  132. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  133. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  134. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  135. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  136. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  137. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  138. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  139. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  140. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  141. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  142. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  143. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  144. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  145. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  146. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  147. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  148. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  149. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  150. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  151. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  152. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  153. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/README.md +0 -0
  154. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  155. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  156. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  157. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  158. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  159. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  160. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/baselines/reference-best/README.md +0 -0
  161. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  162. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/posture.md +0 -0
  163. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/privacy.md +0 -0
  164. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/pro-experience-audit.md +0 -0
  165. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/schema.md +0 -0
  166. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/spec/envelope-v1.md +0 -0
  167. {sourcecode-5.8.29 → sourcecode-5.8.31}/docs/spring-audit-ci.yml +0 -0
  168. {sourcecode-5.8.29 → sourcecode-5.8.31}/hatch_build.py +0 -0
  169. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/compare_integration_engines.py +0 -0
  170. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/customer_smoke_test.sh +0 -0
  171. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/generate_jdk_exports.py +0 -0
  172. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/perf_gate.py +0 -0
  173. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/perf_harness.py +0 -0
  174. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/sync_gate_anchors.py +0 -0
  175. {sourcecode-5.8.29 → sourcecode-5.8.31}/scripts/test_fast.sh +0 -0
  176. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/__main__.py +0 -0
  177. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/adaptive_scanner.py +0 -0
  178. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/analysis_budget.py +0 -0
  179. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/answer_bounds.py +0 -0
  180. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/archetype.py +0 -0
  181. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/architectural_baseline.py +0 -0
  182. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/architectural_delta.py +0 -0
  183. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/architecture_analyzer.py +0 -0
  184. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/architecture_summary.py +0 -0
  185. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/ast_extractor.py +0 -0
  186. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/audit_clusters.py +0 -0
  187. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/audit_recipe.py +0 -0
  188. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/audit_report.py +0 -0
  189. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/audit_since.py +0 -0
  190. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/baseline_autocapture.py +0 -0
  191. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/breaking_changes.py +0 -0
  192. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/build_modules.py +0 -0
  193. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/build_stamp.py +0 -0
  194. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/bundled_docs.py +0 -0
  195. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/cache_model.py +0 -0
  196. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/cache_observation.py +0 -0
  197. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/call_surface.py +0 -0
  198. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/caller_metrics.py +0 -0
  199. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/caller_reach.py +0 -0
  200. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/canonical_ir.py +0 -0
  201. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/chain_rules.py +0 -0
  202. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/change_plan.py +0 -0
  203. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/ci_output.py +0 -0
  204. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/cir_graphs.py +0 -0
  205. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/classifier.py +0 -0
  206. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/client_calls.py +0 -0
  207. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/code_notes_analyzer.py +0 -0
  208. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/compare.py +0 -0
  209. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/confidence_analyzer.py +0 -0
  210. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/constraint_diff.py +0 -0
  211. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/consumer_join.py +0 -0
  212. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/container_wiring.py +0 -0
  213. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/context_cache.py +0 -0
  214. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/context_graph.py +0 -0
  215. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/context_scorer.py +0 -0
  216. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/context_summarizer.py +0 -0
  217. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/contract_diff.py +0 -0
  218. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/contract_init.py +0 -0
  219. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/contract_model.py +0 -0
  220. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/contract_pipeline.py +0 -0
  221. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/coverage_parser.py +0 -0
  222. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/data_exposure.py +0 -0
  223. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/data_labels.py +0 -0
  224. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/declarations.py +0 -0
  225. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/defect_classes/__init__.py +0 -0
  226. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/defect_classes/registry.json +0 -0
  227. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/defect_identity.py +0 -0
  228. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/degradation.py +0 -0
  229. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/dependency_analyzer.py +0 -0
  230. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/deployment_prefix.py +0 -0
  231. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detach.py +0 -0
  232. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/__init__.py +0 -0
  233. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/base.py +0 -0
  234. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/csproj_parser.py +0 -0
  235. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/dart.py +0 -0
  236. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/dotnet.py +0 -0
  237. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/elixir.py +0 -0
  238. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/go.py +0 -0
  239. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/heuristic.py +0 -0
  240. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/hybrid.py +0 -0
  241. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/java.py +0 -0
  242. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/jvm_ext.py +0 -0
  243. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/nodejs.py +0 -0
  244. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/parsers.py +0 -0
  245. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/php.py +0 -0
  246. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/project.py +0 -0
  247. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/python.py +0 -0
  248. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/ruby.py +0 -0
  249. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/rust.py +0 -0
  250. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/systems.py +0 -0
  251. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/terraform.py +0 -0
  252. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/detectors/tooling.py +0 -0
  253. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/doc_analyzer.py +0 -0
  254. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/dynamic_argument_surface.py +0 -0
  255. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/empty_reach.py +0 -0
  256. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/endpoint_disposition.py +0 -0
  257. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/endpoint_literals.py +0 -0
  258. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/endpoint_metrics.py +0 -0
  259. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/entrypoint_classifier.py +0 -0
  260. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/env_analyzer.py +0 -0
  261. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/environment_resolution.py +0 -0
  262. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/error_schema.py +0 -0
  263. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/evidence_provider.py +0 -0
  264. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/execution_plan.py +0 -0
  265. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/explain.py +0 -0
  266. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/explain_endpoint.py +0 -0
  267. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/facts/__init__.py +0 -0
  268. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/facts/registry.json +0 -0
  269. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/field_deprecations.py +0 -0
  270. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/file_chunker.py +0 -0
  271. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/file_classifier.py +0 -0
  272. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/filter_surface.py +0 -0
  273. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/format_contract.py +0 -0
  274. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/fqn_utils.py +0 -0
  275. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/functional_routes.py +0 -0
  276. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/gate_anchors.py +0 -0
  277. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/git_analyzer.py +0 -0
  278. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/git_checkout.py +0 -0
  279. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/graph_analyzer.py +0 -0
  280. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/graph_evidence.py +0 -0
  281. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/hibernate_strat.py +0 -0
  282. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/identity_fallback.py +0 -0
  283. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/integration_coordinates.py +0 -0
  284. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/jdk_exports.py +0 -0
  285. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/manifest_cache.py +0 -0
  286. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/__init__.py +0 -0
  287. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/dependency_import.py +0 -0
  288. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  289. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  290. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  291. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  292. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  293. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/orchestrator.py +0 -0
  294. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/registry.py +0 -0
  295. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/runner.py +0 -0
  296. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/mcp/server.py +0 -0
  297. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/metrics_analyzer.py +0 -0
  298. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/migration_apply.py +0 -0
  299. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/migration_blast.py +0 -0
  300. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/non_coverage.py +0 -0
  301. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/openapi_surface.py +0 -0
  302. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/openrewrite_recipe.py +0 -0
  303. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/output_bounds.py +0 -0
  304. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/output_budget.py +0 -0
  305. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/output_ceiling.py +0 -0
  306. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/output_encoding.py +0 -0
  307. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/output_sink.py +0 -0
  308. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/pack_manifest.py +0 -0
  309. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/parallel.py +0 -0
  310. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/parse_cache.py +0 -0
  311. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/partial_contract.py +0 -0
  312. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/path_admission.py +0 -0
  313. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/path_display.py +0 -0
  314. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/path_filters.py +0 -0
  315. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/perf.py +0 -0
  316. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/phased_run.py +0 -0
  317. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/pipe_contract.py +0 -0
  318. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/posture.py +0 -0
  319. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/pr_comment_renderer.py +0 -0
  320. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/prepare_context.py +0 -0
  321. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/product_info.py +0 -0
  322. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/progress.py +0 -0
  323. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/provenance.py +0 -0
  324. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/ranking_engine.py +0 -0
  325. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/readiness_timeline.py +0 -0
  326. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/reconciliation.py +0 -0
  327. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/redactor.py +0 -0
  328. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/reference_facts.py +0 -0
  329. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/regress.py +0 -0
  330. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/release_info.py +0 -0
  331. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/relevance_scorer.py +0 -0
  332. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/remediation_diff.py +0 -0
  333. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/remedies.py +0 -0
  334. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/rename_refactor.py +0 -0
  335. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/repo_classifier.py +0 -0
  336. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/repository_ir.py +0 -0
  337. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/resource_budget.py +0 -0
  338. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/__init__.py +0 -0
  339. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/context.py +0 -0
  340. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/errors.py +0 -0
  341. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/executor.py +0 -0
  342. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/planner.py +0 -0
  343. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/query.py +0 -0
  344. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/request.py +0 -0
  345. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/resolution.py +0 -0
  346. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/result.py +0 -0
  347. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/retriever.py +0 -0
  348. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/runtime.py +0 -0
  349. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps.py +0 -0
  350. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  351. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_graph.py +0 -0
  352. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_impact.py +0 -0
  353. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_intf.py +0 -0
  354. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_struct.py +0 -0
  355. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  356. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/ris.py +0 -0
  357. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/risk.py +0 -0
  358. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/risk_model.py +0 -0
  359. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/rule_catalog.py +0 -0
  360. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/rule_pass.py +0 -0
  361. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/runs.py +0 -0
  362. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/runtime_classifier.py +0 -0
  363. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/sarif.py +0 -0
  364. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/sarif_emit.py +0 -0
  365. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/scanner.py +0 -0
  366. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schema.py +0 -0
  367. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schema_producers.py +0 -0
  368. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schema_registry.py +0 -0
  369. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  370. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  371. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  372. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  373. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  374. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  375. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/security_chain.py +0 -0
  376. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/security_config.py +0 -0
  377. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/security_config_scan.py +0 -0
  378. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/security_posture.py +0 -0
  379. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/selection_contract.py +0 -0
  380. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/selftest.py +0 -0
  381. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/semantic_analyzer.py +0 -0
  382. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/semantic_impact_engine.py +0 -0
  383. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/semantic_integration_engine.py +0 -0
  384. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/semantic_services.py +0 -0
  385. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/serializer.py +0 -0
  386. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/servlet_surface.py +0 -0
  387. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/source_text.py +0 -0
  388. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_event_topology.py +0 -0
  389. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_findings.py +0 -0
  390. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_impact.py +0 -0
  391. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_model.py +0 -0
  392. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_profiles.py +0 -0
  393. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_properties.py +0 -0
  394. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_security_audit.py +0 -0
  395. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_semantic.py +0 -0
  396. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/spring_tx_analyzer.py +0 -0
  397. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/sql_taint.py +0 -0
  398. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/summarizer.py +0 -0
  399. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/target_admission.py +0 -0
  400. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/__init__.py +0 -0
  401. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/config.py +0 -0
  402. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/consent.py +0 -0
  403. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/events.py +0 -0
  404. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/filters.py +0 -0
  405. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/telemetry/transport.py +0 -0
  406. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/test_gap_ranking.py +0 -0
  407. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/test_sources.py +0 -0
  408. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/text_input.py +0 -0
  409. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/timeline.py +0 -0
  410. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/timeline_cache.py +0 -0
  411. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/token_estimate.py +0 -0
  412. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/tree_utils.py +0 -0
  413. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/type_usage_surface.py +0 -0
  414. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/validation_inference.py +0 -0
  415. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/validation_surface.py +0 -0
  416. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/verify_edit.py +0 -0
  417. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/verify_repo.py +0 -0
  418. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/verify_rules.py +0 -0
  419. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/version_check.py +0 -0
  420. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/waivers.py +0 -0
  421. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/wired_surface.py +0 -0
  422. {sourcecode-5.8.29 → sourcecode-5.8.31}/src/sourcecode/workspace.py +0 -0
  423. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/functions/README.md +0 -0
  424. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/functions/get-license/index.ts +0 -0
  425. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  426. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/functions/telemetry/index.ts +0 -0
  427. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/sql/license_event_ordering.sql +0 -0
  428. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/sql/licensing_schema.sql +0 -0
  429. {sourcecode-5.8.29 → sourcecode-5.8.31}/supabase/sql/telemetry_events.sql +0 -0
@@ -0,0 +1,78 @@
1
+ name: Build Windows EXE
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ jobs:
7
+ build-windows:
8
+ runs-on: windows-latest
9
+
10
+ steps:
11
+ - name: Checkout repository
12
+ uses: actions/checkout@v4
13
+
14
+ - name: Setup Python
15
+ uses: actions/setup-python@v5
16
+ with:
17
+ python-version: "3.11"
18
+
19
+ - name: Install dependencies
20
+ run: |
21
+ python -m pip install --upgrade pip
22
+ pip install build
23
+ pip install nuitka
24
+
25
+ - name: Build wheel artifact
26
+ run: python -m build --wheel --outdir build/wheel
27
+
28
+ - name: Install wheel artifact
29
+ run: pip install build/wheel/*.whl
30
+
31
+ - name: Build EXE
32
+ run: |
33
+ python -m nuitka ^
34
+ --onefile ^
35
+ --standalone ^
36
+ --follow-imports ^
37
+ --assume-yes-for-downloads ^
38
+ --output-dir=build ^
39
+ run_cli.py
40
+ shell: cmd
41
+
42
+ - name: Verify detached worker from installed artifact
43
+ shell: pwsh
44
+ run: |
45
+ $root = Join-Path $env:RUNNER_TEMP "ask-detached-repo"
46
+ $output = Join-Path $env:RUNNER_TEMP "ask-detached.json"
47
+ New-Item -ItemType Directory -Force (Join-Path $root "src/main/java/com/acme") | Out-Null
48
+ Set-Content -Path (Join-Path $root "pom.xml") -Value '<project><modelVersion>4.0.0</modelVersion><groupId>com.acme</groupId><artifactId>app</artifactId><version>1</version></project>'
49
+ Set-Content -Path (Join-Path $root "src/main/java/com/acme/App.java") -Value 'package com.acme; public class App {}'
50
+ python -m sourcecode spring-audit $root --output $output --detach
51
+ for ($i = 0; $i -lt 60 -and -not (Test-Path $output); $i++) { Start-Sleep -Seconds 1 }
52
+ if (-not (Test-Path $output)) { throw "Detached worker did not write its artifact" }
53
+ $payload = Get-Content $output -Raw | ConvertFrom-Json
54
+ if (-not $payload) { throw "Detached artifact is not valid JSON" }
55
+
56
+ - name: Verify pack fixes from installed artifact
57
+ shell: pwsh
58
+ run: |
59
+ $root = Join-Path $env:RUNNER_TEMP "ask-pack-repo"
60
+ New-Item -ItemType Directory -Force (Join-Path $root "src/main/java/com/acme") | Out-Null
61
+ New-Item -ItemType Directory -Force (Join-Path $root "src/test/java/com/acme") | Out-Null
62
+ Set-Content -Path (Join-Path $root "pom.xml") -Value '<project><modelVersion>4.0.0</modelVersion><groupId>com.acme</groupId><artifactId>app</artifactId><version>1</version></project>'
63
+ Set-Content -Path (Join-Path $root "src/main/java/com/acme/App.java") -Value 'package com.acme; public class App {}'
64
+ Set-Content -Path (Join-Path $root "src/test/java/com/acme/AppTest.java") -Value 'package com.acme; public class AppTest {}'
65
+ git -C $root init --quiet
66
+ git -C $root config user.email ci@example.invalid
67
+ git -C $root config user.name ASK-CI
68
+ git -C $root add .
69
+ git -C $root commit --quiet -m baseline
70
+ Add-Content -Path (Join-Path $root "src/test/java/com/acme/AppTest.java") -Value '// test-only change'
71
+ python -m sourcecode pack gate $root --since HEAD --format json --output-dir (Join-Path $env:RUNNER_TEMP "ask-gate")
72
+ python -m sourcecode pack assessment $root --only posture,risk --compact --progress stderr
73
+
74
+ - name: Upload artifact
75
+ uses: actions/upload-artifact@v4
76
+ with:
77
+ name: sourcecode-windows
78
+ path: build/**/*.exe
@@ -17,8 +17,6 @@ jobs:
17
17
  battery:
18
18
  runs-on: windows-latest
19
19
  env:
20
- NO_COLOR: "1"
21
- TERM: "dumb"
22
20
  # CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
23
21
  # decodes child-process output with the active code page, turning a valid
24
22
  # JSON answer containing source text into an empty/failed test response.
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.8.31] — 2026-08-26
4
+
5
+ *Windows portability and release-evidence remediation. Cache and licensing test
6
+ isolation now honours explicit `HOME` overrides, warm workers use the active
7
+ interpreter, migration and identity paths remain portable, and the Windows CI
8
+ battery no longer disables the rendered help contract. Unix-only permission probes
9
+ are skipped on Windows. Local full-suite verification is green; native Windows
10
+ release-artifact verification remains the CI acceptance step.*
11
+
12
+ ## [5.8.30] — 2026-08-26
13
+
14
+ *Pack audit remediation release. Unresolved test-only Java files no longer broaden
15
+ `pack gate` endpoint uncertainty, and foreground `pack assessment` now reports
16
+ component progress through the stderr-only heartbeat contract. Documentation and
17
+ release evidence are synchronized with the AUD-605 fixes.*
18
+
3
19
  ## [5.8.29] — 2026-08-26
4
20
 
5
21
  *Release synchronization for the external `5.8.28` audit. The posture diff now
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.29
3
+ Version: 5.8.31
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.29-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.8.31-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
@@ -177,14 +177,14 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
177
177
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
178
178
  unset, or set it to `0`, to disable the ceiling explicitly.
179
179
 
180
- **Current performance status.** Release 5.8.29 retains the shared Canonical IR
180
+ **Current performance status.** Release 5.8.31 retains the shared Canonical IR
181
181
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
182
182
  runs; the no-label path remains parse-free. These are implementation properties,
183
183
  not duration promises. A controlled external warm-path audit has opened performance
184
184
  and bounded-output regressions for this release; use `ask cache model <repo>` and
185
185
  `--progress stderr` for supervised runs, and consult the
186
- [active audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md) before treating a
187
- historical timing or bounded flag as a current guarantee.
186
+ [active pack audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md) before
187
+ treating a historical timing or bounded flag as a current guarantee.
188
188
 
189
189
  **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
190
190
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
@@ -210,7 +210,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
210
210
  # pip / pipx
211
211
  pipx install sourcecode # or: pip install sourcecode
212
212
 
213
- ask version # ask 5.8.29 — and, on a build that has aged,
213
+ ask version # ask 5.8.31 — and, on a build that has aged,
214
214
  # how many releases have probably shipped since
215
215
  ```
216
216
 
@@ -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.29-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.8.31-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
@@ -128,14 +128,14 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
128
128
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
129
129
  unset, or set it to `0`, to disable the ceiling explicitly.
130
130
 
131
- **Current performance status.** Release 5.8.29 retains the shared Canonical IR
131
+ **Current performance status.** Release 5.8.31 retains the shared Canonical IR
132
132
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
133
133
  runs; the no-label path remains parse-free. These are implementation properties,
134
134
  not duration promises. A controlled external warm-path audit has opened performance
135
135
  and bounded-output regressions for this release; use `ask cache model <repo>` and
136
136
  `--progress stderr` for supervised runs, and consult the
137
- [active audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md) before treating a
138
- historical timing or bounded flag as a current guarantee.
137
+ [active pack audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md) before
138
+ treating a historical timing or bounded flag as a current guarantee.
139
139
 
140
140
  **What a warm actually covers.** `ask cache warm` runs the compact analysis: it rebuilds the
141
141
  shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
@@ -161,7 +161,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
161
161
  # pip / pipx
162
162
  pipx install sourcecode # or: pip install sourcecode
163
163
 
164
- ask version # ask 5.8.29 — and, on a build that has aged,
164
+ ask version # ask 5.8.31 — and, on a build that has aged,
165
165
  # how many releases have probably shipped since
166
166
  ```
167
167
 
@@ -0,0 +1,35 @@
1
+ # ASK Engine 5.8.28 - External Pack Audit Intake
2
+
3
+ **Received:** 2026-08-26
4
+ **Audited surface:** `pack list`, `pack assessment` and `pack gate` on
5
+ `spring-petclinic`
6
+ **Related release:** `5.8.28` (remediation release: `5.8.30`)
7
+
8
+ ## Findings
9
+
10
+ | ID | Priority | Status | Finding and acceptance criterion |
11
+ |---|---:|---|---|
12
+ | `AUD-605-G01` | P2 | implemented in current checkout | `pack gate --since HEAD~3` marked unrelated endpoints `unknown` when a changed Java test file contributed no CIR symbols. Unresolved test files remain evidence, while only unresolved production files can broaden endpoint uncertainty. Regression coverage is in `tests/test_pr_impact.py`; release-artifact verification remains pending. |
13
+ | `AUD-605-U01` | P2 | implemented in current checkout | Foreground `pack assessment` emitted no `ASK_PROGRESS` heartbeat for more than five minutes while its subprocess components ran. The parent now reports components `1/6` through `6/6` through the existing stderr-only progress contract, preserving JSON stdout and component attribution. Regression coverage is in `tests/test_packs.py`; release-artifact verification remains pending. |
14
+
15
+ ## Existing Signal, Not A New Row
16
+
17
+ `pack gate --since` took about 49 s, with posture accounting for about 44 s.
18
+ This is additional evidence for `AUD-604-P01` / the controlled cold-cost follow-up,
19
+ not a separate regression: the audit did not provide a matched release benchmark
20
+ or an attributable profile. Pack list, assessment's verdict composition and
21
+ `no_contracts_declared` handling were otherwise correct.
22
+
23
+ The SARIF repository URL observation was verified as a false positive. No new
24
+ security, traceback, write-leakage or process-zombie defect was found.
25
+
26
+ ## Order
27
+
28
+ 1. `AUD-605-G01` - narrow unresolved-file uncertainty to its actual production reach.
29
+ 2. `AUD-605-U01` - forward coarse progress from pack components.
30
+
31
+ ## Remediation Evidence
32
+
33
+ - `52bcc36` - `fix(pr-impact): ignore test-only unresolved files`
34
+ - `f89ae18` - `fix(pack): report assessment component progress`
35
+ - Focused batteries: 49 impact/disposition tests and 49 pack/heartbeat/stderr tests passed.
@@ -16,6 +16,18 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
16
16
 
17
17
  ## Current Synchronization
18
18
 
19
+ **External pack audit received, 2026-08-26 - `AUD-605`.**
20
+ [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md)
21
+ adds two rows: `AUD-605-G01`, where an unresolved test file broadened pack-gate unknown
22
+ endpoints beyond its real production reach, and `AUD-605-U01`, where foreground `pack
23
+ assessment` did not forward component progress. Both are implemented in the current
24
+ checkout by `52bcc36` and `f89ae18`, with focused regression batteries passing; release
25
+ artefact verification remains pending. The pack's `--since` timing is additional evidence
26
+ for `AUD-604-P01`, not a duplicate performance finding.
27
+
28
+ **Current `5.8.31` queue:** artefact verification for `AUD-604-R01`; the two `AUD-605`
29
+ fixes are included in this release and await release-artefact verification.
30
+
19
31
  **External `5.8.28` audit received, 2026-08-26 - `AUD-604`.**
20
32
  [`AUDIT-2026-08-26-EXTERNAL-5.8.28.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28.md) confirms the
21
33
  semantic fixes from the previous round and adds three actionable rows: `AUD-604-O01`
@@ -3,12 +3,61 @@
3
3
  *Chief-engineer development record. This is the internal, dev-facing counterpart to the
4
4
  customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
5
5
 
6
- > **CURRENT QUEUE — release `5.8.29`, following the external audit of `5.8.28`, received 2026-08-26.** `AUD-604-R01` remains an artefact-level
6
+ > **CURRENT QUEUE — release `5.8.31`, following the external pack audit of `5.8.28`, received 2026-08-26.** `AUD-605-G01` (P2,
7
+ > unresolved test files broadened pack-gate uncertainty to unrelated endpoints) and `AUD-605-U01` (P2, pack assessment did not
8
+ > forward foreground progress) are implemented in the current checkout in commits `52bcc36` and `f89ae18`; focused batteries pass.
9
+ > The pack audit adds evidence to `AUD-604-P01`, but does not open a duplicate performance row.
10
+ > `AUD-604-R01` remains an artefact-level
7
11
  > Windows verification item; its current source implementation is executable. `AUD-604-S01`,
8
12
  > `AUD-604-D01`, `AUD-604-U02`, `AUD-604-O01` and `AUD-604-U01` are closed in `5.8.28`.
9
13
  > `AUD-604-P01` is closed as an unconfirmed, non-attributable signal after controlled profiling.
10
14
  > Full evidence is
11
15
  > in [`AUDIT-2026-08-26-EXTERNAL-5.8.28.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28.md).
16
+ > Pack evidence is in [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md). Release-artifact
17
+ > verification of the two pack fixes remains after `AUD-604-R01`.
18
+
19
+ ## Current Product Direction
20
+
21
+ This is the adopted interpretation of the external strategy report. It supersedes
22
+ the report's broader or duplicate proposals while retaining the historical queues
23
+ below as evidence. The governing product boundary remains the deterministic,
24
+ source-backed Java/Spring evidence layer in [`PRODUCT-ROUTE.md`](PRODUCT-ROUTE.md).
25
+
26
+ ### Fixes
27
+
28
+ | ID | Priority | Scope | Acceptance criteria | Status/order |
29
+ |---|---:|---|---|---|
30
+ | `DIR-F01` | P1 | Replace pattern-only security decisions with shared semantic authorities. Distinguish definitions from invocations and production code from tests, examples and library code. | Each affected rule has a named population, source-backed reason and `non_coverage`; false-positive fixtures cover the reported `SEC-004` / `DEAD-001` shapes. | **Implemented:** current security scans exclude platform definitions, imports, Javadoc and live controls; future rules must use the same authority. |
31
+ | `DIR-F02` | P1 | Extend safe guardrails to genuinely heavy commands and compositions. | A bounded run stops the phase doing the work, publishes partial counts and confidence reduction, preserves completed evidence, and never presents an advisory-only command as enforceable. | **Implemented:** `BUDGETED_ANALYSIS_COMMANDS`, `PhasedRun` and partial-answer contracts bind the current heavy population. New heavy commands must join this registry. |
32
+ | `DIR-F03` | P1 | Finish CI gate ergonomics without weakening its evidence contract. | Verify the `5.8.31` pack fixes in release artefacts, then add only evidence-backed improvements such as PR-native change resolution and selective component control. `AUD-605-G01` is already fixed; test-only unresolved files must not return as a roadmap item. | **Implemented in `4d87532`:** `pack gate --pr` uses GitHub changed files and requires the exact local base SHA. Release-artifact verification remains. |
33
+ | `DIR-F04` | P2 | Consolidate reusable semantic predicates used by security and dead-code rules. | One authority is consumed by all relevant rules; population and parity tests prevent a rule from silently reverting to textual matching. This is an implementation constraint, not a new user-facing command. | **Implemented for current rules:** `source_text` owns comment/Javadoc views and security scans consume them. Future rules remain bound to this constraint. |
34
+ | `DIR-F05` | P2 | Continue operational observability for cost and confidence. | Timed answers publish cache state, phase/component progress, coverage, confidence and attributable run conditions; no cross-repository SLA or single-machine duration promise is published. | **Implemented for current timed surfaces;** continuous admission rule for new ones. |
35
+
36
+ ### Features
37
+
38
+ | ID | Priority | Feature | Boundary and acceptance criteria | Status/order |
39
+ |---|---:|---|---|---|
40
+ | `DIR-X01` | P1 | Narrow Spring data-flow analysis. | Start with HTTP inputs, SQL/command/network/template sinks and explicit sanitizers. Publish confirmed paths, confidence and non-coverage; do not claim CodeQL-equivalent coverage. Design only after `DIR-F01` and `DIR-F02` are stable. | Conditional medium-term bet |
41
+ | `DIR-X02` | P2 | CI and developer-surface integrations. | Prefer a thin GitHub Action and existing SARIF/CI renderers over another analyzer. A future IDE integration must consume ASK JSON/MCP evidence, preserve attribution and add no second semantic model. | **Implemented baseline:** MCP, SARIF and GitHub/GitLab renderers ship. A distributable Action or IDE surface needs named-buyer validation. |
42
+ | `DIR-X03` | P2 | Selective and reusable pack execution. | `pack assessment` may select or reuse declared components only when tree state, inputs and fingerprints prove reuse; the manifest must say what ran and what was reused. This extends existing `S-24`, not a new pack architecture. | **Selection implemented in `9f4c0e1`:** `--only` runs declared components and publishes omissions. Artifact reuse remains evidence-gated. |
43
+ | `DIR-X04` | P3 | Targeted Spring ecosystem coverage. | Admit Spring Cloud, GraphQL or another adjacent surface only when a named buyer supplies a reproducible gap and the new parser/rule set preserves the same evidence contract. | Evidence-gated |
44
+
45
+ ### Explicitly Rejected
46
+
47
+ These are not roadmap work: `--format` and `--compact` remain separate contracts;
48
+ `ask defects` is not a product priority; broad .NET/Node/TypeScript expansion is
49
+ deferred; ML-based prioritisation and automatic refactoring stay outside ASK's
50
+ deterministic core; SBOM/dashboard/hosted-agent scope is outside the product route;
51
+ and competitor accuracy claims require a reproducible benchmark before they can be
52
+ documented as facts.
53
+
54
+ ### Decision Order
55
+
56
+ 1. Verify the `5.8.31` release artefacts, especially Windows detached execution and packs.
57
+ 2. Keep `DIR-F01`, `DIR-F02`, `DIR-F04` and `DIR-F05` as admission constraints for every new rule or heavy command.
58
+ 3. Validate `DIR-F03` and `DIR-X03` on named CI repositories before adding artifact reuse or a packaged Action.
59
+ 4. Design `DIR-X01` only after a source/sink/sanitizer corpus establishes its coverage contract; admit `DIR-X04` only from buyer evidence.
60
+ 5. Keep all rejected items out of active planning unless the product route is explicitly revised.
12
61
 
13
62
  > **Previous queue — external audit of `5.8.27`, received 2026-08-26.** `AUD-603-R01` (P1,
14
63
  > detached worker exits because the module entry point is not invoked) -> `AUD-603-S01`
@@ -5,7 +5,7 @@
5
5
  > `pack assessment` and `pack gate`, and make evidence and safe change the
6
6
  > product surface. This roadmap must not introduce a competing product thesis.
7
7
 
8
- > **CURRENT STATUS — release `5.8.29`, following the `5.8.28` external audit intake, 2026-08-26.** The semantic
8
+ > **CURRENT STATUS — release `5.8.31`, following the `5.8.28` external audit intake, 2026-08-26.** The semantic
9
9
  > regression matrix remains green: detached execution, DEAD-001 comment handling,
10
10
  > Boot 3 applicability, non-interactive selftest scope communication, nested diff
11
11
  > bounding and help timing guidance are confirmed fixed. The reported cold-cost signal
@@ -19,6 +19,39 @@
19
19
  > evidence, not an unverified claim of a new source defect. WebScripts and root-only
20
20
  > subcommand `--compact` remain excluded by design/evidence status.
21
21
 
22
+ > **PACK AUDIT UPDATE — `AUD-605`, 2026-08-26.** Two pack-specific issues were identified:
23
+ > a test-only unresolved Java file could broaden `pack gate` uncertainty to unrelated
24
+ > endpoints, and foreground `pack assessment` did not show component progress. Both are
25
+ > implemented in the current checkout (`52bcc36`, `f89ae18`) with focused batteries green;
26
+ > release-artifact verification remains pending. The
27
+ > pack's slower `--since` run is evidence for the existing cold-cost investigation,
28
+ > not a separate regression claim. Details are in
29
+ > [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md).
30
+
31
+ > **ADOPTED DIRECTION — strategy review, 2026-08-26.** ASK will deepen its existing
32
+ > moat instead of becoming a general SAST or AI platform. Semantic security accuracy,
33
+ > safe guardrails and honest operational metrics are now implementation constraints;
34
+ > CI gate ergonomics and selective pack execution are implemented in `4d87532` and
35
+ > `9f4c0e1`. The remaining strategic candidates are a narrowly scoped Spring data-flow
36
+ > prototype and evidence-led coverage of adjacent Spring surfaces.
37
+
38
+ > **What this means in practice.** Every fix must name its analysed population, source
39
+ > authority, confidence and non-coverage, and ship with a regression fixture. Every new
40
+ > feature must reuse the shared semantic model, preserve deterministic evidence and have
41
+ > a named buyer or reproducible user gap. `AUD-605-G01` is already fixed in 5.8.31; it is
42
+ > not reopened as a future feature merely because the report described the old behaviour.
43
+
44
+ > **Explicitly out of scope.** `--format` and `--compact` remain separate contracts;
45
+ > a defect-ledger command, broad .NET/Node/TypeScript support, ML prioritisation,
46
+ > automatic refactoring, generic SBOM/dashboard management and a hosted coding agent
47
+ > are rejected for this route. Competitor accuracy figures are not roadmap evidence
48
+ > without a reproducible benchmark.
49
+
50
+ > **Order:** verify the 5.8.31 artefacts; validate the new CI/pack paths with named buyers;
51
+ > then admit data-flow only with a source/sink/sanitizer corpus and ecosystem work only with
52
+ > buyer evidence. Detailed IDs, boundaries and acceptance criteria are in
53
+ > [`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md) under *Current Product Direction*.
54
+
22
55
  > **CURRENT STATUS — `5.8.26` external audit intake, 2026-08-23.** The active engineering
23
56
  > queue is `impact-chain` bounded-output regression, `posture --diff --compact` usability,
24
57
  > deterministic root fingerprints, sustained warm-path performance and closure-provenance
@@ -46,13 +46,14 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
46
46
  The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
47
47
  where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
48
48
  warm buys for each command rather than implying that every projection costs the same. In
49
- 5.8.29, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.8.31, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
50
50
  model across all declared label seeds. (The extraction and consumption contract is fixed in
51
51
  the architecture ADRs 0001–0004 under `docs/architecture/`.)
52
52
 
53
- The current external audit intake is tracked in
54
- [`AUDIT-2026-08-26-EXTERNAL-5.8.27.md`](AUDIT-2026-08-26-EXTERNAL-5.8.27.md); in
55
- particular, detached execution and bounded output remain under verification.
53
+ The current external pack audit intake is tracked in
54
+ [`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
55
+ the two pack fixes are included in release 5.8.31, with release-artifact verification
56
+ remaining for detached execution and pack evidence.
56
57
 
57
58
  ---
58
59
 
@@ -182,7 +183,7 @@ pipx install sourcecode # isolated install, no venv needed
182
183
 
183
184
  # Verify
184
185
  ask version
185
- # ask 5.8.29
186
+ # ask 5.8.31
186
187
  ```
187
188
 
188
189
  Requires Python 3.9+.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.8.29"
7
+ version = "5.8.31"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "5.8.29"
7
+ __version__ = "5.8.31"
@@ -82,6 +82,12 @@ CORE_SCHEMA_VERSION: str = "1"
82
82
  ANALYZER_CACHE_VERSION: str = "1"
83
83
 
84
84
 
85
+ def _user_home() -> Path:
86
+ """Honor an explicit HOME override before Windows' USERPROFILE fallback."""
87
+ configured = os.environ.get("HOME")
88
+ return Path(configured) if configured else Path.home()
89
+
90
+
85
91
  def analyzer_fingerprint() -> str:
86
92
  """Content hash of the analysis code, memoised for the process.
87
93
 
@@ -325,7 +331,7 @@ def cache_dir(repo_root: Path) -> Path:
325
331
  Override the base via ``SOURCECODE_CACHE_DIR``.
326
332
  """
327
333
  env_base = os.environ.get("SOURCECODE_CACHE_DIR", "")
328
- base: Path = Path(env_base) if env_base else Path.home() / ".sourcecode" / "cache"
334
+ base: Path = Path(env_base) if env_base else _user_home() / ".sourcecode" / "cache"
329
335
  return base / repo_id(repo_root)
330
336
 
331
337
 
@@ -3415,7 +3415,6 @@ COMMANDS_WITHOUT_PROGRESS: "frozenset[str]" = frozenset({
3415
3415
  "baseline trend", # same command under the group name
3416
3416
  "regress", # reads two named JSON files; analyses no repository
3417
3417
  "pack list", # fixed local catalog
3418
- "pack assessment", # child progress is captured for aggregate JSON
3419
3418
  "pack gate", # child progress is captured for aggregate JSON
3420
3419
  })
3421
3420
 
@@ -4332,6 +4331,11 @@ def pack_assessment_cmd(
4332
4331
  help="Deployment artefact for posture evidence (repeatable: k8s, Compose, Dockerfile, WebLogic, dotenv or launch script).",
4333
4332
  ),
4334
4333
  compact: bool = typer.Option(False, "--compact", help="Keep component reports bounded where supported."),
4334
+ only: Optional[str] = typer.Option(
4335
+ None,
4336
+ "--only",
4337
+ help="Comma-separated assessment components to run; audit-report requires risk.",
4338
+ ),
4335
4339
  output_dir: Optional[Path] = typer.Option(
4336
4340
  None,
4337
4341
  "--output-dir",
@@ -4340,13 +4344,14 @@ def pack_assessment_cmd(
4340
4344
  format: str = _format_option(help="Output format: json, yaml or markdown."),
4341
4345
  copy: bool = _copy_option(),
4342
4346
  output_path: Optional[Path] = _output_option(),
4347
+ progress_mode: Optional[str] = _progress_option(),
4343
4348
  ) -> None:
4344
4349
  """Modernization and Risk Assessment pack.
4345
4350
 
4346
4351
  Composes existing commands into one consumable report. Individual commands
4347
4352
  remain available and are the source of truth for every artifact.
4348
4353
  """
4349
- from sourcecode.packs import render_assessment_markdown, run_assessment
4354
+ from sourcecode.packs import assessment_components, render_assessment_markdown, run_assessment
4350
4355
 
4351
4356
  root = _admit_path(path)
4352
4357
  if profile and deployment:
@@ -4357,28 +4362,51 @@ def pack_assessment_cmd(
4357
4362
  )
4358
4363
  raise typer.Exit(code=2)
4359
4364
  _enforce_format("pack-assessment", format)
4360
- data = run_assessment(
4361
- root, profile=profile, deployment=deployment, compact=compact, output_dir=output_dir,
4362
- )
4365
+ try:
4366
+ selected_components = assessment_components(only.split(",") if only is not None else None)
4367
+ except ValueError as exc:
4368
+ _emit_error_json(INVALID_INPUT_CODE, str(exc))
4369
+ raise typer.Exit(code=2)
4370
+ _progress = Progress().start("pack assessment")
4371
+ try:
4372
+ data = run_assessment(
4373
+ root, profile=profile, deployment=deployment, compact=compact, output_dir=output_dir,
4374
+ selected_components=selected_components,
4375
+ progress=lambda done, total, component: _progress.work(
4376
+ done, total, stage=f"pack assessment: {component}",
4377
+ unit="components", estimate=False,
4378
+ ),
4379
+ )
4380
+ except BaseException:
4381
+ _progress.stop()
4382
+ raise
4363
4383
  output = render_assessment_markdown(data) if format == "markdown" else _serialize_dict(data, format)
4364
4384
  # AUD-600-D01: when the pack decided at t=0 that it may not write into the
4365
4385
  # analysed tree, the aggregate must not be routed there either — the same
4366
4386
  # decision, one destination later.
4367
4387
  _dir = None if data.get("no_write_substitution") else output_dir
4368
- _emit_command_output(
4369
- output,
4370
- _pack_output_path(_dir, output_path, format),
4371
- copy,
4372
- stamp_envelope=(format != "markdown"),
4373
- )
4374
- if data["verdict"] == "UNVERIFIED":
4375
- raise typer.Exit(code=2)
4388
+ try:
4389
+ _emit_command_output(
4390
+ output,
4391
+ _pack_output_path(_dir, output_path, format),
4392
+ copy,
4393
+ stamp_envelope=(format != "markdown"),
4394
+ )
4395
+ if data["verdict"] == "UNVERIFIED":
4396
+ raise typer.Exit(code=2)
4397
+ finally:
4398
+ _progress.finish()
4376
4399
 
4377
4400
 
4378
4401
  @pack_app.command("gate")
4379
4402
  def pack_gate_cmd(
4380
4403
  path: Path = typer.Argument(Path("."), help="Repository path (default: current directory)."),
4381
- since: str = typer.Option(..., "--since", help="Git ref used as the comparison base."),
4404
+ since: Optional[str] = typer.Option(None, "--since", help="Local Git ref used as the comparison base."),
4405
+ pr: Optional[int] = typer.Option(
4406
+ None,
4407
+ "--pr",
4408
+ help="GitHub pull request number; resolves changed files and requires its base commit locally.",
4409
+ ),
4382
4410
  profile: Optional[str] = typer.Option(None, "--profile", help="Profile set used for posture evidence."),
4383
4411
  compact: bool = typer.Option(False, "--compact", help="Omit component payload bodies from the aggregate."),
4384
4412
  allow_unverified: bool = typer.Option(False, "--allow-unverified", help="Allow an unverified component to exit 0."),
@@ -4404,7 +4432,37 @@ def pack_gate_cmd(
4404
4432
  from sourcecode.packs import run_gate
4405
4433
 
4406
4434
  root = _admit_path(path, exit_code=2)
4407
- data = run_gate(root, since=since, profile=profile, allow_unverified=allow_unverified, compact=compact, output_dir=output_dir)
4435
+ if since is not None and pr is not None:
4436
+ _emit_error_json(
4437
+ INVALID_INPUT_CODE,
4438
+ "--since and --pr describe mutually exclusive comparison bases.",
4439
+ hint="Use --since REF for a local comparison or --pr NUMBER for GitHub pull-request mode.",
4440
+ )
4441
+ raise typer.Exit(code=2)
4442
+ if since is None and pr is None:
4443
+ _emit_error_json(
4444
+ INVALID_INPUT_CODE,
4445
+ "pack gate requires --since REF or --pr NUMBER.",
4446
+ hint="Use --since origin/main, or --pr 123 when the GitHub base commit is available locally.",
4447
+ )
4448
+ raise typer.Exit(code=2)
4449
+ comparison_ref = since
4450
+ if pr is not None:
4451
+ try:
4452
+ from sourcecode.github_diff import pull_request_base_ref
4453
+
4454
+ comparison_ref, _description = pull_request_base_ref(root, pr)
4455
+ except Exception as exc:
4456
+ from sourcecode.github_diff import GitHubDiffError
4457
+
4458
+ if isinstance(exc, GitHubDiffError):
4459
+ _emit_error_json(INVALID_INPUT_CODE, str(exc), pr=pr)
4460
+ raise typer.Exit(code=2)
4461
+ raise
4462
+ data = run_gate(
4463
+ root, since=comparison_ref or "", pr=pr, profile=profile,
4464
+ allow_unverified=allow_unverified, compact=compact, output_dir=output_dir,
4465
+ )
4408
4466
  if format in {"github-actions", "gitlab"}:
4409
4467
  from sourcecode.ci_output import render_pack_gate_github_actions, render_pack_gate_gitlab
4410
4468
  output = (render_pack_gate_github_actions(data)
@@ -18670,7 +18728,6 @@ def cache_warm_cmd(
18670
18728
  this command reports. Cache ~/.sourcecode/cache and ~/.sourcecode between jobs,
18671
18729
  or budget the cold run explicitly.
18672
18730
  """
18673
- import shutil as _shutil
18674
18731
  import subprocess as _sub
18675
18732
  import time as _warm_time
18676
18733
  # Warm exactly the path given. Resolving up to the enclosing git root warmed
@@ -18702,7 +18759,11 @@ def cache_warm_cmd(
18702
18759
  f"(scoped to {target}; the enclosing git repository is {_git_root} — "
18703
18760
  "git-derived signals are computed within the scope above)"
18704
18761
  )
18705
- _sc_bin = _shutil.which("sourcecode") or sys.argv[0]
18762
+ # Launch the worker through this interpreter rather than resolving a second
18763
+ # console script from PATH. A stale global script can otherwise warm one
18764
+ # package installation while the caller reads another one, leaving a view
18765
+ # apparently fresh even though its cache entry was never written.
18766
+ _sc_bin = [sys.executable, "-m", "sourcecode"]
18706
18767
 
18707
18768
  # AUD-600-R01: which views a warm builds is `cache_model`'s fact, not a pair
18708
18769
  # of literals here. The warm used to run one child with `--compact` and an
@@ -18751,7 +18812,7 @@ def cache_warm_cmd(
18751
18812
  # stderr: the line above says it started, the spinner says it is still going.
18752
18813
  _warmed_ids: list[str] = []
18753
18814
  for _view in _selected:
18754
- cmd = [_sc_bin, str(target), *_warm_view_flags(_view.id)]
18815
+ cmd = [*_sc_bin, str(target), *_warm_view_flags(_view.id)]
18755
18816
  _prog = Progress()
18756
18817
  _prog.start(f"running full analysis ({_view.id} view)")
18757
18818
  try:
@@ -81,7 +81,7 @@ def _tree_state(target: Path) -> "tuple[str, str, str]":
81
81
  return "", "", ""
82
82
  # Git for Windows emits forward slashes while Path resolves to native
83
83
  # separators. Restore the platform-native spelling for this path contract.
84
- root = str(Path(root))
84
+ root = portable_path(Path(root))
85
85
  prefix = _git(["rev-parse", "--show-prefix"], target)
86
86
  head = _git(["rev-parse", "HEAD"], target) or "no-commit"
87
87
  dirty = _git(["status", "--porcelain"], target)