sourcecode 5.8.28__tar.gz → 5.8.30__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (427) hide show
  1. {sourcecode-5.8.28 → sourcecode-5.8.30}/CHANGELOG.md +15 -0
  2. {sourcecode-5.8.28 → sourcecode-5.8.30}/PKG-INFO +6 -6
  3. {sourcecode-5.8.28 → sourcecode-5.8.30}/README.md +5 -5
  4. sourcecode-5.8.30/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +35 -0
  5. sourcecode-5.8.30/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +56 -0
  6. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/DEFECT-LEDGER.md +28 -0
  7. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/DEVELOPMENT-ROADMAP.md +14 -1
  8. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/EXECUTIVE-ROADMAP.md +23 -0
  9. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/USER_GUIDE.md +6 -5
  10. {sourcecode-5.8.28 → sourcecode-5.8.30}/pyproject.toml +1 -1
  11. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/perf_harness.py +1 -1
  12. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/baseline_autocapture.py +4 -2
  14. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/cache_model.py +9 -1
  15. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/cli.py +33 -20
  16. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/envelope.py +5 -3
  17. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/graph_analyzer.py +3 -2
  18. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/output_bounds.py +4 -0
  19. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/packs.py +9 -3
  20. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/path_admission.py +2 -1
  21. sourcecode-5.8.30/src/sourcecode/path_display.py +7 -0
  22. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/pr_impact.py +28 -3
  23. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/repository_ir.py +4 -1
  24. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/tree_utils.py +4 -2
  25. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/verify_repo.py +5 -4
  26. {sourcecode-5.8.28 → sourcecode-5.8.30}/.github/workflows/build-windows.yml +0 -0
  27. {sourcecode-5.8.28 → sourcecode-5.8.30}/.github/workflows/perf-gate.yml +0 -0
  28. {sourcecode-5.8.28 → sourcecode-5.8.30}/.github/workflows/windows-battery.yml +0 -0
  29. {sourcecode-5.8.28 → sourcecode-5.8.30}/.gitignore +0 -0
  30. {sourcecode-5.8.28 → sourcecode-5.8.30}/.ruff.toml +0 -0
  31. {sourcecode-5.8.28 → sourcecode-5.8.30}/CLAUDE.md +0 -0
  32. {sourcecode-5.8.28 → sourcecode-5.8.30}/CODE_OF_CONDUCT.md +0 -0
  33. {sourcecode-5.8.28 → sourcecode-5.8.30}/CONTRIBUTING.md +0 -0
  34. {sourcecode-5.8.28 → sourcecode-5.8.30}/LICENSE +0 -0
  35. {sourcecode-5.8.28 → sourcecode-5.8.30}/NOTICE +0 -0
  36. {sourcecode-5.8.28 → sourcecode-5.8.30}/SECURITY.md +0 -0
  37. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  38. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  39. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  40. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
  41. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
  42. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
  43. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
  44. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
  45. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
  46. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  47. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/CACHE.md +0 -0
  48. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/COMMERCIAL-OFFER.md +0 -0
  49. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/CUSTOMER-VALIDATION.md +0 -0
  50. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/DEMO-5MIN.md +0 -0
  51. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
  52. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/EXECUTION-PLAN-12MO.md +0 -0
  53. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/MANUAL-USUARIO.md +0 -0
  54. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/MODERNIZATION.md +0 -0
  55. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/PRODUCT-ROUTE.md +0 -0
  56. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/PRODUCT_AUDIT.md +0 -0
  57. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/PRODUCT_IDENTITY.md +0 -0
  58. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/PRODUCT_TIERS.md +0 -0
  59. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/RC1-CHECKLIST.md +0 -0
  60. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/RELEASE-CHECKLIST.md +0 -0
  61. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  62. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  63. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-assessment-report.md +0 -0
  64. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  65. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  66. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  67. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  68. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  69. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  70. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  71. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  72. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  73. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  74. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  75. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  76. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  77. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  78. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  79. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  80. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  81. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  82. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  83. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  84. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  85. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  86. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0006-performance-harness.md +0 -0
  87. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  88. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  89. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/consumer-disposition-inventory.md +0 -0
  90. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/overview.md +0 -0
  91. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/product-architecture-review.md +0 -0
  92. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/product-strategy-layering.md +0 -0
  93. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  94. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/architecture/semantic-ir-roadmap.md +0 -0
  95. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/baseline-ci.yml +0 -0
  96. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/commercial-pipeline-audit.md +0 -0
  97. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/contracts-ci.yml +0 -0
  98. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/contracts.md +0 -0
  99. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  100. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  101. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  102. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  103. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  104. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  105. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  106. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  107. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/licensing-schema.md +0 -0
  108. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/migrate-check.md +0 -0
  109. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/pack-gate-github-actions.yml +0 -0
  110. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/pack-gate-gitlab.yml +0 -0
  111. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/README.md +0 -0
  112. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/REGRESSION-GATE.md +0 -0
  113. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  114. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  115. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  116. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  117. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  118. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  119. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  120. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  121. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  122. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  123. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  124. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  125. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  126. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  127. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  128. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  129. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  130. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  131. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  132. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  133. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  134. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  135. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  136. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  137. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  138. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  139. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  140. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  141. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  142. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  143. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  144. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  145. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  146. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  147. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  148. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  149. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  150. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  151. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  152. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  153. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  154. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  155. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/README.md +0 -0
  156. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  157. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  158. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  159. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  160. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  161. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  162. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/baselines/reference-best/README.md +0 -0
  163. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  164. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/posture.md +0 -0
  165. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/privacy.md +0 -0
  166. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/pro-experience-audit.md +0 -0
  167. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/schema.md +0 -0
  168. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/spec/envelope-v1.md +0 -0
  169. {sourcecode-5.8.28 → sourcecode-5.8.30}/docs/spring-audit-ci.yml +0 -0
  170. {sourcecode-5.8.28 → sourcecode-5.8.30}/hatch_build.py +0 -0
  171. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/compare_integration_engines.py +0 -0
  172. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/customer_smoke_test.sh +0 -0
  173. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/generate_jdk_exports.py +0 -0
  174. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/perf_gate.py +0 -0
  175. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/sync_gate_anchors.py +0 -0
  176. {sourcecode-5.8.28 → sourcecode-5.8.30}/scripts/test_fast.sh +0 -0
  177. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/__main__.py +0 -0
  178. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/adaptive_scanner.py +0 -0
  179. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/analysis_budget.py +0 -0
  180. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/answer_bounds.py +0 -0
  181. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/archetype.py +0 -0
  182. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/architectural_baseline.py +0 -0
  183. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/architectural_delta.py +0 -0
  184. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/architecture_analyzer.py +0 -0
  185. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/architecture_summary.py +0 -0
  186. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/ast_extractor.py +0 -0
  187. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/audit_clusters.py +0 -0
  188. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/audit_recipe.py +0 -0
  189. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/audit_report.py +0 -0
  190. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/audit_since.py +0 -0
  191. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/breaking_changes.py +0 -0
  192. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/build_modules.py +0 -0
  193. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/build_stamp.py +0 -0
  194. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/bundled_docs.py +0 -0
  195. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/cache.py +0 -0
  196. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/cache_observation.py +0 -0
  197. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/call_surface.py +0 -0
  198. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/caller_metrics.py +0 -0
  199. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/caller_reach.py +0 -0
  200. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/canonical_ir.py +0 -0
  201. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/chain_rules.py +0 -0
  202. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/change_plan.py +0 -0
  203. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/ci_output.py +0 -0
  204. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/cir_graphs.py +0 -0
  205. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/classifier.py +0 -0
  206. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/client_calls.py +0 -0
  207. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/code_notes_analyzer.py +0 -0
  208. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/compare.py +0 -0
  209. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/confidence_analyzer.py +0 -0
  210. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/constraint_diff.py +0 -0
  211. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/consumer_join.py +0 -0
  212. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/container_wiring.py +0 -0
  213. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/context_cache.py +0 -0
  214. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/context_graph.py +0 -0
  215. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/context_scorer.py +0 -0
  216. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/context_summarizer.py +0 -0
  217. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/contract_diff.py +0 -0
  218. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/contract_init.py +0 -0
  219. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/contract_model.py +0 -0
  220. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/contract_pipeline.py +0 -0
  221. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/coverage_parser.py +0 -0
  222. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/data_exposure.py +0 -0
  223. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/data_labels.py +0 -0
  224. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/declarations.py +0 -0
  225. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/defect_classes/__init__.py +0 -0
  226. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/defect_classes/registry.json +0 -0
  227. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/defect_identity.py +0 -0
  228. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/degradation.py +0 -0
  229. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/dependency_analyzer.py +0 -0
  230. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/deployment_prefix.py +0 -0
  231. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detach.py +0 -0
  232. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/__init__.py +0 -0
  233. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/base.py +0 -0
  234. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/csproj_parser.py +0 -0
  235. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/dart.py +0 -0
  236. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/dotnet.py +0 -0
  237. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/elixir.py +0 -0
  238. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/go.py +0 -0
  239. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/heuristic.py +0 -0
  240. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/hybrid.py +0 -0
  241. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/java.py +0 -0
  242. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/jvm_ext.py +0 -0
  243. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/nodejs.py +0 -0
  244. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/parsers.py +0 -0
  245. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/php.py +0 -0
  246. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/project.py +0 -0
  247. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/python.py +0 -0
  248. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/ruby.py +0 -0
  249. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/rust.py +0 -0
  250. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/systems.py +0 -0
  251. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/terraform.py +0 -0
  252. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/detectors/tooling.py +0 -0
  253. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/doc_analyzer.py +0 -0
  254. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/dynamic_argument_surface.py +0 -0
  255. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/empty_reach.py +0 -0
  256. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/endpoint_disposition.py +0 -0
  257. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/endpoint_literals.py +0 -0
  258. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/endpoint_metrics.py +0 -0
  259. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/entrypoint_classifier.py +0 -0
  260. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/env_analyzer.py +0 -0
  261. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/environment_resolution.py +0 -0
  262. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/error_schema.py +0 -0
  263. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/evidence_provider.py +0 -0
  264. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/execution_plan.py +0 -0
  265. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/explain.py +0 -0
  266. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/explain_endpoint.py +0 -0
  267. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/facts/__init__.py +0 -0
  268. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/facts/registry.json +0 -0
  269. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/field_deprecations.py +0 -0
  270. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/file_chunker.py +0 -0
  271. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/file_classifier.py +0 -0
  272. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/filter_surface.py +0 -0
  273. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/format_contract.py +0 -0
  274. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/fqn_utils.py +0 -0
  275. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/functional_routes.py +0 -0
  276. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/gate_anchors.py +0 -0
  277. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/git_analyzer.py +0 -0
  278. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/git_checkout.py +0 -0
  279. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/github_diff.py +0 -0
  280. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/graph_evidence.py +0 -0
  281. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/hibernate_strat.py +0 -0
  282. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/identity_fallback.py +0 -0
  283. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/integration_coordinates.py +0 -0
  284. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/jdk_exports.py +0 -0
  285. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/license.py +0 -0
  286. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/manifest_cache.py +0 -0
  287. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/__init__.py +0 -0
  288. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/dependency_import.py +0 -0
  289. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  290. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  291. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  292. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  293. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  294. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/orchestrator.py +0 -0
  295. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/registry.py +0 -0
  296. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/runner.py +0 -0
  297. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp/server.py +0 -0
  298. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/mcp_nudge.py +0 -0
  299. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/metrics_analyzer.py +0 -0
  300. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/migrate_check.py +0 -0
  301. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/migration_apply.py +0 -0
  302. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/migration_blast.py +0 -0
  303. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/non_coverage.py +0 -0
  304. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/openapi_surface.py +0 -0
  305. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/openrewrite_recipe.py +0 -0
  306. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/output_budget.py +0 -0
  307. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/output_ceiling.py +0 -0
  308. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/output_encoding.py +0 -0
  309. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/output_sink.py +0 -0
  310. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/pack_manifest.py +0 -0
  311. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/parallel.py +0 -0
  312. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/parse_cache.py +0 -0
  313. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/partial_contract.py +0 -0
  314. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/path_filters.py +0 -0
  315. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/perf.py +0 -0
  316. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/phased_run.py +0 -0
  317. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/pipe_contract.py +0 -0
  318. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/posture.py +0 -0
  319. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/pr_comment_renderer.py +0 -0
  320. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/prepare_context.py +0 -0
  321. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/product_info.py +0 -0
  322. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/progress.py +0 -0
  323. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/provenance.py +0 -0
  324. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/ranking_engine.py +0 -0
  325. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/readiness_timeline.py +0 -0
  326. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/readonly.py +0 -0
  327. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/reconciliation.py +0 -0
  328. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/redactor.py +0 -0
  329. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/reference_facts.py +0 -0
  330. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/regress.py +0 -0
  331. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/release_info.py +0 -0
  332. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/relevance_scorer.py +0 -0
  333. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/remediation_diff.py +0 -0
  334. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/remedies.py +0 -0
  335. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/rename_refactor.py +0 -0
  336. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/repo_classifier.py +0 -0
  337. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/resource_budget.py +0 -0
  338. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/__init__.py +0 -0
  339. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/context.py +0 -0
  340. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/errors.py +0 -0
  341. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/executor.py +0 -0
  342. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/planner.py +0 -0
  343. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/query.py +0 -0
  344. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/request.py +0 -0
  345. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/resolution.py +0 -0
  346. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/result.py +0 -0
  347. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/retriever.py +0 -0
  348. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/runtime.py +0 -0
  349. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps.py +0 -0
  350. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  351. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_graph.py +0 -0
  352. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_impact.py +0 -0
  353. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_intf.py +0 -0
  354. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_struct.py +0 -0
  355. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  356. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/ris.py +0 -0
  357. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/risk.py +0 -0
  358. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/risk_model.py +0 -0
  359. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/rule_catalog.py +0 -0
  360. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/rule_pass.py +0 -0
  361. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/runs.py +0 -0
  362. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/runtime_classifier.py +0 -0
  363. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/sarif.py +0 -0
  364. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/sarif_emit.py +0 -0
  365. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/scanner.py +0 -0
  366. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schema.py +0 -0
  367. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schema_producers.py +0 -0
  368. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schema_registry.py +0 -0
  369. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  370. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  371. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  372. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  373. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  374. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  375. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/security_chain.py +0 -0
  376. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/security_config.py +0 -0
  377. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/security_config_scan.py +0 -0
  378. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/security_posture.py +0 -0
  379. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/selection_contract.py +0 -0
  380. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/selftest.py +0 -0
  381. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/semantic_analyzer.py +0 -0
  382. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/semantic_impact_engine.py +0 -0
  383. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/semantic_integration_engine.py +0 -0
  384. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/semantic_services.py +0 -0
  385. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/serializer.py +0 -0
  386. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/servlet_surface.py +0 -0
  387. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/source_text.py +0 -0
  388. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_event_topology.py +0 -0
  389. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_findings.py +0 -0
  390. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_impact.py +0 -0
  391. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_model.py +0 -0
  392. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_profiles.py +0 -0
  393. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_properties.py +0 -0
  394. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_security_audit.py +0 -0
  395. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_semantic.py +0 -0
  396. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/spring_tx_analyzer.py +0 -0
  397. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/sql_taint.py +0 -0
  398. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/summarizer.py +0 -0
  399. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/target_admission.py +0 -0
  400. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/__init__.py +0 -0
  401. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/config.py +0 -0
  402. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/consent.py +0 -0
  403. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/events.py +0 -0
  404. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/filters.py +0 -0
  405. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/telemetry/transport.py +0 -0
  406. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/test_gap_ranking.py +0 -0
  407. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/test_sources.py +0 -0
  408. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/text_input.py +0 -0
  409. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/timeline.py +0 -0
  410. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/timeline_cache.py +0 -0
  411. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/token_estimate.py +0 -0
  412. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/type_usage_surface.py +0 -0
  413. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/validation_inference.py +0 -0
  414. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/validation_surface.py +0 -0
  415. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/verify_edit.py +0 -0
  416. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/verify_rules.py +0 -0
  417. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/version_check.py +0 -0
  418. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/waivers.py +0 -0
  419. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/wired_surface.py +0 -0
  420. {sourcecode-5.8.28 → sourcecode-5.8.30}/src/sourcecode/workspace.py +0 -0
  421. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/functions/README.md +0 -0
  422. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/functions/get-license/index.ts +0 -0
  423. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  424. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/functions/telemetry/index.ts +0 -0
  425. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/sql/license_event_ordering.sql +0 -0
  426. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/sql/licensing_schema.sql +0 -0
  427. {sourcecode-5.8.28 → sourcecode-5.8.30}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.8.30] — 2026-08-26
4
+
5
+ *Pack audit remediation release. Unresolved test-only Java files no longer broaden
6
+ `pack gate` endpoint uncertainty, and foreground `pack assessment` now reports
7
+ component progress through the stderr-only heartbeat contract. Documentation and
8
+ release evidence are synchronized with the AUD-605 fixes.*
9
+
10
+ ## [5.8.29] — 2026-08-26
11
+
12
+ *Release synchronization for the external `5.8.28` audit. The posture diff now
13
+ honours `--limit` for nested endpoint-access rows, help output distinguishes the
14
+ historical timing anchor from the provisional cold observation, and the controlled
15
+ performance follow-up is recorded without an unsupported parser change. Roadmaps,
16
+ the defect ledger and the audit intake are aligned with the release state.*
17
+
3
18
  ## [5.8.28] — 2026-08-26
4
19
 
5
20
  *Audit remediation release. Detached workers now use an executable package entry
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.28
3
+ Version: 5.8.30
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.28-blue)
62
+ ![Version](https://img.shields.io/badge/version-5.8.30-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.28 retains the shared Canonical IR
180
+ **Current performance status.** Release 5.8.30 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.28 — and, on a build that has aged,
213
+ ask version # ask 5.8.30 — 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.28-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.8.30-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.28 retains the shared Canonical IR
131
+ **Current performance status.** Release 5.8.30 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.28 — and, on a build that has aged,
164
+ ask version # ask 5.8.30 — 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.
@@ -0,0 +1,56 @@
1
+ # ASK Engine 5.8.28 - External Audit Intake
2
+
3
+ **Received:** 2026-08-26
4
+ **Audited artefact:** `5.8.28`, Windows 11, Git Bash/MSYS and native PowerShell
5
+ **Comparison:** `5.8.27`
6
+
7
+ ## Executive Summary
8
+
9
+ The audit rates `5.8.28` at 7/10 in the operational review and 9.5/10 in the
10
+ semantic regression review. No new regression was confirmed in the original
11
+ matrix. `--detach`, the DEAD-001 false positive, Boot 3 applicability and the
12
+ selftest scope warning are reported as fixed. The actionable queue is limited
13
+ to one CLI contract defect, one performance signal requiring attribution, and
14
+ one stale help headline.
15
+
16
+ The report contains a duplicated follow-up block that says detached execution
17
+ still invokes `python -m sourcecode.cli`. That statement describes the previous
18
+ implementation, not this checkout: the current worker invokes `python -m
19
+ sourcecode` and `sourcecode/__main__.py` calls `main_entry`. It remains release
20
+ evidence to repeat the native Windows parent-lifetime test, but it is not a new
21
+ source defect.
22
+
23
+ ## Findings
24
+
25
+ | ID | Priority | Status | Finding and acceptance criterion |
26
+ |---|---:|---|---|
27
+ | `AUD-604-O01` | P2 | closed in `5.8.28` | `posture --diff` now registers and bounds its real nested `endpoint_access.endpoints` rows. Exact totals remain intact, explicit `--limit N` stays literal, and `--compact` remains monotonic. Commit `2e47240`; focused bounding and diff batteries pass. |
28
+ | `AUD-604-P01` | P2 | closed as unconfirmed signal | Three sequential cold runs on the same isolated fixture measured `0.55-0.75 s`; a cProfile run attributed only about `0.00034 s` to `find_manifests`. The reported cross-release comparison has no matched subject/profile, so no parser regression is attributable and no speculative code change is justified. Keep this as a release-benchmark follow-up. |
29
+ | `AUD-604-U01` | P3 | closed in `5.8.28` | The generated help sentence now retains the 31 s historical anchor but explicitly adds the external 184 s cold observation as provisional and command-specific. It no longer presents the historical number as current guidance. Commit `f109654`; help/cost batteries pass. |
30
+ | `AUD-604-R01` | P1 | implemented, Windows verification pending | Detached execution is executable in the current source through `python -m sourcecode` and `sourcecode/__main__.py`. Repeat the clean MSYS, PowerShell and parent-lifetime checks against the published artefact before calling the row fully closed. |
31
+ | `AUD-604-S01` | P1 | closed in `5.8.28` | DEAD-001 ignores annotation-like prose in comments while retaining true commented-directive controls. Confirmed by the external review and focused battery. |
32
+ | `AUD-604-D01` | P2 | closed in `5.8.28` | Boot 3 readiness is consistently `null` for non-applicable witnesses. |
33
+ | `AUD-604-U02` | P3 | closed in `5.8.28` | Non-interactive selftest reports the exact nested-repository scope before running and keeps JSON stdout stable. |
34
+
35
+ ## Exclusions
36
+
37
+ - WebScripts remains unconfirmed; no implementation change is justified.
38
+ - Root-only subcommand `--compact` remains by design with a typed refusal.
39
+ - The cold timing difference is a regression signal, not proof of a parser bug,
40
+ because the comparison lacks matched controlled samples and profiles.
41
+ - No new security, traceback, write-leakage, path-traversal or zombie-process
42
+ defect was reported in this round.
43
+
44
+ ## Controlled Performance Evidence
45
+
46
+ The local follow-up used isolated `SOURCECODE_CACHE_DIR` and
47
+ `SOURCECODE_CONTEXT_CACHE_DIR` stores and cleared both before each run. The same
48
+ `tests/fixtures/spring_boot_minimal` subject was run three times sequentially:
49
+ `0.75 s`, `0.55 s`, and `0.55 s` real time. The cProfile report showed
50
+ `scanner.find_manifests` at about `0.00034 s` cumulative time. These numbers do
51
+ not replace the external 3,342-file benchmark; they establish that the reported
52
+ manifest cost is not attributable on the controlled local subject.
53
+
54
+ ## Attack Order
55
+
56
+ 1. `AUD-604-R01` - complete Windows artefact verification for detached workers.
@@ -16,6 +16,34 @@ 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.30` queue:** artefact verification for `AUD-604-R01`; the two `AUD-605`
29
+ fixes are included in this release and await release-artefact verification.
30
+
31
+ **External `5.8.28` audit received, 2026-08-26 - `AUD-604`.**
32
+ [`AUDIT-2026-08-26-EXTERNAL-5.8.28.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28.md) confirms the
33
+ semantic fixes from the previous round and adds three actionable rows: `AUD-604-O01`
34
+ (`posture --diff --compact --limit` is effectively a no-op on nested output),
35
+ `AUD-604-P01` (cold-cost regression signal requiring controlled profiling), and
36
+ `AUD-604-U01` (stale root-help timing headline). Detached execution remains implemented
37
+ in the current source, with native Windows artefact verification still pending. The audit's
38
+ duplicated claim about `python -m sourcecode.cli` is historical and does not describe the
39
+ current `python -m sourcecode` plus `__main__.py` implementation.
40
+
41
+ **Current `5.8.29` queue:** artefact verification for `AUD-604-R01`. `AUD-604-S01`,
42
+ `AUD-604-D01`, `AUD-604-U02`, `AUD-604-O01` and `AUD-604-U01` are closed in `5.8.28`.
43
+ `AUD-604-P01` is closed as an unconfirmed, non-attributable performance signal after
44
+ controlled profiling; it remains a benchmark follow-up, not a parser fix. WebScripts and
45
+ root-only subcommand `--compact` remain excluded.
46
+
19
47
  **External `5.8.27` audit received, 2026-08-26 — `AUD-603`.** [`AUDIT-2026-08-26-EXTERNAL-5.8.27.md`](AUDIT-2026-08-26-EXTERNAL-5.8.27.md) confirms the SEC-004 and Boot 3 fixes, but reopens detached execution because the direct `python -m sourcecode.cli` worker exits without invoking `main_entry`. It adds a DEAD-001 comment-prose false positive, a `posture --diff --compact` output-ceiling contract defect, and a cold-performance regression signal requiring controlled profiling. The stale timing headline and non-interactive selftest scope warning remain open. WebScripts remains unconfirmed and root-only subcommand `--compact` remains by design.
20
48
 
21
49
  **Current `5.8.27` queue:** `AUD-603-R01` · `AUD-603-S01` · `AUD-603-O01` · `AUD-603-P01` · `AUD-603-U01` · `AUD-603-U02`. This supersedes the earlier AUD-602 implementation-status note for the reopened rows; its historical commits remain evidence, not closure.
@@ -3,7 +3,20 @@
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 — external audit of `5.8.27`, received 2026-08-26.** `AUD-603-R01` (P1,
6
+ > **CURRENT QUEUE — release `5.8.30`, 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
11
+ > Windows verification item; its current source implementation is executable. `AUD-604-S01`,
12
+ > `AUD-604-D01`, `AUD-604-U02`, `AUD-604-O01` and `AUD-604-U01` are closed in `5.8.28`.
13
+ > `AUD-604-P01` is closed as an unconfirmed, non-attributable signal after controlled profiling.
14
+ > Full evidence is
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
+ > **Previous queue — external audit of `5.8.27`, received 2026-08-26.** `AUD-603-R01` (P1,
7
20
  > detached worker exits because the module entry point is not invoked) -> `AUD-603-S01`
8
21
  > (P1, DEAD-001 comment-prose false positive) -> `AUD-603-O01` (P2, posture diff compact
9
22
  > exceeds the output ceiling) -> `AUD-603-P01` (P2, cold-cost regression signal requiring
@@ -5,6 +5,29 @@
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.30`, following the `5.8.28` external audit intake, 2026-08-26.** The semantic
9
+ > regression matrix remains green: detached execution, DEAD-001 comment handling,
10
+ > Boot 3 applicability, non-interactive selftest scope communication, nested diff
11
+ > bounding and help timing guidance are confirmed fixed. The reported cold-cost signal
12
+ > was not attributable in controlled profiling and produced no speculative parser change.
13
+ > The only remaining engineering item is native Windows artefact verification for
14
+ > detached workers. The audit and its exclusions are in
15
+ > [`AUDIT-2026-08-26-EXTERNAL-5.8.28.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28.md).
16
+
17
+ > Detached execution is implemented in the current source with `python -m sourcecode`
18
+ > and `sourcecode/__main__.py`; native Windows artefact verification remains release
19
+ > evidence, not an unverified claim of a new source defect. WebScripts and root-only
20
+ > subcommand `--compact` remain excluded by design/evidence status.
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
+
8
31
  > **CURRENT STATUS — `5.8.26` external audit intake, 2026-08-23.** The active engineering
9
32
  > queue is `impact-chain` bounded-output regression, `posture --diff --compact` usability,
10
33
  > 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.28, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
49
+ 5.8.30, `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.30, 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.28
186
+ # ask 5.8.30
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.28"
7
+ version = "5.8.30"
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"
@@ -134,7 +134,7 @@ def build_argv(command: str, repo_path: Path, cold: bool) -> list[str]:
134
134
  # Keep the gate identity stable across runners. Windows' `str(Path("/tmp/repo"))`
135
135
  # becomes `\\tmp\\repo`, while the same synthetic repository is published as
136
136
  # `/tmp/repo` in the gate contract and in baseline keys.
137
- argv.append(repo_path.as_posix())
137
+ argv.append(str(repo_path).replace("\\", "/"))
138
138
  argv += ["--format", "json"]
139
139
  # C3-110: some commands need an argument to be measurable at all, and the one
140
140
  # authority for which is `perf`, not this script and not a workflow.
@@ -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.28"
7
+ __version__ = "5.8.30"
@@ -38,6 +38,8 @@ from dataclasses import dataclass
38
38
  from pathlib import Path
39
39
  from typing import TYPE_CHECKING, Any, Iterable, Optional
40
40
 
41
+ from sourcecode.path_display import portable_path
42
+
41
43
  if TYPE_CHECKING: # pragma: no cover - typing only
42
44
  from sourcecode.canonical_ir import CanonicalRepositoryIR
43
45
 
@@ -55,7 +57,7 @@ _FALSE = frozenset({"0", "false", "no", "off"})
55
57
 
56
58
  def _published_path(path: Path) -> str:
57
59
  """Serialize a filesystem path with the stable separator used by payloads."""
58
- return path.as_posix()
60
+ return portable_path(path)
59
61
 
60
62
  # Actions.
61
63
  CAPTURED: str = "captured"
@@ -396,7 +398,7 @@ def decide(
396
398
  attribution, then idempotency.
397
399
  """
398
400
  common = {
399
- "history_dir": str(history_dir),
401
+ "history_dir": _published_path(history_dir),
400
402
  "commit": commit,
401
403
  "history_size": size,
402
404
  }
@@ -829,13 +829,21 @@ def cost_sentence() -> str:
829
829
  f"{_thousands(int(_gate_cell['java_files']))}-file repository "
830
830
  f"({_gate_cell['cache_state']} cache, {_gate_cell['host_class']})."
831
831
  )
832
+ # AUD-604-U01: the external 5.8.28 review observed ~184 s for the root
833
+ # cold path at the same scale. It is useful context, but not a replacement
834
+ # for the spring-audit field anchor because the command and protocol differ.
835
+ current_observation = (
836
+ " The latest external review also observed about 184 s for the root "
837
+ "cold path at this scale on 5.8.28; that figure is provisional until "
838
+ "the controlled release benchmark is reproduced."
839
+ )
832
840
  return (
833
841
  f"Historical field anchor only: cost tracks the command class and the build, "
834
842
  f"not the file count: "
835
843
  f"per-symbol queries are the fast path, inventory commands scale with "
836
844
  f"files, and a repository-wide audit measured {seconds:g} s on a "
837
845
  f"{_thousands(FIELD_ANCHOR_JAVA_FILES)}-file repository "
838
- f"({FIELD_ANCHOR_MEASURED_VERSION}{stale}).{gate} `ask cache model` prints "
846
+ f"({FIELD_ANCHOR_MEASURED_VERSION}{stale}).{current_observation}{gate} `ask cache model` prints "
839
847
  f"the figure and the build behind it for every command; ASK_PROGRESS "
840
848
  f"narrates supervised work, while ASK_MAX_ANALYSIS_SECONDS bounds "
841
849
  f"{budget_tiers_phrase()}."
@@ -49,6 +49,7 @@ from sourcecode.caller_metrics import (
49
49
  CYCLE_METRIC_RECONCILIATION,
50
50
  )
51
51
  from sourcecode.repository_ir import extract_java_endpoints as _extract_java_endpoints
52
+ from sourcecode.path_display import portable_path
52
53
 
53
54
 
54
55
  # ---------------------------------------------------------------------------
@@ -1842,7 +1843,7 @@ def _write_root_partial_stub(output: "Path", target: "Path") -> None:
1842
1843
  "schema_version": "partial-analysis-v1",
1843
1844
  "partial": True,
1844
1845
  "command": "ask",
1845
- "scope": {"path": str(target)},
1846
+ "scope": {"path": portable_path(target)},
1846
1847
  "started_at": _dt.datetime.now(_dt.timezone.utc).isoformat(),
1847
1848
  "status": "running",
1848
1849
  "reason": (
@@ -4356,22 +4357,34 @@ def pack_assessment_cmd(
4356
4357
  )
4357
4358
  raise typer.Exit(code=2)
4358
4359
  _enforce_format("pack-assessment", format)
4359
- data = run_assessment(
4360
- root, profile=profile, deployment=deployment, compact=compact, output_dir=output_dir,
4361
- )
4360
+ _progress = Progress().start("pack assessment")
4361
+ try:
4362
+ data = run_assessment(
4363
+ root, profile=profile, deployment=deployment, compact=compact, output_dir=output_dir,
4364
+ progress=lambda done, total, component: _progress.work(
4365
+ done, total, stage=f"pack assessment: {component}",
4366
+ unit="components", estimate=False,
4367
+ ),
4368
+ )
4369
+ except BaseException:
4370
+ _progress.stop()
4371
+ raise
4362
4372
  output = render_assessment_markdown(data) if format == "markdown" else _serialize_dict(data, format)
4363
4373
  # AUD-600-D01: when the pack decided at t=0 that it may not write into the
4364
4374
  # analysed tree, the aggregate must not be routed there either — the same
4365
4375
  # decision, one destination later.
4366
4376
  _dir = None if data.get("no_write_substitution") else output_dir
4367
- _emit_command_output(
4368
- output,
4369
- _pack_output_path(_dir, output_path, format),
4370
- copy,
4371
- stamp_envelope=(format != "markdown"),
4372
- )
4373
- if data["verdict"] == "UNVERIFIED":
4374
- raise typer.Exit(code=2)
4377
+ try:
4378
+ _emit_command_output(
4379
+ output,
4380
+ _pack_output_path(_dir, output_path, format),
4381
+ copy,
4382
+ stamp_envelope=(format != "markdown"),
4383
+ )
4384
+ if data["verdict"] == "UNVERIFIED":
4385
+ raise typer.Exit(code=2)
4386
+ finally:
4387
+ _progress.finish()
4375
4388
 
4376
4389
 
4377
4390
  @pack_app.command("gate")
@@ -10110,7 +10123,7 @@ def plan_cmd(
10110
10123
  data["scan_truncated"] = _plan_scan_trunc
10111
10124
  # The tree these components and candidates came from: `--path` defaults to
10112
10125
  # `.`, so a run from the wrong directory answers about another repository.
10113
- data.setdefault("scope", {"path": str(target_dir)})
10126
+ data.setdefault("scope", {"path": portable_path(target_dir)})
10114
10127
  _prog.finish()
10115
10128
 
10116
10129
  output = _serialize_dict(data, format)
@@ -10231,7 +10244,7 @@ def compare_cmd(
10231
10244
  # The tree these candidates came from. `--path` defaults to `.`, so a run
10232
10245
  # from the wrong directory offered candidates from a different repository
10233
10246
  # with nothing naming the repository they belonged to.
10234
- data.setdefault("scope", {"path": str(target_dir)})
10247
+ data.setdefault("scope", {"path": portable_path(target_dir)})
10235
10248
  _prog.finish()
10236
10249
 
10237
10250
  _unresolved = [c["target"] for c in data["candidates"] if not c["resolved"]]
@@ -14187,7 +14200,7 @@ def posture_cmd(
14187
14200
  # than that individual cut, leaving a large diff above the ceiling.
14188
14201
  # An explicit --limit remains a precise shape request; compact must
14189
14202
  # actually remove every registered body.
14190
- monotone=False,
14203
+ monotone=(limit is None and compact),
14191
14204
  )
14192
14205
 
14193
14206
  _emit_command_output(
@@ -15897,7 +15910,7 @@ def modernize_cmd(
15897
15910
  result = {
15898
15911
  "schema_version": _MODERNIZE_SCHEMA,
15899
15912
  "workflow": "modernize",
15900
- "path": str(root),
15913
+ "path": portable_path(root),
15901
15914
  "tier": "free",
15902
15915
  "tier_note": (
15903
15916
  "This repository exceeds the free-tier size limit. "
@@ -15923,7 +15936,7 @@ def modernize_cmd(
15923
15936
  result = {
15924
15937
  "schema_version": _MODERNIZE_SCHEMA,
15925
15938
  "workflow": "modernize",
15926
- "path": str(root),
15939
+ "path": portable_path(root),
15927
15940
  "summary": _summary,
15928
15941
  "hotspot_candidates": hotspots,
15929
15942
  "high_coupling_nodes": [
@@ -18288,9 +18301,9 @@ def cache_status_cmd(
18288
18301
  target = Path(path).resolve()
18289
18302
  _git_root = _resolve_repo_root(Path(path))
18290
18303
  stats = _cm.status(target)
18291
- stats["scope"] = str(target)
18304
+ stats["scope"] = portable_path(target)
18292
18305
  if _git_root != target:
18293
- stats["git_root"] = str(_git_root)
18306
+ stats["git_root"] = portable_path(_git_root)
18294
18307
  if json_output:
18295
18308
  import json as _j
18296
18309
  _emit_text_output(_j.dumps(stats, indent=2, ensure_ascii=False), copy, output_path)
@@ -18928,7 +18941,7 @@ def cache_model_cmd(
18928
18941
  if json_output:
18929
18942
  import json as _j
18930
18943
  _payload = _cmodel.as_dict(_here)
18931
- _payload["scope"] = str(Path(path).resolve())
18944
+ _payload["scope"] = portable_path(Path(path).resolve())
18932
18945
  _payload["scope_note"] = (
18933
18946
  "The cache model is global; this path is accepted so cache model, "
18934
18947
  "cache status and cache freshness share one path grammar."
@@ -31,6 +31,8 @@ import subprocess
31
31
  from pathlib import Path
32
32
  from typing import Any, Optional
33
33
 
34
+ from sourcecode.path_display import portable_path
35
+
34
36
  #: Shape of the `_meta` block itself. Bump when a field's meaning changes.
35
37
  ENVELOPE_VERSION = "1"
36
38
 
@@ -104,9 +106,9 @@ def repository_identity(target: "Path | str") -> "dict[str, Any]":
104
106
  try:
105
107
  resolved = Path(target).resolve()
106
108
  except Exception:
107
- return {"path": str(target), "is_git_repository": False,
109
+ return {"path": portable_path(target), "is_git_repository": False,
108
110
  "tree_state": "unknown", "git_head": None, "tree_id": None}
109
- block: dict[str, Any] = {"path": str(resolved), "is_git_repository": False,
111
+ block: dict[str, Any] = {"path": portable_path(resolved), "is_git_repository": False,
110
112
  "tree_state": "not-a-git-repository",
111
113
  "git_head": None, "tree_id": None}
112
114
  try:
@@ -203,7 +205,7 @@ def build_meta(
203
205
  if target is not None:
204
206
  try:
205
207
  resolved = Path(target).resolve()
206
- scope: dict[str, Any] = {"path": str(resolved)}
208
+ scope: dict[str, Any] = {"path": portable_path(resolved)}
207
209
  if resolved.is_dir():
208
210
  # AUD-601-D02: one authority for repository identity. This block
209
211
  # read the tree once for `run_id` and then asked git for HEAD a
@@ -8,6 +8,7 @@ from pathlib import Path, PurePosixPath
8
8
  from typing import Any, Literal, Optional
9
9
 
10
10
  from sourcecode.detectors.parsers import load_json_file, load_toml_file
11
+ from sourcecode.path_display import portable_path
11
12
  from sourcecode.schema import EntryPoint, GraphEdge, GraphNode, ModuleGraph, ModuleGraphSummary
12
13
  from sourcecode.tree_utils import flatten_file_tree
13
14
 
@@ -186,7 +187,7 @@ class GraphAnalyzer:
186
187
  workspace: str | None,
187
188
  ) -> ModuleGraph:
188
189
  source_files = [
189
- path
190
+ portable_path(path)
190
191
  for path in flatten_file_tree(file_tree)
191
192
  if Path(path).suffix in self._SUPPORTED_EXTENSIONS and (root / path).is_file()
192
193
  ]
@@ -213,7 +214,7 @@ class GraphAnalyzer:
213
214
  java_import_edges = self._build_jvm_java_import_edges(root, source_files, jvm_types)
214
215
 
215
216
  # .NET: project-level graph from .csproj/.fsproj/.vbproj manifests
216
- all_tree_paths = [p for p in flatten_file_tree(file_tree)]
217
+ all_tree_paths = [portable_path(p) for p in flatten_file_tree(file_tree)]
217
218
  dotnet_project_paths = [
218
219
  p for p in all_tree_paths
219
220
  if Path(p).suffix.lower() in self._DOTNET_PROJECT_EXTENSIONS
@@ -68,6 +68,10 @@ POSTURE_BOUNDED_LISTS: "tuple[str, ...]" = (
68
68
  "only_in_right",
69
69
  "left_active",
70
70
  "right_active",
71
+ # AUD-604-O01. The real diff projection publishes endpoint rows under
72
+ # `endpoint_access.endpoints`; registering only the synthetic `changed`
73
+ # shape left the largest nested list untouched by `--limit`.
74
+ "endpoints",
71
75
  # AUD-602-R02. `posture --diff` caps the per-profile bean and security
72
76
  # lists, but the actionable delta is `endpoint_access.changed`: one row per
73
77
  # request whose decision moves between the two profile sets. Omitting it
@@ -24,7 +24,7 @@ import sys
24
24
  import tempfile
25
25
  import time
26
26
  from pathlib import Path
27
- from typing import Any, Optional
27
+ from typing import Any, Callable, Optional
28
28
 
29
29
  from sourcecode import pack_manifest
30
30
  from sourcecode.partial_contract import PARTIAL_EXIT_CODE
@@ -771,7 +771,8 @@ def _carrier(result: "dict[str, Any]") -> "dict[str, Any]":
771
771
  def run_assessment(root: Path, *, profile: Optional[str] = None,
772
772
  deployment: Optional[list[Path]] = None,
773
773
  compact: bool = False,
774
- output_dir: Optional[Path] = None) -> dict[str, Any]:
774
+ output_dir: Optional[Path] = None,
775
+ progress: Optional[Callable[[int, int, str], None]] = None) -> dict[str, Any]:
775
776
  """Build the assessment pack from existing analysis commands."""
776
777
  no_write = _no_write_substitution("assessment", output_dir)
777
778
  if no_write is not None:
@@ -781,7 +782,10 @@ def run_assessment(root: Path, *, profile: Optional[str] = None,
781
782
  artifacts: dict[str, Optional[str]] = {}
782
783
  with tempfile.TemporaryDirectory(prefix="ask-assessment-") as temp:
783
784
  temp_root = Path(temp)
784
- for command in commands:
785
+ total_components = len(commands) + 1 # the aggregate audit-report is a component too
786
+ for index, command in enumerate(commands, start=1):
787
+ if progress:
788
+ progress(index, total_components, command)
785
789
  extra: list[str] = []
786
790
  if compact and command in {"migrate-check", "posture", "endpoints", "spring-audit"}:
787
791
  extra.append("--compact")
@@ -800,6 +804,8 @@ def run_assessment(root: Path, *, profile: Optional[str] = None,
800
804
  report_extra = ["--from-risk", str(temp_root / "risk.json")]
801
805
  if profile:
802
806
  report_extra.extend(["--profile", profile])
807
+ if progress:
808
+ progress(total_components, total_components, "audit-report")
803
809
  report = _run_command("audit-report", root, temp_root / "audit-report.json", report_extra)
804
810
  # The composed `--from-risk` path is a temporary file; what the manifest
805
811
  # publishes is the reproducible form, which is `risk`'s own artifact.