sourcecode 5.8.21__tar.gz → 5.8.23__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 (412) hide show
  1. {sourcecode-5.8.21 → sourcecode-5.8.23}/CHANGELOG.md +83 -0
  2. {sourcecode-5.8.21 → sourcecode-5.8.23}/PKG-INFO +48 -4
  3. {sourcecode-5.8.21 → sourcecode-5.8.23}/README.md +47 -3
  4. sourcecode-5.8.23/docs/AUDIT-2026-08-22-5.8.22.md +96 -0
  5. sourcecode-5.8.23/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +228 -0
  6. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/CACHE.md +1 -0
  7. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/COMMERCIAL-OFFER.md +10 -0
  8. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/DEFECT-LEDGER.md +356 -16
  9. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/DEVELOPMENT-ROADMAP.md +175 -123
  10. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/EXECUTION-PLAN-12MO.md +17 -0
  11. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/EXECUTIVE-ROADMAP.md +94 -2
  12. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/MANUAL-USUARIO.md +50 -0
  13. sourcecode-5.8.23/docs/PRODUCT-ROUTE.md +144 -0
  14. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/PRODUCT_TIERS.md +14 -0
  15. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/USER_GUIDE.md +39 -3
  16. sourcecode-5.8.23/docs/architecture/DESIGN-assessment-deployment-evidence.md +29 -0
  17. sourcecode-5.8.23/docs/architecture/DESIGN-assessment-report.md +55 -0
  18. sourcecode-5.8.23/docs/architecture/DESIGN-build-closure-provenance.md +31 -0
  19. sourcecode-5.8.23/docs/architecture/DESIGN-pack-gate-ci.md +43 -0
  20. sourcecode-5.8.23/docs/architecture/DESIGN-pack-manifest.md +189 -0
  21. sourcecode-5.8.23/docs/architecture/DESIGN-pack-mcp-api.md +47 -0
  22. sourcecode-5.8.23/docs/pack-gate-github-actions.yml +31 -0
  23. sourcecode-5.8.23/docs/pack-gate-gitlab.yml +15 -0
  24. sourcecode-5.8.23/docs/perf/corpus-testing-2026-08-22.md +88 -0
  25. {sourcecode-5.8.21 → sourcecode-5.8.23}/pyproject.toml +10 -1
  26. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/__init__.py +1 -1
  27. sourcecode-5.8.23/src/sourcecode/analysis_budget.py +66 -0
  28. sourcecode-5.8.23/src/sourcecode/build_stamp.py +105 -0
  29. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/cache_model.py +7 -2
  30. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/ci_output.py +48 -0
  31. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/cli.py +651 -48
  32. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/envelope.py +52 -0
  33. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/error_schema.py +19 -0
  34. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/format_contract.py +3 -0
  35. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/server.py +160 -2
  36. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/non_coverage.py +14 -0
  37. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/output_bounds.py +91 -1
  38. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/output_ceiling.py +65 -4
  39. sourcecode-5.8.23/src/sourcecode/pack_manifest.py +425 -0
  40. sourcecode-5.8.23/src/sourcecode/packs.py +386 -0
  41. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/perf.py +38 -0
  42. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/risk.py +28 -0
  43. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schema_registry.py +18 -0
  44. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/selftest.py +81 -3
  45. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_model.py +53 -3
  46. sourcecode-5.8.21/src/sourcecode/analysis_budget.py +0 -27
  47. sourcecode-5.8.21/src/sourcecode/build_stamp.py +0 -49
  48. {sourcecode-5.8.21 → sourcecode-5.8.23}/.github/workflows/build-windows.yml +0 -0
  49. {sourcecode-5.8.21 → sourcecode-5.8.23}/.github/workflows/perf-gate.yml +0 -0
  50. {sourcecode-5.8.21 → sourcecode-5.8.23}/.gitignore +0 -0
  51. {sourcecode-5.8.21 → sourcecode-5.8.23}/.ruff.toml +0 -0
  52. {sourcecode-5.8.21 → sourcecode-5.8.23}/CLAUDE.md +0 -0
  53. {sourcecode-5.8.21 → sourcecode-5.8.23}/CONTRIBUTING.md +0 -0
  54. {sourcecode-5.8.21 → sourcecode-5.8.23}/LICENSE +0 -0
  55. {sourcecode-5.8.21 → sourcecode-5.8.23}/NOTICE +0 -0
  56. {sourcecode-5.8.21 → sourcecode-5.8.23}/SECURITY.md +0 -0
  57. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/CUSTOMER-VALIDATION.md +0 -0
  58. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/DEMO-5MIN.md +0 -0
  59. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/MODERNIZATION.md +0 -0
  60. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/PRODUCT_AUDIT.md +0 -0
  61. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/PRODUCT_IDENTITY.md +0 -0
  62. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/RC1-CHECKLIST.md +0 -0
  63. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/RELEASE-CHECKLIST.md +0 -0
  64. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  65. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  66. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  67. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  68. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  69. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  70. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  71. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  72. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  73. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  74. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  75. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  76. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  77. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  78. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  79. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  80. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  81. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  82. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  83. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0006-performance-harness.md +0 -0
  84. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  85. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  86. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/consumer-disposition-inventory.md +0 -0
  87. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/overview.md +0 -0
  88. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/product-architecture-review.md +0 -0
  89. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/product-strategy-layering.md +0 -0
  90. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  91. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/architecture/semantic-ir-roadmap.md +0 -0
  92. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/baseline-ci.yml +0 -0
  93. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/commercial-pipeline-audit.md +0 -0
  94. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/contracts-ci.yml +0 -0
  95. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/contracts.md +0 -0
  96. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  97. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  98. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  99. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  100. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  101. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  102. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  103. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  104. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/licensing-schema.md +0 -0
  105. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/migrate-check.md +0 -0
  106. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/README.md +0 -0
  107. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/REGRESSION-GATE.md +0 -0
  108. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  109. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  110. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  111. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  112. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  113. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  114. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  115. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  116. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  117. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  118. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  119. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  120. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  121. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  122. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  123. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  124. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  125. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  126. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  127. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  128. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  129. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  130. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  131. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  132. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  133. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  134. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  135. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  136. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  137. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  138. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  139. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  140. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  141. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  142. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  143. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  144. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  145. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  146. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  147. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  148. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  149. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  150. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/README.md +0 -0
  151. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  152. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  153. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  154. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  155. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  156. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  157. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/perf/baselines/reference-best/README.md +0 -0
  158. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/posture.md +0 -0
  159. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/privacy.md +0 -0
  160. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/pro-experience-audit.md +0 -0
  161. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/schema.md +0 -0
  162. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/spec/envelope-v1.md +0 -0
  163. {sourcecode-5.8.21 → sourcecode-5.8.23}/docs/spring-audit-ci.yml +0 -0
  164. {sourcecode-5.8.21 → sourcecode-5.8.23}/hatch_build.py +0 -0
  165. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/compare_integration_engines.py +0 -0
  166. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/customer_smoke_test.sh +0 -0
  167. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/generate_jdk_exports.py +0 -0
  168. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/perf_gate.py +0 -0
  169. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/perf_harness.py +0 -0
  170. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/sync_gate_anchors.py +0 -0
  171. {sourcecode-5.8.21 → sourcecode-5.8.23}/scripts/test_fast.sh +0 -0
  172. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/adaptive_scanner.py +0 -0
  173. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/answer_bounds.py +0 -0
  174. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/archetype.py +0 -0
  175. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/architectural_baseline.py +0 -0
  176. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/architectural_delta.py +0 -0
  177. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/architecture_analyzer.py +0 -0
  178. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/architecture_summary.py +0 -0
  179. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/ast_extractor.py +0 -0
  180. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/audit_clusters.py +0 -0
  181. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/audit_recipe.py +0 -0
  182. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/audit_report.py +0 -0
  183. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/audit_since.py +0 -0
  184. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/baseline_autocapture.py +0 -0
  185. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/breaking_changes.py +0 -0
  186. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/build_modules.py +0 -0
  187. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/bundled_docs.py +0 -0
  188. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/cache.py +0 -0
  189. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/call_surface.py +0 -0
  190. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/caller_metrics.py +0 -0
  191. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/caller_reach.py +0 -0
  192. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/canonical_ir.py +0 -0
  193. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/chain_rules.py +0 -0
  194. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/change_plan.py +0 -0
  195. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/cir_graphs.py +0 -0
  196. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/classifier.py +0 -0
  197. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/client_calls.py +0 -0
  198. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/code_notes_analyzer.py +0 -0
  199. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/compare.py +0 -0
  200. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/confidence_analyzer.py +0 -0
  201. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/constraint_diff.py +0 -0
  202. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/consumer_join.py +0 -0
  203. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/container_wiring.py +0 -0
  204. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/context_cache.py +0 -0
  205. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/context_graph.py +0 -0
  206. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/context_scorer.py +0 -0
  207. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/context_summarizer.py +0 -0
  208. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/contract_diff.py +0 -0
  209. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/contract_init.py +0 -0
  210. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/contract_model.py +0 -0
  211. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/contract_pipeline.py +0 -0
  212. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/coverage_parser.py +0 -0
  213. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/data_exposure.py +0 -0
  214. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/data_labels.py +0 -0
  215. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/declarations.py +0 -0
  216. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/defect_classes/__init__.py +0 -0
  217. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/defect_classes/registry.json +0 -0
  218. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/defect_identity.py +0 -0
  219. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/degradation.py +0 -0
  220. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/dependency_analyzer.py +0 -0
  221. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/deployment_prefix.py +0 -0
  222. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detach.py +0 -0
  223. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/__init__.py +0 -0
  224. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/base.py +0 -0
  225. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/csproj_parser.py +0 -0
  226. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/dart.py +0 -0
  227. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/dotnet.py +0 -0
  228. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/elixir.py +0 -0
  229. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/go.py +0 -0
  230. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/heuristic.py +0 -0
  231. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/hybrid.py +0 -0
  232. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/java.py +0 -0
  233. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/jvm_ext.py +0 -0
  234. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/nodejs.py +0 -0
  235. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/parsers.py +0 -0
  236. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/php.py +0 -0
  237. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/project.py +0 -0
  238. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/python.py +0 -0
  239. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/ruby.py +0 -0
  240. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/rust.py +0 -0
  241. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/systems.py +0 -0
  242. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/terraform.py +0 -0
  243. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/detectors/tooling.py +0 -0
  244. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/doc_analyzer.py +0 -0
  245. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/dynamic_argument_surface.py +0 -0
  246. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/empty_reach.py +0 -0
  247. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/endpoint_disposition.py +0 -0
  248. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/endpoint_literals.py +0 -0
  249. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/endpoint_metrics.py +0 -0
  250. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/entrypoint_classifier.py +0 -0
  251. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/env_analyzer.py +0 -0
  252. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/environment_resolution.py +0 -0
  253. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/evidence_provider.py +0 -0
  254. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/execution_plan.py +0 -0
  255. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/explain.py +0 -0
  256. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/explain_endpoint.py +0 -0
  257. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/facts/__init__.py +0 -0
  258. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/facts/registry.json +0 -0
  259. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/field_deprecations.py +0 -0
  260. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/file_chunker.py +0 -0
  261. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/file_classifier.py +0 -0
  262. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/filter_surface.py +0 -0
  263. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/fqn_utils.py +0 -0
  264. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/functional_routes.py +0 -0
  265. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/gate_anchors.py +0 -0
  266. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/git_analyzer.py +0 -0
  267. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/git_checkout.py +0 -0
  268. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/github_diff.py +0 -0
  269. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/graph_analyzer.py +0 -0
  270. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/graph_evidence.py +0 -0
  271. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/hibernate_strat.py +0 -0
  272. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/identity_fallback.py +0 -0
  273. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/integration_coordinates.py +0 -0
  274. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/jdk_exports.py +0 -0
  275. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/license.py +0 -0
  276. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/manifest_cache.py +0 -0
  277. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/__init__.py +0 -0
  278. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/dependency_import.py +0 -0
  279. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  280. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  281. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  282. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  283. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  284. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/orchestrator.py +0 -0
  285. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/registry.py +0 -0
  286. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp/runner.py +0 -0
  287. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/mcp_nudge.py +0 -0
  288. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/metrics_analyzer.py +0 -0
  289. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/migrate_check.py +0 -0
  290. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/migration_apply.py +0 -0
  291. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/migration_blast.py +0 -0
  292. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/openapi_surface.py +0 -0
  293. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/openrewrite_recipe.py +0 -0
  294. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/output_budget.py +0 -0
  295. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/output_encoding.py +0 -0
  296. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/output_sink.py +0 -0
  297. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/parallel.py +0 -0
  298. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/parse_cache.py +0 -0
  299. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/partial_contract.py +0 -0
  300. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/path_admission.py +0 -0
  301. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/path_filters.py +0 -0
  302. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/phased_run.py +0 -0
  303. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/pipe_contract.py +0 -0
  304. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/posture.py +0 -0
  305. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/pr_comment_renderer.py +0 -0
  306. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/pr_impact.py +0 -0
  307. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/prepare_context.py +0 -0
  308. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/product_info.py +0 -0
  309. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/progress.py +0 -0
  310. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/provenance.py +0 -0
  311. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/ranking_engine.py +0 -0
  312. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/readiness_timeline.py +0 -0
  313. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/readonly.py +0 -0
  314. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/reconciliation.py +0 -0
  315. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/redactor.py +0 -0
  316. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/reference_facts.py +0 -0
  317. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/regress.py +0 -0
  318. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/release_info.py +0 -0
  319. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/relevance_scorer.py +0 -0
  320. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/remediation_diff.py +0 -0
  321. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/remedies.py +0 -0
  322. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/rename_refactor.py +0 -0
  323. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/repo_classifier.py +0 -0
  324. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/repository_ir.py +0 -0
  325. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/resource_budget.py +0 -0
  326. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/__init__.py +0 -0
  327. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/context.py +0 -0
  328. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/errors.py +0 -0
  329. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/executor.py +0 -0
  330. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/planner.py +0 -0
  331. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/query.py +0 -0
  332. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/request.py +0 -0
  333. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/resolution.py +0 -0
  334. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/result.py +0 -0
  335. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/retriever.py +0 -0
  336. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/runtime.py +0 -0
  337. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps.py +0 -0
  338. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  339. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_graph.py +0 -0
  340. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_impact.py +0 -0
  341. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_intf.py +0 -0
  342. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_struct.py +0 -0
  343. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  344. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/ris.py +0 -0
  345. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/risk_model.py +0 -0
  346. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/rule_catalog.py +0 -0
  347. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/rule_pass.py +0 -0
  348. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/runs.py +0 -0
  349. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/runtime_classifier.py +0 -0
  350. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/sarif.py +0 -0
  351. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/scanner.py +0 -0
  352. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schema.py +0 -0
  353. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schema_producers.py +0 -0
  354. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  355. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  356. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  357. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  358. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  359. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  360. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/security_chain.py +0 -0
  361. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/security_config.py +0 -0
  362. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/security_config_scan.py +0 -0
  363. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/security_posture.py +0 -0
  364. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/selection_contract.py +0 -0
  365. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/semantic_analyzer.py +0 -0
  366. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/semantic_impact_engine.py +0 -0
  367. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/semantic_integration_engine.py +0 -0
  368. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/semantic_services.py +0 -0
  369. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/serializer.py +0 -0
  370. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/servlet_surface.py +0 -0
  371. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/source_text.py +0 -0
  372. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_event_topology.py +0 -0
  373. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_findings.py +0 -0
  374. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_impact.py +0 -0
  375. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_profiles.py +0 -0
  376. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_properties.py +0 -0
  377. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_security_audit.py +0 -0
  378. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_semantic.py +0 -0
  379. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/spring_tx_analyzer.py +0 -0
  380. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/sql_taint.py +0 -0
  381. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/summarizer.py +0 -0
  382. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/target_admission.py +0 -0
  383. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/__init__.py +0 -0
  384. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/config.py +0 -0
  385. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/consent.py +0 -0
  386. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/events.py +0 -0
  387. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/filters.py +0 -0
  388. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/telemetry/transport.py +0 -0
  389. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/test_gap_ranking.py +0 -0
  390. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/test_sources.py +0 -0
  391. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/text_input.py +0 -0
  392. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/timeline.py +0 -0
  393. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/timeline_cache.py +0 -0
  394. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/token_estimate.py +0 -0
  395. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/tree_utils.py +0 -0
  396. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/type_usage_surface.py +0 -0
  397. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/validation_inference.py +0 -0
  398. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/validation_surface.py +0 -0
  399. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/verify_edit.py +0 -0
  400. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/verify_repo.py +0 -0
  401. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/verify_rules.py +0 -0
  402. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/version_check.py +0 -0
  403. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/waivers.py +0 -0
  404. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/wired_surface.py +0 -0
  405. {sourcecode-5.8.21 → sourcecode-5.8.23}/src/sourcecode/workspace.py +0 -0
  406. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/functions/README.md +0 -0
  407. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/functions/get-license/index.ts +0 -0
  408. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  409. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/functions/telemetry/index.ts +0 -0
  410. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/sql/license_event_ordering.sql +0 -0
  411. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/sql/licensing_schema.sql +0 -0
  412. {sourcecode-5.8.21 → sourcecode-5.8.23}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,5 +1,88 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.8.23] — 2026-08-22
4
+
5
+ *The external corpus follow-up is closed: pack output is durable by default,
6
+ the gate verdict matrix is covered, and the 37-repository read-only baseline is
7
+ recorded without overstating the seven scale-limited cases.*
8
+
9
+ ### Fixed
10
+
11
+ - **Pack aggregate persistence (`AUD-599-C01`)** — `--output-dir` now writes
12
+ the aggregate as `pack.json`, `pack.yaml` or `pack.md`; an explicit
13
+ `--output FILE` remains authoritative.
14
+ - **Gate verdict coverage (`AUD-599-T01`)** — controlled tests distinguish
15
+ `PASS`, `BLOCK` and `UNVERIFIED` without conflating their exit codes.
16
+ - **Corpus audit follow-up (`AUD-599-P01`, `AUD-599-Q01`)** — the baseline and
17
+ before/after Git snapshots for all 37 repositories are documented. The seven
18
+ repeated timeouts are classified as a scale limitation, not claimed as a
19
+ regression without a comparable phase-level baseline.
20
+
21
+ ## [5.8.22] — 2026-08-22
22
+
23
+ *The eleventh audit-pass queue is closed entire: all fourteen open rows shipped
24
+ as separate commits, regressions first, with the full suite green at 12 176
25
+ tests. Four reported mechanisms are corrected against measurement and one half
26
+ of one row is refused with its price on the record.*
27
+
28
+ ### Fixed — the two regressions the pass led with
29
+
30
+ - **Root help (`AUD-597-R01`)** — `ask --help` went to 177.4 s in the field
31
+ because the page is *recursive* through the Typer→Click conversion: one
32
+ `--help` rebuilt the whole command tree 249 times. The tree is built once per
33
+ process. Measured here: **13.3 s → 0.45 s**.
34
+ - **Self-check encoding and exit (`AUD-597-R02`)** — `selftest` decoded its
35
+ children with the host locale, so on a `cp1252` host three checks died with
36
+ tracebacks and the command still exited 0. Children are read as UTF-8, an
37
+ unreadable stream is no longer a traceback, and `summary.error > 0` exits 75.
38
+ The battery now asserts its own exit contract as a ledger row.
39
+
40
+ ### Fixed — bounding, identity and determinism
41
+
42
+ - **Bounded is never larger (`AUD-597-R03`)** — `--compact` could grow a payload,
43
+ because a cut's disclosure outweighed the rows it replaced. The trade is
44
+ measured at each cut; a bounded answer is never the larger one, asserted over
45
+ the whole bounded-flag population. `--limit N` is still answered literally.
46
+ - **Build provenance (`AUD-597-X01`)** — the generated commit stamp is declared a
47
+ wheel artifact, so an installed build can name the tree it came from. Proved
48
+ from the built wheel, not from a checkout.
49
+ - **Front page (`AUD-597-A01`)** — every recommended line carries the bounding
50
+ flag its own command declares, typed with a value where the flag needs one, and
51
+ the comment column is padded after the substitution.
52
+ - **Smaller answers (`AUD-597-A02`)** — the output ceiling learns that a smaller
53
+ answer can be a *mode*, so `export --c4` offers its three sections; and
54
+ `rename-class --dry-run` prints its plan without the diffs, so the most
55
+ destructive command in the product can be previewed.
56
+ - **Bean population (`AUD-597-A03`)** — a class's stereotype was picked out of a
57
+ Python set, so the bean population moved with the per-process hash seed. The
58
+ choice takes a declared rank; every Spring stereotype outranks every JPA one.
59
+
60
+ ### Fixed — contracts, grammar and disclosure
61
+
62
+ - **Ledger coherence (`AUD-597-A04`)** — a row declared closed in this document's
63
+ own prose can no longer ship reading `open`, and a closure declaration must
64
+ name its rows unambiguously.
65
+ - **Analysis budget (`AUD-597-D01`)** — the help names the commands the budget
66
+ *stops* and the commands it only *advises*, instead of calling all eight a
67
+ deadline. The gating flags are asserted over the population that can gate.
68
+ - **Mutually exclusive hints (`AUD-597-D02`)** — `delta` and `contract-diff` no
69
+ longer answer "not both" with a hint containing both.
70
+ - **Partial timings (`AUD-597-D04`)** — a phase the run declares complete is
71
+ charged for its own duration, so `unaccounted_pct` on a partial answer means
72
+ what it means on a full one.
73
+ - **Option suggestions (`AUD-597-D05`)** — suggestions come from this product's
74
+ guarded matcher rather than the parser's, and the guard measures a real edit
75
+ distance; where nothing is plausible, the hint names what the command takes.
76
+ - **One repository grammar (`AUD-597-D06`)** — `--path`, `--repo` and `--dir` are
77
+ accepted everywhere as aliases for the positional repository argument, with no
78
+ payload change and without overriding a command that declares one already.
79
+ - **Query sink scope (`AUD-597-D07`)** — the vocabulary states that it composes an
80
+ existing finding and does not originate one, so an absent row is not published
81
+ as safety.
82
+ - **Exit-code contract (`AUD-596-D11`, residual)** — the rule that closed that row
83
+ shipped without the batteries that assert it, leaving 23 tests red against the
84
+ build that fixed them. `error_schema.EXIT_CODE_FOR` publishes the table.
85
+
3
86
  ## [5.8.21] — 2026-08-22
4
87
 
5
88
  *The tenth audit-pass queue is closed: seven remaining P3 fixes shipped as
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.21
3
+ Version: 5.8.23
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
@@ -58,7 +58,7 @@ Description-Content-Type: text/markdown
58
58
  > question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
59
59
  > before inspecting a repository whose telemetry policy you need to control.
60
60
 
61
- ![Version](https://img.shields.io/badge/version-5.8.21-blue)
61
+ ![Version](https://img.shields.io/badge/version-5.8.23-blue)
62
62
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
63
63
 
64
64
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -78,6 +78,48 @@ Every time an AI coding agent starts a new session, it has to re-parse the repos
78
78
 
79
79
  ASK Engine solves this with a persistent structural cache keyed on file content hashes. After the first scan, later invocations reuse pre-built context whenever their command can consume the warmed layers. The repo doesn't change? The cache doesn't expire.
80
80
 
81
+ ## Product route: individual commands and packs
82
+
83
+ ASK Engine keeps individual commands for precise, scriptable questions and adds
84
+ workflow-shaped packs for users who want one consumable result:
85
+
86
+ ```bash
87
+ ask pack assessment . --profile prod --output-dir .ask/packs/assessment
88
+ ask pack gate . --since origin/main --output-dir .ask/packs/gate
89
+ ask pack assessment . --format markdown -o assessment.md
90
+ ```
91
+
92
+ For deployment-aware posture evidence, pass the artefacts that describe the
93
+ environment being assessed:
94
+
95
+ ```bash
96
+ ask pack assessment . --deployment k8s/deployment-prod.yaml \
97
+ --output-dir .ask/packs/assessment
98
+ ```
99
+
100
+ The gate also renders native CI log annotations without changing its JSON
101
+ contract:
102
+
103
+ ```bash
104
+ ask pack gate . --since origin/main --format github-actions
105
+ ask pack gate . --since origin/main --format gitlab
106
+ ```
107
+
108
+ `PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
109
+ the CI signal; `--allow-unverified` can change only that exit code, never the
110
+ reported verdict. Every pack carries a manifest with component invocations,
111
+ source evidence and content fingerprints.
112
+
113
+ The [Product Route](docs/PRODUCT-ROUTE.md) is normative: ASK focuses on
114
+ deterministic evidence for Java/Spring modernization and safe change. Packs
115
+ compose existing commands; they do not hide or replace them.
116
+
117
+ For agent integrations, local MCP exposes the same pack evidence through
118
+ `get_assessment_pack` and `get_change_safety_gate`. MCP defaults to a compact
119
+ projection that preserves the decision and manifest; use the CLI with
120
+ `--output-dir` to persist complete component artifacts. See
121
+ [MCP pack evidence](docs/architecture/DESIGN-pack-mcp-api.md).
122
+
81
123
  **The cache is not a performance optimization. It is what makes ASK Engine usable as infrastructure rather than a one-off tool.**
82
124
 
83
125
  ---
@@ -134,7 +176,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
134
176
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
135
177
  unset, or set it to `0`, to disable the ceiling explicitly.
136
178
 
137
- **Current performance status.** Release 5.8.21 retains the shared Canonical IR
179
+ **Current performance status.** Release 5.8.23 retains the shared Canonical IR
138
180
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
139
181
  runs; the no-label path remains parse-free. The one-model-per-declared-label path is
140
182
  also retained. These are implementation properties, not duration promises:
@@ -168,7 +210,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
168
210
  # pip / pipx
169
211
  pipx install sourcecode # or: pip install sourcecode
170
212
 
171
- ask version # ask 5.8.21 — and, on a build that has aged,
213
+ ask version # ask 5.8.23 — and, on a build that has aged,
172
214
  # how many releases have probably shipped since
173
215
  ```
174
216
 
@@ -649,6 +691,8 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
649
691
 
650
692
  ## Documentation
651
693
 
694
+ - [Product Route](docs/PRODUCT-ROUTE.md) — individual commands, packs, evidence contract and boundaries
695
+
652
696
  | Doc | What it covers |
653
697
  |-----|----------------|
654
698
  | [USER_GUIDE.md](docs/USER_GUIDE.md) | Full command reference, flags, output schema, workflows |
@@ -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.21-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.8.23-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
@@ -30,6 +30,48 @@ Every time an AI coding agent starts a new session, it has to re-parse the repos
30
30
 
31
31
  ASK Engine solves this with a persistent structural cache keyed on file content hashes. After the first scan, later invocations reuse pre-built context whenever their command can consume the warmed layers. The repo doesn't change? The cache doesn't expire.
32
32
 
33
+ ## Product route: individual commands and packs
34
+
35
+ ASK Engine keeps individual commands for precise, scriptable questions and adds
36
+ workflow-shaped packs for users who want one consumable result:
37
+
38
+ ```bash
39
+ ask pack assessment . --profile prod --output-dir .ask/packs/assessment
40
+ ask pack gate . --since origin/main --output-dir .ask/packs/gate
41
+ ask pack assessment . --format markdown -o assessment.md
42
+ ```
43
+
44
+ For deployment-aware posture evidence, pass the artefacts that describe the
45
+ environment being assessed:
46
+
47
+ ```bash
48
+ ask pack assessment . --deployment k8s/deployment-prod.yaml \
49
+ --output-dir .ask/packs/assessment
50
+ ```
51
+
52
+ The gate also renders native CI log annotations without changing its JSON
53
+ contract:
54
+
55
+ ```bash
56
+ ask pack gate . --since origin/main --format github-actions
57
+ ask pack gate . --since origin/main --format gitlab
58
+ ```
59
+
60
+ `PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
61
+ the CI signal; `--allow-unverified` can change only that exit code, never the
62
+ reported verdict. Every pack carries a manifest with component invocations,
63
+ source evidence and content fingerprints.
64
+
65
+ The [Product Route](docs/PRODUCT-ROUTE.md) is normative: ASK focuses on
66
+ deterministic evidence for Java/Spring modernization and safe change. Packs
67
+ compose existing commands; they do not hide or replace them.
68
+
69
+ For agent integrations, local MCP exposes the same pack evidence through
70
+ `get_assessment_pack` and `get_change_safety_gate`. MCP defaults to a compact
71
+ projection that preserves the decision and manifest; use the CLI with
72
+ `--output-dir` to persist complete component artifacts. See
73
+ [MCP pack evidence](docs/architecture/DESIGN-pack-mcp-api.md).
74
+
33
75
  **The cache is not a performance optimization. It is what makes ASK Engine usable as infrastructure rather than a one-off tool.**
34
76
 
35
77
  ---
@@ -86,7 +128,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
86
128
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
87
129
  unset, or set it to `0`, to disable the ceiling explicitly.
88
130
 
89
- **Current performance status.** Release 5.8.21 retains the shared Canonical IR
131
+ **Current performance status.** Release 5.8.23 retains the shared Canonical IR
90
132
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
91
133
  runs; the no-label path remains parse-free. The one-model-per-declared-label path is
92
134
  also retained. These are implementation properties, not duration promises:
@@ -120,7 +162,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
120
162
  # pip / pipx
121
163
  pipx install sourcecode # or: pip install sourcecode
122
164
 
123
- ask version # ask 5.8.21 — and, on a build that has aged,
165
+ ask version # ask 5.8.23 — and, on a build that has aged,
124
166
  # how many releases have probably shipped since
125
167
  ```
126
168
 
@@ -601,6 +643,8 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
601
643
 
602
644
  ## Documentation
603
645
 
646
+ - [Product Route](docs/PRODUCT-ROUTE.md) — individual commands, packs, evidence contract and boundaries
647
+
604
648
  | Doc | What it covers |
605
649
  |-----|----------------|
606
650
  | [USER_GUIDE.md](docs/USER_GUIDE.md) | Full command reference, flags, output schema, workflows |
@@ -0,0 +1,96 @@
1
+ # ASK Engine 5.8.22: auditoría metodológica y de regresión
2
+
3
+ **Fecha:** 2026-08-22
4
+ **Artefacto auditado:** release `5.8.22`, `build_commit`
5
+ `583c07c405358d3e76dd20968960f5ab928608fd`
6
+ **Sujeto principal:** MSAS / `banyan-v2`, HEAD `3dde0376`, 3.342 ficheros Java
7
+ **Registro relacionado:** [`docs/DEFECT-LEDGER.md`](DEFECT-LEDGER.md), entrada
8
+ `AUD-598-X01` y filas derivadas
9
+
10
+ ## Alcance y método
11
+
12
+ Se consolidan dos rondas independientes sobre la misma release:
13
+
14
+ - Ronda A: MSAS, 57 invocaciones, 52 cronometradas, 3 `pr-impact` y 5 ayudas,
15
+ `ASK_READONLY=1`, presupuesto explícito y 0 escrituras.
16
+ - Ronda B: banco de 16 repositorios Java/Spring, unas 95 invocaciones, Windows
17
+ 11 Pro, pipx y Git Bash.
18
+
19
+ Ambas rondas comprobaron estado Git antes y después. No se observaron
20
+ tracebacks, regresiones funcionales ni escrituras no autorizadas.
21
+
22
+ ## Resultado ejecutivo
23
+
24
+ | Ronda | Resultado | Veredicto del auditor |
25
+ |---|---:|---|
26
+ | A | `8.58/10` | Comprar y actualizar |
27
+ | B | `8.8/10` | Adoptar sin reservas |
28
+
29
+ La mejora es válida para fiabilidad y rendimiento general, pero no autoriza a
30
+ cerrar automáticamente defectos del ledger. La propia auditoría demuestra que
31
+ el artefacto empaquetado puede no contener los cierres que el árbol de trabajo
32
+ declara.
33
+
34
+ ## Confirmado cerrado
35
+
36
+ - `ask --help`: la regresión de reconstrucción del árbol Click queda corregida.
37
+ - `selftest`: 12 filas, 0 errores y 0 bytes de stderr en la ronda de campo.
38
+ - Determinismo de `posture`: `population_total=1908` y
39
+ `unconditional=1903` en cinco ejecuciones.
40
+ - Las regresiones de 5.8.21 sobre `compare`, `endpoints --servlets` e `impact`
41
+ no reaparecen.
42
+ - No-regresión funcional en el barrido de cierres anteriores.
43
+
44
+ Estos cierres permanecen en el ledger histórico con su commit. No se duplican
45
+ como nuevas filas.
46
+
47
+ ## Hallazgos abiertos
48
+
49
+ El estado siguiente es el que debe usarse para planificación y release:
50
+
51
+ | ID | Estado | Hallazgo |
52
+ |---|---|---|
53
+ | `AUD-598-R01` / `ASK-PERF-002` | `open` | `ask . --compact` sube a 214,6 s frente a 154,0 s en 5.8.21, con payload byte-identical; es una regresión condicionada a esa vista/escala. |
54
+ | `AUD-598-X01` | `open` | El ledger del producto va por delante del wheel: cinco cierres declarados no se observan en el artefacto `583c07c`. |
55
+ | `AUD-598-B01` / `ASK-META-001` | `open` | La auditoría de wheel no observa `_meta`, `content_id` ni memoria en 9/9 payloads inspeccionados. Debe resolverse dentro de un wheel construido, no sólo en checkout. |
56
+ | `AUD-598-B02` / `ASK-UX-002` | `open` | `posture --diff` ofrece `--compact` y `--limit`, pero ambos son no-op en el caso medido y los hints forman un ciclo. |
57
+ | `AUD-598-B03` / `B-11` | `open` | Persisten 17 anclas de coste con texto `on 5.1.0` dentro de un build 5.8.22; además `risk` no alcanza su ancla publicada en MSAS. |
58
+ | `AUD-598-B04` / `N-02` | `open` parcial | `1e9` y `1_000` son presupuestos válidos, pero se aceptan sin advertir que no vincularán el proceso. |
59
+
60
+ ## Cierres que el artefacto no confirma
61
+
62
+ La auditoría identifica cinco testigos de `AUD-598-X01`:
63
+
64
+ - `AUD-597-A01` / `N-01`: cuatro de cinco líneas de `Runs now` siguen sin
65
+ bounding flag en el wheel.
66
+ - `AUD-596-D01` / `B-13`, `B-14`: `validation` y `data-exposure` carecen de
67
+ identidad y `schema_version`; además se repite un hash entre repositorios.
68
+ - `AUD-596-D10` / `B-29`: no aparece memoria en cinco payloads completos.
69
+ - `AUD-597-D03` / `N-06`: `route_surface_changed.source_file` es `""` y no
70
+ lleva `declaration_line`.
71
+
72
+ La interpretación documentada no es mala fe ni una nueva regresión funcional:
73
+ el ledger y el wheel proceden de estados distintos. La corrección requerida es
74
+ hacer que el build genere y compruebe la relación entre `build_commit` y cada
75
+ commit de cierre antes de publicar.
76
+
77
+ ## Observaciones no convertidas en defectos nuevos
78
+
79
+ - `ASK-GATE-001`: `migrate-check --ci` y `migrate-apply --ci` siguen rechazados
80
+ porque son `advisory_only`; la documentación conserva ese precio y no los
81
+ presenta como gates que puedan fallar.
82
+ - `B-22`: la declaración de `compare` mejoró, pero el residuo de `rc=0` con
83
+ cero candidatos se mantiene en su fila histórica.
84
+ - `B-21`, `B-26`, `B-27` y `B-30` siguen siendo residuos abiertos ya mapeados a
85
+ `AUD-596-X02`, `ASK-17`, `C3-128` y la superficie contractual,
86
+ respectivamente.
87
+ - `N-04` y `ASK-CLI-001` conservan residuos de mensaje/diseño ya trazados en
88
+ sus filas; no se cierran por la mejora parcial del coste.
89
+
90
+ ## Regla de release
91
+
92
+ Hasta que `AUD-598-X01` se cierre, una fila no debe marcarse `closed` sólo
93
+ porque el commit de la corrección exista en el checkout. El cierre requiere
94
+ identificar el wheel o artefacto instalado, comprobar que contiene el commit y
95
+ reproducir el comportamiento o declarar explícitamente que se cerró contra un
96
+ fixture distinto del testigo original.
@@ -0,0 +1,228 @@
1
+ # Auditoría de features contra el corpus `testing`
2
+
3
+ **Fecha:** 2026-08-22
4
+ **Producto auditado:** ASK Engine en el checkout actual
5
+ **Propósito:** probar las features nuevas de packs, manifests, gates, artefactos,
6
+ MCP y evidencia de despliegue contra repositorios reales, antes de iniciar la
7
+ batería de correcciones.
8
+
9
+ ## Veredicto ejecutivo
10
+
11
+ La implementación es funcional en el caso normal y no se ha confirmado una
12
+ regresión de análisis, de determinismo ni de los adaptadores MCP/CI. En la
13
+ batería completa, 30 de 37 repositorios produjeron un pack de assessment
14
+ completo (`MEASURED`, seis componentes, `rc=0`). Los siete restantes agotaron el
15
+ presupuesto externo de 120 segundos sin producir el agregado final.
16
+
17
+ La batería encontró y reprodujo un gap de contrato/ergonomía: usar únicamente
18
+ `--output-dir` dejaba el agregado en stdout. Ese gap queda corregido en el
19
+ checkout actual: el agregado se escribe ahora como `pack.json` (o la extensión
20
+ del formato solicitado), mientras que `--output FILE` explícito conserva
21
+ prioridad.
22
+
23
+ Este documento no convierte los siete timeouts en una regresión: no existe una
24
+ medición comparable anterior con el mismo corpus, host, flags y presupuesto.
25
+ La repetición completa con snapshots antes/después confirmó que son un límite
26
+ operativo repetible del corpus, no una mutación atribuible a ASK. El baseline
27
+ queda en [`docs/perf/corpus-testing-2026-08-22.md`](perf/corpus-testing-2026-08-22.md).
28
+
29
+ ## Protocolo reproducible
30
+
31
+ Todas las invocaciones se ejecutaron en modo de sólo lectura:
32
+
33
+ ```text
34
+ ASK_READONLY=1 ASK_TELEMETRY=0 ASK_PROGRESS=off
35
+ ask pack assessment REPO --compact --format json \
36
+ --output /tmp/assessment.json \
37
+ --output-dir /tmp/assessment-components
38
+ ```
39
+
40
+ Se usaron procesos aislados, salidas fuera del repositorio y un timeout externo
41
+ de 120 s por repositorio en la batería completa. El timeout es una condición de
42
+ la prueba, no el valor de `ASK_MAX_ANALYSIS_SECONDS` ni una afirmación sobre el
43
+ presupuesto interno de cada comando.
44
+
45
+ La batería completa cubrió 37 repositorios Git de
46
+ `/Users/user/Documents/workspace/testing`. El corpus no estaba limpio de forma
47
+ homogénea y no se tomó una instantánea de `git status` antes de comenzar; por
48
+ tanto, la prueba no permite atribuir a ASK los cambios ya existentes en esos
49
+ repositorios. Las salidas y resúmenes temporales se conservaron bajo
50
+ `/private/tmp/ask-testing-all*` y `/private/tmp/ask-testing-deep*`, no como
51
+ artefactos del producto.
52
+
53
+ ## Resultado de la batería completa
54
+
55
+ | Resultado | Repositorios | Interpretación |
56
+ |---|---:|---|
57
+ | Pack completo | 30/37 | `ask-pack-assessment-v1`, `MEASURED`, `rc=0`, seis componentes y agregado parseable |
58
+ | Timeout externo | 7/37 | Sin agregado final dentro de 120 s; requiere baseline y profiling |
59
+ | Traceback observado | 0 | No se observó traceback en los procesos que terminaron ni en la captura de los timeouts |
60
+ | Escritura intencionada | 0 | `ASK_READONLY=1`; la ausencia de snapshot inicial impide certificar causalidad sobre dirty trees |
61
+
62
+ Los siete repositorios que no terminaron dentro del presupuesto fueron:
63
+
64
+ - `alfresco-community-repo`
65
+ - `cas`
66
+ - `keycloak`
67
+ - `nacos`
68
+ - `neo4j`
69
+ - `shenyu`
70
+ - `tutorials`
71
+
72
+ El resultado debe leerse como “30 casos completados y 7 casos no resueltos en
73
+ este presupuesto”, no como “7 fallos funcionales”.
74
+
75
+ ## Muestra profunda corregida
76
+
77
+ Se repitió una muestra de ocho repositorios con un timeout de 180 s y con
78
+ `--output` explícito para separar el agregado de stdout:
79
+
80
+ | Repositorio | Tiempo | Resultado |
81
+ |---|---:|---|
82
+ | `spring-petclinic` | 4,85 s | Completo, `MEASURED`, 6 componentes |
83
+ | `examples` | 6,33 s | Completo, `MEASURED`, 6 componentes |
84
+ | `keycloak-config-cli` | 9,07 s | Completo, `MEASURED`, 6 componentes |
85
+ | `mall` | 28,42 s | Completo, `MEASURED`, 6 componentes |
86
+ | `halo` + `--deployment Dockerfile` | 28,83 s | Completo, `MEASURED`, 6 componentes |
87
+ | `open-banking-gateway` + `--deployment docker-compose.yml` | 24,07 s | Completo, `MEASURED`, 6 componentes |
88
+ | `BroadleafCommerce` | 68,47 s | Completo, `MEASURED`, 6 componentes |
89
+ | `spring-security` | 59,12 s | Completo, `MEASURED`, 6 componentes |
90
+
91
+ En los ocho casos se generaron el agregado y los seis JSON de componente.
92
+ Esto confirma que el problema de la primera pasada de la muestra grande no
93
+ era un fallo del análisis: era la ruta de salida del agregado.
94
+
95
+ ## Hallazgo reproducible: salida agregada con `--output-dir`
96
+
97
+ ### Síntoma
98
+
99
+ La primera pasada de la muestra profunda usó `--output-dir` sin `--output`.
100
+ Cuatro repositorios terminaron con `rc=1`, error `OUTPUT_TOO_LARGE` y el
101
+ agregado sin persistir:
102
+
103
+ | Repositorio | Estimación del agregado |
104
+ |---|---:|
105
+ | `mall` | 481.677 tokens / 1.926.709 bytes |
106
+ | `spring-security` | 83.077 tokens / 332.310 bytes |
107
+ | `open-banking-gateway` | 93.781 tokens / 375.127 bytes |
108
+ | `BroadleafCommerce` | 377.907 tokens / 1.511.628 bytes |
109
+
110
+ El error informa que no hay una variante inline menor y recomienda `--output
111
+ FILE` o `ASK_MAX_OUTPUT_TOKENS=0`. Al repetir con `--output FILE`, los cuatro
112
+ repositorios completaron correctamente.
113
+
114
+ ### Clasificación
115
+
116
+ `AUD-599-C01` — **P2, gap de contrato/ergonomía, corregido en el checkout actual**.
117
+
118
+ No era una falsedad del payload ni una pérdida de evidencia: los componentes sí
119
+ se escribían. La implementación ahora hace persistente también el agregado con
120
+ un nombre determinista y mantiene la ruta explícita como autoridad superior.
121
+ La regresión de CLI cubre ambas rutas.
122
+
123
+ ## Contratos comprobados
124
+
125
+ ### Assessment pack
126
+
127
+ - Los 30 resultados completos publicaron `ask-pack-assessment-v1`.
128
+ - Cada resultado completo publicó seis componentes y fingerprints
129
+ `content_id`.
130
+ - El catálogo `ask pack list --format json` publicó
131
+ `ask-pack-catalog-v1`, con los packs `assessment` y `gate`.
132
+ - `ask schema schemas-v1 --format json` resolvió
133
+ `ask-pack-assessment-v1`, `ask-pack-gate-v1` y
134
+ `ask-pack-mcp-projection-v1`.
135
+
136
+ ### Gate y códigos de salida
137
+
138
+ En la muestra profunda, `pack gate REPO --since HEAD~1` produjo
139
+ `ask-pack-gate-v1`, tres artefactos y `verdict=UNVERIFIED`, `exit_code=2`.
140
+ Esto es correcto para una verificación no certificable; no se debe presentar
141
+ como PASS ni como un bug. La muestra no cubrió un caso positivo `PASS`, por lo
142
+ que ese camino queda pendiente de una fixture controlada.
143
+
144
+ ### CI renderers
145
+
146
+ Los renderers de GitHub Actions y GitLab se probaron en
147
+ `spring-petclinic`, `halo` y `open-banking-gateway`.
148
+
149
+ - GitHub produjo anotaciones `::warning`/`::notice` válidas y la línea final
150
+ `ASK_GATE verdict=UNVERIFIED exit_code=2`.
151
+ - GitLab produjo `section_start`, líneas `ASK_GATE_COMPONENT`, línea final
152
+ `ASK_GATE` y `section_end`.
153
+
154
+ El chequeo inicial que esperaba literalmente `::group::` era incorrecto: ese
155
+ token no es requisito del renderer y su ausencia no es un defecto.
156
+
157
+ ### MCP
158
+
159
+ Las llamadas externas sobre `spring-petclinic` devolvieron correctamente:
160
+
161
+ - `get_assessment_pack`: `success=true`,
162
+ `ask-pack-assessment-v1`, proyección
163
+ `ask-pack-mcp-projection-v1`, `MEASURED`.
164
+ - `get_change_safety_gate`: `success=true`, `ask-pack-gate-v1`, la misma
165
+ proyección, `UNVERIFIED`.
166
+
167
+ Ambas conservaron `schema_version`, `verdict`, `exit_code` y `manifest`. No se
168
+ observó pérdida de identidad al adaptar el pack a MCP.
169
+
170
+ ### Determinismo
171
+
172
+ `spring-petclinic` se ejecutó dos veces con los mismos flags. Los seis
173
+ `content_id` fueron idénticos en ambas pasadas:
174
+
175
+ ```text
176
+ migrate-check ae64790941c201de
177
+ posture 84f0efc7c020d72b
178
+ endpoints d3ba88844e0f6c9a
179
+ spring-audit 1cf314c5d323438d
180
+ risk 24ce1698282868ce
181
+ audit-report 4109a5829c4472ac
182
+ ```
183
+
184
+ Los manifests completos no fueron byte-identical porque contienen metadatos de
185
+ ejecución (`run_id` y tiempos), lo que es esperado. La identidad del contenido
186
+ sí fue estable.
187
+
188
+ ### Evidencia de despliegue
189
+
190
+ `Dockerfile` y `docker-compose.yml` se conservaron en `manifest.inputs` en los
191
+ casos de `halo` y `open-banking-gateway`. El payload de posture mantuvo
192
+ honestamente:
193
+
194
+ ```text
195
+ profile_set_is_assumption: true
196
+ decided_in_this_payload: false
197
+ ```
198
+
199
+ Es decir, aceptar el artefacto no implica afirmar qué perfil se ejecuta. No es
200
+ un bug; es la frontera correcta de evidencia cuando el deployment no decide el
201
+ perfil dentro del payload analizado.
202
+
203
+ ## No hallazgos / límites que no deben convertirse en bugs
204
+
205
+ - No se confirmó regresión en el análisis de endpoints, riesgo, postura,
206
+ migración o auditoría a partir de esta batería.
207
+ - Los `UNVERIFIED` del gate no son `BLOCK` falsos: no hubo payload suficiente
208
+ para establecer un bloqueo.
209
+ - La ausencia de un `PASS` en la muestra no demuestra que el camino positivo
210
+ esté roto; sólo indica cobertura pendiente.
211
+ - Los siete timeouts no son una comparación de regresión hasta obtener baseline
212
+ anterior con la misma población y protocolo.
213
+ - Los repositorios con dirty trees no permiten atribuir sus cambios a ASK sin
214
+ un estado inicial capturado.
215
+
216
+ ## Cola para la siguiente fase
217
+
218
+ | Prioridad | ID | Acción previa a corregir |
219
+ |---|---|---|
220
+ | Cerrado | `AUD-599-C01` | Agregado persistido como `pack.<format>` cuando sólo se usa `--output-dir`; test de fallback, prioridad de `--output` y documentación actualizada |
221
+ | Cerrado como límite operativo | `AUD-599-P01` | Baseline de 37 repositorios y repetición completa; no hay regresión demostrada ni optimización defendible sin timings internos comparables |
222
+ | Cerrado en el checkout actual | `AUD-599-T01` | Fixture controlada para `PASS`, `BLOCK` y `UNVERIFIED`, con códigos de salida diferenciados |
223
+ | Cerrado | `AUD-599-Q01` | Segunda batería completa: 37/37 snapshots Git idénticos antes/después |
224
+
225
+ Ninguna fila de esta cola debe marcarse como cerrada hasta que exista una
226
+ corrección, una aserción de regresión y una repetición sobre el artefacto que se
227
+ va a distribuir, conforme a la regla de
228
+ [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md).
@@ -141,6 +141,7 @@ The second anchor is the field one, and it carries its own build for the same re
141
141
  | `mcp` | the shared work | not timed | yes | `snapshot`, `ris`, `cir`, `parse` | Serves the same commands over MCP, with the same layers. |
142
142
  | `schema` | nothing | not timed | no | — | Prints registries; reads no repository. |
143
143
  | `telemetry` | nothing | not timed | no | — | Not an analysis. |
144
+ | `pack` | the shared work | not timed | no | `cir`, `parse` | Composes existing analyses; the pack adds no separate parser. |
144
145
  | `version` | nothing | not timed | no | — | Not an analysis. |
145
146
  <!-- END GENERATED -->
146
147
 
@@ -11,6 +11,16 @@ and [`MODERNIZATION.md`](MODERNIZATION.md) (the flagship product narrative). CLI
11
11
  > deterministically, with the source to prove it. Free on normal repos; Pro when the
12
12
  > work gets enterprise-scale or automated.**
13
13
 
14
+ The commercial route is delivered through two packs while preserving every
15
+ individual command: `ask pack assessment` for modernization and risk discovery,
16
+ and `ask pack gate` for recurring change safety in CI. See
17
+ [`PRODUCT-ROUTE.md`](PRODUCT-ROUTE.md) for the normative scope and evidence
18
+ contract.
19
+
20
+ The assessment can be delivered as JSON evidence for automation or as an
21
+ executive/procurement Markdown report with `--format markdown`; both views are
22
+ renderings of the same measured pack.
23
+
14
24
  The gating axis is **size + automation**, never capability. Nothing is crippled on Free;
15
25
  you pay exactly when the tool is replacing the most engineering time — a monolith above
16
26
  **500 Java source files**, or CI/CD automation. **€19/mo · €190/yr, per developer.**